优化udp通信代码,增加配电系统通信解析,增加能源系统状态定义
This commit is contained in:
@@ -0,0 +1,105 @@
|
|||||||
|
{
|
||||||
|
"workCondition_unit8" : "idel",
|
||||||
|
"currentMod_uint8" : "test",
|
||||||
|
"powerState_uint8" : 1,
|
||||||
|
"faultLevel_uint8" : 0,
|
||||||
|
"faultCode_uint16" : [0,1,2],
|
||||||
|
"soc_uint16" : 10000,
|
||||||
|
"sustainableTime_uint64" : 10000,
|
||||||
|
"fcs_obj":
|
||||||
|
{
|
||||||
|
"state_uint8" : 1,
|
||||||
|
"faultLevel_uint8" : 0,
|
||||||
|
"faultCode_uint16" : 0,
|
||||||
|
"soc" : 1000,
|
||||||
|
"output": 20000,
|
||||||
|
"powerGen" : 30000,
|
||||||
|
"outputLimit" : 30000,
|
||||||
|
"ch4o":1000,
|
||||||
|
"o2":1000,
|
||||||
|
"temp":1000
|
||||||
|
},
|
||||||
|
"InsBat_obj":
|
||||||
|
{
|
||||||
|
"state" : 1,
|
||||||
|
"faultLevel" : 0,
|
||||||
|
"faultCode" : 0,
|
||||||
|
"soc" : 1000,
|
||||||
|
"threshold1": 70,
|
||||||
|
"threshold2": 80,
|
||||||
|
"threshold3": 90
|
||||||
|
},
|
||||||
|
"powBat_obj":
|
||||||
|
{
|
||||||
|
"state" : 1,
|
||||||
|
"faultLevel" : 0,
|
||||||
|
"faultCode" : 0,
|
||||||
|
"soc" : 1000,
|
||||||
|
"threshold1": 70,
|
||||||
|
"threshold2": 80,
|
||||||
|
"threshold3": 90
|
||||||
|
},
|
||||||
|
"powDisSys_obj":
|
||||||
|
{
|
||||||
|
"state" : 1,
|
||||||
|
"faultLevel" : 0,
|
||||||
|
"faultCode" : [0,1,2],
|
||||||
|
"currentHigVolBusState" :
|
||||||
|
{
|
||||||
|
"powerBusVoltage" : 10000,
|
||||||
|
"dc5ModuleCurrent" : 10000,
|
||||||
|
"powerBusCurrent" : 10000,
|
||||||
|
"aBusVoltage" : 10000,
|
||||||
|
"propMotorCurrent" : 10000,
|
||||||
|
"aBusCurrent" : 10000,
|
||||||
|
"batteryGroupCurrent" : 10000,
|
||||||
|
"bowHigVolDisCurrent" : 10000,
|
||||||
|
"ftDev45Current" : 10000,
|
||||||
|
"tyzCurrent" : 10000,
|
||||||
|
"sternRudder1Current" : 10000,
|
||||||
|
"reservedCurrent1" : 10000,
|
||||||
|
"sternRudder2Current" : 10000,
|
||||||
|
"reservedCurrent2" : 10000,
|
||||||
|
"fbCurrent" : 10000,
|
||||||
|
"reservedCurrent3" : 10000
|
||||||
|
},
|
||||||
|
"currentHigVolBusAState" :
|
||||||
|
{
|
||||||
|
"busBVoltage":10000,
|
||||||
|
"busBCurrent":10000,
|
||||||
|
"ftDev123Current":10000,
|
||||||
|
"closureMechCurrent":10000,
|
||||||
|
"mastSteerCurrent":10000,
|
||||||
|
"xczCurrent":10000,
|
||||||
|
"bowRudderCurrent":10000,
|
||||||
|
"coverActorCurrent":10000
|
||||||
|
},
|
||||||
|
"currentHigVolBusBState" :
|
||||||
|
{
|
||||||
|
"insBusVoltage" : 10000,
|
||||||
|
"bowLowVoltageDisCurrent" : 10000,
|
||||||
|
"dcc1Current" : 10000,
|
||||||
|
"reservedCurrent1" : 10000,
|
||||||
|
"emerBatGroup2Current" : 10000,
|
||||||
|
"batGroupInsCurrent" : 10000,
|
||||||
|
"unit4Current" : 10000,
|
||||||
|
"reservedCurrent2" : 10000,
|
||||||
|
"emer2BusVoltage" : 10000,
|
||||||
|
"ccuEmerCurrent" : 10000,
|
||||||
|
"fcsSecurityCurrent" : 10000,
|
||||||
|
"plcCurrent" : 10000
|
||||||
|
},
|
||||||
|
"currentLowVolBusBState" :
|
||||||
|
{
|
||||||
|
"insBusVoltage":10000,
|
||||||
|
"insBusCurrent":10000,
|
||||||
|
"unit1Current":10000,
|
||||||
|
"unit2Current":10000,
|
||||||
|
"unit3Current":10000,
|
||||||
|
"unit5Current":10000,
|
||||||
|
"bowPzDeviceCurrent":10000,
|
||||||
|
"emerBatGroup1Current":10000,
|
||||||
|
"emer1BusVoltage":10000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,7 +18,7 @@ using namespace std;
|
|||||||
bool _ListenCB(void * pParam)
|
bool _ListenCB(void * pParam)
|
||||||
{
|
{
|
||||||
PowerManger* pMe = (PowerManger* )pParam;
|
PowerManger* pMe = (PowerManger* )pParam;
|
||||||
return pMe->ListenLoopCCU();
|
return pMe->ListenLoopUDP();
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------
|
//---------------------------------------------------------
|
||||||
@@ -84,7 +84,23 @@ bool PowerManger::Iterate()
|
|||||||
{
|
{
|
||||||
AppCastingMOOSApp::Iterate();
|
AppCastingMOOSApp::Iterate();
|
||||||
// Do your thing here!
|
// Do your thing here!
|
||||||
|
if(!m_udpComm.m_qReceiveCcuStateBuffer.empty())
|
||||||
|
{
|
||||||
|
m_CcuCurrentState = m_udpComm.m_qReceiveCcuStateBuffer.front();
|
||||||
|
cout << m_CcuCurrentState.checkCode << endl;
|
||||||
|
m_udpComm.m_qReceiveCcuStateBuffer.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!m_udpComm.sError.empty())
|
||||||
|
{
|
||||||
|
for(int i=0;i<m_udpComm.sError.size();i++)
|
||||||
|
{
|
||||||
|
cout<<MOOS::ConsoleColours::red()<< m_udpComm.sError[i] << MOOS::ConsoleColours::reset() << endl;
|
||||||
|
}
|
||||||
|
m_udpComm.sError.clear();
|
||||||
|
}
|
||||||
//AppCastingMOOSApp::PostReport();
|
//AppCastingMOOSApp::PostReport();
|
||||||
|
m_udpComm.clearMsgQueue();
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,9 +140,15 @@ bool PowerManger::OnStartUp()
|
|||||||
registerVariables();
|
registerVariables();
|
||||||
|
|
||||||
if(m_pCcuUdpComm = setUdpScoket(IPORT))
|
if(m_pCcuUdpComm = setUdpScoket(IPORT))
|
||||||
|
{
|
||||||
|
cout<<MOOS::ConsoleColours::green()<< "UDP set succeed!"<< MOOS::ConsoleColours::reset() << endl;
|
||||||
MOOSTrace("UDP set succeed");
|
MOOSTrace("UDP set succeed");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
cout<<MOOS::ConsoleColours::red()<< "UDP set Fild!"<< MOOS::ConsoleColours::reset() << endl;
|
||||||
MOOSTrace("UDP set faile");
|
MOOSTrace("UDP set faile");
|
||||||
|
}
|
||||||
m_ListenThread.Initialise(_ListenCB,this);
|
m_ListenThread.Initialise(_ListenCB,this);
|
||||||
m_ListenThread.Start();
|
m_ListenThread.Start();
|
||||||
return(true);
|
return(true);
|
||||||
@@ -177,71 +199,35 @@ XPCUdpSocket* PowerManger::setUdpScoket(long lPort)
|
|||||||
return pUdpSocket;
|
return pUdpSocket;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PowerManger::ListenLoopCCU()
|
bool PowerManger::ListenLoopUDP()
|
||||||
{
|
{
|
||||||
unsigned char Buff[MAX_UDP_PKT_SIZE];
|
unsigned char Buff[MAX_UDP_PKT_SIZE];
|
||||||
cout << "------------------" << endl;
|
|
||||||
cout << "SIZEOF" << sizeof(msg_CcuStateFbMsg) << endl;
|
|
||||||
while(!m_ListenThread.IsQuitRequested())
|
while(!m_ListenThread.IsQuitRequested())
|
||||||
{
|
{
|
||||||
int nRead = m_pCcuUdpComm->iRecieveMessage(Buff,sizeof(Buff));
|
int nRead = m_pCcuUdpComm->iRecieveMessage(Buff,sizeof(Buff));
|
||||||
cout<<MOOS::ConsoleColours::yellow()<< "RECEVE DATA COUNT:" << nRead << MOOS::ConsoleColours::reset() << endl;
|
cout<<MOOS::ConsoleColours::yellow()<< "RECEVE DATA COUNT:" << nRead << MOOS::ConsoleColours::reset() << endl;
|
||||||
if(nRead > 0)
|
if(nRead > 0)
|
||||||
{
|
{
|
||||||
//判断消息
|
if(!m_udpComm.pushMsgToQueue(Buff))
|
||||||
char *header = new char[sizeof(m_header)];
|
|
||||||
unsigned short id;
|
|
||||||
memcpy(header,Buff,sizeof(m_header));
|
|
||||||
if(!m_udpComm.getMsgId(header,id))
|
|
||||||
{
|
{
|
||||||
cout << "------------------" << endl;
|
for(int i=0;i<m_udpComm.sError.size();i++)
|
||||||
cout << "id:" << id << endl;
|
{
|
||||||
cout << "getMsgId faile" << endl;
|
cout<<MOOS::ConsoleColours::red()<< m_udpComm.sError[i] << MOOS::ConsoleColours::reset() << endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
delete []header;
|
|
||||||
//处理消息
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case CCU_STATE_FB_ID: //CCU_STATE_FB 0x0051
|
|
||||||
msg_CcuStateFbMsg s;
|
|
||||||
if(m_udpComm.getCcuState((char *)Buff,s))
|
|
||||||
{
|
|
||||||
cout << "------------------" << endl;
|
|
||||||
// cout << "id:" << s.header.id << endl;
|
|
||||||
cout << "currentWorkCondition:" << (double)s.currentWorkCondition << endl;
|
|
||||||
cout << "fcuState:" << (double)s.fcuState << endl;
|
|
||||||
cout << "fcuFaultLeve:" << (double)s.fcuFaultLeve << endl;
|
|
||||||
cout << "powerLimit:" << (double)s.powerLimit << endl;
|
|
||||||
cout << "checkCode:" << (double)s.checkCode << endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for(int i = 0;i < m_udpComm.sError.size();i++)
|
|
||||||
cout << m_udpComm.sError[i] << endl;
|
|
||||||
m_udpComm.sError.clear();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CCU_SET_PARM_FB_ID: //CCU_SET_PARM_FB 0x0040
|
|
||||||
msg_CcuSetParmFbMsg p;
|
|
||||||
if(m_udpComm.getCcuSetParmFb((char *)Buff,p))
|
|
||||||
{
|
|
||||||
cout << "------------------" << endl;
|
|
||||||
cout << "id:" << p.header.id << endl;
|
|
||||||
cout << "Flas:" << p.flag << endl;
|
|
||||||
cout << "FailCode" << p.failureCode << endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for(int i = 0;i < m_udpComm.sError.size();i++)
|
|
||||||
cout << m_udpComm.sError[i] << endl;
|
|
||||||
m_udpComm.sError.clear();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PowerManger::updatePmState()
|
||||||
|
{
|
||||||
|
m_pmCurrentState.ccustate = m_CcuCurrentState.data;
|
||||||
|
m_pmCurrentState.bus1State = m_disHighVolBusCurrentState.data;
|
||||||
|
m_pmCurrentState.bus2State = m_disHighAVolBusCurrentState.data;
|
||||||
|
m_pmCurrentState.bus3State = m_disHighBVolBusCurrentState.data;
|
||||||
|
m_pmCurrentState.bus4State = m_disLowBusState.data;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -19,22 +19,25 @@
|
|||||||
#define PowerManger_HEADER
|
#define PowerManger_HEADER
|
||||||
#define UNIX
|
#define UNIX
|
||||||
|
|
||||||
|
#include <queue>
|
||||||
#include "MOOS/libMOOS/Thirdparty/AppCasting/AppCastingMOOSApp.h"
|
#include "MOOS/libMOOS/Thirdparty/AppCasting/AppCastingMOOSApp.h"
|
||||||
#include "MOOS/libMOOS/Utils/MOOSThread.h"
|
#include "MOOS/libMOOS/Utils/MOOSThread.h"
|
||||||
#include "MOOS/libMOOS/Comms/XPCUdpSocket.h"
|
#include "MOOS/libMOOS/Comms/XPCUdpSocket.h"
|
||||||
#include "ccuUdpMsg.h"
|
#include "ccuUdpMsg.h"
|
||||||
#include "json/json.h"
|
#include "json/json.h"
|
||||||
#include "udpComm.h"
|
#include "udpComm.h"
|
||||||
|
#include "pmSysvariable.h"
|
||||||
|
|
||||||
#define IPORT 5000
|
#define IPORT 5000
|
||||||
#define MAX_UDP_PKT_SIZE 65535
|
#define MAX_UDP_PKT_SIZE 65535
|
||||||
|
|
||||||
class PowerManger : public AppCastingMOOSApp
|
class PowerManger : public AppCastingMOOSApp
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PowerManger();
|
PowerManger();
|
||||||
~PowerManger();
|
~PowerManger();
|
||||||
public:
|
public:
|
||||||
bool ListenLoopCCU();
|
bool ListenLoopUDP();
|
||||||
|
|
||||||
protected: // Standard MOOSApp functions to overload
|
protected: // Standard MOOSApp functions to overload
|
||||||
bool OnNewMail(MOOSMSG_LIST &NewMail);
|
bool OnNewMail(MOOSMSG_LIST &NewMail);
|
||||||
@@ -47,24 +50,30 @@ class PowerManger : public AppCastingMOOSApp
|
|||||||
protected: // app function
|
protected: // app function
|
||||||
// bool _ListenCB();
|
// bool _ListenCB();
|
||||||
XPCUdpSocket* setUdpScoket(long lPort);
|
XPCUdpSocket* setUdpScoket(long lPort);
|
||||||
//
|
|
||||||
bool buildStateReport();
|
bool updatePmState();
|
||||||
|
|
||||||
bool buildEquipmentReport();
|
bool buildEquipmentReport();
|
||||||
bool buildDisributionReport();
|
bool buildDisributionReport();
|
||||||
bool buildSubDistributionReport();
|
bool buildSubDistributionReport();
|
||||||
bool buildPredictionReport();
|
bool buildPredictionReport();
|
||||||
|
|
||||||
protected: // app variables
|
protected: // app variables
|
||||||
long m_lPort;
|
pmState m_pmCurrentState;
|
||||||
unsigned int m_nReceiveBufferSizeKB;
|
|
||||||
unsigned int m_nSendBufferSizeKB;
|
|
||||||
|
|
||||||
udpComm m_udpComm;
|
|
||||||
|
|
||||||
XPCUdpSocket *m_pCcuUdpComm;
|
|
||||||
|
|
||||||
|
msg_CcuStateFbMsg m_CcuCurrentState;
|
||||||
|
msg_disHighVolBusFbMsg m_disHighVolBusCurrentState;
|
||||||
|
msg_disHighAVolBusFbMsg m_disHighAVolBusCurrentState;
|
||||||
|
msg_disHighBVolBusFbMsg m_disHighBVolBusCurrentState;
|
||||||
|
msg_disLowBusFbMsg m_disLowBusState;
|
||||||
private: // Configuration variables
|
private: // Configuration variables
|
||||||
CMOOSThread m_ListenThread;
|
udpComm m_udpComm;
|
||||||
|
XPCUdpSocket *m_pCcuUdpComm;
|
||||||
|
CMOOSThread m_ListenThread;
|
||||||
|
long m_lPort;
|
||||||
|
unsigned int m_nReceiveBufferSizeKB;
|
||||||
|
unsigned int m_nSendBufferSizeKB;
|
||||||
|
|
||||||
// CMOOSThread m_SendThread;
|
// CMOOSThread m_SendThread;
|
||||||
private: // State variables
|
private: // State variables
|
||||||
};
|
};
|
||||||
|
|||||||
+202
-78
@@ -1,10 +1,15 @@
|
|||||||
#ifndef CCUUDPMSG__H
|
#ifndef CCUUDPMSG__H
|
||||||
#define CCUUDPMSG__H
|
#define CCUUDPMSG__H
|
||||||
|
#include "pmSysvariable.h"
|
||||||
|
|
||||||
#define CCU_UDPMSG_START1 0x20
|
#define CCU_UDPMSG_START1 0x20
|
||||||
#define CCU_UDPMSG_START2 0x20
|
#define CCU_UDPMSG_START2 0x20
|
||||||
#define CCU_STATE_FB_ID 0x0051
|
#define CCU_STATE_FB_ID 0x0051
|
||||||
#define CCU_SET_PARM_ID 0x0040
|
#define CCU_SET_PARM_FB_ID 0x0040
|
||||||
#define CCU_SET_PARM_FB_ID 0x0041
|
#define DIS_HVBUS_FB_ID 0x0005
|
||||||
|
#define DIS_HVBUSA_FB_ID 0x0006
|
||||||
|
#define DIS_HVBUSB_FB_ID 0x0007
|
||||||
|
#define DIS_LVBUS_FB_ID 0x0008
|
||||||
|
|
||||||
#pragma pack (1)
|
#pragma pack (1)
|
||||||
typedef unsigned int Checksum;
|
typedef unsigned int Checksum;
|
||||||
@@ -106,83 +111,202 @@ typedef struct {
|
|||||||
// 复合管控状态反馈
|
// 复合管控状态反馈
|
||||||
typedef struct {
|
typedef struct {
|
||||||
m_header header;
|
m_header header;
|
||||||
unsigned char currentWorkCondition;
|
ccuState data;
|
||||||
unsigned char fcuState;
|
// unsigned char currentWorkCondition;
|
||||||
unsigned char fcuFaultLeve;
|
// unsigned char fcuState;
|
||||||
float powerLimit;
|
// unsigned char fcuFaultLeve;
|
||||||
float totalPowerGeneration;
|
// float powerLimit;
|
||||||
float ch4o;
|
// float totalPowerGeneration;
|
||||||
float o2;
|
// float ch4o;
|
||||||
float fcuVoltage;
|
// float o2;
|
||||||
float fcuCurrent;
|
// float fcuVoltage;
|
||||||
float o2Level;
|
// float fcuCurrent;
|
||||||
float placeholder1;
|
// float o2Level;
|
||||||
float exchangerTemperature;
|
// float placeholder1;
|
||||||
float fcuOutPower;
|
// float exchangerTemperature;
|
||||||
float fcuOutIns;
|
// float fcuOutPower;
|
||||||
float fcuVoltageIns;
|
// float fcuOutIns;
|
||||||
float fcuVoltagePower;
|
// float fcuVoltageIns;
|
||||||
float fcuCurrentIns;
|
// float fcuVoltagePower;
|
||||||
float fcuCurrentPower;
|
// float fcuCurrentIns;
|
||||||
float h2Concentration1;
|
// float fcuCurrentPower;
|
||||||
float h2Concentration2;
|
// float h2Concentration1;
|
||||||
float o2Concentration1;
|
// float h2Concentration2;
|
||||||
float o2Concentration2;
|
// float o2Concentration1;
|
||||||
float ch4oConcentration1;
|
// float o2Concentration2;
|
||||||
float ch4oConcentration2;
|
// float ch4oConcentration1;
|
||||||
float backpressure1;
|
// float ch4oConcentration2;
|
||||||
float backpressure2;
|
// float backpressure1;
|
||||||
unsigned char flameDetection;
|
// float backpressure2;
|
||||||
unsigned char fcuGZ_1L;
|
// unsigned char flameDetection;
|
||||||
unsigned char fcuGZ_1H;
|
// unsigned char fcuGZ_1L;
|
||||||
unsigned char fcuGZ_2L;
|
// unsigned char fcuGZ_1H;
|
||||||
unsigned char fcuGZ_2H;
|
// unsigned char fcuGZ_2L;
|
||||||
unsigned char fcuGZ_3L;
|
// unsigned char fcuGZ_2H;
|
||||||
unsigned char fcuGZ_3H;
|
// unsigned char fcuGZ_3L;
|
||||||
unsigned char insPosRelayState;
|
// unsigned char fcuGZ_3H;
|
||||||
unsigned char insNegRelayState;
|
// unsigned char insPosRelayState;
|
||||||
unsigned char powerPosRelayState;
|
// unsigned char insNegRelayState;
|
||||||
unsigned char powerNegRelayState;
|
// unsigned char powerPosRelayState;
|
||||||
unsigned short insBatLimit;
|
// unsigned char powerNegRelayState;
|
||||||
unsigned short powerBatLimit;
|
// unsigned short insBatLimit;
|
||||||
unsigned char insBatSoc;
|
// unsigned short powerBatLimit;
|
||||||
unsigned char powerBatSoc;
|
// unsigned char insBatSoc;
|
||||||
unsigned short insBatTotalElectricity;
|
// unsigned char powerBatSoc;
|
||||||
unsigned short powerBatTotalElectricity;
|
// unsigned short insBatTotalElectricity;
|
||||||
unsigned short insBatCurrentElectricity;
|
// unsigned short powerBatTotalElectricity;
|
||||||
unsigned short powerBatCurrentElectricity;
|
// unsigned short insBatCurrentElectricity;
|
||||||
unsigned char insChargeState;
|
// unsigned short powerBatCurrentElectricity;
|
||||||
unsigned char powerChargeState;
|
// unsigned char insChargeState;
|
||||||
unsigned short insLinkVoltage;
|
// unsigned char powerChargeState;
|
||||||
unsigned short insPackVoltage;
|
// unsigned short insLinkVoltage;
|
||||||
unsigned short insCurrent;
|
// unsigned short insPackVoltage;
|
||||||
unsigned short insPosInsulationResistance;
|
// unsigned short insCurrent;
|
||||||
unsigned short insNegInsulationResistance;
|
// unsigned short insPosInsulationResistance;
|
||||||
unsigned short powerLinkVoltage;
|
// unsigned short insNegInsulationResistance;
|
||||||
unsigned short powerPackVoltage;
|
// unsigned short powerLinkVoltage;
|
||||||
unsigned short powerCurrent;
|
// unsigned short powerPackVoltage;
|
||||||
unsigned short powerPosInsulationResistance;
|
// unsigned short powerCurrent;
|
||||||
unsigned short powerNegInsulationResistance;
|
// unsigned short powerPosInsulationResistance;
|
||||||
unsigned char insEmergencyStatusWord;
|
// unsigned short powerNegInsulationResistance;
|
||||||
unsigned char powerEmergencyStatusWord;
|
// unsigned char insEmergencyStatusWord;
|
||||||
unsigned char insAlarmIdentificationWord;
|
// unsigned char powerEmergencyStatusWord;
|
||||||
unsigned char powerAlarmIdentificationWord;
|
// unsigned char insAlarmIdentificationWord;
|
||||||
unsigned char insCurrentSocHold1;
|
// unsigned char powerAlarmIdentificationWord;
|
||||||
unsigned char insCurrentSocHold2;
|
// unsigned char insCurrentSocHold1;
|
||||||
unsigned char insCurrentSocHold3;
|
// unsigned char insCurrentSocHold2;
|
||||||
unsigned char fcuCurrentToInsLimit1;
|
// unsigned char insCurrentSocHold3;
|
||||||
unsigned char fcuCurrentToinsLimit2;
|
// unsigned char fcuCurrentToInsLimit1;
|
||||||
unsigned char powerCurrentSocHold1;
|
// unsigned char fcuCurrentToinsLimit2;
|
||||||
unsigned char powerCurrentSocHold2;
|
// unsigned char powerCurrentSocHold1;
|
||||||
unsigned char powerCurrentSocHold3;
|
// unsigned char powerCurrentSocHold2;
|
||||||
unsigned char powerCurrentToInsLimit1;
|
// unsigned char powerCurrentSocHold3;
|
||||||
unsigned char powerCurrentToinsLimit2;
|
// unsigned char powerCurrentToInsLimit1;
|
||||||
float placeholder2;
|
// unsigned char powerCurrentToinsLimit2;
|
||||||
float placeholder3;
|
// float placeholder2;
|
||||||
float placeholder4;
|
// float placeholder3;
|
||||||
float placeholder5;
|
// float placeholder4;
|
||||||
|
// float placeholder5;
|
||||||
Checksum checkCode;
|
Checksum checkCode;
|
||||||
} msg_CcuStateFbMsg;
|
} msg_CcuStateFbMsg;
|
||||||
#pragma pack ()
|
|
||||||
|
|
||||||
|
//高压母线配电反馈
|
||||||
|
typedef struct {
|
||||||
|
m_header header;
|
||||||
|
disHighVolBusState data;
|
||||||
|
// unsigned char fuelCellCircuitBreaker;
|
||||||
|
// unsigned char powerLithiumBatteryCircuitBreaker;
|
||||||
|
// unsigned char propulsionMotorCircuitBreaker;
|
||||||
|
// unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
||||||
|
// unsigned char dcDc5ModuleCircuitBreaker;
|
||||||
|
// unsigned char bowHighVoltageDistributionBoxCircuitBreaker;
|
||||||
|
// unsigned char sternFTDevice45CircuitBreaker;
|
||||||
|
// unsigned char sternRudderSwitch1CircuitBreaker;
|
||||||
|
// unsigned char sternRudderSwitch2CircuitBreaker;
|
||||||
|
// unsigned char fbReservedCircuitBreaker;
|
||||||
|
// unsigned char tyzReservedCircuitBreaker;
|
||||||
|
// unsigned char reservedCircuitBreaker;
|
||||||
|
// unsigned char busInsulationLow;
|
||||||
|
// unsigned char busAInsulationHigh;
|
||||||
|
// unsigned char lostPower;
|
||||||
|
// unsigned char lostEmerPower;
|
||||||
|
// unsigned short powerBusVoltage;
|
||||||
|
// unsigned short dcDc5ModuleCurrent;
|
||||||
|
// unsigned short powerBusCurrent;
|
||||||
|
// unsigned short busbarAVoltage;
|
||||||
|
// unsigned short propulsionMotorControlBoxCurrent;
|
||||||
|
// unsigned short busbarACurrent;
|
||||||
|
// unsigned short lithiumBatteryGroupMeterCurrent;
|
||||||
|
// unsigned short bowHighVoltageDistributionBoxCurrent;
|
||||||
|
// unsigned short sternFTDevice45Current;
|
||||||
|
// unsigned short tyzReservedSwitchCurrent;
|
||||||
|
// unsigned short sternRudderSwitch1Current;
|
||||||
|
// unsigned short reservedCurrent1; // 改为 reservedCurrent1 以避免重名
|
||||||
|
// unsigned short sternRudderSwitch2Current;
|
||||||
|
// unsigned short reservedCurrent2; // 改为 reservedCurrent2 以避免重名
|
||||||
|
// unsigned short fbReservedSwitchCurrent;
|
||||||
|
// unsigned short reservedCurrent3; // 改为 reservedCurrent3 以避免重名
|
||||||
|
Checksum checkCode;
|
||||||
|
} msg_disHighVolBusFbMsg;
|
||||||
|
|
||||||
|
// 高压母线A配电反馈
|
||||||
|
typedef struct {
|
||||||
|
m_header header;
|
||||||
|
disHighAVolBusState data;
|
||||||
|
// unsigned char bowFTDevice123CircuitBreaker;
|
||||||
|
// unsigned char actuatorCircuitBreaker;
|
||||||
|
// unsigned char mastSteeringGearControlBoxCircuitBreaker;
|
||||||
|
// unsigned char xczCircuitBreaker;
|
||||||
|
// unsigned char bowRudderControlBoxCircuitBreaker;
|
||||||
|
// unsigned char openWaterCoverStartCylinderCircuitBreaker;
|
||||||
|
// unsigned char instrumentPowerFailureSignal;
|
||||||
|
// unsigned char emergencyPowerFailureSignal;
|
||||||
|
// unsigned char waterIngressionAlarm;
|
||||||
|
// unsigned short busbarBVoltage;
|
||||||
|
// unsigned short busbarBCurrent;
|
||||||
|
// unsigned short bowFTDevice123Current;
|
||||||
|
// unsigned short actuatorCurrent;
|
||||||
|
// unsigned short mastSteeringGearControlBoxCurrent;
|
||||||
|
// unsigned short xczCurrent;
|
||||||
|
// unsigned short bowRudderControlBoxCurrent;
|
||||||
|
// unsigned short openWaterCoverStartCylinderCurrent;
|
||||||
|
Checksum checkCode;
|
||||||
|
} msg_disHighAVolBusFbMsg;
|
||||||
|
|
||||||
|
// 高压母线B配电反馈
|
||||||
|
typedef struct {
|
||||||
|
m_header header;
|
||||||
|
disHighBVolBusState data;
|
||||||
|
// unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
||||||
|
// unsigned char bowLowVoltageDistributionBoxCircuitBreaker;
|
||||||
|
// unsigned char unit4InstrumentDC48VCircuitBreaker;
|
||||||
|
// unsigned char dcC1DCDistributionPanelCircuitBreaker;
|
||||||
|
// unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
||||||
|
// unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
||||||
|
// unsigned char emergencyLithiumBatteryGroup2CircuitBreaker;
|
||||||
|
// unsigned char instrumentPowerFailureSignal;
|
||||||
|
// unsigned char emergencyPowerFailureSignal;
|
||||||
|
// unsigned char instrumentBusbarInsulationLow;
|
||||||
|
// unsigned short instrumentBusbarVoltage;
|
||||||
|
// unsigned short bowLowVoltageDistributionBoxCurrent;
|
||||||
|
// unsigned short dcC1InstrumentDC48VCurrent;
|
||||||
|
// unsigned short reservedCurrent1; // 为了区分,添加了数字后缀
|
||||||
|
// unsigned short emergencyLithiumBatteryGroup2Current;
|
||||||
|
// unsigned short lithiumBatteryGroupInstrumentCurrent;
|
||||||
|
// unsigned short unit4InstrumentDC48VCurrent;
|
||||||
|
// unsigned short reservedCurrent2; // 为了区分,添加了数字后缀
|
||||||
|
// unsigned short emergency2BusbarVoltage;
|
||||||
|
// unsigned short compositeEnergyManagementSystemEmergencyDC48VCurrent;
|
||||||
|
// unsigned short fuelCellSecuritySystemEmergencyDC48VCurrent;
|
||||||
|
// unsigned short plcControlPowerCurrent;
|
||||||
|
Checksum checkCode;
|
||||||
|
} msg_disHighBVolBusFbMsg;
|
||||||
|
|
||||||
|
//仪表汇流排配电反馈
|
||||||
|
typedef struct {
|
||||||
|
m_header header;
|
||||||
|
disLowBusState data;
|
||||||
|
// unsigned char unit1CircuitBreaker;
|
||||||
|
// unsigned char unit2CircuitBreaker;
|
||||||
|
// unsigned char unit3CircuitBreaker;
|
||||||
|
// unsigned char unit5CircuitBreaker;
|
||||||
|
// unsigned char bowPZDeviceCircuitBreaker;
|
||||||
|
// unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
||||||
|
// unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
||||||
|
// unsigned char emergencyLithiumBatteryGroup1CircuitBreaker;
|
||||||
|
// unsigned char powerFailureSignal;
|
||||||
|
// unsigned char waterIngressionAlarm;
|
||||||
|
// unsigned short instrumentBusbarVoltage;
|
||||||
|
// unsigned short instrumentBusbarCurrent;
|
||||||
|
// unsigned short unit1Current;
|
||||||
|
// unsigned short unit2Current;
|
||||||
|
// unsigned short unit3Current;
|
||||||
|
// unsigned short unit5Current;
|
||||||
|
// unsigned short bowPZDeviceCurrent;
|
||||||
|
// unsigned short emergencyLithiumBatteryGroup1Current;
|
||||||
|
// unsigned short emergency1BusbarVoltage;
|
||||||
|
Checksum checkCode;
|
||||||
|
} msg_disLowBusFbMsg;
|
||||||
|
|
||||||
|
#pragma pack ()
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,201 @@
|
|||||||
|
#ifndef PMSYSVARIABLE_H
|
||||||
|
#define PMSYSVARIABLE_H
|
||||||
|
#pragma pack (1)
|
||||||
|
typedef struct ccuState
|
||||||
|
{
|
||||||
|
unsigned char currentWorkCondition;
|
||||||
|
unsigned char fcuState;
|
||||||
|
unsigned char fcuFaultLeve;
|
||||||
|
float powerLimit;
|
||||||
|
float totalPowerGeneration;
|
||||||
|
float ch4o;
|
||||||
|
float o2;
|
||||||
|
float fcuVoltage;
|
||||||
|
float fcuCurrent;
|
||||||
|
float o2Level;
|
||||||
|
float placeholder1;
|
||||||
|
float exchangerTemperature;
|
||||||
|
float fcuOutPower;
|
||||||
|
float fcuOutIns;
|
||||||
|
float fcuVoltageIns;
|
||||||
|
float fcuVoltagePower;
|
||||||
|
float fcuCurrentIns;
|
||||||
|
float fcuCurrentPower;
|
||||||
|
float h2Concentration1;
|
||||||
|
float h2Concentration2;
|
||||||
|
float o2Concentration1;
|
||||||
|
float o2Concentration2;
|
||||||
|
float ch4oConcentration1;
|
||||||
|
float ch4oConcentration2;
|
||||||
|
float backpressure1;
|
||||||
|
float backpressure2;
|
||||||
|
unsigned char flameDetection;
|
||||||
|
unsigned char fcuGZ_1L;
|
||||||
|
unsigned char fcuGZ_1H;
|
||||||
|
unsigned char fcuGZ_2L;
|
||||||
|
unsigned char fcuGZ_2H;
|
||||||
|
unsigned char fcuGZ_3L;
|
||||||
|
unsigned char fcuGZ_3H;
|
||||||
|
unsigned char insPosRelayState;
|
||||||
|
unsigned char insNegRelayState;
|
||||||
|
unsigned char powerPosRelayState;
|
||||||
|
unsigned char powerNegRelayState;
|
||||||
|
unsigned short insBatLimit;
|
||||||
|
unsigned short powerBatLimit;
|
||||||
|
unsigned char insBatSoc;
|
||||||
|
unsigned char powerBatSoc;
|
||||||
|
unsigned short insBatTotalElectricity;
|
||||||
|
unsigned short powerBatTotalElectricity;
|
||||||
|
unsigned short insBatCurrentElectricity;
|
||||||
|
unsigned short powerBatCurrentElectricity;
|
||||||
|
unsigned char insChargeState;
|
||||||
|
unsigned char powerChargeState;
|
||||||
|
unsigned short insLinkVoltage;
|
||||||
|
unsigned short insPackVoltage;
|
||||||
|
unsigned short insCurrent;
|
||||||
|
unsigned short insPosInsulationResistance;
|
||||||
|
unsigned short insNegInsulationResistance;
|
||||||
|
unsigned short powerLinkVoltage;
|
||||||
|
unsigned short powerPackVoltage;
|
||||||
|
unsigned short powerCurrent;
|
||||||
|
unsigned short powerPosInsulationResistance;
|
||||||
|
unsigned short powerNegInsulationResistance;
|
||||||
|
unsigned char insEmergencyStatusWord;
|
||||||
|
unsigned char powerEmergencyStatusWord;
|
||||||
|
unsigned char insAlarmIdentificationWord;
|
||||||
|
unsigned char powerAlarmIdentificationWord;
|
||||||
|
unsigned char insCurrentSocHold1;
|
||||||
|
unsigned char insCurrentSocHold2;
|
||||||
|
unsigned char insCurrentSocHold3;
|
||||||
|
unsigned char fcuCurrentToInsLimit1;
|
||||||
|
unsigned char fcuCurrentToinsLimit2;
|
||||||
|
unsigned char powerCurrentSocHold1;
|
||||||
|
unsigned char powerCurrentSocHold2;
|
||||||
|
unsigned char powerCurrentSocHold3;
|
||||||
|
unsigned char powerCurrentToInsLimit1;
|
||||||
|
unsigned char powerCurrentToinsLimit2;
|
||||||
|
float placeholder2;
|
||||||
|
float placeholder3;
|
||||||
|
float placeholder4;
|
||||||
|
float placeholder5;
|
||||||
|
} ccuState;
|
||||||
|
|
||||||
|
typedef struct disHighVolBusState
|
||||||
|
{
|
||||||
|
unsigned char fuelCellCircuitBreaker;
|
||||||
|
unsigned char powerLithiumBatteryCircuitBreaker;
|
||||||
|
unsigned char propulsionMotorCircuitBreaker;
|
||||||
|
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
||||||
|
unsigned char dcDc5ModuleCircuitBreaker;
|
||||||
|
unsigned char bowHighVoltageDistributionBoxCircuitBreaker;
|
||||||
|
unsigned char sternFTDevice45CircuitBreaker;
|
||||||
|
unsigned char sternRudderSwitch1CircuitBreaker;
|
||||||
|
unsigned char sternRudderSwitch2CircuitBreaker;
|
||||||
|
unsigned char fbReservedCircuitBreaker;
|
||||||
|
unsigned char tyzReservedCircuitBreaker;
|
||||||
|
unsigned char reservedCircuitBreaker;
|
||||||
|
unsigned char busInsulationLow;
|
||||||
|
unsigned char busAInsulationHigh;
|
||||||
|
unsigned char lostPower;
|
||||||
|
unsigned char lostEmerPower;
|
||||||
|
unsigned short powerBusVoltage;
|
||||||
|
unsigned short dcDc5ModuleCurrent;
|
||||||
|
unsigned short powerBusCurrent;
|
||||||
|
unsigned short busbarAVoltage;
|
||||||
|
unsigned short propulsionMotorControlBoxCurrent;
|
||||||
|
unsigned short busbarACurrent;
|
||||||
|
unsigned short lithiumBatteryGroupMeterCurrent;
|
||||||
|
unsigned short bowHighVoltageDistributionBoxCurrent;
|
||||||
|
unsigned short sternFTDevice45Current;
|
||||||
|
unsigned short tyzReservedSwitchCurrent;
|
||||||
|
unsigned short sternRudderSwitch1Current;
|
||||||
|
unsigned short reservedCurrent1; // 改为 reservedCurrent1 以避免重名
|
||||||
|
unsigned short sternRudderSwitch2Current;
|
||||||
|
unsigned short reservedCurrent2; // 改为 reservedCurrent2 以避免重名
|
||||||
|
unsigned short fbReservedSwitchCurrent;
|
||||||
|
unsigned short reservedCurrent3; // 改为 reservedCurrent3 以避免重名
|
||||||
|
}disHighVolBusState;
|
||||||
|
|
||||||
|
typedef struct disHighAVolBusState
|
||||||
|
{
|
||||||
|
unsigned char bowFTDevice123CircuitBreaker;
|
||||||
|
unsigned char actuatorCircuitBreaker;
|
||||||
|
unsigned char mastSteeringGearControlBoxCircuitBreaker;
|
||||||
|
unsigned char xczCircuitBreaker;
|
||||||
|
unsigned char bowRudderControlBoxCircuitBreaker;
|
||||||
|
unsigned char openWaterCoverStartCylinderCircuitBreaker;
|
||||||
|
unsigned char instrumentPowerFailureSignal;
|
||||||
|
unsigned char emergencyPowerFailureSignal;
|
||||||
|
unsigned char waterIngressionAlarm;
|
||||||
|
unsigned short busbarBVoltage;
|
||||||
|
unsigned short busbarBCurrent;
|
||||||
|
unsigned short bowFTDevice123Current;
|
||||||
|
unsigned short actuatorCurrent;
|
||||||
|
unsigned short mastSteeringGearControlBoxCurrent;
|
||||||
|
unsigned short xczCurrent;
|
||||||
|
unsigned short bowRudderControlBoxCurrent;
|
||||||
|
unsigned short openWaterCoverStartCylinderCurrent;
|
||||||
|
}disHighAVolBusState;
|
||||||
|
|
||||||
|
typedef struct disHighBVolBusState
|
||||||
|
{
|
||||||
|
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
||||||
|
unsigned char bowLowVoltageDistributionBoxCircuitBreaker;
|
||||||
|
unsigned char unit4InstrumentDC48VCircuitBreaker;
|
||||||
|
unsigned char dcC1DCDistributionPanelCircuitBreaker;
|
||||||
|
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
||||||
|
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
||||||
|
unsigned char emergencyLithiumBatteryGroup2CircuitBreaker;
|
||||||
|
unsigned char instrumentPowerFailureSignal;
|
||||||
|
unsigned char emergencyPowerFailureSignal;
|
||||||
|
unsigned char instrumentBusbarInsulationLow;
|
||||||
|
unsigned short instrumentBusbarVoltage;
|
||||||
|
unsigned short bowLowVoltageDistributionBoxCurrent;
|
||||||
|
unsigned short dcC1InstrumentDC48VCurrent;
|
||||||
|
unsigned short reservedCurrent1; // 为了区分,添加了数字后缀
|
||||||
|
unsigned short emergencyLithiumBatteryGroup2Current;
|
||||||
|
unsigned short lithiumBatteryGroupInstrumentCurrent;
|
||||||
|
unsigned short unit4InstrumentDC48VCurrent;
|
||||||
|
unsigned short reservedCurrent2; // 为了区分,添加了数字后缀
|
||||||
|
unsigned short emergency2BusbarVoltage;
|
||||||
|
unsigned short compositeEnergyManagementSystemEmergencyDC48VCurrent;
|
||||||
|
unsigned short fuelCellSecuritySystemEmergencyDC48VCurrent;
|
||||||
|
unsigned short plcControlPowerCurrent;
|
||||||
|
}disHighBVolBusState;
|
||||||
|
|
||||||
|
typedef struct disLowBusState
|
||||||
|
{
|
||||||
|
unsigned char unit1CircuitBreaker;
|
||||||
|
unsigned char unit2CircuitBreaker;
|
||||||
|
unsigned char unit3CircuitBreaker;
|
||||||
|
unsigned char unit5CircuitBreaker;
|
||||||
|
unsigned char bowPZDeviceCircuitBreaker;
|
||||||
|
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
||||||
|
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
||||||
|
unsigned char emergencyLithiumBatteryGroup1CircuitBreaker;
|
||||||
|
unsigned char powerFailureSignal;
|
||||||
|
unsigned char waterIngressionAlarm;
|
||||||
|
unsigned short instrumentBusbarVoltage;
|
||||||
|
unsigned short instrumentBusbarCurrent;
|
||||||
|
unsigned short unit1Current;
|
||||||
|
unsigned short unit2Current;
|
||||||
|
unsigned short unit3Current;
|
||||||
|
unsigned short unit5Current;
|
||||||
|
unsigned short bowPZDeviceCurrent;
|
||||||
|
unsigned short emergencyLithiumBatteryGroup1Current;
|
||||||
|
unsigned short emergency1BusbarVoltage;
|
||||||
|
}disLowBusState;
|
||||||
|
#pragma pack (0)
|
||||||
|
|
||||||
|
typedef struct pmState
|
||||||
|
{
|
||||||
|
ccuState ccustate;
|
||||||
|
disHighVolBusState bus1State;
|
||||||
|
disHighAVolBusState bus2State;
|
||||||
|
disHighBVolBusState bus3State;
|
||||||
|
disLowBusState bus4State;
|
||||||
|
} PmState;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "udpComm.h"
|
#include "udpComm.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
udpComm::udpComm() {}
|
udpComm::udpComm() {}
|
||||||
|
|
||||||
@@ -15,6 +16,7 @@ Checksum udpComm::calculateChecksum(const unsigned char* data, int size)
|
|||||||
}
|
}
|
||||||
return checksum;
|
return checksum;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool udpComm::getMsgId(char *m,unsigned short &id)
|
bool udpComm::getMsgId(char *m,unsigned short &id)
|
||||||
{
|
{
|
||||||
m_header h;
|
m_header h;
|
||||||
@@ -84,4 +86,253 @@ bool udpComm::getCcuSetParmFb(char *m, msg_CcuSetParmFbMsg &s)
|
|||||||
|
|
||||||
s = *p;
|
s = *p;
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool udpComm::getDisSysHVBusFb(char *m, msg_disHighVolBusFbMsg &s)
|
||||||
|
{
|
||||||
|
m_header h;
|
||||||
|
Checksum sum;
|
||||||
|
msg_disHighVolBusFbMsg *p;
|
||||||
|
p = reinterpret_cast<msg_disHighVolBusFbMsg *>(m);
|
||||||
|
h = p->header;
|
||||||
|
// 判断消息是否有效
|
||||||
|
if (h.start1!= 0x20 || h.start2!= 0x20) {
|
||||||
|
sError.push_back("DisSys HVBus Msg Header errar");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (h.id!= DIS_HVBUS_FB_ID) {
|
||||||
|
sError.push_back("DisSys HVBus Msg ID error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
sum = calculateChecksum((unsigned char*)m, sizeof(msg_disHighVolBusFbMsg));
|
||||||
|
if (sum!= p->checkCode) {
|
||||||
|
sError.push_back("DisSys HVBus Msg Check error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
s = *p;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool udpComm::getDisSysHVABusFb(char *m, msg_disHighAVolBusFbMsg &s)
|
||||||
|
{
|
||||||
|
m_header h;
|
||||||
|
Checksum sum;
|
||||||
|
msg_disHighAVolBusFbMsg *p;
|
||||||
|
p = reinterpret_cast<msg_disHighAVolBusFbMsg *>(m);
|
||||||
|
h = p->header;
|
||||||
|
// 判断消息是否有效
|
||||||
|
if (h.start1!= 0x20 || h.start2!= 0x20) {
|
||||||
|
sError.push_back("DisSys HVABus Msg Header errar");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (h.id!= DIS_HVBUSA_FB_ID) {
|
||||||
|
sError.push_back("DisSys HVABus Msg ID error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
sum = calculateChecksum((unsigned char*)m, sizeof(msg_disHighAVolBusFbMsg));
|
||||||
|
if (sum!= p->checkCode) {
|
||||||
|
sError.push_back("DisSys HVABus Msg Check error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
s = *p;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool udpComm::getDisSysHVBBusFb(char *m, msg_disHighBVolBusFbMsg &s)
|
||||||
|
{
|
||||||
|
m_header h;
|
||||||
|
Checksum sum;
|
||||||
|
msg_disHighBVolBusFbMsg *p;
|
||||||
|
p = reinterpret_cast<msg_disHighBVolBusFbMsg *>(m);
|
||||||
|
h = p->header;
|
||||||
|
// 判断消息是否有效
|
||||||
|
if (h.start1!= 0x20 || h.start2!= 0x20) {
|
||||||
|
sError.push_back("DisSys HVBBus Msg Header errar");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (h.id!= DIS_HVBUSB_FB_ID) {
|
||||||
|
sError.push_back("DisSys HVBBus Msg ID error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
sum = calculateChecksum((unsigned char*)m, sizeof(msg_disHighBVolBusFbMsg));
|
||||||
|
if (sum!= p->checkCode) {
|
||||||
|
sError.push_back("DisSys HVBBus Msg Check error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
s = *p;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool udpComm::getDisSysLVBusFb(char *m, msg_disLowBusFbMsg &s)
|
||||||
|
{
|
||||||
|
m_header h;
|
||||||
|
Checksum sum;
|
||||||
|
msg_disLowBusFbMsg *p;
|
||||||
|
p = reinterpret_cast<msg_disLowBusFbMsg *>(m);
|
||||||
|
h = p->header;
|
||||||
|
// 判断消息是否有效
|
||||||
|
if (h.start1!= 0x20 || h.start2!= 0x20) {
|
||||||
|
sError.push_back("DisSys LVBus Msg Header errar");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (h.id!= DIS_LVBUS_FB_ID) {
|
||||||
|
sError.push_back("DisSys LVBus Msg ID error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
sum = calculateChecksum((unsigned char*)m, sizeof(msg_disLowBusFbMsg));
|
||||||
|
if (sum!= p->checkCode) {
|
||||||
|
sError.push_back("DisSys LVBus Msg Check error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
s = *p;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool udpComm::pushMsgToQueue(unsigned char *m)
|
||||||
|
{
|
||||||
|
if(m==NULL)
|
||||||
|
{
|
||||||
|
sError.push_back("pushMsgToQueue faile,Msg is NULL");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
unsigned char* Buff = m;
|
||||||
|
//判断消息
|
||||||
|
char *header = new char[sizeof(m_header)];
|
||||||
|
unsigned short id;
|
||||||
|
memcpy(header,Buff,sizeof(m_header));
|
||||||
|
if(!getMsgId(header,id))
|
||||||
|
{
|
||||||
|
sError.push_back("pushMsgToQueue faile,Msg ID error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
delete []header;
|
||||||
|
//输入消息
|
||||||
|
switch (id)
|
||||||
|
{
|
||||||
|
case CCU_STATE_FB_ID: //CCU_STATE_FB 0x0051
|
||||||
|
msg_CcuStateFbMsg s;
|
||||||
|
if(getCcuState((char *)Buff,s))
|
||||||
|
{
|
||||||
|
if(m_qReceiveCcuStateBuffer.size()<QUENUE_SIZE)
|
||||||
|
m_qReceiveCcuStateBuffer.push(s);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sError.push_back("pushMsgToQueue faile,CcuState buffer is full");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//sError.push_back();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CCU_SET_PARM_FB_ID: //CCU_SET_PARM_FB 0x0040
|
||||||
|
msg_CcuSetParmFbMsg p;
|
||||||
|
if(getCcuSetParmFb((char *)Buff,p))
|
||||||
|
{
|
||||||
|
if(m_qReceiveCcuSetParmBuffer.size()<QUENUE_SIZE)
|
||||||
|
m_qReceiveCcuSetParmBuffer.push(p);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sError.push_back("pushMsgToQueue faile,CcuSetParm buffer is full");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DIS_HVBUS_FB_ID: //DIS_HVBUS_FB 0x0020
|
||||||
|
msg_disHighVolBusFbMsg h;
|
||||||
|
if(getDisSysHVBusFb((char *)Buff,h))
|
||||||
|
{
|
||||||
|
if(m_qReceiveDisHighVolBusBuffer.size()<QUENUE_SIZE)
|
||||||
|
m_qReceiveDisHighVolBusBuffer.push(h);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sError.push_back("pushMsgToQueue faile,DisSysHVBus buffer is full");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DIS_HVBUSA_FB_ID: //DIS_HVBUSA_FB 0x0006
|
||||||
|
msg_disHighAVolBusFbMsg a;
|
||||||
|
if(getDisSysHVABusFb((char *)Buff,a))
|
||||||
|
{
|
||||||
|
if(m_qReceiveDisHighAVolBusBuffer.size()<QUENUE_SIZE)
|
||||||
|
m_qReceiveDisHighAVolBusBuffer.push(a);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sError.push_back("pushMsgToQueue faile,DisSysHVABus buffer is full");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DIS_HVBUSB_FB_ID: //DIS_HVBUSB_FB 0x0007
|
||||||
|
msg_disHighBVolBusFbMsg b;
|
||||||
|
if(getDisSysHVBBusFb((char *)Buff,b))
|
||||||
|
{
|
||||||
|
if(m_qReceiveDisHighBVolBusBuffer.size()<QUENUE_SIZE)
|
||||||
|
m_qReceiveDisHighBVolBusBuffer.push(b);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sError.push_back("pushMsgToQueue faile,DisSysHVBBus buffer is full");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DIS_LVBUS_FB_ID: //DIS_LVBUS_FB 0x0008
|
||||||
|
msg_disLowBusFbMsg l;
|
||||||
|
if(getDisSysLVBusFb((char *)Buff,l))
|
||||||
|
{
|
||||||
|
if(m_qReceiveDisLowBusBuffer.size()<QUENUE_SIZE)
|
||||||
|
m_qReceiveDisLowBusBuffer.push(l);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sError.push_back("pushMsgToQueue faile,DisSysLVBus buffer is full");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool udpComm::clearMsgQueue()
|
||||||
|
{
|
||||||
|
while(!m_qReceiveCcuStateBuffer.empty())
|
||||||
|
m_qReceiveCcuStateBuffer.pop();
|
||||||
|
|
||||||
|
while(!m_qReceiveCcuSetParmBuffer.empty())
|
||||||
|
m_qReceiveCcuSetParmBuffer.pop();
|
||||||
|
|
||||||
|
while(!m_qReceiveDisHighVolBusBuffer.empty())
|
||||||
|
m_qReceiveDisHighVolBusBuffer.pop();
|
||||||
|
|
||||||
|
while(!m_qReceiveDisHighAVolBusBuffer.empty())
|
||||||
|
m_qReceiveDisHighAVolBusBuffer.pop();
|
||||||
|
|
||||||
|
while(!m_qReceiveDisHighBVolBusBuffer.empty())
|
||||||
|
m_qReceiveDisHighBVolBusBuffer.pop();
|
||||||
|
|
||||||
|
while(!m_qReceiveDisLowBusBuffer.empty())
|
||||||
|
m_qReceiveDisLowBusBuffer.pop();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
@@ -3,21 +3,42 @@
|
|||||||
#include "ccuUdpMsg.h"
|
#include "ccuUdpMsg.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <queue>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define QUENUE_SIZE 100
|
||||||
class udpComm {
|
class udpComm {
|
||||||
private:
|
private:
|
||||||
/* data */
|
/* data */
|
||||||
public:
|
public:
|
||||||
udpComm();
|
udpComm();
|
||||||
~udpComm();
|
~udpComm();
|
||||||
|
|
||||||
|
bool pushMsgToQueue(unsigned char *m);
|
||||||
|
bool clearMsgQueue();
|
||||||
|
|
||||||
bool getMsgId(char *m,unsigned short &id);
|
bool getMsgId(char *m,unsigned short &id);
|
||||||
|
|
||||||
bool getCcuState(char *m, msg_CcuStateFbMsg &s);
|
bool getCcuState(char *m, msg_CcuStateFbMsg &s);
|
||||||
bool getCcuSetParmFb(char *m, msg_CcuSetParmFbMsg &s);
|
bool getCcuSetParmFb(char *m, msg_CcuSetParmFbMsg &s);
|
||||||
|
|
||||||
|
bool getDisSysHVBusFb(char *m, msg_disHighVolBusFbMsg &s);
|
||||||
|
bool getDisSysHVABusFb(char *m, msg_disHighAVolBusFbMsg &s);
|
||||||
|
bool getDisSysHVBBusFb(char *m, msg_disHighBVolBusFbMsg &s);
|
||||||
|
bool getDisSysLVBusFb(char *m, msg_disLowBusFbMsg &s);
|
||||||
|
|
||||||
bool sendCcuColCmd(const msg_CcuColCmdMsg m);
|
bool sendCcuColCmd(const msg_CcuColCmdMsg m);
|
||||||
bool sendCcuSetParmCmd(const msg_CcuSetParmMsg m);
|
bool sendCcuSetParmCmd(const msg_CcuSetParmMsg m);
|
||||||
|
|
||||||
Checksum calculateChecksum(const unsigned char* data, int size);
|
Checksum calculateChecksum(const unsigned char* data, int size);
|
||||||
|
|
||||||
std::vector<std::string> sError;
|
std::vector<std::string> sError;
|
||||||
|
std::queue<msg_CcuStateFbMsg> m_qReceiveCcuStateBuffer;
|
||||||
|
std::queue<msg_CcuSetParmFbMsg> m_qReceiveCcuSetParmBuffer;
|
||||||
|
std::queue<msg_disHighVolBusFbMsg> m_qReceiveDisHighVolBusBuffer;
|
||||||
|
std::queue<msg_disHighAVolBusFbMsg> m_qReceiveDisHighAVolBusBuffer;
|
||||||
|
std::queue<msg_disHighBVolBusFbMsg> m_qReceiveDisHighBVolBusBuffer;
|
||||||
|
std::queue<msg_disLowBusFbMsg> m_qReceiveDisLowBusBuffer;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
msg_CcuColCmdMsg m_ccuColCmd;
|
msg_CcuColCmdMsg m_ccuColCmd;
|
||||||
|
|||||||
+17
-8
@@ -1,8 +1,8 @@
|
|||||||
import socket
|
import socket
|
||||||
import time
|
import time
|
||||||
import struct
|
import struct
|
||||||
from udpmsg import msg_CcuStateFbMsg
|
from udpmsg import *
|
||||||
from udpmsg import msg_CcuSetParamFbMsg
|
|
||||||
# 目标IP地址和端口
|
# 目标IP地址和端口
|
||||||
target_ip = '127.0.0.1'
|
target_ip = '127.0.0.1'
|
||||||
target_port = 5000
|
target_port = 5000
|
||||||
@@ -10,9 +10,11 @@ target_port = 5000
|
|||||||
|
|
||||||
mTest = msg_CcuStateFbMsg()
|
mTest = msg_CcuStateFbMsg()
|
||||||
mTest2 = msg_CcuSetParamFbMsg()
|
mTest2 = msg_CcuSetParamFbMsg()
|
||||||
|
mTest3 = msg_disHighVolBusFbMsg()
|
||||||
|
|
||||||
valid_msg = mTest.pack()
|
valid_msg = mTest.pack()
|
||||||
valid_msg2 = mTest2.pack()
|
valid_msg2 = mTest2.pack()
|
||||||
|
valid_msg3 = mTest3.pack()
|
||||||
print(valid_msg)
|
print(valid_msg)
|
||||||
|
|
||||||
|
|
||||||
@@ -21,22 +23,29 @@ sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|||||||
|
|
||||||
# 要发送的信息
|
# 要发送的信息
|
||||||
# message = "Hello, this is a test message."
|
# message = "Hello, this is a test message."
|
||||||
message = valid_msg
|
message = valid_msg3
|
||||||
# 发送信息的次数
|
# 发送信息的次数
|
||||||
num_messages = 10
|
num_messages = 10
|
||||||
|
|
||||||
# 发送信息的时间间隔(秒)
|
# 发送信息的时间间隔(秒)
|
||||||
interval = 1
|
interval = 0.1
|
||||||
|
|
||||||
for i in range(num_messages):
|
for i in range(num_messages):
|
||||||
# 发送信息
|
# 发送信息
|
||||||
sock.sendto(message, (target_ip, target_port))
|
sock.sendto(msg_CcuStateFbMsg().pack(), (target_ip, target_port))
|
||||||
|
time.sleep(interval)
|
||||||
|
sock.sendto(msg_CcuSetParamFbMsg().pack(), (target_ip, target_port))
|
||||||
|
time.sleep(interval)
|
||||||
|
sock.sendto(msg_disHighVolBusFbMsg().pack(), (target_ip, target_port))
|
||||||
|
time.sleep(interval)
|
||||||
|
sock.sendto(msg_disHighAVolBusFbMsg().pack(), (target_ip, target_port))
|
||||||
|
time.sleep(interval)
|
||||||
|
sock.sendto(msg_disHighBVolBusFbMsg().pack(), (target_ip, target_port))
|
||||||
|
time.sleep(interval)
|
||||||
|
sock.sendto(msg_disLowBusFbMsg().pack(), (target_ip, target_port))
|
||||||
# 打印发送的信息和目标地址
|
# 打印发送的信息和目标地址
|
||||||
print(f"Sent message to {target_ip}:{target_port}")
|
print(f"Sent message to {target_ip}:{target_port}")
|
||||||
|
|
||||||
# 等待一段时间
|
# 等待一段时间
|
||||||
time.sleep(interval)
|
|
||||||
# sock.sendto(valid_msg2, (target_ip, target_port))
|
# sock.sendto(valid_msg2, (target_ip, target_port))
|
||||||
time.sleep(interval)
|
time.sleep(interval)
|
||||||
|
|
||||||
|
|||||||
@@ -216,6 +216,270 @@ class msg_CcuSetParamFbMsg:
|
|||||||
self.checkCode += data[i]
|
self.checkCode += data[i]
|
||||||
data += struct.pack('<I', self.checkCode)
|
data += struct.pack('<I', self.checkCode)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
class msg_disHighVolBusFbMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0005
|
||||||
|
self.length = 10
|
||||||
|
self.DCB1 = 0x00
|
||||||
|
self.DCB2 = 0x00
|
||||||
|
self.ZK1 = 0x00
|
||||||
|
self.ZK2 = 0x00
|
||||||
|
self.ZK3 = 0x00
|
||||||
|
self.ZK4 = 0x00
|
||||||
|
self.ZK5 = 0x00
|
||||||
|
self.ZK6 = 0x00
|
||||||
|
self.ZK7 = 0x00
|
||||||
|
self.ZK8 = 0x00
|
||||||
|
self.ZK9 = 0x00
|
||||||
|
self.ZK10 = 0x00
|
||||||
|
self.busInsulationLow = 0x00
|
||||||
|
self.busAInsulationHigh = 0x00
|
||||||
|
self.lostPower = 0x00
|
||||||
|
self.lostEmerPower = 0x00
|
||||||
|
self.powerBusVoltage = 0x00
|
||||||
|
self.dcDc5ModuleCurrent = 0x00
|
||||||
|
self.powerBusCurrent = 0x00
|
||||||
|
self.busbarAVoltage = 0x00
|
||||||
|
self.propulsionMotorControlBoxCurrent = 0x00
|
||||||
|
self.busbarACurrent = 0x00
|
||||||
|
self.lithiumBatteryGroupMeterCurrent = 0x00
|
||||||
|
self.bowHighVoltageDistributionBoxCurrent = 0x00
|
||||||
|
self.sternFTDevice45Current = 0x00
|
||||||
|
self.tyzReservedSwitchCurrent = 0x00
|
||||||
|
self.sternRudderSwitch1Current = 0x00
|
||||||
|
self.reservedCurrent1 = 0x00
|
||||||
|
self.sternRudderSwitch2Current = 0x00
|
||||||
|
self.reservedCurrent2 = 0x00
|
||||||
|
self.fbReservedSwitchCurrent = 0x00
|
||||||
|
self.reservedCurrent3 = 0x00
|
||||||
|
self.checkCode = 0x0000
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
# 初始化数据
|
||||||
|
self.checkCode = 0x0000
|
||||||
|
data = struct.pack('<B', self.start1)
|
||||||
|
data += struct.pack('<B', self.start2)
|
||||||
|
data += struct.pack('<H', self.id)
|
||||||
|
data += struct.pack('<H', self.length)
|
||||||
|
# 填充数据
|
||||||
|
data += struct.pack('<B', self.DCB1)
|
||||||
|
data += struct.pack('<B', self.DCB2)
|
||||||
|
data += struct.pack('<B', self.ZK1)
|
||||||
|
data += struct.pack('<B', self.ZK2)
|
||||||
|
data += struct.pack('<B', self.ZK3)
|
||||||
|
data += struct.pack('<B', self.ZK4)
|
||||||
|
data += struct.pack('<B', self.ZK5)
|
||||||
|
data += struct.pack('<B', self.ZK6)
|
||||||
|
data += struct.pack('<B', self.ZK7)
|
||||||
|
data += struct.pack('<B', self.ZK8)
|
||||||
|
data += struct.pack('<B', self.ZK9)
|
||||||
|
data += struct.pack('<B', self.ZK10)
|
||||||
|
data += struct.pack('<B', self.busInsulationLow)
|
||||||
|
data += struct.pack('<B', self.busAInsulationHigh)
|
||||||
|
data += struct.pack('<B', self.lostPower)
|
||||||
|
data += struct.pack('<B', self.lostEmerPower)
|
||||||
|
data += struct.pack('<H', self.powerBusVoltage)
|
||||||
|
data += struct.pack('<H', self.dcDc5ModuleCurrent)
|
||||||
|
data += struct.pack('<H', self.powerBusCurrent)
|
||||||
|
data += struct.pack('<H', self.busbarAVoltage)
|
||||||
|
data += struct.pack('<H', self.propulsionMotorControlBoxCurrent)
|
||||||
|
data += struct.pack('<H', self.busbarACurrent)
|
||||||
|
data += struct.pack('<H', self.lithiumBatteryGroupMeterCurrent)
|
||||||
|
data += struct.pack('<H', self.bowHighVoltageDistributionBoxCurrent)
|
||||||
|
data += struct.pack('<H', self.sternFTDevice45Current)
|
||||||
|
data += struct.pack('<H', self.tyzReservedSwitchCurrent)
|
||||||
|
data += struct.pack('<H', self.sternRudderSwitch1Current)
|
||||||
|
data += struct.pack('<H', self.reservedCurrent1)
|
||||||
|
data += struct.pack('<H', self.sternRudderSwitch2Current)
|
||||||
|
data += struct.pack('<H', self.reservedCurrent2)
|
||||||
|
data += struct.pack('<H', self.fbReservedSwitchCurrent)
|
||||||
|
data += struct.pack('<H', self.reservedCurrent3)
|
||||||
|
for i in range(len(data)):
|
||||||
|
self.checkCode += data[i]
|
||||||
|
data += struct.pack('<I', self.checkCode)
|
||||||
|
return data
|
||||||
|
|
||||||
|
class msg_disHighAVolBusFbMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0006
|
||||||
|
self.length = 10
|
||||||
|
self.bowFTDevice123CircuitBreaker = 0x00
|
||||||
|
self.actuatorCircuitBreaker = 0x00
|
||||||
|
self.mastSteeringGearControlBoxCircuitBreaker = 0x00
|
||||||
|
self.xczCircuitBreaker = 0x00
|
||||||
|
self.bowRudderControlBoxCircuitBreaker = 0x00
|
||||||
|
self.openWaterCoverStartCylinderCircuitBreaker = 0x00
|
||||||
|
self.instrumentPowerFailureSignal = 0x00
|
||||||
|
self.emergencyPowerFailureSignal = 0x00
|
||||||
|
self.waterIngressionAlarm = 0x00
|
||||||
|
self.busbarBVoltage = 0x0000
|
||||||
|
self.busbarBCurrent = 0x0000
|
||||||
|
self.bowFTDevice123Current = 0x0000
|
||||||
|
self.actuatorCurrent = 0x0000
|
||||||
|
self.mastSteeringGearControlBoxCurrent = 0x0000
|
||||||
|
self.xczCurrent = 0x0000
|
||||||
|
self.bowRudderControlBoxCurrent = 0x0000
|
||||||
|
self.openWaterCoverStartCylinderCurrent = 0x0000
|
||||||
|
self.checkCode = 0x0000
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
# 初始化数据
|
||||||
|
self.checkCode = 0x0000
|
||||||
|
data = struct.pack('<B', self.start1)
|
||||||
|
data += struct.pack('<B', self.start2)
|
||||||
|
data += struct.pack('<H', self.id)
|
||||||
|
data += struct.pack('<H', self.length)
|
||||||
|
# 填充数据
|
||||||
|
data += struct.pack('<B', self.bowFTDevice123CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.actuatorCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.mastSteeringGearControlBoxCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.xczCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.bowRudderControlBoxCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.openWaterCoverStartCylinderCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.instrumentPowerFailureSignal)
|
||||||
|
data += struct.pack('<B', self.emergencyPowerFailureSignal)
|
||||||
|
data += struct.pack('<B', self.waterIngressionAlarm)
|
||||||
|
data += struct.pack('<H', self.busbarBVoltage)
|
||||||
|
data += struct.pack('<H', self.busbarBCurrent)
|
||||||
|
data += struct.pack('<H', self.bowFTDevice123Current)
|
||||||
|
data += struct.pack('<H', self.actuatorCurrent)
|
||||||
|
data += struct.pack('<H', self.mastSteeringGearControlBoxCurrent)
|
||||||
|
data += struct.pack('<H', self.xczCurrent)
|
||||||
|
data += struct.pack('<H', self.bowRudderControlBoxCurrent)
|
||||||
|
data += struct.pack('<H', self.openWaterCoverStartCylinderCurrent)
|
||||||
|
for i in range(len(data)):
|
||||||
|
self.checkCode += data[i]
|
||||||
|
data += struct.pack('<I', self.checkCode)
|
||||||
|
return data
|
||||||
|
|
||||||
|
class msg_disHighBVolBusFbMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0007
|
||||||
|
self.length = 10
|
||||||
|
self.lithiumBatteryGroupInstrumentCircuitBreaker = 0x00
|
||||||
|
self.bowLowVoltageDistributionBoxCircuitBreaker = 0x00
|
||||||
|
self.unit4InstrumentDC48VCircuitBreaker = 0x00
|
||||||
|
self.dcC1DCDistributionPanelCircuitBreaker = 0x00
|
||||||
|
self.reservedCircuitBreaker1 = 0x00
|
||||||
|
self.reservedCircuitBreaker2 = 0x00
|
||||||
|
self.emergencyLithiumBatteryGroup2CircuitBreaker = 0x00
|
||||||
|
self.instrumentPowerFailureSignal = 0x00
|
||||||
|
self.emergencyPowerFailureSignal = 0x00
|
||||||
|
self.instrumentBusbarInsulationLow = 0x00
|
||||||
|
self.instrumentBusbarVoltage = 0x0000
|
||||||
|
self.bowLowVoltageDistributionBoxCurrent = 0x0000
|
||||||
|
self.dcC1InstrumentDC48VCurrent = 0x0000
|
||||||
|
self.reservedCurrent1 = 0x0000
|
||||||
|
self.emergencyLithiumBatteryGroup2Current = 0x0000
|
||||||
|
self.lithiumBatteryGroupInstrumentCurrent = 0x0000
|
||||||
|
self.unit4InstrumentDC48VCurrent = 0x0000
|
||||||
|
self.reservedCurrent2 = 0x0000
|
||||||
|
self.emergency2BusbarVoltage = 0x0000
|
||||||
|
self.compositeEnergyManagementSystemEmergencyDC48VCurrent = 0x0000
|
||||||
|
self.fuelCellSecuritySystemEmergencyDC48VCurrent = 0x0000
|
||||||
|
self.plcControlPowerCurrent = 0x0000
|
||||||
|
self.checkCode = 0x0000
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
# 初始化数据
|
||||||
|
self.checkCode = 0x0000
|
||||||
|
data = struct.pack('<B', self.start1)
|
||||||
|
data += struct.pack('<B', self.start2)
|
||||||
|
data += struct.pack('<H', self.id)
|
||||||
|
data += struct.pack('<H', self.length)
|
||||||
|
# 填充数据
|
||||||
|
data += struct.pack('<B', self.lithiumBatteryGroupInstrumentCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.bowLowVoltageDistributionBoxCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.unit4InstrumentDC48VCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.dcC1DCDistributionPanelCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.reservedCircuitBreaker1)
|
||||||
|
data += struct.pack('<B', self.reservedCircuitBreaker2)
|
||||||
|
data += struct.pack('<B', self.emergencyLithiumBatteryGroup2CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.instrumentPowerFailureSignal)
|
||||||
|
data += struct.pack('<B', self.emergencyPowerFailureSignal)
|
||||||
|
data += struct.pack('<B', self.instrumentBusbarInsulationLow)
|
||||||
|
data += struct.pack('<H', self.instrumentBusbarVoltage)
|
||||||
|
data += struct.pack('<H', self.bowLowVoltageDistributionBoxCurrent)
|
||||||
|
data += struct.pack('<H', self.dcC1InstrumentDC48VCurrent)
|
||||||
|
data += struct.pack('<H', self.reservedCurrent1)
|
||||||
|
data += struct.pack('<H', self.emergencyLithiumBatteryGroup2Current)
|
||||||
|
data += struct.pack('<H', self.lithiumBatteryGroupInstrumentCurrent)
|
||||||
|
data += struct.pack('<H', self.unit4InstrumentDC48VCurrent)
|
||||||
|
data += struct.pack('<H', self.reservedCurrent2)
|
||||||
|
data += struct.pack('<H', self.emergency2BusbarVoltage)
|
||||||
|
data += struct.pack('<H', self.compositeEnergyManagementSystemEmergencyDC48VCurrent)
|
||||||
|
data += struct.pack('<H', self.fuelCellSecuritySystemEmergencyDC48VCurrent)
|
||||||
|
data += struct.pack('<H', self.plcControlPowerCurrent)
|
||||||
|
for i in range(len(data)):
|
||||||
|
self.checkCode += data[i]
|
||||||
|
data += struct.pack('<I', self.checkCode)
|
||||||
|
return data
|
||||||
|
|
||||||
|
class msg_disLowBusFbMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0008
|
||||||
|
self.length = 10
|
||||||
|
self.unit1CircuitBreaker = 0x00
|
||||||
|
self.unit2CircuitBreaker = 0x00
|
||||||
|
self.unit3CircuitBreaker = 0x00
|
||||||
|
self.unit5CircuitBreaker = 0x00
|
||||||
|
self.bowPZDeviceCircuitBreaker = 0x00
|
||||||
|
self.reservedCircuitBreaker1 = 0x00
|
||||||
|
self.reservedCircuitBreaker2 = 0x00
|
||||||
|
self.emergencyLithiumBatteryGroup1CircuitBreaker = 0x00
|
||||||
|
self.powerFailureSignal = 0x00
|
||||||
|
self.waterIngressionAlarm = 0x00
|
||||||
|
self.instrumentBusbarVoltage = 0x0000
|
||||||
|
self.instrumentBusbarCurrent = 0x0000
|
||||||
|
self.unit1Current = 0x0000
|
||||||
|
self.unit2Current = 0x0000
|
||||||
|
self.unit3Current = 0x0000
|
||||||
|
self.unit5Current = 0x0000
|
||||||
|
self.bowPZDeviceCurrent = 0x0000
|
||||||
|
self.emergencyLithiumBatteryGroup1Current = 0x0000
|
||||||
|
self.emergency1BusbarVoltage = 0x0000
|
||||||
|
self.checkCode = 0x0000
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
# 初始化数据
|
||||||
|
self.checkCode = 0x0000
|
||||||
|
data = struct.pack('<B', self.start1)
|
||||||
|
data += struct.pack('<B', self.start2)
|
||||||
|
data += struct.pack('<H', self.id)
|
||||||
|
data += struct.pack('<H', self.length)
|
||||||
|
# 填充数据
|
||||||
|
data += struct.pack('<B', self.unit1CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.unit2CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.unit3CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.unit5CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.bowPZDeviceCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.reservedCircuitBreaker1)
|
||||||
|
data += struct.pack('<B', self.reservedCircuitBreaker2)
|
||||||
|
data += struct.pack('<B', self.emergencyLithiumBatteryGroup1CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.powerFailureSignal)
|
||||||
|
data += struct.pack('<B', self.waterIngressionAlarm)
|
||||||
|
data += struct.pack('<H', self.instrumentBusbarVoltage)
|
||||||
|
data += struct.pack('<H', self.instrumentBusbarCurrent)
|
||||||
|
data += struct.pack('<H', self.unit1Current)
|
||||||
|
data += struct.pack('<H', self.unit2Current)
|
||||||
|
data += struct.pack('<H', self.unit3Current)
|
||||||
|
data += struct.pack('<H', self.unit5Current)
|
||||||
|
data += struct.pack('<H', self.bowPZDeviceCurrent)
|
||||||
|
data += struct.pack('<H', self.emergencyLithiumBatteryGroup1Current)
|
||||||
|
data += struct.pack('<H', self.emergency1BusbarVoltage)
|
||||||
|
for i in range(len(data)):
|
||||||
|
self.checkCode += data[i]
|
||||||
|
data += struct.pack('<I', self.checkCode)
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user