前面的文章我们介绍了Modbus RTU通信中主站S7-1200的配置和编程,今天这篇文章,我们来介绍从站S7-200 Smart的配置及编程。
本例程从站使用S7-200 Smart的CPU ST40,通信端口使用CPU模块本体的RS485接口,modbus地址为2。
打开编程软件STEP 7-Micro/WIN SMART,在指令库中找到文件夹“Modbus_RTU_Slave”,里面有两个指令:MBUS_INIT和MBUS_SLAVE,如下图:
指令INIT用来初始化从站的地址、通信的波特率、存储器地址等相关信息。选中该指令将其拖放到主程序MAIN中,如下图:
该指令的相关参数含义见下面的表格:
注意:
1)MaxIQ用于设置modbus参数地址0xxxx与1xxxx对应的PLC的输出Q与输入I的地址,在S7-200 Smart中,最大可设置为256(不同类型的PLC该值不同)。当设置为0时,将禁用输入及输出的读写操作;
2)MaxAI用于设置modbus参数地址3xxxx对应的PLC的字输入寄存器的地址,也就是模拟量输入(AI)的地址。对于S7-200 Smart紧凑型CPU(CR20s、CR30s、CR40s、CR60s)而言,建议设置为0;其它标准型CPU,建议设置为56;
3)MaxHold用于设置modbus地址4xxxx或4yyyyy对应的PLC的保持存储区的大小,以字为单位。例如,如果要允许modbus主站访问2000个字节的从站V存储区,则MaxHold应设置为1000;
4)MBUS_INIT仅在CPU启动后的第一个扫描周期执行一次即可;如果更改通信参数,则重新再执行一次;
MBUS_INIT指令的完整代码如下图:
接下来我们将MBUS_SLAVE指令添加到主程序块中,并设置其参数如下图:
调用STEP 7 - Mciro/WIN SMART Instruction Library(指令库)需要分配库指令数据区(Library Memory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。
MBUS_SLAVE指令库需要一个781个字节的全局 V 存储区。 分配方法如下:
右键单击“程序块”,在弹出的菜单中单击“库存储器”,如下图:
在弹出的库存储器分配对话框中,选择“Modbus RTU Slave”,如下图:
点击“建议地址”,系统会自动分配可用的V存储区作为库存储区。