tia v13 sp1版本软件中提供了2个版本的modbus rtu指令:图1. 两个版本modbusrtu指令早期版本的modbus rtu指令(图1. 中 modbus(v2.2))仅可通过cm1241通信模块或cb1241通信板进行modbus rtu通信。新版本的 modbus rtu指令(图1.中 modbus(rtu) v3.0)扩展了modbus rtu的功能,该指令除了支持cm1241通信模块、cb1241通信板,还支持profinet 或 profibus 分布式 i/o 机架上的ptp通信模块实现modbus rtu通信。新版本 modbusrtu指令所支持的ptp模块如下图2.所示:图2. 新版本 modbus rtu指令所支持的ptp模块 新版本modbusrtu指令的使用新版本modbus rtu指令中包含modbus rtu 主站指令和从站指令。本文以 cpu1217c+cm1241rs422/485+et200sp cm ptp 模块为例,介绍新版本 modbus rtu 指令主从通信的编程步骤。其中cpu机架cm1241 rs422/485作为modbus rtu从站,分布式机架et200sp 中 cmptp 模块作为modbusrtu主站。网络结构图如下:图3. modubus rtu 网络通信结构图本项目中使用到的硬件和软件如下:硬件:① cpu1217c(订货号:6es7 217-1ag40-0xb0),固件版本v4.1.3② cm1241 rs422/485模块 (订货号:6es7241-1ch32-0xb0),固件版本v2.1③ 24v 电源ps307(订货号:6es7307-1ka02-0aa0)④et200 sp im155-6pn hf(订货号:6es7155-6au00-0cn0)⑤ cmptp模块(订货号:6es7137-6aa00-0ba0)软件:① tia v13 sp1 up 91.设备组态a.组态cm1241rs422/485模块打开设备视图,添加s7-1200cpu,并在硬件目录里找到“通信模块”→“点到点”→“cm1241(rs422/485)”,拖拽此模块至cpu左侧即可,如下图4.所示:图4.添加 cm 1241 rs422/485模块注意:固件版本>=v2.1 的cm 1241rs422/485模块,才支持新版本modbusrtu指令。接下来,在“设备视图”中用鼠标选中cm1241(rs422/485)模块,在“属性”→“端口组态”中配置此模块硬件接口参数,本例以传输率=9.6kbps,奇偶校验=无奇偶校验,数据位=8位字符,停止位=1为例。如cm1241 端口组态设置如下图5.所示:图5. cm1241 rs422/485模块端口组态zui后在“硬件标识符”里确认一下硬件标识符为269(该参数在程序编程中会被使用),如下图6.所示:图6硬件标识符另外,s7-1200 还提供了系统和时钟存储器功能,为了便于后续指令,建议使能该功能。在cpu“属性”→“常规”→“系统和时钟存储器”使能系统和时钟存储器功能,如图7. 所示。图7. 系统和时钟存储器功能b.组态et200 spcm ptp 模块(1)、插入一个et200sp分布式站点。打开网络视图并拖入一个et200sp站点,并将其分配给相应的io控制器(本例cpu1217c 为 io 控制器),如图8.所示。图8. 插入et200sp站点(2)、组态et200sp站点。在et200sp的"设备视图"环境下,为et200sp 站点添加信号、通信模块和服务器模块,在本例中只添加了cmptp模块和服务器模块。注意:et200sp站点中,服务器模块是必须组态的。服务器模块随接口模块一起采购,无需单独购买。et200sp接口模块需要为其分配ip地址和devicename, 有关et200 sp 分布式io 组态详细步骤,请参考《et200 sp 使用快速入门》,本例不再描述profinetio通信的相关设置与步骤。在et200sp"设备视图"中用鼠标选中cmptp,在“属性”→“常规”→“接口”→“操作模式”中配置此模块硬件接口参数,本例设定“指定工作模式":"半双工(rs485)2线制操作";"接收线路的初始状态":"无"。如下图9.所示:图9.cm ptp操作模式接下来,在“属性”→“常规”→“接口”→“端口组态”中配置此模块端口组态参数,本例设定"协议":"freeport/modbus";"端口参数"设置:传输率=9.6kbps,奇偶校验=无奇偶校验,数据位=8位字符,停止位=1为例。端口组态设置如下图10.所示:图10.cm ptp 端口组态zui后需要在“硬件标识符”里确认一下cm ptp模块硬件标识符,该参数在程序编程中会被使用。2.软件编程a.modbus rtu 主站编程modbusrtu主站编程需要调用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 模块作为modbusrtu主站,其相关编程步骤如下:(1)、ob1 中插入一个fc函数,并在函数中拖入modbus_comm_load指令和modbus_master 指令。如图11. 所示图11. 拖入modbus rtu主站指令modbus_comm_load指令各参数意义如下表1所示:表1mb_comm_load指令参数意义modbus_master指令各参数意义如下表2所示:表2modbus_master指令参数意义注意:①modbus_comm_load指令不建议在启动组织块ob100中调用,建议在ob1中调用。modbus_comm_load指令在ob1中调用时,其输入位“req”需使用上升沿触发,本例中该输入位采用“firstscan”系统存储器位。②modbus_comm_load指令背景数据块中的静态变量“mode”用于描述ptp模块的工作模式,有效的工作模式包括:0= 全双工 (rs232)1 = 全双工 (rs422) 四线制模式(点对点)2 = 全全双工 (rs 422)四线制模式(多点主站,cm ptp (et 200sp))3 = 全全双工 (rs 422) 四线制模式(多点从站,cm ptp(et 200sp))4 = 半双工 (rs485) 二线制模式该静态变量“mode”默认数据为0(rs232全双工模式),需要根据cm ptp模块实际组态修改该数值,本例中cmptp模块工作在rs485半双工模式需要将该数值修改为4,如图12.所示。图12.modbus_comm_load背景数据块静态变量“mode”修改为4③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轮询调用方式(2)、插入"pull orplug of modules" 中断ob83。本例中modbusrtu主站模块安装在分布式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指令的背景数据块相同。②cmptp模块的硬件标识符也可以在"plc变量"--->"系统常数"中查询,如图16. 所示。图16.系统常量(3)、插入"rack or station failure"中断ob86。分布式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变量"--->"系统常数"中查询。b.modbus rtu 从站编程modbusrtu从站编程需要调用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 机架cm1241 rs422/485作为modbusrtu从站,其相关编程步骤如下:ob1 中插入一个fc函数,并在函数中拖入modbus_comm_load指令和modbus_slave 指令。如图18. 所示图18. 拖入modbus rtu从站指令modbus_slave指令各参数意义如下表3所示:表3 modbus_slave指令参数意义
西门一级代理商,西门子代理商,西门子变频器,西门子PLC,西门子伺服电机