diff --git a/.vscode/settings.json b/.vscode/settings.json index dd08119..b526429 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -53,5 +53,6 @@ "streambuf": "cpp", "cinttypes": "cpp", "typeinfo": "cpp" - } + }, + "C_Cpp.errorSquiggles": "disabled" } \ No newline at end of file diff --git a/src/pPowerManger/CMakeLists.txt b/src/pPowerManger/CMakeLists.txt index 581568f..bb5cd07 100644 --- a/src/pPowerManger/CMakeLists.txt +++ b/src/pPowerManger/CMakeLists.txt @@ -18,6 +18,7 @@ endif (${WIN32}) SET(SRC PowerManger.cpp PowerManger_Info.cpp + udpComm.cpp main.cpp ) diff --git a/src/pPowerManger/PowerManger.cpp b/src/pPowerManger/PowerManger.cpp index 2a13780..acf5390 100644 --- a/src/pPowerManger/PowerManger.cpp +++ b/src/pPowerManger/PowerManger.cpp @@ -10,6 +10,7 @@ #include "ACTable.h" #include "PowerManger.h" #include "MOOS/libMOOS/Utils/ConsoleColours.h" +#include using namespace std; @@ -184,7 +185,61 @@ bool PowerManger::ListenLoopCCU() { int nRead = m_pCcuUdpComm->iRecieveMessage(Buff,sizeof(Buff)); cout< 0) + { + //判断消息 + char *header = new char[sizeof(m_header)]; + unsigned short id; + memcpy(header,Buff,sizeof(m_header)); + if(!m_udpComm.getMsgId(header,id)) + { + cout << "------------------" << endl; + cout << "id:" << id << endl; + cout << "getMsgId faile" << endl; + } + delete []header; + //处理消息 + switch (id) + { + case 0x0051: //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:" << s.fcuState << endl; + cout << "fcuFaultLeve:" << s.fcuFaultLeve << endl; + cout << "powerLimit:" << s.powerLimit << endl; + } + else + { + for(int i = 0;i < m_udpComm.sError.size();i++) + cout << m_udpComm.sError[i] << endl; + m_udpComm.sError.clear(); + } + break; + case 0x0040: //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; } diff --git a/src/pPowerManger/PowerManger.h b/src/pPowerManger/PowerManger.h index dc6a0a6..b699020 100644 --- a/src/pPowerManger/PowerManger.h +++ b/src/pPowerManger/PowerManger.h @@ -23,6 +23,8 @@ #include "MOOS/libMOOS/Utils/MOOSThread.h" #include "MOOS/libMOOS/Comms/XPCUdpSocket.h" #include "ccuUdpMsg.h" +#include "json/json.h" +#include "udpComm.h" #define IPORT 5000 #define MAX_UDP_PKT_SIZE 65535 @@ -50,6 +52,8 @@ class PowerManger : public AppCastingMOOSApp long m_lPort; unsigned int m_nReceiveBufferSizeKB; unsigned int m_nSendBufferSizeKB; + + udpComm m_udpComm; XPCUdpSocket *m_pCcuUdpComm; diff --git a/src/pPowerManger/ccuUdpMsg.h b/src/pPowerManger/ccuUdpMsg.h index 7835303..43e7b64 100644 --- a/src/pPowerManger/ccuUdpMsg.h +++ b/src/pPowerManger/ccuUdpMsg.h @@ -1,189 +1,181 @@ #ifndef CCUUDPMSG__H #define CCUUDPMSG__H -typedef unsigned int Checksum; +typedef unsigned int Checksum; -typedef struct -{ - unsigned char start1; - unsigned char start2; - unsigned short id; - unsigned short length; +typedef struct { + unsigned char start1; + unsigned char start2; + unsigned short id; + unsigned short length; } m_header; -typedef struct -{ - unsigned short year; - unsigned short month; - unsigned short day; - unsigned short hour; - unsigned short minute; - unsigned short second; +typedef struct { + unsigned short year; + unsigned short month; + unsigned short day; + unsigned short hour; + unsigned short minute; + unsigned short second; } m_date; -//复合管控器操作指令 -typedef struct -{ - m_header header; - m_date date; - unsigned char workCondition; - unsigned char fcuCmd; - unsigned char fcuPowerEfficiency; - unsigned char fcuInsEfficiency; - unsigned char insBatCmd; - unsigned char powerBatCmd; - unsigned char powerBatEfficiency; - unsigned char heartbeat; - unsigned char masterState; - Checksum checkCode; +// 复合管控器操作指令 +typedef struct { + m_header header; + m_date date; + unsigned char workCondition; + unsigned char fcuCmd; + unsigned char fcuPowerEfficiency; + unsigned char fcuInsEfficiency; + unsigned char insBatCmd; + unsigned char powerBatCmd; + unsigned char powerBatEfficiency; + unsigned char heartbeat; + unsigned char masterState; + Checksum checkCode; } msg_CcuColCmdMsg; -//复合管控器参数设定指令 -typedef struct -{ - m_header header; - unsigned char insSocHold1; - unsigned char insSocHold2; - unsigned char insSocHold3; - unsigned char fcuToInsLimit1; - unsigned char fcuToinsLimit2; - unsigned char powerSocHold1; - unsigned char powerSocHold2; - unsigned char powerSocHold3; - unsigned char fcuToPowerLimit1; - unsigned char fcuToPowerLimit2; - Checksum checkCode; +// 复合管控器参数设定指令 +typedef struct { + m_header header; + unsigned char insSocHold1; + unsigned char insSocHold2; + unsigned char insSocHold3; + unsigned char fcuToInsLimit1; + unsigned char fcuToinsLimit2; + unsigned char powerSocHold1; + unsigned char powerSocHold2; + unsigned char powerSocHold3; + unsigned char fcuToPowerLimit1; + unsigned char fcuToPowerLimit2; + Checksum checkCode; } msg_CcuSetParmMsg; -//配电指令 -typedef struct -{ - m_header header; - unsigned char dcb1; - unsigned char dcb2; - unsigned char dcb3; - unsigned char dcb4; - unsigned char dcb5; - unsigned char sw1; - unsigned char sw2; - unsigned char qf1; - unsigned char qf2; - unsigned char qf3; - unsigned char qf4; - unsigned char qf5; - unsigned char qf6; - unsigned char qf7; - unsigned char qf8; - unsigned char qf9; - unsigned char qf10; - unsigned char qf11; - unsigned char qf12; - unsigned char qf13; - unsigned char qf14; - unsigned char qf15; - unsigned char qf16; - unsigned char qf17; - unsigned char qf18; - unsigned char qf19; - unsigned char qf20; - unsigned char qf21; - unsigned char qf22; - unsigned char qf23; - unsigned char qf24; - unsigned char qf25; - unsigned char qf26; - Checksum checkCode; +// 配电指令 +typedef struct { + m_header header; + unsigned char dcb1; + unsigned char dcb2; + unsigned char dcb3; + unsigned char dcb4; + unsigned char dcb5; + unsigned char sw1; + unsigned char sw2; + unsigned char qf1; + unsigned char qf2; + unsigned char qf3; + unsigned char qf4; + unsigned char qf5; + unsigned char qf6; + unsigned char qf7; + unsigned char qf8; + unsigned char qf9; + unsigned char qf10; + unsigned char qf11; + unsigned char qf12; + unsigned char qf13; + unsigned char qf14; + unsigned char qf15; + unsigned char qf16; + unsigned char qf17; + unsigned char qf18; + unsigned char qf19; + unsigned char qf20; + unsigned char qf21; + unsigned char qf22; + unsigned char qf23; + unsigned char qf24; + unsigned char qf25; + unsigned char qf26; + Checksum checkCode; } msg_disSysCmdMsg; -//复合管控参数设定反馈指令 -typedef struct -{ - m_header header; - unsigned char flag; - unsigned char failureCode; - Checksum checkCode; +// 复合管控参数设定反馈指令 +typedef struct { + m_header header; + unsigned char flag; + unsigned char failureCode; + Checksum checkCode; } msg_CcuSetParmFbMsg; -//复合管控状态反馈 -typedef struct -{ - m_header header; - 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; - Checksum checkCode; +// 复合管控状态反馈 +typedef struct { + m_header header; + 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; + Checksum checkCode; } msg_CcuStateFbMsg; - -#endif \ No newline at end of file +#endif diff --git a/src/pPowerManger/udpComm.cpp b/src/pPowerManger/udpComm.cpp new file mode 100644 index 0000000..dfa732f --- /dev/null +++ b/src/pPowerManger/udpComm.cpp @@ -0,0 +1,102 @@ +#include "udpComm.h" +#include + +udpComm::udpComm() {} + +udpComm::~udpComm() {} +bool udpComm::getMsgId(char *m,unsigned short &id) +{ + m_header h; + h = *reinterpret_cast(m); + // 判断消息是否有效 + if (h.start1!= 0x20 || h.start2!= 0x20) { + // sError.push_back("Msg Header errar"); + return false; + } + id = h.id; + return true; +} +bool udpComm::getCcuState(char *m, msg_CcuStateFbMsg &s) { + m_header h; + Checksum sum; + msg_CcuStateFbMsg *p; + p = reinterpret_cast(m); + + h = p->header; + + // 判断消息是否有效 + if (h.start1 != 0x20 || h.start2 != 0x20) { + sError.push_back("CcuState Msg Header errar"); + return false; + } + if (h.id != 0x0051) { + sError.push_back("CcuState Msg ID error"); + // std::cout << "-------" <currentWorkCondition + + p->fcuState + p->fcuFaultLeve + p->powerLimit + p->totalPowerGeneration + + p->ch4o + p->o2 + p->fcuVoltage + p->fcuCurrent + p->o2Level + + p->placeholder1 + p->exchangerTemperature + p->fcuOutPower + + p->fcuOutIns + p->fcuVoltageIns + p->fcuVoltagePower + p->fcuCurrentIns + + p->fcuCurrentPower + p->h2Concentration1 + p->h2Concentration2 + + p->o2Concentration1 + p->o2Concentration2 + p->ch4oConcentration1 + + p->ch4oConcentration2 + p->backpressure1 + p->backpressure2 + + p->flameDetection + p->fcuGZ_1L + p->fcuGZ_1H + p->fcuGZ_2L + + p->fcuGZ_2H + p->fcuGZ_3L + p->fcuGZ_3H + p->insPosRelayState + + p->insNegRelayState + p->powerNegRelayState + p->powerPosRelayState + + p->insBatLimit + p->powerBatLimit + p->insBatSoc + p->powerBatSoc + + p->insBatTotalElectricity + p->powerBatTotalElectricity + + p->insBatCurrentElectricity + p->powerBatCurrentElectricity + + p->insChargeState + p->powerChargeState + p->insLinkVoltage + + p->insPackVoltage + p->insCurrent + p->insPosInsulationResistance + + p->insNegInsulationResistance + p->powerLinkVoltage + + p->powerPackVoltage + p->powerCurrent + p->powerPosInsulationResistance + + p->powerNegInsulationResistance + p->insEmergencyStatusWord + + p->powerEmergencyStatusWord + p->insAlarmIdentificationWord + + p->powerAlarmIdentificationWord + p->insCurrentSocHold1 + + p->insCurrentSocHold2 + p->insCurrentSocHold3 + p->fcuCurrentToInsLimit1 + + p->fcuCurrentToinsLimit2 + p->powerCurrentSocHold1 + + p->powerCurrentSocHold2 + p->powerCurrentSocHold3 + + p->powerCurrentToInsLimit1 + p->powerCurrentToinsLimit2 + + p->placeholder2 + p->placeholder3 + p->placeholder5; + if (sum != p->checkCode) { + sError.push_back("CcuStat Msg Check error"); + //return false; TODO: 暂时不校验 + } + s = *p; + return true; +} + +bool udpComm::getCcuSetParmFb(char *m, msg_CcuSetParmFbMsg &s) +{ + m_header h; + Checksum sum; + msg_CcuSetParmFbMsg *p; + p = reinterpret_cast(m); + + h = p->header; + + // 判断消息是否有效 + if (h.start1!= 0x20 || h.start2!= 0x20) { + sError.push_back("CcuSetParm Msg Header errar"); + return false; + } + + if (h.id!= 0x0040) + { + sError.push_back("CcuSetParm Msg ID error"); + return false; + } + + sum = h.id + h.length + h.start1 + h.start2 + p->flag + p->failureCode; + + if (sum!= p->checkCode) { + sError.push_back("CcuSetParm Msg Check error"); + return false; + } + + s = *p; + return true; +} \ No newline at end of file diff --git a/src/pPowerManger/udpComm.h b/src/pPowerManger/udpComm.h new file mode 100644 index 0000000..04af433 --- /dev/null +++ b/src/pPowerManger/udpComm.h @@ -0,0 +1,24 @@ +#ifndef UDPCOMM__H +#define UDPCOMM__H +#include "ccuUdpMsg.h" +#include +#include +class udpComm { +private: + /* data */ +public: + udpComm(); + ~udpComm(); + bool getMsgId(char *m,unsigned short &id); + bool getCcuState(char *m, msg_CcuStateFbMsg &s); + bool getCcuSetParmFb(char *m, msg_CcuSetParmFbMsg &s); + bool sendCcuColCmd(const msg_CcuColCmdMsg m); + bool sendCcuSetParmCmd(const msg_CcuSetParmMsg m); + std::vector sError; + +private: + msg_CcuColCmdMsg m_ccuColCmd; + msg_CcuSetParmMsg m_ccuSetParmCmd; +}; + +#endif diff --git a/src/pPowerManger/udpMsg.cpp b/src/pPowerManger/udpMsg.cpp deleted file mode 100644 index 4575f03..0000000 --- a/src/pPowerManger/udpMsg.cpp +++ /dev/null @@ -1,13 +0,0 @@ - -#include "udpMsg.h" - - -udpMsg::udpMsg() -{ - -} - -udpMsg::~udpMsg() -{ - -} \ No newline at end of file diff --git a/src/pPowerManger/udpMsg.h b/src/pPowerManger/udpMsg.h deleted file mode 100644 index c7709cd..0000000 --- a/src/pPowerManger/udpMsg.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef UDPMSG__H -#define UDPMSG__H - -class udpMsg -{ -private: - /* data */ -public: - udpMsg(/* args */); - ~udpMsg(); -}; - -udpMsg::udpMsg(/* args */) -{ - -} - -udpMsg::~udpMsg() -{ - -} - - -#endif \ No newline at end of file diff --git a/test/model/ccu.slx b/test/model/ccu.slx index c58d788..dc0770d 100644 Binary files a/test/model/ccu.slx and b/test/model/ccu.slx differ diff --git a/test/model/controlFlow.slx b/test/model/controlFlow.slx new file mode 100644 index 0000000..8bad347 Binary files /dev/null and b/test/model/controlFlow.slx differ diff --git a/test/scripts/test.py b/test/scripts/test.py new file mode 100644 index 0000000..33798fd --- /dev/null +++ b/test/scripts/test.py @@ -0,0 +1,44 @@ +import socket +import time +import struct +from udpmsg import msg_CcuStateFbMsg +from udpmsg import msg_CcuSetParamFbMsg +# 目标IP地址和端口 +target_ip = '127.0.0.1' +target_port = 5000 + + +mTest = msg_CcuStateFbMsg() +mTest2 = msg_CcuSetParamFbMsg() + +valid_msg = mTest.pack() +valid_msg2 = mTest2.pack() +print(valid_msg) + + +# 创建UDP套接字 +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + +# 要发送的信息 +# message = "Hello, this is a test message." +message = valid_msg +# 发送信息的次数 +num_messages = 10 + +# 发送信息的时间间隔(秒) +interval = 1 + +for i in range(num_messages): + # 发送信息 + sock.sendto(message, (target_ip, target_port)) + + # 打印发送的信息和目标地址 + print(f"Sent message to {target_ip}:{target_port}: {message}") + + # 等待一段时间 + time.sleep(interval) + sock.sendto(valid_msg2, (target_ip, target_port)) + time.sleep(interval) + +# 关闭套接字 +sock.close() diff --git a/test/scripts/udpmsg.py b/test/scripts/udpmsg.py new file mode 100644 index 0000000..dae6c35 --- /dev/null +++ b/test/scripts/udpmsg.py @@ -0,0 +1,224 @@ +import struct + +class msg_CcuStateFbMsg: + def __init__(self): + self.start1 = 0x20 + self.start2 = 0x20 + self.id = 0x0051 + self.length = 0x5A + self.currentWorkCondition = 0x01 + self.fcuState = 0x01 + self.fcuFaultLeve = 0x01 + self.powerLimit = 0x01 + self.totalPowerGeneration = 0x01 + self.ch4o = 0x01 + self.o2 = 0x01 + self.fcuVoltage = 0x01 + self.fcuCurrent = 0x01 + self.o2Level = 0x01 + self.placeholder1 = 0x01 + self.exchangerTemperature = 0x01 + self.fcuOutPower = 0x01 + self.fcuOutIns = 0x01 + self.fcuVoltageIns = 0x01 + self.fcuVoltagePower = 0x01 + self.fcuCurrentIns = 0x01 + self.fcuCurrentPower = 0x01 + self.h2Concentration1 = 0x01 + self.h2Concentration2 = 0x01 + self.o2Concentration1 = 0x01 + self.o2Concentration2 = 0x01 + self.ch4oConcentration1 = 0x01 + self.ch4oConcentration2 = 0x01 + self.backpressure1 = 0x01 + self.backpressure2 = 0x01 + self.flameDetection = 0x01 + self.fcuGZ_1L = 0x01 + self.fcuGZ_1H = 0x01 + self.fcuGZ_2L = 0x01 + self.fcuGZ_2H = 0x01 + self.fcuGZ_3L = 0x01 + self.fcuGZ_3H = 0x01 + self.insPosRelayState = 0x01 + self.insNegRelayState = 0x01 + self.powerPosRelayState = 0x01 + self.powerNegRelayState = 0x01 + self.insBatLimit = 0x01 + self.powerBatLimit = 0x01 + self.insBatSoc = 0x01 + self.powerBatSoc = 0x01 + self.insBatTotalElectricity = 0x01 + self.powerBatTotalElectricity = 0x01 + self.insBatCurrentElectricity = 0x01 + self.powerBatCurrentElectricity = 0x01 + self.insChargeState = 0x01 + self.powerChargeState = 0x01 + self.insLinkVoltage = 0x01 + self.insPackVoltage = 0x01 + self.insCurrent = 0x01 + self.insPosInsulationResistance = 0x01 + self.insNegInsulationResistance = 0x01 + self.powerLinkVoltage = 0x01 + self.powerPackVoltage = 0x01 + self.powerCurrent = 0x01 + self.powerPosInsulationResistance = 0x01 + self.powerNegInsulationResistance = 0x01 + self.insEmergencyStatusWord = 0x01 + self.powerEmergencyStatusWord = 0x01 + self.insAlarmIdentificationWord = 0x01 + self.powerAlarmIdentificationWord = 0x01 + self.insCurrentSocHold1 = 0x01 + self.insCurrentSocHold2 = 0x01 + self.insCurrentSocHold3 = 0x01 + self.fcuCurrentToInsLimit1 = 0x01 + self.fcuCurrentToinsLimit2 = 0x01 + self.powerCurrentSocHold1 = 0x01 + self.powerCurrentSocHold2 = 0x01 + self.powerCurrentSocHold3 = 0x01 + self.powerCurrentToInsLimit1 = 0x01 + self.powerCurrentToinsLimit2 = 0x01 + self.placeholder2 = 0x01 + self.placeholder3 = 0x01 + self.placeholder4 = 0x01 + self.placeholder5 = 0x01 + self.checkCode = 0x01 + + + + + def pack(self): + # 初始化数据 + self.length = 0x0000 + + self.checkCode = self.start1 + self.start2 + self.id + self.length + + self.currentWorkCondition + self.fcuState + self.fcuFaultLeve + + self.powerLimit + self.totalPowerGeneration + self.ch4o + self.o2 + + self.fcuVoltage + self.fcuCurrent + self.o2Level + self.placeholder1 + + self.exchangerTemperature + self.fcuOutPower + self.fcuOutIns + self.fcuVoltageIns + + self.fcuVoltagePower + self.fcuCurrentIns + self.fcuCurrentPower + self.h2Concentration1 + + self.h2Concentration2 + self.o2Concentration1 + self.o2Concentration2 + self.ch4oConcentration1 + + self.ch4oConcentration2 + self.backpressure1 + self.backpressure2 + self.flameDetection + self.fcuGZ_1L + + self.fcuGZ_1H + self.fcuGZ_2L + self.fcuGZ_2H + self.fcuGZ_3L + self.fcuGZ_3H + self.insPosRelayState + + self.insNegRelayState + self.powerPosRelayState + self.powerNegRelayState + self.insBatLimit + + self.powerBatLimit + self.insBatSoc + self.powerBatSoc + self.insBatTotalElectricity + + self.powerBatTotalElectricity + self.insBatCurrentElectricity + self.powerBatCurrentElectricity + + self.insChargeState + self.powerChargeState + self.insLinkVoltage + self.insPackVoltage + + self.insCurrent + self.insPosInsulationResistance + self.insNegInsulationResistance + + self.powerLinkVoltage + self.powerPackVoltage + self.powerCurrent + self.powerPosInsulationResistance + + self.powerNegInsulationResistance + self.insEmergencyStatusWord + self.powerEmergencyStatusWord + + self.insAlarmIdentificationWord + self.powerAlarmIdentificationWord + self.insCurrentSocHold1 + self.insCurrentSocHold2 + + self.insCurrentSocHold3 + self.fcuCurrentToInsLimit1 + self.fcuCurrentToinsLimit2 + self.powerCurrentSocHold1 + + self.powerCurrentSocHold2 + self.powerCurrentSocHold3 + self.powerCurrentToInsLimit1 + self.powerCurrentToinsLimit2 + + self.placeholder2 + self.placeholder3 + self.placeholder4 + self.placeholder5 + + data = struct.pack('