实验设备:CJ2M-CPU33、CJ1W-SCU21-V1、XW2Z-200S-CV、Modbus RTU从站助手
实验目的:SCU模块通过串口网关功能实现Modbus RTU主站功能
1.系统概述和硬件搭建
系统概述:
本次实验通过SCU模块的串口网关功能,使用FINS Command #2804功能码将FINS命令转换为Modbus RTU命令通过CMND指令发送给从站,接受从站的响应。
串口网关的实质就是通过FINS Command (2804Hex、2803Hex、2805Hex)将FINS协议分别转换为Modbus RTU、Modbus ASCII、CompoWay/F协议。在发送区域加上相应的功能码时,PLC串口在发送数据时会根据功能码自动的去掉FINS的头代码、功能码和校验码,将数据区Modbus RTU、Modbus ASCII、CompoWay/F协议的命令发送出去,从而实现协议的转换,原理图参考注意事项。
硬件接线:
2.相关设置
I/O表和SCU模块设置,创建I/O,SCU模块单元号为8,串口设置Serial Gateway,如图:
Modbus Slave从站助手设置如下:
3.程序编写
本次实验通过SCU主站往从站0001Hex地址写入#1234,使用功能码为06,程序如下:
4.实验现象
触发W1.00执行CMND指令,可以看到数据写到了从站0001Hex地址中,并且可以通过从站助手监视到串口数据的交互,如图:
PLC响应地址D400-D404接收到的数据,如图:
5.注意事项
(1)发送区数据:
① #2084表示FINS Command将FINS协议转换为Modbus RTU;
② 不需要写校验码,只要写到校验之前就行了;
③ 本次实验Modbus RTU命令为:01 06 0001 1234(校验不要写),向从站的0001hex地址写入#1234
④ Modbus RTU响应数据为:01 06 0001 1234(校验不接收)
(2)响应区数据:
CMND响应区实际接收到的数据为:2084 0000 01 06 0001 1234(校验不接收),在响应区域里会多四个字节,分别为FINS Commond和Error code各占两个字节;
① #2084 FINS Command;
② #0000 FINS Error code,#0000表示正常结束;此Error code也可以通过A203-A210查看(对应8个逻辑端口)。
(3)C控制字——端口指定
CMND指令发送区域的数据是从哪个端口发出的,由C+2和C+3两个控制字决定,端口指定方式有两种:
① 当C+2的08-11位为#00,不使用时:那么发送数据的端口由C+3的00-07位决定,方法如下:
SCU端口1:80 Hex + 04 Hex ×单元号,单元号为8时80 Hex + 04 Hex × 8 = #A0(本次实验使用的是端口1,即C+3 = #00A0)
SCU端口2:81 Hex + 04 Hex ×单元号
② 当C+2的08-11位不为#00时,那么发送数据的端口由C+2的08-11位和C+3的00-07位共同决定决定,方法如下:
C+3的00-07位为:10 Hex + 单元号
C+2的08-11位为1表示端口1,2表示端口2
使用的SCU单元号为8,端口1,即C+3的00-07位为#18,C+2的08-11位为#1。
(4)路由表说明:
如果SCU端口做了路由表的话C+2的00-07位设置为端口的网络号,如下:
注意:在做了路由表的情况下C+2的00-07位写#00也是可以发送数据的;
(5)FINS 功能码说明:
只有SCU或者SCB串口网关才支持下面几种FINS功能码,CJ本体自带的串口或者外设口只支持将FINS转换为CompoWay/F(2803Hex功能码)。如果用CJ自带的口做Modbus RTU、Modbus ASCII、Hostlink时,执行CMND指令是无法是发送数据的,串口的灯都不亮。在使用CJ本体做CompoWay/F时,CMND的C+3的00-07位设置为FD和FC分别指定发送端口为外设口和RS-232口。
串口网关的实质就是通过FINS Command (2804Hex、2803Hex、2805Hex)将FINS协议分别转换为Modbus RTU、Modbus ASCII、CompoWay/F协议。在发送区域加上相应的功能码时,PLC串口在发送数据时会自动的去掉FINS的头代码、功能码和校验码,将数据区Modbus RTU、Modbus ASCII、CompoWay/F协议的命令发送出去,从而实现协议的转换。
Modbus RTU Slave从站助手百度云下载链接:
百度网盘 请输入提取码 提取码:zyk6