<p class="ql-block">西门子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站/从站协议库,Modbus RTU 指令位于 STEP7-Micro/WIN SMART 项目树中“指令”文件夹的“库”文件夹中。如图1.Modbus RTU库指令所示。</p> <p class="ql-block">图1.Modbus RTU库指令</p> <p class="ql-block"> 注意:</p><p class="ql-block">1. Modbus RTU 主站指令库的功能是通过在用户程序中调用预先编好的程序功能块实现的,该库对 <b>CPU </b>集成的 RS 485 通讯口 和 <b>CM 01</b> 信号板有效。该指令库将设置通信口工作在自由口模式下。</p><p class="ql-block">2. Modbus RTU 主站指令库使用了一些用户中断功能,编其他程序时不能在用户程序中禁止中断。</p><p class="ql-block">3. Modbus RTU 主站指令库可以同时应用于<b>CPU </b>集成的 RS 485 通讯口 和 <b>CM01</b> 信号板,此时集成的RS 485口使用Modbus RTU Master(v2.0)中指令,CM01信号板使用Modbus RTU Master2(v2.0)中指令,如果只有一个主站则不做区分。</p><p class="ql-block">使用环境及所完成的通信任务</p><p class="ql-block"><b>使用环境: </b></p><p class="ql-block">① STEP 7 Micro/WIN SMART ( 软件版本 V2.5 ) </p><p class="ql-block">② ModScan32 </p><p class="ql-block">③ Modbus Slave</p><p class="ql-block"><b>所完成的通信任务:</b></p><p class="ql-block">① ModScan32 接收 8 个字节数据:<-- ( S7-200 SMART 侧做从站响应 ) VW1000~VW1014</p><p class="ql-block">② Modbus Slave 接收 8 个字节数据:<-- ( S7-200 SMART 侧做主站写 ) VW1000~VW1014</p><p class="ql-block">ModScan32 (S7 200 SMART 做从站)</p><p class="ql-block"><b>1. 打开ModScan32软件</b></p><p class="ql-block"><b>2. 点击“Setup”---“Display Definition”---设定"Slave Address"为3---“Point Type”(本例程以保持型寄存器为例)---“Length”为8</b></p><p class="ql-block">如图2所示,设置完成后点击OK</p> <p class="ql-block">图2.Display Definition</p><p class="ql-block"><b>3. 点击“Connection”----“Connect”</b></p> <p class="ql-block">图3. 建立连接</p><p class="ql-block">① Connect选择 Direct Connection to COM3,根据实际情况选择不同的串口;</p><p class="ql-block">② 串口参数的设置与CPU保持一致</p><p class="ql-block">S7-200 SMART侧编程</p><p class="ql-block"><b>1.打开STEP 7 Micro/WIN SMART>项目树>指令树>库>Modbus RTU Slave(v3.1)</b>,<b>调用MBUS_INIT和MBUS_SLAVE,如图4、图5所示。</b></p> <p class="ql-block">图4. Modbus RTU Slave指令库</p> <p class="ql-block">图5. MBUS_SLAVE</p><p class="ql-block"><b>2.鼠标选中程序块文件夹,单击右键,下拉菜单中选择库存储器,如图6所示。</b></p> <p class="ql-block">图6.点击库存储器</p><p class="ql-block"><b>3.在库存储区分配对话框中手动输入存储区的起始地址。此实例为VB0开始,以使指令库可以正常工作。确保库存储区与程序中其他已使用的地址不冲突。使用建议地址无法确定是否有地址重叠,所以推荐手动输入正确的库存储区首地址。如图7所示。</b></p> <p class="ql-block">图7.库存储区地址分配</p><p class="ql-block"><b>4.编译项目,下载程序。</b></p><p class="ql-block">通信结果如下:</p> <p class="ql-block">图8. 测试结果</p><p class="ql-block">Modbus Slave (S7 200 SMART 做主站)</p><p class="ql-block"><b>1. 打开Modbus Slave软件</b></p><p class="ql-block"><b>2. 点击"Setup"---"Slave Definition"---"Slave"为从站地址---设定Function”(本例程以保持型寄存器为例)---"Quantity"为8---"Display"为Signed</b></p><p class="ql-block">如图9所示,设置完成后点击OK</p> <p class="ql-block">图9.Slave Definition</p><p class="ql-block"><b>3. 点击"Connection"----"Connect"</b></p> <p class="ql-block">图10. 建立连接</p><p class="ql-block">① Connect选择 Serial Port;</p><p class="ql-block">② Mode 选择RTU;</p><p class="ql-block">③Port3表示使用的串口(COM3),根据实际情况选择不同的串口,串口参数的设置与CPU保持一致。</p><p class="ql-block"><br></p><p class="ql-block">S7-200 SMART侧编程</p><p class="ql-block"><b>1.打开STEP 7 Micro/WIN SMART>项目树>指令树>库>Modbus RTU Master(v2.0)</b>,<b>调用MBUS_CTRL和MBUS_MSG,如图11和图12所示。</b></p> <p class="ql-block">图11. 用 SM0.0 调用 Modbus RTU 主站初始化与控制子程序</p> <p class="ql-block">图12. 调用Modbus RTU 主站读写子程序</p><p class="ql-block">常见的错误:</p><p class="ql-block">如果多个 MBUS_MSG 指令同时使能会造成 6 号错误</p><p class="ql-block">从站 delay 参数设的时间过长会造成主站 3 号错误</p><p class="ql-block">从站掉电或不运行,网络故障都会造成主站 3 号错误</p><p class="ql-block"><b>2.鼠标选中程序块文件夹,单击右键,下拉菜单中选择库存储器,如图13所示。</b></p> <p class="ql-block">图13.点击库存储器</p><p class="ql-block"><b>3.在库存储区分配对话框中手动输入存储区的起始地址。此实例为VB0开始,以使指令库可以正常工作。确保库存储区与程序中其他已使用的地址不冲突。使用建议地址无法确定是否有地址重叠,所以推荐手动输入正确的库存储区首地址。</b></p><p class="ql-block"><b>如图14所示。</b></p> <p class="ql-block">图14.库存储区地址分配</p><p class="ql-block"><b>4.编译项目,下载程序。</b></p><p class="ql-block">通信测试结果</p><p class="ql-block">将M0.1置位为1,然后在状态图表中创建变量,VW1000-VW1014 共8个字,监视值如图15所示。</p> <p class="ql-block">图15.读取服务器数据</p> <p class="ql-block">原文转载自微信公众号,著作权归作者所有</p>