基于PLC的Modbus通信协议的实现
扫描二维码
随时随地手机看文章
随着3C 技术迅速发展, 网络集成信息自动化正迅速应用到现场设备、控制中, 现场总线控制系统正逐步取代传统的集散控制系统, 其中Modbus 现场总线协议在基于PLC 的控制系统中得到了越来越广泛的应用. 在本系统中, 以PLC 为主机、温度采集模块为从机, 完成对生产过程的自动控制、工业流程及工艺参数的显示、修改, 根据PLC 的无协议通信功能, 用Modbus 现场总线协议实现主机与从机的通讯。
本文基于某监控系统的设计, 实现了三菱FX2N 系列PLC 在无协议通信方式下与DS18b20型数字温度传感器的采集模块以Mo dbus 协议通信, 在电炉熔化工作过程中, 对电炉、电容、冷却水等100 多点的温度实现巡检。
1 系统硬件组成
温度监控部分系统的硬件由DS18b20 型数字温度传感器、采集模块、FX2N 系列PLC、FX2N-485-BD、HITECH 触摸屏组成, 其结构如图1 所示。
图1 系统硬件组成
DS18b20 是世界上首个支持单线总线接口( 1w ire bus inter face) 的数字化温度传感器, 单总线接口便于构建分布式的温度测控网络, 数字化的输出提高了信号传输的可靠性, 而且使外围电路大为简化。 DS18b20 具有很高的适应性和性价比, 其测温范围为- 55~ 125 ℃ , 测温精度为±0. 5℃ , 测温距离最大为200 m , 测温方式使用3 线制, 本系统使用的传感器排序方式为指定排序。
DS18b20 内部主要有3 个数字部件: 1 个温度传感器、1 个64 位的激光刻蚀ROM、9 字节高速暂存器Scratchpad RAM 和3 字节EERAM. ROM 上64 位数据是传感器的序列号。暂存器确保数据的完整性, 数据先被写入暂存器, 并可以被读回. 数据经校验后, 可以由拷贝暂存器命令传输到EERAM, 以确保更改存储器时数据的完整性。暂存器为9 个字节, 第0 和第1 字节是温度编码的低字节和高字节.
第2 和第3 字节是温度编码的低字节和高字节的拷贝, 第4 字节是配置寄存器, 其值决定温度转换的分辨率。
本系统采用的STA-D 温度采集模块, 是一种远程数字化温度采集系统, 有10 个通道, 每个通道最多可以挂接16 个DS18b20 型数字温度传感器,总共可以监控160 个点的温度, 以RS485 方式同上位机通讯, 通信协议为标准Modbus 协议, 波特率为9 600 bps, 与上位机通信距离最大为1 200 m, 工作电源为12 ~ 24 V, 工作温度为- 20 ~ 75 ℃。 与FX2N??485??BD 采用两线制的485 连线方式( 图2) ,接线要使用规范的屏蔽线。
图2 485 连接图
台湾HITECH 公司触摸屏PWS 系列是专为PLC 设计的互动式工作站, 用232 直接与PLC 连接, 可以直接读取PLC 的数据寄存器, 具有良好的人机界面, 操作人员通过它可设置所有参数, 控制系统自动运行。并且编程简便, 运行稳定, 可设置不同的管理权限, 适合于本系统使用。
2 Modbus 协议
标准的Modbus 口是使用RS??232C 兼容串行接口, 它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验, 控制器能直接或经由Mo dem 组网. 控制器通信使用主! 从技术, 即仅一设备( 主设备) 能初始化传输( 查询) , 其它设备( 从设备) 根据主设备查询提供的数据作出相应反应。
表1 Modbus 部分功能码定义
Modbus 通讯协议有两种传送方式? RT U 方式和ASCII 方式。 本系统使用RTU 模式, 这种方式的主要优点是: 在同样的波特率下, 可比ASCII 方式传送更多的数据。
使用RTU 模式时, 消息发送至少要以3. 5 个字符时间的停顿间隔开始, 如图3 的T1- T 2- T 3- T 4 所示。 传输的第一个域是设备地址, 可以使用的传输字符是十六进制数值。 通信期间, 网络设备不断侦测网络总线, 包括停顿间隔时间内, 当第一个域( 地址域) 接收到, 每个设备都进行解码以判断是否发往自己的。 在最后一个传输字符之后, 至少要有3. 5 个字符时间的停顿以标定消息的结束, 之后可开始新的消息传输。典型的消息帧如图3 所示。 使用RT U 模式, 消息包括了一个基于CRC 方法的错误检测域. CRC 域检测了整个消息的内容。
图3 M odbus 消息帧结构
CRC 域是两个字节, 包含一个16 位的二进制值。它由传输设备计算后加入到消息中。 接收设备重新计算收到消息的CRC, 并与接收到的CRC 域中的值比较, 如果两值不同, 则有误, 后面将具体讲述CRC 算法的实现。3 系统软件构成
考虑到操作的方便性, 在系统初次安装时, 先在PC 机上用上位机软件将所有传感器的ID 搜索出来, 然后按实际安装位置给每个传感器编号, 读温度测试传感器是否工作正常。在PLC 上使用Mo dbus协议通信时首先要对通信格式进行设定, 即对D8120 寄存器进行写操作, 在本系统条件下设置为0C87 , 即数据长度为8 位, 无校验, 无起始位与停止位, 波特率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 高速实时网络实现对其的远程监控。 该系统目前处于试运行阶段, 表现较为稳定, 通信可靠, 效果良好。