5、MODBUS RTU主从站实验ST


功能:1.主站:读取从站中的数据;
           2.从站:等待主站来读取相应寄存器中的数据;
应用场景:广泛应用于Modbus RTU协议;

MODBUS RTU主从站实验ST源码下载:
5.MODBUS RTU主从站实验ST.rar
2.2 MB

一、下载程序及重点参数

1. 下载好MODBUS RTU主从站实验ST源码,解压并打开程序;
备注:打开程序后
如出现如图1.0的弹窗:“解压到以下文件夹”→通过“...”选择解压程序所在位置→勾选②框内的所有复选框→点击确定
图1.0
如出现如图1.1的弹窗:单击“全部设置为最新”后,单击“确定”然后再单击“确定”
图1.1
            
如出现图1.2弹窗:continue with this version→finish
图1.2
如程序出现报错是库文件安装的问题,请安装GCAN的库文件
2.打开ModbusRtuMaster_(PRG)或ModbusRtuSlave (PRG),上半部分为程序声明,下半部分为具体程序。
3.bPort为设置串口端口号的变量,1为RS_232,2为RS_485;uibaudrate为串口波特率;bparity为奇偶校验位,0为无校验,1为奇校验,2为偶校验;bdatabits为数据位;bstopbits为停止位。
4.1  对于ModbusRtuMaster_(PRG):
        bslaveid为要访问的从站节点号;bfunction为主站要用的功能码;uireadaddress为要读数据的起始寄存器地址;uireadcount为要读寄存器数量;p_readdata为读取数据存放的数组;uiwriteaddress要写数据的起始寄存器地址;uiwritecount为要写寄存器数量;p_writedata为写数据存放的数组;uiOverTimes为超时时间;uiIntervalTimes为发送间隔时间(轮询时间)。
4.2对于ModbusRtuSlave (PRG):
        bmodbusaddr为设置从站节点号;uido_number、uido_startaddr、pdo_data分别为设定线圈个数、设定线圈起始地址、数据存放在ardo_data数组;uidi_number、uidi_startaddr、pdi_data分别为设定离散型数据个数、离散型数据起始地址、数据存放在ardi_data数组;uireg_number、uireg_startaddr、preg_data分别为设定保持型寄存器个数、 保持型寄存器起始地址、数据存放在arreg_data数组;uiai_number、uiai_startaddr、pai_data分别为设定输入型寄存器个数、输入型寄存器起始地址、数据存放在arai_data数组;
5.点击Device→扫描网络→选择对应设备→确定
6.下载程序,点击图标
7.会出现如下弹窗,点击“是”
8.点击运行,图标如下

二、接线

1.不同产品串口接口定义
1.1  下图为GCAN-PLC-301和302的232和485通讯接口示意图 使用DB9接口引出【GCAN-PLC-301/302用户使用手册_中文版】  
232接口
485接口 
1.2  下图从左至右依次为GCA-PLC-320、321、322的串口通讯接口示意图_使用插拔式双排弹簧按压式端子引出。【GCAN-PLC-320/321/322用户使用手册_中文版】 
1.3   下图为GCA-PLC-324E/R的串口通讯接口示意图_使用DB9接口引出  【GCAN-PLC-324E/R用户使用手册_中文版】  
  1.4 下图为GCA-PLC-326E/R的串口通讯接口示意图_使用DB9接口引出   【GCAN-PLC-326E/R用户使用手册_中文版
  1.5 下图为GCA-PLC-400的串口通讯接口示意图_使用RJ45端子引出【GCAN-PLC-400用户使用手册_中文版
  1.6  下图为GCA-PLC-510的串口通讯接口示意图_使用RJ45端子引出  【GCAN-PLC-510用户使用手册_中文版
  1.7  下图为GCA-PLC-511的串口通讯接口示意图_使用4P端子和RJ45接口引出  【GCAN-PLC-511用户使用手册_中文版
2.接线方法
2.1  232接线,GND接GND,232RX接232TX,232TX接232RX,RS232 总线的连接如图所示:
2.2  485接线,A+接A+,B-接B-,RS485 总线的连接如图所示:

三、演示通讯(GCAN-PLC-302+USB转RS_232/485)

(一)针对与modbus rtu主站程序
1.退出程序在线监控,点击如下图标
2.删除从站任务:Task右键→删除
3.重新下载程序并运行,依次点击图1和图2 的图标(如果程序直接运行了,不需要在点击图2 的图标)
图1
图2
4.打开modbus slave软件→Connection→Connect...
5.选择Serial Port→选择对应端口→选择对应的波特率等相关参数→ok
3.主站就会执行程序中所填写的对应功能码(图1),通过Modbus Slave(通过Modbus Slave看底层交互数据:Display→communication...)_图2
图1
图2
(二)针对与modbus rtu从站程序
1.退出程序在线监控,点击如下图标
2.删除主站任务:MainTask右键→删除
3.添加从站任务:任务配置→添加对象→任务...
4.填写名称(也可以选择用默认名称)→添加
5.添加程序调用:Task右键→添加对象→程序调用...
6.通过"..."添加对用的程序→选择需要用的程序→确定→添加
7.重新下载程序并运行,依次点击图1和图2 的图标(如果程序直接运行了,不需要在点击图2 的图标;如出现图3的图标,点击"是")
图1
图2
图3
8.打开Modbus Poll→Connection→Connect...
9.选择Serial Port→选择对应端口→选择对应的波特率等相关参数→ok
10.主站添加的什么功能码,就可以通过底层数据看到对应功能码的交互(从站在数组里给的什么值,主站就会读取对应的值);看底层数据办法:Display→communication...
(三)Modbus 标准地址与各个功能码的对应关系如下所示
下面以在 RTU 传输模式下通讯为例,对这些功能码进行详细介绍
1.功能码:01H
代码功能:读取线圈状态(DO)
说明:读取从机 DO 的 ON/OFF 状态,不支持广播。
查询:查询信息规定了要读的起始线圈地址和线圈量,线圈的起始地址为 0000H,1-16 个线圈的寻址地址分为 0000H-0015H。
响应:响应信息中的各线圈的状态与数据区的每一位的值相对应,即每个 DO 占用一位(1 = ON, 0 = OFF)。数据区从高位到低位依次为 DO7、DO6......DO0。 
2.功能码:02H
代码功能:读取输入状态(DI)
说明:读取从机 DI 的 ON/OFF 状态,不支持广播。
查询:查询信息规定了要读的输入起始地址及输入信号的数量,输入寻址起 始地址为 0000H,输入 1-16 所对应的地址分别为 0-15。
响应:响应信息中的各输入口的状态与数据区的每一位的值相对应,即每个 DI 占用一位(1 = ON, 0 = OFF)。数据区从高位到低位依次为 DI7、DI6......DI0。
3.功能码:03H
代码功能:读取保持寄存器
说明:读从机保持寄存器的二进制数据,不支持广播。
查询:查询信息规定了要读的寄存器起始地址及寄存器的数量,寄存器寻址 起始地址为 0000H,寄存器 1-16 所对应的地址分别为 0-15。
响应:响应信息中的寄存器数据为二进制数据,每个寄存器分别对应 2 个字 节,第一个字节为高位值数据,第二个字节为低位数据。
4.功能码:04H
代码功能:读取输入寄存器(AI)
说明:读取从机输入寄存器(3X 类型)中的二进制数据,不支持广播。
查询:查询信息规定了要读的寄存器起始地址及寄存器的数量,寄存器寻址 起始地址为 0000H,寄存器 1-16 所对应的地址分别为 0-15。
响应:响应信息中的寄存器数据为二进制数据,每个寄存器分别对应 2 个字 节,第一个字节为高位值数据,第二个字节为低位数据。
5.功能码:05H
代码功能:强置单线圈(DO)
说明:强制单个线圈(DO,0X 类型)为 ON 或 OFF 状态,广播时,该功能可 强制所有从机中同一类型的线圈均为 ON 或 OFF 状态。
查询:查询信息规定了需要强制线圈的地址及状态,线圈的起始地址为 0000H,寄存器 1-16 所对应的地址分别为 0-15。查询时,由查询数据区中的一 个常量,规定被请求线圈的 ON/OFF 状态,FF00H 值请求线圈处于 ON 状态, 0000H 值请求线圈处于 OFF 状态,其它值对线圈无效,不起作用。
响应:对这个命令请求的正常响应是在 DO 状态改变以后,原样传送接收到 的数据。
6.功能码:06H
代码功能:预置单寄存器
说明:把一个值预置到一个保持寄存器(4X 类型)中,广播时,该功能把 值预置到所有从机相同类型的寄存器中。该功能可越过控制器的内存保护。使寄 存器中的预置值保持有效。只能由控制器的下一个逻辑信号来处理该预置值。若 控制逻辑中无寄存器程序时,则寄存器中的值保持不变。
查询:查询信息规定了要预置寄存器的类型,寄存器寻址起始地址为 0000H, 寄存器 1-16 所对应的地址分别为 0-15。
响应:对这个命令请求的正常响应是在寄存器值状态改变以后,原样传送接 收到的数据。
7.功能码:10H(十进制为 16)
代码功能:预置多个寄存器
说明:把数据按顺序预置到各(4x 类型)寄存器中,广播时该功能代码可把数 据预置到全部从机中的相同类型的寄存器中。需要注意的是该功能代码可越过控 制器的内存保护,在寄存器中的预置值一直保持有效,只能由控制器的下一个逻 辑来处理寄存器的内容,控制逻辑中无该寄存器程序时,则寄存器中的值保持不变。
查询:信息中规定了要预置的寄存器类型,寄存器寻址的起始地址为 0。查 询数据区中指定了寄存器的预置值,M84 和 484 型控制器使用 10 位二进制数据, 2 个字节,剩余的高 6 位置 0。而其他类型的控制器使用一个 16 位二进制数据, 每个寄存器 2 个字节。
响应:正常响应返回从机地址、功能代码、起始地址和预置寄存器数。
2024-09-20
0 1