Files
H100PowerManger/test/disSysTest/db.py
T

648 lines
29 KiB
Python

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 (datetime('now', 'localtime')),
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,
dcdcTemperature 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 (datetime('now', 'localtime')),
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 (datetime('now', 'localtime')),
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 (datetime('now', 'localtime')),
unit1CircuitBreaker INTEGER,
unit2CircuitBreaker INTEGER,
unit3CircuitBreaker INTEGER,
unit5CircuitBreaker INTEGER,
bowPZDeviceCircuitBreaker INTEGER,
reservedCircuitBreaker1 INTEGER,
reservedCircuitBreaker2 INTEGER,
emergencyLithiumBatteryGroup1CircuitBreaker INTEGER,
instrumentPowerFailureSignal INTEGER,
emergencyPowerFailureSignal 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 (datetime('now', 'localtime')),
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 (datetime('now', 'localtime')),
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 (datetime('now', 'localtime')),
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 (datetime('now', 'localtime')),
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):
'''内部方法:执行实际的数据库插入操作'''
with self.lock:
try:
# 检查并建立连接
if not self.conn:
self.connect()
if not self.conn:
print('-----------------connection failed')
return False
# 创建cursor
try:
cursor = self.conn.cursor()
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,
'dcdcTemperature': data.dcdcTemperature,
'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,
'instrumentPowerFailureSignal': data.instrumentPowerFailureSignal,
'emergencyPowerFailureSignal': data.emergencyPowerFailureSignal,
'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.instrumentPowerFailureSignal = 0
fb4.emergencyPowerFailureSignal = 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("测试数据已成功插入数据库")