diff --git a/data/msg/uPower_pmState_st.json b/data/msg/uPower_pmState_st.json new file mode 100644 index 0000000..1ef0f34 --- /dev/null +++ b/data/msg/uPower_pmState_st.json @@ -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 + } + } +} \ No newline at end of file diff --git a/src/pPowerManger/PowerManger.cpp b/src/pPowerManger/PowerManger.cpp index 677a6a7..d2b51d7 100644 --- a/src/pPowerManger/PowerManger.cpp +++ b/src/pPowerManger/PowerManger.cpp @@ -18,7 +18,7 @@ using namespace std; bool _ListenCB(void * pParam) { PowerManger* pMe = (PowerManger* )pParam; - return pMe->ListenLoopCCU(); + return pMe->ListenLoopUDP(); } //--------------------------------------------------------- @@ -84,7 +84,23 @@ bool PowerManger::Iterate() { AppCastingMOOSApp::Iterate(); // 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;iiRecieveMessage(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)) + if(!m_udpComm.pushMsgToQueue(Buff)) { - cout << "------------------" << endl; - cout << "id:" << id << endl; - cout << "getMsgId faile" << endl; + for(int i=0;i #include "MOOS/libMOOS/Thirdparty/AppCasting/AppCastingMOOSApp.h" #include "MOOS/libMOOS/Utils/MOOSThread.h" #include "MOOS/libMOOS/Comms/XPCUdpSocket.h" #include "ccuUdpMsg.h" #include "json/json.h" #include "udpComm.h" +#include "pmSysvariable.h" #define IPORT 5000 #define MAX_UDP_PKT_SIZE 65535 + class PowerManger : public AppCastingMOOSApp { public: PowerManger(); ~PowerManger(); public: - bool ListenLoopCCU(); + bool ListenLoopUDP(); protected: // Standard MOOSApp functions to overload bool OnNewMail(MOOSMSG_LIST &NewMail); @@ -47,24 +50,30 @@ class PowerManger : public AppCastingMOOSApp protected: // app function // bool _ListenCB(); XPCUdpSocket* setUdpScoket(long lPort); - // - bool buildStateReport(); + + bool updatePmState(); + bool buildEquipmentReport(); bool buildDisributionReport(); bool buildSubDistributionReport(); - bool buildPredictionReport(); + bool buildPredictionReport(); protected: // app variables - long m_lPort; - unsigned int m_nReceiveBufferSizeKB; - unsigned int m_nSendBufferSizeKB; - - udpComm m_udpComm; - - XPCUdpSocket *m_pCcuUdpComm; + pmState m_pmCurrentState; + msg_CcuStateFbMsg m_CcuCurrentState; + msg_disHighVolBusFbMsg m_disHighVolBusCurrentState; + msg_disHighAVolBusFbMsg m_disHighAVolBusCurrentState; + msg_disHighBVolBusFbMsg m_disHighBVolBusCurrentState; + msg_disLowBusFbMsg m_disLowBusState; 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; private: // State variables }; diff --git a/src/pPowerManger/ccuUdpMsg.h b/src/pPowerManger/ccuUdpMsg.h index c2eaf8d..137b082 100644 --- a/src/pPowerManger/ccuUdpMsg.h +++ b/src/pPowerManger/ccuUdpMsg.h @@ -1,10 +1,15 @@ #ifndef CCUUDPMSG__H #define CCUUDPMSG__H +#include "pmSysvariable.h" + #define CCU_UDPMSG_START1 0x20 #define CCU_UDPMSG_START2 0x20 #define CCU_STATE_FB_ID 0x0051 -#define CCU_SET_PARM_ID 0x0040 -#define CCU_SET_PARM_FB_ID 0x0041 +#define CCU_SET_PARM_FB_ID 0x0040 +#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) typedef unsigned int Checksum; @@ -106,83 +111,202 @@ typedef struct { // 复合管控状态反馈 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; + ccuState data; + // 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; -#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 diff --git a/src/pPowerManger/pmSysvariable.h b/src/pPowerManger/pmSysvariable.h new file mode 100644 index 0000000..07b105d --- /dev/null +++ b/src/pPowerManger/pmSysvariable.h @@ -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 \ No newline at end of file diff --git a/src/pPowerManger/udpComm.cpp b/src/pPowerManger/udpComm.cpp index 0283aac..2c4db23 100644 --- a/src/pPowerManger/udpComm.cpp +++ b/src/pPowerManger/udpComm.cpp @@ -1,5 +1,6 @@ #include "udpComm.h" #include +#include udpComm::udpComm() {} @@ -15,6 +16,7 @@ Checksum udpComm::calculateChecksum(const unsigned char* data, int size) } return checksum; } + bool udpComm::getMsgId(char *m,unsigned short &id) { m_header h; @@ -84,4 +86,253 @@ bool udpComm::getCcuSetParmFb(char *m, msg_CcuSetParmFbMsg &s) s = *p; return true; +} + +bool udpComm::getDisSysHVBusFb(char *m, msg_disHighVolBusFbMsg &s) +{ + m_header h; + Checksum sum; + msg_disHighVolBusFbMsg *p; + p = reinterpret_cast(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(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(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(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() #include +#include +#include + +#define QUENUE_SIZE 100 class udpComm { private: /* data */ public: udpComm(); ~udpComm(); + + bool pushMsgToQueue(unsigned char *m); + bool clearMsgQueue(); + bool getMsgId(char *m,unsigned short &id); + bool getCcuState(char *m, msg_CcuStateFbMsg &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 sendCcuSetParmCmd(const msg_CcuSetParmMsg m); Checksum calculateChecksum(const unsigned char* data, int size); std::vector sError; + std::queue m_qReceiveCcuStateBuffer; + std::queue m_qReceiveCcuSetParmBuffer; + std::queue m_qReceiveDisHighVolBusBuffer; + std::queue m_qReceiveDisHighAVolBusBuffer; + std::queue m_qReceiveDisHighBVolBusBuffer; + std::queue m_qReceiveDisLowBusBuffer; private: msg_CcuColCmdMsg m_ccuColCmd; diff --git a/test/scripts/test.py b/test/scripts/test.py index a9345a0..8ab1ce8 100644 --- a/test/scripts/test.py +++ b/test/scripts/test.py @@ -1,8 +1,8 @@ import socket import time import struct -from udpmsg import msg_CcuStateFbMsg -from udpmsg import msg_CcuSetParamFbMsg +from udpmsg import * + # 目标IP地址和端口 target_ip = '127.0.0.1' target_port = 5000 @@ -10,9 +10,11 @@ target_port = 5000 mTest = msg_CcuStateFbMsg() mTest2 = msg_CcuSetParamFbMsg() +mTest3 = msg_disHighVolBusFbMsg() valid_msg = mTest.pack() valid_msg2 = mTest2.pack() +valid_msg3 = mTest3.pack() print(valid_msg) @@ -21,22 +23,29 @@ sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 要发送的信息 # message = "Hello, this is a test message." -message = valid_msg +message = valid_msg3 # 发送信息的次数 num_messages = 10 # 发送信息的时间间隔(秒) -interval = 1 +interval = 0.1 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}") - # 等待一段时间 - time.sleep(interval) # sock.sendto(valid_msg2, (target_ip, target_port)) time.sleep(interval) diff --git a/test/scripts/udpmsg.py b/test/scripts/udpmsg.py index c810cbc..9ec31c9 100644 --- a/test/scripts/udpmsg.py +++ b/test/scripts/udpmsg.py @@ -216,6 +216,270 @@ class msg_CcuSetParamFbMsg: self.checkCode += data[i] data += struct.pack('