史上最全的工控类软件安装包,你要吗? (点击上方红字,免费领取资料) S71200支持ModbusRTU通信模式的模块可作为ModbusRTU从站。以下以CPU1215CDCDCDC和CM1241RS485为例,介绍S71200ModbusRTU从站通信组态及编程步骤。 硬件和软件需求及所完成的通信任务: 硬件:CPU1215CDCDCDC(订货号:6ES72151AG310XB0)CM1241RS485(订货号:6ES72411CH300XB0)PS307电源(订货号:6ES73071KA020AA0)PC(带以太网卡)TP以太网电缆软件:STEP7V11ProfessionalSP2UPD4HSPModScan(该软件是第三方软件,可以从Internet网络下载)所完成的通信任务:将ModbusRTU从站CPU1215C中地址从DB1。DBW0开始的5个字中的数据,分别读取到ModbusRTU主站ModScan中Modbus地址从40001开始的5个字中。 1组态ModbusRTU通信模块 在硬件目录里找到“通信模块”“点到点”“CM1241(RS485)”,双击或拖拽此模块至CPU左侧即可,如下图1所示: 图1组态通信模块 接下来,在“设备视图”中用鼠标选中CM1241(RS485)模块,在“属性”“端口组态”中配置此模块硬件接口参数。如下图2所示: 以下以传输率9。6Kbps,奇偶校验无奇偶校验,数据位8位字符,停止位1,其它保持默认设置为例。 图2RS485端口设置 最后在“硬件标识符”里确认一下硬件标识符为271,如下图3所示: 图3硬件标识符 2添加启动OB 在项目树下选择“CPU1215CDCDCDC”“程序块”“添加新块”,在弹出的窗口中选择“OB组织块”“Startup”,添加启动OB100,如下图4所示: 图4添加启动OB 3调用MBCOMMLOAD指令 为使端口一启动就被设置为ModbusRTU通信模式,可在OB100中调用“MBCOMMLOAD”指令。调用“MBCOMMLOAD”指令时会自动弹出创建相应背景数据块的界面,如下图5所示: 图5调用MBCOMMLOAD指令 点击“确认”为该指令创建背景数据块后,为各输入输出引脚分配地址。尤其需注意MBDB输入引脚需指向“MBSLAVE”指令的背景数据块,如下图6所示: 注意:“MBCOMMLOAD”指令输入位“REQ”需使用上升沿触发。由于OB100只在S71200启动时执行一次,因此,此例中将“REQ”设为“TRUE”。 图6MBCOMMLOAD指令 MBCOMMLOAD指令参数意义如下表1所示: 引脚 说明 EN 使能端 REQ 在上升沿执行该指令 PORT 通信端口的硬件标识符 BAUD 波特率选择:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200(注意:所有其它值均无效) PARITY 奇偶检验选择:0无;1奇校验;2偶校验 FLOWCTRL 流控制选择:0(默认值)无流控制 RTSONDLY RTS延时选择:0(默认值) RTSOFFDLY RTS关断延时选择:0(默认值) RESPTO 响应超时:默认值1000ms。MBMASTER允许用于从站响应的时间(以毫秒为单位)。 MBDB 对MBMASTER或MBSLAVE指令所使用的背景数据块。 DONE 完成位:指令执行完成且未出错置1 ERROR 错误位:0未检测到错误;1检测到错误。在参数STATUS中输出错误代码。 STATUS 表1MBCOMMLOAD指令参数意义 4创建MBHOLDREG数据块 通过“程序块”“添加新块”,选择“数据块(DB)”创建DB块,选择“标准与S7300400兼容”,点击“确认”键,定义数据区为5个字的数组,如下图7所示: 注意:MBHOLDREG使用的DB访问类型必须是标准与S7300400兼容。 图7创建MBHOLDREG数据块 5调用MBSLAVE指令 在OB1中调用MBSLAVE指令,调用该指令时会自动弹出创建相应背景数据块的界面,如下图8所示: 图8调用MBSLAVE指令 点击“确认”为该指令创建背景数据块后,并为各输入输出引脚分配地址,如下图9所示: S71200作为ModbusRTU从站,MBHOLDREG指向Modbus保持寄存器数据块的指针。设置如下所示:MBHOLDREGPDB3。DBX0。0WORD5。 对应关系如下表2所示: ModbusRTU主站Modbus地址 ModbusRTU从站CPU1215C数据缓冲区地址40001:DB3。DBW040002:DB3。DBW240003:DB3。DBW440004:DB3。DBW640005:DB3。DBW8 表2Modbus地址对应关系 图9MBSLAVE指令 引脚 说明 EN 使能端 MBADDR Modbus从站的站地址。默认地址范围:0至247;扩展地址范围:0至65535 MBHOLDREG 指向Modbus保持寄存器数据块的指针。必须使用“标准与S7300400兼容”访问类型创建该数据块。 NDR 新数据就绪:0无新数据;1表示Modbus主站已写入新的数据 DR 数据读取:0无数据读取;1表示Modbus主站已读取新的数据 ERROR 错误位 STATUS 表3MBSLAVE指令参数意义 MBSLAVEModbus功能 S71200 代码 功能 数据区 地址范围 数据区 CPU地址01:读位 输出 1到8192 输出过程映像区 Q0。0到Q1023。702:读位 输入 10001到18192 输入映像区 I0。0到I1023。704:读字 输入 30001到30512 输入映像区 IW0到IW102205:写位 输出 1到8192 输出过程映像区 Q0。0到Q1023。715:写位 输出 1到8192 输出过程映像区 Q0。0到Q1023。7 表4Modbus地址到过程映象区的映射 MBSLAVEModbus功能 S71200 代码 功能 数据区 地址范围 CPUDB数据区 CPU地址03:读字 保持寄存器 40001到49999 MBHOLDREG 字1到字9999 400001到465535 字1到字6553506:写字 保持寄存器 40001到49999 MBHOLDREG 字1到字9999 400001到465535 字1到字6553516:写字 保持寄存器 40001到49999 MBHOLDREG 字1到字9999 400001到465535 字1到字65535 表5Modbus地址到CPU存储区的映射 6Modbus主站软件设置 注意:客户机采用ModScan软件测试,该软件是第三方软件,可以从Internet网络上下载。 首先在打开的ModScan软件中建立连接,并设置RTU模式的参数:波特率Baud9600,数据位Data8,停止位Stop1,校验ParityNONE,如下图10所示: 图10建立ModScan连接 选择“File”“New”打开ModScan通信界面,设置ModbusRTU从站的地址DeviceId1,数据开始地址Address0001,数据长度Length5,Modbus数据类型功能码03,如下图11所示: 注意:DeviceId设置必须与“MBSLAVE”指令中输入引脚“MBADDR”设置的地址一致。 图11设置ModScan 7ModbusRTU测试结果 在STEP7V11ProfessionalSP2UPD4软件中打开该项目CPU1215DCDCDC的“监控表”,对DB3。DBW0写入数值21,DB3。DBW2写入数值22,DB3。DBW4写入数值23,DB3。DBW6写入数值24,DB3。DBW8写入数值25。ModScan主站将S71200ModbusRTU从站地址DB3。DBW0的数值21,DB3。DBW2的数值22,DB3。DBW4的数值23,DB3。DBW6的数值24,DB3。DBW8的数值25,分别读取到了地址40001,40002,40003,40004,40005中。如下图12所示: 图12ModbusRTU测试结果 MBCOMMLOAD和MBSLAVE指令STATUS错误代码 STATUS(W16) 说明0000:端口无错误8180:端口ID值无效8181:波特率值无效8182:奇偶校验值无效8183:流控制值无效8184:响应超时值无效8185:MBDB参数不是MBMASTER或MBSLAVE的背景数据块 表6MBCOMMLOAD指令STATUS错误代码 STATUS(W16) 说明0000:无错误 80D1 接收方发出了暂停主动传输的流控制请求并且在指定的等待时间内未重新激活该传输 80D2 传送请求终止 80E0 因接收缓冲区满,消息被终止 80E1 因出现奇偶校验错误,消息被终止 80E2 因组帧错误,消息被终止 80E3 因出现超限错误,消息被终止 80E4 因指定长度超出总缓冲区大小,消息被终止8180:无效端口ID值或MBCOMMLOAD指令出错8186:Modbus站地址无效8187:指向MBHOLDREG指针无效 818C 指向M存储器或DB(DB区域允许符号地址和直接地址)的MBHOLDREG指针无效 表7MBSLAVE指令STATUS参数意义(通信和组态错误) STATUS(W16) 从站的响应代码 说明8380:无响应 CRC错误8381:01 不支持功能代码或者在广播中不支持功能代码8382:03 数据长度错误8383:02 数据地址错误或地址超出DATAPTR取的有效范围8384:03 数据值错误8385:03 不支持此数据诊断代码值 表8MBSLAVE指令STATUS参数意义(Modbus协议错误) 常见问题 为什么触发“MBSLAVE”指令出错,输出位“ERROR”1,输出状态字“STATUS”168187? 输出状态字”STATUS“168187表示指向MBHOLDREG指针无效。以下两种情况会造成如上错误: 程序中不存在“MBSLAVE”指令的输入引脚“MBHOLDREG”对应的DB块。 在创建“MBSLAVE”指令的输入引脚“MBHOLDREG”对应的DB块时选择了“仅符号寻址”。 解决方法分别如下: 新建“MBSLAVE”指令的输入引脚“MBHOLDREG”对应的DB块。 创建“MBSLAVE”指令的输入引脚“MBHOLDREG”对应的DB块时只能选择了“标准与S7300400兼容”。 来源:西门子官网,版权归原作者所有,如有侵权,请联系删除,谢谢!