增加了配电app
This commit is contained in:
Vendored
+12
-1
@@ -74,7 +74,18 @@
|
|||||||
"thread": "cpp",
|
"thread": "cpp",
|
||||||
"typeindex": "cpp",
|
"typeindex": "cpp",
|
||||||
"variant": "cpp",
|
"variant": "cpp",
|
||||||
"*.ipp": "cpp"
|
"*.ipp": "cpp",
|
||||||
|
"cassert": "cpp",
|
||||||
|
"cerrno": "cpp",
|
||||||
|
"cfloat": "cpp",
|
||||||
|
"ciso646": "cpp",
|
||||||
|
"climits": "cpp",
|
||||||
|
"filesystem": "cpp",
|
||||||
|
"ios": "cpp",
|
||||||
|
"locale": "cpp",
|
||||||
|
"stack": "cpp",
|
||||||
|
"cstdbool": "cpp",
|
||||||
|
"version": "cpp"
|
||||||
},
|
},
|
||||||
"C_Cpp.errorSquiggles": "disabled",
|
"C_Cpp.errorSquiggles": "disabled",
|
||||||
"marscode.chatLanguage": "cn",
|
"marscode.chatLanguage": "cn",
|
||||||
|
|||||||
@@ -1,48 +1,47 @@
|
|||||||
{"uPower_currentState_st":{
|
{
|
||||||
"HVABFTDev123Cur_uint16" : 0,
|
"HVABFTDev123Cur_uint16": 0,
|
||||||
"HVABactCur_uint16" : 0,
|
"HVABactCur_uint16": 0,
|
||||||
"HVABbowRudCur_uint16" : 0,
|
"HVABbowRudCur_uint16": 0,
|
||||||
"HVABbusBCur_uint16" : 0,
|
"HVABbusBCur_uint16": 0,
|
||||||
"HVABbusBVol_uint16" : 0,
|
"HVABbusBVol_uint16": 0,
|
||||||
"HVABmastSteGeaCur_uint16" : 0,
|
"HVABmastSteGeaCur_uint16": 0,
|
||||||
"HVABopenWaterCur_uint16" : 0,
|
"HVABopenWaterCur_uint16": 0,
|
||||||
"HVABxczCur_uint16" : 0,
|
"HVABxczCur_uint16": 0,
|
||||||
"HVBBCCUCur_uint16" : 0,
|
"HVBBCCUCur_uint16": 0,
|
||||||
"HVBBFCSSecurSysCur_uint16" : 0,
|
"HVBBFCSSecurSysCur_uint16": 0,
|
||||||
"HVBBbatInsCur_uint16" : 0,
|
"HVBBbatInsCur_uint16": 0,
|
||||||
"HVBBbowLowVolDisBoxCur_uint16" : 0,
|
"HVBBbowLowVolDisBoxCur_uint16": 0,
|
||||||
"HVBBdcC1InsCur_uint16" : 0,
|
"HVBBdcC1InsCur_uint16": 0,
|
||||||
"HVBBemer2BusVol_uint16" : 0,
|
"HVBBemer2BusVol_uint16": 0,
|
||||||
"HVBBemerBatCur_uint16" : 0,
|
"HVBBemerBatCur_uint16": 0,
|
||||||
"HVBBinsBusVol_uint16" : 0,
|
"HVBBinsBusVol_uint16": 0,
|
||||||
"HVBBplcCur_uint16" : 0,
|
"HVBBplcCur_uint16": 0,
|
||||||
"HVBBreservedCur1_uint16" : 0,
|
"HVBBreservedCur1_uint16": 0,
|
||||||
"HVBBreservedCur2_uint16" : 0,
|
"HVBBreservedCur2_uint16": 0,
|
||||||
"HVBBunit4Cur_uint16" : 0,
|
"HVBBunit4Cur_uint16": 0,
|
||||||
"HVBFTDev45Cur_uint16" : 0,
|
"HVBFTDev45Cur_uint16": 0,
|
||||||
"HVBbatGroupCur_uint16" : 0,
|
"HVBbatGroupCur_uint16": 0,
|
||||||
"HVBbowHVolDisBoxCur_uint16" : 0,
|
"HVBbowHVolDisBoxCur_uint16": 0,
|
||||||
"HVBbusACur_uint16" : 0,
|
"HVBbusACur_uint16": 0,
|
||||||
"HVBbusAVol_uint16" : 0,
|
"HVBbusAVol_uint16": 0,
|
||||||
"HVBdcDc5Cur_uint16" : 0,
|
"HVBdcDc5Cur_uint16": 0,
|
||||||
"HVBfbCur_uint16" : 0,
|
"HVBfbCur_uint16": 0,
|
||||||
"HVBmotorCur_uint16" : 0,
|
"HVBmotorCur_uint16": 0,
|
||||||
"HVBpowerBusCur_uint16" : 0,
|
"HVBpowerBusCur_uint16": 0,
|
||||||
"HVBpowerBusVol_uint16" : 0,
|
"HVBpowerBusVol_uint16": 0,
|
||||||
"HVBreservedCur1_uint16" : 0,
|
"HVBreservedCur1_uint16": 0,
|
||||||
"HVBreservedCur2_uint16" : 0,
|
"HVBreservedCur2_uint16": 0,
|
||||||
"HVBreservedCur3_uint16" : 0,
|
"HVBreservedCur3_uint16": 0,
|
||||||
"HVBsternRud1Cur_uint16" : 0,
|
"HVBsternRud1Cur_uint16": 0,
|
||||||
"HVBsternRud2Cur_uint16" : 0,
|
"HVBsternRud2Cur_uint16": 0,
|
||||||
"HVBtyzCur_uint16" : 0,
|
"HVBtyzCur_uint16": 0,
|
||||||
"LVBBbowPZDevCur_uint16" : 0,
|
"LVBBbowPZDevCur_uint16": 0,
|
||||||
"LVBBemerBatCur_uint16" : 0,
|
"LVBBemerBatCur_uint16": 0,
|
||||||
"LVBBemerBusVol_uint16" : 0,
|
"LVBBemerBusVol_uint16": 0,
|
||||||
"LVBBinsBusCur_uint16" : 0,
|
"LVBBinsBusCur_uint16": 0,
|
||||||
"LVBBunit1Cur_uint16" : 0,
|
"LVBBunit1Cur_uint16": 0,
|
||||||
"LVBBunit2Cur_uint16" : 0,
|
"LVBBunit2Cur_uint16": 0,
|
||||||
"LVBBunit3Cur_uint16" : 0,
|
"LVBBunit3Cur_uint16": 0,
|
||||||
"LVBBunit5Cur_uint16" : 0,
|
"LVBBunit5Cur_uint16": 0,
|
||||||
"LVBinsBusVol_uint16" : 0
|
"LVBinsBusVol_uint16": 0
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
{"uPower_disSysState_st":{
|
{
|
||||||
"HVolABusBreaker_unit16" : 0,
|
"HVolABusBreaker_unit16": 0,
|
||||||
"HVolBBusBreaker_unit16" : 0,
|
"HVolBBusBreaker_unit16": 0,
|
||||||
"HVolBusBreaker_uint16" : 0,
|
"HVolBusBreaker_uint16": 0,
|
||||||
"LVolBusBreaker_uint16" : 0,
|
"LVolBusBreaker_uint16": 0,
|
||||||
"faultCode_array" :
|
"faultCode_array":
|
||||||
[
|
[
|
||||||
0
|
0
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -1,31 +1,30 @@
|
|||||||
{"uPower_fcsState_st":{
|
{
|
||||||
"backpressure1_fp32" : 0.0,
|
"backpressure1_fp32": 0.0,
|
||||||
"backpressure2_fp32" : 0.0,
|
"backpressure2_fp32": 0.0,
|
||||||
"ch4oConcent1_fp32" : 0.0,
|
"ch4oConcent1_fp32": 0.0,
|
||||||
"ch4oConcent2_fp32" : 0.0,
|
"ch4oConcent2_fp32": 0.0,
|
||||||
"ch4o_fp32" : 0.0,
|
"ch4o_fp32": 0.0,
|
||||||
"excTemp_fp32" : 0.0,
|
"excTemp_fp32": 0.0,
|
||||||
"faultCode1_uint16" : 0,
|
"faultCode1_uint16": 0,
|
||||||
"faultCode2_uint16" : 0,
|
"faultCode2_uint16": 0,
|
||||||
"faultCode3_uint16" : 0,
|
"faultCode3_uint16": 0,
|
||||||
"fcuCurIns_fp32" : 0.0,
|
"fcuCurIns_fp32": 0.0,
|
||||||
"fcuCurPower_fp32" : 0.0,
|
"fcuCurPower_fp32": 0.0,
|
||||||
"fcuCur_fp32" : 0.0,
|
"fcuCur_fp32": 0.0,
|
||||||
"fcuFaultLeve_uint8" : 0,
|
"fcuFaultLeve_uint8": 0,
|
||||||
"fcuOutIns_fp32" : 0.0,
|
"fcuOutIns_fp32": 0.0,
|
||||||
"fcuOutPower_fp32" : 0.0,
|
"fcuOutPower_fp32": 0.0,
|
||||||
"fcuState_uint8" : 0,
|
"fcuState_uint8": 0,
|
||||||
"fcuVolIns_fp32" : 0.0,
|
"fcuVolIns_fp32": 0.0,
|
||||||
"fcuVolPower_fp32" : 0.0,
|
"fcuVolPower_fp32": 0.0,
|
||||||
"fcuVol_fp32" : 0.0,
|
"fcuVol_fp32": 0.0,
|
||||||
"flameDet_uint8" : 0,
|
"flameDet_uint8": 0,
|
||||||
"h2Concent1_fp32" : 0.0,
|
"h2Concent1_fp32": 0.0,
|
||||||
"h2Concent2_fp32" : 0.0,
|
"h2Concent2_fp32": 0.0,
|
||||||
"o2Concent1_fp32" : 0.0,
|
"o2Concent1_fp32": 0.0,
|
||||||
"o2Concent2_fp32" : 0.0,
|
"o2Concent2_fp32": 0.0,
|
||||||
"o2Level_fp32" : 0.0,
|
"o2Level_fp32": 0.0,
|
||||||
"o2_fp32" : 0.0,
|
"o2_fp32": 0.0,
|
||||||
"powLimit_fp32" : 0.0,
|
"powLimit_fp32": 0.0,
|
||||||
"powerGen_fp32" : 0.0
|
"powerGen_fp32": 0.0
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -1,39 +1,38 @@
|
|||||||
{"uPower_liBatState_st":{
|
{
|
||||||
"fcuCurToInsLimit1_uint8" : 0,
|
"fcuCurToInsLimit1_uint8": 0,
|
||||||
"fcuCurToinsLimit2_uint8" : 0,
|
"fcuCurToinsLimit2_uint8": 0,
|
||||||
"insBatCurElect_uint16" : 0,
|
"insBatCurElect_uint16": 0,
|
||||||
"insBatLimit_uint16" : 0,
|
"insBatLimit_uint16": 0,
|
||||||
"insBatSoc_uint8" : 0,
|
"insBatSoc_uint8": 0,
|
||||||
"insBatTotalElect_uint16" : 0,
|
"insBatTotalElect_uint16": 0,
|
||||||
"insChargeState_uint8" : 0,
|
"insChargeState_uint8": 0,
|
||||||
"insCurSocHold1_uint8" : 0,
|
"insCurSocHold1_uint8": 0,
|
||||||
"insCurSocHold2_uint8" : 0,
|
"insCurSocHold2_uint8": 0,
|
||||||
"insCurSocHold3_uint8" : 0,
|
"insCurSocHold3_uint8": 0,
|
||||||
"insCurrent_uint16" : 0,
|
"insCurrent_uint16": 0,
|
||||||
"insLinkVol_uint16" : 0,
|
"insLinkVol_uint16": 0,
|
||||||
"insNegRelayState_uint8" : 0,
|
"insNegRelayState_uint8": 0,
|
||||||
"insNegRes_uint16" : 0,
|
"insNegRes_uint16": 0,
|
||||||
"insPackVol_uint16" : 0,
|
"insPackVol_uint16": 0,
|
||||||
"insPosRelayState_uint8" : 0,
|
"insPosRelayState_uint8": 0,
|
||||||
"insPosRes_uint16" : 0,
|
"insPosRes_uint16": 0,
|
||||||
"insfaultCode_uint8" : 0,
|
"insfaultCode_uint8": 0,
|
||||||
"powBatCurElect_uint16" : 0,
|
"powBatCurElect_uint16": 0,
|
||||||
"powBatSoc_uint8" : 0,
|
"powBatSoc_uint8": 0,
|
||||||
"powBatTotalElect_uint16" : 0,
|
"powBatTotalElect_uint16": 0,
|
||||||
"powChargeState_uint8" : 0,
|
"powChargeState_uint8": 0,
|
||||||
"powCurSocHold1_uint8" : 0,
|
"powCurSocHold1_uint8": 0,
|
||||||
"powCurSocHold2_uint8" : 0,
|
"powCurSocHold2_uint8": 0,
|
||||||
"powCurSocHold3_uint8" : 0,
|
"powCurSocHold3_uint8": 0,
|
||||||
"powCurToInsLimit1_uint8" : 0,
|
"powCurToInsLimit1_uint8": 0,
|
||||||
"powCurToinsLimit2_uint8" : 0,
|
"powCurToinsLimit2_uint8": 0,
|
||||||
"powCur_uint16" : 0,
|
"powCur_uint16": 0,
|
||||||
"powLinkVol_uint16" : 0,
|
"powLinkVol_uint16": 0,
|
||||||
"powNegRelayState_uint8" : 0,
|
"powNegRelayState_uint8": 0,
|
||||||
"powNegRes_uint16" : 0,
|
"powNegRes_uint16": 0,
|
||||||
"powPosRelayState_uint8" : 0,
|
"powPosRelayState_uint8": 0,
|
||||||
"powPosRes_uint16" : 0,
|
"powPosRes_uint16": 0,
|
||||||
"powerBatLimit_uint16" : 0,
|
"powerBatLimit_uint16": 0,
|
||||||
"powerPackVol_uint16" : 0,
|
"powerPackVol_uint16": 0,
|
||||||
"powfaultCode_uint8" : 0
|
"powfaultCode_uint8": 0
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
{
|
{
|
||||||
"currentMod_uint8": 1,
|
"currentMod_uint8": 0,
|
||||||
"falutLevel_uint8": 0,
|
|
||||||
"faultCode_array":
|
"faultCode_array":
|
||||||
[
|
[
|
||||||
0
|
0
|
||||||
],
|
],
|
||||||
|
"faultLevel_uint8": 0,
|
||||||
|
"leakage_uint8": 0,
|
||||||
"powerState_uint8": 0,
|
"powerState_uint8": 0,
|
||||||
"soc_uint32": 0,
|
"soc_uint16": 0,
|
||||||
"sustainableTime_uint32": 0,
|
"sustainableTime_int64": 0,
|
||||||
"workCondition_uint8": 5
|
"workCondition_uint8": 1
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,277 @@
|
|||||||
|
# 上位机控制程序设计文档
|
||||||
|
|
||||||
|
## 1. 程序架构设计
|
||||||
|
|
||||||
|
采用MVC模式设计,主要分为以下模块:
|
||||||
|
|
||||||
|
### 1.0 系统架构图
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[用户界面] -->|控制指令| B[控制器]
|
||||||
|
B -->|发送命令| C[通信模块]
|
||||||
|
C -->|UDP协议| D[下位机]
|
||||||
|
D -->|状态反馈| C
|
||||||
|
C -->|解析数据| B
|
||||||
|
B -->|更新状态| A
|
||||||
|
B -->|记录数据| E[数据库]
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.1 消息处理流程
|
||||||
|
1. 接收原始UDP数据
|
||||||
|
2. 根据消息ID选择解析器
|
||||||
|
3. 验证校验码
|
||||||
|
4. 解析为结构化数据
|
||||||
|
5. 触发状态更新事件
|
||||||
|
6. 存储到数据库
|
||||||
|
|
||||||
|
### 1.1 通信模块 (Model) - 详细设计
|
||||||
|
|
||||||
|
#### 消息类型映射表
|
||||||
|
| 消息ID | 消息名称 | 处理函数 | 更新频率 |
|
||||||
|
|--------|----------|----------|----------|
|
||||||
|
| 0x0005 | 高压母线状态 | parse_high_vol_bus | 1Hz |
|
||||||
|
| 0x0006 | 高压A母线状态 | parse_high_a_vol_bus | 1Hz |
|
||||||
|
| 0x0007 | 低压主母线状态 | parse_low_main_bus | 1Hz |
|
||||||
|
| 0x0008 | 低压汇流排状态 | parse_low_bus | 1Hz |
|
||||||
|
|
||||||
|
#### 异常处理机制
|
||||||
|
1. 校验失败:丢弃数据并记录错误日志
|
||||||
|
2. 超时处理:3次重试后标记设备离线
|
||||||
|
3. 数据异常:触发告警并显示在界面
|
||||||
|
```python
|
||||||
|
class UDPMessageHandler:
|
||||||
|
"""UDP消息处理基类"""
|
||||||
|
def __init__(self, ip, port):
|
||||||
|
self.ip = ip
|
||||||
|
self.port = port
|
||||||
|
self.socket = None
|
||||||
|
|
||||||
|
def connect(self):
|
||||||
|
"""建立UDP连接"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def send_message(self, msg):
|
||||||
|
"""发送消息"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def receive_message(self):
|
||||||
|
"""接收消息"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
"""关闭连接"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
class PowerMessageHandler(UDPMessageHandler):
|
||||||
|
"""电源管理专用消息处理器"""
|
||||||
|
def __init__(self, ip, port):
|
||||||
|
super().__init__(ip, port)
|
||||||
|
self.message_parsers = {
|
||||||
|
0x0005: self.parse_high_vol_bus,
|
||||||
|
0x0006: self.parse_high_a_vol_bus,
|
||||||
|
# 其他消息类型...
|
||||||
|
}
|
||||||
|
|
||||||
|
def parse_high_vol_bus(self, data):
|
||||||
|
"""解析高压母线消息"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 其他消息解析方法...
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.2 界面模块 (View) - 详细设计
|
||||||
|
|
||||||
|
#### 主界面布局
|
||||||
|
```mermaid
|
||||||
|
graph LR
|
||||||
|
A[标题栏] --> B[状态区]
|
||||||
|
B --> C[电压电流仪表盘]
|
||||||
|
B --> D[断路器状态指示灯]
|
||||||
|
A --> E[控制区]
|
||||||
|
E --> F[电源控制按钮组]
|
||||||
|
E --> G[参数设置面板]
|
||||||
|
A --> H[日志区]
|
||||||
|
H --> I[实时消息列表]
|
||||||
|
H --> J[历史记录查询]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 组件说明
|
||||||
|
1. 电压电流仪表盘:实时显示各母线电压电流值
|
||||||
|
2. 断路器状态指示灯:绿色-闭合,红色-断开
|
||||||
|
3. 电源控制按钮组:带防误触保护(需长按3秒)
|
||||||
|
4. 参数设置面板:输入验证和范围检查
|
||||||
|
```python
|
||||||
|
class MainWindow(tk.Tk):
|
||||||
|
"""主窗口"""
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.title("电源管理系统")
|
||||||
|
self.geometry("1200x800")
|
||||||
|
|
||||||
|
self.create_widgets()
|
||||||
|
|
||||||
|
def create_widgets(self):
|
||||||
|
"""创建界面组件"""
|
||||||
|
self.status_frame = StatusFrame(self)
|
||||||
|
self.control_frame = ControlFrame(self)
|
||||||
|
self.log_frame = LogFrame(self)
|
||||||
|
|
||||||
|
# 布局管理
|
||||||
|
self.status_frame.pack(side=tk.TOP, fill=tk.X)
|
||||||
|
self.control_frame.pack(side=tk.LEFT, fill=tk.Y)
|
||||||
|
self.log_frame.pack(side=tk.RIGHT, expand=True, fill=tk.BOTH)
|
||||||
|
|
||||||
|
class StatusFrame(tk.Frame):
|
||||||
|
"""状态显示面板"""
|
||||||
|
def update_status(self, data):
|
||||||
|
"""更新状态显示"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
class ControlFrame(tk.Frame):
|
||||||
|
"""控制面板"""
|
||||||
|
def create_buttons(self):
|
||||||
|
"""创建控制按钮"""
|
||||||
|
pass
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.3 控制器模块 (Controller) - 详细设计
|
||||||
|
|
||||||
|
#### 状态管理机制
|
||||||
|
1. 使用有限状态机(FSM)管理电源系统状态
|
||||||
|
2. 状态转换规则:
|
||||||
|
- 仅当所有预检通过才允许上电
|
||||||
|
- 故障时自动进入安全状态
|
||||||
|
- 人工确认后才能复位
|
||||||
|
|
||||||
|
#### 命令处理流程
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
用户->>界面: 点击控制按钮
|
||||||
|
界面->>控制器: 发送控制命令
|
||||||
|
控制器->>业务逻辑: 验证命令有效性
|
||||||
|
业务逻辑->>通信模块: 发送UDP指令
|
||||||
|
通信模块->>下位机: 传输控制报文
|
||||||
|
下位机-->>通信模块: 返回应答
|
||||||
|
通信模块->>控制器: 更新命令状态
|
||||||
|
控制器->>界面: 显示操作结果
|
||||||
|
控制器->>数据库: 记录操作日志
|
||||||
|
```
|
||||||
|
```python
|
||||||
|
class PowerManagerController:
|
||||||
|
"""主控制器"""
|
||||||
|
def __init__(self):
|
||||||
|
self.message_handler = PowerMessageHandler("192.168.1.100", 5000)
|
||||||
|
self.view = MainWindow()
|
||||||
|
|
||||||
|
# 绑定事件
|
||||||
|
self.bind_events()
|
||||||
|
|
||||||
|
def bind_events(self):
|
||||||
|
"""绑定UI事件"""
|
||||||
|
self.view.control_frame.on_button_click = self.handle_control_command
|
||||||
|
|
||||||
|
def handle_control_command(self, cmd):
|
||||||
|
"""处理控制命令"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
"""启动应用程序"""
|
||||||
|
self.message_handler.connect()
|
||||||
|
self.view.mainloop()
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. 接口规范
|
||||||
|
|
||||||
|
### 2.1 模块交互架构
|
||||||
|
```mermaid
|
||||||
|
classDiagram
|
||||||
|
class Communication {
|
||||||
|
+send_command(cmd: dict) bool
|
||||||
|
+get_status() dict
|
||||||
|
+subscribe(callback: function)
|
||||||
|
+on_message_received(data: bytes)
|
||||||
|
}
|
||||||
|
|
||||||
|
class Controller {
|
||||||
|
+handle_ui_event(event: dict)
|
||||||
|
+update_system_status(status: dict)
|
||||||
|
+log_operation(log: dict)
|
||||||
|
}
|
||||||
|
|
||||||
|
class UI {
|
||||||
|
+update_status(data: dict)
|
||||||
|
+show_alert(level: int, msg: str)
|
||||||
|
+log_message(source: str, msg: str)
|
||||||
|
}
|
||||||
|
|
||||||
|
Communication --> Controller : 状态更新通知
|
||||||
|
Controller --> UI : 界面更新指令
|
||||||
|
UI --> Controller : 用户操作事件
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2 详细接口定义
|
||||||
|
|
||||||
|
#### 通信模块 → 控制器
|
||||||
|
```python
|
||||||
|
# 状态更新通知
|
||||||
|
{
|
||||||
|
"msg_type": "status_update",
|
||||||
|
"timestamp": "2025-05-04T10:20:00",
|
||||||
|
"data": {
|
||||||
|
"voltage": 220.5,
|
||||||
|
"current": 15.2,
|
||||||
|
"breaker_state": True
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 错误通知
|
||||||
|
{
|
||||||
|
"msg_type": "error",
|
||||||
|
"code": 1001,
|
||||||
|
"message": "校验失败"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 控制器 → 界面
|
||||||
|
```python
|
||||||
|
# 状态显示更新
|
||||||
|
{
|
||||||
|
"component": "voltage_meter",
|
||||||
|
"value": 220.5,
|
||||||
|
"unit": "V",
|
||||||
|
"normal_range": [210, 230]
|
||||||
|
}
|
||||||
|
|
||||||
|
# 告警信息
|
||||||
|
{
|
||||||
|
"level": 2, # 1-警告 2-错误 3-严重
|
||||||
|
"message": "A相电压过高",
|
||||||
|
"suggestion": "检查A相负载"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 界面 → 控制器
|
||||||
|
```python
|
||||||
|
# 按钮操作事件
|
||||||
|
{
|
||||||
|
"event_type": "button_click",
|
||||||
|
"button_id": "power_on",
|
||||||
|
"timestamp": "2025-05-04T10:20:01"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 参数设置事件
|
||||||
|
{
|
||||||
|
"event_type": "param_set",
|
||||||
|
"param": "voltage_limit",
|
||||||
|
"value": 230,
|
||||||
|
"unit": "V"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.3 错误处理规范
|
||||||
|
1. 通信错误:自动重试3次后通知控制器
|
||||||
|
2. 业务逻辑错误:记录详细日志并通知界面
|
||||||
|
3. 界面错误:显示友好提示并保持最后正常状态
|
||||||
|
|
||||||
|
## 3. 数据库设计
|
||||||
|
(之前已完成的数据库表结构...)
|
||||||
@@ -54,7 +54,7 @@ public:
|
|||||||
msg_CcuStateFbMsg m_CcuCurrentState;
|
msg_CcuStateFbMsg m_CcuCurrentState;
|
||||||
msg_disHighVolBusFbMsg m_disHighVolBusCurrentState;
|
msg_disHighVolBusFbMsg m_disHighVolBusCurrentState;
|
||||||
msg_disHighAVolBusFbMsg m_disHighAVolBusCurrentState;
|
msg_disHighAVolBusFbMsg m_disHighAVolBusCurrentState;
|
||||||
msg_disHighBVolBusFbMsg m_disHighBVolBusCurrentState;
|
msg_disLowMainBusFbMsg m_disHighBVolBusCurrentState;
|
||||||
msg_disLowBusFbMsg m_disLowBusState;
|
msg_disLowBusFbMsg m_disLowBusState;
|
||||||
// 配电和CCU的反馈状态时间戳
|
// 配电和CCU的反馈状态时间戳
|
||||||
double msg_CcuStateFbMsg_Update_time;
|
double msg_CcuStateFbMsg_Update_time;
|
||||||
|
|||||||
@@ -11,6 +11,37 @@ void PowerManagerFsm::react(TaskStopEvent const &e) {
|
|||||||
transit<RemoteControl>();
|
transit<RemoteControl>();
|
||||||
LOG_F(INFO, "使命结束");
|
LOG_F(INFO, "使命结束");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void PowerManagerFsm::react(CycleTriggeredEvent const &){
|
||||||
|
if(pm->currentMod != RunMode::Debug)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bool PowerManagerFsm::handPowerProtection(DevCmdExt const &e){
|
||||||
|
if(pm->workCondition > WorkCondition::REMOTE_CONTROL){
|
||||||
|
LOG_F(INFO, "上电保护,执行任务时候禁止操作设备");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(e.id == DeviceId::singleBeamSonar1 ||
|
||||||
|
e.id == DeviceId::singleBeamSonar2 ||
|
||||||
|
e.id == DeviceId::singleBeamSonar3 ||
|
||||||
|
e.id == DeviceId::singleBeamSonar4 ||
|
||||||
|
e.id == DeviceId::singleBeamSonar5 ||
|
||||||
|
e.id == DeviceId::singleBeamSonar6 ||
|
||||||
|
e.id == DeviceId::singleBeamSonar7 ||
|
||||||
|
e.id == DeviceId::singleBeamSonar8 ||
|
||||||
|
e.id == DeviceId::sideSonar ||
|
||||||
|
e.id == DeviceId::forwardSonar ||
|
||||||
|
e.id == DeviceId::lowFreqSonar ||
|
||||||
|
e.id == DeviceId::DVL ||
|
||||||
|
e.id == DeviceId::USBL){
|
||||||
|
if(e.cmd == 1){
|
||||||
|
LOG_F(INFO, "水声设备操作上电保护 %d 已关闭", e.id);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
void PowerManagerFsm::react(TaskStartEvent const &e){
|
void PowerManagerFsm::react(TaskStartEvent const &e){
|
||||||
LOG_F(INFO, "TaskStartEvent received - type: %d, enableBowRudder: %d, enableBuoyancyAdjustment: %d", e.type, e.enableBowRudder, e.enableBuoyancyAdjustment);
|
LOG_F(INFO, "TaskStartEvent received - type: %d, enableBowRudder: %d, enableBuoyancyAdjustment: %d", e.type, e.enableBowRudder, e.enableBuoyancyAdjustment);
|
||||||
switch (e.type)
|
switch (e.type)
|
||||||
@@ -44,7 +75,7 @@ void PowerManagerFsm::react(TaskStartEvent const &e){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PowerManagerFsm::react(DevCmdExt const &e) {
|
void PowerManagerFsm::react(DevCmdExt const &e) {
|
||||||
LOG_F(INFO, "DevCmdExt received - id: %d, cmd: %d", e.id, e.cmd);
|
LOG_F(INFO, "DevCmdExt received - id: %d, cmd: %d", e.id, e.cmd);
|
||||||
switch (e.id)
|
switch (e.id)
|
||||||
{
|
{
|
||||||
@@ -1704,6 +1735,33 @@ void PowerManagerFsm::react(DevCmdExt const &e) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StandbyState::react(DevCmdExt const &e)
|
||||||
|
{
|
||||||
|
LOG_F(INFO, "StandbyState::react(DevCmdExt const &e)");
|
||||||
|
//正常模式下,不允许执行DevCmdExt
|
||||||
|
if (pm->currentMod == RunMode::Normal )
|
||||||
|
{
|
||||||
|
LOG_F(INFO, "正常模式下,不允许执行DevCmdExt");
|
||||||
|
}
|
||||||
|
else if (pm->currentMod == RunMode::Test)
|
||||||
|
{
|
||||||
|
if(handPowerProtection(e))
|
||||||
|
PowerManagerFsm::react(e);
|
||||||
|
else
|
||||||
|
LOG_F(INFO, "DevCmdExt 执行失败");
|
||||||
|
}
|
||||||
|
else if (pm->currentMod == RunMode::Debug)
|
||||||
|
{
|
||||||
|
LOG_F(INFO, "调试模式下,直接执行DevCmdExt");
|
||||||
|
PowerManagerFsm::react(e);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_F(INFO, "当前模式未知");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PowerManagerFsm::basicNavigationFault(FaultEvent const &e)
|
void PowerManagerFsm::basicNavigationFault(FaultEvent const &e)
|
||||||
{
|
{
|
||||||
LOG_F(INFO, "basicNavigationFault");
|
LOG_F(INFO, "basicNavigationFault");
|
||||||
@@ -1712,6 +1770,7 @@ void PowerManagerFsm::basicNavigationFault(FaultEvent const &e)
|
|||||||
LOG_F(INFO, "部分深度计失效");
|
LOG_F(INFO, "部分深度计失效");
|
||||||
pm->faultCode.push_back(0x1102);
|
pm->faultCode.push_back(0x1102);
|
||||||
pm->faultCode.push_back(0x1103);
|
pm->faultCode.push_back(0x1103);
|
||||||
|
pm->faultCode.push_back(0x1104);
|
||||||
}
|
}
|
||||||
if(FaultEnable::BasicNavigationFault_2)
|
if(FaultEnable::BasicNavigationFault_2)
|
||||||
{
|
{
|
||||||
@@ -2003,7 +2062,7 @@ void StandbyState::react(MasterCommandEvent const &) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void StandbyState::handlePowerOn() {
|
void StandbyState::handlePowerOn() {
|
||||||
PowerManagerFsm::pm->m_pmEvent = "动力电上电";
|
LOG_F(INFO,"动力电上电");
|
||||||
PowerManagerFsm::pm->m_CcuColCmd.powerBatCmd = 0x10;
|
PowerManagerFsm::pm->m_CcuColCmd.powerBatCmd = 0x10;
|
||||||
if(PowerManagerFsm::pm->m_pmCurrentState.ccustate.fcuState == 0x04)
|
if(PowerManagerFsm::pm->m_pmCurrentState.ccustate.fcuState == 0x04)
|
||||||
PowerManagerFsm::pm->m_CcuColCmd.fcuCmd = 0x02;
|
PowerManagerFsm::pm->m_CcuColCmd.fcuCmd = 0x02;
|
||||||
@@ -2326,6 +2385,8 @@ void RemoteControl::entry() {
|
|||||||
LOG_F(INFO, "进入遥控工况");
|
LOG_F(INFO, "进入遥控工况");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// void StandbyState::react(TaskStart const &)
|
// void StandbyState::react(TaskStart const &)
|
||||||
// {
|
// {
|
||||||
// LOG_F(INFO, "接收到任务启动信息");
|
// LOG_F(INFO, "接收到任务启动信息");
|
||||||
|
|||||||
@@ -23,9 +23,6 @@ enum class PowerSystemState {
|
|||||||
struct InitEvent : tinyfsm::Event { };
|
struct InitEvent : tinyfsm::Event { };
|
||||||
struct StandbyEvent : tinyfsm::Event { };
|
struct StandbyEvent : tinyfsm::Event { };
|
||||||
struct TaskStopEvent : tinyfsm::Event { };
|
struct TaskStopEvent : tinyfsm::Event { };
|
||||||
|
|
||||||
//==================状态流程事件============================
|
|
||||||
struct MasterCommandEvent : tinyfsm::Event {};
|
|
||||||
struct TaskStartEvent : tinyfsm::Event {
|
struct TaskStartEvent : tinyfsm::Event {
|
||||||
int type;
|
int type;
|
||||||
bool enableBowRudder;
|
bool enableBowRudder;
|
||||||
@@ -33,14 +30,17 @@ struct TaskStartEvent : tinyfsm::Event {
|
|||||||
TaskStartEvent() : type(0), enableBowRudder(false), enableBuoyancyAdjustment(false) {};
|
TaskStartEvent() : type(0), enableBowRudder(false), enableBuoyancyAdjustment(false) {};
|
||||||
TaskStartEvent(int type, bool bowRudder, bool buoyancyAdjustment) : type(type), enableBowRudder(bowRudder), enableBuoyancyAdjustment(buoyancyAdjustment) {};
|
TaskStartEvent(int type, bool bowRudder, bool buoyancyAdjustment) : type(type), enableBowRudder(bowRudder), enableBuoyancyAdjustment(buoyancyAdjustment) {};
|
||||||
};
|
};
|
||||||
struct DeviceCmd : tinyfsm::Event { };
|
//==================状态流程事件============================
|
||||||
|
struct CycleTriggeredEvent : tinyfsm::Event {};
|
||||||
|
struct MasterCommandEvent : tinyfsm::Event {};
|
||||||
|
struct DeviceCmd : tinyfsm::Event {};
|
||||||
struct DevCmdExt : tinyfsm::Event {
|
struct DevCmdExt : tinyfsm::Event {
|
||||||
int id;
|
int id;
|
||||||
int cmd;
|
int cmd;
|
||||||
DevCmdExt() : id(0), cmd(0) {};
|
DevCmdExt() : id(0), cmd(0) {};
|
||||||
DevCmdExt(int id, int cmd) : id(id), cmd(cmd) {};
|
DevCmdExt(int id, int cmd) : id(id), cmd(cmd) {};
|
||||||
};
|
};
|
||||||
struct FaultEvent : tinyfsm::Event {
|
struct FaultEvent : tinyfsm::Event {
|
||||||
unsigned int subDisSysFaultCode;
|
unsigned int subDisSysFaultCode;
|
||||||
unsigned int disSysFaultCode;
|
unsigned int disSysFaultCode;
|
||||||
unsigned int powerFaultCode;
|
unsigned int powerFaultCode;
|
||||||
@@ -78,12 +78,15 @@ public:
|
|||||||
virtual void react(TaskStartEvent const &e);
|
virtual void react(TaskStartEvent const &e);
|
||||||
virtual void react(FaultEvent const &e);
|
virtual void react(FaultEvent const &e);
|
||||||
virtual void react(TaskStopEvent const &e);
|
virtual void react(TaskStopEvent const &e);
|
||||||
|
virtual void react(CycleTriggeredEvent const &);
|
||||||
|
|
||||||
//操作函数
|
//操作函数
|
||||||
void handelPowerCmd();
|
void handelPowerCmd();
|
||||||
void handleModCmd();
|
void handleModCmd();
|
||||||
void handleWorkCmd();
|
void handleWorkCmd();
|
||||||
void handleDeviceCmd();
|
void handleDeviceCmd();
|
||||||
|
|
||||||
|
bool handPowerProtection(DevCmdExt const &e);
|
||||||
//故障处理
|
//故障处理
|
||||||
void basicNavigationFault(FaultEvent const &e);
|
void basicNavigationFault(FaultEvent const &e);
|
||||||
void extendedNavigationFault(FaultEvent const &e);
|
void extendedNavigationFault(FaultEvent const &e);
|
||||||
@@ -141,6 +144,7 @@ class StandbyState : public PowerManagerFsm {
|
|||||||
public:
|
public:
|
||||||
void entry() override;
|
void entry() override;
|
||||||
void react(StandbyEvent const &) override;
|
void react(StandbyEvent const &) override;
|
||||||
|
void react(DevCmdExt const &e) override;
|
||||||
void react(MasterCommandEvent const &) override;
|
void react(MasterCommandEvent const &) override;
|
||||||
private:
|
private:
|
||||||
void handlePowerOn();
|
void handlePowerOn();
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ PowerManger::PowerManger()
|
|||||||
sustainableTime = 0;
|
sustainableTime = 0;
|
||||||
m_faultNum = 0;
|
m_faultNum = 0;
|
||||||
m_ticker = 0;
|
m_ticker = 0;
|
||||||
|
m_leakage = 0;
|
||||||
faultCode.push_back(0);
|
faultCode.push_back(0);
|
||||||
|
|
||||||
m_pmCurrentState = {};
|
m_pmCurrentState = {};
|
||||||
|
|||||||
@@ -98,7 +98,8 @@ class PowerManger : public AppCastingMOOSApp
|
|||||||
unsigned int sustainableTime;
|
unsigned int sustainableTime;
|
||||||
unsigned int m_faultNum;
|
unsigned int m_faultNum;
|
||||||
Driver m_driver; //设备表处理
|
Driver m_driver; //设备表处理
|
||||||
std::string m_pmEvent; // 状态机事件描述
|
unsigned char m_leakage;
|
||||||
|
// std::string m_pmEvent; // 状态机事件描述
|
||||||
//===========================CONFIG========================================
|
//===========================CONFIG========================================
|
||||||
long m_lPort;
|
long m_lPort;
|
||||||
unsigned int m_nReceiveBufferSizeKB;
|
unsigned int m_nReceiveBufferSizeKB;
|
||||||
@@ -106,7 +107,6 @@ class PowerManger : public AppCastingMOOSApp
|
|||||||
double m_current_time;
|
double m_current_time;
|
||||||
unsigned int m_ticker;
|
unsigned int m_ticker;
|
||||||
int connectState;
|
int connectState;
|
||||||
|
|
||||||
//=============================过程函数======================================
|
//=============================过程函数======================================
|
||||||
void initControlCmd();
|
void initControlCmd();
|
||||||
|
|
||||||
|
|||||||
@@ -385,6 +385,8 @@ void UpperCommManager::buildSystemReport() {
|
|||||||
|
|
||||||
suffix = getTypeName(typeid(m_pm->sustainableTime).name());
|
suffix = getTypeName(typeid(m_pm->sustainableTime).name());
|
||||||
pms["sustainableTime_int64"] = m_pm->sustainableTime;
|
pms["sustainableTime_int64"] = m_pm->sustainableTime;
|
||||||
|
|
||||||
|
pms["leakage_uint8"] = m_pm->m_leakage;
|
||||||
|
|
||||||
//2.构建燃料电池状态报告
|
//2.构建燃料电池状态报告
|
||||||
suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.fcuState).name());
|
suffix = getTypeName(typeid(m_pm->m_pmCurrentState.ccustate.fcuState).name());
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ using namespace std;
|
|||||||
|
|
||||||
//决策消息
|
//决策消息
|
||||||
#define DB_TO_PM_DEEPTH "uDevice_depth_st"
|
#define DB_TO_PM_DEEPTH "uDevice_depth_st"
|
||||||
#define DB_TO_PM_MISSION "uPlan_taskReport_st"
|
#define DB_TO_PM_MISSION "uPlan_taskStart_cmd"
|
||||||
#define DB_TO_PM_TASKSTOP "uPlan_planStop_cmd"
|
#define DB_TO_PM_TASKSTOP "uPlan_planStop_cmd"
|
||||||
|
|
||||||
//外部通信消息
|
//外部通信消息
|
||||||
|
|||||||
@@ -77,12 +77,12 @@ typedef struct
|
|||||||
cChecksum checkCode;
|
cChecksum checkCode;
|
||||||
}msg_disHVBACmd;
|
}msg_disHVBACmd;
|
||||||
|
|
||||||
typedef struct
|
typedef struct msg_disHVBBCmd
|
||||||
{
|
{
|
||||||
m_header header;
|
m_header header;
|
||||||
disHighBVolBusCmd data;
|
disHighBVolBusCmd data;
|
||||||
cChecksum checkCode;
|
cChecksum checkCode;
|
||||||
}msg_disHVBBCmd;
|
}msg_disLVMBCmd;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -121,12 +121,12 @@ typedef struct {
|
|||||||
cChecksum checkCode;
|
cChecksum checkCode;
|
||||||
} msg_disHighAVolBusFbMsg;
|
} msg_disHighAVolBusFbMsg;
|
||||||
|
|
||||||
// 高压母线B配电反馈
|
// 仪表母线配电反馈
|
||||||
typedef struct {
|
typedef struct {
|
||||||
m_header header;
|
m_header header;
|
||||||
disHighBVolBusState data;
|
disLowMainBusState data;
|
||||||
cChecksum checkCode;
|
cChecksum checkCode;
|
||||||
} msg_disHighBVolBusFbMsg;
|
} msg_disLowMainBusFbMsg;
|
||||||
|
|
||||||
//仪表汇流排配电反馈
|
//仪表汇流排配电反馈
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -120,149 +120,292 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct disHighVolBusState
|
typedef struct disHighVolBusState
|
||||||
{
|
{
|
||||||
|
//断路器状态
|
||||||
|
// 5: 燃料电池断路器
|
||||||
unsigned char fuelCellCircuitBreaker;
|
unsigned char fuelCellCircuitBreaker;
|
||||||
|
// 6: 动力锂电池断路器
|
||||||
unsigned char powerLithiumBatteryCircuitBreaker;
|
unsigned char powerLithiumBatteryCircuitBreaker;
|
||||||
|
// 7: 推进电机断路器
|
||||||
unsigned char propulsionMotorCircuitBreaker;
|
unsigned char propulsionMotorCircuitBreaker;
|
||||||
|
// 8: 锂电池组仪表断路器
|
||||||
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
||||||
|
// 9: DC/DC5模块断路器
|
||||||
unsigned char dcDc5ModuleCircuitBreaker;
|
unsigned char dcDc5ModuleCircuitBreaker;
|
||||||
|
// 10: 艏部高压配电箱断路器
|
||||||
unsigned char bowHighVoltageDistributionBoxCircuitBreaker;
|
unsigned char bowHighVoltageDistributionBoxCircuitBreaker;
|
||||||
|
// 11: 艉部FT装置4/5断路器
|
||||||
unsigned char sternFTDevice45CircuitBreaker;
|
unsigned char sternFTDevice45CircuitBreaker;
|
||||||
|
// 12: 艉舵开关1断路器
|
||||||
unsigned char sternRudderSwitch1CircuitBreaker;
|
unsigned char sternRudderSwitch1CircuitBreaker;
|
||||||
|
// 13: 艉舵开关2断路器
|
||||||
unsigned char sternRudderSwitch2CircuitBreaker;
|
unsigned char sternRudderSwitch2CircuitBreaker;
|
||||||
|
// 14: FB预留断路器
|
||||||
unsigned char fbReservedCircuitBreaker;
|
unsigned char fbReservedCircuitBreaker;
|
||||||
|
// 15: TYZ预留断路器
|
||||||
unsigned char tyzReservedCircuitBreaker;
|
unsigned char tyzReservedCircuitBreaker;
|
||||||
|
// 16: 预留断路器
|
||||||
unsigned char reservedCircuitBreaker;
|
unsigned char reservedCircuitBreaker;
|
||||||
unsigned char busInsulationLow;
|
// unsigned char busInsulationLow;
|
||||||
unsigned char busAInsulationHigh;
|
// unsigned char busAInsulationHigh;
|
||||||
unsigned char lostPower;
|
// 17: DC/DC5故障字低
|
||||||
unsigned char lostEmerPower;
|
// 0x00: 正常状态
|
||||||
|
// Bit0: DC/DC模块过温关机
|
||||||
|
// Bit1: 输出过流
|
||||||
|
// Bit2: 输出过压
|
||||||
|
// Bit3: 输出欠压
|
||||||
|
// Bit4: 输入过压
|
||||||
|
// Bit5: 输入欠压
|
||||||
|
// Bit6: 输出短路保护
|
||||||
|
// Bit7: 内部故障
|
||||||
|
// 18: DC/DC5故障字高
|
||||||
|
unsigned char dcDcFaultWord1;
|
||||||
|
// 0x00: 正常状态
|
||||||
|
// Bit0: 通讯故障报警
|
||||||
|
// Bit1: 工作状态
|
||||||
|
// Bit2: 冷却泵1故障
|
||||||
|
// Bit3: 冷却泵2故障
|
||||||
|
// Bit4: 冷却水泄露
|
||||||
|
unsigned char dcDcFaultWord2;
|
||||||
|
// 19: 动力母排绝缘状态(0x55 正常,0xAA 绝缘低)
|
||||||
|
unsigned char powerBusInsulationStatus;
|
||||||
|
// 20: A汇流排绝缘状态(0x55 正常,0xAA 绝缘低)
|
||||||
|
unsigned char aBusInsulationStatus;
|
||||||
|
// 21: 仪表电源状态 (0x55 正常,0xAA 故障)
|
||||||
|
unsigned char meterPowerLossSignal;
|
||||||
|
// 22: 应急电源状态 (0x55 正常,0xAA 故障)
|
||||||
|
unsigned char emergencyPowerLossSignal;
|
||||||
|
// 23: 动力汇流排电压
|
||||||
unsigned short powerBusVoltage;
|
unsigned short powerBusVoltage;
|
||||||
|
// 24: DC/DC5模块电流
|
||||||
unsigned short dcDc5ModuleCurrent;
|
unsigned short dcDc5ModuleCurrent;
|
||||||
|
// 25: 动力汇流排电流
|
||||||
unsigned short powerBusCurrent;
|
unsigned short powerBusCurrent;
|
||||||
|
// 26: A汇流排电压
|
||||||
unsigned short busbarAVoltage;
|
unsigned short busbarAVoltage;
|
||||||
|
// 27: 推进电机控制箱电流
|
||||||
unsigned short propulsionMotorControlBoxCurrent;
|
unsigned short propulsionMotorControlBoxCurrent;
|
||||||
|
// 28: A汇流排电流
|
||||||
unsigned short busbarACurrent;
|
unsigned short busbarACurrent;
|
||||||
|
// 29: 锂电池组(仪表)电流
|
||||||
unsigned short lithiumBatteryGroupMeterCurrent;
|
unsigned short lithiumBatteryGroupMeterCurrent;
|
||||||
|
// 30: 艏部高压配电箱电流
|
||||||
unsigned short bowHighVoltageDistributionBoxCurrent;
|
unsigned short bowHighVoltageDistributionBoxCurrent;
|
||||||
|
// 31: 艉部FT装置4/5电流
|
||||||
unsigned short sternFTDevice45Current;
|
unsigned short sternFTDevice45Current;
|
||||||
|
// 32: TYZ预留开关电流
|
||||||
unsigned short tyzReservedSwitchCurrent;
|
unsigned short tyzReservedSwitchCurrent;
|
||||||
|
// 33: 艉舵开关1电流
|
||||||
unsigned short sternRudderSwitch1Current;
|
unsigned short sternRudderSwitch1Current;
|
||||||
|
// 34: 预留电流
|
||||||
unsigned short reservedCurrent1; // 改为 reservedCurrent1 以避免重名
|
unsigned short reservedCurrent1; // 改为 reservedCurrent1 以避免重名
|
||||||
|
// 35: 艉舵开关2电流
|
||||||
unsigned short sternRudderSwitch2Current;
|
unsigned short sternRudderSwitch2Current;
|
||||||
|
// 36: 预留电流2
|
||||||
unsigned short reservedCurrent2; // 改为 reservedCurrent2 以避免重名
|
unsigned short reservedCurrent2; // 改为 reservedCurrent2 以避免重名
|
||||||
|
// 37: FB预留电流
|
||||||
unsigned short fbReservedSwitchCurrent;
|
unsigned short fbReservedSwitchCurrent;
|
||||||
|
// 38: 预留电流3
|
||||||
unsigned short reservedCurrent3; // 改为 reservedCurrent3 以避免重名
|
unsigned short reservedCurrent3; // 改为 reservedCurrent3 以避免重名
|
||||||
|
// 39: 冷却水压力
|
||||||
|
unsigned short coolWaterPressure;
|
||||||
}disHighVolBusState;
|
}disHighVolBusState;
|
||||||
|
|
||||||
typedef struct disHighAVolBusState
|
typedef struct disHighAVolBusState
|
||||||
{
|
{
|
||||||
|
//5. 艏部FT装置1/2/3断路器
|
||||||
unsigned char bowFTDevice123CircuitBreaker;
|
unsigned char bowFTDevice123CircuitBreaker;
|
||||||
|
//6. 启闭机构断路器
|
||||||
unsigned char actuatorCircuitBreaker;
|
unsigned char actuatorCircuitBreaker;
|
||||||
|
//7. 桅杆舵机控制箱断路器
|
||||||
unsigned char mastSteeringGearControlBoxCircuitBreaker;
|
unsigned char mastSteeringGearControlBoxCircuitBreaker;
|
||||||
|
//8. XCZ断路器
|
||||||
unsigned char xczCircuitBreaker;
|
unsigned char xczCircuitBreaker;
|
||||||
|
//9. 艏舵控制箱断路器
|
||||||
unsigned char bowRudderControlBoxCircuitBreaker;
|
unsigned char bowRudderControlBoxCircuitBreaker;
|
||||||
|
//10. 敞水盖启动电缸断路器
|
||||||
unsigned char openWaterCoverStartCylinderCircuitBreaker;
|
unsigned char openWaterCoverStartCylinderCircuitBreaker;
|
||||||
|
//11. 仪表电源失电信号 (0x55 正常,0xAA 故障)
|
||||||
unsigned char instrumentPowerFailureSignal;
|
unsigned char instrumentPowerFailureSignal;
|
||||||
|
//12. 应急电源失电信号 (0x55 正常,0xAA 故障)
|
||||||
unsigned char emergencyPowerFailureSignal;
|
unsigned char emergencyPowerFailureSignal;
|
||||||
|
//13. 浸水报警
|
||||||
|
// unsigned char busbarBInsulationStatus;
|
||||||
unsigned char waterIngressionAlarm;
|
unsigned char waterIngressionAlarm;
|
||||||
|
//14. 汇流排B电压
|
||||||
unsigned short busbarBVoltage;
|
unsigned short busbarBVoltage;
|
||||||
|
//15. 汇流排B电流
|
||||||
unsigned short busbarBCurrent;
|
unsigned short busbarBCurrent;
|
||||||
|
//16. 艏部FT装置1/2/3电流
|
||||||
unsigned short bowFTDevice123Current;
|
unsigned short bowFTDevice123Current;
|
||||||
|
//17. 启闭机构电流
|
||||||
unsigned short actuatorCurrent;
|
unsigned short actuatorCurrent;
|
||||||
|
//18. 桅杆舵机控制箱电流
|
||||||
unsigned short mastSteeringGearControlBoxCurrent;
|
unsigned short mastSteeringGearControlBoxCurrent;
|
||||||
|
//19. XCZ电流
|
||||||
unsigned short xczCurrent;
|
unsigned short xczCurrent;
|
||||||
|
//20. 艏舵控制箱电流
|
||||||
unsigned short bowRudderControlBoxCurrent;
|
unsigned short bowRudderControlBoxCurrent;
|
||||||
|
//21. 敞水盖启动电缸电流
|
||||||
unsigned short openWaterCoverStartCylinderCurrent;
|
unsigned short openWaterCoverStartCylinderCurrent;
|
||||||
}disHighAVolBusState;
|
}disHighAVolBusState;
|
||||||
|
|
||||||
typedef struct disHighBVolBusState
|
typedef struct disHighBVolBusState
|
||||||
{
|
{
|
||||||
|
//5. 锂电池组(仪表)断路器
|
||||||
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
||||||
|
//6. 艏部低压配电箱断路器
|
||||||
unsigned char bowLowVoltageDistributionBoxCircuitBreaker;
|
unsigned char bowLowVoltageDistributionBoxCircuitBreaker;
|
||||||
|
//7. UNIT4仪表DC48V断路器
|
||||||
unsigned char unit4InstrumentDC48VCircuitBreaker;
|
unsigned char unit4InstrumentDC48VCircuitBreaker;
|
||||||
|
//8. DC-C1直流配电板断路器
|
||||||
unsigned char dcC1DCDistributionPanelCircuitBreaker;
|
unsigned char dcC1DCDistributionPanelCircuitBreaker;
|
||||||
|
//9. 预留断路器1
|
||||||
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
||||||
|
//10. 预留断路器2
|
||||||
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
||||||
|
//11. 应急锂电池组2断路器
|
||||||
unsigned char emergencyLithiumBatteryGroup2CircuitBreaker;
|
unsigned char emergencyLithiumBatteryGroup2CircuitBreaker;
|
||||||
|
//12. 仪表电源失电信号 (0x55 正常,0xAA 故障)
|
||||||
unsigned char instrumentPowerFailureSignal;
|
unsigned char instrumentPowerFailureSignal;
|
||||||
|
//13. 应急电源失电信号 (0x55 正常,0xAA 故障)
|
||||||
unsigned char emergencyPowerFailureSignal;
|
unsigned char emergencyPowerFailureSignal;
|
||||||
|
//14. 仪表汇流排绝缘低 (0x55 正常,0xAA 绝缘低)
|
||||||
unsigned char instrumentBusbarInsulationLow;
|
unsigned char instrumentBusbarInsulationLow;
|
||||||
|
//15. 仪表母排电压
|
||||||
unsigned short instrumentBusbarVoltage;
|
unsigned short instrumentBusbarVoltage;
|
||||||
|
//16. 艏部低压配电箱电流
|
||||||
unsigned short bowLowVoltageDistributionBoxCurrent;
|
unsigned short bowLowVoltageDistributionBoxCurrent;
|
||||||
|
//17. DC-C1(直流配电板1)仪表DC48V电流
|
||||||
unsigned short dcC1InstrumentDC48VCurrent;
|
unsigned short dcC1InstrumentDC48VCurrent;
|
||||||
|
//18. 预留电流
|
||||||
unsigned short reservedCurrent1; // 为了区分,添加了数字后缀
|
unsigned short reservedCurrent1; // 为了区分,添加了数字后缀
|
||||||
|
//19. 应急锂电池组2电流
|
||||||
unsigned short emergencyLithiumBatteryGroup2Current;
|
unsigned short emergencyLithiumBatteryGroup2Current;
|
||||||
|
//20. 锂电池组(仪表)电流
|
||||||
unsigned short lithiumBatteryGroupInstrumentCurrent;
|
unsigned short lithiumBatteryGroupInstrumentCurrent;
|
||||||
|
//21. UNIT4仪表DC48V电流
|
||||||
unsigned short unit4InstrumentDC48VCurrent;
|
unsigned short unit4InstrumentDC48VCurrent;
|
||||||
|
//22. Ushort 预留电流
|
||||||
unsigned short reservedCurrent2; // 为了区分,添加了数字后缀
|
unsigned short reservedCurrent2; // 为了区分,添加了数字后缀
|
||||||
|
//23. 应急2汇流排电压
|
||||||
unsigned short emergency2BusbarVoltage;
|
unsigned short emergency2BusbarVoltage;
|
||||||
|
//24. 复合能源管控系统应急DC48V电流
|
||||||
unsigned short compositeEnergyManagementSystemEmergencyDC48VCurrent;
|
unsigned short compositeEnergyManagementSystemEmergencyDC48VCurrent;
|
||||||
|
//25. 燃料电池安全系统应急DC48V电流
|
||||||
unsigned short fuelCellSecuritySystemEmergencyDC48VCurrent;
|
unsigned short fuelCellSecuritySystemEmergencyDC48VCurrent;
|
||||||
|
//26. PLC控制电源电流
|
||||||
unsigned short plcControlPowerCurrent;
|
unsigned short plcControlPowerCurrent;
|
||||||
}disHighBVolBusState;
|
}disLowMainBusState;
|
||||||
|
|
||||||
typedef struct disLowBusState
|
typedef struct disLowBusState
|
||||||
{
|
{
|
||||||
|
//5. UNIT1断路器
|
||||||
unsigned char unit1CircuitBreaker;
|
unsigned char unit1CircuitBreaker;
|
||||||
|
//6. UNIT2断路器
|
||||||
unsigned char unit2CircuitBreaker;
|
unsigned char unit2CircuitBreaker;
|
||||||
|
//7. UNIT3断路器
|
||||||
unsigned char unit3CircuitBreaker;
|
unsigned char unit3CircuitBreaker;
|
||||||
|
//8. UNIT5断路器
|
||||||
unsigned char unit5CircuitBreaker;
|
unsigned char unit5CircuitBreaker;
|
||||||
|
//9. 艏部PZ装置断路器
|
||||||
unsigned char bowPZDeviceCircuitBreaker;
|
unsigned char bowPZDeviceCircuitBreaker;
|
||||||
|
//10. 预留断路器1
|
||||||
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
||||||
|
//11. 预留断路器2
|
||||||
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
||||||
|
//12. 应急锂电池组1断路器
|
||||||
unsigned char emergencyLithiumBatteryGroup1CircuitBreaker;
|
unsigned char emergencyLithiumBatteryGroup1CircuitBreaker;
|
||||||
|
//13. 仪表电源失电信号 (0x55 正常,0xAA 故障)
|
||||||
unsigned char powerFailureSignal;
|
unsigned char powerFailureSignal;
|
||||||
|
//14. 浸水报警 (0x55 正常,0xAA 故障)
|
||||||
unsigned char waterIngressionAlarm;
|
unsigned char waterIngressionAlarm;
|
||||||
|
//15. 仪表母排电压
|
||||||
unsigned short instrumentBusbarVoltage;
|
unsigned short instrumentBusbarVoltage;
|
||||||
|
//16. 仪表母排电流
|
||||||
unsigned short instrumentBusbarCurrent;
|
unsigned short instrumentBusbarCurrent;
|
||||||
|
//17. UNIT1电流
|
||||||
unsigned short unit1Current;
|
unsigned short unit1Current;
|
||||||
|
//18. UNIT2电流
|
||||||
unsigned short unit2Current;
|
unsigned short unit2Current;
|
||||||
|
//19. UNIT3电流
|
||||||
unsigned short unit3Current;
|
unsigned short unit3Current;
|
||||||
|
//20. UNIT5电流
|
||||||
unsigned short unit5Current;
|
unsigned short unit5Current;
|
||||||
|
//21. 艏部PZ装置电流
|
||||||
unsigned short bowPZDeviceCurrent;
|
unsigned short bowPZDeviceCurrent;
|
||||||
|
//22. 应急锂电池组1电流
|
||||||
unsigned short emergencyLithiumBatteryGroup1Current;
|
unsigned short emergencyLithiumBatteryGroup1Current;
|
||||||
|
//23. 应急1汇流排电压
|
||||||
unsigned short emergency1BusbarVoltage;
|
unsigned short emergency1BusbarVoltage;
|
||||||
}disLowBusState;
|
}disLowBusState;
|
||||||
|
|
||||||
typedef struct disHighVolBusCmd
|
typedef struct disHighVolBusCmd
|
||||||
{
|
{
|
||||||
|
// 5: 燃料电池断路器
|
||||||
unsigned char fuelCellCircuitBreaker;
|
unsigned char fuelCellCircuitBreaker;
|
||||||
|
// 6: 动力锂电池断路器
|
||||||
unsigned char powerLithiumBatteryCircuitBreaker;
|
unsigned char powerLithiumBatteryCircuitBreaker;
|
||||||
|
// 7: 推进电机断路器
|
||||||
unsigned char propulsionMotorCircuitBreaker;
|
unsigned char propulsionMotorCircuitBreaker;
|
||||||
|
// 8: 锂电池组仪表断路器
|
||||||
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
||||||
|
// 9: DC/DC5模块断路器
|
||||||
unsigned char dcDc5ModuleCircuitBreaker;
|
unsigned char dcDc5ModuleCircuitBreaker;
|
||||||
|
// 10: 艏部高压配电箱断路器
|
||||||
unsigned char bowHighVoltageDistributionBoxCircuitBreaker;
|
unsigned char bowHighVoltageDistributionBoxCircuitBreaker;
|
||||||
|
// 11: 艉部FT装置4/5断路器
|
||||||
unsigned char sternFTDevice45CircuitBreaker;
|
unsigned char sternFTDevice45CircuitBreaker;
|
||||||
|
// 12: 艉舵开关1断路器
|
||||||
unsigned char sternRudderSwitch1CircuitBreaker;
|
unsigned char sternRudderSwitch1CircuitBreaker;
|
||||||
|
// 13: 艉舵开关2断路器
|
||||||
unsigned char sternRudderSwitch2CircuitBreaker;
|
unsigned char sternRudderSwitch2CircuitBreaker;
|
||||||
|
// 14: FB预留断路器
|
||||||
unsigned char fbReservedCircuitBreaker;
|
unsigned char fbReservedCircuitBreaker;
|
||||||
|
// 15: TYZ预留断路器
|
||||||
unsigned char tyzReservedCircuitBreaker;
|
unsigned char tyzReservedCircuitBreaker;
|
||||||
|
// 16: 预留断路器
|
||||||
unsigned char reservedCircuitBreaker;
|
unsigned char reservedCircuitBreaker;
|
||||||
|
// 17: DC/DC5模块启动
|
||||||
unsigned char dcdc5Module;
|
unsigned char dcdc5Module;
|
||||||
unsigned char inputWater;
|
// 18: 冷却系统启动
|
||||||
unsigned char outputWater;
|
unsigned char coolingSystem;
|
||||||
|
// unsigned char inputWater;
|
||||||
|
// unsigned char outputWater;
|
||||||
}disHighVolBusCmd;
|
}disHighVolBusCmd;
|
||||||
|
|
||||||
typedef struct disHighAVolBusCmd
|
typedef struct disHighAVolBusCmd
|
||||||
{
|
{
|
||||||
|
//5. 艏部FT装置1/2/3断路器
|
||||||
unsigned char bowFTDevice123CircuitBreaker;
|
unsigned char bowFTDevice123CircuitBreaker;
|
||||||
|
//6. 启闭机构断路器
|
||||||
unsigned char actuatorCircuitBreaker;
|
unsigned char actuatorCircuitBreaker;
|
||||||
|
//7. 桅杆舵机控制箱断路器
|
||||||
unsigned char mastSteeringGearControlBoxCircuitBreaker;
|
unsigned char mastSteeringGearControlBoxCircuitBreaker;
|
||||||
|
//8. XCZ断路器
|
||||||
unsigned char xczCircuitBreaker;
|
unsigned char xczCircuitBreaker;
|
||||||
|
//9. 艏舵控制箱断路器
|
||||||
unsigned char bowRudderControlBoxCircuitBreaker;
|
unsigned char bowRudderControlBoxCircuitBreaker;
|
||||||
|
//10. 敞水盖启动电缸断路器
|
||||||
unsigned char openWaterCoverStartCylinderCircuitBreaker;
|
unsigned char openWaterCoverStartCylinderCircuitBreaker;
|
||||||
}disHighAVolBusCmd;
|
}disHighAVolBusCmd;
|
||||||
|
|
||||||
typedef struct disHighBVolBusCmd
|
typedef struct disHighBVolBusCmd
|
||||||
{
|
{
|
||||||
|
//5. 锂电池组(仪表)断路器
|
||||||
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
||||||
|
//6. 艏部低压配电箱断路器
|
||||||
unsigned char bowLowVoltageDistributionBoxCircuitBreaker;
|
unsigned char bowLowVoltageDistributionBoxCircuitBreaker;
|
||||||
|
//7. UNIT4仪表DC48V断路器
|
||||||
unsigned char unit4InstrumentDC48VCircuitBreaker;
|
unsigned char unit4InstrumentDC48VCircuitBreaker;
|
||||||
|
//8. DC-C1直流配电板断路器
|
||||||
unsigned char dcC1DCDistributionPanelCircuitBreaker;
|
unsigned char dcC1DCDistributionPanelCircuitBreaker;
|
||||||
|
//9. 预留断路器1
|
||||||
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
||||||
|
//10. 预留断路器2
|
||||||
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
||||||
|
//11. 应急锂电池组2断路器
|
||||||
unsigned char emergencyLithiumBatteryGroup2CircuitBreaker;
|
unsigned char emergencyLithiumBatteryGroup2CircuitBreaker;
|
||||||
}disHighBVolBusCmd;
|
}disLowMainBusCmd;
|
||||||
|
|
||||||
typedef struct disLowBusCmd
|
typedef struct disLowBusCmd
|
||||||
{
|
{
|
||||||
@@ -284,7 +427,7 @@ typedef struct pmState
|
|||||||
ccuState ccustate;
|
ccuState ccustate;
|
||||||
disHighVolBusState bus1State;
|
disHighVolBusState bus1State;
|
||||||
disHighAVolBusState bus2State;
|
disHighAVolBusState bus2State;
|
||||||
disHighBVolBusState bus3State;
|
disLowMainBusState bus3State;
|
||||||
disLowBusState bus4State;
|
disLowBusState bus4State;
|
||||||
} PmState;
|
} PmState;
|
||||||
|
|
||||||
@@ -439,6 +582,17 @@ namespace WorkCondition {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace RunMode {
|
||||||
|
enum Type : unsigned char {
|
||||||
|
//正常模式
|
||||||
|
Normal = 0,
|
||||||
|
//测试模式
|
||||||
|
Test = 1,
|
||||||
|
//调试模式
|
||||||
|
Debug = 2
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
namespace TaskType {
|
namespace TaskType {
|
||||||
enum Type : unsigned char {
|
enum Type : unsigned char {
|
||||||
THROW_LOAD = 1, // 抛载
|
THROW_LOAD = 1, // 抛载
|
||||||
@@ -510,55 +664,122 @@ struct DeviceSwitchCmd
|
|||||||
int cmd;
|
int cmd;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace DeviceId {
|
||||||
|
enum Type : unsigned char {
|
||||||
|
singleBeamSonar1 = 0,
|
||||||
|
singleBeamSonar2 = 1,
|
||||||
|
singleBeamSonar3 = 2,
|
||||||
|
singleBeamSonar4 = 3,
|
||||||
|
singleBeamSonar5 = 4,
|
||||||
|
singleBeamSonar6 = 5,
|
||||||
|
singleBeamSonar7 = 6,
|
||||||
|
singleBeamSonar8 = 7,
|
||||||
|
forwardSonar = 8,
|
||||||
|
bowCover1 = 9,
|
||||||
|
bowCover2 = 10,
|
||||||
|
bowCover3 = 11,
|
||||||
|
bowCover4 = 12,
|
||||||
|
bowCover5 = 13,
|
||||||
|
bowCover6 = 14,
|
||||||
|
bowRudderDeploy = 15,
|
||||||
|
bowRudderServo1 = 16,
|
||||||
|
bowRudderServo2 = 17,
|
||||||
|
depth1 = 18,
|
||||||
|
depth2 = 19,
|
||||||
|
depth3 = 20,
|
||||||
|
overDeep1 = 21,
|
||||||
|
overDeep2 = 22,
|
||||||
|
ctd1 = 23,
|
||||||
|
ctd2 = 24,
|
||||||
|
soundVeloc = 25,
|
||||||
|
waterInject = 26,
|
||||||
|
bowWaterlnet1 = 27,
|
||||||
|
bowWaterlnet2 = 28,
|
||||||
|
bowWaterlnet3 = 29,
|
||||||
|
bowWaterlnet4 = 30,
|
||||||
|
bowWaterlnet5 = 31,
|
||||||
|
bowWaterlnet6 = 32,
|
||||||
|
bowWaterlnet7 = 33,
|
||||||
|
bowWaterlnet8 = 34,
|
||||||
|
sideSonar = 35,
|
||||||
|
lowFreqSonar = 36,
|
||||||
|
launchControler = 37,
|
||||||
|
photoSensor = 38,
|
||||||
|
electSensor = 39,
|
||||||
|
commMast = 40,
|
||||||
|
mastLiftingServo = 41,
|
||||||
|
USBL = 42,
|
||||||
|
DVL = 43,
|
||||||
|
buoyancyAdjust1 = 44,
|
||||||
|
buoyancyAdjust2 = 45,
|
||||||
|
buoyancyAdjust3 = 46,
|
||||||
|
buoyancyAdjust4 = 47,
|
||||||
|
buoyancyAdjust5 = 48,
|
||||||
|
sternRudderServo1 = 49,
|
||||||
|
sternRudderServo2 = 50,
|
||||||
|
sternRudderServo3 = 51,
|
||||||
|
sternRudderServo4 = 52,
|
||||||
|
thruster = 53,
|
||||||
|
bowThrow = 54,
|
||||||
|
sternThrow = 55,
|
||||||
|
buoyage = 56,
|
||||||
|
ins = 57,
|
||||||
|
ntp = 58,
|
||||||
|
inputWaterSensor1 = 59,
|
||||||
|
inputWaterSensor2 = 60,
|
||||||
|
inputWaterSensor3 = 61,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
namespace FaultEnable {
|
namespace FaultEnable {
|
||||||
enum Type : bool {
|
enum Type : bool {
|
||||||
BasicNavigationFault_1 = true, // 使能故障
|
BasicNavigationFault_1 = true, // 使能故障
|
||||||
BasicNavigationFault_2 = false,
|
BasicNavigationFault_2 = true,
|
||||||
BasicNavigationFault_3 = false,
|
BasicNavigationFault_3 = true,
|
||||||
BasicNavigationFault_4 = false,
|
BasicNavigationFault_4 = true,
|
||||||
BasicNavigationFault_5 = false,
|
BasicNavigationFault_5 = true,
|
||||||
BasicNavigationFault_6 = false,
|
BasicNavigationFault_6 = true,
|
||||||
BasicNavigationFault_7 = false,
|
BasicNavigationFault_7 = true,
|
||||||
BasicNavigationFault_8 = false,
|
BasicNavigationFault_8 = true,
|
||||||
BasicNavigationFault_9 = false,
|
BasicNavigationFault_9 = true,
|
||||||
BasicNavigationFault_10 = false,
|
BasicNavigationFault_10 = true,
|
||||||
|
|
||||||
ExtendedNavigationFault_1 = false, // 使能故障
|
ExtendedNavigationFault_1 = true, // 使能故障
|
||||||
ExtendedNavigationFault_2 = false,
|
ExtendedNavigationFault_2 = true,
|
||||||
ExtendedNavigationFault_3 = false,
|
ExtendedNavigationFault_3 = true,
|
||||||
ExtendedNavigationFault_4 = false,
|
ExtendedNavigationFault_4 = true,
|
||||||
|
|
||||||
ObstacleAvoidanceFault_1 = false, // 使能故障
|
ObstacleAvoidanceFault_1 = true, // 使能故障
|
||||||
ObstacleAvoidanceFault_2 = false,
|
ObstacleAvoidanceFault_2 = true,
|
||||||
ObstacleAvoidanceFault_3 = false,
|
ObstacleAvoidanceFault_3 = true,
|
||||||
|
|
||||||
BuoyancyControlFault_1 = false, // 使能故障
|
BuoyancyControlFault_1 = true, // 使能故障
|
||||||
BuoyancyControlFault_2 = false,
|
BuoyancyControlFault_2 = true,
|
||||||
BuoyancyControlFault_3 = false,
|
BuoyancyControlFault_3 = true,
|
||||||
BuoyancyControlFault_4 = false,
|
BuoyancyControlFault_4 = true,
|
||||||
|
|
||||||
CommunicationSystemFault_1 = false, // 使能故障
|
CommunicationSystemFault_1 = true, // 使能故障
|
||||||
CommunicationSystemFault_2 = false,
|
CommunicationSystemFault_2 = true,
|
||||||
CommunicationSystemFault_3 = false,
|
CommunicationSystemFault_3 = true,
|
||||||
|
|
||||||
PayloadSystemFault_1 = false, // 使能故障
|
PayloadSystemFault_1 = true, // 使能故障
|
||||||
PayloadSystemFault_2 = false,
|
PayloadSystemFault_2 = true,
|
||||||
PayloadSystemFault_3 = false,
|
PayloadSystemFault_3 = true,
|
||||||
PayloadSystemFault_4 = false,
|
PayloadSystemFault_4 = true,
|
||||||
PayloadSystemFault_5 = false,
|
PayloadSystemFault_5 = true,
|
||||||
PayloadSystemFault_6 = false,
|
PayloadSystemFault_6 = true,
|
||||||
PayloadSystemFault_7 = false,
|
PayloadSystemFault_7 = true,
|
||||||
|
|
||||||
EmergencySystemFault_1 = false, // 使能故障
|
EmergencySystemFault_1 = true, // 使能故障
|
||||||
EmergencySystemFault_2 = false,
|
EmergencySystemFault_2 = true,
|
||||||
EmergencySystemFault_3 = false,
|
EmergencySystemFault_3 = true,
|
||||||
EmergencySystemFault_4 = false,
|
EmergencySystemFault_4 = true,
|
||||||
EmergencySystemFault_5 = false,
|
EmergencySystemFault_5 = true,
|
||||||
EmergencySystemFault_6 = false,
|
EmergencySystemFault_6 = true,
|
||||||
|
|
||||||
SensorSystemFault_1 = false, // 使能故障
|
SensorSystemFault_1 = true, // 使能故障
|
||||||
SensorSystemFault_2 = false,
|
SensorSystemFault_2 = true,
|
||||||
SensorSystemFault_3 = false,
|
SensorSystemFault_3 = true,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -112,12 +112,12 @@ bool udpComm::getMsgFromBuff(char *m, msg_disHighAVolBusFbMsg &s)
|
|||||||
s = *p;
|
s = *p;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool udpComm::getMsgFromBuff(char *m, msg_disHighBVolBusFbMsg &s)
|
bool udpComm::getMsgFromBuff(char *m, msg_disLowMainBusFbMsg &s)
|
||||||
{
|
{
|
||||||
cChecksum sum;
|
cChecksum sum;
|
||||||
msg_disHighBVolBusFbMsg *p;
|
msg_disLowMainBusFbMsg *p;
|
||||||
p = reinterpret_cast<msg_disHighBVolBusFbMsg *>(m);
|
p = reinterpret_cast<msg_disLowMainBusFbMsg *>(m);
|
||||||
sum = calculateChecksum((unsigned char*)m, sizeof(msg_disHighBVolBusFbMsg), sizeof(cChecksum)) & 0xFF;
|
sum = calculateChecksum((unsigned char*)m, sizeof(msg_disLowMainBusFbMsg), sizeof(cChecksum)) & 0xFF;
|
||||||
if (sum!= p->checkCode) {
|
if (sum!= p->checkCode) {
|
||||||
sError.push_back("DisSys HVBBus Msg Check error");
|
sError.push_back("DisSys HVBBus Msg Check error");
|
||||||
return false;
|
return false;
|
||||||
@@ -252,7 +252,7 @@ bool udpComm::pushMsgToQueue(unsigned char *m)
|
|||||||
}
|
}
|
||||||
case DIS_HVBUSB_FB_ID: //DIS_HVBUSB_FB 0x0007
|
case DIS_HVBUSB_FB_ID: //DIS_HVBUSB_FB 0x0007
|
||||||
{
|
{
|
||||||
msg_disHighBVolBusFbMsg s;
|
msg_disLowMainBusFbMsg s;
|
||||||
if(getMsgFromBuff((char *)Buff,s))
|
if(getMsgFromBuff((char *)Buff,s))
|
||||||
{
|
{
|
||||||
if(m_qReceiveDisHighBVolBusBuffer.size()<QUENUE_SIZE)
|
if(m_qReceiveDisHighBVolBusBuffer.size()<QUENUE_SIZE)
|
||||||
@@ -359,7 +359,7 @@ bool udpComm::popMsgFormQueue(double &time,msg_disHighAVolBusFbMsg &m)
|
|||||||
m_qReceiveDisHighAVolBusBuffer.pop();
|
m_qReceiveDisHighAVolBusBuffer.pop();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool udpComm::popMsgFormQueue(double &time,msg_disHighBVolBusFbMsg &m)
|
bool udpComm::popMsgFormQueue(double &time,msg_disLowMainBusFbMsg &m)
|
||||||
{
|
{
|
||||||
if(m_qReceiveDisHighBVolBusBuffer.empty())
|
if(m_qReceiveDisHighBVolBusBuffer.empty())
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -32,14 +32,14 @@ public:
|
|||||||
bool getMsgFromBuff(char *m, msg_CcuSetParmFbMsg &s);
|
bool getMsgFromBuff(char *m, msg_CcuSetParmFbMsg &s);
|
||||||
bool getMsgFromBuff(char *m, msg_disHighVolBusFbMsg &s);
|
bool getMsgFromBuff(char *m, msg_disHighVolBusFbMsg &s);
|
||||||
bool getMsgFromBuff(char *m, msg_disHighAVolBusFbMsg &s);
|
bool getMsgFromBuff(char *m, msg_disHighAVolBusFbMsg &s);
|
||||||
bool getMsgFromBuff(char *m, msg_disHighBVolBusFbMsg &s);
|
bool getMsgFromBuff(char *m, msg_disLowMainBusFbMsg &s);
|
||||||
bool getMsgFromBuff(char *m, msg_disLowBusFbMsg &s);
|
bool getMsgFromBuff(char *m, msg_disLowBusFbMsg &s);
|
||||||
|
|
||||||
bool popMsgFormQueue(double &time,msg_CcuStateFbMsg &m);
|
bool popMsgFormQueue(double &time,msg_CcuStateFbMsg &m);
|
||||||
bool popMsgFormQueue(double &time,msg_CcuSetParmFbMsg &m);
|
bool popMsgFormQueue(double &time,msg_CcuSetParmFbMsg &m);
|
||||||
bool popMsgFormQueue(double &time,msg_disHighVolBusFbMsg &m);
|
bool popMsgFormQueue(double &time,msg_disHighVolBusFbMsg &m);
|
||||||
bool popMsgFormQueue(double &time,msg_disHighAVolBusFbMsg &m);
|
bool popMsgFormQueue(double &time,msg_disHighAVolBusFbMsg &m);
|
||||||
bool popMsgFormQueue(double &time,msg_disHighBVolBusFbMsg &m);
|
bool popMsgFormQueue(double &time,msg_disLowMainBusFbMsg &m);
|
||||||
bool popMsgFormQueue(double &time,msg_disLowBusFbMsg &m);
|
bool popMsgFormQueue(double &time,msg_disLowBusFbMsg &m);
|
||||||
|
|
||||||
bool sendCcuColCmd(const ccuColCmd cmd);
|
bool sendCcuColCmd(const ccuColCmd cmd);
|
||||||
@@ -68,7 +68,7 @@ public:
|
|||||||
std::queue<std::pair<double,msg_CcuSetParmFbMsg>> m_qReceiveCcuSetParmBuffer;
|
std::queue<std::pair<double,msg_CcuSetParmFbMsg>> m_qReceiveCcuSetParmBuffer;
|
||||||
std::queue<std::pair<double,msg_disHighVolBusFbMsg>> m_qReceiveDisHighVolBusBuffer;
|
std::queue<std::pair<double,msg_disHighVolBusFbMsg>> m_qReceiveDisHighVolBusBuffer;
|
||||||
std::queue<std::pair<double,msg_disHighAVolBusFbMsg>> m_qReceiveDisHighAVolBusBuffer;
|
std::queue<std::pair<double,msg_disHighAVolBusFbMsg>> m_qReceiveDisHighAVolBusBuffer;
|
||||||
std::queue<std::pair<double,msg_disHighBVolBusFbMsg>> m_qReceiveDisHighBVolBusBuffer;
|
std::queue<std::pair<double,msg_disLowMainBusFbMsg>> m_qReceiveDisHighBVolBusBuffer;
|
||||||
std::queue<std::pair<double,msg_disLowBusFbMsg>> m_qReceiveDisLowBusBuffer;
|
std::queue<std::pair<double,msg_disLowBusFbMsg>> m_qReceiveDisLowBusBuffer;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,649 @@
|
|||||||
|
import sqlite3
|
||||||
|
import threading
|
||||||
|
from datetime import datetime
|
||||||
|
from udpMsg import (
|
||||||
|
msg_disHighVolBusFbMsg,
|
||||||
|
msg_disHighAVolBusFbMsg,
|
||||||
|
msg_disLowMainBusFbMsg,
|
||||||
|
msg_disLowBusFbMsg,
|
||||||
|
msg_disHVBCmdMsg,
|
||||||
|
msg_disHVBACmdMsg,
|
||||||
|
msg_disLVMBCmdMsg,
|
||||||
|
msg_disLVBCmdMsg
|
||||||
|
)
|
||||||
|
|
||||||
|
class DB:
|
||||||
|
def __init__(self, db_name):
|
||||||
|
self.db_name = db_name
|
||||||
|
self.conn = None
|
||||||
|
self.lock = threading.Lock()
|
||||||
|
|
||||||
|
def setPath(self, path):
|
||||||
|
self.db_name = path
|
||||||
|
|
||||||
|
def connect(self):
|
||||||
|
self.conn = sqlite3.connect(self.db_name, check_same_thread=False)
|
||||||
|
self.conn.row_factory = sqlite3.Row
|
||||||
|
self.createTable()
|
||||||
|
print("数据库连接成功")
|
||||||
|
|
||||||
|
def createTable(self):
|
||||||
|
'''创建UDP消息数据表'''
|
||||||
|
cursor = self.conn.cursor()
|
||||||
|
|
||||||
|
# 高压母线配电反馈表
|
||||||
|
cursor.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS msg_disHighVolBusFbMsg (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
fuelCellCircuitBreaker INTEGER,
|
||||||
|
powerLithiumBatteryCircuitBreaker INTEGER,
|
||||||
|
propulsionMotorCircuitBreaker INTEGER,
|
||||||
|
lithiumBatteryGroupInstrumentCircuitBreaker INTEGER,
|
||||||
|
dcDc5ModuleCircuitBreaker INTEGER,
|
||||||
|
bowHighVoltageDistributionBoxCircuitBreaker INTEGER,
|
||||||
|
sternFTDevice45CircuitBreaker INTEGER,
|
||||||
|
sternRudderSwitch1CircuitBreaker INTEGER,
|
||||||
|
sternRudderSwitch2CircuitBreaker INTEGER,
|
||||||
|
fbReservedCircuitBreaker INTEGER,
|
||||||
|
tyzReservedCircuitBreaker INTEGER,
|
||||||
|
reservedCircuitBreaker INTEGER,
|
||||||
|
dcDcFaultWord1 INTEGER,
|
||||||
|
dcDcFaultWord2 INTEGER,
|
||||||
|
powerBusInsulationStatus INTEGER,
|
||||||
|
aBusInsulationStatus INTEGER,
|
||||||
|
meterPowerLossSignal INTEGER,
|
||||||
|
emergencyPowerLossSignal INTEGER,
|
||||||
|
powerBusVoltage INTEGER,
|
||||||
|
dcDc5ModuleCurrent INTEGER,
|
||||||
|
powerBusCurrent INTEGER,
|
||||||
|
busbarAVoltage INTEGER,
|
||||||
|
propulsionMotorControlBoxCurrent INTEGER,
|
||||||
|
busbarACurrent INTEGER,
|
||||||
|
lithiumBatteryGroupMeterCurrent INTEGER,
|
||||||
|
bowHighVoltageDistributionBoxCurrent INTEGER,
|
||||||
|
sternFTDevice45Current INTEGER,
|
||||||
|
tyzReservedSwitchCurrent INTEGER,
|
||||||
|
sternRudderSwitch1Current INTEGER,
|
||||||
|
reservedCurrent1 INTEGER,
|
||||||
|
sternRudderSwitch2Current INTEGER,
|
||||||
|
reservedCurrent2 INTEGER,
|
||||||
|
fbReservedSwitchCurrent INTEGER,
|
||||||
|
reservedCurrent3 INTEGER,
|
||||||
|
coolWaterPressure INTEGER
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
# 高压母线A配电反馈表
|
||||||
|
cursor.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS msg_disHighAVolBusFbMsg (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
bowFTDevice123CircuitBreaker INTEGER,
|
||||||
|
actuatorCircuitBreaker INTEGER,
|
||||||
|
mastSteeringGearControlBoxCircuitBreaker INTEGER,
|
||||||
|
xczCircuitBreaker INTEGER,
|
||||||
|
bowRudderControlBoxCircuitBreaker INTEGER,
|
||||||
|
openWaterCoverStartCylinderCircuitBreaker INTEGER,
|
||||||
|
instrumentPowerFailureSignal INTEGER,
|
||||||
|
emergencyPowerFailureSignal INTEGER,
|
||||||
|
waterIngressionAlarm INTEGER,
|
||||||
|
busbarBVoltage INTEGER,
|
||||||
|
busbarBCurrent INTEGER,
|
||||||
|
bowFTDevice123Current INTEGER,
|
||||||
|
actuatorCurrent INTEGER,
|
||||||
|
mastSteeringGearControlBoxCurrent INTEGER,
|
||||||
|
xczCurrent INTEGER,
|
||||||
|
bowRudderControlBoxCurrent INTEGER,
|
||||||
|
openWaterCoverStartCylinderCurrent INTEGER
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
# 仪表母线配电反馈表
|
||||||
|
cursor.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS msg_disLowMainBusFbMsg (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
lithiumBatteryGroupInstrumentCircuitBreaker INTEGER,
|
||||||
|
bowLowVoltageDistributionBoxCircuitBreaker INTEGER,
|
||||||
|
unit4InstrumentDC48VCircuitBreaker INTEGER,
|
||||||
|
dcC1DCDistributionPanelCircuitBreaker INTEGER,
|
||||||
|
reservedCircuitBreaker1 INTEGER,
|
||||||
|
reservedCircuitBreaker2 INTEGER,
|
||||||
|
emergencyLithiumBatteryGroup2CircuitBreaker INTEGER,
|
||||||
|
instrumentPowerFailureSignal INTEGER,
|
||||||
|
emergencyPowerFailureSignal INTEGER,
|
||||||
|
instrumentBusbarInsulationLow INTEGER,
|
||||||
|
instrumentBusbarVoltage INTEGER,
|
||||||
|
bowLowVoltageDistributionBoxCurrent INTEGER,
|
||||||
|
dcC1InstrumentDC48VCurrent INTEGER,
|
||||||
|
reservedCurrent1 INTEGER,
|
||||||
|
emergencyLithiumBatteryGroup2Current INTEGER,
|
||||||
|
lithiumBatteryGroupInstrumentCurrent INTEGER,
|
||||||
|
unit4InstrumentDC48VCurrent INTEGER,
|
||||||
|
reservedCurrent2 INTEGER,
|
||||||
|
emergency2BusbarVoltage INTEGER,
|
||||||
|
compositeEnergyManagementSystemEmergencyDC48VCurrent INTEGER,
|
||||||
|
fuelCellSecuritySystemEmergencyDC48VCurrent INTEGER,
|
||||||
|
plcControlPowerCurrent INTEGER
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
# 仪表汇流排配电反馈表
|
||||||
|
cursor.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS msg_disLowBusFbMsg (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
unit1CircuitBreaker INTEGER,
|
||||||
|
unit2CircuitBreaker INTEGER,
|
||||||
|
unit3CircuitBreaker INTEGER,
|
||||||
|
unit5CircuitBreaker INTEGER,
|
||||||
|
bowPZDeviceCircuitBreaker INTEGER,
|
||||||
|
reservedCircuitBreaker1 INTEGER,
|
||||||
|
reservedCircuitBreaker2 INTEGER,
|
||||||
|
emergencyLithiumBatteryGroup1CircuitBreaker INTEGER,
|
||||||
|
powerFailureSignal INTEGER,
|
||||||
|
waterIngressionAlarm INTEGER,
|
||||||
|
instrumentBusbarVoltage INTEGER,
|
||||||
|
instrumentBusbarCurrent INTEGER,
|
||||||
|
unit1Current INTEGER,
|
||||||
|
unit2Current INTEGER,
|
||||||
|
unit3Current INTEGER,
|
||||||
|
unit5Current INTEGER,
|
||||||
|
bowPZDeviceCurrent INTEGER,
|
||||||
|
emergencyLithiumBatteryGroup1Current INTEGER,
|
||||||
|
emergency1BusbarVoltage INTEGER
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
# 高压母线命令表
|
||||||
|
cursor.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS msg_disHVBCmdMsg (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
fuelCellCircuitBreakerCmd INTEGER,
|
||||||
|
powerLithiumBatteryCircuitBreakerCmd INTEGER,
|
||||||
|
propulsionMotorCircuitBreakerCmd INTEGER,
|
||||||
|
lithiumBatteryGroupInstrumentCircuitBreakerCmd INTEGER,
|
||||||
|
dcDc5ModuleCircuitBreakerCmd INTEGER,
|
||||||
|
bowHighVoltageDistributionBoxCircuitBreakerCmd INTEGER,
|
||||||
|
sternFTDevice45CircuitBreakerCmd INTEGER,
|
||||||
|
sternRudderSwitch1CircuitBreakerCmd INTEGER,
|
||||||
|
sternRudderSwitch2CircuitBreakerCmd INTEGER,
|
||||||
|
fbReservedCircuitBreakerCmd INTEGER,
|
||||||
|
tyzReservedCircuitBreakerCmd INTEGER,
|
||||||
|
reservedCircuitBreakerCmd INTEGER,
|
||||||
|
dcdc5ModuleCmd INTEGER,
|
||||||
|
coolingSystemCmd INTEGER
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
# 高压母线A命令表
|
||||||
|
cursor.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS msg_disHVBACmdMsg (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
bowFTDevice123CircuitBreakerCmd INTEGER,
|
||||||
|
actuatorCircuitBreakerCmd INTEGER,
|
||||||
|
mastSteeringGearControlBoxCircuitBreakerCmd INTEGER,
|
||||||
|
xczCircuitBreakerCmd INTEGER,
|
||||||
|
bowRudderControlBoxCircuitBreakerCmd INTEGER,
|
||||||
|
openWaterCoverStartCylinderCircuitBreakerCmd INTEGER
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
# 仪表母线命令表
|
||||||
|
cursor.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS msg_disLVMBCmdMsg (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
lithiumBatteryGroupInstrumentCircuitBreakerCmd INTEGER,
|
||||||
|
bowLowVoltageDistributionBoxCircuitBreakerCmd INTEGER,
|
||||||
|
unit4InstrumentDC48VCircuitBreakerCmd INTEGER,
|
||||||
|
dcC1DCDistributionPanelCircuitBreakerCmd INTEGER,
|
||||||
|
reservedCircuitBreakerCmd1 INTEGER,
|
||||||
|
reservedCircuitBreakerCmd2 INTEGER,
|
||||||
|
emergencyLithiumBatteryGroup2CircuitBreakerCmd INTEGER
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
# 仪表汇流排命令表
|
||||||
|
cursor.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS msg_disLVBCmdMsg (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
unit1CircuitBreakerCmd INTEGER,
|
||||||
|
unit2CircuitBreakerCmd INTEGER,
|
||||||
|
unit3CircuitBreakerCmd INTEGER,
|
||||||
|
unit5CircuitBreakerCmd INTEGER,
|
||||||
|
bowPZDeviceCircuitBreakerCmd INTEGER,
|
||||||
|
reservedCircuitBreakerCmd1 INTEGER,
|
||||||
|
reservedCircuitBreakerCmd2 INTEGER,
|
||||||
|
emergencyLithiumBatteryGroup1CircuitBreakerCmd INTEGER
|
||||||
|
)
|
||||||
|
''')
|
||||||
|
|
||||||
|
self.conn.commit()
|
||||||
|
|
||||||
|
def _insert_data(self, table_name, data_dict):
|
||||||
|
print('-----------------insert_data start')
|
||||||
|
'''内部方法:执行实际的数据库插入操作'''
|
||||||
|
with self.lock:
|
||||||
|
try:
|
||||||
|
# 检查并建立连接
|
||||||
|
if not self.conn:
|
||||||
|
print('-----------------connecting to database')
|
||||||
|
self.connect()
|
||||||
|
|
||||||
|
print(f'-----------------connection status: {"connected" if self.conn else "disconnected"}')
|
||||||
|
if not self.conn:
|
||||||
|
print('-----------------connection failed')
|
||||||
|
return False
|
||||||
|
|
||||||
|
print(f'-----------------connection object: {self.conn}')
|
||||||
|
|
||||||
|
# 创建cursor
|
||||||
|
try:
|
||||||
|
print('-----------------creating cursor')
|
||||||
|
cursor = self.conn.cursor()
|
||||||
|
print('-----------------cursor created successfully')
|
||||||
|
except sqlite3.Error as e:
|
||||||
|
print(f'-----------------cursor creation failed: {e}')
|
||||||
|
return False
|
||||||
|
|
||||||
|
# 准备查询
|
||||||
|
columns = ', '.join(data_dict.keys())
|
||||||
|
placeholders = ', '.join(['?'] * len(data_dict))
|
||||||
|
query = f'INSERT INTO {table_name} ({columns}) VALUES ({placeholders})'
|
||||||
|
print(f'-----------------prepared query: {query}')
|
||||||
|
|
||||||
|
# 执行查询
|
||||||
|
try:
|
||||||
|
print('-----------------executing query')
|
||||||
|
cursor.execute(query, list(data_dict.values()))
|
||||||
|
self.conn.commit()
|
||||||
|
print(f"-----------------Data inserted successfully into {table_name}")
|
||||||
|
return True
|
||||||
|
except sqlite3.Error as e:
|
||||||
|
print(f"-----------------Error executing query: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f'-----------------unexpected error in _insert_data: {e}')
|
||||||
|
return False
|
||||||
|
|
||||||
|
def insertHighVolBusData(self, data:msg_disHighVolBusFbMsg):
|
||||||
|
'''插入高压母线配电反馈数据'''
|
||||||
|
print('-----------------insertHighVolBusData')
|
||||||
|
data_dict = {
|
||||||
|
'fuelCellCircuitBreaker': data.fuelCellCircuitBreaker,
|
||||||
|
'powerLithiumBatteryCircuitBreaker': data.powerLithiumBatteryCircuitBreaker,
|
||||||
|
'propulsionMotorCircuitBreaker': data.propulsionMotorCircuitBreaker,
|
||||||
|
'lithiumBatteryGroupInstrumentCircuitBreaker': data.lithiumBatteryGroupInstrumentCircuitBreaker,
|
||||||
|
'dcDc5ModuleCircuitBreaker': data.dcDc5ModuleCircuitBreaker,
|
||||||
|
'bowHighVoltageDistributionBoxCircuitBreaker': data.bowHighVoltageDistributionBoxCircuitBreaker,
|
||||||
|
'sternFTDevice45CircuitBreaker': data.sternFTDevice45CircuitBreaker,
|
||||||
|
'sternRudderSwitch1CircuitBreaker': data.sternRudderSwitch1CircuitBreaker,
|
||||||
|
'sternRudderSwitch2CircuitBreaker': data.sternRudderSwitch2CircuitBreaker,
|
||||||
|
'fbReservedCircuitBreaker': data.fbReservedCircuitBreaker,
|
||||||
|
'tyzReservedCircuitBreaker': data.tyzReservedCircuitBreaker,
|
||||||
|
'reservedCircuitBreaker': data.reservedCircuitBreaker,
|
||||||
|
'dcDcFaultWord1': data.dcDcFaultWord1,
|
||||||
|
'dcDcFaultWord2': data.dcDcFaultWord2,
|
||||||
|
'powerBusInsulationStatus': data.powerBusInsulationStatus,
|
||||||
|
'aBusInsulationStatus': data.aBusInsulationStatus,
|
||||||
|
'meterPowerLossSignal': data.meterPowerLossSignal,
|
||||||
|
'emergencyPowerLossSignal': data.emergencyPowerLossSignal,
|
||||||
|
'powerBusVoltage': data.powerBusVoltage,
|
||||||
|
'dcDc5ModuleCurrent': data.dcDc5ModuleCurrent,
|
||||||
|
'powerBusCurrent': data.powerBusCurrent,
|
||||||
|
'busbarAVoltage': data.busbarAVoltage,
|
||||||
|
'propulsionMotorControlBoxCurrent': data.propulsionMotorControlBoxCurrent,
|
||||||
|
'busbarACurrent': data.busbarACurrent,
|
||||||
|
'lithiumBatteryGroupMeterCurrent': data.lithiumBatteryGroupMeterCurrent,
|
||||||
|
'bowHighVoltageDistributionBoxCurrent': data.bowHighVoltageDistributionBoxCurrent,
|
||||||
|
'sternFTDevice45Current': data.sternFTDevice45Current,
|
||||||
|
'tyzReservedSwitchCurrent': data.tyzReservedSwitchCurrent,
|
||||||
|
'sternRudderSwitch1Current': data.sternRudderSwitch1Current,
|
||||||
|
'reservedCurrent1': data.reservedCurrent1,
|
||||||
|
'sternRudderSwitch2Current': data.sternRudderSwitch2Current,
|
||||||
|
'reservedCurrent2': data.reservedCurrent2,
|
||||||
|
'fbReservedSwitchCurrent': data.fbReservedSwitchCurrent,
|
||||||
|
'reservedCurrent3': data.reservedCurrent3,
|
||||||
|
'coolWaterPressure': data.coolWaterPressure
|
||||||
|
}
|
||||||
|
return self._insert_data('msg_disHighVolBusFbMsg', data_dict)
|
||||||
|
|
||||||
|
def insertHighAVolBusData(self, data:msg_disHighAVolBusFbMsg):
|
||||||
|
'''插入高压母线A配电反馈数据'''
|
||||||
|
data_dict = {
|
||||||
|
'bowFTDevice123CircuitBreaker': data.bowFTDevice123CircuitBreaker,
|
||||||
|
'actuatorCircuitBreaker': data.actuatorCircuitBreaker,
|
||||||
|
'mastSteeringGearControlBoxCircuitBreaker': data.mastSteeringGearControlBoxCircuitBreaker,
|
||||||
|
'xczCircuitBreaker': data.xczCircuitBreaker,
|
||||||
|
'bowRudderControlBoxCircuitBreaker': data.bowRudderControlBoxCircuitBreaker,
|
||||||
|
'openWaterCoverStartCylinderCircuitBreaker': data.openWaterCoverStartCylinderCircuitBreaker,
|
||||||
|
'instrumentPowerFailureSignal': data.instrumentPowerFailureSignal,
|
||||||
|
'emergencyPowerFailureSignal': data.emergencyPowerFailureSignal,
|
||||||
|
'waterIngressionAlarm': data.waterIngressionAlarm,
|
||||||
|
'busbarBVoltage': data.busbarBVoltage,
|
||||||
|
'busbarBCurrent': data.busbarBCurrent,
|
||||||
|
'bowFTDevice123Current': data.bowFTDevice123Current,
|
||||||
|
'actuatorCurrent': data.actuatorCurrent,
|
||||||
|
'mastSteeringGearControlBoxCurrent': data.mastSteeringGearControlBoxCurrent,
|
||||||
|
'xczCurrent': data.xczCurrent,
|
||||||
|
'bowRudderControlBoxCurrent': data.bowRudderControlBoxCurrent,
|
||||||
|
'openWaterCoverStartCylinderCurrent': data.openWaterCoverStartCylinderCurrent
|
||||||
|
}
|
||||||
|
return self._insert_data('msg_disHighAVolBusFbMsg', data_dict)
|
||||||
|
|
||||||
|
def insertLowMainBusData(self, data:msg_disLowMainBusFbMsg):
|
||||||
|
'''插入仪表母线配电反馈数据'''
|
||||||
|
data_dict = {
|
||||||
|
'lithiumBatteryGroupInstrumentCircuitBreaker': data.lithiumBatteryGroupInstrumentCircuitBreaker,
|
||||||
|
'bowLowVoltageDistributionBoxCircuitBreaker': data.bowLowVoltageDistributionBoxCircuitBreaker,
|
||||||
|
'unit4InstrumentDC48VCircuitBreaker': data.unit4InstrumentDC48VCircuitBreaker,
|
||||||
|
'dcC1DCDistributionPanelCircuitBreaker': data.dcC1DCDistributionPanelCircuitBreaker,
|
||||||
|
'reservedCircuitBreaker1': data.reservedCircuitBreaker1,
|
||||||
|
'reservedCircuitBreaker2': data.reservedCircuitBreaker2,
|
||||||
|
'emergencyLithiumBatteryGroup2CircuitBreaker': data.emergencyLithiumBatteryGroup2CircuitBreaker,
|
||||||
|
'instrumentPowerFailureSignal': data.instrumentPowerFailureSignal,
|
||||||
|
'emergencyPowerFailureSignal': data.emergencyPowerFailureSignal,
|
||||||
|
'instrumentBusbarInsulationLow': data.instrumentBusbarInsulationLow,
|
||||||
|
'instrumentBusbarVoltage': data.instrumentBusbarVoltage,
|
||||||
|
'bowLowVoltageDistributionBoxCurrent': data.bowLowVoltageDistributionBoxCurrent,
|
||||||
|
'dcC1InstrumentDC48VCurrent': data.dcC1InstrumentDC48VCurrent,
|
||||||
|
'reservedCurrent1': data.reservedCurrent1,
|
||||||
|
'emergencyLithiumBatteryGroup2Current': data.emergencyLithiumBatteryGroup2Current,
|
||||||
|
'lithiumBatteryGroupInstrumentCurrent': data.lithiumBatteryGroupInstrumentCurrent,
|
||||||
|
'unit4InstrumentDC48VCurrent': data.unit4InstrumentDC48VCurrent,
|
||||||
|
'reservedCurrent2': data.reservedCurrent2,
|
||||||
|
'emergency2BusbarVoltage': data.emergency2BusbarVoltage,
|
||||||
|
'compositeEnergyManagementSystemEmergencyDC48VCurrent': data.compositeEnergyManagementSystemEmergencyDC48VCurrent,
|
||||||
|
'fuelCellSecuritySystemEmergencyDC48VCurrent': data.fuelCellSecuritySystemEmergencyDC48VCurrent,
|
||||||
|
'plcControlPowerCurrent': data.plcControlPowerCurrent
|
||||||
|
}
|
||||||
|
return self._insert_data('msg_disLowMainBusFbMsg', data_dict)
|
||||||
|
|
||||||
|
def insertLowBusData(self, data:msg_disLowBusFbMsg):
|
||||||
|
'''插入仪表汇流排配电反馈数据'''
|
||||||
|
data_dict = {
|
||||||
|
'unit1CircuitBreaker': data.unit1CircuitBreaker,
|
||||||
|
'unit2CircuitBreaker': data.unit2CircuitBreaker,
|
||||||
|
'unit3CircuitBreaker': data.unit3CircuitBreaker,
|
||||||
|
'unit5CircuitBreaker': data.unit5CircuitBreaker,
|
||||||
|
'bowPZDeviceCircuitBreaker': data.bowPZDeviceCircuitBreaker,
|
||||||
|
'reservedCircuitBreaker1': data.reservedCircuitBreaker1,
|
||||||
|
'reservedCircuitBreaker2': data.reservedCircuitBreaker2,
|
||||||
|
'emergencyLithiumBatteryGroup1CircuitBreaker': data.emergencyLithiumBatteryGroup1CircuitBreaker,
|
||||||
|
'powerFailureSignal': data.powerFailureSignal,
|
||||||
|
'waterIngressionAlarm': data.waterIngressionAlarm,
|
||||||
|
'instrumentBusbarVoltage': data.instrumentBusbarVoltage,
|
||||||
|
'instrumentBusbarCurrent': data.instrumentBusbarCurrent,
|
||||||
|
'unit1Current': data.unit1Current,
|
||||||
|
'unit2Current': data.unit2Current,
|
||||||
|
'unit3Current': data.unit3Current,
|
||||||
|
'unit5Current': data.unit5Current,
|
||||||
|
'bowPZDeviceCurrent': data.bowPZDeviceCurrent,
|
||||||
|
'emergencyLithiumBatteryGroup1Current': data.emergencyLithiumBatteryGroup1Current,
|
||||||
|
'emergency1BusbarVoltage': data.emergency1BusbarVoltage
|
||||||
|
}
|
||||||
|
return self._insert_data('msg_disLowBusFbMsg', data_dict)
|
||||||
|
|
||||||
|
def insertHighVolBusCmd(self, data:msg_disHVBCmdMsg):
|
||||||
|
'''插入高压母线命令数据'''
|
||||||
|
data_dict = {
|
||||||
|
'fuelCellCircuitBreakerCmd': data.fuelCellCircuitBreaker,
|
||||||
|
'powerLithiumBatteryCircuitBreakerCmd': data.powerLithiumBatteryCircuitBreaker,
|
||||||
|
'propulsionMotorCircuitBreakerCmd': data.propulsionMotorCircuitBreaker,
|
||||||
|
'lithiumBatteryGroupInstrumentCircuitBreakerCmd': data.lithiumBatteryGroupInstrumentCircuitBreaker,
|
||||||
|
'dcDc5ModuleCircuitBreakerCmd': data.dcDc5ModuleCircuitBreaker,
|
||||||
|
'bowHighVoltageDistributionBoxCircuitBreakerCmd': data.bowHighVoltageDistributionBoxCircuitBreaker,
|
||||||
|
'sternFTDevice45CircuitBreakerCmd': data.sternFTDevice45CircuitBreaker,
|
||||||
|
'sternRudderSwitch1CircuitBreakerCmd': data.sternRudderSwitch1CircuitBreaker,
|
||||||
|
'sternRudderSwitch2CircuitBreakerCmd': data.sternRudderSwitch2CircuitBreaker,
|
||||||
|
'fbReservedCircuitBreakerCmd': data.fbReservedCircuitBreaker,
|
||||||
|
'tyzReservedCircuitBreakerCmd': data.tyzReservedCircuitBreaker,
|
||||||
|
'reservedCircuitBreakerCmd': data.reservedCircuitBreaker,
|
||||||
|
'dcdc5ModuleCmd': data.dcdc5Module,
|
||||||
|
'coolingSystemCmd': data.coolingSystem
|
||||||
|
}
|
||||||
|
return self._insert_data('msg_disHVBCmdMsg', data_dict)
|
||||||
|
|
||||||
|
def insertHighAVolBusCmd(self, data:msg_disHVBACmdMsg):
|
||||||
|
'''插入高压母线A命令数据'''
|
||||||
|
data_dict = {
|
||||||
|
'bowFTDevice123CircuitBreakerCmd': data.bowFTDevice123CircuitBreaker,
|
||||||
|
'actuatorCircuitBreakerCmd': data.actuatorCircuitBreaker,
|
||||||
|
'mastSteeringGearControlBoxCircuitBreakerCmd': data.mastSteeringGearControlBoxCircuitBreaker,
|
||||||
|
'xczCircuitBreakerCmd': data.xczCircuitBreaker,
|
||||||
|
'bowRudderControlBoxCircuitBreakerCmd': data.bowRudderControlBoxCircuitBreaker,
|
||||||
|
'openWaterCoverStartCylinderCircuitBreakerCmd': data.openWaterCoverStartCylinderCircuitBreaker
|
||||||
|
}
|
||||||
|
return self._insert_data('msg_disHVBACmdMsg', data_dict)
|
||||||
|
|
||||||
|
def insertLowMainBusCmd(self, data:msg_disLVMBCmdMsg):
|
||||||
|
'''插入仪表母线命令数据'''
|
||||||
|
data_dict = {
|
||||||
|
'lithiumBatteryGroupInstrumentCircuitBreakerCmd': data.lithiumBatteryGroupInstrumentCircuitBreaker,
|
||||||
|
'bowLowVoltageDistributionBoxCircuitBreakerCmd': data.bowLowVoltageDistributionBoxCircuitBreaker,
|
||||||
|
'unit4InstrumentDC48VCircuitBreakerCmd': data.unit4InstrumentDC48VCircuitBreaker,
|
||||||
|
'dcC1DCDistributionPanelCircuitBreakerCmd': data.dcC1DCDistributionPanelCircuitBreaker,
|
||||||
|
'reservedCircuitBreakerCmd1': data.reservedCircuitBreaker1,
|
||||||
|
'reservedCircuitBreakerCmd2': data.reservedCircuitBreaker2,
|
||||||
|
'emergencyLithiumBatteryGroup2CircuitBreakerCmd': data.emergencyLithiumBatteryGroup2CircuitBreaker
|
||||||
|
}
|
||||||
|
return self._insert_data('msg_disLVMBCmdMsg', data_dict)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def insertLowBusCmd(self, data:msg_disLVBCmdMsg):
|
||||||
|
'''插入仪表汇流排命令数据'''
|
||||||
|
data_dict = {
|
||||||
|
'unit1CircuitBreakerCmd': data.unit1CircuitBreaker,
|
||||||
|
'unit2CircuitBreakerCmd': data.unit2CircuitBreaker,
|
||||||
|
'unit3CircuitBreakerCmd': data.unit3CircuitBreaker,
|
||||||
|
'unit5CircuitBreakerCmd': data.unit5CircuitBreaker,
|
||||||
|
'bowPZDeviceCircuitBreakerCmd': data.bowPZDeviceCircuitBreaker,
|
||||||
|
'reservedCircuitBreakerCmd1': data.reservedCircuitBreaker1,
|
||||||
|
'reservedCircuitBreakerCmd2': data.reservedCircuitBreaker2,
|
||||||
|
'emergencyLithiumBatteryGroup1CircuitBreakerCmd': data.emergencyLithiumBatteryGroup1CircuitBreaker
|
||||||
|
}
|
||||||
|
return self._insert_data('msg_disLVBCmdMsg', data_dict)
|
||||||
|
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
if self.conn:
|
||||||
|
self.conn.close()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# 创建数据库实例
|
||||||
|
db = DB('/home/zjk/project/H100/H100PowerManger/test/disSysTest/test.db')
|
||||||
|
db.connect()
|
||||||
|
|
||||||
|
# 创建测试数据
|
||||||
|
from udpMsg import (
|
||||||
|
msg_disHighVolBusFbMsg,
|
||||||
|
msg_disHighAVolBusFbMsg,
|
||||||
|
msg_disLowMainBusFbMsg,
|
||||||
|
msg_disLowBusFbMsg,
|
||||||
|
msg_disHVBCmdMsg,
|
||||||
|
msg_disHVBACmdMsg,
|
||||||
|
msg_disLVMBCmdMsg,
|
||||||
|
msg_disLVBCmdMsg
|
||||||
|
)
|
||||||
|
|
||||||
|
# 测试反馈消息存储
|
||||||
|
fb1 = msg_disHighVolBusFbMsg()
|
||||||
|
fb1.fuelCellCircuitBreaker = 1
|
||||||
|
fb1.powerLithiumBatteryCircuitBreaker = 1
|
||||||
|
fb1.propulsionMotorCircuitBreaker = 1
|
||||||
|
fb1.lithiumBatteryGroupInstrumentCircuitBreaker = 1
|
||||||
|
fb1.dcDc5ModuleCircuitBreaker = 1
|
||||||
|
fb1.bowHighVoltageDistributionBoxCircuitBreaker = 1
|
||||||
|
fb1.sternFTDevice45CircuitBreaker = 1
|
||||||
|
fb1.sternRudderSwitch1CircuitBreaker = 1
|
||||||
|
fb1.sternRudderSwitch2CircuitBreaker = 1
|
||||||
|
fb1.fbReservedCircuitBreaker = 1
|
||||||
|
fb1.tyzReservedCircuitBreaker = 1
|
||||||
|
fb1.reservedCircuitBreaker = 1
|
||||||
|
fb1.dcDcFaultWord1 = 0
|
||||||
|
fb1.dcDcFaultWord2 = 0
|
||||||
|
fb1.powerBusInsulationStatus = 1
|
||||||
|
fb1.aBusInsulationStatus = 1
|
||||||
|
fb1.meterPowerLossSignal = 0
|
||||||
|
fb1.emergencyPowerLossSignal = 0
|
||||||
|
fb1.powerBusVoltage = 220
|
||||||
|
fb1.dcDc5ModuleCurrent = 10
|
||||||
|
fb1.powerBusCurrent = 100
|
||||||
|
fb1.busbarAVoltage = 220
|
||||||
|
fb1.propulsionMotorControlBoxCurrent = 50
|
||||||
|
fb1.busbarACurrent = 100
|
||||||
|
fb1.lithiumBatteryGroupMeterCurrent = 10
|
||||||
|
fb1.bowHighVoltageDistributionBoxCurrent = 20
|
||||||
|
fb1.sternFTDevice45Current = 30
|
||||||
|
fb1.tyzReservedSwitchCurrent = 0
|
||||||
|
fb1.sternRudderSwitch1Current = 10
|
||||||
|
fb1.reservedCurrent1 = 0
|
||||||
|
fb1.sternRudderSwitch2Current = 10
|
||||||
|
fb1.reservedCurrent2 = 0
|
||||||
|
fb1.fbReservedSwitchCurrent = 0
|
||||||
|
fb1.reservedCurrent3 = 0
|
||||||
|
fb1.coolWaterPressure = 100
|
||||||
|
|
||||||
|
fb2 = msg_disHighAVolBusFbMsg()
|
||||||
|
fb2.bowFTDevice123CircuitBreaker = 1
|
||||||
|
fb2.actuatorCircuitBreaker = 1
|
||||||
|
fb2.mastSteeringGearControlBoxCircuitBreaker = 1
|
||||||
|
fb2.xczCircuitBreaker = 1
|
||||||
|
fb2.bowRudderControlBoxCircuitBreaker = 1
|
||||||
|
fb2.openWaterCoverStartCylinderCircuitBreaker = 1
|
||||||
|
fb2.instrumentPowerFailureSignal = 0
|
||||||
|
fb2.emergencyPowerFailureSignal = 0
|
||||||
|
fb2.waterIngressionAlarm = 0
|
||||||
|
fb2.busbarBVoltage = 220
|
||||||
|
fb2.busbarBCurrent = 100
|
||||||
|
fb2.bowFTDevice123Current = 20
|
||||||
|
fb2.actuatorCurrent = 30
|
||||||
|
fb2.mastSteeringGearControlBoxCurrent = 10
|
||||||
|
fb2.xczCurrent = 5
|
||||||
|
fb2.bowRudderControlBoxCurrent = 15
|
||||||
|
fb2.openWaterCoverStartCylinderCurrent = 5
|
||||||
|
|
||||||
|
fb3 = msg_disLowMainBusFbMsg()
|
||||||
|
fb3.lithiumBatteryGroupInstrumentCircuitBreaker = 1
|
||||||
|
fb3.bowLowVoltageDistributionBoxCircuitBreaker = 1
|
||||||
|
fb3.unit4InstrumentDC48VCircuitBreaker = 1
|
||||||
|
fb3.dcC1DCDistributionPanelCircuitBreaker = 1
|
||||||
|
fb3.reservedCircuitBreaker1 = 0
|
||||||
|
fb3.reservedCircuitBreaker2 = 0
|
||||||
|
fb3.emergencyLithiumBatteryGroup2CircuitBreaker = 1
|
||||||
|
fb3.instrumentPowerFailureSignal = 0
|
||||||
|
fb3.emergencyPowerFailureSignal = 0
|
||||||
|
fb3.instrumentBusbarInsulationLow = 0
|
||||||
|
fb3.instrumentBusbarVoltage = 48
|
||||||
|
fb3.bowLowVoltageDistributionBoxCurrent = 10
|
||||||
|
fb3.dcC1InstrumentDC48VCurrent = 5
|
||||||
|
fb3.reservedCurrent1 = 0
|
||||||
|
fb3.emergencyLithiumBatteryGroup2Current = 10
|
||||||
|
fb3.lithiumBatteryGroupInstrumentCurrent = 5
|
||||||
|
fb3.unit4InstrumentDC48VCurrent = 5
|
||||||
|
fb3.reservedCurrent2 = 0
|
||||||
|
fb3.emergency2BusbarVoltage = 48
|
||||||
|
fb3.compositeEnergyManagementSystemEmergencyDC48VCurrent = 5
|
||||||
|
fb3.fuelCellSecuritySystemEmergencyDC48VCurrent = 5
|
||||||
|
fb3.plcControlPowerCurrent = 5
|
||||||
|
|
||||||
|
fb4 = msg_disLowBusFbMsg()
|
||||||
|
fb4.unit1CircuitBreaker = 1
|
||||||
|
fb4.unit2CircuitBreaker = 1
|
||||||
|
fb4.unit3CircuitBreaker = 1
|
||||||
|
fb4.unit5CircuitBreaker = 1
|
||||||
|
fb4.bowPZDeviceCircuitBreaker = 1
|
||||||
|
fb4.reservedCircuitBreaker1 = 0
|
||||||
|
fb4.reservedCircuitBreaker2 = 0
|
||||||
|
fb4.emergencyLithiumBatteryGroup1CircuitBreaker = 1
|
||||||
|
fb4.powerFailureSignal = 0
|
||||||
|
fb4.waterIngressionAlarm = 0
|
||||||
|
fb4.instrumentBusbarVoltage = 48
|
||||||
|
fb4.instrumentBusbarCurrent = 10
|
||||||
|
fb4.unit1Current = 2
|
||||||
|
fb4.unit2Current = 2
|
||||||
|
fb4.unit3Current = 2
|
||||||
|
fb4.unit5Current = 2
|
||||||
|
fb4.bowPZDeviceCurrent = 2
|
||||||
|
fb4.emergencyLithiumBatteryGroup1Current = 10
|
||||||
|
fb4.emergency1BusbarVoltage = 48
|
||||||
|
|
||||||
|
db.insertHighVolBusData(fb1)
|
||||||
|
db.insertHighAVolBusData(fb2)
|
||||||
|
db.insertLowMainBusData(fb3)
|
||||||
|
db.insertLowBusData(fb4)
|
||||||
|
db.insertHighVolBusData(fb1)
|
||||||
|
db.insertHighAVolBusData(fb2)
|
||||||
|
db.insertLowMainBusData(fb3)
|
||||||
|
db.insertLowBusData(fb4)
|
||||||
|
db.insertHighVolBusData(fb1)
|
||||||
|
db.insertHighAVolBusData(fb2)
|
||||||
|
db.insertLowMainBusData(fb3)
|
||||||
|
db.insertLowBusData(fb4)
|
||||||
|
# 测试命令消息存储
|
||||||
|
cmd1 = msg_disHVBCmdMsg()
|
||||||
|
cmd1.fuelCellCircuitBreaker = 1
|
||||||
|
cmd1.powerLithiumBatteryCircuitBreaker = 1
|
||||||
|
cmd1.propulsionMotorCircuitBreaker = 1
|
||||||
|
cmd1.lithiumBatteryGroupInstrumentCircuitBreaker = 1
|
||||||
|
cmd1.dcDc5ModuleCircuitBreaker = 1
|
||||||
|
cmd1.bowHighVoltageDistributionBoxCircuitBreaker = 1
|
||||||
|
cmd1.sternFTDevice45CircuitBreaker = 1
|
||||||
|
cmd1.sternRudderSwitch1CircuitBreaker = 1
|
||||||
|
cmd1.sternRudderSwitch2CircuitBreaker = 1
|
||||||
|
cmd1.fbReservedCircuitBreaker = 0
|
||||||
|
cmd1.tyzReservedCircuitBreaker = 0
|
||||||
|
cmd1.reservedCircuitBreaker = 0
|
||||||
|
cmd1.dcdc5Module = 1
|
||||||
|
cmd1.coolingSystem = 1
|
||||||
|
|
||||||
|
cmd2 = msg_disHVBACmdMsg()
|
||||||
|
cmd2.bowFTDevice123CircuitBreaker = 1
|
||||||
|
cmd2.actuatorCircuitBreaker = 1
|
||||||
|
cmd2.mastSteeringGearControlBoxCircuitBreaker = 1
|
||||||
|
cmd2.xczCircuitBreaker = 1
|
||||||
|
cmd2.bowRudderControlBoxCircuitBreaker = 1
|
||||||
|
cmd2.openWaterCoverStartCylinderCircuitBreaker = 1
|
||||||
|
|
||||||
|
cmd3 = msg_disLVMBCmdMsg()
|
||||||
|
cmd3.lithiumBatteryGroupInstrumentCircuitBreaker = 1
|
||||||
|
cmd3.bowLowVoltageDistributionBoxCircuitBreaker = 1
|
||||||
|
cmd3.unit4InstrumentDC48VCircuitBreaker = 1
|
||||||
|
cmd3.dcC1DCDistributionPanelCircuitBreaker = 1
|
||||||
|
cmd3.reservedCircuitBreaker1 = 0
|
||||||
|
cmd3.reservedCircuitBreaker2 = 0
|
||||||
|
cmd3.emergencyLithiumBatteryGroup2CircuitBreaker = 1
|
||||||
|
|
||||||
|
cmd4 = msg_disLVBCmdMsg()
|
||||||
|
cmd4.unit1CircuitBreaker = 1
|
||||||
|
cmd4.unit2CircuitBreaker = 1
|
||||||
|
cmd4.unit3CircuitBreaker = 1
|
||||||
|
cmd4.unit5CircuitBreaker = 1
|
||||||
|
cmd4.bowPZDeviceCircuitBreaker = 1
|
||||||
|
cmd4.reservedCircuitBreaker1 = 0
|
||||||
|
cmd4.reservedCircuitBreaker2 = 0
|
||||||
|
cmd4.emergencyLithiumBatteryGroup1CircuitBreaker = 1
|
||||||
|
|
||||||
|
db.insertHighVolBusCmd(cmd1)
|
||||||
|
db.insertHighAVolBusCmd(cmd2)
|
||||||
|
db.insertLowMainBusCmd(cmd3)
|
||||||
|
db.insertLowBusCmd(cmd4)
|
||||||
|
|
||||||
|
db.insertHighVolBusCmd(cmd1)
|
||||||
|
db.insertHighAVolBusCmd(cmd2)
|
||||||
|
db.insertLowMainBusCmd(cmd3)
|
||||||
|
db.insertLowBusCmd(cmd4)
|
||||||
|
|
||||||
|
db.insertHighVolBusCmd(cmd1)
|
||||||
|
db.insertHighAVolBusCmd(cmd2)
|
||||||
|
db.insertLowMainBusCmd(cmd3)
|
||||||
|
db.insertLowBusCmd(cmd4)
|
||||||
|
|
||||||
|
print("测试数据已成功插入数据库")
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
from PowerManagerApp import PowerManagerApp
|
||||||
|
from db import DB
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# 创建Tkinter根窗口
|
||||||
|
root = tk.Tk()
|
||||||
|
|
||||||
|
# 创建PowerManagerApp实例
|
||||||
|
app = PowerManagerApp(root)
|
||||||
|
|
||||||
|
# 设置窗口关闭事件处理
|
||||||
|
root.protocol("WM_DELETE_WINDOW", app.on_closing)
|
||||||
|
|
||||||
|
# 启动主循环
|
||||||
|
root.mainloop()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,230 @@
|
|||||||
|
import socket
|
||||||
|
import struct
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
from udpMsg import (
|
||||||
|
msg_disHighVolBusFbMsg,
|
||||||
|
msg_disHighAVolBusFbMsg,
|
||||||
|
msg_disLowMainBusFbMsg,
|
||||||
|
msg_disLowBusFbMsg,
|
||||||
|
msg_disHVBCmdMsg,
|
||||||
|
msg_disHVBACmdMsg,
|
||||||
|
msg_disLVMBCmdMsg,
|
||||||
|
msg_disLVBCmdMsg
|
||||||
|
)
|
||||||
|
|
||||||
|
class PowerManagerSimulator:
|
||||||
|
def __init__(self, host='127.0.0.1', port=5001):
|
||||||
|
self.host = host
|
||||||
|
self.port = port
|
||||||
|
self.running = False
|
||||||
|
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
self.sock.bind((host, port))
|
||||||
|
|
||||||
|
# 初始化消息对象
|
||||||
|
self.high_vol_fb = msg_disHighVolBusFbMsg()
|
||||||
|
self.high_a_vol_fb = msg_disHighAVolBusFbMsg()
|
||||||
|
self.low_main_fb = msg_disLowMainBusFbMsg()
|
||||||
|
self.low_bus_fb = msg_disLowBusFbMsg()
|
||||||
|
|
||||||
|
# 模拟数据初始化
|
||||||
|
self._init_sim_data()
|
||||||
|
|
||||||
|
def _init_sim_data(self):
|
||||||
|
"""初始化模拟数据"""
|
||||||
|
# 高压母线反馈数据 - 测试所有成员
|
||||||
|
self.high_vol_fb.fuelCellCircuitBreaker = 1
|
||||||
|
self.high_vol_fb.powerLithiumBatteryCircuitBreaker = 1
|
||||||
|
self.high_vol_fb.propulsionMotorCircuitBreaker = 1
|
||||||
|
self.high_vol_fb.lithiumBatteryGroupInstrumentCircuitBreaker = 1
|
||||||
|
self.high_vol_fb.dcDc5ModuleCircuitBreaker = 1
|
||||||
|
self.high_vol_fb.bowHighVoltageDistributionBoxCircuitBreaker = 1
|
||||||
|
self.high_vol_fb.sternFTDevice45CircuitBreaker = 1
|
||||||
|
self.high_vol_fb.sternRudderSwitch1CircuitBreaker = 1
|
||||||
|
self.high_vol_fb.sternRudderSwitch2CircuitBreaker = 1
|
||||||
|
self.high_vol_fb.fbReservedCircuitBreaker = 0
|
||||||
|
self.high_vol_fb.tyzReservedCircuitBreaker = 0
|
||||||
|
self.high_vol_fb.reservedCircuitBreaker = 0
|
||||||
|
self.high_vol_fb.dcDcFaultWord1 = 0x55 # 测试故障模式
|
||||||
|
self.high_vol_fb.dcDcFaultWord2 = 0xAA
|
||||||
|
self.high_vol_fb.powerBusInsulationStatus = 1
|
||||||
|
self.high_vol_fb.aBusInsulationStatus = 1
|
||||||
|
self.high_vol_fb.meterPowerLossSignal = 0
|
||||||
|
self.high_vol_fb.emergencyPowerLossSignal = 0
|
||||||
|
self.high_vol_fb.powerBusVoltage = 600 # 正常值
|
||||||
|
self.high_vol_fb.dcDc5ModuleCurrent = 50
|
||||||
|
self.high_vol_fb.powerBusCurrent = 100
|
||||||
|
self.high_vol_fb.busbarAVoltage = 600
|
||||||
|
self.high_vol_fb.propulsionMotorControlBoxCurrent = 80
|
||||||
|
self.high_vol_fb.busbarACurrent = 50
|
||||||
|
self.high_vol_fb.lithiumBatteryGroupMeterCurrent = 30
|
||||||
|
self.high_vol_fb.bowHighVoltageDistributionBoxCurrent = 20
|
||||||
|
self.high_vol_fb.sternFTDevice45Current = 15
|
||||||
|
self.high_vol_fb.tyzReservedSwitchCurrent = 0
|
||||||
|
self.high_vol_fb.sternRudderSwitch1Current = 10
|
||||||
|
self.high_vol_fb.reservedCurrent1 = 0
|
||||||
|
self.high_vol_fb.sternRudderSwitch2Current = 10
|
||||||
|
self.high_vol_fb.reservedCurrent2 = 0
|
||||||
|
self.high_vol_fb.fbReservedSwitchCurrent = 0
|
||||||
|
self.high_vol_fb.reservedCurrent3 = 0
|
||||||
|
self.high_vol_fb.coolWaterPressure = 100
|
||||||
|
|
||||||
|
# 高压A母线反馈数据 - 测试所有成员
|
||||||
|
self.high_a_vol_fb.bowFTDevice123CircuitBreaker = 1
|
||||||
|
self.high_a_vol_fb.actuatorCircuitBreaker = 1
|
||||||
|
self.high_a_vol_fb.mastSteeringGearControlBoxCircuitBreaker = 1
|
||||||
|
self.high_a_vol_fb.xczCircuitBreaker = 1
|
||||||
|
self.high_a_vol_fb.bowRudderControlBoxCircuitBreaker = 1
|
||||||
|
self.high_a_vol_fb.openWaterCoverStartCylinderCircuitBreaker = 0
|
||||||
|
self.high_a_vol_fb.instrumentPowerFailureSignal = 0
|
||||||
|
self.high_a_vol_fb.emergencyPowerFailureSignal = 0
|
||||||
|
self.high_a_vol_fb.waterIngressionAlarm = 0
|
||||||
|
self.high_a_vol_fb.busbarBVoltage = 600
|
||||||
|
self.high_a_vol_fb.busbarBCurrent = 30
|
||||||
|
self.high_a_vol_fb.bowFTDevice123Current = 20
|
||||||
|
self.high_a_vol_fb.actuatorCurrent = 15
|
||||||
|
self.high_a_vol_fb.mastSteeringGearControlBoxCurrent = 10
|
||||||
|
self.high_a_vol_fb.xczCurrent = 5
|
||||||
|
self.high_a_vol_fb.bowRudderControlBoxCurrent = 8
|
||||||
|
self.high_a_vol_fb.openWaterCoverStartCylinderCurrent = 0
|
||||||
|
|
||||||
|
# 仪表主母线反馈数据 - 测试所有成员
|
||||||
|
self.low_main_fb.lithiumBatteryGroupInstrumentCircuitBreaker = 1
|
||||||
|
self.low_main_fb.bowLowVoltageDistributionBoxCircuitBreaker = 1
|
||||||
|
self.low_main_fb.unit4InstrumentDC48VCircuitBreaker = 1
|
||||||
|
self.low_main_fb.dcC1DCDistributionPanelCircuitBreaker = 1
|
||||||
|
self.low_main_fb.reservedCircuitBreaker1 = 0
|
||||||
|
self.low_main_fb.reservedCircuitBreaker2 = 0
|
||||||
|
self.low_main_fb.emergencyLithiumBatteryGroup2CircuitBreaker = 0
|
||||||
|
self.low_main_fb.instrumentPowerFailureSignal = 0
|
||||||
|
self.low_main_fb.emergencyPowerFailureSignal = 0
|
||||||
|
self.low_main_fb.instrumentBusbarInsulationLow = 0
|
||||||
|
self.low_main_fb.instrumentBusbarVoltage = 48
|
||||||
|
self.low_main_fb.bowLowVoltageDistributionBoxCurrent = 10
|
||||||
|
self.low_main_fb.dcC1InstrumentDC48VCurrent = 5
|
||||||
|
self.low_main_fb.reservedCurrent1 = 0
|
||||||
|
self.low_main_fb.emergencyLithiumBatteryGroup2Current = 0
|
||||||
|
self.low_main_fb.lithiumBatteryGroupInstrumentCurrent = 20
|
||||||
|
self.low_main_fb.unit4InstrumentDC48VCurrent = 5
|
||||||
|
self.low_main_fb.reservedCurrent2 = 0
|
||||||
|
self.low_main_fb.emergency2BusbarVoltage = 48
|
||||||
|
self.low_main_fb.compositeEnergyManagementSystemEmergencyDC48VCurrent = 2
|
||||||
|
self.low_main_fb.fuelCellSecuritySystemEmergencyDC48VCurrent = 2
|
||||||
|
self.low_main_fb.plcControlPowerCurrent = 1
|
||||||
|
|
||||||
|
# 仪表汇流排反馈数据 - 测试所有成员
|
||||||
|
self.low_bus_fb.unit1CircuitBreaker = 1
|
||||||
|
self.low_bus_fb.unit2CircuitBreaker = 1
|
||||||
|
self.low_bus_fb.unit3CircuitBreaker = 1
|
||||||
|
self.low_bus_fb.unit5CircuitBreaker = 1
|
||||||
|
self.low_bus_fb.bowPZDeviceCircuitBreaker = 1
|
||||||
|
self.low_bus_fb.reservedCircuitBreaker1 = 0
|
||||||
|
self.low_bus_fb.reservedCircuitBreaker2 = 0
|
||||||
|
self.low_bus_fb.emergencyLithiumBatteryGroup1CircuitBreaker = 0
|
||||||
|
self.low_bus_fb.powerFailureSignal = 0
|
||||||
|
self.low_bus_fb.waterIngressionAlarm = 0
|
||||||
|
self.low_bus_fb.instrumentBusbarVoltage = 48
|
||||||
|
self.low_bus_fb.instrumentBusbarCurrent = 500
|
||||||
|
self.low_bus_fb.unit1Current = 100
|
||||||
|
self.low_bus_fb.unit2Current = 100
|
||||||
|
self.low_bus_fb.unit3Current = 100
|
||||||
|
self.low_bus_fb.unit5Current = 100
|
||||||
|
self.low_bus_fb.bowPZDeviceCurrent = 50
|
||||||
|
self.low_bus_fb.emergencyLithiumBatteryGroup1Current = 0
|
||||||
|
self.low_bus_fb.emergency1BusbarVoltage = 48
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
"""启动模拟器"""
|
||||||
|
self.running = True
|
||||||
|
# 启动发送线程
|
||||||
|
self.send_thread = threading.Thread(target=self._send_loop)
|
||||||
|
self.send_thread.daemon = True
|
||||||
|
self.send_thread.start()
|
||||||
|
|
||||||
|
# 启动接收线程
|
||||||
|
self.recv_thread = threading.Thread(target=self._recv_loop)
|
||||||
|
self.recv_thread.daemon = True
|
||||||
|
self.recv_thread.start()
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
"""停止模拟器"""
|
||||||
|
self.running = False
|
||||||
|
self.sock.close()
|
||||||
|
|
||||||
|
def _send_loop(self):
|
||||||
|
"""周期性发送反馈消息"""
|
||||||
|
while self.running:
|
||||||
|
try:
|
||||||
|
# 发送高压母线反馈
|
||||||
|
data = self.high_vol_fb.pack()
|
||||||
|
self.sock.sendto(data, (self.host, 5000))
|
||||||
|
|
||||||
|
# 发送高压A母线反馈
|
||||||
|
data = self.high_a_vol_fb.pack()
|
||||||
|
self.sock.sendto(data, (self.host, 5000))
|
||||||
|
|
||||||
|
# 发送仪表主母线反馈
|
||||||
|
data = self.low_main_fb.pack()
|
||||||
|
self.sock.sendto(data, (self.host, 5000))
|
||||||
|
|
||||||
|
# 发送仪表汇流排反馈
|
||||||
|
data = self.low_bus_fb.pack()
|
||||||
|
self.sock.sendto(data, (self.host, 5000))
|
||||||
|
|
||||||
|
time.sleep(1) # 每秒发送一次
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"发送消息出错: {e}")
|
||||||
|
break
|
||||||
|
|
||||||
|
def _recv_loop(self):
|
||||||
|
"""接收并处理命令消息"""
|
||||||
|
while self.running:
|
||||||
|
try:
|
||||||
|
data, addr = self.sock.recvfrom(1024)
|
||||||
|
if len(data) < 6: # 最小消息长度检查
|
||||||
|
continue
|
||||||
|
|
||||||
|
msg_id = struct.unpack_from('<H', data, 2)[0]
|
||||||
|
|
||||||
|
# 根据消息ID处理不同类型的命令
|
||||||
|
if msg_id == 0x0001: # 动力母线配电指令
|
||||||
|
cmd = msg_disHVBCmdMsg()
|
||||||
|
if cmd.unpack(data):
|
||||||
|
print("收到动力母线配电指令")
|
||||||
|
# 这里可以添加命令处理逻辑
|
||||||
|
|
||||||
|
elif msg_id == 0x0002: # 动力母线A配电指令
|
||||||
|
cmd = msg_disHVBACmdMsg()
|
||||||
|
if cmd.unpack(data):
|
||||||
|
print("收到动力母线A配电指令")
|
||||||
|
|
||||||
|
elif msg_id == 0x0003: # 仪表主母线配电指令
|
||||||
|
cmd = msg_disLVMBCmdMsg()
|
||||||
|
if cmd.unpack(data):
|
||||||
|
print("收到仪表主母线配电指令")
|
||||||
|
|
||||||
|
elif msg_id == 0x0004: # 仪表汇流排配电指令
|
||||||
|
cmd = msg_disLVBCmdMsg()
|
||||||
|
if cmd.unpack(data):
|
||||||
|
print("收到仪表汇流排配电指令")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"接收消息出错: {e}")
|
||||||
|
break
|
||||||
|
|
||||||
|
def update_sim_data(self):
|
||||||
|
"""更新模拟数据,可以扩展实现更复杂的模拟逻辑"""
|
||||||
|
# 这里可以添加数据变化的逻辑
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
simulator = PowerManagerSimulator()
|
||||||
|
try:
|
||||||
|
simulator.start()
|
||||||
|
print("PowerManager模拟器已启动,按Ctrl+C停止...")
|
||||||
|
while True:
|
||||||
|
time.sleep(1)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
simulator.stop()
|
||||||
|
print("PowerManager模拟器已停止")
|
||||||
@@ -0,0 +1,768 @@
|
|||||||
|
|
||||||
|
import struct
|
||||||
|
# 高压母线配电反馈
|
||||||
|
class msg_disHighVolBusFbMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0005
|
||||||
|
self.length = 38 # disHighVolBusState结构体大小
|
||||||
|
self.checkCode = 0x00
|
||||||
|
|
||||||
|
# disHighVolBusState成员
|
||||||
|
self.fuelCellCircuitBreaker = 0x00
|
||||||
|
self.powerLithiumBatteryCircuitBreaker = 0x00
|
||||||
|
self.propulsionMotorCircuitBreaker = 0x00
|
||||||
|
self.lithiumBatteryGroupInstrumentCircuitBreaker = 0x00
|
||||||
|
self.dcDc5ModuleCircuitBreaker = 0x00
|
||||||
|
self.bowHighVoltageDistributionBoxCircuitBreaker = 0x00
|
||||||
|
self.sternFTDevice45CircuitBreaker = 0x00
|
||||||
|
self.sternRudderSwitch1CircuitBreaker = 0x00
|
||||||
|
self.sternRudderSwitch2CircuitBreaker = 0x00
|
||||||
|
self.fbReservedCircuitBreaker = 0x00
|
||||||
|
self.tyzReservedCircuitBreaker = 0x00
|
||||||
|
self.reservedCircuitBreaker = 0x00
|
||||||
|
self.dcDcFaultWord1 = 0x00
|
||||||
|
self.dcDcFaultWord2 = 0x00
|
||||||
|
self.powerBusInsulationStatus = 0x00
|
||||||
|
self.aBusInsulationStatus = 0x00
|
||||||
|
self.meterPowerLossSignal = 0x00
|
||||||
|
self.emergencyPowerLossSignal = 0x00
|
||||||
|
self.powerBusVoltage = 0
|
||||||
|
self.dcDc5ModuleCurrent = 0
|
||||||
|
self.powerBusCurrent = 0
|
||||||
|
self.busbarAVoltage = 0
|
||||||
|
self.propulsionMotorControlBoxCurrent = 0
|
||||||
|
self.busbarACurrent = 0
|
||||||
|
self.lithiumBatteryGroupMeterCurrent = 0
|
||||||
|
self.bowHighVoltageDistributionBoxCurrent = 0
|
||||||
|
self.sternFTDevice45Current = 0
|
||||||
|
self.tyzReservedSwitchCurrent = 0
|
||||||
|
self.sternRudderSwitch1Current = 0
|
||||||
|
self.reservedCurrent1 = 0
|
||||||
|
self.sternRudderSwitch2Current = 0
|
||||||
|
self.reservedCurrent2 = 0
|
||||||
|
self.fbReservedSwitchCurrent = 0
|
||||||
|
self.reservedCurrent3 = 0
|
||||||
|
self.coolWaterPressure = 0
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
self.checkCode = 0x00
|
||||||
|
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.fuelCellCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.powerLithiumBatteryCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.propulsionMotorCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.lithiumBatteryGroupInstrumentCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.dcDc5ModuleCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.bowHighVoltageDistributionBoxCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.sternFTDevice45CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.sternRudderSwitch1CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.sternRudderSwitch2CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.fbReservedCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.tyzReservedCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.reservedCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.dcDcFaultWord1)
|
||||||
|
data += struct.pack('<B', self.dcDcFaultWord2)
|
||||||
|
data += struct.pack('<B', self.powerBusInsulationStatus)
|
||||||
|
data += struct.pack('<B', self.aBusInsulationStatus)
|
||||||
|
data += struct.pack('<B', self.meterPowerLossSignal)
|
||||||
|
data += struct.pack('<B', self.emergencyPowerLossSignal)
|
||||||
|
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)
|
||||||
|
data += struct.pack('<H', self.coolWaterPressure)
|
||||||
|
|
||||||
|
# 计算校验码
|
||||||
|
for byte in data:
|
||||||
|
self.checkCode = (self.checkCode + byte) & 0xFF
|
||||||
|
data += struct.pack('<B', self.checkCode)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def unpack(self, data):
|
||||||
|
if len(data) < 4 + self.length + 1:
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.start1 = data[0]
|
||||||
|
self.start2 = data[1]
|
||||||
|
self.id = struct.unpack_from('<H', data, 2)[0]
|
||||||
|
self.length = struct.unpack_from('<H', data, 4)[0]
|
||||||
|
|
||||||
|
offset = 6
|
||||||
|
self.fuelCellCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.powerLithiumBatteryCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.propulsionMotorCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.lithiumBatteryGroupInstrumentCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.dcDc5ModuleCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.bowHighVoltageDistributionBoxCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.sternFTDevice45CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.sternRudderSwitch1CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.sternRudderSwitch2CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.fbReservedCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.tyzReservedCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.dcDcFaultWord1 = data[offset]; offset +=1
|
||||||
|
self.dcDcFaultWord2 = data[offset]; offset +=1
|
||||||
|
self.powerBusInsulationStatus = data[offset]; offset +=1
|
||||||
|
self.aBusInsulationStatus = data[offset]; offset +=1
|
||||||
|
self.meterPowerLossSignal = data[offset]; offset +=1
|
||||||
|
self.emergencyPowerLossSignal = data[offset]; offset +=1
|
||||||
|
|
||||||
|
self.powerBusVoltage = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.dcDc5ModuleCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.powerBusCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.busbarAVoltage = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.propulsionMotorControlBoxCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.busbarACurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.lithiumBatteryGroupMeterCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.bowHighVoltageDistributionBoxCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.sternFTDevice45Current = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.tyzReservedSwitchCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.sternRudderSwitch1Current = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.reservedCurrent1 = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.sternRudderSwitch2Current = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.reservedCurrent2 = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.fbReservedSwitchCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.reservedCurrent3 = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.coolWaterPressure = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
|
||||||
|
# 校验校验码
|
||||||
|
checkCode = 0
|
||||||
|
for byte in data[:-1]: # 不包括校验码本身
|
||||||
|
checkCode = (checkCode + byte) & 0xFF
|
||||||
|
|
||||||
|
return checkCode == data[-1]
|
||||||
|
# 高压母线A配电反馈
|
||||||
|
class msg_disHighAVolBusFbMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0006
|
||||||
|
self.length = 18 # disHighAVolBusState结构体大小
|
||||||
|
self.checkCode = 0x00
|
||||||
|
|
||||||
|
# disHighAVolBusState成员
|
||||||
|
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 = 0
|
||||||
|
self.busbarBCurrent = 0
|
||||||
|
self.bowFTDevice123Current = 0
|
||||||
|
self.actuatorCurrent = 0
|
||||||
|
self.mastSteeringGearControlBoxCurrent = 0
|
||||||
|
self.xczCurrent = 0
|
||||||
|
self.bowRudderControlBoxCurrent = 0
|
||||||
|
self.openWaterCoverStartCylinderCurrent = 0
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
self.checkCode = 0x00
|
||||||
|
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 byte in data:
|
||||||
|
self.checkCode = (self.checkCode + byte) & 0xFF
|
||||||
|
data += struct.pack('<B', self.checkCode)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def unpack(self, data):
|
||||||
|
if len(data) < 4 + self.length + 1: # 头部4字节+数据长度+校验码1字节
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.start1 = data[0]
|
||||||
|
self.start2 = data[1]
|
||||||
|
self.id = struct.unpack_from('<H', data, 2)[0]
|
||||||
|
self.length = struct.unpack_from('<H', data, 4)[0]
|
||||||
|
|
||||||
|
offset = 6 # 头部结束位置
|
||||||
|
self.bowFTDevice123CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.actuatorCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.mastSteeringGearControlBoxCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.xczCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.bowRudderControlBoxCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.openWaterCoverStartCylinderCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.instrumentPowerFailureSignal = data[offset]; offset +=1
|
||||||
|
self.emergencyPowerFailureSignal = data[offset]; offset +=1
|
||||||
|
self.waterIngressionAlarm = data[offset]; offset +=1
|
||||||
|
self.busbarBVoltage = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.busbarBCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.bowFTDevice123Current = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.actuatorCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.mastSteeringGearControlBoxCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.xczCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.bowRudderControlBoxCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.openWaterCoverStartCylinderCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
|
||||||
|
# 校验校验码
|
||||||
|
checkCode = 0
|
||||||
|
for byte in data[:-1]: # 不包括校验码本身
|
||||||
|
checkCode = (checkCode + byte) & 0xFF
|
||||||
|
|
||||||
|
return checkCode == data[-1]
|
||||||
|
|
||||||
|
# 仪表母线配电反馈
|
||||||
|
class msg_disLowMainBusFbMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0007
|
||||||
|
self.length = 36 # disLowMainBusState结构体大小
|
||||||
|
self.checkCode = 0x00
|
||||||
|
|
||||||
|
# disLowMainBusState成员
|
||||||
|
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 = 0
|
||||||
|
self.bowLowVoltageDistributionBoxCurrent = 0
|
||||||
|
self.dcC1InstrumentDC48VCurrent = 0
|
||||||
|
self.reservedCurrent1 = 0
|
||||||
|
self.emergencyLithiumBatteryGroup2Current = 0
|
||||||
|
self.lithiumBatteryGroupInstrumentCurrent = 0
|
||||||
|
self.unit4InstrumentDC48VCurrent = 0
|
||||||
|
self.reservedCurrent2 = 0
|
||||||
|
self.emergency2BusbarVoltage = 0
|
||||||
|
self.compositeEnergyManagementSystemEmergencyDC48VCurrent = 0
|
||||||
|
self.fuelCellSecuritySystemEmergencyDC48VCurrent = 0
|
||||||
|
self.plcControlPowerCurrent = 0
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
self.checkCode = 0x00
|
||||||
|
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 byte in data:
|
||||||
|
self.checkCode = (self.checkCode + byte) & 0xFF
|
||||||
|
data += struct.pack('<B', self.checkCode)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def unpack(self, data):
|
||||||
|
if len(data) < 4 + self.length + 1: # 头部4字节+数据长度+校验码1字节
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.start1 = data[0]
|
||||||
|
self.start2 = data[1]
|
||||||
|
self.id = struct.unpack_from('<H', data, 2)[0]
|
||||||
|
self.length = struct.unpack_from('<H', data, 4)[0]
|
||||||
|
|
||||||
|
offset = 6 # 头部结束位置
|
||||||
|
self.lithiumBatteryGroupInstrumentCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.bowLowVoltageDistributionBoxCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.unit4InstrumentDC48VCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.dcC1DCDistributionPanelCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker1 = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker2 = data[offset]; offset +=1
|
||||||
|
self.emergencyLithiumBatteryGroup2CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.instrumentPowerFailureSignal = data[offset]; offset +=1
|
||||||
|
self.emergencyPowerFailureSignal = data[offset]; offset +=1
|
||||||
|
self.instrumentBusbarInsulationLow = data[offset]; offset +=1
|
||||||
|
self.instrumentBusbarVoltage = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.bowLowVoltageDistributionBoxCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.dcC1InstrumentDC48VCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.reservedCurrent1 = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.emergencyLithiumBatteryGroup2Current = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.lithiumBatteryGroupInstrumentCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.unit4InstrumentDC48VCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.reservedCurrent2 = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.emergency2BusbarVoltage = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.compositeEnergyManagementSystemEmergencyDC48VCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.fuelCellSecuritySystemEmergencyDC48VCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.plcControlPowerCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
|
||||||
|
# 校验校验码
|
||||||
|
checkCode = 0
|
||||||
|
for byte in data[:-1]: # 不包括校验码本身
|
||||||
|
checkCode = (checkCode + byte) & 0xFF
|
||||||
|
|
||||||
|
return checkCode == data[-1]
|
||||||
|
|
||||||
|
# 仪表汇流排配电反馈
|
||||||
|
class msg_disLowBusFbMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0008
|
||||||
|
self.length = 24 # disLowBusState结构体大小
|
||||||
|
self.checkCode = 0x00
|
||||||
|
|
||||||
|
# disLowBusState成员
|
||||||
|
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 = 0
|
||||||
|
self.instrumentBusbarCurrent = 0
|
||||||
|
self.unit1Current = 0
|
||||||
|
self.unit2Current = 0
|
||||||
|
self.unit3Current = 0
|
||||||
|
self.unit5Current = 0
|
||||||
|
self.bowPZDeviceCurrent = 0
|
||||||
|
self.emergencyLithiumBatteryGroup1Current = 0
|
||||||
|
self.emergency1BusbarVoltage = 0
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
self.checkCode = 0x00
|
||||||
|
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 byte in data:
|
||||||
|
self.checkCode = (self.checkCode + byte) & 0xFF
|
||||||
|
data += struct.pack('<B', self.checkCode)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def unpack(self, data):
|
||||||
|
if len(data) < 4 + self.length + 1: # 头部4字节+数据长度+校验码1字节
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.start1 = data[0]
|
||||||
|
self.start2 = data[1]
|
||||||
|
self.id = struct.unpack_from('<H', data, 2)[0]
|
||||||
|
self.length = struct.unpack_from('<H', data, 4)[0]
|
||||||
|
|
||||||
|
offset = 6 # 头部结束位置
|
||||||
|
self.unit1CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.unit2CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.unit3CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.unit5CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.bowPZDeviceCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker1 = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker2 = data[offset]; offset +=1
|
||||||
|
self.emergencyLithiumBatteryGroup1CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.powerFailureSignal = data[offset]; offset +=1
|
||||||
|
self.waterIngressionAlarm = data[offset]; offset +=1
|
||||||
|
self.instrumentBusbarVoltage = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.instrumentBusbarCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.unit1Current = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.unit2Current = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.unit3Current = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.unit5Current = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.bowPZDeviceCurrent = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.emergencyLithiumBatteryGroup1Current = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
self.emergency1BusbarVoltage = struct.unpack_from('<H', data, offset)[0]; offset +=2
|
||||||
|
|
||||||
|
# 校验校验码
|
||||||
|
checkCode = 0
|
||||||
|
for byte in data[:-1]: # 不包括校验码本身
|
||||||
|
checkCode = (checkCode + byte) & 0xFF
|
||||||
|
|
||||||
|
return checkCode == data[-1]
|
||||||
|
|
||||||
|
# 动力母线配电指令
|
||||||
|
class msg_disHVBCmdMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0001
|
||||||
|
self.length = 18 # disHighVolBusCmd结构体大小
|
||||||
|
self.checkCode = 0x00
|
||||||
|
|
||||||
|
# disHighVolBusCmd成员
|
||||||
|
self.fuelCellCircuitBreaker = 0x00
|
||||||
|
self.powerLithiumBatteryCircuitBreaker = 0x00
|
||||||
|
self.propulsionMotorCircuitBreaker = 0x00
|
||||||
|
self.lithiumBatteryGroupInstrumentCircuitBreaker = 0x00
|
||||||
|
self.dcDc5ModuleCircuitBreaker = 0x00
|
||||||
|
self.bowHighVoltageDistributionBoxCircuitBreaker = 0x00
|
||||||
|
self.sternFTDevice45CircuitBreaker = 0x00
|
||||||
|
self.sternRudderSwitch1CircuitBreaker = 0x00
|
||||||
|
self.sternRudderSwitch2CircuitBreaker = 0x00
|
||||||
|
self.fbReservedCircuitBreaker = 0x00
|
||||||
|
self.tyzReservedCircuitBreaker = 0x00
|
||||||
|
self.reservedCircuitBreaker = 0x00
|
||||||
|
self.dcdc5Module = 0x00
|
||||||
|
self.coolingSystem = 0x00
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
self.checkCode = 0x00
|
||||||
|
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.fuelCellCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.powerLithiumBatteryCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.propulsionMotorCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.lithiumBatteryGroupInstrumentCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.dcDc5ModuleCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.bowHighVoltageDistributionBoxCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.sternFTDevice45CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.sternRudderSwitch1CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.sternRudderSwitch2CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.fbReservedCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.tyzReservedCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.reservedCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.dcdc5Module)
|
||||||
|
data += struct.pack('<B', self.coolingSystem)
|
||||||
|
|
||||||
|
# 计算校验码
|
||||||
|
for byte in data:
|
||||||
|
self.checkCode = (self.checkCode + byte) & 0xFF
|
||||||
|
data += struct.pack('<B', self.checkCode)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def unpack(self, data):
|
||||||
|
if len(data) < 4 + self.length + 1: # 头部4字节+数据长度+校验码1字节
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.start1 = data[0]
|
||||||
|
self.start2 = data[1]
|
||||||
|
self.id = struct.unpack_from('<H', data, 2)[0]
|
||||||
|
self.length = struct.unpack_from('<H', data, 4)[0]
|
||||||
|
|
||||||
|
offset = 6 # 头部结束位置
|
||||||
|
self.fuelCellCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.powerLithiumBatteryCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.propulsionMotorCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.lithiumBatteryGroupInstrumentCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.dcDc5ModuleCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.bowHighVoltageDistributionBoxCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.sternFTDevice45CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.sternRudderSwitch1CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.sternRudderSwitch2CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.fbReservedCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.tyzReservedCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.dcdc5Module = data[offset]; offset +=1
|
||||||
|
self.coolingSystem = data[offset]; offset +=1
|
||||||
|
|
||||||
|
# 校验校验码
|
||||||
|
checkCode = 0
|
||||||
|
for byte in data[:-1]: # 不包括校验码本身
|
||||||
|
checkCode = (checkCode + byte) & 0xFF
|
||||||
|
|
||||||
|
return checkCode == data[-1]
|
||||||
|
|
||||||
|
# 动力汇流排A配电指令
|
||||||
|
class msg_disHVBACmdMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0002
|
||||||
|
self.length = 18 # disHighVolBusCmd结构体大小
|
||||||
|
self.checkCode = 0x00
|
||||||
|
|
||||||
|
# disHighVolBusCmd成员
|
||||||
|
self.fuelCellCircuitBreaker = 0x00
|
||||||
|
self.powerLithiumBatteryCircuitBreaker = 0x00
|
||||||
|
self.propulsionMotorCircuitBreaker = 0x00
|
||||||
|
self.lithiumBatteryGroupInstrumentCircuitBreaker = 0x00
|
||||||
|
self.dcDc5ModuleCircuitBreaker = 0x00
|
||||||
|
self.bowHighVoltageDistributionBoxCircuitBreaker = 0x00
|
||||||
|
self.sternFTDevice45CircuitBreaker = 0x00
|
||||||
|
self.sternRudderSwitch1CircuitBreaker = 0x00
|
||||||
|
self.sternRudderSwitch2CircuitBreaker = 0x00
|
||||||
|
self.fbReservedCircuitBreaker = 0x00
|
||||||
|
self.tyzReservedCircuitBreaker = 0x00
|
||||||
|
self.reservedCircuitBreaker = 0x00
|
||||||
|
self.dcdc5Module = 0x00
|
||||||
|
self.coolingSystem = 0x00
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
self.checkCode = 0x00
|
||||||
|
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.fuelCellCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.powerLithiumBatteryCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.propulsionMotorCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.lithiumBatteryGroupInstrumentCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.dcDc5ModuleCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.bowHighVoltageDistributionBoxCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.sternFTDevice45CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.sternRudderSwitch1CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.sternRudderSwitch2CircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.fbReservedCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.tyzReservedCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.reservedCircuitBreaker)
|
||||||
|
data += struct.pack('<B', self.dcdc5Module)
|
||||||
|
data += struct.pack('<B', self.coolingSystem)
|
||||||
|
|
||||||
|
# 计算校验码
|
||||||
|
for byte in data:
|
||||||
|
self.checkCode = (self.checkCode + byte) & 0xFF
|
||||||
|
data += struct.pack('<B', self.checkCode)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def unpack(self, data):
|
||||||
|
if len(data) < 4 + self.length + 1: # 头部4字节+数据长度+校验码1字节
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.start1 = data[0]
|
||||||
|
self.start2 = data[1]
|
||||||
|
self.id = struct.unpack_from('<H', data, 2)[0]
|
||||||
|
self.length = struct.unpack_from('<H', data, 4)[0]
|
||||||
|
|
||||||
|
offset = 6 # 头部结束位置
|
||||||
|
self.fuelCellCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.powerLithiumBatteryCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.propulsionMotorCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.lithiumBatteryGroupInstrumentCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.dcDc5ModuleCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.bowHighVoltageDistributionBoxCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.sternFTDevice45CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.sternRudderSwitch1CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.sternRudderSwitch2CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.fbReservedCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.tyzReservedCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.dcdc5Module = data[offset]; offset +=1
|
||||||
|
self.coolingSystem = data[offset]; offset +=1
|
||||||
|
|
||||||
|
# 校验校验码
|
||||||
|
checkCode = 0
|
||||||
|
for byte in data[:-1]: # 不包括校验码本身
|
||||||
|
checkCode = (checkCode + byte) & 0xFF
|
||||||
|
|
||||||
|
return checkCode == data[-1]
|
||||||
|
# 仪表母线配电指令
|
||||||
|
class msg_disLVMBCmdMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0003
|
||||||
|
self.length = 8 # disLowMainBusCmd结构体大小
|
||||||
|
self.checkCode = 0x00
|
||||||
|
|
||||||
|
# disLowMainBusCmd成员
|
||||||
|
self.lithiumBatteryGroupInstrumentCircuitBreaker = 0x00
|
||||||
|
self.bowLowVoltageDistributionBoxCircuitBreaker = 0x00
|
||||||
|
self.unit4InstrumentDC48VCircuitBreaker = 0x00
|
||||||
|
self.dcC1DCDistributionPanelCircuitBreaker = 0x00
|
||||||
|
self.reservedCircuitBreaker1 = 0x00
|
||||||
|
self.reservedCircuitBreaker2 = 0x00
|
||||||
|
self.emergencyLithiumBatteryGroup2CircuitBreaker = 0x00
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
self.checkCode = 0x00
|
||||||
|
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)
|
||||||
|
|
||||||
|
# 计算校验码
|
||||||
|
for byte in data:
|
||||||
|
self.checkCode = (self.checkCode + byte) & 0xFF
|
||||||
|
data += struct.pack('<B', self.checkCode)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def unpack(self, data):
|
||||||
|
if len(data) < 4 + self.length + 1: # 头部4字节+数据长度+校验码1字节
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.start1 = data[0]
|
||||||
|
self.start2 = data[1]
|
||||||
|
self.id = struct.unpack_from('<H', data, 2)[0]
|
||||||
|
self.length = struct.unpack_from('<H', data, 4)[0]
|
||||||
|
|
||||||
|
offset = 6 # 头部结束位置
|
||||||
|
self.lithiumBatteryGroupInstrumentCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.bowLowVoltageDistributionBoxCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.unit4InstrumentDC48VCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.dcC1DCDistributionPanelCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker1 = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker2 = data[offset]; offset +=1
|
||||||
|
self.emergencyLithiumBatteryGroup2CircuitBreaker = data[offset]; offset +=1
|
||||||
|
|
||||||
|
# 校验校验码
|
||||||
|
checkCode = 0
|
||||||
|
for byte in data[:-1]: # 不包括校验码本身
|
||||||
|
checkCode = (checkCode + byte) & 0xFF
|
||||||
|
|
||||||
|
return checkCode == data[-1]
|
||||||
|
|
||||||
|
# 仪表汇流排配电指令
|
||||||
|
class msg_disLVBCmdMsg:
|
||||||
|
def __init__(self):
|
||||||
|
self.start1 = 0x20
|
||||||
|
self.start2 = 0x20
|
||||||
|
self.id = 0x0004
|
||||||
|
self.length = 8 # disLowBusCmd结构体大小
|
||||||
|
self.checkCode = 0x00
|
||||||
|
|
||||||
|
# disLowBusCmd成员
|
||||||
|
self.unit1CircuitBreaker = 0x00
|
||||||
|
self.unit2CircuitBreaker = 0x00
|
||||||
|
self.unit3CircuitBreaker = 0x00
|
||||||
|
self.unit5CircuitBreaker = 0x00
|
||||||
|
self.bowPZDeviceCircuitBreaker = 0x00
|
||||||
|
self.reservedCircuitBreaker1 = 0x00
|
||||||
|
self.reservedCircuitBreaker2 = 0x00
|
||||||
|
self.emergencyLithiumBatteryGroup1CircuitBreaker = 0x00
|
||||||
|
|
||||||
|
def pack(self):
|
||||||
|
self.checkCode = 0x00
|
||||||
|
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)
|
||||||
|
|
||||||
|
# 计算校验码
|
||||||
|
for byte in data:
|
||||||
|
self.checkCode = (self.checkCode + byte) & 0xFF
|
||||||
|
data += struct.pack('<B', self.checkCode)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def unpack(self, data):
|
||||||
|
if len(data) < 4 + self.length + 1: # 头部4字节+数据长度+校验码1字节
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.start1 = data[0]
|
||||||
|
self.start2 = data[1]
|
||||||
|
self.id = struct.unpack_from('<H', data, 2)[0]
|
||||||
|
self.length = struct.unpack_from('<H', data, 4)[0]
|
||||||
|
|
||||||
|
offset = 6 # 头部结束位置
|
||||||
|
self.unit1CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.unit2CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.unit3CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.unit5CircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.bowPZDeviceCircuitBreaker = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker1 = data[offset]; offset +=1
|
||||||
|
self.reservedCircuitBreaker2 = data[offset]; offset +=1
|
||||||
|
self.emergencyLithiumBatteryGroup1CircuitBreaker = data[offset]; offset +=1
|
||||||
|
|
||||||
|
# 校验校验码
|
||||||
|
checkCode = 0
|
||||||
|
for byte in data[:-1]: # 不包括校验码本身
|
||||||
|
checkCode = (checkCode + byte) & 0xFF
|
||||||
|
|
||||||
|
return checkCode == data[-1]
|
||||||
@@ -530,14 +530,6 @@ class msg_disHVBCmd:
|
|||||||
self.checkCode = unpacked_data[19]
|
self.checkCode = unpacked_data[19]
|
||||||
except struct.error as e:
|
except struct.error as e:
|
||||||
print(f"Error unpacking data: msg_disHVBCmd {e}")
|
print(f"Error unpacking data: msg_disHVBCmd {e}")
|
||||||
|
|
||||||
|
|
||||||
# unsigned char bowFTDevice123CircuitBreaker;
|
|
||||||
# unsigned char actuatorCircuitBreaker;
|
|
||||||
# unsigned char mastSteeringGearControlBoxCircuitBreaker;
|
|
||||||
# unsigned char xczCircuitBreaker;
|
|
||||||
# unsigned char bowRudderControlBoxCircuitBreaker;
|
|
||||||
# unsigned char openWaterCoverStartCylinderCircuitBreaker;
|
|
||||||
class msg_disHVBACmd:
|
class msg_disHVBACmd:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.start1 = None
|
self.start1 = None
|
||||||
@@ -567,13 +559,6 @@ class msg_disHVBACmd:
|
|||||||
self.checkCode = unpacked_data[10]
|
self.checkCode = unpacked_data[10]
|
||||||
except struct.error as e:
|
except struct.error as e:
|
||||||
print(f"Error unpacking data: msg_disHVBACmd {e}")
|
print(f"Error unpacking data: msg_disHVBACmd {e}")
|
||||||
# unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
|
|
||||||
# unsigned char bowLowVoltageDistributionBoxCircuitBreaker;
|
|
||||||
# unsigned char unit4InstrumentDC48VCircuitBreaker;
|
|
||||||
# unsigned char dcC1DCDistributionPanelCircuitBreaker;
|
|
||||||
# unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
|
||||||
# unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
|
||||||
# unsigned char emergencyLithiumBatteryGroup2CircuitBreaker;
|
|
||||||
class msg_disHVBBCmd:
|
class msg_disHVBBCmd:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.start1 = None
|
self.start1 = None
|
||||||
@@ -606,16 +591,6 @@ class msg_disHVBBCmd:
|
|||||||
except struct.error as e:
|
except struct.error as e:
|
||||||
print(f"Error unpacking data: msg_disHVBBCmd {e}")
|
print(f"Error unpacking data: msg_disHVBBCmd {e}")
|
||||||
|
|
||||||
|
|
||||||
# unsigned char unit1CircuitBreaker;
|
|
||||||
# unsigned char unit2CircuitBreaker;
|
|
||||||
# unsigned char unit3CircuitBreaker;
|
|
||||||
# unsigned char unit5CircuitBreaker;
|
|
||||||
# unsigned char bowPZDeviceCircuitBreaker;
|
|
||||||
# unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
|
|
||||||
# unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
|
|
||||||
# unsigned char emergencyLithiumBatteryGroup1CircuitBreaker;
|
|
||||||
|
|
||||||
class msg_disLVBCmd:
|
class msg_disLVBCmd:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.start1 = None
|
self.start1 = None
|
||||||
|
|||||||
Reference in New Issue
Block a user