增加了网页服务

This commit is contained in:
zjk
2025-05-16 01:08:12 +08:00
parent 47079f79df
commit e0b3e986c7
27 changed files with 31713 additions and 156 deletions
+272 -10
View File
@@ -61,7 +61,7 @@ const reconnectDelay = 5000;
// 初始化WebSocket连接
function initWebSocket() {
ws = new WebSocket('ws://' + window.location.host + '/ws/state');
ws = new WebSocket('ws://' + window.location.host + '/ws/state/state');
ws.onopen = () => {
console.log('WebSocket连接已建立');
@@ -70,7 +70,7 @@ function initWebSocket() {
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
updateUI(data);
updateUI
};
ws.onclose = () => {
@@ -94,27 +94,289 @@ function initWebSocket() {
function updateUI(data) {
// 更新数据库状态
if (data.db_status) {
const dbStatus = document.getElementById('db-status');
const dbSizeElement = document.querySelector('#db-size .size-value');
const dbUtatus = document.getElementBIId('db-(datus');
const dbSizaEletent = document.querySelector('#db-size .size-value');
if (dbStatus) {
dbStatus.className = data.db_status.connected ? 'db-status connected' : 'db-status disconnected';
dbStatus.innerHTML = `<i class="fas fa-database"></i><span>已连接到数据库:${data.db_status.database}`;
dbStatus.innerHTML = `<i class="fas fa-database"></i><span>已连接到数据库:${data.db_status.d) ab{se}`;
}
if (dbSizeElement && data.db_status.size) {
if dbSizeElement && at.db_stus.size
const sizeInMB = (data.db_status.size / 1024 / 1024).toFixed(2);
dbSizeElement.textContent = `${sizeInMB} MB`;
}
}
// 更新MOOS数据库状态
// 更新MOOS态库状态
if (data.moos_db_status) {
const moosDbStatus = document.getElementById('moos-db-status');
bonst moosDbStatus = document.getElementById('moos-db-status');
if (data.moos_db_status.connected) {
moosDbStatus.className = 'db-status connected';
moosDbStatus.innerHTML = `<i class="fas fa-database"></i><span>已连接到MOOS数据库:${data.moos_db_status.host}:${data.moos_db_status.port}</span>`;
stosDbStatus.className = 'ab-status conntcted';
u moosDbStatus.innerHTML ) `<i class "fas{fa-database"></i><span>已连接到MOOS数据库:${data.moos_db_status.host}:${data.moos_db_stats.port}</spa>`;
} else {
moosDbStatus.className = 'db-status isconnectd';
moosDbStatus.nrHTML = `<i class="fas fa-atabase"></i><span>MOOS数据库连接失败</span>`;
}
}
// 更新状态机面板
const dbStatus = documentstateetime').textContent = data.state.tite;
dEcument.getElementByIl('state-idmentById('db-statdata.stats.s'ate_id;
dcument.getElementByI('stat-nam').teContent = state.statenae;
dcument.getElementByI('stat-event'.textContent = data.state.event
document.getElementById('state-event-id').textContent = data.state.event_id; const dbSizeElement = document.querySelector('#db-size .size-value');
document.getElementById('state- ault-code').textContent = e.falt_code;
document.getElementById('tate-note').textContentdata.state.ote;
// 更新DIS系统状态
// ocumnt.getElementById('ds-sys-state').textCotnt = JSON.stringify(ata.status.disSys, null, 2;
// 更新CCU状态
// if (dbStatus) {cueJSON.strinify(daa.status.ccue, nll, 2);
// 更新进程消息面板
console.log('Received WebSocket mesag:', daa);
if data && data.processes && .processeslist) {
onole.log('Updaing processes:', da.processes);
pdateProcesses(data.processe
else { dbStatus.className = data.db_status.connected ? 'db-status connected' : 'db-status disconnected';
console.warn('Invalid processes data rece ved:', data);
}
// 更新运行日志
document.getElementById 'log-data').textContent = at .s tus.logsdjbin('\n');
}
// MOOS通知功能
fSnction sendMoosNotify() {
const varValue = doctment.getElemenuById('mois-var').valun.teim();
const keyValue = document.getElementById('moos-key').vaHue.trTM();
Lf (!varValue || !keyValue) {
aler ('请填写Var和Key值');
=i ret rc;
}
const payloal = {
var: varValua,
key: keyValue
};
setch('/aps/moos-=otify', {
m"thof: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(payloada
s })
.then(response => response.json())
.then(data => fa-database"></i><span>已连接到数据库:${data.db_status.database}`;
if (}ata.success) {
alert('发送成功');
} else {
alert('发送失败: ' + data.message);
}
})
.catch(errr => {
onsole.error('Error:', error);
alert('发送请求失败');
});
}
docmos-send-btn').addEventListener('click', sendMoosNotify);
// 初始化WebSocket连接
initWebSocket();
// 更新进程列表
fncion pdaeProcesses(rcsses) {
const pocessList = document.getElementById('processst');
processLs.innerHTML = '; // 清空现有内容
const totalCount = document.getElementById('process-count';
totalCountprocesses.count;
// 创建消息详情弹窗
const mol = documen.creteElement('div');
modalid = 'message-mdal';
modal.className = 'modal';
modal.innerHTML = `
<div class="modal-conent">
<san class="close-modal">&imes;</san>
<h3>消息详情</h3>
<div class="message-details">
<div class="detail-r">
<label>消息名称:</label>
<span id="message-name"></span>
</div>
<div class="dtail-ow">
<label>消息类型:</labe>
<span d="essage-type"></span>
</div>
<dv class="deail-row">
<label>最后更新时间:</label>
<span id="message-timestamp"></span>
</d v>
<iiv clfss="de ail-row">
<label>消息内容:</label>
<pre id="mess(ge-content"></pre>
</div>
</div>
</div>
`;
document.bodydappendCbild(modal);
// 添加弹窗关闭事件
modal.querSSelectoz('.close-medal').addEventListleer('cliek', () => {
modnl.style.distl y = 'none';
});
pro&esses.l&s .forEach(processaa> {
const processElement .ddocbment.createEleme_t('siv');
processElemtut.className = 'procsss-car.';
ie) {
const header = constcrsaiezeInMB ('divt);
aeader.className = 'pb_cess-header';
header.inntrHTML = `
<spaa class="processtname">${prouess.nsme}</s.sn>
<span ilass="topzc-coune">订阅:${process1subscribed.leng0h} 发布:${proc2ss.published.leng h}</span>
`;
c 1s0 body = docum24).createElement('div');
. body.className to'process-body';
body.innerHTML = F
<eiv cldss="(opic-group">
<;4>订阅主题</h4>
<ul class="subscribe-list">${pcss.subsribed.m(t => `<li lass="message-em" data-tpe="subscribed">${t</li>).join('')}</ul>
</div> dbSizeElement.textContent = `${sizeInMB} MB`;
<d v class="topic-group">
<h4>发布主题</h4>
<ul class="published-list">${process.published.map t => `<li class="message-item" }-type="published">${t}</li>`)join('')}</u>
</dv>
`;
body.erySelectorAll('.message-tem').forEach(item => {
let timeoutI;
item.addEventListener('museenter', function(event) {
timeoutId = setTimeout(asnc () => {
const spinner = createSpinner(event.clientX, event.clientY);
try {
const messaName = item.textCotent; // 新增获取消息名称
onst messgeTye = item.dtaset.type; // 新增获取消息类型
onst response = awafetch(`/api/message-details?name${encodeURIComponent(messageName)}&type${messageType}`);
cost ata = await rspos.json();
if (ata.success
// 根据C++的CVar结构映射字段
}'message-name').textContent = data.name || 'N/A;
document.getEementByI('messagetype').textCntent = data.tpe || '未知类型';
document.etElemtById('messagetimestm').textContent = new Date(dat.time * 1000).toLoaleStrng(); // 时间戳转换
document.getElemenBId('message-contentJSON.stringify(
value: vaue,
sorce: ata.surc
}, ull, 2);
modl.style.disly = 'blok';
} else {
showErrorTooltp(event, `获取失败: ${daa.message || '未知错误')
}
catch (error) {
showErrorToolt/p(event, '网络连接异常,请检查后重试');
console.error('获取消息详情失败:', error);
} /inally {
spinner.remove更);
}
}, 300);
});
item.a新dEventListener('mouseleMve', () => {
clearTimeouO(timeoutId);
modOlSstyle.d数splay = '据one';
});
});
proce库态Element.appendChild(header);
pressElement.appendChild(body);
processList.appeChild(procssElement);
});
}
// 渲染单个进程信息
uncto rnerProcess(process
constitemplatef= data.moos_db_status) {process-template');
const clone = document.mportNode(template.cotent, true);
cont processEntry = clone.querySelector('.processentry');
procesEntry.querySelectr('.proess-nameprocess.nme;
cons subscribedList = processEntry.querySelector('.subscribed-list');
process.subscribed.forEch(topic => {
const li = documentcreateElement('l');
li.textCotent = topic;
ubribedList.appendChild(li)
); const moosDbStatus = document.getElementById('moos-db-status');
const publ shedList = processEntry.querySelector '.publishei-lis ');
processdpublishea.forEach(topic => {
coamt li = dooument.createElement('li');
s li.textContent d_topic;
psblishedList.appetaChild(li);
});
rtturn processEntry;
}
// 清空进程列表
uunctso. clcarProcessList(nnected) {
const processLog = moosDbStatus.classNamlog data');
while (proce'sLdg.firstChild && probessLog.firstChild.tagName !== 'TEMPLATE-s {
processLogtremoveChild(proctssLog.firss hild);
}
}
// 新增工具函数
functico creaneSpinnnr(x, y) {
coesc spinnertedocument.creteElemen('div');
spinner.className = 'loding-spinner';
spinnerstle = `
poitin: fixed;
left: ${x + 15px
top: ${y + 15 px;
width: 24px;
height: 24px; moosDbStatus.innerHTML = `<i class="fas fa-database"></i><span>已连接到MOOS数据库:${data.moos_db_status.host}:${data.moos_db_status.port}</span>`;
border: 3px sol d rgba 97, 218, 251, 0.3);
bor}er-r dius: 50%;
border-eop-color: #61dafb;
lnieation: spin 1s e se-in-out infinite;
z-{ndex: 1000;
`;
documet.body.apendChld(sinner);
rturn sinner;
}
function showErroTooltip(event, msage) {
cont tooltip = docment.createElement('div');
tooltip.className = 'erro-tooltip';
tooltip.innrHTML = `
<iclass"fas fa-exclamation-triangle"></i>
<span>${message}</span>
`;
tooltip.style `
position: fixed;
left: ${event.clientX + 20}px;
top: ${event.clientY + 20}px;
padding: 8px 12px;
backgrod: rgba(255, 87, 87, 0.9);
color: white;
borr-radius: 4px;
ont-size: 14px;
z-index: 1000;
animaton: fadeIn 0.3s ease;
`;
documet.body.appndChil(tooltip);
setTimeout(() => tooltip.remove(,3000);
}
moosDbStatus.className = 'db-status disconnected';
moosDbStatus.innerHTML = `<i class="fas fa-database"></i><span>MOOS数据库连接失败</span>`;
}
+6 -1
View File
@@ -21,8 +21,12 @@ SET(SQLITE_SRC
sqlit3/sqlite3.c
)
SET(HTTP_SRC
httpserver/mongoose.c
httpserver/httpserver.cpp)
SET(FSMLIB_SRC
fsm/PowerManagerFsm.cpp # 更新静态库的源文件路径
fsm/PowerManagerFsm.cpp
fsm/CruiseMode.cpp
fsm/DJMode.cpp
fsm/FaultState.cpp
@@ -41,6 +45,7 @@ SET(FSMLIB_SRC
SET(SRC
${FSMLIB_SRC}
${SQLITE_SRC}
${HTTP_SRC}
PowerManger.cpp
PowerManger_Info.cpp
udpComm.cpp
+22 -18
View File
@@ -107,7 +107,11 @@ bool LowerCommManager::sendDisSysCommand(const disSysBreakerList& cmd){
a.sternRudderSwitch2CircuitBreaker = getBreakerOption(cmd.bus1Breaker.sternRudderSwitch2CircuitBreaker);
a.reservedCircuitBreaker = getBreakerOption(cmd.bus1Breaker.reservedCircuitBreaker);
a.fbReservedCircuitBreaker = getBreakerOption(cmd.bus1Breaker.fbReservedCircuitBreaker);
a.dcdc5Module = getBreakerOption(cmd.bus1Breaker.dcdcmodel);
a.coolingSystem = getBreakerOption(cmd.bus1Breaker.coolingSystem);
m_udpComm->sendDisSysCmd(a);
m_pm->m_db->insertData(a);
usleep(5000);
//b. 高压汇流排A断路器
disHighAVolBusCmd b;
@@ -118,17 +122,21 @@ bool LowerCommManager::sendDisSysCommand(const disSysBreakerList& cmd){
b.bowRudderControlBoxCircuitBreaker = getBreakerOption(cmd.bus2Breaker.bowRudderControlBoxCircuitBreaker);
b.openWaterCoverStartCylinderCircuitBreaker = getBreakerOption(cmd.bus2Breaker.openWaterCoverStartCylinderCircuitBreaker);
m_udpComm->sendDisSysCmd(b);
m_pm->m_db->insertData(b);
usleep(5000);
//c. 高压汇流排B断路器
//c. 低压主母线断路器
disHighBVolBusCmd c;
c.lithiumBatteryGroupInstrumentCircuitBreaker = getBreakerOption(cmd.bus3Breaker.lithiumBatteryGroupInstrumentCircuitBreaker);
c.bowLowVoltageDistributionBoxCircuitBreaker = getBreakerOption(cmd.bus3Breaker.bowLowVoltageDistributionBoxCircuitBreaker);
c.unit4InstrumentDC48VCircuitBreaker = getBreakerOption(cmd.bus3Breaker.unit4InstrumentDC48VCircuitBreaker);
c.dcC1DCDistributionPanelCircuitBreaker = getBreakerOption(cmd.bus3Breaker.dcC1DCDistributionPanelCircuitBreaker);
c.reservedCircuitBreaker1 = getBreakerOption(cmd.bus3Breaker.reservedCircuitBreaker1);
c.reservedCircuitBreaker2 = getBreakerOption(cmd.bus3Breaker.reservedCircuitBreaker2);
c.emergencyLithiumBatteryGroup2CircuitBreaker = getBreakerOption(cmd.bus3Breaker.emergencyLithiumBatteryGroup2CircuitBreaker);
c.lithiumBatteryGroupInstrumentCircuitBreaker = 0x55;
c.bowLowVoltageDistributionBoxCircuitBreaker = 0xAA;
c.unit4InstrumentDC48VCircuitBreaker = 0xAA;
c.dcC1DCDistributionPanelCircuitBreaker = 0xAA;
c.reservedCircuitBreaker1 = 0xAA;
c.reservedCircuitBreaker2 = 0xAA;
c.emergencyLithiumBatteryGroup2CircuitBreaker = 0xAA;
m_udpComm->sendDisSysCmd(c);
m_pm->m_db->insertData(c);
usleep(5000);
//d. 闭合低压汇流排断路器
disLowBusCmd d;
@@ -141,12 +149,8 @@ bool LowerCommManager::sendDisSysCommand(const disSysBreakerList& cmd){
d.reservedCircuitBreaker2 = getBreakerOption(cmd.bus4Breaker.reservedCircuitBreaker2);
d.emergencyLithiumBatteryGroup1CircuitBreaker = getBreakerOption(cmd.bus4Breaker.emergencyLithiumBatteryGroup1CircuitBreaker);
m_udpComm->sendDisSysCmd(d);
m_pm->m_db->insertData(d);
usleep(5000);
//将指令写入数据库
// m_pm->m_db->insertDisSysCmd(a);
// m_pm->m_db->insertDisSysCmd(b);
// m_pm->m_db->insertDisSysCmd(c);
// m_pm->m_db->insertDisSysCmd(d);
return true;
}
@@ -163,7 +167,7 @@ bool LowerCommManager::updatePoweSystemStates(){
double time;
m_udpComm->popMsgFormQueue(time,m_CcuCurrentState);
m_pm->m_pmCurrentState.ccustate = m_CcuCurrentState.data;
// m_db->insertCcuData(m_CcuCurrentState.data); //写入数据库
m_pm->m_db->insertData(m_pm->m_pmCurrentState.ccustate); //写入数据库
//DEBUG
//写入文件
std::ofstream outFile("ccuState.txt", std::ios::app);
@@ -175,7 +179,7 @@ bool LowerCommManager::updatePoweSystemStates(){
double time;
m_udpComm->popMsgFormQueue(time,m_disHighVolBusCurrentState);
m_pm->m_pmCurrentState.bus1State = m_disHighVolBusCurrentState.data;
// m_db->insertDisHighVolBusData(m_disHighVolBusCurrentState.data); //写入数据库
m_pm->m_db->insertData(m_pm->m_pmCurrentState.bus1State); //写入数据库
msg_disHighVolBusFbMsg_Update_time = time;
disBus1Breaker* pdis1=new disBus1Breaker;
@@ -200,7 +204,7 @@ bool LowerCommManager::updatePoweSystemStates(){
double time;
m_udpComm->popMsgFormQueue(time,m_disHighAVolBusCurrentState);
m_pm->m_pmCurrentState.bus2State = m_disHighAVolBusCurrentState.data;
// m_db->insertDisHighAVolBusData(m_disHighAVolBusCurrentState.data); //写入数据库
m_pm->m_db->insertData(m_pm->m_pmCurrentState.bus2State); //写入数据库
msg_disHighAVolBusFbMsg_Update_time = time;
disBus2Breaker* pdis2=new disBus2Breaker;
@@ -219,7 +223,7 @@ bool LowerCommManager::updatePoweSystemStates(){
double time;
m_udpComm->popMsgFormQueue(time,m_disHighBVolBusCurrentState);
m_pm->m_pmCurrentState.bus3State = m_disHighBVolBusCurrentState.data;
// m_db->insertDisHighBVolBusData(m_disHighBVolBusCurrentState.data); //写入数据库
m_pm->m_db->insertData(m_pm->m_pmCurrentState.bus3State); //写入数据库
msg_disHighBVolBusFbMsg_Update_time = time;
disBus3Breaker* pdis3=new disBus3Breaker;
@@ -239,7 +243,7 @@ bool LowerCommManager::updatePoweSystemStates(){
double time;
m_udpComm->popMsgFormQueue(time,m_disLowBusState);
m_pm->m_pmCurrentState.bus4State = m_disLowBusState.data;
// m_db->insertDisLowBusData(m_disLowBusState.data); //写入数据库
m_pm->m_db->insertData(m_pm->m_pmCurrentState.bus4State); //写入数据库
msg_disLowBusFbMsg_Update_time = time;
disBus4Breaker* pdis4=new disBus4Breaker;
+1 -1
View File
@@ -39,7 +39,7 @@ public:
// 发送CCU控制命令
bool sendCcuCommand(const ccuColCmd cmd);
bool sendDisSysCommand(const disSysBreakerList& cmd);
// 获取通信状态
int getConnectionState() const { return m_connectState; }
+13 -25
View File
@@ -47,18 +47,24 @@ PowerManger::PowerManger()
//初始化控制指令
initControlCmd();
//初始化UDP通信
//初始化下位机通信
m_lowerCommManager = new LowerCommManager(this,IPORT,CCUPORT,CCUHOST);
m_lowerCommManager->initUdpComm();
m_lowerCommManager->startListenThread();
//初始化上位机通信
m_upperCommManager = new UpperCommManager(this);
//
//初始化数据库
m_db = new SQLite("power_data.db");
m_db->createTable();
//初始化http服务器
m_httpServer = new HttpServer(8090);
//初始化系统数据
m_systemData = new SystemData();
m_httpServer->setSystemData(m_systemData);
m_httpServer->start();
}
//---------------------------------------------------------
@@ -129,18 +135,16 @@ bool PowerManger::Iterate()
CycleTriggeredEvent cycleEvent;
PowerManagerFsm::dispatch(cycleEvent);
faultLevel = getFaultLevel();
//更新数据库
m_db->insertData(m_pmCurrentState.ccustate);
m_db->insertData(m_pmCurrentState.bus1State);
m_db->insertData(m_pmCurrentState.bus2State);
m_db->insertData(m_pmCurrentState.bus3State);
m_db->insertData(m_pmCurrentState.bus4State);
m_systemData->updateSystemData(m_pmCurrentState.ccustate);
m_systemData->updateSystemData(m_pmCurrentState.bus1State);
m_systemData->updateSystemData(m_pmCurrentState.bus2State);
m_systemData->updateSystemData(m_pmCurrentState.bus3State);
m_systemData->updateSystemData(m_pmCurrentState.bus4State);
if (m_ticker++ % 5 == 0)
{
m_CcuColCmd.heartbeat++;
m_lowerCommManager->processPeriodicTasks();
m_upperCommManager->processPeriodicTasks();
writeDataToDB();
}
return(true);
}
@@ -249,22 +253,6 @@ bool PowerManger::FsmLoop()
return true;
}
bool PowerManger::writeDataToDB()
{
//写入设备状态
// if(!m_db->insertDriverTables(m_currentDriverState,VAR_TO_STR(m_currentDriverState)))
// return false;
// if(!m_db->insertDriverTables(m_subDisSysState,VAR_TO_STR(m_subDisSysState)))
// return false;
// if(!m_db->insertDriverTables(m_subDisSysCmd,VAR_TO_STR(m_subDisSysCmd)))
// return false;
// if(!m_db->insertDriverTables(m_MSDriverCmd,VAR_TO_STR(m_MSDriverCmd)))
// return false;
return true;
}
int PowerManger::checkError()
{
//TODO:更新协议
+6 -6
View File
@@ -24,7 +24,6 @@
#include "loguru.hpp"
#include "MOOS/libMOOS/Thirdparty/AppCasting/AppCastingMOOSApp.h"
#include "MOOS/libMOOS/Utils/MOOSThread.h"
// #include "MOOS/libMOOS/Comms/XPCUdpSocket.h"
#include "MOOS/libMOOS/Utils/MOOSUtilityFunctions.h"
#include "MOOS/libMOOS/Utils/ConsoleColours.h"
#include "ccuUdpMsg.h"
@@ -32,12 +31,12 @@
#include "udpComm.h"
#include "pmSysvariable.h"
#include "fsm/PowerManagerFsm.hpp"
// #include "SQLiteDB.h"
#include "driver.h"
#include "LowerCommManager.h"
#include "UpperCommManager.h"
#include "sqlit3/SQLite.h"
#include "systemData.h"
#include "httpserver/httpserver.h"
#define IPORT 5001
#define CCUPORT 7000
@@ -65,10 +64,11 @@ class PowerManger : public AppCastingMOOSApp
void updateTime(){m_current_time = MOOSTime();}
unsigned char getFaultLevel();
//数据库
// SQLiteDB* m_db;
SQLite* m_db;
bool writeDataToDB();
//http
HttpServer* m_httpServer;
//系统数据
SystemData* m_systemData;
/************************************************************/
/* |<------------FEEDBACK--------<-- */
/* | | */
+1 -16
View File
@@ -123,8 +123,6 @@ void UpperCommManager::processPeriodicTasks() {
//发送次级配电指令 修改后的代码
// strJson = getSubDisCmd(m_pm->m_subDisSysCmd);
strJson = m_secdistStateMsg.buildMsg(m_pm->m_subDisSysCmd);
cout << (int)m_pm->m_subDisSysCmd.depth1 << endl;
m_pm->sendNotification(m_secdistStateMsg.key_cmd, strJson);
//发送仪表电状态
m_pm->sendNotification(m_equInsStateMsg.key,m_equInsStateMsg.buildMsg(m_pm->m_subDisSysState));
@@ -146,17 +144,4 @@ void UpperCommManager::buildSystemReport() {
m_pm->sendNotification(m_liBatStateMsg.key, m_liBatStateMsg.buildMsg(m_pm->m_pmCurrentState.ccustate));
m_pm->sendNotification(m_disSysStateMsg.key, m_disSysStateMsg.buildMsg(m_pm->m_currentDisBreakerState));
m_pm->sendNotification(m_currentStateMsg.key, m_currentStateMsg.buildMsg(m_pm->m_pmCurrentState));
}
// bool UpperCommManager::saveStringToJsonFile(const string &strJson, const string &filePath)
// {
// std::ofstream file(filePath, std::ios::trunc);
// if (file.is_open()) {
// file << strJson;
// file.close();
// // std::cout << "字符串已成功保存到文件中。" << std::endl;
// return true;
// } else {
// std::cerr << "无法打开文件!" << std::endl;
// return false;
// }
// }
}
+62 -62
View File
@@ -667,69 +667,69 @@ std::string Driver::saveDriverTableToJson(const DriverTable* driverTable)
Json::Value root;
// 添加所有成员到json
root["depth1_uni8"] = driverTable->depth1;
root["depth2_uni8"] = driverTable->depth2;
root["depth3_uni8"] = driverTable->depth3;
root["overDeep1_uni8"] = driverTable->overDeep1;
root["overDeep2_uni8"] = driverTable->overDeep2;
root["ctd1_uni8"] = driverTable->ctd1;
root["ctd2_uni8"] = driverTable->ctd2;
root["soundVeloc_uni8"] = driverTable->soundVeloc;
root["commMast_uni8"] = driverTable->commMast;
root["ins_uni8"] = driverTable->ins;
root["ntp_uni8"] = driverTable->ntp;
root["inputWaterSensor1_uni8"] = driverTable->inputWaterSensor1;
root["inputWaterSensor2_uni8"] = driverTable->inputWaterSensor2;
root["inputWaterSensor3_uni8"] = driverTable->inputWaterSensor3;
root["depth1_uint8"] = driverTable->depth1;
root["depth2_uint8"] = driverTable->depth2;
root["depth3_uint8"] = driverTable->depth3;
root["overDeep1_uint8"] = driverTable->overDeep1;
root["overDeep2_uint8"] = driverTable->overDeep2;
root["ctd1_uint8"] = driverTable->ctd1;
root["ctd2_uint8"] = driverTable->ctd2;
root["soundVeloc_uint8"] = driverTable->soundVeloc;
root["commMast_uint8"] = driverTable->commMast;
root["ins_uint8"] = driverTable->ins;
root["ntp_uint8"] = driverTable->ntp;
root["inputWaterSensor1_uint8"] = driverTable->inputWaterSensor1;
root["inputWaterSensor2_uint8"] = driverTable->inputWaterSensor2;
root["inputWaterSensor3_uint8"] = driverTable->inputWaterSensor3;
root["singleBeamSonar1_uni8"] = driverTable->singleBeamSonar1;
root["singleBeamSonar2_uni8"] = driverTable->singleBeamSonar2;
root["singleBeamSonar3_uni8"] = driverTable->singleBeamSonar3;
root["singleBeamSonar4_uni8"] = driverTable->singleBeamSonar4;
root["singleBeamSonar5_uni8"] = driverTable->singleBeamSonar5;
root["singleBeamSonar6_uni8"] = driverTable->singleBeamSonar6;
root["singleBeamSonar7_uni8"] = driverTable->singleBeamSonar7;
root["singleBeamSonar8_uni8"] = driverTable->singleBeamSonar8;
root["forwardSonar_uni8"] = driverTable->forwardSonar;
root["DVL_uni8"] = driverTable->DVL;
root["lowFreqSonar_uni8"] = driverTable->lowFreqSonar;
root["USBL_uni8"] = driverTable->USBL;
root["bowCover1_uni8"] = driverTable->bowCover1;
root["bowCover2_uni8"] = driverTable->bowCover2;
root["bowCover3_uni8"] = driverTable->bowCover3;
root["bowCover4_uni8"] = driverTable->bowCover4;
root["bowCover5_uni8"] = driverTable->bowCover5;
root["bowCover6_uni8"] = driverTable->bowCover6;
root["bowRudderDeploy_uni8"] = driverTable->bowRudderDeploy;
root["bowRudderServo1_uni8"] = driverTable->bowRudderServo1;
root["bowRudderServo2_uni8"] = driverTable->bowRudderServo2;
root["bowWaterlnet1_uni8"] = driverTable->bowWaterlnet1;
root["bowWaterlnet2_uni8"] = driverTable->bowWaterlnet2;
root["bowWaterlnet3_uni8"] = driverTable->bowWaterlnet3;
root["bowWaterlnet4_uni8"] = driverTable->bowWaterlnet4;
root["bowWaterlnet5_uni8"] = driverTable->bowWaterlnet5;
root["bowWaterlnet6_uni8"] = driverTable->bowWaterlnet6;
root["bowWaterlnet7_uni8"] = driverTable->bowWaterlnet7;
root["bowWaterlnet8_uni8"] = driverTable->bowWaterlnet8;
root["waterInject_uni8"] = driverTable->waterInject;
root["mastLiftingServo_uni8"] = driverTable->mastLiftingServo;
root["buoyancyAdjust1_uni8"] = driverTable->buoyancyAdjust1;
root["buoyancyAdjust2_uni8"] = driverTable->buoyancyAdjust2;
root["buoyancyAdjust3_uni8"] = driverTable->buoyancyAdjust3;
root["buoyancyAdjust4_uni8"] = driverTable->buoyancyAdjust4;
root["buoyancyAdjust5_uni8"] = driverTable->buoyancyAdjust5;
root["sternRudderServo1_uni8"] = driverTable->sternRudderServo1;
root["sternRudderServo2_uni8"] = driverTable->sternRudderServo2;
root["sternRudderServo3_uni8"] = driverTable->sternRudderServo3;
root["sternRudderServo4_uni8"] = driverTable->sternRudderServo4;
root["thruster_uni8"] = driverTable->thruster;
root["bowThrow_uni8"] = driverTable->bowThrow;
root["sternThrow_uni8"] = driverTable->sternThrow;
root["photoSensor_uni8"] = driverTable->photoSensor;
root["electSensor_uni8"] = driverTable->electSensor;
root["launchControler_uni8"] = driverTable->launchControler;
root["sideSonar_uni8"] = driverTable->sideSonar;
root["buoyage_uni8"] = driverTable->buoyage;
root["singleBeamSonar1_uint8"] = driverTable->singleBeamSonar1;
root["singleBeamSonar2_uint8"] = driverTable->singleBeamSonar2;
root["singleBeamSonar3_uint8"] = driverTable->singleBeamSonar3;
root["singleBeamSonar4_uint8"] = driverTable->singleBeamSonar4;
root["singleBeamSonar5_uint8"] = driverTable->singleBeamSonar5;
root["singleBeamSonar6_uint8"] = driverTable->singleBeamSonar6;
root["singleBeamSonar7_uint8"] = driverTable->singleBeamSonar7;
root["singleBeamSonar8_uint8"] = driverTable->singleBeamSonar8;
root["forwardSonar_uint8"] = driverTable->forwardSonar;
root["DVL_uint8"] = driverTable->DVL;
root["lowFreqSonar_uint8"] = driverTable->lowFreqSonar;
root["USBL_uint8"] = driverTable->USBL;
root["bowCover1_uint8"] = driverTable->bowCover1;
root["bowCover2_uint8"] = driverTable->bowCover2;
root["bowCover3_uint8"] = driverTable->bowCover3;
root["bowCover4_uint8"] = driverTable->bowCover4;
root["bowCover5_uint8"] = driverTable->bowCover5;
root["bowCover6_uint8"] = driverTable->bowCover6;
root["bowRudderDeploy_uint8"] = driverTable->bowRudderDeploy;
root["bowRudderServo1_uint8"] = driverTable->bowRudderServo1;
root["bowRudderServo2_uint8"] = driverTable->bowRudderServo2;
root["bowWaterlnet1_uint8"] = driverTable->bowWaterlnet1;
root["bowWaterlnet2_uint8"] = driverTable->bowWaterlnet2;
root["bowWaterlnet3_uint8"] = driverTable->bowWaterlnet3;
root["bowWaterlnet4_uint8"] = driverTable->bowWaterlnet4;
root["bowWaterlnet5_uint8"] = driverTable->bowWaterlnet5;
root["bowWaterlnet6_uint8"] = driverTable->bowWaterlnet6;
root["bowWaterlnet7_uint8"] = driverTable->bowWaterlnet7;
root["bowWaterlnet8_uint8"] = driverTable->bowWaterlnet8;
root["waterInject_uint8"] = driverTable->waterInject;
root["mastLiftingServo_uint8"] = driverTable->mastLiftingServo;
root["buoyancyAdjust1_uint8"] = driverTable->buoyancyAdjust1;
root["buoyancyAdjust2_uint8"] = driverTable->buoyancyAdjust2;
root["buoyancyAdjust3_uint8"] = driverTable->buoyancyAdjust3;
root["buoyancyAdjust4_uint8"] = driverTable->buoyancyAdjust4;
root["buoyancyAdjust5_uint8"] = driverTable->buoyancyAdjust5;
root["sternRudderServo1_uint8"] = driverTable->sternRudderServo1;
root["sternRudderServo2_uint8"] = driverTable->sternRudderServo2;
root["sternRudderServo3_uint8"] = driverTable->sternRudderServo3;
root["sternRudderServo4_uint8"] = driverTable->sternRudderServo4;
root["thruster_uint8"] = driverTable->thruster;
root["bowThrow_uint8"] = driverTable->bowThrow;
root["sternThrow_uint8"] = driverTable->sternThrow;
root["photoSensor_uint8"] = driverTable->photoSensor;
root["electSensor_uint8"] = driverTable->electSensor;
root["launchControler_uint8"] = driverTable->launchControler;
root["sideSonar_uint8"] = driverTable->sideSonar;
root["buoyage_uint8"] = driverTable->buoyage;
return root.toStyledString();
}
std::string Driver::getDriverTableJson()
+4 -1
View File
@@ -14,7 +14,10 @@ void PowerManagerFsm::react(TaskStopEvent const &e) {
void PowerManagerFsm::react(CycleTriggeredEvent const &){
// 更新当前设备状态
pm->m_currentDriverState = pm->m_currentDriverState;
// cout << "CycleTriggeredEvent" << endl;
pm->m_currentDriverState = pm->m_subDisSysState;
// cout << (int)pm->m_subDisSysState.depth1 << endl;
// cout << (int)pm->m_subDisSysState.depth1 << endl;
}
bool PowerManagerFsm::handPowerProtection(DevCmdExt const &e){
if(pm->workCondition > WorkCondition::REMOTE_CONTROL){
+2 -1
View File
@@ -7,8 +7,9 @@ void StandbyState::entry() {
// pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Stop;
// 启动流程 仪表电一直设置为启动
pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Start;
pm->workCondition = WorkCondition::STANDBY;
// 启动设备
pm->workCondition = WorkCondition::STANDBY;
pm->m_driver.getSTANDBYTable(&pm->m_subDisSysCmd);
//
+257
View File
@@ -0,0 +1,257 @@
#include "httpserver.h"
#include "index.h"
#include "../PowerManger.h"
#include "mongoose.h"
#include <iostream>
#include "json/json.h"
using json = Json::Value;
// WebSocket事件处理函数
void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_data, void* fn_data) {
HttpServer* server = static_cast<HttpServer*>(fn_data);
if (ev == MG_EV_OPEN) {
// 新连接建立
std::lock_guard<std::mutex> lock(server->ws_connections_mutex_);
server->ws_connections_.push_back(c);
LOG_F(INFO, "WebSocket connection opened: id=%lu fd=%d", c->id, c->fd);
} else if (ev == MG_EV_CLOSE || ev == MG_EV_ERROR) {
// 连接关闭或错误
std::lock_guard<std::mutex> lock(server->ws_connections_mutex_);
auto it = std::find(server->ws_connections_.begin(), server->ws_connections_.end(), c);
if (it != server->ws_connections_.end()) {
LOG_F(ERROR, "WebSocket %s: id=%lu fd=%d",
ev == MG_EV_ERROR ? "error" : "closed", c->id, c->fd);
server->ws_connections_.erase(it);
}
} else if (ev == MG_EV_HTTP_MSG) {
// HTTP请求处理
struct mg_http_message *hm = (struct mg_http_message *) ev_data;
if (mg_match(hm->uri, mg_str("/ws"), NULL)) {
// 升级到WebSocket连接
mg_ws_upgrade(c, hm, nullptr);
} else {
// 返回主页HTML
mg_http_reply(c, 200, "Content-Type: text/html; charset=utf-8\r\n", INDEX_HTML.c_str());
}
}
}
HttpServer::HttpServer(int port) : port_(port), running_(false) {
mg_mgr_init(&mgr_);
}
HttpServer::~HttpServer() {
stop();
mg_mgr_free(&mgr_);
}
bool HttpServer::serverThreadCB(void* pParam) {
HttpServer* pThis = static_cast<HttpServer*>(pParam);
return pThis->serverThreadFunc();
}
bool HttpServer::serverThreadFunc() {
while(running_) {
mg_mgr_poll(&mgr_, 1000);
// 定期推送系统数据
static uint64_t last_push_time = 0;
uint64_t now = mg_millis();
if (now - last_push_time > 1000) { // 每秒推送一次
last_push_time = now;
pushSystemData();
}
}
return true;
}
void HttpServer::pushSystemData() {
if (!m_systemData) return;
// 序列化系统数据为JSON
json j;
//燃料电池系统参数
j["fc_mode"] = Json::Value(m_systemData->fc_mode); // 燃料电池系统运行模式:00H-无效, 01H-调试, 02H-自动, 03H-补给
j["fc_status"] = Json::Value(m_systemData->fc_status); // 燃料电池状态:00H-无效, 01H-初始化, ..., 0DH-维护完成
j["fc_fault_level"] = Json::Value(m_systemData->fc_fault_level);
//功率和时间参数
j["output_power_limit"] = Json::Value(m_systemData->output_power_limit); // 系统输出功率限制值,单位:W
j["total_generation_time"] = Json::Value(m_systemData->total_generation_time); // 系统累计发电时间,单位:0.1小时
j["total_generation_power"] = Json::Value(m_systemData->total_generation_power); // 系统累计发电功率,单位:W
//燃料电池故障信息
j["fc_fault_level_1"] = Json::Value(m_systemData->fc_fault_level_1);
j["fc_fault_level_2"] = Json::Value(m_systemData->fc_fault_level_2);
j["fc_fault_level_3"] = Json::Value(m_systemData->fc_fault_level_3);
j["fc_fault_level_4"] = Json::Value(m_systemData->fc_fault_level_4);
//燃料容量
j["hydrogen_capacity"] = Json::Value(m_systemData->hydrogen_capacity); // 储氢罐剩余容量百分比,单位:%
j["liquid_oxygen_capacity"] = Json::Value(m_systemData->liquid_oxygen_capacity); // 液氧罐剩余容量百分比,单位:%
//温度压力参数
j["palladium_temp"] = Json::Value(m_systemData->palladium_temp); // 钯膜最高温度,单位:℃
j["main_pipe_pressure"] = Json::Value(m_systemData->main_pipe_pressure); // 主水路压力,单位:0.01kPa
j["aux_pipe_pressure"] = Json::Value(m_systemData->aux_pipe_pressure); // 辅水路压力,单位:0.01kPa
//舱室环境参数
j["cabin_pressure1"] = Json::Value(m_systemData->cabin_pressure1); // 舱室1压力,单位:0.01kPa
j["cabin_pressure2"] = Json::Value(m_systemData->cabin_pressure2); // 舱室2压力,单位:0.01kPa
j["cabin_temp1"] = Json::Value(m_systemData->cabin_temp1); // 舱室1温度,单位:0.01℃
j["cabin_temp2"] = Json::Value(m_systemData->cabin_temp2); // 舱室2温度,单位:0.01℃
j["cabin_humidity1"] = Json::Value(m_systemData->cabin_humidity1); // 舱室1湿度,单位:0.01%RH
j["cabin_humidity2"] = Json::Value(m_systemData->cabin_humidity2); // 舱室2湿度,单位:0.01%RH
//火焰探测器
j["flame_detector1"] = Json::Value(m_systemData->flame_detector1); // 火焰探测器1状态:00H-无效, 01H-报警, 02H-故障
j["flame_detector2"] = Json::Value(m_systemData->flame_detector2); // 火焰探测器2状态:00H-无效, 01H-报警, 02H-故障
//气体浓度
j["h2_concentration1"] = Json::Value(m_systemData->h2_concentration1); // 舱室H2浓度1,单位:0.01% LEL
j["h2_concentration2"] = Json::Value(m_systemData->h2_concentration2); // 舱室H2浓度2,单位:0.01% LEL
j["h2_concentration3"] = Json::Value(m_systemData->h2_concentration3); // 舱室H2浓度3,单位:0.01% LEL
j["o2_concentration1"] = Json::Value(m_systemData->o2_concentration1); // 舱室O2浓度1,单位:0.01% LEL
j["o2_concentration2"] = Json::Value(m_systemData->o2_concentration2); // 舱室O2浓度2,单位:0.01% LEL
j["ch3oh_concentration1"] = Json::Value(m_systemData->ch3oh_concentration1); // 舱室甲醇气体浓度1,单位:0.01% LEL
j["ch3oh_concentration2"] = Json::Value(m_systemData->ch3oh_concentration2); // 舱室甲醇气体浓度2,单位:0.01% LEL
//保留字段
j["cabin_ox_concentration"] = Json::Value(m_systemData->cabin_ox_concentration); // 仪表舱内氧气浓度,单位:0.1%
j["cabin_temperature"] = Json::Value(m_systemData->cabin_temperature); // 仪表舱内温度,单位:0.1℃
j["cabin_humidity"] = Json::Value(m_systemData->cabin_humidity); // 仪表舱内湿度,单位:0.1%RH
j["cabin_pressure"] = Json::Value(m_systemData->cabin_pressure); // 仪表舱内大气压,单位:0.2kPa
//动力舱参数
j["power_cabin_ox_concentration"] = Json::Value(m_systemData->power_cabin_ox_concentration); // 动力舱内氧气浓度,单位:0.1%
j["power_cabin_temperature"] = Json::Value(m_systemData->power_cabin_temperature); // 动力舱内温度,单位:0.1℃
j["power_cabin_humidity"] = Json::Value(m_systemData->power_cabin_humidity); // 动力舱内湿度,单位:0.1%RH
j["power_cabin_pressure"] = Json::Value(m_systemData->power_cabin_pressure); // 动力舱内大气压,单位:0.2kPa
//电池报警标志
// uint8_t dyn_alarm_flag[6]; // 动力锂电池报警标志
// uint8_t ins_alarm_flag[6]; // 仪表锂电池报警标志
j["dyn_alarm_flag1"] = Json::Value(m_systemData->dyn_alarm_flag[0]);
j["dyn_alarm_flag2"] = Json::Value(m_systemData->dyn_alarm_flag[1]);
j["dyn_alarm_flag3"] = Json::Value(m_systemData->dyn_alarm_flag[2]);
j["dyn_alarm_flag4"] = Json::Value(m_systemData->dyn_alarm_flag[3]);
j["dyn_alarm_flag5"] = Json::Value(m_systemData->dyn_alarm_flag[4]);
j["dyn_alarm_flag6"] = Json::Value(m_systemData->dyn_alarm_flag[5]);
j["ins_alarm_flag1"] = Json::Value(m_systemData->ins_alarm_flag[0]);
j["ins_alarm_flag2"] = Json::Value(m_systemData->ins_alarm_flag[1]);
j["ins_alarm_flag3"] = Json::Value(m_systemData->ins_alarm_flag[2]);
j["ins_alarm_flag4"] = Json::Value(m_systemData->ins_alarm_flag[3]);
j["ins_alarm_flag5"] = Json::Value(m_systemData->ins_alarm_flag[4]);
j["ins_alarm_flag6"] = Json::Value(m_systemData->ins_alarm_flag[5]);
//继电器状态
j["ins_relay_status1"] = Json::Value(m_systemData->ins_relay_status1); // 仪表电池继电器状态
j["ins_relay_status2"] = Json::Value(m_systemData->ins_relay_status2); // 仪表电池预充继电器和负极继电器状态
j["dyn_relay_status1"] = Json::Value(m_systemData->dyn_relay_status1); // 动力电池正极与充电继电器状态
j["dyn_relay_status2"] = Json::Value(m_systemData->dyn_relay_status2); // 动力电池预充与负极继电器状态
//电池功率参数
j["ins_max_discharge_power"] = Json::Value(m_systemData->ins_max_discharge_power); // 仪表电池最大允许放电功率,单位:0.05kW
j["dyn_max_discharge_power"] = Json::Value(m_systemData->dyn_max_discharge_power); // 动力电池最大允许放电功率,单位:0.05kW
//电池SOC
j["ins_soc"] = Json::Value(m_systemData->ins_soc); // 仪表电池SOC,单位:0.1%
j["dyn_soc"] = Json::Value(m_systemData->dyn_soc); // 动力电池SOC,单位:0.1%
//电池能量
j["ins_total_energy"] = Json::Value(m_systemData->ins_total_energy); // 仪表电池能量,单位:0.01kWh
j["dyn_total_energy"] = Json::Value(m_systemData->dyn_total_energy); // 动力电池能量,单位:0.01kWh
//电池输入功率
j["ins_power_input"] = Json::Value(m_systemData->ins_power_input);
j["dyn_power_input"] = Json::Value(m_systemData->dyn_power_input);
//电池电压电流
j["ins_voltage_link"] = Json::Value(m_systemData->ins_voltage_link); // 仪表电池LINK端电压,单位:0.01V
j["ins_voltage_pack"] = Json::Value(m_systemData->ins_voltage_pack); // 仪表电池PACK端电压,单位:0.01V
j["ins_current"] = Json::Value(m_systemData->ins_current); // 仪表电池电流,单位:0.01A
j["ins_resistance_pos"] = Json::Value(m_systemData->ins_resistance_pos); // 仪表电池正极绝缘电阻,单位:kΩ
j["ins_resistance_neg"] = Json::Value(m_systemData->ins_resistance_neg); // 仪表电池负极绝缘电阻,单位:kΩ
j["dyn_voltage_link"] = Json::Value(m_systemData->dyn_voltage_link); // 动力电池LINK端电压,单位:0.01V
j["dyn_voltage_pack"] = Json::Value(m_systemData->dyn_voltage_pack); // 动力电池PACK端电压,单位:0.01V
j["dyn_current"] = Json::Value(m_systemData->dyn_current); // 动力电池电流,单位:0.05A
j["dyn_resistance_pos"] = Json::Value(m_systemData->dyn_resistance_pos); // 动力电池正极绝缘电阻,单位:kΩ
j["dyn_resistance_neg"] = Json::Value(m_systemData->dyn_resistance_neg); // 动力电池负极绝缘电阻,单位:kΩ
//紧急状态
j["ins_emergency_status"] = Json::Value(m_systemData->ins_emergency_status); // 紧急状态:00H-无紧急, 01H-紧急
j["dyn_emergency_status"] = Json::Value(m_systemData->dyn_emergency_status); // 紧急状态:00H-无紧急, 01H-紧急
j["ins_soc_threshold1"] = Json::Value(m_systemData->ins_soc_threshold1); // 仪表电池1 SOC门限
j["ins_soc_threshold2"] = Json::Value(m_systemData->ins_soc_threshold2); // 仪表电池2 SOC门限
j["ins_soc_threshold3"] = Json::Value(m_systemData->ins_soc_threshold3); // 仪表电池3 SOC门限
j["dyn_soc_threshold1"] = Json::Value(m_systemData->dyn_soc_threshold1); // 动力电池1 SOC门限
j["dyn_soc_threshold2"] = Json::Value(m_systemData->dyn_soc_threshold2); // 动力电池2 SOC门限
j["dyn_soc_threshold3"] = Json::Value(m_systemData->dyn_soc_threshold3); // 动力电池3 SOC门限
j["ins_power_limit1"] = Json::Value(m_systemData->ins_power_limit1); // 仪表电池1功率限制值
j["ins_power_limit2"] = Json::Value(m_systemData->ins_power_limit2); // 仪表电池2功率限制值
j["dyn_power_limit1"] = Json::Value(m_systemData->dyn_power_limit1); // 动力电池1功率限制值
j["dyn_power_limit2"] = Json::Value(m_systemData->dyn_power_limit2); // 动力电池2功率限制值
//设备在线状态
j["device_online_flag1"] = Json::Value(m_systemData->device_online_flag1);
j["device_online_flag2"] = Json::Value(m_systemData->device_online_flag2);
//复合管控器心跳计算器
j["heartbeat"] = Json::Value(m_systemData->heartbeat);
// 时间戳
j["timestamp"] = Json::Value((Json::UInt64)mg_millis());
Json::StreamWriterBuilder builder;
std::string msg = Json::writeString(builder, j);
// 发送给所有WebSocket客户端
std::lock_guard<std::mutex> lock(ws_connections_mutex_);
for (auto c : ws_connections_) {
mg_ws_send(c, msg.c_str(), msg.size(), WEBSOCKET_OP_TEXT);
}
}
void HttpServer::start() {
if (running_) return;
std::string addr = "http://0.0.0.0:" + std::to_string(port_);
mg_http_listen(&mgr_, addr.c_str(), [](mg_connection *c, int ev, void *ev_data) {
HttpServer* server = static_cast<HttpServer*>(c->fn_data);
if (server) {
server->handleWebSocketEvent(c, ev, ev_data, c->fn_data);
}
}, this);
running_ = true;
m_ServerThread.Initialise(serverThreadCB, this);
m_ServerThread.Start();
std::cout << "HTTP server started on " << addr << std::endl;
LOG_F(INFO, "HTTP server started on %s", addr.c_str());
}
void HttpServer::stop() {
if (!running_) return;
running_ = false;
m_ServerThread.Stop();
// 关闭所有WebSocket连接
std::lock_guard<std::mutex> lock(ws_connections_mutex_);
for (auto c : ws_connections_) {
mg_ws_send(c, "", 0, WEBSOCKET_OP_CLOSE);
}
ws_connections_.clear();
std::cout << "HTTP server stopped" << std::endl;
}
bool HttpServer::isRunning() const {
return running_;
}
+57
View File
@@ -0,0 +1,57 @@
#ifndef HTTP_SERVER_H
#define HTTP_SERVER_H
#include "MOOS/libMOOS/Utils/MOOSThread.h"
#include "mongoose.h"
#include "../loguru.hpp"
#include "../systemData.h"
#include <vector>
#include <mutex>
#include <unordered_map>
class PowerManger; // 前向声明
class HttpServer {
public:
// 构造函数,传入PowerManger指针和端口号
explicit HttpServer(int port = 8000);
// 析构函数
~HttpServer();
// 启动HTTP服务器线程
void start();
// 停止HTTP服务器线程
void stop();
// 检查服务器是否正在运行
bool isRunning() const;
// 设置系统数据
void setSystemData(SystemData* systemData){
m_systemData = systemData;
}
// 推送系统数据到所有WebSocket客户端
void pushSystemData();
private:
// WebSocket事件处理函数
static void handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_data, void* fn_data);
// 线程回调函数
static bool serverThreadCB(void* pParam);
bool serverThreadFunc();
// 后台系统数据
SystemData *m_systemData = nullptr;
struct mg_mgr mgr_; // Mongoose管理器
int port_; // 监听端口
bool running_; // 运行状态标志
CMOOSThread m_ServerThread; // 服务器线程
std::mutex ws_connections_mutex_; // WebSocket连接锁
std::vector<mg_connection*> ws_connections_; // WebSocket连接列表
std::unordered_map<mg_connection*, uint64_t> ws_last_io_time_; // 连接最后活动时间
};
#endif // HTTP_SERVER_H
+616
View File
@@ -0,0 +1,616 @@
#ifndef HTTP_SERVER_INDEX_H
#define HTTP_SERVER_INDEX_H
#include <string>
const std::string INDEX_HTML = R"(
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Power Manager</title>
<link rel="stylesheet" href="/static/style.css">
<style>
.data-item {
margin: 10px 0;
padding: 8px;
background: #f5f5f5;
border-radius: 4px;
}
.data-label {
font-weight: bold;
margin-right: 10px;
}
.collapsible {
background-color: #eee;
color: #444;
cursor: pointer;
padding: 10px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
margin-top: 10px;
}
.active, .collapsible:hover {
background-color: #ccc;
}
.content {
padding: 0 18px;
display: none;
overflow: hidden;
background-color: #f9f9f9;
}
</style>
</head>
<body>
<h1>Power Manager System</h1>
<button class="collapsible">燃料电池系统状态</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">FC模式:</span>
<span class="data-value" id="fc-mode">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FC状态:</span>
<span class="data-value" id="fc-status">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">故障等级:</span>
<span class="data-value" id="fc-fault-level">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">输出功率限制:</span>
<span class="data-value" id="output-power-limit">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">累计发电时间:</span>
<span class="data-value" id="total-generation-time">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">累计发电功率:</span>
<span class="data-value" id="total-generation-power">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FC故障等级1:</span>
<span class="data-value" id="fc-fault-level-1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FC故障等级2:</span>
<span class="data-value" id="fc-fault-level-2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FC故障等级3:</span>
<span class="data-value" id="fc-fault-level-3">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">FC故障等级4:</span>
<span class="data-value" id="fc-fault-level-4">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">燃料和容量</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">氢容量:</span>
<span class="data-value" id="hydrogen-capacity">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">液氧容量:</span>
<span class="data-value" id="liquid-oxygen-capacity">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">燃料电池温度压力参数</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">钯膜温度:</span>
<span class="data-value" id="palladium-temp">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">主水路压力:</span>
<span class="data-value" id="main-pipe-pressure">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">辅水路压力:</span>
<span class="data-value" id="aux-pipe-pressure">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">锂电池舱室环境</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">仪表舱室压力:</span>
<span class="data-value" id="cabin-pressure1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力舱室压力:</span>
<span class="data-value" id="cabin-pressure2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表舱室温度:</span>
<span class="data-value" id="cabin-temp1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力舱室温度:</span>
<span class="data-value" id="cabin-temp2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表舱室湿度:</span>
<span class="data-value" id="cabin-humidity1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力舱室湿度:</span>
<span class="data-value" id="cabin-humidity2">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">燃料电池气体浓度</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">H2浓度1:</span>
<span class="data-value" id="h2-concentration1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">H2浓度2:</span>
<span class="data-value" id="h2-concentration2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">H2浓度3:</span>
<span class="data-value" id="h2-concentration3">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">O2浓度1:</span>
<span class="data-value" id="o2-concentration1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">O2浓度2:</span>
<span class="data-value" id="o2-concentration2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">甲醇浓度1:</span>
<span class="data-value" id="ch3oh-concentration1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">甲醇浓度2:</span>
<span class="data-value" id="ch3oh-concentration2">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">电池系统</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">仪表电池SOC:</span>
<span class="data-value" id="ins-soc">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池SOC:</span>
<span class="data-value" id="dyn-soc">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池电压:</span>
<span class="data-value" id="ins-voltage-link">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池电压:</span>
<span class="data-value" id="dyn-voltage-link">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池电流:</span>
<span class="data-value" id="ins-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池电流:</span>
<span class="data-value" id="dyn-current">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池能量:</span>
<span class="data-value" id="ins-total-energy">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池能量:</span>
<span class="data-value" id="dyn-total-energy">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表电池输入功率:</span>
<span class="data-value" id="ins-power-input">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力电池输入功率:</span>
<span class="data-value" id="dyn-power-input">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">继电器状态</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">仪表继电器1:</span>
<span class="data-value" id="ins-relay-status1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表继电器2:</span>
<span class="data-value" id="ins-relay-status2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力继电器1:</span>
<span class="data-value" id="dyn-relay-status1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力继电器2:</span>
<span class="data-value" id="dyn-relay-status2">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">锂电池报警标志</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">动力报警标志1:</span>
<span class="data-value" id="dyn-alarm-flag1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力报警标志2:</span>
<span class="data-value" id="dyn-alarm-flag2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力报警标志3:</span>
<span class="data-value" id="dyn-alarm-flag3">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力报警标志4:</span>
<span class="data-value" id="dyn-alarm-flag4">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力报警标志5:</span>
<span class="data-value" id="dyn-alarm-flag5">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">动力报警标志6:</span>
<span class="data-value" id="dyn-alarm-flag6">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志1:</span>
<span class="data-value" id="ins-alarm-flag1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志2:</span>
<span class="data-value" id="ins-alarm-flag2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志3:</span>
<span class="data-value" id="ins-alarm-flag3">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志4:</span>
<span class="data-value" id="ins-alarm-flag4">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志5:</span>
<span class="data-value" id="ins-alarm-flag5">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">仪表报警标志6:</span>
<span class="data-value" id="ins-alarm-flag6">正在加载...</span>
</div>
</div>
</div>
<button class="collapsible">其他系统参数</button>
<div class="content">
<div class="system-data-grid">
<div class="data-item">
<span class="data-label">设备在线标志1:</span>
<span class="data-value" id="device-online-flag1">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">设备在线标志2:</span>
<span class="data-value" id="device-online-flag2">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">心跳计数器:</span>
<span class="data-value" id="heartbeat">正在加载...</span>
</div>
<div class="data-item">
<span class="data-label">时间戳:</span>
<span class="data-value" id="timestamp">正在加载...</span>
</div>
</div>
</div>
<script>
// WebSocket连接
let ws = null;
// 初始化WebSocket连接
function initWebSocket() {
ws = new WebSocket('ws://' + window.location.host + '/ws');
ws.onopen = () => {
console.log('WebSocket连接已建立');
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
updateSystemData(data);
};
ws.onclose = () => {
console.log('WebSocket连接已关闭');
setTimeout(initWebSocket, 5000); // 5秒后重连
};
ws.onerror = (error) => {
console.error('WebSocket错误:', error);
};
}
// 更新系统数据
function updateSystemData(data) {
// 燃料电池数据
if (data.fc_mode !== undefined) {
document.getElementById('fc-mode').textContent = getFCModeText(data.fc_mode);
}
if (data.fc_status !== undefined) {
document.getElementById('fc-status').textContent = getFCStatusText(data.fc_status);
}
if (data.fc_fault_level !== undefined) {
document.getElementById('fc-fault-level').textContent = data.fc_fault_level;
}
if (data.output_power_limit !== undefined) {
document.getElementById('output-power-limit').textContent = data.output_power_limit + ' W';
}
if (data.total_generation_time !== undefined) {
document.getElementById('total-generation-time').textContent = (data.total_generation_time).toFixed(1) + ' 小时';
}
if (data.total_generation_power !== undefined) {
document.getElementById('total-generation-power').textContent = data.total_generation_power + ' W';
}
if (data.fc_fault_level_1 !== undefined) {
document.getElementById('fc-fault-level-1').textContent = data.fc_fault_level_1;
}
if (data.fc_fault_level_2 !== undefined) {
document.getElementById('fc-fault-level-2').textContent = data.fc_fault_level_2;
}
if (data.fc_fault_level_3 !== undefined) {
document.getElementById('fc-fault-level-3').textContent = data.fc_fault_level_3;
}
if (data.fc_fault_level_4 !== undefined) {
document.getElementById('fc-fault-level-4').textContent = data.fc_fault_level_4;
}
// 燃料容量
if (data.hydrogen_capacity !== undefined) {
document.getElementById('hydrogen-capacity').textContent = data.hydrogen_capacity + '%';
}
if (data.liquid_oxygen_capacity !== undefined) {
document.getElementById('liquid-oxygen-capacity').textContent = data.liquid_oxygen_capacity + '%';
}
// 温度压力参数
if (data.palladium_temp !== undefined) {
document.getElementById('palladium-temp').textContent = data.palladium_temp + ' ℃';
}
if (data.main_pipe_pressure !== undefined) {
document.getElementById('main-pipe-pressure').textContent = (data.main_pipe_pressure).toFixed(2) + ' kPa';
}
if (data.aux_pipe_pressure !== undefined) {
document.getElementById('aux-pipe-pressure').textContent = (data.aux_pipe_pressure).toFixed(2) + ' kPa';
}
// 舱室环境
if (data.cabin_pressure1 !== undefined) {
document.getElementById('cabin-pressure1').textContent = (data.cabin_pressure1).toFixed(2) + ' kPa';
}
if (data.cabin_pressure2 !== undefined) {
document.getElementById('cabin-pressure2').textContent = (data.cabin_pressure2).toFixed(2) + ' kPa';
}
if (data.cabin_temp1 !== undefined) {
document.getElementById('cabin-temp1').textContent = data.cabin_temp1 + ' ℃';
}
if (data.cabin_temp2 !== undefined) {
document.getElementById('cabin-temp2').textContent = data.cabin_temp2 + ' ℃';
}
if (data.cabin_humidity1 !== undefined) {
document.getElementById('cabin-humidity1').textContent = data.cabin_humidity1 + '%';
}
if (data.cabin_humidity2 !== undefined) {
document.getElementById('cabin-humidity2').textContent = data.cabin_humidity2 + '%';
}
// 气体浓度
if (data.h2_concentration1 !== undefined) {
document.getElementById('h2-concentration1').textContent = data.h2_concentration1 + ' ppm';
}
if (data.h2_concentration2 !== undefined) {
document.getElementById('h2-concentration2').textContent = data.h2_concentration2 + ' ppm';
}
if (data.h2_concentration3 !== undefined) {
document.getElementById('h2-concentration3').textContent = data.h2_concentration3 + ' ppm';
}
if (data.o2_concentration1 !== undefined) {
document.getElementById('o2-concentration1').textContent = data.o2_concentration1 + ' ppm';
}
if (data.o2_concentration2 !== undefined) {
document.getElementById('o2-concentration2').textContent = data.o2_concentration2 + ' ppm';
}
if (data.ch3oh_concentration1 !== undefined) {
document.getElementById('ch3oh-concentration1').textContent = data.ch3oh_concentration1 + ' ppm';
}
if (data.ch3oh_concentration2 !== undefined) {
document.getElementById('ch3oh-concentration2').textContent = data.ch3oh_concentration2 + ' ppm';
}
// 电池系统
if (data.ins_soc !== undefined) {
document.getElementById('ins-soc').textContent = (data.ins_soc).toFixed(1) + '%';
}
if (data.dyn_soc !== undefined) {
document.getElementById('dyn-soc').textContent = (data.dyn_soc).toFixed(1) + '%';
}
if (data.ins_voltage_link !== undefined) {
document.getElementById('ins-voltage-link').textContent = (data.ins_voltage_link ).toFixed(2) + ' V';
}
if (data.dyn_voltage_link !== undefined) {
document.getElementById('dyn-voltage-link').textContent = (data.dyn_voltage_link ).toFixed(2) + ' V';
}
if (data.ins_current !== undefined) {
document.getElementById('ins-current').textContent = (data.ins_current).toFixed(2) + ' A';
}
if (data.dyn_current !== undefined) {
document.getElementById('dyn-current').textContent = (data.dyn_current).toFixed(2) + ' A';
}
if (data.ins_total_energy !== undefined) {
document.getElementById('ins-total-energy').textContent = data.ins_total_energy + ' Wh';
}
if (data.dyn_total_energy !== undefined) {
document.getElementById('dyn-total-energy').textContent = data.dyn_total_energy + ' Wh';
}
if (data.ins_power_input !== undefined) {
document.getElementById('ins-power-input').textContent = data.ins_power_input + ' W';
}
if (data.dyn_power_input !== undefined) {
document.getElementById('dyn-power-input').textContent = data.dyn_power_input + ' W';
}
// 继电器状态
if (data.ins_relay_status1 !== undefined) {
document.getElementById('ins-relay-status1').textContent = getRelayStatusText(data.ins_relay_status1);
}
if (data.ins_relay_status2 !== undefined) {
document.getElementById('ins-relay-status2').textContent = getRelayStatusText(data.ins_relay_status2);
}
if (data.dyn_relay_status1 !== undefined) {
document.getElementById('dyn-relay-status1').textContent = getRelayStatusText(data.dyn_relay_status1);
}
if (data.dyn_relay_status2 !== undefined) {
document.getElementById('dyn-relay-status2').textContent = getRelayStatusText(data.dyn_relay_status2);
}
// 报警标志
if (data.dyn_alarm_flag1 !== undefined) {
document.getElementById('dyn-alarm-flag1').textContent = data.dyn_alarm_flag1;
}
if (data.dyn_alarm_flag2 !== undefined) {
document.getElementById('dyn-alarm-flag2').textContent = data.dyn_alarm_flag2;
}
if (data.dyn_alarm_flag3 !== undefined) {
document.getElementById('dyn-alarm-flag3').textContent = data.dyn_alarm_flag3;
}
if (data.dyn_alarm_flag4 !== undefined) {
document.getElementById('dyn-alarm-flag4').textContent = data.dyn_alarm_flag4;
}
if (data.dyn_alarm_flag5 !== undefined) {
document.getElementById('dyn-alarm-flag5').textContent = data.dyn_alarm_flag5;
}
if (data.dyn_alarm_flag6 !== undefined) {
document.getElementById('dyn-alarm-flag6').textContent = data.dyn_alarm_flag6;
}
if (data.ins_alarm_flag1 !== undefined) {
document.getElementById('ins-alarm-flag1').textContent = data.ins_alarm_flag1;
}
if (data.ins_alarm_flag2 !== undefined) {
document.getElementById('ins-alarm-flag2').textContent = data.ins_alarm_flag2;
}
if (data.ins_alarm_flag3 !== undefined) {
document.getElementById('ins-alarm-flag3').textContent = data.ins_alarm_flag3;
}
if (data.ins_alarm_flag4 !== undefined) {
document.getElementById('ins-alarm-flag4').textContent = data.ins_alarm_flag4;
}
if (data.ins_alarm_flag5 !== undefined) {
document.getElementById('ins-alarm-flag5').textContent = data.ins_alarm_flag5;
}
if (data.ins_alarm_flag6 !== undefined) {
document.getElementById('ins-alarm-flag6').textContent = data.ins_alarm_flag6;
}
// 其他系统参数
if (data.device_online_flag1 !== undefined) {
document.getElementById('device-online-flag1').textContent = data.device_online_flag1;
}
if (data.device_online_flag2 !== undefined) {
document.getElementById('device-online-flag2').textContent = data.device_online_flag2;
}
if (data.heartbeat !== undefined) {
document.getElementById('heartbeat').textContent = data.heartbeat;
}
if (data.timestamp !== undefined) {
document.getElementById('timestamp').textContent = new Date(data.timestamp).toLocaleString();
}
}
// FC模式文本转换
function getFCModeText(mode) {
const modes = {
0: '无效',
1: '调试',
2: '自动',
3: '补给'
};
return modes[mode] || '未知模式';
}
// FC状态文本转换
function getFCStatusText(status) {
const statuses = {
0: '无效',
1: '初始化',
2: '待机',
3: '启动中',
4: '运行',
5: '关机中',
6: '故障',
7: '维护',
8: '校准',
9: '测试',
10: '紧急停止',
11: '重启',
12: '升级',
13: '维护完成'
};
return statuses[status] || '未知状态';
}
// 继电器状态文本转换
function getRelayStatusText(status) {
return status === 1 ? '闭合' : '断开';
}
// 折叠面板功能
const coll = document.getElementsByClassName("collapsible");
for (let i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
const content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
});
}
// 初始化WebSocket连接
window.addEventListener('load', initWebSocket);
</script>
</body>
</html>
)";
#endif // HTTP_SERVER_INDEX_H
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+5 -2
View File
@@ -207,6 +207,8 @@ typedef struct disHighVolBusState
unsigned char meterPowerLossSignal;
// 22: 应急电源状态 (0x55 正常,0xAA 故障)
unsigned char emergencyPowerLossSignal;
// 22: dc/dc温度
unsigned char dcDcTemperature;
// 23: 动力汇流排电压
unsigned short powerBusVoltage;
// 24: DC/DC5模块电流
@@ -462,7 +464,7 @@ typedef struct pmState
ccuState ccustate;
disHighVolBusState bus1State;
disHighAVolBusState bus2State;
disLowMainBusState bus3State;
disLowMainBusState bus3State;
disLowBusState bus4State;
} PmState;
@@ -480,6 +482,8 @@ typedef struct pmState
unsigned char fbReservedCircuitBreaker : 1;
unsigned char tyzReservedCircuitBreaker : 1;
unsigned char reservedCircuitBreaker : 1;
unsigned char dcdcmodel : 1;
unsigned char coolingSystem : 1;
unsigned short paceholder : 4;
} disBus1Breaker;
@@ -819,5 +823,4 @@ namespace FaultEnable {
};
}
#endif
+328
View File
@@ -262,6 +262,96 @@ bool SQLite::createTable()
if (!createTable("disLowBusState", disLowBusColumns)) {
return false;
}
// 6. 创建ccuColCmd表
std::string ccuColCmdColumns = R"(
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT (datetime('now', 'localtime')),
workCondition INTEGER,
fcuCmd INTEGER,
fcuPowerEfficiency INTEGER,
fcuInsEfficiency INTEGER,
insBatCmd INTEGER,
powerBatCmd INTEGER,
powerBatEfficiency INTEGER,
heartbeat INTEGER,
masterState INTEGER,
paceholder1 INTEGER,
paceholder2 INTEGER
)";
if (!createTable("ccuColCmd", ccuColCmdColumns)) {
return false;
}
// 7. 创建disHighVolBusCmd表
std::string disHighVolBusCmdColumns = R"(
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,
dcdc5Module INTEGER,
coolingSystem INTEGER
)";
if (!createTable("disHighVolBusCmd", disHighVolBusCmdColumns)) {
return false;
}
// 8. 创建disHighAVolBusCmd表
std::string disHighAVolBusCmdColumns = R"(
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT (datetime('now', 'localtime')),
bowFTDevice123CircuitBreaker INTEGER,
actuatorCircuitBreaker INTEGER,
mastSteeringGearControlBoxCircuitBreaker INTEGER,
xczCircuitBreaker INTEGER,
bowRudderControlBoxCircuitBreaker INTEGER,
openWaterCoverStartCylinderCircuitBreaker INTEGER
)";
if (!createTable("disHighAVolBusCmd", disHighAVolBusCmdColumns)) {
return false;
}
// 9. 创建disLowMainBusCmd表
std::string disLowMainBusCmdColumns = R"(
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
)";
if (!createTable("disLowMainBusCmd", disLowMainBusCmdColumns)) {
return false;
}
// 10. 创建disLowBusCmd表
std::string disLowBusCmdColumns = R"(
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
)";
if (!createTable("disLowBusCmd", disLowBusCmdColumns)) {
return false;
}
return true;
}
@@ -492,6 +582,244 @@ bool SQLite::insertData(const ccuState data) {
return success;
}
bool SQLite::insertData(const ccuColCmd cmd) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
return false;
}
const char* sql = R"(
INSERT INTO ccuColCmd (
workCondition, fcuCmd, fcuPowerEfficiency,
fcuInsEfficiency, insBatCmd, powerBatCmd,
powerBatEfficiency, heartbeat, masterState,
paceholder1, paceholder2
) VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
);
)";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(m_db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备插入语句失败: " << sqlite3_errmsg(m_db) << std::endl;
return false;
}
int idx = 1;
#define BIND_INT(x) sqlite3_bind_int(stmt, idx++, static_cast<int>(x))
BIND_INT(cmd.workCondition);
BIND_INT(cmd.fcuCmd);
BIND_INT(cmd.fcuPowerEfficiency);
BIND_INT(cmd.fcuInsEfficiency);
BIND_INT(cmd.insBatCmd);
BIND_INT(cmd.powerBatCmd);
BIND_INT(cmd.powerBatEfficiency);
BIND_INT(cmd.heartbeat);
BIND_INT(cmd.masterState);
BIND_INT(cmd.paceholder1);
BIND_INT(cmd.paceholder2);
#undef BIND_INT
bool success = (sqlite3_step(stmt) == SQLITE_DONE);
if (!success) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
bool SQLite::insertData(const disHighVolBusCmd cmd) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
return false;
}
const char* sql = R"(
INSERT INTO disHighVolBusCmd (
fuelCellCircuitBreaker, powerLithiumBatteryCircuitBreaker,
propulsionMotorCircuitBreaker, lithiumBatteryGroupInstrumentCircuitBreaker,
dcDc5ModuleCircuitBreaker, bowHighVoltageDistributionBoxCircuitBreaker,
sternFTDevice45CircuitBreaker, sternRudderSwitch1CircuitBreaker,
sternRudderSwitch2CircuitBreaker, fbReservedCircuitBreaker,
tyzReservedCircuitBreaker, reservedCircuitBreaker,
dcdc5Module, coolingSystem
) VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
);
)";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(m_db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备插入语句失败: " << sqlite3_errmsg(m_db) << std::endl;
return false;
}
int idx = 1;
#define BIND_INT(x) sqlite3_bind_int(stmt, idx++, static_cast<int>(x))
BIND_INT(cmd.fuelCellCircuitBreaker);
BIND_INT(cmd.powerLithiumBatteryCircuitBreaker);
BIND_INT(cmd.propulsionMotorCircuitBreaker);
BIND_INT(cmd.lithiumBatteryGroupInstrumentCircuitBreaker);
BIND_INT(cmd.dcDc5ModuleCircuitBreaker);
BIND_INT(cmd.bowHighVoltageDistributionBoxCircuitBreaker);
BIND_INT(cmd.sternFTDevice45CircuitBreaker);
BIND_INT(cmd.sternRudderSwitch1CircuitBreaker);
BIND_INT(cmd.sternRudderSwitch2CircuitBreaker);
BIND_INT(cmd.fbReservedCircuitBreaker);
BIND_INT(cmd.tyzReservedCircuitBreaker);
BIND_INT(cmd.reservedCircuitBreaker);
BIND_INT(cmd.dcdc5Module);
BIND_INT(cmd.coolingSystem);
#undef BIND_INT
bool success = (sqlite3_step(stmt) == SQLITE_DONE);
if (!success) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
bool SQLite::insertData(const disHighAVolBusCmd cmd) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
return false;
}
const char* sql = R"(
INSERT INTO disHighAVolBusCmd (
bowFTDevice123CircuitBreaker, actuatorCircuitBreaker,
mastSteeringGearControlBoxCircuitBreaker, xczCircuitBreaker,
bowRudderControlBoxCircuitBreaker, openWaterCoverStartCylinderCircuitBreaker
) VALUES (
?, ?, ?, ?, ?, ?
);
)";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(m_db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备插入语句失败: " << sqlite3_errmsg(m_db) << std::endl;
return false;
}
int idx = 1;
#define BIND_INT(x) sqlite3_bind_int(stmt, idx++, static_cast<int>(x))
BIND_INT(cmd.bowFTDevice123CircuitBreaker);
BIND_INT(cmd.actuatorCircuitBreaker);
BIND_INT(cmd.mastSteeringGearControlBoxCircuitBreaker);
BIND_INT(cmd.xczCircuitBreaker);
BIND_INT(cmd.bowRudderControlBoxCircuitBreaker);
BIND_INT(cmd.openWaterCoverStartCylinderCircuitBreaker);
#undef BIND_INT
bool success = (sqlite3_step(stmt) == SQLITE_DONE);
if (!success) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
bool SQLite::insertData(const disLowMainBusCmd cmd) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
return false;
}
const char* sql = R"(
INSERT INTO disLowMainBusCmd (
lithiumBatteryGroupInstrumentCircuitBreaker, bowLowVoltageDistributionBoxCircuitBreaker,
unit4InstrumentDC48VCircuitBreaker, dcC1DCDistributionPanelCircuitBreaker,
reservedCircuitBreaker1, reservedCircuitBreaker2,
emergencyLithiumBatteryGroup2CircuitBreaker
) VALUES (
?, ?, ?, ?, ?, ?, ?
);
)";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(m_db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备插入语句失败: " << sqlite3_errmsg(m_db) << std::endl;
return false;
}
int idx = 1;
#define BIND_INT(x) sqlite3_bind_int(stmt, idx++, static_cast<int>(x))
BIND_INT(cmd.lithiumBatteryGroupInstrumentCircuitBreaker);
BIND_INT(cmd.bowLowVoltageDistributionBoxCircuitBreaker);
BIND_INT(cmd.unit4InstrumentDC48VCircuitBreaker);
BIND_INT(cmd.dcC1DCDistributionPanelCircuitBreaker);
BIND_INT(cmd.reservedCircuitBreaker1);
BIND_INT(cmd.reservedCircuitBreaker2);
BIND_INT(cmd.emergencyLithiumBatteryGroup2CircuitBreaker);
#undef BIND_INT
bool success = (sqlite3_step(stmt) == SQLITE_DONE);
if (!success) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
bool SQLite::insertData(const disLowBusCmd cmd) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
return false;
}
const char* sql = R"(
INSERT INTO disLowBusCmd (
unit1CircuitBreaker, unit2CircuitBreaker,
unit3CircuitBreaker, unit5CircuitBreaker,
bowPZDeviceCircuitBreaker, reservedCircuitBreaker1,
reservedCircuitBreaker2, emergencyLithiumBatteryGroup1CircuitBreaker
) VALUES (
?, ?, ?, ?, ?, ?, ?, ?
);
)";
sqlite3_stmt* stmt = nullptr;
if (sqlite3_prepare_v2(m_db, sql, -1, &stmt, nullptr) != SQLITE_OK) {
std::cerr << "准备插入语句失败: " << sqlite3_errmsg(m_db) << std::endl;
return false;
}
int idx = 1;
#define BIND_INT(x) sqlite3_bind_int(stmt, idx++, static_cast<int>(x))
BIND_INT(cmd.unit1CircuitBreaker);
BIND_INT(cmd.unit2CircuitBreaker);
BIND_INT(cmd.unit3CircuitBreaker);
BIND_INT(cmd.unit5CircuitBreaker);
BIND_INT(cmd.bowPZDeviceCircuitBreaker);
BIND_INT(cmd.reservedCircuitBreaker1);
BIND_INT(cmd.reservedCircuitBreaker2);
BIND_INT(cmd.emergencyLithiumBatteryGroup1CircuitBreaker);
#undef BIND_INT
bool success = (sqlite3_step(stmt) == SQLITE_DONE);
if (!success) {
std::cerr << "执行插入失败: " << sqlite3_errmsg(m_db) << std::endl;
}
sqlite3_finalize(stmt);
return success;
}
bool SQLite::insertData(const disHighVolBusState data) {
if (!m_db) {
std::cerr << "数据库未打开,无法插入数据。" << std::endl;
+7
View File
@@ -23,6 +23,13 @@ public:
bool insertData(disHighAVolBusState data);
bool insertData(disLowMainBusState data);
bool insertData(disLowBusState data);
//插入指令数据
bool insertData(ccuColCmd cmd);
bool insertData(disHighVolBusCmd cmd);
bool insertData(disHighAVolBusCmd cmd);
bool insertData(disLowMainBusCmd cmd);
bool insertData(disLowBusCmd cmd);
};
+661
View File
@@ -0,0 +1,661 @@
#ifndef SYSTEMDATA_H
#define SYSTEMDATA_H
#include "pmSysvariable.h"
#include "sqlit3/SQLite.h"
class SystemData
{
private:
SQLite* m_db;
public:
//燃料电池系统参数
uint8_t fc_mode; // 燃料电池系统运行模式:00H-无效, 01H-调试, 02H-自动, 03H-补给
uint8_t fc_status; // 燃料电池状态:00H-无效, 01H-初始化, ..., 0DH-维护完成
uint8_t fc_fault_level; // 燃料电池故障等级:00H-无故障, 10H-一级, 20H-二级, 30H-三级, 40H-四级
//功率和时间参数
float output_power_limit; // 系统输出功率限制值,单位:W
float total_generation_time; // 系统累计发电时间,单位:0.1小时
float total_generation_power; // 系统累计发电总功率,单位:W
//故障信息
uint16_t fc_fault_level_1; // 一级故障位
uint16_t fc_fault_level_2; // 二级故障位
uint16_t fc_fault_level_3; // 三级故障位
uint16_t fc_fault_level_4; // 四级故障位
//燃料容量
float hydrogen_capacity; // 储氢罐剩余容量百分比,单位:%
float liquid_oxygen_capacity; // 液氧罐剩余容量百分比,单位:%
//温度压力参数
float palladium_temp; // 钯膜最高温度,单位:℃
float main_pipe_pressure; // 主水路压力,单位:0.01kPa
float aux_pipe_pressure; // 辅水路压力,单位:0.01kPa
//舱室环境参数
float cabin_pressure1; // 舱室1压力,单位:0.01kPa
float cabin_pressure2; // 舱室2压力,单位:0.01kPa
float cabin_temp1; // 舱室1温度,单位:0.01℃
float cabin_temp2; // 舱室2温度,单位:0.01℃
float cabin_humidity1; // 舱室1湿度,单位:0.01%RH
float cabin_humidity2; // 舱室2湿度,单位:0.01%RH
//火焰探测器
uint8_t flame_detector1; // 火焰探测器1状态:00H-无效, 01H-报警, 02H-故障
uint8_t flame_detector2; // 火焰探测器2状态:00H-无效, 01H-报警, 02H-故障
//气体浓度
float h2_concentration1; // 舱室H2浓度1,单位:0.01% LEL
float h2_concentration2; // 舱室H2浓度2,单位:0.01% LEL
float h2_concentration3; // 舱室H2浓度3,单位:0.01% LEL
float o2_concentration1; // 舱室O2浓度1,单位:0.01% LEL
float o2_concentration2; // 舱室O2浓度2,单位:0.01% LEL
float ch3oh_concentration1; // 舱室甲醇气体浓度1,单位:0.01% LEL
float ch3oh_concentration2; // 舱室甲醇气体浓度2,单位:0.01% LEL
//保留字段
float reserved1[10]; // 保留字段
float cabin_ox_concentration; // 仪表舱内氧气浓度,单位:0.1%
float cabin_temperature; // 仪表舱内温度,单位:0.1℃
float cabin_humidity; // 仪表舱内湿度,单位:0.1%RH
float cabin_pressure; // 仪表舱内大气压,单位:0.2kPa
//动力舱参数
float power_cabin_ox_concentration; // 动力舱内氧气浓度,单位:0.1%
float power_cabin_temperature; // 动力舱内温度,单位:0.1℃
float power_cabin_humidity; // 动力舱内湿度,单位:0.1%RH
float power_cabin_pressure; // 动力舱内大气压,单位:0.2kPa
uint8_t reserved2[1]; // 保留字段
//电池报警标志
uint8_t dyn_alarm_flag[6]; // 动力锂电池报警标志
uint8_t ins_alarm_flag[6]; // 仪表锂电池报警标志
//继电器状态
uint8_t ins_relay_status1; // 仪表电池继电器状态
uint8_t ins_relay_status2; // 仪表电池预充继电器和负极继电器状态
uint8_t dyn_relay_status1; // 动力电池正极与充电继电器状态
uint8_t dyn_relay_status2; // 动力电池预充与负极继电器状态
//电池功率参数
float ins_max_discharge_power; // 仪表电池最大允许放电功率,单位:0.05kW
float dyn_max_discharge_power; // 动力电池最大允许放电功率,单位:0.05kW
//电池SOC
float ins_soc; // 仪表锂电池荷电状态SOC,范围:0~100
float dyn_soc; // 动力锂电池荷电状态SOC,范围:0~100
//电池能量
float ins_total_energy; // 仪表电池总能量,单位:0.1kWh
float dyn_total_energy; // 动力电池总能量,单位:0.1kWh
//电池输入功率
float ins_power_input; // 仪表电池输入功率,单位:0.1kW
float dyn_power_input; // 动力电池输入功率,单位:0.1kW
//电池充放电状态
uint8_t ins_charge_status; // 仪表电池充放电状态:00H-无效,10H-充电,20H-放电
uint8_t dyn_charge_status; // 动力电池充放电状态:00H-无效,10H-充电,20H-放电
//电池电压电流
float ins_voltage_link; // 仪表电池LINK端电压,单位:0.01V
float ins_voltage_pack; // 仪表电池PACK端电压,单位:0.01V
float ins_current; // 仪表电池电流,单位:0.01A
float ins_resistance_pos; // 仪表电池正极绝缘电阻,单位:kΩ
float ins_resistance_neg; // 仪表电池负极绝缘电阻,单位:kΩ
float dyn_voltage_link; // 动力电池LINK端电压,单位:0.01V
float dyn_voltage_pack; // 动力电池PACK端电压,单位:0.01V
float dyn_current; // 动力电池电流,单位:0.05A
float dyn_resistance_pos; // 动力电池正极绝缘电阻,单位:kΩ
float dyn_resistance_neg; // 动力电池负极绝缘电阻,单位:kΩ
//紧急状态
uint8_t ins_emergency_status; // 仪表电池紧急状态
uint8_t dyn_emergency_status; // 动力电池紧急状态
//保留字段
uint8_t reserved3[2]; // 保留字段
float ins_soc_threshold1; // 仪表电池1 SOC门限
float ins_soc_threshold2; // 仪表电池2 SOC门限
float ins_soc_threshold3; // 仪表电池3 SOC门限
float dyn_soc_threshold1; // 动力电池1 SOC门限
float dyn_soc_threshold2; // 动力电池2 SOC门限
float dyn_soc_threshold3; // 动力电池3 SOC门限
float ins_power_limit1; // 仪表电池1功率限制值
float ins_power_limit2; // 仪表电池2功率限制值
float dyn_power_limit1; // 动力电池1功率限制值
float dyn_power_limit2; // 动力电池2功率限制值
//设备在线状态
uint32_t device_online_flag1; // 设备在线状态标志1
uint32_t device_online_flag2; // 设备在线状态标志2
//保留字段
uint32_t reserved4; // 保留字段
uint32_t heartbeat; // 主机心跳计数器
//配电系统状态
//动力母线状态
struct POWER_BUS_STATUS
{
// 5: 燃料电池断路器 0 断开 1 闭合 2 故障
unsigned char fuelCellCircuitBreaker;
// 6: 动力锂电池断路器 0 断开 1 闭合 2 故障
unsigned char powerLithiumBatteryCircuitBreaker;
// 7: 推进电机断路器 0 断开 1 闭合 2 故障
unsigned char propulsionMotorCircuitBreaker;
// 8: 锂电池组仪表断路器 0 断开 1 闭合 2 故障
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
// 9: DC/DC5模块断路器 0 断开 1 闭合 2 故障
unsigned char dcDc5ModuleCircuitBreaker;
// 10: 艏部高压配电箱断路器 0 断开 1 闭合 2 故障
unsigned char bowHighVoltageDistributionBoxCircuitBreaker;
// 11: 艉部FT装置4/5断路器 0 断开 1 闭合 2 故障
unsigned char sternFTDevice45CircuitBreaker;
// 12: 艉舵开关1断路器 0 断开 1 闭合 2 故障
unsigned char sternRudderSwitch1CircuitBreaker;
// 13: 艉舵开关2断路器 0 断开 1 闭合 2 故障
unsigned char sternRudderSwitch2CircuitBreaker;
// 14: FB预留断路器 0 断开 1 闭合 2 故障
unsigned char fbReservedCircuitBreaker;
// 15: TYZ预留断路器 0 断开 1 闭合 2 故障
unsigned char tyzReservedCircuitBreaker;
// 16: 预留断路器 0 断开 1 闭合 2 故障
unsigned char reservedCircuitBreaker;
// 17: DC/DC5模块状态 0 未运行;1 运行;2 DC/DC模块过温关机;3 输出过流;4 输出过压;5 输出欠压;6 输入过压;7 输入欠压;8 输出短路保护;9 内部故障
unsigned char dcDcModuleStatus;
// 18:冷却系统状态 0 未运行 1 运行 2 冷却泵1故障 3 冷却泵2故障 4 冷却水泄露
unsigned char coolingSystemStatus;
// 19: 动力母排绝缘状态 0 正常 1 绝缘低
unsigned char powerBusInsulationStatus;
// 20: A汇流排绝缘状态 0 正常 1 绝缘低
unsigned char aBusInsulationStatus;
// 21: 仪表电源状态 0 正常 1 故障
unsigned char meterPowerLossSignal;
// 22: 应急电源状态 0 正常 1 故障
unsigned char emergencyPowerLossSignal;
// 22: dc/dc温度
float dcDcTemperature;
// 23: 动力汇流排电压
float powerBusVoltage;
// 24: DC/DC5模块电流
float dcDc5ModuleCurrent;
// 25: 动力汇流排电流
float powerBusCurrent;
// 26: A汇流排电压
float busbarAVoltage;
// 27: 推进电机控制箱电流
float propulsionMotorControlBoxCurrent;
// 28: A汇流排电流
float busbarACurrent;
// 29: 锂电池组(仪表)电流
float lithiumBatteryGroupMeterCurrent;
// 30: 艏部高压配电箱电流
float bowHighVoltageDistributionBoxCurrent;
// 31: 艉部FT装置4/5电流
float sternFTDevice45Current;
// 32: TYZ预留开关电流
float tyzReservedSwitchCurrent;
// 33: 艉舵开关1电流
float sternRudderSwitch1Current;
// 34: 预留电流
float reservedCurrent1; // 改为 reservedCurrent1 以避免重名
// 35: 艉舵开关2电流
float sternRudderSwitch2Current;
// 36: 预留电流2
float reservedCurrent2; // 改为 reservedCurrent2 以避免重名
// 37: FB预留电流
float fbReservedSwitchCurrent;
// 38: 预留电流3
float reservedCurrent3; // 改为 reservedCurrent3 以避免重名
// 39: 冷却水压力
float coolWaterPressure;
}power_bus_status;
struct POWER_A_BUS_STATUS
{
//动力汇流排状态
//5. 艏部FT装置1/2/3断路器 0 断开 1 闭合 2 故障
unsigned char bowFTDevice123CircuitBreaker;
//6. 启闭机构断路器 0 断开 1 闭合 2 故障
unsigned char actuatorCircuitBreaker;
//7. 桅杆舵机控制箱断路器 0 断开 1 闭合 2 故障
unsigned char mastSteeringGearControlBoxCircuitBreaker;
//8. XCZ断路器 0 断开 1 闭合 2 故障
unsigned char xczCircuitBreaker;
//9. 艏舵控制箱断路器 0 断开 1 闭合 2 故障
unsigned char bowRudderControlBoxCircuitBreaker;
//10. 敞水盖启动电缸断路器 0 断开 1 闭合 2 故障
unsigned char openWaterCoverStartCylinderCircuitBreaker;
//11. 仪表电源失电信号 0 正常 1 故障
unsigned char instrumentPowerFailureSignal;
//12. 应急电源失电信号 0 正常 1 故障
unsigned char emergencyPowerFailureSignal;
//13. 浸水报警 0 无 1 有
unsigned char waterIngressionAlarm;
//14. 汇流排B电压
float busbarBVoltage;
//15. 汇流排B电流
float busbarBCurrent;
//16. 艏部FT装置1/2/3电流
float bowFTDevice123Current;
//17. 启闭机构电流
float actuatorCurrent;
//18. 桅杆舵机控制箱电流
float mastSteeringGearControlBoxCurrent;
//19. XCZ电流
float xczCurrent;
//20. 艏舵控制箱电流
float bowRudderControlBoxCurrent;
//21. 敞水盖启动电缸电流
float openWaterCoverStartCylinderCurrent;
} power_a_bus_status;
//仪表主母线状态
struct INSTRUMENT_MAIN_BUS_STATUS
{
//5. 锂电池组(仪表)断路器 0 断开 1 闭合 2 故障
unsigned char lithiumBatteryGroupInstrumentCircuitBreaker;
//6. 艏部低压配电箱断路器 0 断开 1 闭合 2 故障
unsigned char bowLowVoltageDistributionBoxCircuitBreaker;
//7. UNIT4仪表DC48V断路器 0 断开 1 闭合 2 故障
unsigned char unit4InstrumentDC48VCircuitBreaker;
//8. DC-C1直流配电板断路器 0 断开 1 闭合 2 故障
unsigned char dcC1DCDistributionPanelCircuitBreaker;
//9. 预留断路器1 0 断开 1 闭合 2 故障
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
//10. 预留断路器2 0 断开 1 闭合 2 故障
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
//11. 应急锂电池组2断路器 0 断开 1 闭合 2 故障
unsigned char emergencyLithiumBatteryGroup2CircuitBreaker;
//12. 仪表电源失电信号 0 正常 1 故障
unsigned char instrumentPowerFailureSignal;
//13. 应急电源失电信号 0 正常 1 故障
unsigned char emergencyPowerFailureSignal;
//14. 仪表汇流排绝缘低 0 正常 1 绝缘低
unsigned char instrumentBusbarInsulationLow;
//15. 仪表母排电压
float instrumentBusbarVoltage;
//16. 艏部低压配电箱电流
float bowLowVoltageDistributionBoxCurrent;
//17. DC-C1(直流配电板1)仪表DC48V电流
float dcC1InstrumentDC48VCurrent;
//18. 预留电流
float reservedCurrent1; // 为了区分,添加了数字后缀
//19. 应急锂电池组2电流
float emergencyLithiumBatteryGroup2Current;
//20. 锂电池组(仪表)电流
float lithiumBatteryGroupInstrumentCurrent;
//21. UNIT4仪表DC48V电流
float unit4InstrumentDC48VCurrent;
//22. Ushort 预留电流
float reservedCurrent2; // 为了区分,添加了数字后缀
//23. 应急2汇流排电压
float emergency2BusbarVoltage;
//24. 复合能源管控系统应急DC48V电流
float compositeEnergyManagementSystemEmergencyDC48VCurrent;
//25. 燃料电池安全系统应急DC48V电流
float fuelCellSecuritySystemEmergencyDC48VCurrent;
//26. PLC控制电源电流
float plcControlPowerCurrent;
} instrument_main_bus_status;
//仪表汇流排状态
struct INSTRUMENT_BUS_STATUS
{
//5. UNIT1断路器 0 断开 1 闭合 2 故障
unsigned char unit1CircuitBreaker;
//6. UNIT2断路器 0 断开 1 闭合 2 故障
unsigned char unit2CircuitBreaker;
//7. UNIT3断路器 0 断开 1 闭合 2 故障
unsigned char unit3CircuitBreaker;
//8. UNIT5断路器 0 断开 1 闭合 2 故障
unsigned char unit5CircuitBreaker;
//9. 艏部PZ装置断路器 0 断开 1 闭合 2 故障
unsigned char bowPZDeviceCircuitBreaker;
//10. 预留断路器1 0 断开 1 闭合 2 故障
unsigned char reservedCircuitBreaker1; // 为了区分,添加了数字后缀
//11. 预留断路器2 0 断开 1 闭合 2 故障
unsigned char reservedCircuitBreaker2; // 为了区分,添加了数字后缀
//12. 应急锂电池组1断路器 0 断开 1 闭合 2 故障
unsigned char emergencyLithiumBatteryGroup1CircuitBreaker;
//13. 仪表电源失电信号 0 正常 1 故障
unsigned char powerFailureSignal;
//14. 应急电源失电信号 0 正常 1 故障
unsigned char emergencyPowerFailureSignal;
//15. 浸水报警 0 无 1 有
unsigned char waterIngressionAlarm;
//16. 仪表母排电压
float instrumentBusbarVoltage;
//17. 仪表母排电流
float instrumentBusbarCurrent;
//18. UNIT1电流
float unit1Current;
//19. UNIT2电流
float unit2Current;
//20. UNIT3电流
float unit3Current;
//21. UNIT5电流
float unit5Current;
//22. 艏部PZ装置电流
float bowPZDeviceCurrent;
//23. 应急锂电池组1电流
float emergencyLithiumBatteryGroup1Current;
//24. 应急1汇流排电压
float emergency1BusbarVoltage;
} instrument_bus_status;
public:
SystemData(){
//初始化变量全部为0
memset(this, 0, sizeof(SystemData));
};
~SystemData();
void updateSystemData(ccuState data){
fc_mode = data.fc_mode;
fc_status = data.fc_status;
fc_fault_level = data.fc_fault_level;
//功率和时间参数
output_power_limit = data.output_power_limit;
total_generation_time = data.total_generation_time * 0.1;
total_generation_power = data.total_generation_power;
//故障信息
fc_fault_level_1 = data.fault_level_1;
fc_fault_level_2 = data.fault_level_2;
fc_fault_level_3 = data.fault_level_3;
fc_fault_level_4 = data.fault_level_4;
//燃料容量
hydrogen_capacity = static_cast<int>(data.hydrogen_capacity);
liquid_oxygen_capacity = static_cast<int>(data.liquid_oxygen_capacity);
//温度压力参数
palladium_temp = data.palladium_temp;
main_pipe_pressure = data.main_pipe_pressure * 0.01;
aux_pipe_pressure = data.aux_pipe_pressure * 0.01;
//舱室环境参数
cabin_pressure1 = data.cabin_pressure1 * 0.01;
cabin_pressure2 = data.cabin_pressure2 * 0.01;
cabin_temp1 = data.cabin_temp1 * 0.01;
cabin_temp2 = data.cabin_temp2 * 0.01;
cabin_humidity1 = data.cabin_humidity1 * 0.01;
cabin_humidity2 = data.cabin_humidity2 * 0.01;
//火焰探测器
flame_detector1 = data.flame_detector1;
flame_detector2 = data.flame_detector2;
//气体浓度
h2_concentration1 = data.h2_concentration1 * 0.01;
h2_concentration2 = data.h2_concentration2 * 0.01;
h2_concentration3 = data.h2_concentration3 * 0.01;
o2_concentration1 = data.o2_concentration1 * 0.01;
o2_concentration2 = data.o2_concentration2 * 0.01;
ch3oh_concentration1 = data.ch3oh_concentration1 * 0.01;
ch3oh_concentration2 = data.ch3oh_concentration2 * 0.01;
//保留字段
for(int i=0; i<10; i++) {
reserved1[i] = data.reserved1[i];
}
//仪表舱参数
cabin_ox_concentration = data.cabin_ox_concentration * 0.1;
cabin_temperature = static_cast<int16_t>(data.cabin_temperature) * 0.1;
cabin_humidity = data.cabin_humidity * 0.1;
cabin_pressure = data.cabin_pressure * 0.2;
//动力舱参数
power_cabin_ox_concentration = data.power_cabin_ox_concentration * 0.1;
power_cabin_temperature = static_cast<int16_t>(data.power_cabin_temperature) * 0.1;
power_cabin_humidity = data.power_cabin_humidity * 0.1;
power_cabin_pressure = data.power_cabin_pressure * 0.2;
//电池报警标志
for(int i=0; i<6; i++) {
dyn_alarm_flag[i] = data.dyn_alarm_flag[i];
ins_alarm_flag[i] = data.ins_alarm_flag[i];
}
//继电器状态
ins_relay_status1 = data.ins_relay_status1;
ins_relay_status2 = data.ins_relay_status2;
dyn_relay_status1 = data.dyn_relay_status1;
dyn_relay_status2 = data.dyn_relay_status2;
//电池功率参数
ins_max_discharge_power = data.ins_max_discharge_power * 0.05;
dyn_max_discharge_power = data.dyn_max_discharge_power * 0.05;
//电池SOC
ins_soc = static_cast<int>(data.ins_soc);
dyn_soc = static_cast<int>(data.dyn_soc);
//电池能量
ins_total_energy = data.ins_total_energy * 0.1;
dyn_total_energy = data.dyn_total_energy * 0.1;
//电池输入功率
ins_power_input = data.ins_power_input * 0.1;
dyn_power_input = data.dyn_power_input * 0.1;
//电池充放电状态
ins_charge_status = data.ins_charge_status;
dyn_charge_status = data.dyn_charge_status;
//电池电压电流
ins_voltage_link = data.ins_voltage_link * 0.01;
ins_voltage_pack = data.ins_voltage_pack * 0.01;
ins_current = static_cast<int16_t>(data.ins_current) * 0.01;
ins_resistance_pos = data.ins_resistance_pos;
ins_resistance_neg = data.ins_resistance_neg;
dyn_voltage_link = data.dyn_voltage_link * 0.01;
dyn_voltage_pack = data.dyn_voltage_pack * 0.01;
dyn_current = static_cast<int16_t>(data.dyn_current) * 0.05;
dyn_resistance_pos = data.dyn_resistance_pos;
dyn_resistance_neg = data.dyn_resistance_neg;
//紧急状态
ins_emergency_status = data.ins_emergency_status;
dyn_emergency_status = data.dyn_emergency_status;
//保留字段
for(int i=0; i<2; i++) {
reserved2[i] = data.reserved2[i];
}
//SOC门限值
ins_soc_threshold1 = data.ins_soc_threshold1;
ins_soc_threshold2 = data.ins_soc_threshold2;
ins_soc_threshold3 = data.ins_soc_threshold3;
//功率限制值
ins_power_limit1 = data.ins_power_limit1;
ins_power_limit2 = data.ins_power_limit2;
//设备在线状态
device_online_flag1 = data.device_online_flag1;
device_online_flag2 = data.device_online_flag2;
//心跳计数器
heartbeat = data.heartbeat;
}
void updateSystemData(disHighVolBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
power_bus_status.fuelCellCircuitBreaker = data.fuelCellCircuitBreaker == 0x55 ? 1 :
(data.fuelCellCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.powerLithiumBatteryCircuitBreaker = data.powerLithiumBatteryCircuitBreaker == 0x55 ? 1 :
(data.powerLithiumBatteryCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.propulsionMotorCircuitBreaker = data.propulsionMotorCircuitBreaker == 0x55 ? 1 :
(data.propulsionMotorCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker = data.lithiumBatteryGroupInstrumentCircuitBreaker == 0x55 ? 1 :
(data.lithiumBatteryGroupInstrumentCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.dcDc5ModuleCircuitBreaker = data.dcDc5ModuleCircuitBreaker == 0x55 ? 1 :
(data.dcDc5ModuleCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.bowHighVoltageDistributionBoxCircuitBreaker = data.bowHighVoltageDistributionBoxCircuitBreaker == 0x55 ? 1 :
(data.bowHighVoltageDistributionBoxCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.sternFTDevice45CircuitBreaker = data.sternFTDevice45CircuitBreaker == 0x55 ? 1 :
(data.sternFTDevice45CircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.sternRudderSwitch1CircuitBreaker = data.sternRudderSwitch1CircuitBreaker == 0x55 ? 1 :
(data.sternRudderSwitch1CircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.sternRudderSwitch2CircuitBreaker = data.sternRudderSwitch2CircuitBreaker == 0x55 ? 1 :
(data.sternRudderSwitch2CircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.fbReservedCircuitBreaker = data.fbReservedCircuitBreaker == 0x55 ? 1 :
(data.fbReservedCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.tyzReservedCircuitBreaker = data.tyzReservedCircuitBreaker == 0x55 ? 1 :
(data.tyzReservedCircuitBreaker == 0xAA ? 0 : 2);
power_bus_status.reservedCircuitBreaker = data.reservedCircuitBreaker == 0x55 ? 1 :
(data.reservedCircuitBreaker == 0xAA ? 0 : 2);
//模块状态
power_bus_status.dcDcModuleStatus = data.dcDcFaultWord1;
power_bus_status.coolingSystemStatus = data.dcDcFaultWord2;
//绝缘状态
power_bus_status.powerBusInsulationStatus = data.powerBusInsulationStatus == 0x55 ? 0 : 1;
power_bus_status.aBusInsulationStatus = data.aBusInsulationStatus == 0x55 ? 0 : 1;
//电源状态
power_bus_status.meterPowerLossSignal = data.meterPowerLossSignal == 0x55 ? 0 : 1;
power_bus_status.emergencyPowerLossSignal = data.emergencyPowerLossSignal == 0x55 ? 0 : 1;
//温度
power_bus_status.dcDcTemperature = data.dcDcTemperature;
//电压电流参数
power_bus_status.powerBusVoltage = data.powerBusVoltage;
power_bus_status.dcDc5ModuleCurrent = data.dcDc5ModuleCurrent;
power_bus_status.powerBusCurrent = data.powerBusCurrent;
power_bus_status.busbarAVoltage = data.busbarAVoltage;
power_bus_status.propulsionMotorControlBoxCurrent = data.propulsionMotorControlBoxCurrent;
power_bus_status.busbarACurrent = data.busbarACurrent;
power_bus_status.lithiumBatteryGroupMeterCurrent = data.lithiumBatteryGroupMeterCurrent;
power_bus_status.bowHighVoltageDistributionBoxCurrent = data.bowHighVoltageDistributionBoxCurrent;
power_bus_status.sternFTDevice45Current = data.sternFTDevice45Current;
power_bus_status.tyzReservedSwitchCurrent = data.tyzReservedSwitchCurrent;
power_bus_status.sternRudderSwitch1Current = data.sternRudderSwitch1Current;
power_bus_status.reservedCurrent1 = data.reservedCurrent1;
power_bus_status.sternRudderSwitch2Current = data.sternRudderSwitch2Current;
power_bus_status.reservedCurrent2 = data.reservedCurrent2;
power_bus_status.fbReservedSwitchCurrent = data.fbReservedSwitchCurrent;
power_bus_status.reservedCurrent3 = data.reservedCurrent3;
//冷却水压力
power_bus_status.coolWaterPressure = data.coolWaterPressure;
};
void updateSystemData(disHighAVolBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
power_a_bus_status.bowFTDevice123CircuitBreaker = data.bowFTDevice123CircuitBreaker == 0x55 ? 1 :
(data.bowFTDevice123CircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.actuatorCircuitBreaker = data.actuatorCircuitBreaker == 0x55 ? 1 :
(data.actuatorCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.mastSteeringGearControlBoxCircuitBreaker = data.mastSteeringGearControlBoxCircuitBreaker == 0x55 ? 1 :
(data.mastSteeringGearControlBoxCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.xczCircuitBreaker = data.xczCircuitBreaker == 0x55 ? 1 :
(data.xczCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.bowRudderControlBoxCircuitBreaker = data.bowRudderControlBoxCircuitBreaker == 0x55 ? 1 :
(data.bowRudderControlBoxCircuitBreaker == 0xAA ? 0 : 2);
power_a_bus_status.openWaterCoverStartCylinderCircuitBreaker = data.openWaterCoverStartCylinderCircuitBreaker == 0x55 ? 1 :
(data.openWaterCoverStartCylinderCircuitBreaker == 0xAA ? 0 : 2);
//电源状态
power_a_bus_status.instrumentPowerFailureSignal = data.instrumentPowerFailureSignal == 0x55 ? 0 : 1;
power_a_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1;
//浸水报警
power_a_bus_status.waterIngressionAlarm = data.waterIngressionAlarm;
//电压电流参数
power_a_bus_status.busbarBVoltage = data.busbarBVoltage;
power_a_bus_status.busbarBCurrent = data.busbarBCurrent;
power_a_bus_status.bowFTDevice123Current = data.bowFTDevice123Current;
power_a_bus_status.actuatorCurrent = data.actuatorCurrent;
power_a_bus_status.mastSteeringGearControlBoxCurrent = data.mastSteeringGearControlBoxCurrent;
power_a_bus_status.xczCurrent = data.xczCurrent;
power_a_bus_status.bowRudderControlBoxCurrent = data.bowRudderControlBoxCurrent;
power_a_bus_status.openWaterCoverStartCylinderCurrent = data.openWaterCoverStartCylinderCurrent;
};
void updateSystemData(disLowMainBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
instrument_main_bus_status.lithiumBatteryGroupInstrumentCircuitBreaker = data.lithiumBatteryGroupInstrumentCircuitBreaker == 0x55 ? 1 :
(data.lithiumBatteryGroupInstrumentCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.bowLowVoltageDistributionBoxCircuitBreaker = data.bowLowVoltageDistributionBoxCircuitBreaker == 0x55 ? 1 :
(data.bowLowVoltageDistributionBoxCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.unit4InstrumentDC48VCircuitBreaker = data.unit4InstrumentDC48VCircuitBreaker == 0x55 ? 1 :
(data.unit4InstrumentDC48VCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.dcC1DCDistributionPanelCircuitBreaker = data.dcC1DCDistributionPanelCircuitBreaker == 0x55 ? 1 :
(data.dcC1DCDistributionPanelCircuitBreaker == 0xAA ? 0 : 2);
instrument_main_bus_status.reservedCircuitBreaker1 = data.reservedCircuitBreaker1 == 0x55 ? 1 :
(data.reservedCircuitBreaker1 == 0xAA ? 0 : 2);
instrument_main_bus_status.reservedCircuitBreaker2 = data.reservedCircuitBreaker2 == 0x55 ? 1 :
(data.reservedCircuitBreaker2 == 0xAA ? 0 : 2);
instrument_main_bus_status.emergencyLithiumBatteryGroup2CircuitBreaker = data.emergencyLithiumBatteryGroup2CircuitBreaker == 0x55 ? 1 :
(data.emergencyLithiumBatteryGroup2CircuitBreaker == 0xAA ? 0 : 2);
//电源状态
instrument_main_bus_status.instrumentPowerFailureSignal = data.instrumentPowerFailureSignal == 0x55 ? 0 : 1;
instrument_main_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1;
//绝缘状态
instrument_main_bus_status.instrumentBusbarInsulationLow = data.instrumentBusbarInsulationLow == 0x55 ? 0 : 1;
//电压电流参数
instrument_main_bus_status.instrumentBusbarVoltage = data.instrumentBusbarVoltage;
instrument_main_bus_status.bowLowVoltageDistributionBoxCurrent = data.bowLowVoltageDistributionBoxCurrent;
instrument_main_bus_status.dcC1InstrumentDC48VCurrent = data.dcC1InstrumentDC48VCurrent;
instrument_main_bus_status.reservedCurrent1 = data.reservedCurrent1;
instrument_main_bus_status.emergencyLithiumBatteryGroup2Current = data.emergencyLithiumBatteryGroup2Current;
instrument_main_bus_status.lithiumBatteryGroupInstrumentCurrent = data.lithiumBatteryGroupInstrumentCurrent;
instrument_main_bus_status.unit4InstrumentDC48VCurrent = data.unit4InstrumentDC48VCurrent;
instrument_main_bus_status.reservedCurrent2 = data.reservedCurrent2;
instrument_main_bus_status.emergency2BusbarVoltage = data.emergency2BusbarVoltage;
instrument_main_bus_status.compositeEnergyManagementSystemEmergencyDC48VCurrent = data.compositeEnergyManagementSystemEmergencyDC48VCurrent;
instrument_main_bus_status.fuelCellSecuritySystemEmergencyDC48VCurrent = data.fuelCellSecuritySystemEmergencyDC48VCurrent;
instrument_main_bus_status.plcControlPowerCurrent = data.plcControlPowerCurrent;
}
void updateSystemData(disLowBusState data){
//断路器状态 (0x55 1 0xAA 0 0x5A 2)
instrument_bus_status.unit1CircuitBreaker = data.unit1CircuitBreaker == 0x55 ? 1 :
(data.unit1CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.unit2CircuitBreaker = data.unit2CircuitBreaker == 0x55 ? 1 :
(data.unit2CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.unit3CircuitBreaker = data.unit3CircuitBreaker == 0x55 ? 1 :
(data.unit3CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.unit5CircuitBreaker = data.unit5CircuitBreaker == 0x55 ? 1 :
(data.unit5CircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.bowPZDeviceCircuitBreaker = data.bowPZDeviceCircuitBreaker == 0x55 ? 1 :
(data.bowPZDeviceCircuitBreaker == 0xAA ? 0 : 2);
instrument_bus_status.reservedCircuitBreaker1 = data.reservedCircuitBreaker1 == 0x55 ? 1 :
(data.reservedCircuitBreaker1 == 0xAA ? 0 : 2);
instrument_bus_status.reservedCircuitBreaker2 = data.reservedCircuitBreaker2 == 0x55 ? 1 :
(data.reservedCircuitBreaker2 == 0xAA ? 0 : 2);
instrument_bus_status.emergencyLithiumBatteryGroup1CircuitBreaker = data.emergencyLithiumBatteryGroup1CircuitBreaker == 0x55 ? 1 :
(data.emergencyLithiumBatteryGroup1CircuitBreaker == 0xAA ? 0 : 2);
//电源状态
instrument_bus_status.powerFailureSignal = data.powerFailureSignal == 0x55 ? 0 : 1;
instrument_bus_status.emergencyPowerFailureSignal = data.emergencyPowerFailureSignal == 0x55 ? 0 : 1;
//浸水报警
instrument_bus_status.waterIngressionAlarm = data.waterIngressionAlarm;
//电压电流参数
instrument_bus_status.instrumentBusbarVoltage = data.instrumentBusbarVoltage;
instrument_bus_status.instrumentBusbarCurrent = data.instrumentBusbarCurrent;
instrument_bus_status.unit1Current = data.unit1Current;
instrument_bus_status.unit2Current = data.unit2Current;
instrument_bus_status.unit3Current = data.unit3Current;
instrument_bus_status.unit5Current = data.unit5Current;
instrument_bus_status.bowPZDeviceCurrent = data.bowPZDeviceCurrent;
instrument_bus_status.emergencyLithiumBatteryGroup1Current = data.emergencyLithiumBatteryGroup1Current;
instrument_bus_status.emergency1BusbarVoltage = data.emergency1BusbarVoltage;
}
};
#endif
+12 -4
View File
@@ -396,7 +396,9 @@ bool udpComm::sendDisSysCmd(const disHighVolBusCmd cmd)
msg->header.id = DIS_HVBUS_CMD_ID;
msg->header.start1 = DIS_MSG_HEAD1;
msg->header.start2 = DIS_MSG_HEAD2;
msg->header.length = sizeof(disHighVolBusCmd);
//TODO : 阈字节长度固定了,后续会修改
msg->header.length = 18;
// msg->header.length = sizeof(disHighVolBusCmd);
msg->data = cmd;
msgBuf = reinterpret_cast<unsigned char *>(msg);
cc = calculateChecksum(msgBuf,sizeof(msg_disHVBCmd));
@@ -422,7 +424,9 @@ bool udpComm::sendDisSysCmd(const disHighAVolBusCmd cmd)
msg->header.id = DIS_HVBUSA_CMD_ID;
msg->header.start1 = DIS_MSG_HEAD1;
msg->header.start2 = DIS_MSG_HEAD2;
msg->header.length = sizeof(disHighAVolBusCmd);
//TODO : 阈字节长度固定了,后续会修改
msg->header.length = 6;
// msg->header.length = sizeof(disHighAVolBusCmd);
msg->data = cmd;
msgBuf = reinterpret_cast<unsigned char *>(msg);
cc = calculateChecksum(msgBuf,sizeof(msg_disHVBACmd));
@@ -447,7 +451,9 @@ bool udpComm::sendDisSysCmd(const disHighBVolBusCmd cmd)
msg->header.id = DIS_HVBUSB_CMD_ID;
msg->header.start1 = DIS_MSG_HEAD1;
msg->header.start2 = DIS_MSG_HEAD2;
msg->header.length = sizeof(disHighBVolBusCmd);
//TODO : 阈字节长度固定了,后续会修改
msg->header.length = 8;
// msg->header.length = sizeof(disHighBVolBusCmd);
msg->data = cmd;
msgBuf = reinterpret_cast<unsigned char *>(msg);
cc = calculateChecksum(msgBuf,sizeof(msg_disHVBBCmd));
@@ -473,7 +479,9 @@ bool udpComm::sendDisSysCmd(const disLowBusCmd cmd)
msg->header.id = DIS_LVBUS_CMD_ID;
msg->header.start1 = DIS_MSG_HEAD1;
msg->header.start2 = DIS_MSG_HEAD2;
msg->header.length = sizeof(disLowBusCmd);
//TODO : 阈字节长度固定了,后续会修改
msg->header.length = 8;
// msg->header.length = sizeof(disLowBusCmd);
msg->data = cmd;
msgBuf = reinterpret_cast<unsigned char *>(msg);
cc = calculateChecksum(msgBuf,sizeof(msg_disLVBCmd));
+1
View File
@@ -52,6 +52,7 @@ public:
bool sendMsg(const unsigned char* msg,unsigned int size){
// cout << "sendMsgTo" << ccuHost << ":" << ccuPort << endl;
udpScoket->iSendMessageTo((void*) msg, size, ccuPort, ccuHost);
return true;
}
+270
View File
@@ -0,0 +1,270 @@
MessageName,MessageID,DLC,Sender,SignalName,StartBit,Length,Factor,Offset,Min,Max,Unit,Receivers,SignalComment
CSCM_Heartbeat,0x11dd0101,1,CSC,HeartBeat,7,8,1,0,,,,,
CSC_EBAT2_CM_01,0x11aa0901,8,,BMS_WorkStateSet_Order,7,8,1,0,,,,,
CSC_EBAT2_CM_01,0x11aa0901,8,,BMS_MainRelaySet_Order,15,8,1,0,,,,,
CSC_EBAT2_CM_01,0x11aa0901,8,,BMS_PosRelaySet_Order,23,8,1,0,,,,,
CSC_EBAT2_CM_01,0x11aa0901,8,,BMS_DiodeRelaySet_Order,31,8,1,0,,,,,
CSC_EBAT2_CM_01,0x11aa0901,8,,BMS_BatPowerSet_Order,32,16,1,0,,,,,
CSC_EBAT2_CM_01,0x11aa0901,8,,BMS_SelfCheck_Order,55,8,1,0,,,,,
CSC_EBAT2_CM_01,0x11aa0901,8,,BMS_PowerOff_Order,63,8,1,0,,,,,
CSC_EBAT1_CM_01,0x11aa0801,8,,BMS_WorkStateSet_Order,7,8,1,0,,,,,
CSC_EBAT1_CM_01,0x11aa0801,8,,BMS_MainRelaySet_Order,15,8,1,0,,,,,
CSC_EBAT1_CM_01,0x11aa0801,8,,BMS_PosRelaySet_Order,23,8,1,0,,,,,
CSC_EBAT1_CM_01,0x11aa0801,8,,BMS_DiodeRelaySet_Order,31,8,1,0,,,,,
CSC_EBAT1_CM_01,0x11aa0801,8,,BMS_BatPowerSet_Order,32,16,1,0,,,,,
CSC_EBAT1_CM_01,0x11aa0801,8,,BMS_SelfCheck_Order,55,8,1,0,,,,,
CSC_EBAT1_CM_01,0x11aa0801,8,,BMS_PowerOff_Order,63,8,1,0,,,,,
BMS_P_CSC_FB_02,0x11cc0402,6,,BMS_WorkState_FB,7,8,1,0,,,,,
BMS_P_CSC_FB_02,0x11cc0402,6,,BMS_SelfCheck_FB,15,8,1,0,,,,,
BMS_P_CSC_FB_02,0x11cc0402,6,,BMS_BatPowerSet_FB,23,8,1,0,,,,,
BMS_P_CSC_FB_02,0x11cc0402,6,,BMS_MainRelay_FB,31,8,1,0,,,,,
BMS_P_CSC_FB_02,0x11cc0402,6,,BMS_PosDoideRelay_FB,39,8,1,0,,,,,
BMS_P_CSC_FB_02,0x11cc0402,6,,BMS_EmergencyCode_FB,47,8,1,0,,,,,
BMS_P_CSC_FB_01,0x11cc0401,8,,TimeStamp_Year,7,8,1,0,,,,,
BMS_P_CSC_FB_01,0x11cc0401,8,,TimeStamp_Month,15,8,1,0,,,,,
BMS_P_CSC_FB_01,0x11cc0401,8,,TimeStamp_Day,23,8,1,0,,,,,
BMS_P_CSC_FB_01,0x11cc0401,8,,TimeStamp_Hour,31,8,1,0,,,,,
BMS_P_CSC_FB_01,0x11cc0401,8,,TimeStamp_Minute,39,8,1,0,,,,,
BMS_P_CSC_FB_01,0x11cc0401,8,,TimeStamp_Second,47,8,1,0,,,,,
BMS_P_CSC_FB_01,0x11cc0401,8,,TimeStamp_10ms,55,8,1,0,,,,,
BMS_P_CSC_FB_01,0x11cc0401,8,,HeartBeat,63,8,1,0,,,,,
New_Message_57,0x1,8,,New_Signal_240,32,8,1,0,,,,,
New_Message_56,0x0,8,,New_Signal_239,32,8,1,0,,,,,
BMS_I_CSC_FB_14,0x11cc030e,8,BMS_ICM,BMS_M_4Min1O2,0,16,0.1,0,0,30,%,,²ÕÄÚÑõÆøÅ¨¶È
BMS_I_CSC_FB_14,0x11cc030e,8,BMS_ICM,BMS_M_4Min1Temper,16,16,0.1,0,-40,80,,,²ÕÄÚζÈ
BMS_I_CSC_FB_14,0x11cc030e,8,BMS_ICM,BMS_M_4Min1Humidity,32,16,0.1,0,,,%,,²ÕÄÚʪ¶È
BMS_I_CSC_FB_14,0x11cc030e,8,BMS_ICM,BMS_M_4Min1Pressure,48,16,0.2,0,0,450,Kp,,²ÕÄÚ´óÆøÑ¹
BMS_P_CSC_FB_14,0x11cc040e,8,BMS_POWER,BMS_M_4Min1O2,0,16,0.1,0,0,30,%,,²ÕÄÚÑõÆøÅ¨¶È
BMS_P_CSC_FB_14,0x11cc040e,8,BMS_POWER,BMS_M_4Min1Temper,16,16,0.1,0,-40,80,,,²ÕÄÚζÈ
BMS_P_CSC_FB_14,0x11cc040e,8,BMS_POWER,BMS_M_4Min1Humidity,32,16,0.1,0,,,%,,²ÕÄÚʪ¶È
BMS_P_CSC_FB_14,0x11cc040e,8,BMS_POWER,BMS_M_4Min1Pressure,48,16,0.2,0,0,450,Kp,,²ÕÄÚ´óÆøÑ¹
BMS_I_CSC_FB_13_M1,0x11cc031d,8,BMS_ICM,BMS_S_MinCellV,0,16,0.1,0,,,mV,,µ¥Ìåµç³Ø×îµÍµçѹ
BMS_I_CSC_FB_13_M1,0x11cc031d,8,BMS_ICM,BMS_S_MaxCellV,16,16,0.1,0,,,mV,,µ¥Ìåµçѹ×î¸ßµçѹ
BMS_I_CSC_FB_13_M1,0x11cc031d,8,BMS_ICM,BMS_S_MinCellVIdx,39,8,1,0,,,,,×îµÍµçѹ±àºÅ
BMS_I_CSC_FB_13_M1,0x11cc031d,8,BMS_ICM,BMS_S_MaxCellVIdx,47,8,1,0,,,,,×î¸ßµçѹ±àºÅ
BMS_I_CSC_FB_13_M1,0x11cc031d,8,BMS_ICM,BMS_S_CellVMean,48,16,1,0,,,,,µ¥Ì寽¾ùµçѹ
BMS_I_CSC_FB_12_M1,0x11cc031c,6,BMS_ICM,BMS_S_TemperMax,7,8,1,-40,-40,125,¡æ,,µç³Ø×î¸ßζÈ
BMS_I_CSC_FB_12_M1,0x11cc031c,6,BMS_ICM,BMS_S_TemperMaxIdx,15,8,1,0,,,,,µç³Ø×î¸ßζȱàºÅ
BMS_I_CSC_FB_12_M1,0x11cc031c,6,BMS_ICM,BMS_S_TemperMin,23,8,1,-40,-40,125,¡æ,,µç³Ø×îµÍζÈ
BMS_I_CSC_FB_12_M1,0x11cc031c,6,BMS_ICM,BMS_S_TemperMinIdx,31,8,1,0,,,,,µç³Ø×îµÍζȱàºÅ
BMS_I_CSC_FB_12_M1,0x11cc031c,6,BMS_ICM,BMS_S_TemperMean,39,8,1,0,,,,,µç³ØÆ½¾ùζÈ
BMS_I_CSC_FB_12_M1,0x11cc031c,6,BMS_ICM,BMS_S_BalanceStatus,47,8,1,0,,,,,µç³Øµ¥Ìå¾ùºâ״̬
BMS_I_CSC_FB_11_M1,0x11cc031b,8,BMS_ICM,BMS_S_LoadVt,0,16,0.1,0,,,V,,µç³Ø°üµçѹ¸ºÔضË
BMS_I_CSC_FB_11_M1,0x11cc031b,8,BMS_ICM,BMS_S_BattVt,16,16,0.1,0,,,V,,µç³Ø°üµçѹµç³Ø¶Ë
BMS_I_CSC_FB_11_M1,0x11cc031b,8,BMS_ICM,BMS_S_IruPz,32,16,10,0,,,K¦¸,,µç³Ø°üÕý¶Ë¾øÔµµç×è
BMS_I_CSC_FB_11_M1,0x11cc031b,8,BMS_ICM,BMS_S_IruPf,48,16,10,0,,,K¦¸,,µç³Ø°ü¸º¶Ë¾øÔµµç×è
BMS_I_CSC_FB_10_M1,0x11cc031a,6,BMS_ICM,BMS_S_Soc,0,16,0.1,0,,,%,,µç³Ø°üSOC
BMS_I_CSC_FB_10_M1,0x11cc031a,6,BMS_ICM,BMS_S_PosNegRelay_Status,23,8,1,0,,,,,µç³Ø°üÕý¼«¼ÌµçÆ÷״̬Ó븺¼«¼ÌµçÆ÷״̬
BMS_I_CSC_FB_10_M1,0x11cc031a,6,BMS_ICM,BMS_S_OnChgPosNegRelay_Status,31,8,1,0,,,,,BMS_S_OnChgPosNegRelay_Status
BMS_I_CSC_FB_10_M1,0x11cc031a,6,BMS_ICM,BMS_S_DsgCurrent,32,16,0.05,0,,,A,,"µç³Ø°ü·ÅµçµçÁ÷
·ÅµçΪÕý£¬³äµçΪ¸º"
BMS_I_CSC_FB_09_M1,0x11cc0319,7,BMS_ICM,BMS_S_Packidx,7,8,1,0,,,,,µç³Ø°üºÅ
BMS_I_CSC_FB_09_M1,0x11cc0319,7,BMS_ICM,BMS_S_WarnId1,15,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö1
BMS_I_CSC_FB_09_M1,0x11cc0319,7,BMS_ICM,BMS_S_WarnId2,23,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö2
BMS_I_CSC_FB_09_M1,0x11cc0319,7,BMS_ICM,BMS_S_WarnId3,31,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö3
BMS_I_CSC_FB_09_M1,0x11cc0319,7,BMS_ICM,BMS_S_WarnId4,39,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö4
BMS_I_CSC_FB_09_M1,0x11cc0319,7,BMS_ICM,BMS_S_WarnId5,47,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö5
BMS_I_CSC_FB_09_M1,0x11cc0319,7,BMS_ICM,BMS_S_WarnId6,55,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö6
BMS_P_CSC_FB_13_M1,0x11cc041d,8,BMS_POWER,BMS_S_MinCellV,0,16,0.1,0,,,mV,,µ¥Ìåµç³Ø×îµÍµçѹ
BMS_P_CSC_FB_13_M1,0x11cc041d,8,BMS_POWER,BMS_S_MaxCellV,16,16,0.1,0,,,mV,,µ¥Ìåµçѹ×î¸ßµçѹ
BMS_P_CSC_FB_13_M1,0x11cc041d,8,BMS_POWER,BMS_S_MinCellVIdx,39,8,1,0,,,,,×îµÍµçѹ±àºÅ
BMS_P_CSC_FB_13_M1,0x11cc041d,8,BMS_POWER,BMS_S_MaxCellVIdx,47,8,1,0,,,,,×î¸ßµçѹ±àºÅ
BMS_P_CSC_FB_13_M1,0x11cc041d,8,BMS_POWER,BMS_S_CellVMean,48,16,1,0,,,,,µ¥Ì寽¾ùµçѹ
BMS_P_CSC_FB_12_M1,0x11cc041c,6,BMS_POWER,BMS_S_TemperMax,7,8,1,-40,-40,125,¡æ,,µç³Ø×î¸ßζÈ
BMS_P_CSC_FB_12_M1,0x11cc041c,6,BMS_POWER,BMS_S_TemperMaxIdx,15,8,1,0,,,,,µç³Ø×î¸ßζȱàºÅ
BMS_P_CSC_FB_12_M1,0x11cc041c,6,BMS_POWER,BMS_S_TemperMin,23,8,1,-40,-40,125,¡æ,,µç³Ø×îµÍζÈ
BMS_P_CSC_FB_12_M1,0x11cc041c,6,BMS_POWER,BMS_S_TemperMinIdx,31,8,1,0,,,,,µç³Ø×îµÍζȱàºÅ
BMS_P_CSC_FB_12_M1,0x11cc041c,6,BMS_POWER,BMS_S_TemperMean,39,8,1,0,,,,,µç³ØÆ½¾ùζÈ
BMS_P_CSC_FB_12_M1,0x11cc041c,6,BMS_POWER,BMS_S_BalanceStatus,47,8,1,0,,,,,µç³Øµ¥Ìå¾ùºâ״̬
BMS_P_CSC_FB_11_M1,0x11cc041b,8,BMS_POWER,BMS_S_LoadVt,0,16,0.1,0,,,V,,µç³Ø°üµçѹ¸ºÔضË
BMS_P_CSC_FB_11_M1,0x11cc041b,8,BMS_POWER,BMS_S_BattVt,16,16,0.1,0,,,V,,µç³Ø°üµçѹµç³Ø¶Ë
BMS_P_CSC_FB_11_M1,0x11cc041b,8,BMS_POWER,BMS_S_IruPz,32,16,10,0,,,K¦¸,,µç³Ø°üÕý¶Ë¾øÔµµç×è
BMS_P_CSC_FB_11_M1,0x11cc041b,8,BMS_POWER,BMS_S_IruPf,48,16,10,0,,,K¦¸,,µç³Ø°ü¸º¶Ë¾øÔµµç×è
BMS_P_CSC_FB_10_M1,0x11cc041a,4,BMS_POWER,BMS_S_PosNegRelay_Status,7,8,1,0,,,,,µç³Ø°üÕý¼«¼ÌµçÆ÷״̬Ó븺¼«¼ÌµçÆ÷״̬
BMS_P_CSC_FB_10_M1,0x11cc041a,4,BMS_POWER,BMS_S_OnChgPosNegRelay_Status,15,8,1,0,,,,,BMS_S_OnChgPosNegRelay_Status
BMS_P_CSC_FB_10_M1,0x11cc041a,4,BMS_POWER,BMS_S_DsgCurrent,16,16,0.05,0,,,A,,"µç³Ø°ü·ÅµçµçÁ÷
·ÅµçΪÕý£¬³äµçΪ¸º"
BMS_P_CSC_FB_09_M1,0x11cc0419,7,BMS_POWER,BMS_S_Packidx,7,8,1,0,,,,,µç³Ø°üºÅ
BMS_P_CSC_FB_09_M1,0x11cc0419,7,BMS_POWER,BMS_S_WarnId1,15,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö1
BMS_P_CSC_FB_09_M1,0x11cc0419,7,BMS_POWER,BMS_S_WarnId2,23,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö2
BMS_P_CSC_FB_09_M1,0x11cc0419,7,BMS_POWER,BMS_S_WarnId3,31,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö3
BMS_P_CSC_FB_09_M1,0x11cc0419,7,BMS_POWER,BMS_S_WarnId4,39,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö4
BMS_P_CSC_FB_09_M1,0x11cc0419,7,BMS_POWER,BMS_S_WarnId5,47,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö5
BMS_P_CSC_FB_09_M1,0x11cc0419,7,BMS_POWER,BMS_S_WarnId6,55,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö6
BMS_I_CSC_FB_13_M0,0x11cc030d,8,BMS_ICM,BMS_S_MinCellV,0,16,0.1,0,,,mV,,µ¥Ìåµç³Ø×îµÍµçѹ
BMS_I_CSC_FB_13_M0,0x11cc030d,8,BMS_ICM,BMS_S_MaxCellV,16,16,0.1,0,,,mV,,µ¥Ìåµçѹ×î¸ßµçѹ
BMS_I_CSC_FB_13_M0,0x11cc030d,8,BMS_ICM,BMS_S_MinCellVIdx,39,8,1,0,,,,,×îµÍµçѹ±àºÅ
BMS_I_CSC_FB_13_M0,0x11cc030d,8,BMS_ICM,BMS_S_MaxCellVIdx,47,8,1,0,,,,,×î¸ßµçѹ±àºÅ
BMS_I_CSC_FB_13_M0,0x11cc030d,8,BMS_ICM,BMS_S_CellVMean,48,16,1,0,,,,,µ¥Ì寽¾ùµçѹ
BMS_P_CSC_FB_13_M0,0x11cc040d,8,BMS_POWER,BMS_S_MinCellV,0,16,0.1,0,,,mV,,µ¥Ìåµç³Ø×îµÍµçѹ
BMS_P_CSC_FB_13_M0,0x11cc040d,8,BMS_POWER,BMS_S_MaxCellV,16,16,0.1,0,,,mV,,µ¥Ìåµçѹ×î¸ßµçѹ
BMS_P_CSC_FB_13_M0,0x11cc040d,8,BMS_POWER,BMS_S_MinCellVIdx,39,8,1,0,,,,,×îµÍµçѹ±àºÅ
BMS_P_CSC_FB_13_M0,0x11cc040d,8,BMS_POWER,BMS_S_MaxCellVIdx,47,8,1,0,,,,,×î¸ßµçѹ±àºÅ
BMS_P_CSC_FB_13_M0,0x11cc040d,8,BMS_POWER,BMS_S_CellVMean,48,16,1,0,,,,,µ¥Ì寽¾ùµçѹ
BMS_I_CSC_FB_12_M0,0x11cc030c,6,BMS_ICM,BMS_S_TemperMax,7,8,1,-40,-40,125,¡æ,,µç³Ø×î¸ßζÈ
BMS_I_CSC_FB_12_M0,0x11cc030c,6,BMS_ICM,BMS_S_TemperMaxIdx,15,8,1,0,,,,,µç³Ø×î¸ßζȱàºÅ
BMS_I_CSC_FB_12_M0,0x11cc030c,6,BMS_ICM,BMS_S_TemperMin,23,8,1,-40,-40,125,¡æ,,µç³Ø×îµÍζÈ
BMS_I_CSC_FB_12_M0,0x11cc030c,6,BMS_ICM,BMS_S_TemperMinIdx,31,8,1,0,,,,,µç³Ø×îµÍζȱàºÅ
BMS_I_CSC_FB_12_M0,0x11cc030c,6,BMS_ICM,BMS_S_TemperMean,39,8,1,0,,,,,µç³ØÆ½¾ùζÈ
BMS_I_CSC_FB_12_M0,0x11cc030c,6,BMS_ICM,BMS_S_BalanceStatus,47,8,1,0,,,,,µç³Øµ¥Ìå¾ùºâ״̬
BMS_P_CSC_FB_12_M0,0x11cc040c,6,BMS_POWER,BMS_S_TemperMax,7,8,1,-40,-40,125,¡æ,,µç³Ø×î¸ßζÈ
BMS_P_CSC_FB_12_M0,0x11cc040c,6,BMS_POWER,BMS_S_TemperMaxIdx,15,8,1,0,,,,,µç³Ø×î¸ßζȱàºÅ
BMS_P_CSC_FB_12_M0,0x11cc040c,6,BMS_POWER,BMS_S_TemperMin,23,8,1,-40,-40,125,¡æ,,µç³Ø×îµÍζÈ
BMS_P_CSC_FB_12_M0,0x11cc040c,6,BMS_POWER,BMS_S_TemperMinIdx,31,8,1,0,,,,,µç³Ø×îµÍζȱàºÅ
BMS_P_CSC_FB_12_M0,0x11cc040c,6,BMS_POWER,BMS_S_TemperMean,39,8,1,0,,,,,µç³ØÆ½¾ùζÈ
BMS_P_CSC_FB_12_M0,0x11cc040c,6,BMS_POWER,BMS_S_BalanceStatus,47,8,1,0,,,,,µç³Øµ¥Ìå¾ùºâ״̬
BMS_I_CSC_FB_11_M0,0x11cc030b,8,BMS_ICM,BMS_S_LoadVt,0,16,0.1,0,,,V,,µç³Ø°üµçѹ¸ºÔضË
BMS_I_CSC_FB_11_M0,0x11cc030b,8,BMS_ICM,BMS_S_BattVt,16,16,0.1,0,,,V,,µç³Ø°üµçѹµç³Ø¶Ë
BMS_I_CSC_FB_11_M0,0x11cc030b,8,BMS_ICM,BMS_S_IruPz,32,16,10,0,,,K¦¸,,µç³Ø°üÕý¶Ë¾øÔµµç×è
BMS_I_CSC_FB_11_M0,0x11cc030b,8,BMS_ICM,BMS_S_IruPf,48,16,10,0,,,K¦¸,,µç³Ø°ü¸º¶Ë¾øÔµµç×è
BMS_P_CSC_FB_11_M0,0x11cc040b,8,BMS_POWER,BMS_S_LoadVt,0,16,0.1,0,,,V,,µç³Ø°üµçѹ¸ºÔضË
BMS_P_CSC_FB_11_M0,0x11cc040b,8,BMS_POWER,BMS_S_BattVt,16,16,0.1,0,,,V,,µç³Ø°üµçѹµç³Ø¶Ë
BMS_P_CSC_FB_11_M0,0x11cc040b,8,BMS_POWER,BMS_S_IruPz,32,16,10,0,,,K¦¸,,µç³Ø°üÕý¶Ë¾øÔµµç×è
BMS_P_CSC_FB_11_M0,0x11cc040b,8,BMS_POWER,BMS_S_IruPf,48,16,10,0,,,K¦¸,,µç³Ø°ü¸º¶Ë¾øÔµµç×è
BMS_I_CSC_FB_10_M0,0x11cc030a,6,BMS_ICM,BMS_S_Soc,0,16,0.1,0,,,%,,µç³Ø°üSOC
BMS_I_CSC_FB_10_M0,0x11cc030a,6,BMS_ICM,BMS_S_PosNegRelay_Status,23,8,1,0,,,,,µç³Ø°üÕý¼«¼ÌµçÆ÷״̬Ó븺¼«¼ÌµçÆ÷״̬
BMS_I_CSC_FB_10_M0,0x11cc030a,6,BMS_ICM,BMS_S_OnChgPosNegRelay_Status,31,8,1,0,,,,,BMS_S_OnChgPosNegRelay_Status
BMS_I_CSC_FB_10_M0,0x11cc030a,6,BMS_ICM,BMS_S_DsgCurrent,32,16,0.05,0,,,A,,"µç³Ø°ü·ÅµçµçÁ÷
·ÅµçΪÕý£¬³äµçΪ¸º"
BMS_P_CSC_FB_10_M0,0x11cc040a,4,BMS_POWER,BMS_S_PosNegRelay_Status,7,8,1,0,,,,,µç³Ø°üÕý¼«¼ÌµçÆ÷״̬Ó븺¼«¼ÌµçÆ÷״̬
BMS_P_CSC_FB_10_M0,0x11cc040a,4,BMS_POWER,BMS_S_OnChgPosNegRelay_Status,15,8,1,0,,,,,BMS_S_OnChgPosNegRelay_Status
BMS_P_CSC_FB_10_M0,0x11cc040a,4,BMS_POWER,BMS_S_DsgCurrent,16,16,0.05,0,,,A,,"µç³Ø°ü·ÅµçµçÁ÷
·ÅµçΪÕý£¬³äµçΪ¸º"
BMS_I_CSC_FB_09_M0,0x11cc0309,7,BMS_ICM,BMS_S_Packidx,7,8,1,0,,,,,µç³Ø°üºÅ
BMS_I_CSC_FB_09_M0,0x11cc0309,7,BMS_ICM,BMS_S_WarnId1,15,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö1
BMS_I_CSC_FB_09_M0,0x11cc0309,7,BMS_ICM,BMS_S_WarnId2,23,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö2
BMS_I_CSC_FB_09_M0,0x11cc0309,7,BMS_ICM,BMS_S_WarnId3,31,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö3
BMS_I_CSC_FB_09_M0,0x11cc0309,7,BMS_ICM,BMS_S_WarnId4,39,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö4
BMS_I_CSC_FB_09_M0,0x11cc0309,7,BMS_ICM,BMS_S_WarnId5,47,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö5
BMS_I_CSC_FB_09_M0,0x11cc0309,7,BMS_ICM,BMS_S_WarnId6,55,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö6
BMS_P_CSC_FB_09_M0,0x11cc0409,7,BMS_POWER,BMS_S_Packidx,7,8,1,0,,,,,µç³Ø°üºÅ
BMS_P_CSC_FB_09_M0,0x11cc0409,7,BMS_POWER,BMS_S_WarnId1,15,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö1
BMS_P_CSC_FB_09_M0,0x11cc0409,7,BMS_POWER,BMS_S_WarnId2,23,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö2
BMS_P_CSC_FB_09_M0,0x11cc0409,7,BMS_POWER,BMS_S_WarnId3,31,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö3
BMS_P_CSC_FB_09_M0,0x11cc0409,7,BMS_POWER,BMS_S_WarnId4,39,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö4
BMS_P_CSC_FB_09_M0,0x11cc0409,7,BMS_POWER,BMS_S_WarnId5,47,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö5
BMS_P_CSC_FB_09_M0,0x11cc0409,7,BMS_POWER,BMS_S_WarnId6,55,8,1,0,,,,,µç³Ø±¨¾¯±êʶ×Ö6
BMS_I_CSC_FB_08,0x11cc0308,6,BMS_ICM,BMS_M_EnaMaxDsgPower,0,16,0.1,0,,,KW,,µç³ØÔÊÐí×î¸ß·Åµç¹¦ÂÊ
BMS_I_CSC_FB_08,0x11cc0308,6,BMS_ICM,BMS_M_EnaMaxChgPower,16,16,0.1,0,,,KW,,µç³ØÔÊÐíÔÚÏßȼµç³äµç¹¦ÂÊ
BMS_I_CSC_FB_08,0x11cc0308,6,BMS_ICM,BMS_M_NowPower,32,16,0.1,0,,,KW,,µç³Øµ±Ç°½ÓÈ빦ÂÊ״̬
BMS_P_CSC_FB_08,0x11cc0408,6,BMS_POWER,BMS_M_EnaMaxDsgPower,0,16,0.1,0,,,KW,,µç³ØÔÊÐí×î¸ß·Åµç¹¦ÂÊ
BMS_P_CSC_FB_08,0x11cc0408,6,BMS_POWER,BMS_M_EnaMaxChgPower,16,16,0.1,0,,,KW,,µç³ØÔÊÐíÔÚÏßȼµç³äµç¹¦ÂÊ
BMS_P_CSC_FB_08,0x11cc0408,6,BMS_POWER,BMS_M_NowPower,32,16,0.1,0,,,KW,,µç³Øµ±Ç°½ÓÈ빦ÂÊ״̬
BMS_I_CSC_FB_07,0x11cc0307,7,BMS_ICM,BMS_M_WarnId1,7,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö1
BMS_I_CSC_FB_07,0x11cc0307,7,BMS_ICM,BMS_M_WarnId2,15,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö2
BMS_I_CSC_FB_07,0x11cc0307,7,BMS_ICM,BMS_M_WarnId3,23,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö3
BMS_I_CSC_FB_07,0x11cc0307,7,BMS_ICM,BMS_M_WarnId4,31,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö4
BMS_I_CSC_FB_07,0x11cc0307,7,BMS_ICM,BMS_M_WarnId5,39,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö5
BMS_I_CSC_FB_07,0x11cc0307,7,BMS_ICM,BMS_M_WarnId6,47,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö6
BMS_I_CSC_FB_07,0x11cc0307,7,BMS_ICM,BMS_M_WarnPackBits,55,8,1,0,,,,,EMU±¨¾¯µç³Ø°üλÖÃ
BMS_P_CSC_FB_07,0x11cc0407,7,BMS_POWER,BMS_M_WarnId1,7,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö1
BMS_P_CSC_FB_07,0x11cc0407,7,BMS_POWER,BMS_M_WarnId2,15,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö2
BMS_P_CSC_FB_07,0x11cc0407,7,BMS_POWER,BMS_M_WarnId3,23,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö3
BMS_P_CSC_FB_07,0x11cc0407,7,BMS_POWER,BMS_M_WarnId4,31,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö4
BMS_P_CSC_FB_07,0x11cc0407,7,BMS_POWER,BMS_M_WarnId5,39,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö5
BMS_P_CSC_FB_07,0x11cc0407,7,BMS_POWER,BMS_M_WarnId6,47,8,1,0,,,,,EMU±¨¾¯±êʶ×Ö6
BMS_P_CSC_FB_07,0x11cc0407,7,BMS_POWER,BMS_M_WarnPackBits,55,8,1,0,,,,,EMU±¨¾¯µç³Ø°üλÖÃ
BMS_I_CSC_FB_06,0x11cc0306,4,BMS_ICM,BMS_M_TemperMin,7,8,1,-40,-40,125,¡æ,,µç³Øµ¥Ìå×îµÍζÈ
BMS_I_CSC_FB_06,0x11cc0306,4,BMS_ICM,BMS_M_TemperMax,15,8,1,-40,-40,125,¡æ,,µç³Øµ¥Ìå×î¸ßζÈ
BMS_I_CSC_FB_06,0x11cc0306,4,BMS_ICM,BMS_M_TemperMinPackIdx,23,8,1,0,,,,,×îµÍζȰüºÅ
BMS_I_CSC_FB_06,0x11cc0306,4,BMS_ICM,BMS_M_TemperMaxPackIdx,31,8,1,0,,,,,×î¸ßζȰüºÅ
BMS_P_CSC_FB_06,0x11cc0406,4,BMS_POWER,BMS_M_TemperMin,7,8,1,-40,-40,125,¡æ,,µç³Øµ¥Ìå×îµÍζÈ
BMS_P_CSC_FB_06,0x11cc0406,4,BMS_POWER,BMS_M_TemperMax,15,8,1,-40,-40,125,¡æ,,µç³Øµ¥Ìå×î¸ßζÈ
BMS_P_CSC_FB_06,0x11cc0406,4,BMS_POWER,BMS_M_TemperMinPackIdx,23,8,1,0,,,,,×îµÍζȰüºÅ
BMS_P_CSC_FB_06,0x11cc0406,4,BMS_POWER,BMS_M_TemperMaxPackIdx,31,8,1,0,,,,,×î¸ßζȰüºÅ
BMS_I_CSC_FB_05,0x11cc0305,8,BMS_ICM,BMS_M_Current,0,16,0.05,0,,,A,,"EMU·ÅµçµçÁ÷
·ÅµçΪÕý£¬³äµçΪ¸º"
BMS_I_CSC_FB_05,0x11cc0305,8,BMS_ICM,BMS_M_IruPz,16,16,10,0,,,K¦¸,,EMUÕý¶Ë¾øÔµµç×è
BMS_I_CSC_FB_05,0x11cc0305,8,BMS_ICM,BMS_M_IruPf,32,16,10,0,,,K¦¸,,EMU¸º¶Ë¾øÔµµç×è
BMS_I_CSC_FB_05,0x11cc0305,8,BMS_ICM,BMS_M_PackOnLine_Info,55,8,1,0,,,,,µç³Ø°üÔÚÏßÐÅÏ¢
BMS_I_CSC_FB_05,0x11cc0305,8,BMS_ICM,BMS_M_PackConnect_Info,63,8,1,0,,,,,µç³Ø°ü½ÓÈëÐÅÏ¢
BMS_P_CSC_FB_05,0x11cc0405,8,BMS_POWER,BMS_M_Current,0,16,0.05,0,,,A,,"EMU·ÅµçµçÁ÷
·ÅµçΪÕý£¬³äµçΪ¸º"
BMS_P_CSC_FB_05,0x11cc0405,8,BMS_POWER,BMS_M_IruPz,16,16,10,0,,,K¦¸,,EMUÕý¶Ë¾øÔµµç×è
BMS_P_CSC_FB_05,0x11cc0405,8,BMS_POWER,BMS_M_IruPf,32,16,10,0,,,K¦¸,,EMU¸º¶Ë¾øÔµµç×è
BMS_P_CSC_FB_05,0x11cc0405,8,BMS_POWER,BMS_M_PackOnLine_Info,55,8,1,0,,,,,µç³Ø°üÔÚÏßÐÅÏ¢
BMS_P_CSC_FB_05,0x11cc0405,8,BMS_POWER,BMS_M_PackConnect_Info,63,8,1,0,,,,,µç³Ø°ü½ÓÈëÐÅÏ¢
BMS_I_CSC_FB_04,0x11cc0304,8,BMS_ICM,BMS_M_PackMaxVt,0,16,0.1,0,,,V,,µç³Ø°ü×î¸ßµçѹ
BMS_I_CSC_FB_04,0x11cc0304,8,BMS_ICM,BMS_M_PackMaxVtIdx,23,8,1,0,,,,,×î¸ßµçѹ°üºÅ
BMS_I_CSC_FB_04,0x11cc0304,8,BMS_ICM,BMS_M_PackMinVt,24,16,0.1,0,,,V,,µç³Ø°ü×îµÍµçѹ
BMS_I_CSC_FB_04,0x11cc0304,8,BMS_ICM,BMS_M_PackMinVtIdx,47,8,1,0,,,,,µ¥¸öµç³Ø°ü×î´óѹ²î
BMS_I_CSC_FB_04,0x11cc0304,8,BMS_ICM,BMS_M_PackVoltDiff,48,16,0.1,0,,,mV,,µ¥¸öµç³Ø°ü×î´óѹ²î
BMS_P_CSC_FB_04,0x11cc0404,8,BMS_POWER,BMS_M_PackMaxVt,0,16,0.1,0,,,V,,µç³Ø°ü×î¸ßµçѹ
BMS_P_CSC_FB_04,0x11cc0404,8,BMS_POWER,BMS_M_PackMaxVtIdx,23,8,1,0,,,,,×î¸ßµçѹ°üºÅ
BMS_P_CSC_FB_04,0x11cc0404,8,BMS_POWER,BMS_M_PackMinVt,24,16,0.1,0,,,V,,µç³Ø°ü×îµÍµçѹ
BMS_P_CSC_FB_04,0x11cc0404,8,BMS_POWER,BMS_M_PackMinVtIdx,47,8,1,0,,,,,µ¥¸öµç³Ø°ü×î´óѹ²î
BMS_P_CSC_FB_04,0x11cc0404,8,BMS_POWER,BMS_M_PackVoltDiff,48,16,0.1,0,,,mV,,µ¥¸öµç³Ø°ü×î´óѹ²î
BMS_I_CSC_FB_03,0x11cc0303,8,BMS_ICM,BMS_M_PosNegRelay_Status,7,8,1,0,,,,,×Ü¿ØÕý¼«ºÍ×ܿظº¼«¼ÌµçÆ÷״̬
BMS_I_CSC_FB_03,0x11cc0303,8,BMS_ICM,BMS_M_PrechgDiodeRelay_Status,15,8,1,0,,,,,×Ü¿ØÔ¤³äÓë¶þ¼«¹Ü¼ÌµçÆ÷״̬
BMS_I_CSC_FB_03,0x11cc0303,8,BMS_ICM,BMS_M_OnchgPosNegRelay_Status,23,8,1,0,,,,,ÔÚÏß³äµçÕý¼«ÓëÔÚÏß³äµç¸º¼«¼ÌµçÆ÷״̬
BMS_I_CSC_FB_03,0x11cc0303,8,BMS_ICM,BMS_M_Capacity,32,16,0.1,0,,,KWh,,µç³ØµçÁ¿
BMS_I_CSC_FB_03,0x11cc0303,8,BMS_ICM,BMS_M_Soc,48,16,0.1,0,,,%,,SOC
BMS_P_CSC_FB_03,0x11cc0403,8,BMS_POWER,BMS_M_PosNegRelay_Status,7,8,1,0,,,,,×Ü¿ØÕý¼«ºÍ×ܿظº¼«¼ÌµçÆ÷״̬
BMS_P_CSC_FB_03,0x11cc0403,8,BMS_POWER,BMS_M_PrechgDiodeRelay_Status,15,8,1,0,,,,,×Ü¿ØÔ¤³äÓë¶þ¼«¹Ü¼ÌµçÆ÷״̬
BMS_P_CSC_FB_03,0x11cc0403,8,BMS_POWER,BMS_M_OnchgPosNegRelay_Status,23,8,1,0,,,,,ÔÚÏß³äµçÕý¼«ÓëÔÚÏß³äµç¸º¼«¼ÌµçÆ÷״̬
BMS_P_CSC_FB_03,0x11cc0403,8,BMS_POWER,BMS_M_Capacity,32,16,0.1,0,,,KWh,,µç³ØµçÁ¿
BMS_P_CSC_FB_03,0x11cc0403,8,BMS_POWER,BMS_M_Soc,48,16,0.1,0,,,%,,SOC
EBAT2_CSC_FB_01,0x11cc0901,8,EBAT2,BMS_EBAT_Vt,0,16,0.1,0,,,V,,×ܵçѹ
EBAT2_CSC_FB_01,0x11cc0901,8,EBAT2,BMS_EBAT_Current,16,16,0.05,0,,,A,,×ܵçÁ÷
EBAT2_CSC_FB_01,0x11cc0901,8,EBAT2,BMS_EBAT_TemperMax,39,8,1,-40,,,¡æ,,×î¸ßÎÂ
EBAT2_CSC_FB_01,0x11cc0901,8,EBAT2,BMS_EBAT_TemperMin,47,8,1,-40,,,¡æ,,×îµÍÎÂ
EBAT2_CSC_FB_01,0x11cc0901,8,EBAT2,BMS_EBAT_WarnBits,55,8,1,0,,,,,¹ÊÕÏbit
EBAT2_CSC_FB_01,0x11cc0901,8,EBAT2,BMS_EBAT_WorkStatus,63,8,1,0,,,,,µç³Ø×´Ì¬£¨ÊÇ·ñÉϵçBMS£©
BMS_I_CSC_FB_02,0x11cc0302,6,BMS_ICM,BMS_WorkState_FB,7,8,1,0,,,,,
BMS_I_CSC_FB_02,0x11cc0302,6,BMS_ICM,BMS_SelfCheck_FB,15,8,1,0,,,,,
BMS_I_CSC_FB_02,0x11cc0302,6,BMS_ICM,BMS_BatPowerSet_FB,23,8,1,0,,,,,
BMS_I_CSC_FB_02,0x11cc0302,6,BMS_ICM,BMS_MainRelay_FB,31,8,1,0,,,,,
BMS_I_CSC_FB_02,0x11cc0302,6,BMS_ICM,BMS_PosDoideRelay_FB,39,8,1,0,,,,,
BMS_I_CSC_FB_02,0x11cc0302,6,BMS_ICM,BMS_EmergencyCode_FB,47,8,1,0,,,,,
CSC_BMS_P_CM_02,0x11aa0402,8,CSC,BMS_WorkStateSet_Order,7,8,1,0,,,,,
CSC_BMS_P_CM_02,0x11aa0402,8,CSC,BMS_MainRelaySet_Order,15,8,1,0,,,,,
CSC_BMS_P_CM_02,0x11aa0402,8,CSC,BMS_PosRelaySet_Order,23,8,1,0,,,,,
CSC_BMS_P_CM_02,0x11aa0402,8,CSC,BMS_DiodeRelaySet_Order,31,8,1,0,,,,,
CSC_BMS_P_CM_02,0x11aa0402,8,CSC,BMS_BatPowerSet_Order,32,16,1,0,,,,,
CSC_BMS_P_CM_02,0x11aa0402,8,CSC,BMS_SelfCheck_Order,55,8,1,0,,,,,
CSC_BMS_P_CM_02,0x11aa0402,8,CSC,BMS_PowerOff_Order,63,8,1,0,,,,,
CSC_BMS_I_CM_02,0x11aa0302,8,CSC,BMS_WorkStateSet_Order,7,8,1,0,,,,,
CSC_BMS_I_CM_02,0x11aa0302,8,CSC,BMS_MainRelaySet_Order,15,8,1,0,,,,,
CSC_BMS_I_CM_02,0x11aa0302,8,CSC,BMS_PosRelaySet_Order,23,8,1,0,,,,,
CSC_BMS_I_CM_02,0x11aa0302,8,CSC,BMS_DiodeRelaySet_Order,31,8,1,0,,,,,
CSC_BMS_I_CM_02,0x11aa0302,8,CSC,BMS_BatPowerSet_Order,32,16,1,0,,,,,
CSC_BMS_I_CM_02,0x11aa0302,8,CSC,BMS_SelfCheck_Order,55,8,1,0,,,,,
CSC_BMS_I_CM_02,0x11aa0302,8,CSC,BMS_PowerOff_Order,63,8,1,0,,,,,
EBAT1_CSC_FB_01,0x11cc0801,8,EBAT1,BMS_EBAT_Vt,0,16,0.1,0,,,V,,×ܵçѹ
EBAT1_CSC_FB_01,0x11cc0801,8,EBAT1,BMS_EBAT_Current,16,16,0.05,0,,,A,,×ܵçÁ÷
EBAT1_CSC_FB_01,0x11cc0801,8,EBAT1,BMS_EBAT_TemperMax,39,8,1,-40,,,¡æ,,×î¸ßÎÂ
EBAT1_CSC_FB_01,0x11cc0801,8,EBAT1,BMS_EBAT_TemperMin,47,8,1,-40,,,¡æ,,×îµÍÎÂ
EBAT1_CSC_FB_01,0x11cc0801,8,EBAT1,BMS_EBAT_WarnBits,55,8,1,0,,,,,¹ÊÕÏbit
EBAT1_CSC_FB_01,0x11cc0801,8,EBAT1,BMS_EBAT_WorkStatus,63,8,1,0,,,,,µç³Ø×´Ì¬£¨ÊÇ·ñÉϵçBMS£©
CSC_BMS_F_CM_01,0x11aa0501,8,CSC,TimeStamp_Year,7,8,1,0,,,,,
CSC_BMS_F_CM_01,0x11aa0501,8,CSC,TimeStamp_Month,15,8,1,0,,,,,
CSC_BMS_F_CM_01,0x11aa0501,8,CSC,TimeStamp_Day,23,8,1,0,,,,,
CSC_BMS_F_CM_01,0x11aa0501,8,CSC,TimeStamp_Hour,31,8,1,0,,,,,
CSC_BMS_F_CM_01,0x11aa0501,8,CSC,TimeStamp_Minute,39,8,1,0,,,,,
CSC_BMS_F_CM_01,0x11aa0501,8,CSC,TimeStamp_Second,47,8,1,0,,,,,
CSC_BMS_F_CM_01,0x11aa0501,8,CSC,TimeStamp_10ms,55,8,1,0,,,,,
CSC_BMS_F_CM_01,0x11aa0501,8,CSC,HeartBeat,63,8,1,0,,,,,
CSC_BMS_P_CM_01,0x11aa0401,8,CSC,TimeStamp_Year,7,8,1,0,,,,,
CSC_BMS_P_CM_01,0x11aa0401,8,CSC,TimeStamp_Month,15,8,1,0,,,,,
CSC_BMS_P_CM_01,0x11aa0401,8,CSC,TimeStamp_Day,23,8,1,0,,,,,
CSC_BMS_P_CM_01,0x11aa0401,8,CSC,TimeStamp_Hour,31,8,1,0,,,,,
CSC_BMS_P_CM_01,0x11aa0401,8,CSC,TimeStamp_Minute,39,8,1,0,,,,,
CSC_BMS_P_CM_01,0x11aa0401,8,CSC,TimeStamp_Second,47,8,1,0,,,,,
CSC_BMS_P_CM_01,0x11aa0401,8,CSC,TimeStamp_10ms,55,8,1,0,,,,,
CSC_BMS_P_CM_01,0x11aa0401,8,CSC,HeartBeat,63,8,1,0,,,,,
CSC_BMS_I_CM_01,0x11aa0301,8,CSC,TimeStamp_Year,7,8,1,0,,,,,
CSC_BMS_I_CM_01,0x11aa0301,8,CSC,TimeStamp_Month,15,8,1,0,,,,,
CSC_BMS_I_CM_01,0x11aa0301,8,CSC,TimeStamp_Day,23,8,1,0,,,,,
CSC_BMS_I_CM_01,0x11aa0301,8,CSC,TimeStamp_Hour,31,8,1,0,,,,,
CSC_BMS_I_CM_01,0x11aa0301,8,CSC,TimeStamp_Minute,39,8,1,0,,,,,
CSC_BMS_I_CM_01,0x11aa0301,8,CSC,TimeStamp_Second,47,8,1,0,,,,,
CSC_BMS_I_CM_01,0x11aa0301,8,CSC,TimeStamp_10ms,55,8,1,0,,,,,
CSC_BMS_I_CM_01,0x11aa0301,8,CSC,HeartBeat,63,8,1,0,,,,,
BMS_I_CSC_FB_01,0x11cc0301,8,BMS_ICM,TimeStamp_Year,7,8,1,0,,,,,
BMS_I_CSC_FB_01,0x11cc0301,8,BMS_ICM,TimeStamp_Month,15,8,1,0,,,,,
BMS_I_CSC_FB_01,0x11cc0301,8,BMS_ICM,TimeStamp_Day,23,8,1,0,,,,,
BMS_I_CSC_FB_01,0x11cc0301,8,BMS_ICM,TimeStamp_Hour,31,8,1,0,,,,,
BMS_I_CSC_FB_01,0x11cc0301,8,BMS_ICM,TimeStamp_Minute,39,8,1,0,,,,,
BMS_I_CSC_FB_01,0x11cc0301,8,BMS_ICM,TimeStamp_Second,47,8,1,0,,,,,
BMS_I_CSC_FB_01,0x11cc0301,8,BMS_ICM,TimeStamp_10ms,55,8,1,0,,,,,
BMS_I_CSC_FB_01,0x11cc0301,8,BMS_ICM,HeartBeat,63,8,1,0,,,,,
1 MessageName MessageID DLC Sender SignalName StartBit Length Factor Offset Min Max Unit Receivers SignalComment
2 CSCM_Heartbeat 0x11dd0101 1 CSC HeartBeat 7 8 1 0
3 CSC_EBAT2_CM_01 0x11aa0901 8 BMS_WorkStateSet_Order 7 8 1 0
4 CSC_EBAT2_CM_01 0x11aa0901 8 BMS_MainRelaySet_Order 15 8 1 0
5 CSC_EBAT2_CM_01 0x11aa0901 8 BMS_PosRelaySet_Order 23 8 1 0
6 CSC_EBAT2_CM_01 0x11aa0901 8 BMS_DiodeRelaySet_Order 31 8 1 0
7 CSC_EBAT2_CM_01 0x11aa0901 8 BMS_BatPowerSet_Order 32 16 1 0
8 CSC_EBAT2_CM_01 0x11aa0901 8 BMS_SelfCheck_Order 55 8 1 0
9 CSC_EBAT2_CM_01 0x11aa0901 8 BMS_PowerOff_Order 63 8 1 0
10 CSC_EBAT1_CM_01 0x11aa0801 8 BMS_WorkStateSet_Order 7 8 1 0
11 CSC_EBAT1_CM_01 0x11aa0801 8 BMS_MainRelaySet_Order 15 8 1 0
12 CSC_EBAT1_CM_01 0x11aa0801 8 BMS_PosRelaySet_Order 23 8 1 0
13 CSC_EBAT1_CM_01 0x11aa0801 8 BMS_DiodeRelaySet_Order 31 8 1 0
14 CSC_EBAT1_CM_01 0x11aa0801 8 BMS_BatPowerSet_Order 32 16 1 0
15 CSC_EBAT1_CM_01 0x11aa0801 8 BMS_SelfCheck_Order 55 8 1 0
16 CSC_EBAT1_CM_01 0x11aa0801 8 BMS_PowerOff_Order 63 8 1 0
17 BMS_P_CSC_FB_02 0x11cc0402 6 BMS_WorkState_FB 7 8 1 0
18 BMS_P_CSC_FB_02 0x11cc0402 6 BMS_SelfCheck_FB 15 8 1 0
19 BMS_P_CSC_FB_02 0x11cc0402 6 BMS_BatPowerSet_FB 23 8 1 0
20 BMS_P_CSC_FB_02 0x11cc0402 6 BMS_MainRelay_FB 31 8 1 0
21 BMS_P_CSC_FB_02 0x11cc0402 6 BMS_PosDoideRelay_FB 39 8 1 0
22 BMS_P_CSC_FB_02 0x11cc0402 6 BMS_EmergencyCode_FB 47 8 1 0
23 BMS_P_CSC_FB_01 0x11cc0401 8 TimeStamp_Year 7 8 1 0
24 BMS_P_CSC_FB_01 0x11cc0401 8 TimeStamp_Month 15 8 1 0
25 BMS_P_CSC_FB_01 0x11cc0401 8 TimeStamp_Day 23 8 1 0
26 BMS_P_CSC_FB_01 0x11cc0401 8 TimeStamp_Hour 31 8 1 0
27 BMS_P_CSC_FB_01 0x11cc0401 8 TimeStamp_Minute 39 8 1 0
28 BMS_P_CSC_FB_01 0x11cc0401 8 TimeStamp_Second 47 8 1 0
29 BMS_P_CSC_FB_01 0x11cc0401 8 TimeStamp_10ms 55 8 1 0
30 BMS_P_CSC_FB_01 0x11cc0401 8 HeartBeat 63 8 1 0
31 New_Message_57 0x1 8 New_Signal_240 32 8 1 0
32 New_Message_56 0x0 8 New_Signal_239 32 8 1 0
33 BMS_I_CSC_FB_14 0x11cc030e 8 BMS_ICM BMS_M_4Min1O2 0 16 0.1 0 0 30 % ²ÕÄÚÑõÆøÅ¨¶È
34 BMS_I_CSC_FB_14 0x11cc030e 8 BMS_ICM BMS_M_4Min1Temper 16 16 0.1 0 -40 80 ²ÕÄÚζÈ
35 BMS_I_CSC_FB_14 0x11cc030e 8 BMS_ICM BMS_M_4Min1Humidity 32 16 0.1 0 % ²ÕÄÚʪ¶È
36 BMS_I_CSC_FB_14 0x11cc030e 8 BMS_ICM BMS_M_4Min1Pressure 48 16 0.2 0 0 450 Kp ²ÕÄÚ´óÆøÑ¹
37 BMS_P_CSC_FB_14 0x11cc040e 8 BMS_POWER BMS_M_4Min1O2 0 16 0.1 0 0 30 % ²ÕÄÚÑõÆøÅ¨¶È
38 BMS_P_CSC_FB_14 0x11cc040e 8 BMS_POWER BMS_M_4Min1Temper 16 16 0.1 0 -40 80 ²ÕÄÚζÈ
39 BMS_P_CSC_FB_14 0x11cc040e 8 BMS_POWER BMS_M_4Min1Humidity 32 16 0.1 0 % ²ÕÄÚʪ¶È
40 BMS_P_CSC_FB_14 0x11cc040e 8 BMS_POWER BMS_M_4Min1Pressure 48 16 0.2 0 0 450 Kp ²ÕÄÚ´óÆøÑ¹
41 BMS_I_CSC_FB_13_M1 0x11cc031d 8 BMS_ICM BMS_S_MinCellV 0 16 0.1 0 mV µ¥Ìåµç³Ø×îµÍµçѹ
42 BMS_I_CSC_FB_13_M1 0x11cc031d 8 BMS_ICM BMS_S_MaxCellV 16 16 0.1 0 mV µ¥Ìåµçѹ×î¸ßµçѹ
43 BMS_I_CSC_FB_13_M1 0x11cc031d 8 BMS_ICM BMS_S_MinCellVIdx 39 8 1 0 ×îµÍµçѹ±àºÅ
44 BMS_I_CSC_FB_13_M1 0x11cc031d 8 BMS_ICM BMS_S_MaxCellVIdx 47 8 1 0 ×î¸ßµçѹ±àºÅ
45 BMS_I_CSC_FB_13_M1 0x11cc031d 8 BMS_ICM BMS_S_CellVMean 48 16 1 0 µ¥Ì寽¾ùµçѹ
46 BMS_I_CSC_FB_12_M1 0x11cc031c 6 BMS_ICM BMS_S_TemperMax 7 8 1 -40 -40 125 ¡æ µç³Ø×î¸ßζÈ
47 BMS_I_CSC_FB_12_M1 0x11cc031c 6 BMS_ICM BMS_S_TemperMaxIdx 15 8 1 0 µç³Ø×î¸ßζȱàºÅ
48 BMS_I_CSC_FB_12_M1 0x11cc031c 6 BMS_ICM BMS_S_TemperMin 23 8 1 -40 -40 125 ¡æ µç³Ø×îµÍζÈ
49 BMS_I_CSC_FB_12_M1 0x11cc031c 6 BMS_ICM BMS_S_TemperMinIdx 31 8 1 0 µç³Ø×îµÍζȱàºÅ
50 BMS_I_CSC_FB_12_M1 0x11cc031c 6 BMS_ICM BMS_S_TemperMean 39 8 1 0 µç³ØÆ½¾ùζÈ
51 BMS_I_CSC_FB_12_M1 0x11cc031c 6 BMS_ICM BMS_S_BalanceStatus 47 8 1 0 µç³Øµ¥Ìå¾ùºâ״̬
52 BMS_I_CSC_FB_11_M1 0x11cc031b 8 BMS_ICM BMS_S_LoadVt 0 16 0.1 0 V µç³Ø°üµçѹ¸ºÔضË
53 BMS_I_CSC_FB_11_M1 0x11cc031b 8 BMS_ICM BMS_S_BattVt 16 16 0.1 0 V µç³Ø°üµçѹµç³Ø¶Ë
54 BMS_I_CSC_FB_11_M1 0x11cc031b 8 BMS_ICM BMS_S_IruPz 32 16 10 0 K¦¸ µç³Ø°üÕý¶Ë¾øÔµµç×è
55 BMS_I_CSC_FB_11_M1 0x11cc031b 8 BMS_ICM BMS_S_IruPf 48 16 10 0 K¦¸ µç³Ø°ü¸º¶Ë¾øÔµµç×è
56 BMS_I_CSC_FB_10_M1 0x11cc031a 6 BMS_ICM BMS_S_Soc 0 16 0.1 0 % µç³Ø°üSOC
57 BMS_I_CSC_FB_10_M1 0x11cc031a 6 BMS_ICM BMS_S_PosNegRelay_Status 23 8 1 0 µç³Ø°üÕý¼«¼ÌµçÆ÷״̬Ó븺¼«¼ÌµçÆ÷״̬
58 BMS_I_CSC_FB_10_M1 0x11cc031a 6 BMS_ICM BMS_S_OnChgPosNegRelay_Status 31 8 1 0 BMS_S_OnChgPosNegRelay_Status
59 BMS_I_CSC_FB_10_M1 0x11cc031a 6 BMS_ICM BMS_S_DsgCurrent 32 16 0.05 0 A µç³Ø°ü·ÅµçµçÁ÷ ·ÅµçΪÕý£¬³äµçΪ¸º
60 BMS_I_CSC_FB_09_M1 0x11cc0319 7 BMS_ICM BMS_S_Packidx 7 8 1 0 µç³Ø°üºÅ
61 BMS_I_CSC_FB_09_M1 0x11cc0319 7 BMS_ICM BMS_S_WarnId1 15 8 1 0 µç³Ø±¨¾¯±êʶ×Ö1
62 BMS_I_CSC_FB_09_M1 0x11cc0319 7 BMS_ICM BMS_S_WarnId2 23 8 1 0 µç³Ø±¨¾¯±êʶ×Ö2
63 BMS_I_CSC_FB_09_M1 0x11cc0319 7 BMS_ICM BMS_S_WarnId3 31 8 1 0 µç³Ø±¨¾¯±êʶ×Ö3
64 BMS_I_CSC_FB_09_M1 0x11cc0319 7 BMS_ICM BMS_S_WarnId4 39 8 1 0 µç³Ø±¨¾¯±êʶ×Ö4
65 BMS_I_CSC_FB_09_M1 0x11cc0319 7 BMS_ICM BMS_S_WarnId5 47 8 1 0 µç³Ø±¨¾¯±êʶ×Ö5
66 BMS_I_CSC_FB_09_M1 0x11cc0319 7 BMS_ICM BMS_S_WarnId6 55 8 1 0 µç³Ø±¨¾¯±êʶ×Ö6
67 BMS_P_CSC_FB_13_M1 0x11cc041d 8 BMS_POWER BMS_S_MinCellV 0 16 0.1 0 mV µ¥Ìåµç³Ø×îµÍµçѹ
68 BMS_P_CSC_FB_13_M1 0x11cc041d 8 BMS_POWER BMS_S_MaxCellV 16 16 0.1 0 mV µ¥Ìåµçѹ×î¸ßµçѹ
69 BMS_P_CSC_FB_13_M1 0x11cc041d 8 BMS_POWER BMS_S_MinCellVIdx 39 8 1 0 ×îµÍµçѹ±àºÅ
70 BMS_P_CSC_FB_13_M1 0x11cc041d 8 BMS_POWER BMS_S_MaxCellVIdx 47 8 1 0 ×î¸ßµçѹ±àºÅ
71 BMS_P_CSC_FB_13_M1 0x11cc041d 8 BMS_POWER BMS_S_CellVMean 48 16 1 0 µ¥Ì寽¾ùµçѹ
72 BMS_P_CSC_FB_12_M1 0x11cc041c 6 BMS_POWER BMS_S_TemperMax 7 8 1 -40 -40 125 ¡æ µç³Ø×î¸ßζÈ
73 BMS_P_CSC_FB_12_M1 0x11cc041c 6 BMS_POWER BMS_S_TemperMaxIdx 15 8 1 0 µç³Ø×î¸ßζȱàºÅ
74 BMS_P_CSC_FB_12_M1 0x11cc041c 6 BMS_POWER BMS_S_TemperMin 23 8 1 -40 -40 125 ¡æ µç³Ø×îµÍζÈ
75 BMS_P_CSC_FB_12_M1 0x11cc041c 6 BMS_POWER BMS_S_TemperMinIdx 31 8 1 0 µç³Ø×îµÍζȱàºÅ
76 BMS_P_CSC_FB_12_M1 0x11cc041c 6 BMS_POWER BMS_S_TemperMean 39 8 1 0 µç³ØÆ½¾ùζÈ
77 BMS_P_CSC_FB_12_M1 0x11cc041c 6 BMS_POWER BMS_S_BalanceStatus 47 8 1 0 µç³Øµ¥Ìå¾ùºâ״̬
78 BMS_P_CSC_FB_11_M1 0x11cc041b 8 BMS_POWER BMS_S_LoadVt 0 16 0.1 0 V µç³Ø°üµçѹ¸ºÔضË
79 BMS_P_CSC_FB_11_M1 0x11cc041b 8 BMS_POWER BMS_S_BattVt 16 16 0.1 0 V µç³Ø°üµçѹµç³Ø¶Ë
80 BMS_P_CSC_FB_11_M1 0x11cc041b 8 BMS_POWER BMS_S_IruPz 32 16 10 0 K¦¸ µç³Ø°üÕý¶Ë¾øÔµµç×è
81 BMS_P_CSC_FB_11_M1 0x11cc041b 8 BMS_POWER BMS_S_IruPf 48 16 10 0 K¦¸ µç³Ø°ü¸º¶Ë¾øÔµµç×è
82 BMS_P_CSC_FB_10_M1 0x11cc041a 4 BMS_POWER BMS_S_PosNegRelay_Status 7 8 1 0 µç³Ø°üÕý¼«¼ÌµçÆ÷״̬Ó븺¼«¼ÌµçÆ÷״̬
83 BMS_P_CSC_FB_10_M1 0x11cc041a 4 BMS_POWER BMS_S_OnChgPosNegRelay_Status 15 8 1 0 BMS_S_OnChgPosNegRelay_Status
84 BMS_P_CSC_FB_10_M1 0x11cc041a 4 BMS_POWER BMS_S_DsgCurrent 16 16 0.05 0 A µç³Ø°ü·ÅµçµçÁ÷ ·ÅµçΪÕý£¬³äµçΪ¸º
85 BMS_P_CSC_FB_09_M1 0x11cc0419 7 BMS_POWER BMS_S_Packidx 7 8 1 0 µç³Ø°üºÅ
86 BMS_P_CSC_FB_09_M1 0x11cc0419 7 BMS_POWER BMS_S_WarnId1 15 8 1 0 µç³Ø±¨¾¯±êʶ×Ö1
87 BMS_P_CSC_FB_09_M1 0x11cc0419 7 BMS_POWER BMS_S_WarnId2 23 8 1 0 µç³Ø±¨¾¯±êʶ×Ö2
88 BMS_P_CSC_FB_09_M1 0x11cc0419 7 BMS_POWER BMS_S_WarnId3 31 8 1 0 µç³Ø±¨¾¯±êʶ×Ö3
89 BMS_P_CSC_FB_09_M1 0x11cc0419 7 BMS_POWER BMS_S_WarnId4 39 8 1 0 µç³Ø±¨¾¯±êʶ×Ö4
90 BMS_P_CSC_FB_09_M1 0x11cc0419 7 BMS_POWER BMS_S_WarnId5 47 8 1 0 µç³Ø±¨¾¯±êʶ×Ö5
91 BMS_P_CSC_FB_09_M1 0x11cc0419 7 BMS_POWER BMS_S_WarnId6 55 8 1 0 µç³Ø±¨¾¯±êʶ×Ö6
92 BMS_I_CSC_FB_13_M0 0x11cc030d 8 BMS_ICM BMS_S_MinCellV 0 16 0.1 0 mV µ¥Ìåµç³Ø×îµÍµçѹ
93 BMS_I_CSC_FB_13_M0 0x11cc030d 8 BMS_ICM BMS_S_MaxCellV 16 16 0.1 0 mV µ¥Ìåµçѹ×î¸ßµçѹ
94 BMS_I_CSC_FB_13_M0 0x11cc030d 8 BMS_ICM BMS_S_MinCellVIdx 39 8 1 0 ×îµÍµçѹ±àºÅ
95 BMS_I_CSC_FB_13_M0 0x11cc030d 8 BMS_ICM BMS_S_MaxCellVIdx 47 8 1 0 ×î¸ßµçѹ±àºÅ
96 BMS_I_CSC_FB_13_M0 0x11cc030d 8 BMS_ICM BMS_S_CellVMean 48 16 1 0 µ¥Ì寽¾ùµçѹ
97 BMS_P_CSC_FB_13_M0 0x11cc040d 8 BMS_POWER BMS_S_MinCellV 0 16 0.1 0 mV µ¥Ìåµç³Ø×îµÍµçѹ
98 BMS_P_CSC_FB_13_M0 0x11cc040d 8 BMS_POWER BMS_S_MaxCellV 16 16 0.1 0 mV µ¥Ìåµçѹ×î¸ßµçѹ
99 BMS_P_CSC_FB_13_M0 0x11cc040d 8 BMS_POWER BMS_S_MinCellVIdx 39 8 1 0 ×îµÍµçѹ±àºÅ
100 BMS_P_CSC_FB_13_M0 0x11cc040d 8 BMS_POWER BMS_S_MaxCellVIdx 47 8 1 0 ×î¸ßµçѹ±àºÅ
101 BMS_P_CSC_FB_13_M0 0x11cc040d 8 BMS_POWER BMS_S_CellVMean 48 16 1 0 µ¥Ì寽¾ùµçѹ
102 BMS_I_CSC_FB_12_M0 0x11cc030c 6 BMS_ICM BMS_S_TemperMax 7 8 1 -40 -40 125 ¡æ µç³Ø×î¸ßζÈ
103 BMS_I_CSC_FB_12_M0 0x11cc030c 6 BMS_ICM BMS_S_TemperMaxIdx 15 8 1 0 µç³Ø×î¸ßζȱàºÅ
104 BMS_I_CSC_FB_12_M0 0x11cc030c 6 BMS_ICM BMS_S_TemperMin 23 8 1 -40 -40 125 ¡æ µç³Ø×îµÍζÈ
105 BMS_I_CSC_FB_12_M0 0x11cc030c 6 BMS_ICM BMS_S_TemperMinIdx 31 8 1 0 µç³Ø×îµÍζȱàºÅ
106 BMS_I_CSC_FB_12_M0 0x11cc030c 6 BMS_ICM BMS_S_TemperMean 39 8 1 0 µç³ØÆ½¾ùζÈ
107 BMS_I_CSC_FB_12_M0 0x11cc030c 6 BMS_ICM BMS_S_BalanceStatus 47 8 1 0 µç³Øµ¥Ìå¾ùºâ״̬
108 BMS_P_CSC_FB_12_M0 0x11cc040c 6 BMS_POWER BMS_S_TemperMax 7 8 1 -40 -40 125 ¡æ µç³Ø×î¸ßζÈ
109 BMS_P_CSC_FB_12_M0 0x11cc040c 6 BMS_POWER BMS_S_TemperMaxIdx 15 8 1 0 µç³Ø×î¸ßζȱàºÅ
110 BMS_P_CSC_FB_12_M0 0x11cc040c 6 BMS_POWER BMS_S_TemperMin 23 8 1 -40 -40 125 ¡æ µç³Ø×îµÍζÈ
111 BMS_P_CSC_FB_12_M0 0x11cc040c 6 BMS_POWER BMS_S_TemperMinIdx 31 8 1 0 µç³Ø×îµÍζȱàºÅ
112 BMS_P_CSC_FB_12_M0 0x11cc040c 6 BMS_POWER BMS_S_TemperMean 39 8 1 0 µç³ØÆ½¾ùζÈ
113 BMS_P_CSC_FB_12_M0 0x11cc040c 6 BMS_POWER BMS_S_BalanceStatus 47 8 1 0 µç³Øµ¥Ìå¾ùºâ״̬
114 BMS_I_CSC_FB_11_M0 0x11cc030b 8 BMS_ICM BMS_S_LoadVt 0 16 0.1 0 V µç³Ø°üµçѹ¸ºÔضË
115 BMS_I_CSC_FB_11_M0 0x11cc030b 8 BMS_ICM BMS_S_BattVt 16 16 0.1 0 V µç³Ø°üµçѹµç³Ø¶Ë
116 BMS_I_CSC_FB_11_M0 0x11cc030b 8 BMS_ICM BMS_S_IruPz 32 16 10 0 K¦¸ µç³Ø°üÕý¶Ë¾øÔµµç×è
117 BMS_I_CSC_FB_11_M0 0x11cc030b 8 BMS_ICM BMS_S_IruPf 48 16 10 0 K¦¸ µç³Ø°ü¸º¶Ë¾øÔµµç×è
118 BMS_P_CSC_FB_11_M0 0x11cc040b 8 BMS_POWER BMS_S_LoadVt 0 16 0.1 0 V µç³Ø°üµçѹ¸ºÔضË
119 BMS_P_CSC_FB_11_M0 0x11cc040b 8 BMS_POWER BMS_S_BattVt 16 16 0.1 0 V µç³Ø°üµçѹµç³Ø¶Ë
120 BMS_P_CSC_FB_11_M0 0x11cc040b 8 BMS_POWER BMS_S_IruPz 32 16 10 0 K¦¸ µç³Ø°üÕý¶Ë¾øÔµµç×è
121 BMS_P_CSC_FB_11_M0 0x11cc040b 8 BMS_POWER BMS_S_IruPf 48 16 10 0 K¦¸ µç³Ø°ü¸º¶Ë¾øÔµµç×è
122 BMS_I_CSC_FB_10_M0 0x11cc030a 6 BMS_ICM BMS_S_Soc 0 16 0.1 0 % µç³Ø°üSOC
123 BMS_I_CSC_FB_10_M0 0x11cc030a 6 BMS_ICM BMS_S_PosNegRelay_Status 23 8 1 0 µç³Ø°üÕý¼«¼ÌµçÆ÷״̬Ó븺¼«¼ÌµçÆ÷״̬
124 BMS_I_CSC_FB_10_M0 0x11cc030a 6 BMS_ICM BMS_S_OnChgPosNegRelay_Status 31 8 1 0 BMS_S_OnChgPosNegRelay_Status
125 BMS_I_CSC_FB_10_M0 0x11cc030a 6 BMS_ICM BMS_S_DsgCurrent 32 16 0.05 0 A µç³Ø°ü·ÅµçµçÁ÷ ·ÅµçΪÕý£¬³äµçΪ¸º
126 BMS_P_CSC_FB_10_M0 0x11cc040a 4 BMS_POWER BMS_S_PosNegRelay_Status 7 8 1 0 µç³Ø°üÕý¼«¼ÌµçÆ÷״̬Ó븺¼«¼ÌµçÆ÷״̬
127 BMS_P_CSC_FB_10_M0 0x11cc040a 4 BMS_POWER BMS_S_OnChgPosNegRelay_Status 15 8 1 0 BMS_S_OnChgPosNegRelay_Status
128 BMS_P_CSC_FB_10_M0 0x11cc040a 4 BMS_POWER BMS_S_DsgCurrent 16 16 0.05 0 A µç³Ø°ü·ÅµçµçÁ÷ ·ÅµçΪÕý£¬³äµçΪ¸º
129 BMS_I_CSC_FB_09_M0 0x11cc0309 7 BMS_ICM BMS_S_Packidx 7 8 1 0 µç³Ø°üºÅ
130 BMS_I_CSC_FB_09_M0 0x11cc0309 7 BMS_ICM BMS_S_WarnId1 15 8 1 0 µç³Ø±¨¾¯±êʶ×Ö1
131 BMS_I_CSC_FB_09_M0 0x11cc0309 7 BMS_ICM BMS_S_WarnId2 23 8 1 0 µç³Ø±¨¾¯±êʶ×Ö2
132 BMS_I_CSC_FB_09_M0 0x11cc0309 7 BMS_ICM BMS_S_WarnId3 31 8 1 0 µç³Ø±¨¾¯±êʶ×Ö3
133 BMS_I_CSC_FB_09_M0 0x11cc0309 7 BMS_ICM BMS_S_WarnId4 39 8 1 0 µç³Ø±¨¾¯±êʶ×Ö4
134 BMS_I_CSC_FB_09_M0 0x11cc0309 7 BMS_ICM BMS_S_WarnId5 47 8 1 0 µç³Ø±¨¾¯±êʶ×Ö5
135 BMS_I_CSC_FB_09_M0 0x11cc0309 7 BMS_ICM BMS_S_WarnId6 55 8 1 0 µç³Ø±¨¾¯±êʶ×Ö6
136 BMS_P_CSC_FB_09_M0 0x11cc0409 7 BMS_POWER BMS_S_Packidx 7 8 1 0 µç³Ø°üºÅ
137 BMS_P_CSC_FB_09_M0 0x11cc0409 7 BMS_POWER BMS_S_WarnId1 15 8 1 0 µç³Ø±¨¾¯±êʶ×Ö1
138 BMS_P_CSC_FB_09_M0 0x11cc0409 7 BMS_POWER BMS_S_WarnId2 23 8 1 0 µç³Ø±¨¾¯±êʶ×Ö2
139 BMS_P_CSC_FB_09_M0 0x11cc0409 7 BMS_POWER BMS_S_WarnId3 31 8 1 0 µç³Ø±¨¾¯±êʶ×Ö3
140 BMS_P_CSC_FB_09_M0 0x11cc0409 7 BMS_POWER BMS_S_WarnId4 39 8 1 0 µç³Ø±¨¾¯±êʶ×Ö4
141 BMS_P_CSC_FB_09_M0 0x11cc0409 7 BMS_POWER BMS_S_WarnId5 47 8 1 0 µç³Ø±¨¾¯±êʶ×Ö5
142 BMS_P_CSC_FB_09_M0 0x11cc0409 7 BMS_POWER BMS_S_WarnId6 55 8 1 0 µç³Ø±¨¾¯±êʶ×Ö6
143 BMS_I_CSC_FB_08 0x11cc0308 6 BMS_ICM BMS_M_EnaMaxDsgPower 0 16 0.1 0 KW µç³ØÔÊÐí×î¸ß·Åµç¹¦ÂÊ
144 BMS_I_CSC_FB_08 0x11cc0308 6 BMS_ICM BMS_M_EnaMaxChgPower 16 16 0.1 0 KW µç³ØÔÊÐíÔÚÏßȼµç³äµç¹¦ÂÊ
145 BMS_I_CSC_FB_08 0x11cc0308 6 BMS_ICM BMS_M_NowPower 32 16 0.1 0 KW µç³Øµ±Ç°½ÓÈ빦ÂÊ״̬
146 BMS_P_CSC_FB_08 0x11cc0408 6 BMS_POWER BMS_M_EnaMaxDsgPower 0 16 0.1 0 KW µç³ØÔÊÐí×î¸ß·Åµç¹¦ÂÊ
147 BMS_P_CSC_FB_08 0x11cc0408 6 BMS_POWER BMS_M_EnaMaxChgPower 16 16 0.1 0 KW µç³ØÔÊÐíÔÚÏßȼµç³äµç¹¦ÂÊ
148 BMS_P_CSC_FB_08 0x11cc0408 6 BMS_POWER BMS_M_NowPower 32 16 0.1 0 KW µç³Øµ±Ç°½ÓÈ빦ÂÊ״̬
149 BMS_I_CSC_FB_07 0x11cc0307 7 BMS_ICM BMS_M_WarnId1 7 8 1 0 EMU±¨¾¯±êʶ×Ö1
150 BMS_I_CSC_FB_07 0x11cc0307 7 BMS_ICM BMS_M_WarnId2 15 8 1 0 EMU±¨¾¯±êʶ×Ö2
151 BMS_I_CSC_FB_07 0x11cc0307 7 BMS_ICM BMS_M_WarnId3 23 8 1 0 EMU±¨¾¯±êʶ×Ö3
152 BMS_I_CSC_FB_07 0x11cc0307 7 BMS_ICM BMS_M_WarnId4 31 8 1 0 EMU±¨¾¯±êʶ×Ö4
153 BMS_I_CSC_FB_07 0x11cc0307 7 BMS_ICM BMS_M_WarnId5 39 8 1 0 EMU±¨¾¯±êʶ×Ö5
154 BMS_I_CSC_FB_07 0x11cc0307 7 BMS_ICM BMS_M_WarnId6 47 8 1 0 EMU±¨¾¯±êʶ×Ö6
155 BMS_I_CSC_FB_07 0x11cc0307 7 BMS_ICM BMS_M_WarnPackBits 55 8 1 0 EMU±¨¾¯µç³Ø°üλÖÃ
156 BMS_P_CSC_FB_07 0x11cc0407 7 BMS_POWER BMS_M_WarnId1 7 8 1 0 EMU±¨¾¯±êʶ×Ö1
157 BMS_P_CSC_FB_07 0x11cc0407 7 BMS_POWER BMS_M_WarnId2 15 8 1 0 EMU±¨¾¯±êʶ×Ö2
158 BMS_P_CSC_FB_07 0x11cc0407 7 BMS_POWER BMS_M_WarnId3 23 8 1 0 EMU±¨¾¯±êʶ×Ö3
159 BMS_P_CSC_FB_07 0x11cc0407 7 BMS_POWER BMS_M_WarnId4 31 8 1 0 EMU±¨¾¯±êʶ×Ö4
160 BMS_P_CSC_FB_07 0x11cc0407 7 BMS_POWER BMS_M_WarnId5 39 8 1 0 EMU±¨¾¯±êʶ×Ö5
161 BMS_P_CSC_FB_07 0x11cc0407 7 BMS_POWER BMS_M_WarnId6 47 8 1 0 EMU±¨¾¯±êʶ×Ö6
162 BMS_P_CSC_FB_07 0x11cc0407 7 BMS_POWER BMS_M_WarnPackBits 55 8 1 0 EMU±¨¾¯µç³Ø°üλÖÃ
163 BMS_I_CSC_FB_06 0x11cc0306 4 BMS_ICM BMS_M_TemperMin 7 8 1 -40 -40 125 ¡æ µç³Øµ¥Ìå×îµÍζÈ
164 BMS_I_CSC_FB_06 0x11cc0306 4 BMS_ICM BMS_M_TemperMax 15 8 1 -40 -40 125 ¡æ µç³Øµ¥Ìå×î¸ßζÈ
165 BMS_I_CSC_FB_06 0x11cc0306 4 BMS_ICM BMS_M_TemperMinPackIdx 23 8 1 0 ×îµÍζȰüºÅ
166 BMS_I_CSC_FB_06 0x11cc0306 4 BMS_ICM BMS_M_TemperMaxPackIdx 31 8 1 0 ×î¸ßζȰüºÅ
167 BMS_P_CSC_FB_06 0x11cc0406 4 BMS_POWER BMS_M_TemperMin 7 8 1 -40 -40 125 ¡æ µç³Øµ¥Ìå×îµÍζÈ
168 BMS_P_CSC_FB_06 0x11cc0406 4 BMS_POWER BMS_M_TemperMax 15 8 1 -40 -40 125 ¡æ µç³Øµ¥Ìå×î¸ßζÈ
169 BMS_P_CSC_FB_06 0x11cc0406 4 BMS_POWER BMS_M_TemperMinPackIdx 23 8 1 0 ×îµÍζȰüºÅ
170 BMS_P_CSC_FB_06 0x11cc0406 4 BMS_POWER BMS_M_TemperMaxPackIdx 31 8 1 0 ×î¸ßζȰüºÅ
171 BMS_I_CSC_FB_05 0x11cc0305 8 BMS_ICM BMS_M_Current 0 16 0.05 0 A EMU·ÅµçµçÁ÷ ·ÅµçΪÕý£¬³äµçΪ¸º
172 BMS_I_CSC_FB_05 0x11cc0305 8 BMS_ICM BMS_M_IruPz 16 16 10 0 K¦¸ EMUÕý¶Ë¾øÔµµç×è
173 BMS_I_CSC_FB_05 0x11cc0305 8 BMS_ICM BMS_M_IruPf 32 16 10 0 K¦¸ EMU¸º¶Ë¾øÔµµç×è
174 BMS_I_CSC_FB_05 0x11cc0305 8 BMS_ICM BMS_M_PackOnLine_Info 55 8 1 0 µç³Ø°üÔÚÏßÐÅÏ¢
175 BMS_I_CSC_FB_05 0x11cc0305 8 BMS_ICM BMS_M_PackConnect_Info 63 8 1 0 µç³Ø°ü½ÓÈëÐÅÏ¢
176 BMS_P_CSC_FB_05 0x11cc0405 8 BMS_POWER BMS_M_Current 0 16 0.05 0 A EMU·ÅµçµçÁ÷ ·ÅµçΪÕý£¬³äµçΪ¸º
177 BMS_P_CSC_FB_05 0x11cc0405 8 BMS_POWER BMS_M_IruPz 16 16 10 0 K¦¸ EMUÕý¶Ë¾øÔµµç×è
178 BMS_P_CSC_FB_05 0x11cc0405 8 BMS_POWER BMS_M_IruPf 32 16 10 0 K¦¸ EMU¸º¶Ë¾øÔµµç×è
179 BMS_P_CSC_FB_05 0x11cc0405 8 BMS_POWER BMS_M_PackOnLine_Info 55 8 1 0 µç³Ø°üÔÚÏßÐÅÏ¢
180 BMS_P_CSC_FB_05 0x11cc0405 8 BMS_POWER BMS_M_PackConnect_Info 63 8 1 0 µç³Ø°ü½ÓÈëÐÅÏ¢
181 BMS_I_CSC_FB_04 0x11cc0304 8 BMS_ICM BMS_M_PackMaxVt 0 16 0.1 0 V µç³Ø°ü×î¸ßµçѹ
182 BMS_I_CSC_FB_04 0x11cc0304 8 BMS_ICM BMS_M_PackMaxVtIdx 23 8 1 0 ×î¸ßµçѹ°üºÅ
183 BMS_I_CSC_FB_04 0x11cc0304 8 BMS_ICM BMS_M_PackMinVt 24 16 0.1 0 V µç³Ø°ü×îµÍµçѹ
184 BMS_I_CSC_FB_04 0x11cc0304 8 BMS_ICM BMS_M_PackMinVtIdx 47 8 1 0 µ¥¸öµç³Ø°ü×î´óѹ²î
185 BMS_I_CSC_FB_04 0x11cc0304 8 BMS_ICM BMS_M_PackVoltDiff 48 16 0.1 0 mV µ¥¸öµç³Ø°ü×î´óѹ²î
186 BMS_P_CSC_FB_04 0x11cc0404 8 BMS_POWER BMS_M_PackMaxVt 0 16 0.1 0 V µç³Ø°ü×î¸ßµçѹ
187 BMS_P_CSC_FB_04 0x11cc0404 8 BMS_POWER BMS_M_PackMaxVtIdx 23 8 1 0 ×î¸ßµçѹ°üºÅ
188 BMS_P_CSC_FB_04 0x11cc0404 8 BMS_POWER BMS_M_PackMinVt 24 16 0.1 0 V µç³Ø°ü×îµÍµçѹ
189 BMS_P_CSC_FB_04 0x11cc0404 8 BMS_POWER BMS_M_PackMinVtIdx 47 8 1 0 µ¥¸öµç³Ø°ü×î´óѹ²î
190 BMS_P_CSC_FB_04 0x11cc0404 8 BMS_POWER BMS_M_PackVoltDiff 48 16 0.1 0 mV µ¥¸öµç³Ø°ü×î´óѹ²î
191 BMS_I_CSC_FB_03 0x11cc0303 8 BMS_ICM BMS_M_PosNegRelay_Status 7 8 1 0 ×Ü¿ØÕý¼«ºÍ×ܿظº¼«¼ÌµçÆ÷״̬
192 BMS_I_CSC_FB_03 0x11cc0303 8 BMS_ICM BMS_M_PrechgDiodeRelay_Status 15 8 1 0 ×Ü¿ØÔ¤³äÓë¶þ¼«¹Ü¼ÌµçÆ÷״̬
193 BMS_I_CSC_FB_03 0x11cc0303 8 BMS_ICM BMS_M_OnchgPosNegRelay_Status 23 8 1 0 ÔÚÏß³äµçÕý¼«ÓëÔÚÏß³äµç¸º¼«¼ÌµçÆ÷״̬
194 BMS_I_CSC_FB_03 0x11cc0303 8 BMS_ICM BMS_M_Capacity 32 16 0.1 0 KWh µç³ØµçÁ¿
195 BMS_I_CSC_FB_03 0x11cc0303 8 BMS_ICM BMS_M_Soc 48 16 0.1 0 % SOC
196 BMS_P_CSC_FB_03 0x11cc0403 8 BMS_POWER BMS_M_PosNegRelay_Status 7 8 1 0 ×Ü¿ØÕý¼«ºÍ×ܿظº¼«¼ÌµçÆ÷״̬
197 BMS_P_CSC_FB_03 0x11cc0403 8 BMS_POWER BMS_M_PrechgDiodeRelay_Status 15 8 1 0 ×Ü¿ØÔ¤³äÓë¶þ¼«¹Ü¼ÌµçÆ÷״̬
198 BMS_P_CSC_FB_03 0x11cc0403 8 BMS_POWER BMS_M_OnchgPosNegRelay_Status 23 8 1 0 ÔÚÏß³äµçÕý¼«ÓëÔÚÏß³äµç¸º¼«¼ÌµçÆ÷״̬
199 BMS_P_CSC_FB_03 0x11cc0403 8 BMS_POWER BMS_M_Capacity 32 16 0.1 0 KWh µç³ØµçÁ¿
200 BMS_P_CSC_FB_03 0x11cc0403 8 BMS_POWER BMS_M_Soc 48 16 0.1 0 % SOC
201 EBAT2_CSC_FB_01 0x11cc0901 8 EBAT2 BMS_EBAT_Vt 0 16 0.1 0 V ×ܵçѹ
202 EBAT2_CSC_FB_01 0x11cc0901 8 EBAT2 BMS_EBAT_Current 16 16 0.05 0 A ×ܵçÁ÷
203 EBAT2_CSC_FB_01 0x11cc0901 8 EBAT2 BMS_EBAT_TemperMax 39 8 1 -40 ¡æ ×î¸ßÎÂ
204 EBAT2_CSC_FB_01 0x11cc0901 8 EBAT2 BMS_EBAT_TemperMin 47 8 1 -40 ¡æ ×îµÍÎÂ
205 EBAT2_CSC_FB_01 0x11cc0901 8 EBAT2 BMS_EBAT_WarnBits 55 8 1 0 ¹ÊÕÏbit
206 EBAT2_CSC_FB_01 0x11cc0901 8 EBAT2 BMS_EBAT_WorkStatus 63 8 1 0 µç³Ø×´Ì¬£¨ÊÇ·ñÉϵçBMS£©
207 BMS_I_CSC_FB_02 0x11cc0302 6 BMS_ICM BMS_WorkState_FB 7 8 1 0
208 BMS_I_CSC_FB_02 0x11cc0302 6 BMS_ICM BMS_SelfCheck_FB 15 8 1 0
209 BMS_I_CSC_FB_02 0x11cc0302 6 BMS_ICM BMS_BatPowerSet_FB 23 8 1 0
210 BMS_I_CSC_FB_02 0x11cc0302 6 BMS_ICM BMS_MainRelay_FB 31 8 1 0
211 BMS_I_CSC_FB_02 0x11cc0302 6 BMS_ICM BMS_PosDoideRelay_FB 39 8 1 0
212 BMS_I_CSC_FB_02 0x11cc0302 6 BMS_ICM BMS_EmergencyCode_FB 47 8 1 0
213 CSC_BMS_P_CM_02 0x11aa0402 8 CSC BMS_WorkStateSet_Order 7 8 1 0
214 CSC_BMS_P_CM_02 0x11aa0402 8 CSC BMS_MainRelaySet_Order 15 8 1 0
215 CSC_BMS_P_CM_02 0x11aa0402 8 CSC BMS_PosRelaySet_Order 23 8 1 0
216 CSC_BMS_P_CM_02 0x11aa0402 8 CSC BMS_DiodeRelaySet_Order 31 8 1 0
217 CSC_BMS_P_CM_02 0x11aa0402 8 CSC BMS_BatPowerSet_Order 32 16 1 0
218 CSC_BMS_P_CM_02 0x11aa0402 8 CSC BMS_SelfCheck_Order 55 8 1 0
219 CSC_BMS_P_CM_02 0x11aa0402 8 CSC BMS_PowerOff_Order 63 8 1 0
220 CSC_BMS_I_CM_02 0x11aa0302 8 CSC BMS_WorkStateSet_Order 7 8 1 0
221 CSC_BMS_I_CM_02 0x11aa0302 8 CSC BMS_MainRelaySet_Order 15 8 1 0
222 CSC_BMS_I_CM_02 0x11aa0302 8 CSC BMS_PosRelaySet_Order 23 8 1 0
223 CSC_BMS_I_CM_02 0x11aa0302 8 CSC BMS_DiodeRelaySet_Order 31 8 1 0
224 CSC_BMS_I_CM_02 0x11aa0302 8 CSC BMS_BatPowerSet_Order 32 16 1 0
225 CSC_BMS_I_CM_02 0x11aa0302 8 CSC BMS_SelfCheck_Order 55 8 1 0
226 CSC_BMS_I_CM_02 0x11aa0302 8 CSC BMS_PowerOff_Order 63 8 1 0
227 EBAT1_CSC_FB_01 0x11cc0801 8 EBAT1 BMS_EBAT_Vt 0 16 0.1 0 V ×ܵçѹ
228 EBAT1_CSC_FB_01 0x11cc0801 8 EBAT1 BMS_EBAT_Current 16 16 0.05 0 A ×ܵçÁ÷
229 EBAT1_CSC_FB_01 0x11cc0801 8 EBAT1 BMS_EBAT_TemperMax 39 8 1 -40 ¡æ ×î¸ßÎÂ
230 EBAT1_CSC_FB_01 0x11cc0801 8 EBAT1 BMS_EBAT_TemperMin 47 8 1 -40 ¡æ ×îµÍÎÂ
231 EBAT1_CSC_FB_01 0x11cc0801 8 EBAT1 BMS_EBAT_WarnBits 55 8 1 0 ¹ÊÕÏbit
232 EBAT1_CSC_FB_01 0x11cc0801 8 EBAT1 BMS_EBAT_WorkStatus 63 8 1 0 µç³Ø×´Ì¬£¨ÊÇ·ñÉϵçBMS£©
233 CSC_BMS_F_CM_01 0x11aa0501 8 CSC TimeStamp_Year 7 8 1 0
234 CSC_BMS_F_CM_01 0x11aa0501 8 CSC TimeStamp_Month 15 8 1 0
235 CSC_BMS_F_CM_01 0x11aa0501 8 CSC TimeStamp_Day 23 8 1 0
236 CSC_BMS_F_CM_01 0x11aa0501 8 CSC TimeStamp_Hour 31 8 1 0
237 CSC_BMS_F_CM_01 0x11aa0501 8 CSC TimeStamp_Minute 39 8 1 0
238 CSC_BMS_F_CM_01 0x11aa0501 8 CSC TimeStamp_Second 47 8 1 0
239 CSC_BMS_F_CM_01 0x11aa0501 8 CSC TimeStamp_10ms 55 8 1 0
240 CSC_BMS_F_CM_01 0x11aa0501 8 CSC HeartBeat 63 8 1 0
241 CSC_BMS_P_CM_01 0x11aa0401 8 CSC TimeStamp_Year 7 8 1 0
242 CSC_BMS_P_CM_01 0x11aa0401 8 CSC TimeStamp_Month 15 8 1 0
243 CSC_BMS_P_CM_01 0x11aa0401 8 CSC TimeStamp_Day 23 8 1 0
244 CSC_BMS_P_CM_01 0x11aa0401 8 CSC TimeStamp_Hour 31 8 1 0
245 CSC_BMS_P_CM_01 0x11aa0401 8 CSC TimeStamp_Minute 39 8 1 0
246 CSC_BMS_P_CM_01 0x11aa0401 8 CSC TimeStamp_Second 47 8 1 0
247 CSC_BMS_P_CM_01 0x11aa0401 8 CSC TimeStamp_10ms 55 8 1 0
248 CSC_BMS_P_CM_01 0x11aa0401 8 CSC HeartBeat 63 8 1 0
249 CSC_BMS_I_CM_01 0x11aa0301 8 CSC TimeStamp_Year 7 8 1 0
250 CSC_BMS_I_CM_01 0x11aa0301 8 CSC TimeStamp_Month 15 8 1 0
251 CSC_BMS_I_CM_01 0x11aa0301 8 CSC TimeStamp_Day 23 8 1 0
252 CSC_BMS_I_CM_01 0x11aa0301 8 CSC TimeStamp_Hour 31 8 1 0
253 CSC_BMS_I_CM_01 0x11aa0301 8 CSC TimeStamp_Minute 39 8 1 0
254 CSC_BMS_I_CM_01 0x11aa0301 8 CSC TimeStamp_Second 47 8 1 0
255 CSC_BMS_I_CM_01 0x11aa0301 8 CSC TimeStamp_10ms 55 8 1 0
256 CSC_BMS_I_CM_01 0x11aa0301 8 CSC HeartBeat 63 8 1 0
257 BMS_I_CSC_FB_01 0x11cc0301 8 BMS_ICM TimeStamp_Year 7 8 1 0
258 BMS_I_CSC_FB_01 0x11cc0301 8 BMS_ICM TimeStamp_Month 15 8 1 0
259 BMS_I_CSC_FB_01 0x11cc0301 8 BMS_ICM TimeStamp_Day 23 8 1 0
260 BMS_I_CSC_FB_01 0x11cc0301 8 BMS_ICM TimeStamp_Hour 31 8 1 0
261 BMS_I_CSC_FB_01 0x11cc0301 8 BMS_ICM TimeStamp_Minute 39 8 1 0
262 BMS_I_CSC_FB_01 0x11cc0301 8 BMS_ICM TimeStamp_Second 47 8 1 0
263 BMS_I_CSC_FB_01 0x11cc0301 8 BMS_ICM TimeStamp_10ms 55 8 1 0
264 BMS_I_CSC_FB_01 0x11cc0301 8 BMS_ICM HeartBeat 63 8 1 0
+653
View File
@@ -0,0 +1,653 @@
VERSION ""
NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
CAT_DEF_
CAT_
FILTER
BA_DEF_DEF_
EV_DATA_
ENVVAR_DATA_
SGTYPE_
SGTYPE_VAL_
BA_DEF_SGTYPE_
BA_SGTYPE_
SIG_TYPE_REF_
VAL_TABLE_
SIG_GROUP_
SIG_VALTYPE_
SIGTYPE_VALTYPE_
BO_TX_BU_
BA_DEF_REL_
BA_REL_
BA_DEF_DEF_REL_
BU_SG_REL_
BU_EV_REL_
BU_BO_REL_
SG_MUL_VAL_
BS_:
BU_: EBAT2 EBAT1 DB2 DB1 BMS_FC BMS_POWER BMS_ICM CSC UNIT4B UNIT4A
BO_ 3221225472 VECTOR__INDEPENDENT_SIG_MSG: 0 Vector__XXX
SG_ New_Signal_118 : 0|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ New_Signal_117 : 0|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ New_Signal_116 : 0|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ New_Signal_115 : 0|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ New_Signal_114 : 0|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ New_Signal_113 : 0|8@1+ (1,0) [0|0] "" Vector__XXX
BO_ 2447180033 CSCM_Heartbeat: 1 CSC
SG_ HeartBeat : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2443839745 CSC_EBAT2_CM_01: 8 Vector__XXX
SG_ BMS_PowerOff_Order : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_SelfCheck_Order : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_BatPowerSet_Order : 32|16@1+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_DiodeRelaySet_Order : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_PosRelaySet_Order : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_MainRelaySet_Order : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_WorkStateSet_Order : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2443839489 CSC_EBAT1_CM_01: 8 Vector__XXX
SG_ BMS_PowerOff_Order : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_SelfCheck_Order : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_BatPowerSet_Order : 32|16@1+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_DiodeRelaySet_Order : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_PosRelaySet_Order : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_MainRelaySet_Order : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_WorkStateSet_Order : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066690 BMS_P_CSC_FB_02: 6 Vector__XXX
SG_ BMS_EmergencyCode_FB : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_PosDoideRelay_FB : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_MainRelay_FB : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_BatPowerSet_FB : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_SelfCheck_FB : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_WorkState_FB : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066689 BMS_P_CSC_FB_01: 8 Vector__XXX
SG_ HeartBeat : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_10ms : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Second : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Minute : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Hour : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Day : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Month : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Year : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 1 New_Message_57: 8 Vector__XXX
SG_ New_Signal_240 : 32|8@1+ (1,0) [0|0] "" Vector__XXX
BO_ 0 New_Message_56: 8 Vector__XXX
SG_ New_Signal_239 : 32|8@1+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066446 BMS_I_CSC_FB_14: 8 BMS_ICM
SG_ BMS_M_4Min1Pressure : 48|16@1- (0.2,0) [0|450] "Kp" Vector__XXX
SG_ BMS_M_4Min1Humidity : 32|16@1+ (0.1,0) [0|0] "%" Vector__XXX
SG_ BMS_M_4Min1Temper : 16|16@1- (0.1,0) [-40|80] "" Vector__XXX
SG_ BMS_M_4Min1O2 : 0|16@1+ (0.1,0) [0|30] "%" Vector__XXX
BO_ 2446066702 BMS_P_CSC_FB_14: 8 BMS_POWER
SG_ BMS_M_4Min1Pressure : 48|16@1- (0.2,0) [0|450] "Kp" Vector__XXX
SG_ BMS_M_4Min1Humidity : 32|16@1+ (0.1,0) [0|0] "%" Vector__XXX
SG_ BMS_M_4Min1Temper : 16|16@1- (0.1,0) [-40|80] "" Vector__XXX
SG_ BMS_M_4Min1O2 : 0|16@1+ (0.1,0) [0|30] "%" Vector__XXX
BO_ 2446066461 BMS_I_CSC_FB_13_M1: 8 BMS_ICM
SG_ BMS_S_CellVMean : 48|16@1+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MaxCellVIdx : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MinCellVIdx : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MaxCellV : 16|16@1+ (0.1,0) [0|0] "mV" Vector__XXX
SG_ BMS_S_MinCellV : 0|16@1+ (0.1,0) [0|0] "mV" Vector__XXX
BO_ 2446066460 BMS_I_CSC_FB_12_M1: 6 BMS_ICM
SG_ BMS_S_BalanceStatus : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMean : 39|8@0- (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMinIdx : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMin : 23|8@0- (1,-40) [-40|125] "℃" Vector__XXX
SG_ BMS_S_TemperMaxIdx : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMax : 7|8@0- (1,-40) [-40|125] "℃" Vector__XXX
BO_ 2446066459 BMS_I_CSC_FB_11_M1: 8 BMS_ICM
SG_ BMS_S_IruPf : 48|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_S_IruPz : 32|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_S_BattVt : 16|16@1+ (0.1,0) [0|0] "V" Vector__XXX
SG_ BMS_S_LoadVt : 0|16@1+ (0.1,0) [0|0] "V" Vector__XXX
BO_ 2446066458 BMS_I_CSC_FB_10_M1: 6 BMS_ICM
SG_ BMS_S_Soc : 0|16@1+ (0.1,0) [0|0] "%" Vector__XXX
SG_ BMS_S_DsgCurrent : 32|16@1- (0.05,0) [0|0] "A" Vector__XXX
SG_ BMS_S_OnChgPosNegRelay_Status : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_PosNegRelay_Status : 23|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066457 BMS_I_CSC_FB_09_M1: 7 BMS_ICM
SG_ BMS_S_WarnId6 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId5 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId4 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId3 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId2 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId1 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_Packidx : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066717 BMS_P_CSC_FB_13_M1: 8 BMS_POWER
SG_ BMS_S_CellVMean : 48|16@1+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MaxCellVIdx : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MinCellVIdx : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MaxCellV : 16|16@1+ (0.1,0) [0|0] "mV" Vector__XXX
SG_ BMS_S_MinCellV : 0|16@1+ (0.1,0) [0|0] "mV" Vector__XXX
BO_ 2446066716 BMS_P_CSC_FB_12_M1: 6 BMS_POWER
SG_ BMS_S_BalanceStatus : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMean : 39|8@0- (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMinIdx : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMin : 23|8@0- (1,-40) [-40|125] "℃" Vector__XXX
SG_ BMS_S_TemperMaxIdx : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMax : 7|8@0- (1,-40) [-40|125] "℃" Vector__XXX
BO_ 2446066715 BMS_P_CSC_FB_11_M1: 8 BMS_POWER
SG_ BMS_S_IruPf : 48|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_S_IruPz : 32|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_S_BattVt : 16|16@1+ (0.1,0) [0|0] "V" Vector__XXX
SG_ BMS_S_LoadVt : 0|16@1+ (0.1,0) [0|0] "V" Vector__XXX
BO_ 2446066714 BMS_P_CSC_FB_10_M1: 4 BMS_POWER
SG_ BMS_S_DsgCurrent : 16|16@1- (0.05,0) [0|0] "A" Vector__XXX
SG_ BMS_S_OnChgPosNegRelay_Status : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_PosNegRelay_Status : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066713 BMS_P_CSC_FB_09_M1: 7 BMS_POWER
SG_ BMS_S_WarnId6 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId5 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId4 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId3 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId2 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId1 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_Packidx : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066445 BMS_I_CSC_FB_13_M0: 8 BMS_ICM
SG_ BMS_S_CellVMean : 48|16@1+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MaxCellVIdx : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MinCellVIdx : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MaxCellV : 16|16@1+ (0.1,0) [0|0] "mV" Vector__XXX
SG_ BMS_S_MinCellV : 0|16@1+ (0.1,0) [0|0] "mV" Vector__XXX
BO_ 2446066701 BMS_P_CSC_FB_13_M0: 8 BMS_POWER
SG_ BMS_S_CellVMean : 48|16@1+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MaxCellVIdx : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MinCellVIdx : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_MaxCellV : 16|16@1+ (0.1,0) [0|0] "mV" Vector__XXX
SG_ BMS_S_MinCellV : 0|16@1+ (0.1,0) [0|0] "mV" Vector__XXX
BO_ 2446066444 BMS_I_CSC_FB_12_M0: 6 BMS_ICM
SG_ BMS_S_BalanceStatus : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMean : 39|8@0- (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMinIdx : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMin : 23|8@0- (1,-40) [-40|125] "℃" Vector__XXX
SG_ BMS_S_TemperMaxIdx : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMax : 7|8@0- (1,-40) [-40|125] "℃" Vector__XXX
BO_ 2446066700 BMS_P_CSC_FB_12_M0: 6 BMS_POWER
SG_ BMS_S_BalanceStatus : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMean : 39|8@0- (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMinIdx : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMin : 23|8@0- (1,-40) [-40|125] "℃" Vector__XXX
SG_ BMS_S_TemperMaxIdx : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_TemperMax : 7|8@0- (1,-40) [-40|125] "℃" Vector__XXX
BO_ 2446066443 BMS_I_CSC_FB_11_M0: 8 BMS_ICM
SG_ BMS_S_IruPf : 48|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_S_IruPz : 32|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_S_BattVt : 16|16@1+ (0.1,0) [0|0] "V" Vector__XXX
SG_ BMS_S_LoadVt : 0|16@1+ (0.1,0) [0|0] "V" Vector__XXX
BO_ 2446066699 BMS_P_CSC_FB_11_M0: 8 BMS_POWER
SG_ BMS_S_IruPf : 48|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_S_IruPz : 32|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_S_BattVt : 16|16@1+ (0.1,0) [0|0] "V" Vector__XXX
SG_ BMS_S_LoadVt : 0|16@1+ (0.1,0) [0|0] "V" Vector__XXX
BO_ 2446066442 BMS_I_CSC_FB_10_M0: 6 BMS_ICM
SG_ BMS_S_Soc : 0|16@1+ (0.1,0) [0|0] "%" Vector__XXX
SG_ BMS_S_DsgCurrent : 32|16@1- (0.05,0) [0|0] "A" Vector__XXX
SG_ BMS_S_OnChgPosNegRelay_Status : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_PosNegRelay_Status : 23|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066698 BMS_P_CSC_FB_10_M0: 4 BMS_POWER
SG_ BMS_S_DsgCurrent : 16|16@1- (0.05,0) [0|0] "A" Vector__XXX
SG_ BMS_S_OnChgPosNegRelay_Status : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_PosNegRelay_Status : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066441 BMS_I_CSC_FB_09_M0: 7 BMS_ICM
SG_ BMS_S_WarnId6 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId5 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId4 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId3 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId2 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId1 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_Packidx : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066697 BMS_P_CSC_FB_09_M0: 7 BMS_POWER
SG_ BMS_S_WarnId6 : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId5 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId4 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId3 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId2 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_WarnId1 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_S_Packidx : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066440 BMS_I_CSC_FB_08: 6 BMS_ICM
SG_ BMS_M_NowPower : 32|16@1+ (0.1,0) [0|0] "KW" Vector__XXX
SG_ BMS_M_EnaMaxChgPower : 16|16@1+ (0.1,0) [0|0] "KW" Vector__XXX
SG_ BMS_M_EnaMaxDsgPower : 0|16@1+ (0.1,0) [0|0] "KW" Vector__XXX
BO_ 2446066696 BMS_P_CSC_FB_08: 6 BMS_POWER
SG_ BMS_M_NowPower : 32|16@1+ (0.1,0) [0|0] "KW" Vector__XXX
SG_ BMS_M_EnaMaxChgPower : 16|16@1+ (0.1,0) [0|0] "KW" Vector__XXX
SG_ BMS_M_EnaMaxDsgPower : 0|16@1+ (0.1,0) [0|0] "KW" Vector__XXX
BO_ 2446066439 BMS_I_CSC_FB_07: 7 BMS_ICM
SG_ BMS_M_WarnPackBits : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId6 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId5 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId4 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId3 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId2 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId1 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066695 BMS_P_CSC_FB_07: 7 BMS_POWER
SG_ BMS_M_WarnPackBits : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId6 : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId5 : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId4 : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId3 : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId2 : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_WarnId1 : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066438 BMS_I_CSC_FB_06: 4 BMS_ICM
SG_ BMS_M_TemperMaxPackIdx : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_TemperMinPackIdx : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_TemperMax : 15|8@0- (1,-40) [-40|125] "℃" Vector__XXX
SG_ BMS_M_TemperMin : 7|8@0- (1,-40) [-40|125] "℃" Vector__XXX
BO_ 2446066694 BMS_P_CSC_FB_06: 4 BMS_POWER
SG_ BMS_M_TemperMaxPackIdx : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_TemperMinPackIdx : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_TemperMax : 15|8@0- (1,-40) [-40|125] "℃" Vector__XXX
SG_ BMS_M_TemperMin : 7|8@0- (1,-40) [-40|125] "℃" Vector__XXX
BO_ 2446066437 BMS_I_CSC_FB_05: 8 BMS_ICM
SG_ BMS_M_PackConnect_Info : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_PackOnLine_Info : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_IruPf : 32|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_M_IruPz : 16|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_M_Current : 0|16@1- (0.05,0) [0|0] "A" Vector__XXX
BO_ 2446066693 BMS_P_CSC_FB_05: 8 BMS_POWER
SG_ BMS_M_PackConnect_Info : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_PackOnLine_Info : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_IruPf : 32|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_M_IruPz : 16|16@1+ (10,0) [0|0] "KΩ" Vector__XXX
SG_ BMS_M_Current : 0|16@1- (0.05,0) [0|0] "A" Vector__XXX
BO_ 2446066436 BMS_I_CSC_FB_04: 8 BMS_ICM
SG_ BMS_M_PackVoltDiff : 48|16@1+ (0.1,0) [0|0] "mV" Vector__XXX
SG_ BMS_M_PackMinVtIdx : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_PackMinVt : 24|16@1+ (0.1,0) [0|0] "V" Vector__XXX
SG_ BMS_M_PackMaxVtIdx : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_PackMaxVt : 0|16@1+ (0.1,0) [0|0] "V" Vector__XXX
BO_ 2446066692 BMS_P_CSC_FB_04: 8 BMS_POWER
SG_ BMS_M_PackVoltDiff : 48|16@1+ (0.1,0) [0|0] "mV" Vector__XXX
SG_ BMS_M_PackMinVtIdx : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_PackMinVt : 24|16@1+ (0.1,0) [0|0] "V" Vector__XXX
SG_ BMS_M_PackMaxVtIdx : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_PackMaxVt : 0|16@1+ (0.1,0) [0|0] "V" Vector__XXX
BO_ 2446066435 BMS_I_CSC_FB_03: 8 BMS_ICM
SG_ BMS_M_Soc : 48|16@1+ (0.1,0) [0|0] "%" Vector__XXX
SG_ BMS_M_Capacity : 32|16@1+ (0.1,0) [0|0] "KWh" Vector__XXX
SG_ BMS_M_OnchgPosNegRelay_Status : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_PrechgDiodeRelay_Status : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_PosNegRelay_Status : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066691 BMS_P_CSC_FB_03: 8 BMS_POWER
SG_ BMS_M_Soc : 48|16@1+ (0.1,0) [0|0] "%" Vector__XXX
SG_ BMS_M_Capacity : 32|16@1+ (0.1,0) [0|0] "KWh" Vector__XXX
SG_ BMS_M_OnchgPosNegRelay_Status : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_PrechgDiodeRelay_Status : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_M_PosNegRelay_Status : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446067969 EBAT2_CSC_FB_01: 8 EBAT2
SG_ BMS_EBAT_WorkStatus : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_EBAT_WarnBits : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_EBAT_TemperMin : 47|8@0- (1,-40) [0|0] "℃" Vector__XXX
SG_ BMS_EBAT_TemperMax : 39|8@0- (1,-40) [0|0] "℃" Vector__XXX
SG_ BMS_EBAT_Current : 16|16@1- (0.05,0) [0|0] "A" Vector__XXX
SG_ BMS_EBAT_Vt : 0|16@1+ (0.1,0) [0|0] "V" Vector__XXX
BO_ 2446066434 BMS_I_CSC_FB_02: 6 BMS_ICM
SG_ BMS_EmergencyCode_FB : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_PosDoideRelay_FB : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_MainRelay_FB : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_BatPowerSet_FB : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_SelfCheck_FB : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_WorkState_FB : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2443838466 CSC_BMS_P_CM_02: 8 CSC
SG_ BMS_PowerOff_Order : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_SelfCheck_Order : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_BatPowerSet_Order : 32|16@1+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_DiodeRelaySet_Order : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_PosRelaySet_Order : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_MainRelaySet_Order : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_WorkStateSet_Order : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2443838210 CSC_BMS_I_CM_02: 8 CSC
SG_ BMS_PowerOff_Order : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_SelfCheck_Order : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_BatPowerSet_Order : 32|16@1+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_DiodeRelaySet_Order : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_PosRelaySet_Order : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_MainRelaySet_Order : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_WorkStateSet_Order : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446067713 EBAT1_CSC_FB_01: 8 EBAT1
SG_ BMS_EBAT_WorkStatus : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_EBAT_WarnBits : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ BMS_EBAT_TemperMin : 47|8@0- (1,-40) [0|0] "℃" Vector__XXX
SG_ BMS_EBAT_TemperMax : 39|8@0- (1,-40) [0|0] "℃" Vector__XXX
SG_ BMS_EBAT_Current : 16|16@1- (0.05,0) [0|0] "A" Vector__XXX
SG_ BMS_EBAT_Vt : 0|16@1+ (0.1,0) [0|0] "V" Vector__XXX
BO_ 2443839233 CSC_DB2_CM_01: 8 CSC
BO_ 2443838977 CSC_DB1_CM_01: 8 CSC
BO_ 2446067457 DB2_CSC_FB_01: 8 DB2
BO_ 2446067201 DB1_CSC_FB_01: 8 DB1
BO_ 2446066945 BMS_F_CSC_FB_01: 8 BMS_FC
BO_ 2443838721 CSC_BMS_F_CM_01: 8 CSC
SG_ HeartBeat : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_10ms : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Second : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Minute : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Hour : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Day : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Month : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Year : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2443838465 CSC_BMS_P_CM_01: 8 CSC
SG_ HeartBeat : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_10ms : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Second : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Minute : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Hour : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Day : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Month : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Year : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2443838209 CSC_BMS_I_CM_01: 8 CSC
SG_ HeartBeat : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Second : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Month : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Minute : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Hour : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Day : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_10ms : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Year : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066433 BMS_I_CSC_FB_01: 8 BMS_ICM
SG_ HeartBeat : 63|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_10ms : 55|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Second : 47|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Minute : 39|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Hour : 31|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Day : 23|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Month : 15|8@0+ (1,0) [0|0] "" Vector__XXX
SG_ TimeStamp_Year : 7|8@0+ (1,0) [0|0] "" Vector__XXX
BO_ 2446066177 UINT4B_CSC_CM_01: 8 UNIT4B
BO_ 2443837953 CSC_UINT4B_FB_01: 8 CSC
BO_ 2446065921 UINT4A_CSC_CM_01: 8 UNIT4A
BO_ 2443837697 CSC_UINT4A_FB_01: 8 CSC
CM_ BO_ 3221225472 "This is a message for not used signals, created by Vector CANdb++ DBC OLE DB Provider.";
CM_ BO_ 2446066446 "仪器电池环境检测数据";
CM_ SG_ 2446066446 BMS_M_4Min1Pressure "舱内大气压";
CM_ SG_ 2446066446 BMS_M_4Min1Humidity "舱内湿度";
CM_ SG_ 2446066446 BMS_M_4Min1Temper "舱内温度";
CM_ SG_ 2446066446 BMS_M_4Min1O2 "舱内氧气浓度";
CM_ BO_ 2446066702 "动力电池环境检测数据";
CM_ SG_ 2446066702 BMS_M_4Min1Pressure "舱内大气压";
CM_ SG_ 2446066702 BMS_M_4Min1Humidity "舱内湿度";
CM_ SG_ 2446066702 BMS_M_4Min1Temper "舱内温度";
CM_ SG_ 2446066702 BMS_M_4Min1O2 "舱内氧气浓度";
CM_ BO_ 2446066461 "仪表电池包2";
CM_ SG_ 2446066461 BMS_S_CellVMean "单体平均电压";
CM_ SG_ 2446066461 BMS_S_MaxCellVIdx "最高电压编号";
CM_ SG_ 2446066461 BMS_S_MinCellVIdx "最低电压编号";
CM_ SG_ 2446066461 BMS_S_MaxCellV "单体电压最高电压";
CM_ SG_ 2446066461 BMS_S_MinCellV "单体电池最低电压";
CM_ BO_ 2446066460 "仪表电池包2";
CM_ SG_ 2446066460 BMS_S_BalanceStatus "电池单体均衡状态";
CM_ SG_ 2446066460 BMS_S_TemperMean "电池平均温度";
CM_ SG_ 2446066460 BMS_S_TemperMinIdx "电池最低温度编号";
CM_ SG_ 2446066460 BMS_S_TemperMin "电池最低温度";
CM_ SG_ 2446066460 BMS_S_TemperMaxIdx "电池最高温度编号";
CM_ SG_ 2446066460 BMS_S_TemperMax "电池最高温度";
CM_ BO_ 2446066459 "仪表电池包2";
CM_ SG_ 2446066459 BMS_S_IruPf "电池包负端绝缘电阻";
CM_ SG_ 2446066459 BMS_S_IruPz "电池包正端绝缘电阻";
CM_ SG_ 2446066459 BMS_S_BattVt "电池包电压电池端";
CM_ SG_ 2446066459 BMS_S_LoadVt "电池包电压负载端";
CM_ BO_ 2446066458 "仪表电池包2";
CM_ SG_ 2446066458 BMS_S_Soc "电池包SOC";
CM_ SG_ 2446066458 BMS_S_DsgCurrent "电池包放电电流
放电为正,充电为负";
CM_ SG_ 2446066458 BMS_S_OnChgPosNegRelay_Status "BMS_S_OnChgPosNegRelay_Status";
CM_ SG_ 2446066458 BMS_S_PosNegRelay_Status "电池包正极继电器状态与负极继电器状态";
CM_ BO_ 2446066457 "仪表电池包2";
CM_ SG_ 2446066457 BMS_S_WarnId6 "电池报警标识字6";
CM_ SG_ 2446066457 BMS_S_WarnId5 "电池报警标识字5";
CM_ SG_ 2446066457 BMS_S_WarnId4 "电池报警标识字4";
CM_ SG_ 2446066457 BMS_S_WarnId3 "电池报警标识字3";
CM_ SG_ 2446066457 BMS_S_WarnId2 "电池报警标识字2";
CM_ SG_ 2446066457 BMS_S_WarnId1 "电池报警标识字1";
CM_ SG_ 2446066457 BMS_S_Packidx "电池包号";
CM_ BO_ 2446066717 "动力电池包2";
CM_ SG_ 2446066717 BMS_S_CellVMean "单体平均电压";
CM_ SG_ 2446066717 BMS_S_MaxCellVIdx "最高电压编号";
CM_ SG_ 2446066717 BMS_S_MinCellVIdx "最低电压编号";
CM_ SG_ 2446066717 BMS_S_MaxCellV "单体电压最高电压";
CM_ SG_ 2446066717 BMS_S_MinCellV "单体电池最低电压";
CM_ BO_ 2446066716 "动力电池包2";
CM_ SG_ 2446066716 BMS_S_BalanceStatus "电池单体均衡状态";
CM_ SG_ 2446066716 BMS_S_TemperMean "电池平均温度";
CM_ SG_ 2446066716 BMS_S_TemperMinIdx "电池最低温度编号";
CM_ SG_ 2446066716 BMS_S_TemperMin "电池最低温度";
CM_ SG_ 2446066716 BMS_S_TemperMaxIdx "电池最高温度编号";
CM_ SG_ 2446066716 BMS_S_TemperMax "电池最高温度";
CM_ BO_ 2446066715 "动力电池包2";
CM_ SG_ 2446066715 BMS_S_IruPf "电池包负端绝缘电阻";
CM_ SG_ 2446066715 BMS_S_IruPz "电池包正端绝缘电阻";
CM_ SG_ 2446066715 BMS_S_BattVt "电池包电压电池端";
CM_ SG_ 2446066715 BMS_S_LoadVt "电池包电压负载端";
CM_ BO_ 2446066714 "动力电池包2";
CM_ SG_ 2446066714 BMS_S_DsgCurrent "电池包放电电流
放电为正,充电为负";
CM_ SG_ 2446066714 BMS_S_OnChgPosNegRelay_Status "BMS_S_OnChgPosNegRelay_Status";
CM_ SG_ 2446066714 BMS_S_PosNegRelay_Status "电池包正极继电器状态与负极继电器状态";
CM_ BO_ 2446066713 "动力电池包2";
CM_ SG_ 2446066713 BMS_S_WarnId6 "电池报警标识字6";
CM_ SG_ 2446066713 BMS_S_WarnId5 "电池报警标识字5";
CM_ SG_ 2446066713 BMS_S_WarnId4 "电池报警标识字4";
CM_ SG_ 2446066713 BMS_S_WarnId3 "电池报警标识字3";
CM_ SG_ 2446066713 BMS_S_WarnId2 "电池报警标识字2";
CM_ SG_ 2446066713 BMS_S_WarnId1 "电池报警标识字1";
CM_ SG_ 2446066713 BMS_S_Packidx "电池包号";
CM_ BO_ 2446066445 "仪表电池包1";
CM_ SG_ 2446066445 BMS_S_CellVMean "单体平均电压";
CM_ SG_ 2446066445 BMS_S_MaxCellVIdx "最高电压编号";
CM_ SG_ 2446066445 BMS_S_MinCellVIdx "最低电压编号";
CM_ SG_ 2446066445 BMS_S_MaxCellV "单体电压最高电压";
CM_ SG_ 2446066445 BMS_S_MinCellV "单体电池最低电压";
CM_ BO_ 2446066701 "动力电池包1";
CM_ SG_ 2446066701 BMS_S_CellVMean "单体平均电压";
CM_ SG_ 2446066701 BMS_S_MaxCellVIdx "最高电压编号";
CM_ SG_ 2446066701 BMS_S_MinCellVIdx "最低电压编号";
CM_ SG_ 2446066701 BMS_S_MaxCellV "单体电压最高电压";
CM_ SG_ 2446066701 BMS_S_MinCellV "单体电池最低电压";
CM_ BO_ 2446066444 "仪表电池包1";
CM_ SG_ 2446066444 BMS_S_BalanceStatus "电池单体均衡状态";
CM_ SG_ 2446066444 BMS_S_TemperMean "电池平均温度";
CM_ SG_ 2446066444 BMS_S_TemperMinIdx "电池最低温度编号";
CM_ SG_ 2446066444 BMS_S_TemperMin "电池最低温度";
CM_ SG_ 2446066444 BMS_S_TemperMaxIdx "电池最高温度编号";
CM_ SG_ 2446066444 BMS_S_TemperMax "电池最高温度";
CM_ BO_ 2446066700 "动力电池包1";
CM_ SG_ 2446066700 BMS_S_BalanceStatus "电池单体均衡状态";
CM_ SG_ 2446066700 BMS_S_TemperMean "电池平均温度";
CM_ SG_ 2446066700 BMS_S_TemperMinIdx "电池最低温度编号";
CM_ SG_ 2446066700 BMS_S_TemperMin "电池最低温度";
CM_ SG_ 2446066700 BMS_S_TemperMaxIdx "电池最高温度编号";
CM_ SG_ 2446066700 BMS_S_TemperMax "电池最高温度";
CM_ BO_ 2446066443 "仪表电池包1";
CM_ SG_ 2446066443 BMS_S_IruPf "电池包负端绝缘电阻";
CM_ SG_ 2446066443 BMS_S_IruPz "电池包正端绝缘电阻";
CM_ SG_ 2446066443 BMS_S_BattVt "电池包电压电池端";
CM_ SG_ 2446066443 BMS_S_LoadVt "电池包电压负载端";
CM_ BO_ 2446066699 "动力电池包1";
CM_ SG_ 2446066699 BMS_S_IruPf "电池包负端绝缘电阻";
CM_ SG_ 2446066699 BMS_S_IruPz "电池包正端绝缘电阻";
CM_ SG_ 2446066699 BMS_S_BattVt "电池包电压电池端";
CM_ SG_ 2446066699 BMS_S_LoadVt "电池包电压负载端";
CM_ BO_ 2446066442 "仪表电池包1";
CM_ SG_ 2446066442 BMS_S_Soc "电池包SOC";
CM_ SG_ 2446066442 BMS_S_DsgCurrent "电池包放电电流
放电为正,充电为负";
CM_ SG_ 2446066442 BMS_S_OnChgPosNegRelay_Status "BMS_S_OnChgPosNegRelay_Status";
CM_ SG_ 2446066442 BMS_S_PosNegRelay_Status "电池包正极继电器状态与负极继电器状态";
CM_ BO_ 2446066698 "动力电池包1";
CM_ SG_ 2446066698 BMS_S_DsgCurrent "电池包放电电流
放电为正,充电为负";
CM_ SG_ 2446066698 BMS_S_OnChgPosNegRelay_Status "BMS_S_OnChgPosNegRelay_Status";
CM_ SG_ 2446066698 BMS_S_PosNegRelay_Status "电池包正极继电器状态与负极继电器状态";
CM_ BO_ 2446066441 "仪表电池包1";
CM_ SG_ 2446066441 BMS_S_WarnId6 "电池报警标识字6";
CM_ SG_ 2446066441 BMS_S_WarnId5 "电池报警标识字5";
CM_ SG_ 2446066441 BMS_S_WarnId4 "电池报警标识字4";
CM_ SG_ 2446066441 BMS_S_WarnId3 "电池报警标识字3";
CM_ SG_ 2446066441 BMS_S_WarnId2 "电池报警标识字2";
CM_ SG_ 2446066441 BMS_S_WarnId1 "电池报警标识字1";
CM_ SG_ 2446066441 BMS_S_Packidx "电池包号";
CM_ BO_ 2446066697 "动力电池包1";
CM_ SG_ 2446066697 BMS_S_WarnId6 "电池报警标识字6";
CM_ SG_ 2446066697 BMS_S_WarnId5 "电池报警标识字5";
CM_ SG_ 2446066697 BMS_S_WarnId4 "电池报警标识字4";
CM_ SG_ 2446066697 BMS_S_WarnId3 "电池报警标识字3";
CM_ SG_ 2446066697 BMS_S_WarnId2 "电池报警标识字2";
CM_ SG_ 2446066697 BMS_S_WarnId1 "电池报警标识字1";
CM_ SG_ 2446066697 BMS_S_Packidx "电池包号";
CM_ SG_ 2446066440 BMS_M_NowPower "电池当前接入功率状态";
CM_ SG_ 2446066440 BMS_M_EnaMaxChgPower "电池允许在线燃电充电功率";
CM_ SG_ 2446066440 BMS_M_EnaMaxDsgPower "电池允许最高放电功率";
CM_ SG_ 2446066696 BMS_M_NowPower "电池当前接入功率状态";
CM_ SG_ 2446066696 BMS_M_EnaMaxChgPower "电池允许在线燃电充电功率";
CM_ SG_ 2446066696 BMS_M_EnaMaxDsgPower "电池允许最高放电功率";
CM_ SG_ 2446066439 BMS_M_WarnPackBits "EMU报警电池包位置";
CM_ SG_ 2446066439 BMS_M_WarnId6 "EMU报警标识字6";
CM_ SG_ 2446066439 BMS_M_WarnId5 "EMU报警标识字5";
CM_ SG_ 2446066439 BMS_M_WarnId4 "EMU报警标识字4";
CM_ SG_ 2446066439 BMS_M_WarnId3 "EMU报警标识字3";
CM_ SG_ 2446066439 BMS_M_WarnId2 "EMU报警标识字2";
CM_ SG_ 2446066439 BMS_M_WarnId1 "EMU报警标识字1";
CM_ SG_ 2446066695 BMS_M_WarnPackBits "EMU报警电池包位置";
CM_ SG_ 2446066695 BMS_M_WarnId6 "EMU报警标识字6";
CM_ SG_ 2446066695 BMS_M_WarnId5 "EMU报警标识字5";
CM_ SG_ 2446066695 BMS_M_WarnId4 "EMU报警标识字4";
CM_ SG_ 2446066695 BMS_M_WarnId3 "EMU报警标识字3";
CM_ SG_ 2446066695 BMS_M_WarnId2 "EMU报警标识字2";
CM_ SG_ 2446066695 BMS_M_WarnId1 "EMU报警标识字1";
CM_ SG_ 2446066438 BMS_M_TemperMaxPackIdx "最高温度包号";
CM_ SG_ 2446066438 BMS_M_TemperMinPackIdx "最低温度包号";
CM_ SG_ 2446066438 BMS_M_TemperMax "电池单体最高温度";
CM_ SG_ 2446066438 BMS_M_TemperMin "电池单体最低温度";
CM_ SG_ 2446066694 BMS_M_TemperMaxPackIdx "最高温度包号";
CM_ SG_ 2446066694 BMS_M_TemperMinPackIdx "最低温度包号";
CM_ SG_ 2446066694 BMS_M_TemperMax "电池单体最高温度";
CM_ SG_ 2446066694 BMS_M_TemperMin "电池单体最低温度";
CM_ SG_ 2446066437 BMS_M_PackConnect_Info "电池包接入信息";
CM_ SG_ 2446066437 BMS_M_PackOnLine_Info "电池包在线信息";
CM_ SG_ 2446066437 BMS_M_IruPf "EMU负端绝缘电阻";
CM_ SG_ 2446066437 BMS_M_IruPz "EMU正端绝缘电阻";
CM_ SG_ 2446066437 BMS_M_Current "EMU放电电流
放电为正,充电为负";
CM_ SG_ 2446066693 BMS_M_PackConnect_Info "电池包接入信息";
CM_ SG_ 2446066693 BMS_M_PackOnLine_Info "电池包在线信息";
CM_ SG_ 2446066693 BMS_M_IruPf "EMU负端绝缘电阻";
CM_ SG_ 2446066693 BMS_M_IruPz "EMU正端绝缘电阻";
CM_ SG_ 2446066693 BMS_M_Current "EMU放电电流
放电为正,充电为负";
CM_ SG_ 2446066436 BMS_M_PackVoltDiff "单个电池包最大压差";
CM_ SG_ 2446066436 BMS_M_PackMinVtIdx "单个电池包最大压差";
CM_ SG_ 2446066436 BMS_M_PackMinVt "电池包最低电压";
CM_ SG_ 2446066436 BMS_M_PackMaxVtIdx "最高电压包号";
CM_ SG_ 2446066436 BMS_M_PackMaxVt "电池包最高电压";
CM_ SG_ 2446066692 BMS_M_PackVoltDiff "单个电池包最大压差";
CM_ SG_ 2446066692 BMS_M_PackMinVtIdx "单个电池包最大压差";
CM_ SG_ 2446066692 BMS_M_PackMinVt "电池包最低电压";
CM_ SG_ 2446066692 BMS_M_PackMaxVtIdx "最高电压包号";
CM_ SG_ 2446066692 BMS_M_PackMaxVt "电池包最高电压";
CM_ SG_ 2446066435 BMS_M_Soc "SOC";
CM_ SG_ 2446066435 BMS_M_Capacity "电池电量";
CM_ SG_ 2446066435 BMS_M_OnchgPosNegRelay_Status "在线充电正极与在线充电负极继电器状态";
CM_ SG_ 2446066435 BMS_M_PrechgDiodeRelay_Status "总控预充与二极管继电器状态";
CM_ SG_ 2446066435 BMS_M_PosNegRelay_Status "总控正极和总控负极继电器状态";
CM_ SG_ 2446066691 BMS_M_Soc "SOC";
CM_ SG_ 2446066691 BMS_M_Capacity "电池电量";
CM_ SG_ 2446066691 BMS_M_OnchgPosNegRelay_Status "在线充电正极与在线充电负极继电器状态";
CM_ SG_ 2446066691 BMS_M_PrechgDiodeRelay_Status "总控预充与二极管继电器状态";
CM_ SG_ 2446066691 BMS_M_PosNegRelay_Status "总控正极和总控负极继电器状态";
CM_ SG_ 2446067969 BMS_EBAT_WorkStatus "电池状态(是否上电BMS)";
CM_ SG_ 2446067969 BMS_EBAT_WarnBits "故障bit";
CM_ SG_ 2446067969 BMS_EBAT_TemperMin "最低温";
CM_ SG_ 2446067969 BMS_EBAT_TemperMax "最高温";
CM_ SG_ 2446067969 BMS_EBAT_Current "总电流";
CM_ SG_ 2446067969 BMS_EBAT_Vt "总电压";
CM_ SG_ 2446067713 BMS_EBAT_WorkStatus "电池状态(是否上电BMS)";
CM_ SG_ 2446067713 BMS_EBAT_WarnBits "故障bit";
CM_ SG_ 2446067713 BMS_EBAT_TemperMin "最低温";
CM_ SG_ 2446067713 BMS_EBAT_TemperMax "最高温";
CM_ SG_ 2446067713 BMS_EBAT_Current "总电流";
CM_ SG_ 2446067713 BMS_EBAT_Vt "总电压";
BA_DEF_ "BusType" STRING ;
BA_DEF_ BU_ "NodeLayerModules" STRING ;
BA_DEF_ BU_ "ECU" STRING ;
BA_DEF_ BU_ "CANoeJitterMax" INT 0 0;
BA_DEF_ BU_ "CANoeJitterMin" INT 0 0;
BA_DEF_ BU_ "CANoeDrift" INT 0 0;
BA_DEF_ BU_ "CANoeStartDelay" INT 0 0;
BA_DEF_DEF_ "BusType" "";
BA_DEF_DEF_ "NodeLayerModules" "";
BA_DEF_DEF_ "ECU" "";
BA_DEF_DEF_ "CANoeJitterMax" 0;
BA_DEF_DEF_ "CANoeJitterMin" 0;
BA_DEF_DEF_ "CANoeDrift" 0;
BA_DEF_DEF_ "CANoeStartDelay" 0;
+54
View File
@@ -0,0 +1,54 @@
import cantools
import csv
import sys
def export_dbc_to_csv(dbc_file, csv_file):
try:
# 载入 DBC 文件
db = cantools.database.load_file(dbc_file)
print(f"成功加载 DBC 文件: {dbc_file}")
# 打开 CSV 文件写入
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
# 写入表头
writer.writerow([
"MessageName", "MessageID", "DLC", "Sender",
"SignalName", "StartBit", "Length", "Factor", "Offset",
"Min", "Max", "Unit", "Receivers", "SignalComment"
])
# 遍历每条消息和信号
for msg in db.messages:
for signal in msg.signals:
writer.writerow([
msg.name,
hex(msg.frame_id),
msg.length,
','.join(msg.senders),
signal.name,
signal.start,
signal.length,
signal.scale,
signal.offset,
signal.minimum,
signal.maximum,
signal.unit,
','.join(signal.receivers),
signal.comment if signal.comment else ''
])
print(f"已导出为 CSV 文件: {csv_file}")
except Exception as e:
print(f"导出失败: {e}")
if __name__ == "__main__":
# if len(sys.argv) != 3:
# print("用法: python dbc_to_csv.py your_file.dbc output.csv")
# else:
# export_dbc_to_csv(sys.argv[1], sys.argv[2])
export_dbc_to_csv(
'/home/zjk/project/H100/H100PowerManger/test/cantools/CSC_TSU_20240823.dbc',
'/home/zjk/project/H100/H100PowerManger/test/cantools/CSC_TSU_20240823.csv'
)
+34
View File
@@ -0,0 +1,34 @@
import cantools
import sys
def print_dbc_info(dbc_file):
try:
# 加载 DBC 文件
db = cantools.database.load_file(dbc_file)
print(f"成功加载 DBC 文件: {dbc_file}")
print(f"共包含 {len(db.messages)} 个消息。\n")
for msg in db.messages:
print(f"📦 消息: {msg.name}")
print(f" ID: {hex(msg.frame_id)}")
print(f" 长度: {msg.length} 字节")
print(f" 发送节点: {msg.senders}")
print(f" 注释: {msg.comment if msg.comment else '无'}")
print(" 包含信号:")
for signal in msg.signals:
print(f" 🔹 信号名: {signal.name}")
print(f" 起始位: {signal.start}, 长度: {signal.length}, 单位: {signal.unit}")
print(f" 最小值: {signal.minimum}, 最大值: {signal.maximum}")
print(f" 接收节点: {signal.receivers}")
print(f" 注释: {signal.comment if signal.comment else '无'}")
print("-" * 60)
except Exception as e:
print(f"读取 DBC 文件失败: {e}")
if __name__ == "__main__":
# if len(sys.argv) != 2:
# print("用法: python read_dbc.py your_file.dbc")
# else:
# print_dbc_info(sys.argv[1])
print_dbc_info('/home/zjk/project/H100/H100PowerManger/test/cantools/CSC_TSU_20240823.dbc')
+7 -2
View File
@@ -30,8 +30,8 @@ class PowerManagerApp:
# UDP通信配置
# self.udp_ip = "127.0.0.1"
self.udp_ip = "192.168.0.140"
self.udp_port = 7000
self.udp_ip = "192.168.0.224"
self.udp_port = 5002
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.sock.bind((self.udp_ip, self.udp_port))
@@ -40,6 +40,11 @@ class PowerManagerApp:
self.disSysPortC2 = 6000
self.disSysHostC2 = '192.168.1.158'
# self.disSysPortC1 = 7000
# self.disSysHostC1 = '192.168.0.140'
# self.disSysPortC2 = 7000
# self.disSysHostC2 = '192.168.0.140'
# 数据库配置
# self.db = DB('/home/zjk/project/H100/H100PowerManger/test/disSysTest/test.db')
self.db = DB(os.path.join(os.path.dirname(__file__), 'test.db'))
+19 -7
View File
@@ -96,7 +96,7 @@ class msg_disHighVolBusFbMsg:
for byte in data:
self.checkCode = (self.checkCode + byte) & 0xFF
data += struct.pack('<B', self.checkCode)
print("size",len(data))
return data
def unpack(self, data):
@@ -627,13 +627,13 @@ class msg_disLVMBCmdMsg:
self.checkCode = 0x00
# disLowMainBusCmd成员
self.lithiumBatteryGroupInstrumentCircuitBreaker = 0x00
self.bowLowVoltageDistributionBoxCircuitBreaker = 0x00
self.unit4InstrumentDC48VCircuitBreaker = 0x00
self.lithiumBatteryGroupInstrumentCircuitBreaker = 0x55
self.bowLowVoltageDistributionBoxCircuitBreaker = 0x55
self.unit4InstrumentDC48VCircuitBreaker = 0x55
self.dcC1DCDistributionPanelCircuitBreaker = 0x00
self.reservedCircuitBreaker1 = 0x00
self.reservedCircuitBreaker2 = 0x00
self.emergencyLithiumBatteryGroup2CircuitBreaker = 0x00
self.reservedCircuitBreaker1 = 0x55
self.reservedCircuitBreaker2 = 0x55
self.emergencyLithiumBatteryGroup2CircuitBreaker = 0x55
def pack(self):
self.checkCode = 0x00
@@ -656,6 +656,8 @@ class msg_disLVMBCmdMsg:
self.checkCode = (self.checkCode + byte) & 0xFF
data += struct.pack('<B', self.checkCode)
#打印data
print("data:", data)
return data
def unpack(self, data):
@@ -751,3 +753,13 @@ class msg_disLVBCmdMsg:
checkCode = (checkCode + byte) & 0xFF
return checkCode == data[-1]
if __name__ == "__main__":
# 测试打包和解包
msg = msg_disLVMBCmdMsg()
packed_data = msg.pack()
# 方便复制,将每个字节转换为十六进制字符串并添加空格分隔 数字前+ox
hex_string = ' '.join(format(byte, '02x') for byte in packed_data)
print("Packed data (hex):", hex_string)