温控器的out灯不亮了怎么办(从0到1,我们一起调试温控仪表)

Posted

篇首语:人起心发,树起根发。本文由小常识网(cha138.com)小编为大家整理,主要介绍了温控器的out灯不亮了怎么办(从0到1,我们一起调试温控仪表)相关的知识,希望对你有一定的参考价值。

温控器的out灯不亮了怎么办(从0到1,我们一起调试温控仪表)

大家好,我是程序员小哈。

最近拿到客户买的一个温控仪表,让我编个软件,读取一下这个仪表的实时温度数据,今天我们就从0到1,看看小哈哥是怎么来实现这个功能的。

基本功能

拿到一个新的模块,首先我们要看的就是它的官方资料,本模块自带一个使用说明书,我们先对其整体进行一个大致的了解吧。

型号定义

首先我们看一下这个模块使用说明的手册中,它的型号定义由以下9部分组成:

具体的型号在模块的外壳上有具体标识:

两者对应一下,我们可以得出:

AI-标识仪表的型号,由此可以得出此模块的型号是AI-756P

SIZE,标识仪表面板的尺寸规格,A 对应的面板规格为96x96mm;

MIO,表示仪表辅助输入(MIO)安装的模块规格:可安装I4、K3、V等模块,N表示没有安装;

OUTP,仪表主输出安装的模块规格;

ALM,仪表报警安装的规格说明;

AUX,仪表辅助输出安装的模块规格;

COM,仪表通讯安装的模块规格;

POWER,仪表供电电源,此处没标,表示使用的100~240VAC电源;

⑨ 表示仪表扩充的分度表规格,如果没有,则不写。


接线方法

因为我们最终目标是读取仪表的实时温度,所以我们要了解一下如何与仪表进行数据通讯。

首先我们使用USB转485线与上图COMM口的③④位置相连,A对A,B对B。

① ② 位置接220V电源供电。

⑱⑲⑳位置接一个PT100用于测试使用。

通信协议

这个仪表支持两种通信协议,一个是自己公司的通讯协议AIBUS,一个是兼容的Modbus协议。

自定义AIBUS通信协议

发送指令

: 地址代号+52H(82)+要读的参数代号+00+00+校验码

: 地址代号+43H(67)+要写的参数代号+写入数低字节+写入数高字节+校验码


说明

(1)地址代号:两个相同的字节,数值为(仪表地址+80H)

例如:仪表地址为10(16进制数表示为0AH,0A+80H=8AH),所以该仪表的地址代号为:8AH 8AH。

(2)参数代号:相当于命令类型,由一个字节表示

(3)校验码

读指令校验码:参数代号*256+82+ADDR

写指令校验码:参数代号*256+67+写入的参数值+ADDR

求得的和与0xFFFF取余数,余数为2个字节,低字节在前,高字节在后。

测试指令:81 81 52 00 00 00 53 00


返回数据

无论读还是写,仪表都返回以下10个字节数据:

测量值 PV+给定值 SV+输出值 MV 及报警状态+所读/写参数值+校验

说明

(1)、PV、SV及读取的参数值均各占2个字节,是一个16位有符号补码的整数,低位字节在前,高位字节在后

(2)、返回校验码:为 PV+SV+(报警状态*256+MV)+参数值+ADDR 按整数加法相加后得到的余数。


注意:我手里的仪表型号为S7,经过咨询官方,此型号的模组不支持自定义的AIBUS协议。。

MODBUS兼容通信协议

AI 仪表采用 RTU(二进制)模式, 波特率必须设置为 9600bit/S,无奇偶校验位,支持 03H(读参数及数据)及 06H(写单个参数)这两条指令。


读指令

读数据要求一次性读取4个字节数据,指令如下:

ADDR+03H+00+要读的参数代号+00+04+CRC 校验码

返回数据为:ADDR+03H+08H+测量值 PV 高位+测量值 PV 低位+给定值 SV 高位+SV 低位+报警状态+输出值 MV+所读参数值高位+所读参数值低位+CRC 校验码低位+CRC 校验码高位

例如可以发送:01 03 00 01 00 04 15 C9


写指令

写单个参数指令为:

ADDR+06H+00+要写的参数代号+要写入的数据高位+要写入数据低位+CRC 校验码

注意:仪表默认地址为0x01。

代码实现

我们之前分享过基于Qt开发的Modbus程序,我们今天就在之前的代码基础上完成此次测试。

首先G众号【嵌入式从0到1】后台回复:Qt-Modbus 获取基础源码,然后我们将界面重新布局为如下效果:

这个程序是在串口事件中接收并处理数据,有时会出现串口数据分包的情况。

一帧数据接收不完整,我们就没办法直接对接收到的数据进行解析,今天我们对程序进行一下优化。

我们仿照之前分享的STM32进行串口数据接收的方法——定时器法,当串口事件响应时,我们启动一个短时间的定时器,因为一帧数据包内的数据,即使分包了,那么包与包之间的时间间隔也很短,所以,在串口事件中,我们启动定时器,相当于让定时器重新计时,这样,当不能再接收到数据时,那么定时器的超时事件就会发生,我们在定时器超时的函数中,对接收的数据进行解析,这样就能够避免分包导致的数据不完整,具体实现如下:

连接信号槽

我们在打开串口的事件函数中,定义一个串口接收事件的函数和一个定时器事件函数。

//连接信号槽 当下位机发送数据QSerialPortInfo 会发送个 readyRead 信号,我们定义个槽void receiveInfo()解析数据connect(m_serialPort,SIGNAL(readyRead()),this,SLOT(receiveInfo()));timerSerial = new QTimer(this);connect(timerSerial,SIGNAL(timeout()),this,SLOT(TimerUpdate()));


串口接收事件

在串口接收函数中,我们启动定时器,相当于重置定时器。

此定时器的时间,根据需要和实际情况,尽量短。

//重置定时器void MainWindow::receiveInfo()    timerSerial->start(100);

定时器超时事件中处理串口数据

在定时器超时函数中,我们关闭定时器,然后一次性读取所有的串口数据,进而对接收到的串口数据进行解析。

void MainWindow::TimerUpdate()    timerSerial->stop();    qDebug()<<"receiveInfo()";    QByteArray info = m_serialPort->readAll();    QString strReceiveData = "";    QByteArray hexData = info.toHex();    strReceiveData = hexData.toUpper();    qDebug()<<"接收到串口数据: "<<strReceiveData;    for(int i=0; i<strReceiveData.size(); i+=2+1)        strReceiveData.insert(i, QLatin1String(" "));    strReceiveData.remove(0, 1);    qDebug()<<"处理后的串口数据: "<<strReceiveData;    ui->txtReceiveData->append(strReceiveData);	//对接收到的数据进行判断处理    ... ...

主要能拿到完整的串口数据,那么对数据的解析也就简单了,大家感兴趣的话,可以G众号后台回复:Qt-Modbus-2 ,获取本文测试工程源码及产品手册。

有了上面的介绍,剩下的参数代码的功能,小伙伴们自己可以尝试实现一下。

结果展示

询问了官方,我用的AI-756P型号的仪表参考719P型号的仪表通信协议即可,我们要读取仪表的当前温度,即PV值,所以寄存器地址应该为0x02。

我们演示一下操作过程,我们可以看到,没有发生串口数据分包的现象。

总结

今天主要分享一个小哈哥最近使用的仪表,大家看看有个印象就好,万一哪天需要类似产品,自己找起来也有个方向。

另外就是分享一个,如果遇到Qt接收数据包不完整的情况怎么办?

好了,今天的文章内容到这里就结束了,希望对你有帮助,我们下一期见,记得给小哈哥点个赞,支持一下哈!~。

相关参考

灯不亮了怎么修(冰箱里的灯不亮了是什么原因?冰箱的灯坏了怎么维修?)

冰箱里的灯不亮了是什么原因及解决办法1.一般是灯坏了,照明灯有可能损坏或接触不良。方法:你可以把灯折下来看看灯丝有没有断,就是普通的小脚白帜灯泡很容易看出来好坏,并采取相应的措施。联系客服上门更换一个即可...

灯不亮了怎么修(冰箱里的灯不亮了是什么原因?冰箱的灯坏了怎么维修?)

冰箱里的灯不亮了是什么原因及解决办法1.一般是灯坏了,照明灯有可能损坏或接触不良。方法:你可以把灯折下来看看灯丝有没有断,就是普通的小脚白帜灯泡很容易看出来好坏,并采取相应的措施。联系客服上门更换一个即可...

新捷达后备箱灯不亮了(保养灯报警消除步骤)

新捷达VS7开了有快一年时间了,聊一下保养灯怎么消除?希望可以帮助到大家!新捷达VS7消除保养灯报警:扳手是保养时师傅设置的,用来提示车主到时间了,到公里了去保养。(中低配是英文提示的,设置都是一样的。)去不...

灯不亮了有哪些原因(行车灯不亮的原因)

有很多的车主都遇见过行车灯不亮的情况,这究竟是怎么原因?行车灯不亮的原因有很多种,可能是车俩设置中把行车灯进行了关闭,这主要是在设置上进行了调整,只要调整过来就好了。其他的原因可能是因为发生故障所引起...

灯不亮了有哪些原因(行车灯不亮的原因)

有很多的车主都遇见过行车灯不亮的情况,这究竟是怎么原因?行车灯不亮的原因有很多种,可能是车俩设置中把行车灯进行了关闭,这主要是在设置上进行了调整,只要调整过来就好了。其他的原因可能是因为发生故障所引起...

日间行车灯不亮了(“白天用不上,晚上又不亮”,日间行车灯莫非收割“智商税”?)

...道知识改变命运,科技改变生活的道理,尽管说日间行车灯不如“无人驾驶”那样高大上,但是它的存在也给车主们带来了一丝新鲜感。虽说日间行车灯给车主

日光灯亮不起来(led灯不亮了怎么修?led日光灯应该怎么接线?)

...要更换led灯外壳。大家可以看下上面这幅图片,上面的LED灯不好用了,这种L

本田雅阁锁车是为何灯不亮了(预防孩子被锁车内,你要教会他这些)

□大河报·大河客户端记者刘婷婷近几年,每到夏季,都会有几起因孩子被困车内而引发的事故见诸报端。近期,这样的悲剧再次上演,也给家长敲响了警钟。警惕:幼儿被锁车内死亡悲剧再次上演4月9日下午,合肥市新站区三...

熔接机电池充电灯不亮了(旋转式熔接机维修)

「链接」旋转式熔接机维修,一般出现以下几种情况是需要维修的。一、故障现象;1、开机后,机器不能正常工作,或工作过程中突然停止。2、通电后,电机不转动。3、通电时,电源指示灯亮。4、加热片温度过高或过低(超...

熔接机电池充电灯不亮了(旋转式熔接机维修)

「链接」旋转式熔接机维修,一般出现以下几种情况是需要维修的。一、故障现象;1、开机后,机器不能正常工作,或工作过程中突然停止。2、通电后,电机不转动。3、通电时,电源指示灯亮。4、加热片温度过高或过低(超...