原来用C#写的程序可以正常与西门子1500通讯. 但是这一次现场反馈通讯不上.
现把现场出现的问题做一次总结.
事实上, 这次通讯不上的问题主要是辊压机的PLC工程师不了解这款西门子PLC的一些通讯设定.
在PLC端的程序中, 我看到是引入了MB_SERVER模块, 绑定了一个背景DB块. 地址为DB337.
这个模块用于把PLC的内存地址挂到modelbus服务器端上面去, 供下面的modelbus服务端进行访问.
看上去设置也没什么问题.
然后打开该数据块,是一个“TCON_IP_v4”的数据类型.
内容如下图所示.
经过反复检查, 后来发现这位PLC工程师在设置ConnectionType类型错了, 他填写的是16#08, 他把B填写成8.
就因为这个问题, MoudelBus工具ModScan32无法连接上PLC
ModScan32工具确实好用, 一般在PLC默认设置下, 多半是可以访问到PLC内存的值的. 用来测试通讯还是不错.
但是这个工具读出来的值, 需要做地址转换, 例如DB337, 偏移15, 这个内存地址的值, 并不是modelbus的地址337, 需要进行转换.这个会把一般的人弄得没脾气.
但是由于原来上位机C#程序使用的并非是modelBus协议访问PLC内存, 而是使用的S7协议访问.
因此即使上面的modelBus通讯上了, 还需要1500PLC做下面的设定, 才可以正常访问.
一是关闭优化内存块存储.
二是启用安全设定的PUT/GET的项目.
这两点不设定好, 看到的现象就是, S7协议连接PLC上了, 并且握手也通过了. 就是读不出也不能写内存地址.
这个问题笔者在现场搞了两天, 最终并非是C#的程序出了问题, 而是PLC这一端设置出了问题. 这次差出的就比较冤枉了.
由于辊压机厂家是我们的客户, 也没办法怂他们, 只能是当长一次教训.

