西门子200PLC与7台神港温控器ModBus通讯实现温度采集与集中控制——江湖小色首先说点废话。
随着智能温控仪表的普及以及工业现场总线集中控制技术的不断完善,以温控器为代表的智能仪表和PLC等上位机的通讯在工业控制过程实施中越来越多的被使,其中以ModBus的应用最为普遍。
过去我曾经发表过一篇《西门子200PLC和omron 温控器modbus通讯》的文章,后来收到很多朋友的邮件请教ModBus的相关问题,但是由于工作比较忙的原因,不能逐一的回复各位网友的疑问,最近稍微比较清闲,正好刚做了一个类似的项目,重新编写了循环读取及错误处理程序,相比《西门子200PLC和omron温控器modbus通讯》中的实验程序更具有实用性,所以决定再写这篇文章,希望对各位朋友有所帮助。
顺便谈谈做ModBus通讯需要注意的一些事情。
关于如何实用ModBus库及程序这里就不多说了,《西门子200PLC和omron温控器modbus通讯》中有详细讲过,你可以通过这个链接看到这篇文章。
/view/1e666e0876*******edb11ad.html直接讲程序了:有点小麻烦,PDF打印机出了点问题,看来只能复制STL代码了。
1.初始化:LD Always_On:SM0.0= L60.0LD Always_On:SM0.0= L63.7LD L60.0CALL MBUS_CTRL_P1:SBR3, L63.7, 19200, 2, 1000, M13.5, VB2110注意:黄色显示部分。
初始化指令中的比特率、校验位、要和你所要通讯的仪表的一致。
初始化程序写好后编译是会报错的,因为你还没有分配库存储区。
2.循环扫描一:LD Always_On:SM0.0LPSA M17.0LPSAB= VB2111, 0R M17.1, 1S M17.2, 1R M17.0, 1LPPAB<> VB2111, 0R M17.1, 1LRDA M17.3LPSAB= VB2112, 0R M17.2, 1S M17.4, 1R M17.3, 1 LPPAB<> VB2112, 0 R M17.2, 1 LRDA M17.5 LPSAB= VB2113, 0 R M17.4, 1 S M17.6, 1R M17.5, 1 LPPAB<> VB2113, 0 R M17.4, 1 LRDA M17.7 LPSAB= VB2114, 0 R M17.6, 1 S M18.0, 1R M17.7, 1 LPPAB<> VB2114, 0 R M17.6, 1 LRDA M18.1 LPSAB= VB2115, 0 R M18.0, 1 S M18.2, 1R M18.1, 1 LPPAB<> VB2115, 0 R M18.0, 1 LRDA M18.3 LPSAB= VB2116, 0 R M18.2, 1 S M18.4, 1R M18.3, 1 LPPAB<> VB2116, 0 R M18.2, 1A M18.5LPSAB= VB2117, 0R M18.4, 1S M18.6, 1R M18.5, 1LPPAB<> VB2117, 0R M18.4, 13.循环扫描二:LD Always_On:SM0.0LPSA M18.7LPSAB= VB2118, 0R M18.6, 1S M20.0, 1R M18.7, 1LPPAB<> VB2118, 0R M18.6, 1LRDA M20.1LPSAB= VB2119, 0R M20.0, 1S M20.2, 1R M20.1, 1LPPAB<> VB2119, 0R M20.0, 1LRDA M20.3LPSAB= VB2120, 0R M20.2, 1S M20.4, 1R M20.3, 1LPPAB<> VB2120, 0R M20.2, 1LRDA M20.5AB= VB2121, 0R M20.4, 1S M20.6, 1R M20.5, 1LPPAB<> VB2121, 0R M20.4, 1LRDA M20.7LPSAB= VB2122, 0R M20.6, 1S M19.2, 1R M20.7, 1LPPAB<> VB2122, 0R M20.6, 1LRDA M19.3LPSAB= VB2123, 0R M19.2, 1S M19.4, 1R M19.3, 1LPPAB<> VB2123, 0R M19.2, 1LPPA M19.5LPSAB= VB2124, 0R M19.4, 1S M17.1, 1R M19.5, 1LPPAB<> VB2124, 0R M19.4, 1以上两段循环扫描程序自己分析一下吧,结构都相同,基本上看懂第一段就完全明白了。
当然程序多变,自然是有更好的办法……就不多说了。
4.错误处理LD SM0.5LPSAB<> VB2111, 0S M17.1, 1 LRDAB<> VB2112, 0 EUS M17.2, 1 LRDAB<> VB2113, 0 EUS M17.4, 1 LRDAB<> VB2114, 0 EUS M17.6, 1 LRDAB<> VB2115, 0 EUS M18.0, 1 LRDAB<> VB2116, 0 EUS M18.2, 1 LRDAB<> VB2117, 0 EUS M18.4, 1 LRDAB<> VB2118, 0 EUS M18.6, 1 LRDAB<> VB2119, 0 EUS M20.0, 1 LRDAB<> VB2120, 0 EUS M20.2, 1 LRDAB<> VB2121, 0 EUS M20.4, 1 LRDAB<> VB2122, 0S M20.6, 1LRDAB<> VB2123, 0EUS M19.2, 1LPPAB<> VB2124, 0EUS M19.4, 1由于温度采集过程中偶尔通讯故障不会对系统有影响,所以当检测到通讯故障时直接复位出现故障的程序重新读取。
5. MBUS_MSG指令:用于启动对Modbus从站的请求并处理应答。
Network 6 // 网络标题// 网络注释LD M17.1= L60.0LD M17.1EU= L63.7LD L60.0CALL SBR4, L63.7, 3, 0, 40129, 1, &VB2125, M17.0, VB2111Network 7 // 网络标题// 网络注释LD M17.2= L60.0LD M17.2EU= L63.7LD L60.0CALL SBR4, L63.7, 4, 0, 40129, 1, &VB2135, M17.3, VB2112Network 8 // 网络标题// 网络注释LD M17.4= L60.0LD M17.4EU= L63.7LD L60.0CALL SBR4, L63.7, 5, 0, 40129, 1, &VB2145, M17.5, VB2113Network 9 // 网络标题// 网络注释LD M17.6= L60.0EU= L63.7LD L60.0CALL SBR4, L63.7, 6, 0, 40129, 1, &VB2155, M17.7, VB2114 Network 10 // 网络标题// 网络注释LD M18.0= L60.0LD M18.0EU= L63.7LD L60.0CALL SBR4, L63.7, 7, 0, 40129, 1, &VB2165, M18.1, VB2115 Network 11 // 网络标题// 网络注释LD M18.2= L60.0LD M18.2EU= L63.7LD L60.0CALL SBR4, L63.7, 8, 0, 40129, 1, &VB2175, M18.3, VB2116 Network 12 // 网络标题// 网络注释LD M18.4= L60.0LD M18.4EU= L63.7LD L60.0CALL SBR4, L63.7, 9, 0, 40129, 1, &VB2185, M18.5, VB2117 Network 13 // 网络标题// 网络注释LD M18.6= L60.0LD M18.6EU= L63.7LD L60.0CALL SBR4, L63.7, 3, 1, 40002, 1, &VB2195, M18.7, VB2118 Network 14 // 网络标题// 网络注释LD M20.0LD M20.0EU= L63.7LD L60.0CALL SBR4, L63.7, 4, 1, 40002, 1, &VB2205, M20.1, VB2119 Network 15 // 网络标题// 网络注释LD M20.2= L60.0LD M20.2EU= L63.7LD L60.0CALL SBR4, L63.7, 5, 1, 40002, 1, &VB2215, M20.3, VB2120 Network 16 // 网络标题// 网络注释LD M20.4= L60.0LD M20.4EU= L63.7LD L60.0CALL SBR4, L63.7, 6, 1, 40002, 1, &VB2225, M20.5, VB2121 Network 17 // 网络标题// 网络注释LD M20.6= L60.0LD M20.6EU= L63.7LD L60.0CALL SBR4, L63.7, 7, 1, 40002, 1, &VB2235, M20.7, VB2122 Network 18 // 网络标题// 网络注释LD M19.2= L60.0LD M19.2EU= L63.7LD L60.0CALL SBR4, L63.7, 8, 1, 40002, 1, &VB2245, M19.3, VB2123 Network 19 // 网络标题// 网络注释LD M19.4= L60.0LD M19.4EU= L63.7LD L60.0CALL SBR4, L63.7, 9, 1, 40002, 1, &VB2255, M19.5, VB2124我们分别对两段高亮显示的程序进行分析,首先分析绿色的CALL SBR4, L63.7, 9, 0, 40129, 1, &VB2185, M18.5, VB21179, 0, 40129, 1中的9是9号温控器的,这里要提一下,modbus通讯和其他通讯一样从站必须有自己的站号,而且在总线上是唯一的。