6SL3210-1KE31-1UB1现货西门子代理
- 供应商
- 湖南西控自动化设备有限公司
- 认证
- 西门子
- G120C
- 变频器
- 55KW标准版
- 德国
- 3AC 380-480V
- 联系电话
- 17838383235
- 手机号
- 17838383235
- 经理
- 徐嘉泉
- 所在地
- 中国(湖南)自由贸易试验区长沙片区开元东路1306号开阳智能制造产业园(一期)4#栋301
- 更新时间
- 2024-06-19 08:00
部分:s7-1200 modbus rtu通信
通信模块/通信板 | 订货号 |
cm1241 rs232 | 6es7241-1ah32-0xb0 |
cm1241 rs422/485 | 6es7241-1ch32-0xb0 |
cb 1241 rs485 | 6es7241-1ch30-1xb0 |
图1. 两个版本 modbus rtu 指令
图2. cm1241 配置停止位参数
modbus_commload 指令的背景 db 里 static 修改 stop_bits停止位数值为2(默认值=1)
图3. 修改 modbus rtu 通信停止位
第二部分:v3版指令功能
博途v13 sp1版本软件中提供了2个版本的modbus rtu指令:
图1. 两个版本modbus rtu指令
图2. 新版本 modbus rtu指令所支持的ptp模块
新版本modbus rtu指令中包含modbus rtu 主站指令和从站指令。本文以 cpu1217c+cm1241rs422/485+et200sp cm ptp 模块为例,介绍新版本 modbus rtu 指令主从通信的编程步骤。其中cpu机架cm1241 rs422/485作为modbus rtu从站,分布式机架et200sp 中 cmptp 模块作为modbusrtu主站。
1、网络结构图如下:
图3. modubus rtu 网络通信结构图
2、本项目中使用到的硬件和软件如下:
(1)硬件:
① cpu1217c (订货号:6es7 217-1ag40-0xb0),固件版本v4.1.3
② cm1241 rs422/485模块 (订货号:6es7 241-1ch32-0xb0),固件版本v2.1
③ 24v 电源ps307(订货号:6es7307-1ka02-0aa0)
④ et200 sp im155-6pn hf(订货号:6es7155-6au00-0cn0)
⑤ cm ptp模块(订货号:6es7137-6aa00-0ba0)
(2)软件:
① 博途sp1 up 9
(1)打开设备视图,添加s7-1200cpu,并在硬件目录里找到“通信模块”→“点到点”→“cm1241(rs422/485)”,拖拽此模块至cpu左侧即可,如下图4所示:
图4. 添加 cm 1241 rs422/485模块
注意:固件版本>=v2.1 的cm 1241 rs422/485模块,才支持新版本modbusrtu指令。
(2)接下来,在“设备视图”中用鼠标选中cm1241(rs422/485)模块,在“属性”→“端口组态”中配置此模块硬件接口参数,本例以传输率=9.6kbps,奇偶校验=无奇偶校验,数据位=8位字符,停止位=1为例。如cm1241 端口组态设置如下图5所示:
(3)后在“硬件标识符”里确认一下硬件标识符为269(该参数在程序编程中会被使用),如下图6所示:
图6 硬件标识符
(4)另外,s7-1200 还提供了系统和时钟存储器功能,为了便于后续指令,建议使能该功能。在cpu“属性”→“常规”→“系统和时钟存储器”使能系统和时钟存储器功能,如图7所示。
图7. 系统和时钟存储器功能
2、组态et200 sp cm ptp 模块(1)插入一个et200sp分布式站点,打开网络视图并拖入一个et200sp站点,并将其分配给相应的io控制器(本例cpu1217c 为 io 控制器),如图8所示:图8. 插入et200sp站点
图9. cm ptp 操作模式
注意:et200sp站点中,服务器模块是必须组态的。服务器模块随接口模块一起采购,无需单独购买。et200sp接口模块需要为其分配ip地址和devicename, 有关et200 sp 分布式io 组态详细步骤,请参考《et200 sp 使用快速入门》,本例不再描述profinetio通信的相关设置与步骤。《et200 sp 使用快速入门》下载链接:
https://support.industry.siemens.com/cs/cn/zh/view/78304711
(3)接下来,在“属性”→“常规”→“接口”→“端口组态”中配置此模块端口组态参数,本例设定"协议":"freeport/modbus";"端口参数"设置:传输率=9.6kbps,奇偶校验=无奇偶校验,数据位=8位字符,停止位=1为例。端口组态设置如下图10所示:
图10. cm ptp 端口组态
(4)后需要在“硬件标识符”里确认一下cm ptp 模块硬件标识符,该参数在程序编程中会被使用。
1、modbus rtu 主站编程
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 参数。本例中分布式机架et200sp 中cm ptp 模块作为modbus rtu主站,其相关编程步骤如下:
(1)ob1 中插入一个fc函数,并在函数中拖入modbus_comm_load 指令和modbus_master指令。如图11所示:图11. 拖入modbus rtu 主站指令
modbus_comm_load指令各参数意义如下表1所示:
说明 | |
req | 上升沿触发 |
port | 通信端口的硬件标识符 |
baud | 波特率选择:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200 |
parity | 奇偶检验选择:0-无;1-奇校验;2-偶校验 |
flow_ctrl | 流控制选择:0-(默认值)无流控制 |
rts_on_dly | rts延时选择:0-(默认值) |
rts_off_dly | rts关断延时选择:0-(默认值) |
resp_to | 响应超时:默认值 = 1000 ms。mb_master 允许用于从站响应的时间(以毫秒为单位)。 |
mb_db | 对 modbus_master 或 modbus_slave 指令的背景数据块的引用。 |
done | 如果上一个请求完成并且没有错误,done 位将变为 true 并保持一个周期。 |
error | 如果上一个请求完成出错,则 error 位将变为 true 并保持一个周期。status 参数中的错误代码仅在 error =true 的周期内有效。 |
status | 端口组态错误代码,请参考tia 软件在线帮助或s7-1200 系统手册。 |
表1 mb_comm_load指令参数意义
modbus_master指令各参数意义如下表2所示:
说明 | |
en | 使能端 |
req | true = 请求向 modbus 从站发送数据 ,建议采用上升沿触发 |
mb_addr | modbusrtu从站地址。默认地址范围:0至247;扩展地址范围:0至65535。值0被保留用于将消息广播到所有modbus从站。 |
mode | 模式选择:指定请求类型(读取或写入)。 |
data_addr | 从站中的起始地址:指定modbus从站中将供访问的数据的起始地址。 |
data_len | 数据长度:指定要在该请求中访问的位数或字数。 |
data_ptr | 数据指针:指向要进行数据写入或数据读取的标记或数据块地址。 |
done | 完成位:上一请求已完成且没有出错后,done 位将保持为 true 一个扫描周期时间。 |
busy | false – modbus_master 无激活命令: |
error | |
status | 如果上一个请求完成并且没有错误,done 位将变为 true 并保持一个周期。 |
error | |
status | 错误代码 |
表2 modbus_master指令参数意义
图12. modbus_comm_load背景数据块静态变量“mode”修改为
③modbus_master指令的“data_ptr”参数用于指向要进行数据写入或数据读取的数据区域地址,该数据区域支持优化访问的数据块或者非优化(标准的)数据块,建议采用非优化访问的数据块。
本例中使用的数据区为非优化访问的数据块,在数据块的属性中取消“优化的块访问”即可将数据块修改为非优化访问的数据块(鼠标右键数据块,选择“属性”,取消“优化的块访问”),如图13所示:
图13. 设置数据块为非优化访问
当modbus_master指令的“data_ptr”指向非优化访问的数据块时,该输入参数需要使用指针方式填写如p#db3.dbx0.0word 5 方式填写。
④当modbus rtu网络中存在多个modbus rtu从站或一个modbusrtu从站同时需要读操作和写操作,则需要调用多个modbus_master指令,modbus_master指令之间需要采用轮询方式调用。
下图14. 用于描述两个modbus_master指令轮询调用的方式。
图14.modbus_master轮询调用方式
本例中modbus rtu主站模块安装在分布式io站点上,因此程序中需要考虑分布式io站点故障、cm ptp模块插拔模块等故障。分布式io站点中插出、拔入模块时,操作系统都会调用一次ob83。通过ob83接口区的输入变量“16#event_class”判断故障的模块和类型:事件类型16#39表示模块被拔出,事件类型16#38表示模块被插入。cmptp 模块被重新插入的时候,需要在中断ob83中调用modbus_comm_load指令对通信模块进行重新组态,如图15所示。
图15. ob83中再次调用modbus_comm_load 指令
注意:
①ob83中调用modbus_comm_load指令的背景数据块需要与ob1中调用的modbus_comm_load指令的背景数据块相同。
②cm ptp模块的硬件标识符也可以在"plc变量"--->"系统常数"中查询,如图16所示:
图16. 系统常量
分布式io站点故障和恢复时,操作系统都会调用一次ob86。通过ob86接口区的输入变量“16#event_class”判断故障的模块和类型:事件类型16#39表示站点故障,事件类型16#38表示站点恢复。cmptp 模块所在的io站点恢复时,需要在中断ob86中调用modbus_comm_load指令对通信模块进行重新组态,如图17所示:
图17. ob86中调用modbus_comm_load 指令
注意:
①ob86中调用modbus_comm_load指令的背景数据块需要与ob1中调用的modbus_comm_load指令的背景数据块相同。
②分布式io 站点的硬件标识符也可以在"plc变量"--->"系统常数"中查询。
2、modbus rtu 从站编程
modbus rtu从站编程需要调用modbus_comm_load 指令和modbus_slave指令,其中modbus_comm_load 指令通过 modbus rtu 协议对通信模块进行组态,modbus_slave指令可通过由 modbus_comm_load 指令组态的端口作为 modbus 从站进行通信, modbus_comm_load指令的 mb_db 参数必须连接到 modbus_slaver 指令的(静态)mb_db 参数。本例中cpu 机架cm1241rs422/485作为modbus rtu从站,其相关编程步骤如下:
(1)ob1 中插入一个fc函数,并在函数中拖入modbus_comm_load 指令和modbus_slave指令。如图18所示:图18. 拖入modbus rtu 从站指令
modbus_slave指令各参数意义如下表3所示:
说明 | |
mb_addr | modbus 从站的标准寻址: |
mb_hold_reg | 数据指针,指向modbus 保持寄存器的地址, modbus 保持寄存器可以为m存储区或db数据区。 |
ndr | 可用的新数据: false - 无新数据 true – 表示新数据已由 modbus 主站写入 |
dr | 读取数据: false - 无新数据 true –表示该指令已将 modbus 主站接收到的数据存储在目标区域中。 |
error | 如果上一个请求完成出错,则 error 位将变为 true 并保持一个周期。如果执行因错误而终止,则 status参数中的错误代码仅在 error = true 的周期内有效。 |
status | 错误代码 |
表3 modbus_slave指令参数意义
展开全文