1.控制要求
两台型号为S7-200 CPU226 CN的PLC进行Modbus通信,其中一台作为Modbus通信主站,另一台作为Modbus通信从站。当主站I0.1为ON时,主站给从站发送信息,并使从站的输出Q0.0~Q0.7随主站&VB1000的值变化。
2.硬件配置
1台PC、2台PLC、1根PROFIBUS网络电缆(含有两个网络总线连接器)。
3.通信的建立
如图5-16所示,Modbus通信在两个S7-200 PLC的Port0通信口之间进行。选择具有两个通信口的CPU构成通信系统较为方便,一个作通信口用,一个与计算机连接。在主站侧可以选择Port0或Port1作Modbus通信口,这取决于在主站指令库中对相关指令的选择。在这里Port1通信口与PC连接,便于实现程序编制、下载和在线监控,两个CPU的Port0通信口通过PROFIBUS电缆进行连接,实现两台PLC的Modbus通信传输。
图5-16 硬件连接
对于Modbus通信,主站侧需要使用“MBUS_CTRL”和“MBUS_MSG”指令,从站侧需要使用“MBUS_INIT”和“MBUS_SLAVE”指令。
(1)主站侧MBUS_CTRL指令
MBUS_CTRL指令如图5-17所示,各个参数意义见表5-6,用于初始化主站通信,可初始化、监视或禁用Modbus通信。
MBUS_CTRL指令必须在每次扫描时且“EN”输入使能时被调用,以允许监视随MBUS_MSG指令启动的任何突出消息的进程。指令完成后立即设定“Done”位,才能继续执行下一条指令。在使用MBUS_MSG指令之前,必须正确执行MBUS_CTRL指令。
表5-6 MBUS_CTRL参数选项及其意义
(2)主站侧MBUS_MSG指令
MBUS_MSG指令如图5-18所示,各个参数意义见表5-7,用于启动对Modbus从站的请求并处理应答。当“EN”输入和“First”输入都为1时,MBUS_MSG指令启动对Modbus从站的请求;通常需要多次扫描完成发送请求、等待应答和处理应答。
图5-17 MBUS_CTRL指令
图5-18 MBUS_MSG指令
表5-7 MBUS_MSG参数选项及其意义
MBUS_MSG指令一次只能激活一条,如果启用了多条MBUS_MSG指令,则将处理所执行的第一条MBUS_MSG指令,其后的所有MBUS_MSG指令将被中止并产生错误代码6。
(3)从站侧MBUS_INIT指令
MBUS_INIT指令如图5-19所示,各个参数意义见表5-8,用于启用和初始化或禁止Modbus通信。指令完成后立即设定“Done”位,才能继续执行下一条指令。应当在每次通信状态改变时执行MBUS_INIT指令,因此“EN”输入采用一个上升沿或下降沿打开,或者仅在首次扫描时执行。在使用MBUS_SLAVE指令之前,必须正确执行MBUS_INIT指令。
表5-8 MBUS_INIT参数选项及其意义
(4)从站侧MBUS_SLAVE指令
MBUS_SLAVE指令如图5-20所示,各个参数意义见表5-9,用于为Modbus主设备发出请求服务。在每次扫描且“EN”输入使能时执行该指令,以便检查和回答Modbus请求。MBUS_SLAVE指令无输入参数,当MBUS_SLAVE指令对Modbus请求作出应答时,“Done”置为1,如果没有需要服务的请求时,“Done”置为0。“Error”输出包含执行指令的结果,该输出只有在“Done”为1时才有效,否则错误参数不会改变。
图5-19 MBUS_INIT指令
图5-20 MBUS_SLAVE指令
表5-9 MBUS_SLAVE参数意义
4.功能的实现
1)编写作为Modbus主站的S7-200 CPU的PLC程序,将程序下载到主站PLC中。
如图5-21所示,网络1用于每次扫描时调用MBUS_CTRL指令,初始化和监视Modbus主站设备。Modbus主设备设置为9600bit/s、奇校验、允许从站延时1ms应答时间。
如图5-22所示,网络2实现在I0.1正跳变时执行MBUS_MSG指令,将地址VB1000的值写入从站5的保持寄存器中。
图5-21 主站程序-网络1(www.xing528.com)
图5-22 主站程序-网络2
参数“DataPtr”代表了V区被读的起始地址,设为VB1000,即主站读取VB1000的值并写入地址为“40001”的保持寄存器中。保持寄存器以字为单位,与从站的V区地址对应。
如图5-23所示,网络3为给VB1000存储器赋初值,使其低4位为1,以便监视从站的变化。
需要注意的是,利用指令库编程前首先应为其分配存储区,否则STEP 7-Micro/WIN编译时会报错。具体方法如下:
①执行STEP 7-Micro/WIN菜单命令“文件”→“库存储区”,打开“库存储区分配”对话框,如图5-24所示。
图5-23 主站程序-网络3
图5-24 主站库存储区分配
②在“库存储区分配”对话框中输入库存储区的起始地址VB0,注意避免该地址和程序中已经采用或准备采用的其他地址重合。
③单击“建议地址”按钮,系统将自动计算存储区的截止地址。
④单击“确定”按钮确认分配,关闭对话框。
2)编写作为Modbus从站的S7-200 CPU的PLC程序,将程序下载到从站PLC中。
如图5-25所示,网络1用于初始化Modbus从站,即将从站地址设为5,将端口0的波特率设为9600bit/s、奇校验、延迟时间为0;MaxIQ取值128、MaxAI取值32,表明允许存取所有的I、Q和AI数值;可以使用的V区寄存器地址字数设为1000,起始地址为VB1000,即主站的保持寄存器40001的值写入从站的&VB1000中。
如图5-26所示,网络2用于在每次扫描时执行Modbus_Slave指令,以便响应主站报文。
图5-25 从站程序-网络1
图5-26 从站程序-网络2
如图5-27所示,网络3为将主站传给从站的值传给QB0,使得输出Q0.0~Q0.7受主站的控制,满足控制要求。
同样需要注意的是,利用指令库编程前首先应为其分配存储区,否则STEP 7-Micro/WIN编译时会报错,如图5-28所示。
图5-27 从站程序-网络3
图5-28 从站库存储区分配
3)用串口电缆连接Modbus主从站,观察Modbus从站PLC的Q0.0~Q0.7输出指示灯,或者在Modbus从站的STEP 7-Micro/WIN状态表中观察Q0.0~Q0.7的数值。操作步骤如下:
①用串口电缆连接主从站PLC的Port0。
②将主从站PLC设置为RUN状态。
③将主站I0.1的开关闭合,使其状态为ON。
④利用STEP 7-Micro/WIN状态表,在线监控从站QB0的数值,如图5-29所示。
图5-29 从站状态监控表
从图5-29中可以看出,当主站的I0.1使能后,主站VB1000中的数据就被发送到从站,并写入从站的VB1000中。
5.系统设计要点
1)必须保证主站与从站的“Baud”和“Parity”的参数设置一致,并且“MBUS_MSG”指令中的“Slave”参数要与“MBUS_INIT”中的“Addr”参数设置一致。
2)注意在STEP7-Micro/WIN中定义库的存储地址。
3)在从站的“MBUS_INIT”指令中,参数“HoldStart”确定了与保持寄存器起始地址40001相对应的V存储区初始地址。从站的V区目标指针可以这样计算:
2*(Addr-40001)+HoldStart=2*(40001-40001)+&VB1000=&VB1000
4)在从站的“MBUS_INIT”指令中,参数“MaxHold”设置的数据区要能够包含主站侧所要写入的全部数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。