微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > 基于PLC的Modbus通信协议的实现

基于PLC的Modbus通信协议的实现

时间:10-08 来源:互联网 点击:

停止位, 波特率9 600 bps。 修改D8120 设置后, 确保通断PLC 电源一次。 再用RS 指令进行数据的传输, 相关程序格式如图4 所示。


图4 RS 指令程序格式

按照上述程序格式, 即可在数据发送区写入指令进行相应的操作。

1) 读取温度, 其指令格式: [ 设备地址] [ 命令号] [ 通道号] [ 传感器编号] [ 读取个数高8 位] [ 低8位] [ CRC 低8 位] [ CRC 高8 位] , 其中CRC 校验字节以子程序形式调用. 设备响应: [ 设备地址] [ 命令号] [ 返回的字节个数] [ 数据1] [ 数据2] . . . [ 数据n] [ CRC 低8 位] [ CRC 高8 位] 。

每个18b20 读取温度的返回值占用两个字节.

转换方法: 将实际温度扩大100 倍, 再将此数值分为两个字节传送出来即可. 例如, 实测出来温度是28.65℃ , 扩大100 倍即2 865, 则发送的第一个字节是2 865/ 256 即是11, 第二个字节是2 865% 256 即49, 那么传送的两个字节为0×0B 和0×31。

需要注意的是, 由于采用两线制的485 连线方式, 会产生回波通信, 即接收端会先接收到自己发送出去的数据, 但数据还是会正常发送给采集模块, 此时接收端则应该避开前面的无用数据, 接收后面模块响应的有效数据。

2) 在系统运行后, 若需更换传感器, 则需执行以下两条指令, 首先, 搜索ID, [ 01] [ 06] [ 0c] [ 00][ 00] [ 00] [ CRC 低] [ CRC 高] , 此指令为搜索模块1上各个通道的所有传感器。 然后写编号, 例如: [ 01][ 06] [ 09] [ 05] [ 00] [ 05] [ CRC 低] [ CRC 高] , 表示将第9 通道的原来编号为05 的传感器更换后重新设定为05, 执行此两条指令后, 方可重新读取温度。

3) CRC 校验字节的生成是比较关键的一步,其过程比较复杂, 步骤如下:

①预置一个16 位CRC 寄存器为十六进制FFFF, 即所有数位均为1。

②该16 位寄存器的低8 位字节与信息帧的第一个字节的低8 位进行 异或?运算. 运算结果放入这个16 位寄存器。

③ 把这个16 寄存器向右移一位, 用0 填补高位。

④若向右( 标记位) 移出的数位是1, 则生成多项式A001( 1010000000000001) 和这个寄存器进行“异或”运算; 若向右移出的数位是0, 则返回③。

⑤重复③ 和④, 直至移出8 位。

⑥重复③ ~⑤, 直至该报文所有字节均与16 位寄存器进行 异或?运算, 并移位8 次。

⑦将得到的l6 位CRC 寄存器的高、低位字节进行, 即2 字节CRC, 加到报文。

其程序流程如图5, 以上面的温度读取指令为例, 其CRC 校验梯形图如图6。


图5 CRC 校验流程

图6 CRC 校验程序

在读取温度时, 应严格遵守DS18b20 的读写时序, 否则就会出现错误, 丢帧等, 若用脉冲信号定时读取, 则间隔应不小于100 ms. 一般出现错误帧时数据显示为0℃, 此时可以进行简单的滤波, 例如传回值为0 时不显示数据, 或者多组数据取平均值后再显示, 以避免温度显示的大幅度跳动。 DS18b20的初始化温度显示为85℃, 若一直不变, 则此传感器可能已经损坏或是接线不良, 应进行相应的检查。

4 结束语

该系统应用于生产过程实时监控中, PLC 既作为现场控制机完成对生产过程的自动控制, 又作为主从通信的主机, 与相关仪表连接, 实现与基于Modbus 现场总线协议的DS18b20 型数字温度传感器的采集模块的主从通信, 并通过PLC 高速实时网络实现对其的远程监控。 该系统目前处于试运行阶段, 表现较为稳定, 通信可靠, 效果良好。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top