Modbus rtu的通信(做主站)

Modbus rtu的通信(做主站)
首先进入“设备视图”添加通讯模块RS422/RS485通讯模块,点击通讯接口,配置modbus的参数,常规→端口组态,选择“半双工(RS-485)2线制模式”,波特率、奇偶校验、数据位、以及设置停止位, 但是该模块用于 Modbus 通信时,此设置的停止位无效, 需要在 “Modbus_Comm_Load” 指令的背景 DB 的静态变量中修改 “STOP_BITS” 数值为 2。如图 1-1所示:
在这里插入图片描述

图1-1
最后需要在“硬件标识符”里确认一下 CM PtP 模块硬件标识符,该参数在程序编程中会被使用。
在这里插入图片描述

创建一个FB块,点击进入,在通信项目数中点开“MODBUS (RTU)”把“Modbus_Comm_Load”和“Modbus_Master”拉出去,以为这个案列是plc做主站,所以不用从站的功能块 。

在这里插入图片描述

使用FB块的块接口:Static(静态变量)中建立“Modbus端口”的静态参数,数据类型用“Modbus_Comm_Load”,以及建立“Modbus主站”的静态参数。如下图1-2
在这里插入图片描述

图1-2
Modbus RTU 主站编程需要调用 Modbus_Comm_Load 指令和 Modbus_Master 指令,其中 Modbus_Comm_Load 指令通过 Modbus RTU 协议对通信模块进行组态,Modbus_Master 指令可通过由 Modbus_Comm_Load 指令组态的端口作为 Modbus 主站进行通信, Modbus_Comm_Load 指令的 MB_DB 参数必须连接到 Modbus_Master 指令的(静态)MB_DB 参数。如图1-3
在这里插入图片描述

图1-3

注意:
① Modbus_Comm_Load 指令不建议在启动组织块 OB100 中调用,建议在 OB1 中调用。
Modbus_Comm_Load 指令在 OB1 中调用时,其输入位“REQ”需使用上升沿触发,本例中该输入位采用 “FirstScan” 系统存储器位。
② Modbus_Comm_Load 指令背景数据块中的静态变量 “MODE” 用于描述点对点模块的工作模式,有效的工作模式包括:
0 = 全双工 (RS232)
1 = 全双工 (RS422) 四线制模式(点对点)
2 = 全双工 (RS422) 四线制模式(多点主站)
3 = 全双工 (RS422) 四线制模式(多点从站)
4 = 半双工 (RS485) 二线制模式
该静态变量 “MODE” 默认数据为 0(RS232 全双工模式),需要根据点对点模块实际组态修改该数值,本例中 CM PtP 模块工作在 RS485 半双工模式需要将该数值修改为 4,如图 1-4所示。
在这里插入图片描述

图1-4
或在程序段传输,用move指令把4传给“#Modbus_Comm_Load_Instance_1.MODE”
在数据块的属性中取消“优化的块访问”即可将数据块修改为非优化访问的数据块(鼠标右键数据块,选择“属性”,取消“优化的块访问”)
当 Modbus RTU 网络中存在多个 modbus RTU 从站或一个 modbus RTU 从站同时需要多个作业,例如需要读和写或者读多个区域等,则需要调用多个 Modbus_Master 指令,Modbus_Master 指令之间需要采用轮询方式调用,并且使用相同背景数据块。用“Done”完成位来触发下一个轮询。如图1-5、
图1-6
在这里插入图片描述

图1-5
在这里插入图片描述
在这里插入图片描述

图1-6所示
Modbus rtu的通信(做从站)
Modbus RTU 从站编程需要调用 Modbus_Comm_Load 指令和 Modbus_Slave 指令
Modbus的参数设置以及Modbus_Comm_Load 指令块的编写就和主站一样,Modbus_Comm_Load 指令的 MB_DB 参数必须连接到 Modbus_Master 指令的(静态)MB_DB 参数。 Modbus_Slave 指令的 “MB_HOLD_REG” 用于定义 CPU 的 Modbus 保持寄存器的数据区域地址,该数据区域在 V3.0 支持非优化(标准的)数据块。一般建议使用指针方式填写,例如程序中的 P#DB6.DBX0.0 WORD 100,此外也可以使用基本数据类型数组方式填写,如图1-7

在这里插入图片描述

图1-7
调试时注意的问题
①检查硬件标识符是否正确
②检查通信模块是否与软件上的相对应
③RS485 半双工模式需要将该数值修改为 4
④Modbus_Comm_Load 指令的 MB_DB 引脚不能填错
⑤轮询用Done完成位来触发
⑥Modbus_Comm_Load 指令块的“REQ”引脚用“FirstScan” 系统存储器位

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨小杨先生

你的鼓励是我的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值