增加了网页服务
This commit is contained in:
+272
-10
@@ -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>`;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:更新协议
|
||||
|
||||
@@ -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--------<-- */
|
||||
/* | | */
|
||||
|
||||
@@ -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));
|
||||
@@ -147,16 +145,3 @@ void UpperCommManager::buildSystemReport() {
|
||||
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
@@ -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()
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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);
|
||||
|
||||
//
|
||||
|
||||
@@ -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_;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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,,,,,
|
||||
|
@@ -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;
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
@@ -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')
|
||||
@@ -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'))
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user