在论坛找到MODBUS通讯程序例程之前,初次接触两个200smart的主从通信,对于modbus主从站通讯真是无从下手,只是很久之前关于 plc通讯有个轮询的概念,即主站依次顺序访问各个从站,接收到从站的通讯数据后,才发指令开始访问下一个通讯从站,直至完成整个通讯网络的访问交互任务。因为项目需要,翻找了很多200smart通讯的资料和相关视频,大致回忆记录如下。 1、硬件部分,两台S7-200 SMART ST40 plc,若干条网线,多网口路由器,一条DP 九针485通讯线(带两公头),直流 电源220VAC/24VDC(350W),各个连接24V电源到PLC线缆。 2、软件部分,step7-micro/win smart 编程软件,参考资料手册等。 3、编写从站modbus通讯程序 在项目树文件库中找到MODBUS RTU slave,调用modbus从站库: 初始化定义好从站各个通讯参数的含义
定义从站完成位Done、错误参数Error,定义VW0数据传送到QW0输出数据流
4、编写modbus主站通讯程序
调用主站库Modbus Rtu Master 定义通讯波特率、校验位、通讯口、超时时间、完成错误位 下面依旧要调用主站库
首次扫描置位M3.0,复位M3.1和M3.2。M3.0,M3.1为主站库MBUS_MSG使能端,上升沿信号有效,定义的站号还有通讯各项参数(通讯波特率、校验位、通讯口)与从站保持一致,上面是只读输入,16位,从I0.0到I1.7,取地址为VW0,下面各个参数的含义
这一程序段当M0.1(只读输入取地址)无错误完成时才接通,此时复位M3.0,M3.1,M0.2,置位M3.2,下一个V区保持寄存器开始,同样上升沿信号有效,从站对应3,可读写,从第一个定义的V区地址开始,连续后面5个地址位。
下面这段是当上述完成无错误M0.2运算为1,MB3位0是接通,复位M3.2,M0.1,使上述流中断,前一个modbus完成位置0复位,M3.1又重新置位继续进第一个modbus使能端,如此保持循环。轮询进行通讯! 这里modbus库存储区建议按如下进行设置 5、测试通讯程序,完成程序编写后,把程序保存编译后后分别下载到200smart主站和从站PLC中,注意 电脑与各个PLC的IP地址是处于同一网关,这里电脑PC端IP地址为192.168.2.100,子网掩码:255.255.255.0,连接PLC还有电脑PC以太网网线到路由器里,同一网段可以使用ping IP地址的方式测试网络通信质量。
在主站状态图表中定义如下:
在调试菜单里点击在线监视程序状态,一开始可能出现时间戳不匹配的问题,
可点击比较,如不比较继续为灰,不能继续执行下一步,当程序与PLC中一致,则可以继续, 在图表状态里改变,这两项可以反映主从站的通讯是否正常。 首先在从站PLC上准备一根从PLC L+(24V+)到各个输入I点接线,可以随意点亮各个输入点比较长的线缆,比如点亮的为I1.1,I1.5,注意高低位顺序
可以再看保持寄存器,数据已经发生变化,第二位和第五位已经由0变为1.
在里面写入一些数据,在从站PLC点位上可见 这便是尝试MODBUS RTU通讯的简要过程,只是主站传输给从站的数据流通过mbus通讯可实现,从站传输给主站的数据还需进一步调试程序,优化验证。 来源:西门子工业技术论坛 |