*简介
*功能效果
*部分代码说明
简介:
基于前面Qt环境搭建和wifi踩坑后调通,使用http网络请求完整数据。完善储能ems单体信息采集部分功能如下
功能效果
1. 单组信息效果:
单体信息采集效果如下,通过http请求拿到BMU1-BMU8单个信息,具体由电池组端的电压、 电流、 运行状态code、组soc soh等等,使用Qt强大的表格功能添加显示
2. 数据监控:
数据监控页面主要现在最值信息,以及系统中的开关状态和测量电表的数据等,效果如下
部分代码说明
1. 在单体信息显示表格上,将http请求数据结果存放到httprequest类的buffer中,开启线程周期性通知更新ui显示。而存储buffer会在网络请求结束后更新进去。这里更新ui时使用了一个Map,先存放map中再显示ui,有新的数据字段过来则先从map中迭代查找是否已经有了字段,没有则add新的map字段。有点类似hash用法
for(;type <= GroupListType_BMS8; type ++)
{
uint32_t IndexDate = MainUi_CheckIndexHttpData(type, mLtBattFunc.at(index).title);
if (0xFFFFFF != IndexDate)
{
QList<ST_HttpJson_Data> *p_devData = p_httpReq->HttpGetBmsDevGroup().at(type).p_devData;
strCellInfo = p_devData->at(IndexDate).value + p_devData->at(IndexDate).unit;
}
int cloumn = type - GroupListType_BMS1;
if((cloumn >= 0) && (cloumn < 8))
{
QMap<uint32_t, uint32_t>::iterator it = map_CellInfo.find(index);
if(it == map_CellInfo.end())
{
map_CellInfo.insert(index, bmsInfoIndex);
bmsInfoIndex ++;
}
it = map_CellInfo.find(index);
int row = it.value();
ui->BattWat_tableW_Cell_Vol->setItem(row, cloumn, new QTableWidgetItem(strCellInfo));
}
}
使用列表方式将字段对应方法入口
2. 数据监控上类似,预先在ui上做空位,先存到map中再更新ui
uint32_t IndexDate = MainUi_CheckIndexHttpData(mLtBattFunc.at(index).dateType, mLtBattFunc.at(index).title);
if (0xFFFFFF != IndexDate)
{
QList<ST_HttpJson_Data> *p_devData = p_httpReq->HttpGetBmsDevGroup().at(mLtBattFunc.at(index).dateType).p_devData;
_MapGroup_::iterator it = map_Group.find(index);
if (it == map_Group.end())
{
// qDebug() << "[long] " << index << " MainUi_TotalGroupMsg currIndex :" << currIndex << " Map size :" << labsize;
if (currIndex >= labsize)
{
currIndex = labsize-1;
}
{
map_Group.insert(index, mlistLabGroup.at(currIndex));
it = map_Group.find(index);
currIndex ++;
}
}
QString str = p_devData->at(IndexDate).title;
it.value().labTitle->setText(str);
str = p_devData->at(IndexDate).value + p_devData->at(IndexDate).unit;
it.value().labValue->setText(str);
}