随着经济发展,国家对环境越来越重视,为贯彻《中华人民共和国大气污染防治法》,落实《汽油车污染物排放限值及测量方法(双怠速法及简易工况法)》(GB18285-2018)、《柴油车污染物排放限值及测量方法(双自由加速法及加载减速法)》(GB3847-2018)两项标准的实施,根据中国环境科学研究院发布的《在用汽车排放检验信息系统及联网规范(征求意见稿)》,燃油车环境参数实时监测也变得越来越迫切,对在用机动车排放检验过程监控,能更有效对异常数据进行预警控制,防止弄虚作假行为,促使超标车辆维修治理,减少污染排放,整合移动污染源排放数据,建立一套科学化、系统化、智能化的移动源污染排放在线监控系统,实现机动车年检、路检、遥测、新车核查、非道路移动机械、检测维修IM制度、监控预警等综合管理,连通机动车排放检验机构、市区县生态环境局、国家生态环境部、市政务信息资源共享平台,实现国家、省市、区县三级联网,数据交换与共享。
系统设计性能参数要求:
序号 | 指标名称 | 指标明细 | 性能要求 |
---|---|---|---|
1 | 数据管理 | 单一记录的查询 | 时间<=2S |
多记录项复合查询 | 时间<=10S | ||
多表查询 | 时间<=30S | ||
2 | 统计分析 | 参与统计的数据量10万条内 | 时间<=20S |
参与统计的数据量100万条内 | 时间<=1M | ||
参与统计的数据量100万条以上 | 时间<=5M |
如何实现准确高效的采集并实时存储查询大数据分析等功能,在技术上必须具备分布式采集,大数据分析等能力,笔者在构建系统时,查阅了大量案例,学习对比了很多架构,基于超级性能和易用性,最后选择TDEngine时序数据库作为本系统的实时数据库。
1、整体架构
云端采用EMQ作为协议转发服务器,搭配TDEngine做数据仓库,实时采集数据采用MQTT进行传输,后期将拓展其他协议。
边缘控制器利用自身所带CAN总线采集OBD车载数据(大多数采用SAEJ1939,这个调试真辛苦。。。)及其他环境检测设备采集的数据(采集设备的输出数据通过串口或网络联网),收集数据并通过EC20
4G通信或wifi无线网络采用MQTT协议上传实时数据至云端并存储在TDEngine时序数据库中供查询分析调用。
2、采集器
前端采集设备边缘控制器采用乐鑫的物联网模块ESP32-WROVER-B作为主处理模块,这款模块强劲的处理能力简直让我爽到不行,最高240M主频,而且是双核,是通用型
Wi-Fi+BT+BLE MCU 模组,16M flash,8M
ram,支持SD卡,功能强大,用途广泛,可以用于低功耗传感器网络和要求极高的任务,例如语音编码、音频流和MP3解码等,关键事开源生态好,各种开软件包都不在话下扩展了两路CAN总线,诸多IO口(原谅我唯一缺陷,引脚比较少38针),
支持EC20 4G和北斗GPS模块可接AD7606实现多通道ADC采样。
作为乐鑫当家花旦,禀承了乐鑫ESP-IDF的强大软件能力,基于freertos+lwip双剑合璧,协议是相当的全,工业4.0的核心协议OPC-UA,MQTT,Modbus,HTTP(S),websocket,ODB(SAEJ1939,ISO15765)…。
3、数据库设计
过程数据表
序号 | 代码 | 数据类型 | 注释 |
---|---|---|---|
TS | TIMESTAMP | 时间 | |
VN | NCHAR | 车牌号 | |
HCGCSJ | FLOAT | HC过程数据 | |
COGCSJ | FLOAT | CO过程数据 | |
CO2GCSJ | FLOAT | CO2过程数据 | |
O2GCSJ | FLOAT | O2过程数据 | |
NOXGCSJ | FLOAT | NOX过程数据 | |
GLKQXSSJ | FLOAT | 过量空气系数过程数据 | |
HCPFZLGCSJ | FLOAT | HC排放质量过程数据 | |
COPFZLGCSJ | FLOAT | CO排放质量过程数据 | |
NOXPFZLGCSJ | FLOAT | NOX排放质量过程数据 | |
LLJO2GCSJ | FLOAT | 流量计O2过程数据 | |
LLJSJLLGCSJ | FLOAT | 流量计实际流量过程数据 | |
LLJBZLLGCSJ | FLOAT | 流量计标准流量过程数据 | |
LLJWDGCSJ | FLOAT | 流量计温度过程数据 | |
QCWQLLGCSJ | FLOAT | 汽车尾气流量过程数据 | |
LLJQYGCSJ | FLOAT | 流量计气压过程数据 | |
ZSGCSJ | FLOAT | 发动机转速过程数据 | |
YWGCSJ | FLOAT | 发动机油温过程数据 | |
CSGCSJ | FLOAT | 车速过程数据 | |
XSBGCSJ | FLOAT | 稀释比过程数据 | |
XSXZGCSJ | FLOAT | 稀释修正系数过程数据 | |
SDXZGCSJ | FLOAT | 湿度修正系数过程数据 | |
JSGLGCSJ | FLOAT | 寄生功率过程数据 | |
ZSGLGCSJ | FLOAT | 指示功率过程数据 | |
HJWDGCSJ | FLOAT | 环境温度过程数据 | |
HJSDGCSJ | FLOAT | 环境湿度过程数据 | |
HJDQYGCSJ | FLOAT | 环境大气压过程数据 | |
YDZGCSJ | FLOAT | 烟度值过程数据 | |
GXSXSGCSJ | FLOAT | 光吸收系数过程数据 | |
ZTBZ | INT | 状态标注(1.预热状态,2.高怠速15秒稳定结束点,3.怠速) | |
HJO2ND | FLOAT | 环境O2浓度(单位:%vol) | |
BZLLMMSJ | FLOAT | 标准流量每秒数据(单位:L/s) | |
CSGKZJZGL | FLOAT | 测试工况总加载功率每秒数据(单位:kW) | |
HJO2HL | FLOAT | 环境O2含量 | |
CO2ZL | FLOAT | CO2质量 | |
NOZL | FLOAT | NO质量 | |
SJQTLL | FLOAT | 实际气体流量 | |
BZQTLL | FLOAT | 标准气体流量 | |
FQLL | FLOAT | 废气流量 | |
JSVELMAXHP | FLOAT | 计算VelMaxHp(单位:km/h) | |
SJVELMAXHP | FLOAT | 实际VelMaxHp(单位:km/h) | |
GLSMJDGLSJ | FLOAT | 功率扫描阶段功率每秒数据(单位:kW) | |
SCZDLBGL | FLOAT | 实测最大轮边功率(单位:kW) | |
GLXZXS | FLOAT | 功率修正系数 | |
XZZDLBGLS | FLOAT | 修正最大轮边功率数 | |
VELMAXHPYD100 | FLOAT | 100% VelMaxHp烟度每秒数据(k和N) | |
VELMAXHPYD90 | FLOAT | 90% VelMaxHp 烟度每秒数据(k和N) | |
VELMAXHPCS100 | FLOAT | 100% VelMaxHp车速每秒数据(单位:km/h) | |
VELMAXHPCS90 | FLOAT | 90% VelMaxHp 车速每秒数据(单位:km/h) | |
VELMAXHPCS80 | FLOAT | 80% VelMaxHp 车速每秒数据(单位:km/h) | |
BTGD | FLOAT | 不透光度 | |
GCJCZT | FLOAT | 检测状态(1:功率扫描阶段,2:100%VelMaxHp检测阶段, :90%VelMaxHp检测阶段,4:80%VelMaxHp检测阶段) | |
STRENGTH | FLOAT | 力 | |
CGJXSGL | FLOAT | 测功机吸收功率过程数据 | |
CYDSJ | FLOAT | 采样点时间过程数据 |
OBD过程数据表
序号 | 字段名 | 字段类型 | 说明 | 备注 |
---|---|---|---|---|
ts | TIMESTAMP | 时序 | ||
Vn | NCHAR | 车牌号 | ||
jylsh | NCHAR | 检验流水号 | ||
jccs | INT | 检验次数 | ||
cyds | INT | 采样总点数 | ||
cysx | BIGINT | 以时序类别分类按顺序自增 | ||
jqmkd | FLOAT | 节气门绝对开度 | % | |
fh | FLOAT | 计算负荷值 | % | |
qycgqxh | FLOAT | 前氧传感器信号 | mV/mA | |
glkqxs | FLOAT | 过量空气系数(λ) | ||
ymkd | FLOAT | 油门开度 | % | |
cs | FLOAT | 车速 | km/h | |
fdjzs | FLOAT | 发动机转速 | r/min | |
jql | FLOAT | 进气量 | g/s | |
jqyl | FLOAT | 进气压力 | kPa | |
scgl | FLOAT | 发动机输出功率 | kw | |
zyyl | FLOAT | 增压压力 | kPa | |
hyl | FLOAT | 耗油量 | L/100km | |
no | FLOAT | 氮氧传感器浓度 | ppm | |
nsbsl | FLOAT | 尿素喷射量 | L/h | |
pqwd | FLOAT | 排气温度 | ℃ | |
klbjqyc | FLOAT | 颗粒捕集器压差 | kpa | |
egrkd | FLOAT | EGR 开度 | % | |
rypsyl | FLOAT | 燃油喷射压力 | bar |
4、 node.js 实现 emq 至 TDEngine的转储
function createConsumer(config = {}) {
const client = mqtt.connect("mqtt://XX.XX.XX.XX:1883", config);
client.on("connect", () =\> {
// 使用共享订阅 \$share/ 前缀
client.subscribe("VEHICLE/\#", (err, granded = []) =\> {
if (!err && granded[0].qos \<= 2) {
console.log("Consumer client ready");
}
});
});
client.on("message", handleMessage);
}
// 创建 10 个共享订阅消费者
for (let i = 0; i \< 1; i++) {
createConsumer();
}
// MQTT 处理订阅消息回调
async function handleMessage(topic, message) {
try {
console.log(topic, message.toString());
if (topic.includes("xxx")) {
// JSON 转对象
const p = JSON.parse(message.toString());
const resp = await exec(\`
INSERT INTO db_vehicle\${p.xxx.xxx}\${p.xxx.xxx } values(
'\${p.xxx.DATE+' ' +p.xxx.TIME}',
\${p.xxx.xxx},
\${p.xxx.xxx}
);\`);
console.log(\`Exec success:\`, resp.data);
}
} catch (e) {
console.log(
"exec insert error:",
e.message,
e.response ? e.response.data : ""
);
}
}
function exec(sql = "") {
console.log("exc sql", sql);
return axios({
method: "post",
url: "http://xx.xx.xx.xx:6020/rest/sql",
auth: {
username: "root",
password: "taosdata"
},
data: sql
});
}
5、实时时序过程数据分析
TDEngine很好的解决了过程数据的实时存储和连续查询功能,很好的实现了系统要求的数据吞吐性能,查询速度并不会因为数据的增加而有明显的增加,基本上0.02秒左右,时间段的任意查询大大的简化了程序的逻辑处理。
1、业务流程
注册登记检验流程
汽油:
柴油:
在用车辆
汽油:
柴油:
2.1 检测业务
该功能面向检测机构
1、合规性确认
检测机构在车辆检验完成后,对整个检验过程进行合规性核查,当出现影响检测过程准确性的情况,判定为检验过程不合规,该次检验无论检验结果合格或不合格都计为无效数据。机构工作人员需对检验数据、报告单、照片、视频等当次检验档案进行逐项核查,核查完根据事实情况做出合规性确认。合规性确认后方可进行数据上传和报告单打印等相关操作
2、不合规申请
根据不合规判定的原则,由于出现影响检测过程准确性的情况,车辆无需到M站维修,可以直接再次复检,因此当出现该情况时,为保障车主利益,检测机构工作人员应在系统中通过该功能发起不合规申请,由监管中心工作人员进行审核后可以立即复检。
3、车辆同步
车辆检验结束后该车的环检结果自动同步至公安安检平台。此外在免检车申请时,监管中心人员也应该在判定车辆免检提交数据的真实性后,进行手动同步数据。
4、检测实时数据
对检测业务数据进行实时查询,可查看车辆检测数据,外检照片,现场视频等相关数据。
5、车辆退办
车辆在检测过程中,受各方面影响,检测机构工作人员可在系统中申请退办该笔业务,退办原因必须在系统内进行如实备注。
6、检测终止
车辆在检测过程中,监管中心发现车辆上传的检测数据存在异常或其他特殊情况的,监管中心工作人员可以通过检测终止功能取消该次检测流程。终止后检测机构需重新进行该车检测业务。
7、检测方法修改
车辆在检测过程中,发现车辆存在异常问题,无法正常适配默认检测方法,可以在系统中进行检测方法修改,修改检测方法需备注变更方法原因,提交后可用其他方法进行检测,此功能只能由授权签字人进行操作。
8、免检车申请
若车辆由于处于免检有效期内,可以免于进行环保检测,因此检测机构工作人员可以对该类车辆信息进行录入拍照,提交免检车申请,由监管中心进行审核并同步车辆信息至公安,免于检测。
9、站务管理
检测机构可对站内人员进行设置,新增、修改、删除帐号,配置人员权限。也可在系统内对检测设备、检测线进行配置。
10、报告打印
车辆检测完成后,检测机构工作人员可以在检测记录中找到车辆检测记录进行报告打印,纸质报告盖章并由授权签字人签名后交予车主或机构自行存档。
11、I/M维修记录
交通管理部门将M站内完成的车辆维修记录传输至机动车排气污染监控平台,并在系统内生成对应车辆的维修记录列表,展示机动车基本数据、检测报告单数据,维修现场照片等相关维修数据,供检测机构查看。
12、视频监控
可以对检测机构内各检测线摄像头采集的视频信息进行实时调阅,可以在车辆检测中进行检测视频回放、也可以选择时间段进行回放。
13、检测统计
检测机构可通过查询统计功能对车型、合规率、合格率等数据进行统计并生成与之相对应的统计报表,以供检测机构了解日常检测作业情况。
2.2 监管业务
该功能面向管理部门
1、信息发布
管理部门工作人员可以通过监控平台实时发布通知公告信息,使用平台的所有用户都可以收到并查看通知公告信息。
2、退办车辆记录
管理工作人员可以通过退办车辆功能查询车辆所有退办记录。根据记录情况对检测机构业务开展规范性,是否存在一车多次退办等异常情况进行倒查。
3、不合规车辆记录
通过不合规车辆功能,可以查看全市所有不合规车辆情况,如出现某站大面积不合格车辆数据,可通过此功能对该站进行重点监管。
4、数据核查
车辆检测完成后,该车检测数据交由监管中心工作人员核查并备注核查意见,
5、数据复核
检测数据经过监管中心工作人员核查后,可由中心管理人员进行二次复核。
6、IM车辆维修
针对在IM制度中,可能出现各种异常情况或其他特殊原因,管理部门可以通过该功能取消特殊情况的车辆卡控进行上线。
7、方法变更
车辆在检测过程中,发现车辆存在制动、驱动等异常问题,无法正常适配默认检测方法,可以在系统中进行检测方法修改,修改检测方法需备注变更方法原因,提交后可用其他方法进行检测。所有方法变更痕迹都在系统中进行保留,以方法变更原因为准,核查历史变更方法车辆检测数据,如某站恶意频繁变更方法可以通过该功能进行数据溯源。
8、重点监管车辆
管理部门工作人员在日常工作过程中,根据中心管理要求可以对符合条件的车辆进行录入纳入重点监管车辆范围,通过对重点监管车辆的主动监管,提升宜宾市机动车排污监控能力。
9、免检车审核
若车辆处于免检有效期内,检测机构工作人员可以对该类车辆信息进行录入拍照,提交免检车申请,由监管中心进行审核并同步车辆信息至公安,免于检测。所有免检车需完整提交车辆信息、照片,由中心审核后同步公安。
10、抽查不合格数据
管理部门工作人员可对不合格车辆进行抽查,验证不合格车辆数据真实性、有效性。
11、手动审核
管理部门工作人员按照中心管理办法对已配置为手动审核范围的检测机构、检验方法对应的检验车辆数据进行逐一手动审核。批注审核结论和意见。
12、注册不合格车辆库
管理部门工作人员按照管理办法注册检验尾气不合格的车辆进行备案,录入车辆库,定期通过行政渠道反馈至车辆生产企业。
13、检测机构管理
管理部门工作人员按照中心管理办法对检测机构进行管理,查看检测机构资料、人员信息、检测线、检测设备等,可进行检测机构关停,检测线关停,检测人员帐号停用等相关操作。
14、I/M维修记录
交通管理部门将本市具备开展尾气维修治理的企业信息通过机动车尾气治理信息化管理系统传输至机动车排气污染监控平台,并在系统内生成对应车辆的维修记录列表,展示机动车基本数据、检测报告单数据,维修现场照片等相关维修数据,供管理部门和检测机构查看,并由环保部门依据职责对机动车排放检测机构的不合格车辆排放复检工作开展情况进行监督检查。
15、视频监控
可以对全市检测机构各检测线摄像头采集的视频信息进行实时调阅。可以在车辆检测中进行检测视频回放、也可以选择时间段进行回放。
16、统计
管理部门可通过查询统计功能对车型、合规率、合格率、核查率、核查通过率、核查量等数据进行统计并生成与之相对应的统计报表
2.3 手持终端APP应用模块
手持终端APP应用模块主要面向检测机构工作人员
检测机构工作人员通过输入机动车车辆基本信息,车牌号、车牌颜色、VIN码进行车辆登录进行外检操作
检测人员输入车牌号,系统自动通过公安接口获取机动车资料,并有检测人员补充其它车辆信息,完成车辆基本资料录入
检测人员对新车查验环保随车清单是否与信息公开内容是否一致。检查车辆污染控制装置和发动机与环保信息随车清单是否一致。对在用车检查被检车辆的车况是否正常、检查发动机排气管、排气消声器和排气后处理装置的外观及安装紧固部位是否完好、检查车辆是否配置有OBD系统、判断车辆检测方法、确认车辆轮胎表面无夹杂异物、查验污染控制装置是否完好等相关检验工作,对三项否决项重点检查1、排气污染控制装置是否齐全,正常2、燃油蒸发控制系统是否正常3、车辆是否存在烧机油、或者严重冒黑烟现象,若以上三点存在问题,外检直接判定车辆不合格,检测流程结束。最后按照要求拍照并上传。
系统会将车辆以列表形式在系统内展示,检测人员也通过该功能查看当前待检车辆外检记录,也可查看车辆历史外检记录。
随着TDEngine
2.0版本的到来,开源了分布式多节点功能,弥补了原有社区单机版的遗憾,让我觉得选择TDEngine
这个生态超级幸运。
通过系统实践,不仅满足了系统设计的初衷,而且带来了更多惊喜,在以后的项目中,笔者将继续实践TDEngine新功能,包括引入linux
版本的边缘存储架构去适应更多工业控制采集领域对响应时间的严格要求,可维护性强,硬件资源占用极少的TDEngine将大放异彩。