前段时间接了个活:把产线上的在线式热像仪温度数据接到我们自己的监控系统里。听起来简单,真做起来发现"温度数据导出"这个词背后藏着三套完全不同的技术路线,而且每条路线都有坑。折腾完把整个过程整理成文,给有同样需求的同学留个参考。
本文涉及的设备为格物优信在线式热像仪(固件带"-mb"后缀),SDK与软件版本以官网技术支持页面下载的为准。以下所有接口名、参数均来自实际对接过程,但具体签名请以对应型号的开发文档为准。
一、先想清楚:你要的是哪种数据
动手之前必须先明确数据形态,这决定了后续所有工作。热像仪能导出的温度相关数据分三类:
数据形态 | 内容 | 典型用途 |
温度流(原始数据) | 全帧16位原始温度,逐像素 | 算法开发、温度场分析 |
视频流数据 | H.264编码视频/截图 | 存档、巡检回溯 |
特征温度 | 全局/局部测温对象的统计值(最多16个) | 监控报警、PLC联动 |
全帧原始数据只有SDK能拿到,Modbus和软件导出都给不了。这一点先记住,后面会反复用到。
二、路线一:SDK二次开发(拿原始温度流)
2.1 整体流程
plain
复制
Yoseen_StartPreview(回调注册)
→ 回调中接收 DataFrame 结构体
→ Yoseen_GetTemperature / Yoseen_GetTemperatures 按区域取温
→ 用 DataFrameHeader 的 Slope/Offset 换算真实温度
→ 自行保存为 CSV / TXT
2.2 关键步骤说明
第一步,取帧。调用实时预览接口 Yoseen_StartPreview,在回调函数中接收 DataFrame 结构体。这个结构体里有全帧画面的16位原始温度数据——这是整个链路的源头。
第二步,按区域取值。调 Yoseen_GetTemperature(单点)或 Yoseen_GetTemperatures(区域),传入 DataFrame 中的温度数据指针和区域坐标,返回指定区域的最高温、最低温、平均温。
第三步,温度换算——本路线最大的坑。拿到的原始值是short 型,不是温度。必须结合每帧数据头 DataFrameHeader 里的 Slope 和 Offset 系数:
plain
复制
真实温度(℃) = short值 ÷ Slope + Offset
我第一次对接时就是没做这步,数据库里存了一万多条"温度"几千的脏数据,全部清掉重来。Slope 和 Offset 是每帧都给的,不要图省事写成常量。
第四步,导出。换算后的温度值按业务需要保存,CSV、TXT或直接入库都行,逻辑自己写。
2.3 实测注意点
视频流数据同样走 Yoseen_StartPreview,回调里拿的是 H.264 编码数据,和温度流是两个不同的数据面;
自定义录制逻辑和格式转换都要在这一层自己实现,灵活度最高,工作量也最大。
三、路线二:配套软件导出(零编程)
适合快速验证、出报告,不用写一行代码。
3.1 基本操作
IRTool Pro / IRStudio 中搜索并连接热像仪,启动实时预览(温度流或视频流均可);
用截图、录制或数据点分析工具捕获数据;
保存为含温度信息的 JPG(可后期分析),或导出 CSV(含测温点/区域的温度值)。
如图为多帧温度数据导出回看
3.2 一个容易忽略的细节:两种截图不一样
截图类型 | 生成位置 | 效果 |
温度流截图 | 电脑端温度数据 | 最佳 |
视频流截图 | 设备端 H.264 解码 | 有细节损失 |
写报告建议统一用温度流截图。
如上stream 格式带温度流的文件
3.3 只要画面的两条捷径
RTSP流:直接访问设备的标准RTSP地址,VLC 就能播放和录制,兼容性最强,但没有温度数据;
PAL模拟输出:部分设备支持,直连显示设备或采集卡即可。
四、路线三:Modbus协议(接PLC/自动化)
这条路线的前提是固件带"-mb"后缀,采购或升级固件时务必确认。
4.1 快速验证:ModbusPoll
建立连接:Modbus-TCP 走502端口,或 Modbus-RTU;
参数设置:
参数项 | 设置值 |
Function | 04 Read Input Registers(3x) |
Address | 1 |
Quantity | 测温对象个数 × 8 |
连上后即可周期性或手动读取特征温度(最高温、最低温、平均温及坐标),工具内直接查看或导出。
4.2 正式集成:寄存器直连
按寄存器地址映射表编程读取,例如:
寄存器 | 含义 |
30001 | 全局最高温 |
30009–30016 | 局部测温1 |
读数单位是 0.1℃,用之前除以10。这是这条路线的第二个坑,Modbus读回来的数比实际温度大十倍不是设备坏了。
4.3 SDK方式取特征温度
不想走协议、又已经在用SDK的话,直接调 mtGetResult 或 mtCheck,从温度流数据帧中提取已配置测温对象的特征温度结果,再保存为 TXT/CSV。
五、三条路线怎么选
方式 | 优点 | 适用场景 |
软件导出(IRTool Pro+工具) | 直观、零编程 | 实验室测试、现场诊断、数据验证 |
SDK编程 | 灵活、可定制自动化 | 嵌入式集成、自动化产线、定制开发 |
Modbus协议 | 不依赖PC软件 | PLC控制、工业自动化、无人值守监测 |
我的实际搭配是:ModbusPoll十分钟验证数据通路 → 正式项目走寄存器直连接PLC;算法部分另起一套SDK程序取原始温度流。
六、踩坑清单(速查版)
short原始值必须经 Slope/Offset 换算,且系数取每帧的 DataFrameHeader,别写死;
Modbus 读数单位 0.1℃,注意换算;
固件无 "-mb" 后缀则无 Modbus 功能;
软件导出的 CSV 是结果数据,不是逐像素原始数据,做不了算法;
接口名可能随型号/版本有差异,一切以对应型号的开发文档为准。