处理中...

首页 > 资料大全 > 解决方案 >

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

基于PLC的Modbus通信协议的实现
来源:EDN电子设计技术 时间:2011-10-24

  随着3C技术迅速发展,网络集成信息自动化正迅速应用到现场设备、控制中,现场总线控制系统正逐步取代传统的集散控制系统,其中Modbus现场总线协议在基于PLC的控制系统中得到了越来越广泛的应用。在本系统中,以PLC为主机、温度采集模块为从机,完成对生产过程的自动控制、工业流程及工艺参数的显示、修改,根据PLC的无协议通信功能,用Modbus现场总线协议实现主机与从机的通讯。

  本文基于某监控系统的设计,实现了三菱FX2N系列PLC在无协议通信方式下与DS18b20型数字温度传感器的采集模块以Modbus协议通信,在电炉熔化工作过程中,对电炉、电容、冷却水等100多点的温度实现巡检。

  1 系统硬件组成

  温度监控部分系统的硬件由DS18b20型数字温度传感器、采集模块、FX2N系列PLC、FX2N-485-BD、HITECH触摸屏组成,其结构如图1所示。

图1 系统硬件组成

  DS18b20是世界上首个支持单线总线接口(1wirebusinteRFace)的数字化温度传感器,单总线接口便于构建分布式的温度测控网络,数字化的输出提高了信号传输的可靠性,而且使外围电路大为简化。DS18b20具有很高的适应性和性价比,其测温范围为-55~125℃,测温精度为±0.5℃,测温距离为200m,测温方式使用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协议,波特率为9600bps,与上位机通信距离为1200m,工作电源为12~24V,工作温度为-20~75℃。与FX2N485BD采用两线制的485连线方式(图2),接线要使用规范的屏蔽线。

图2 485连接图

  台湾HITECH公司触摸屏PWS系列是专为PLC设计的互动式工作站,用232直接与PLC连接,可以直接读取PLC的数据寄存器,具有良好的人机界面,操作人员通过它可设置所有参数,控制系统自动运行。并且编程简便,运行稳定,可设置不同的管理权限,适合于本系统使用。

  2 Modbus协议

  标准的Modbus口是使用RS232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验,控制器能直接或经由Modem组网。控制器通信使用主从技术,即仅一设备(主设备)能初始化传输(查询),其它设备(从设备)根据主设备查询提供的数据作出相应反应。

表1 Modbus部分功能码定义

  Modbus通讯协议有两种传送方式RTU方式和ASCII方式。本系统使用RTU模式,这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。

  使用RTU模式时,消息发送至少要以3。5个字符时间的停顿间隔开始,如图3的T1-T2-T3-T4所示。传输的个域是设备地址,可以使用的传输字符是十六进制数值。通信期间,网络设备不断侦测网络总线,包括停顿间隔时间内,当个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在后一个传输字符之后,至少要有3。5个字符时间的停顿以标定消息的结束,之后可开始新的消息传输。典型的消息帧如图3所示。使用RTU模式,消息包括了一个基于CRC方法的错误检测域。CRC域检测了整个消息的内容。

图3 Modbus消息帧结构

  CRC域是两个字节,包含一个16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误,后面将具体讲述CRC算法的实现。

  3 系统软件构成

  考虑到操作的方便性,在系统初次安装时,先在PC机上用上位机软件将所有传感器的ID搜索出来,然后按实际安装位置给每个传感器编号,读温度测试传感器是否工作正常。在PLC上使用Modbus协议通信时首先要对通信格式进行设定,即对D8120寄存器进行写操作,在本系统条件下设置为0C87,即数据长度为8位,无校验,无起始位与停止位,波特率9600bps。修改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倍即2865,则发送的个字节是2865/256即是11,第二个字节是2865%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的读写时序,否则就会出现错误,丢帧等,若用脉冲信号定时读取,则间隔应不小于100ms。一般出现错误帧时数据显示为0℃,此时可以进行简单的滤波,例如传回值为0时不显示数据,或者多组数据取平均值后再显示,以避免温度显示的大幅度跳动。DS18b20的初始化温度显示为85℃,若一直不变,则此传感器可能已经损坏或是接线不良,应进行相应的检查。

  4 结束语

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

 

 

 

 

 

 

热门推荐

更多 >
ESP32-S3 2022-03-16
RG200U 2022-03-16
USR-C322 2022-03-16

资料浏览排行榜

更多 >
商品名称 大小 浏览量
1 EPCS128SI16N 0.94MB 22004次
2 1N4001 0.19MB 17871次
3 DAC1220E 0.95MB 15870次
4 EP1C6Q240I7N 2.47MB 15826次
5 GRM32RR71H105... 0.10MB 14009次
6 DR127-3R3-R 0.72MB 11686次
7 DMG2305UX-7 0.40MB 9284次
8 DMP2008UFG-7 0.24MB 9071次
9 DS1337U+ 0.28MB 9067次
10 DX4R105JJCR18... 0.26MB 8985次