探讨ModbusTCP主从问题。
帮朋友调一个ModbusTCP通讯,1500做客户端,和利时DCS做服务器。
程序写好了,但一直通不上。想让DCS用测试软件测一下自证服务没问题。但是对方不愿意,我只好下一个Modscan自己测服务,建立不了连接。
于是指出DCS通讯服务可能有问题,可是DCS说隔壁一个车间的服务器一样的设置有跟一台1200成功通讯所以这个车间一定也没问题。我朋友是做强电的所以这些问题在现场不敢强硬,客户也是墙头草跟着说服务器肯定没问题,一定是1500的问题。
没办法,网上找例子想办法自证客户端的清白。找到一篇是用ModbusPoll测服务器,用ModbusSlave测客户端的例子。调过ModbusRTU的都知道Poll是仿真主站测从站的,Slave是仿真从站测主站的,和例子里的用法是反的。我当时也没多想,下了个ModbusSlave,一测就通读写都没问题。
证明了清白挺直了腰杆演示给DCS看,让他查服务的问题。他折腾了一下还是通不上,又回过头来找我的问题。先是质疑接口填16进制还是10进制的问题,被我怼回去了。结果突然灵光一现发现我是用ModbusSlave测的,非说我写的是服务器程序,对我调用MB_CLIENT指令视而不见。一度说得我都怀疑我是不是做服务器了。
后来我一想是因为RTU和TCP/IP的主从的主被动关系变了,RTU是主站轮训从站,主站主动从站被动,TCP/IP是客户端发请求服务器响应,客户端主动服务器被动。所以ModbusSlave在测RTU的时候做从站,在测TCP的时候做服务器。
网上找的例子http://m.blog.sina.com.cn/s/blog_556b9e3c0102yrgc.html#page=1
想请教几个问题,
1和利时DCS的ModbusTCP是按主从组态的,不是显示客户端和服务器。能不能认为Modbus主站就是服务器。
2我对于测试软件反着用的解释对不对。
3我的程序对不对(明早上传)
4Modscan能不能测ModbusTCP服务器
5我还能通过什么办法百分之百证明是对方服务有问题
6在技术实力不对等的情况下怎么可以取信于客户,避免客户拉偏架