作者 | 主题 |
---|---|
ALlll 侠士 经验值: 1401 发帖数: 148 精华帖: 6 |
楼主 2019-08-07 22:34:18
主题:有口难辩,测试通讯学扯皮 探讨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在技术实力不对等的情况下怎么可以取信于客户,避免客户拉偏架 |
yming 至圣 经验值: 127285 发帖数: 21992 精华帖: 824 |
1楼 2019-08-07 23:06:34
主题:回复:有口难辩,测试通讯学扯皮 当然不是了! Modbus TCP的客户端就相当于 MB RTU(总线类)的主站,是主动地。 而Modbus TCP的服务器就相当于 总线类的 从站。是响应主站的访问。 在Modbus TCP 服务器中,一般可以非固定连接(对于访问IP 设为0.0.0.0,接受任何客户端的访问。) 这一点,与总线类的主-从通讯完全不同。 如果1500是客户端,那么对方服务器必须给你一个端口号(不一定是502。)固定连接时,必须给一个(503、504.。。只要是没被占用的端口都可以。) 如果服务器的MB通讯只有一个端口(例如502),如果存在连接,而一直没有释放;则该端口一直被占用,别人无法连接。
学而时习之,不亦说乎?温故而知新,不亦乐乎?
|
龙云浪子 奇侠 经验值: 8503 发帖数: 884 精华帖: 8 |
2楼 2019-08-07 23:31:18
主题:回复:有口难辩,测试通讯学扯皮 MODBUS TCP里的服务器和客户端通信跟MODBUS RTU里的主从站根本不是同一个概念。 PLC本身是没有符合MODBUS协议规范里的0X、3X、4X等一系列标准地址的,只有每个厂家自己定义的DI、DO、AI、AO、M、V、DB或者像日系的X、Y地址。 那么要使用MODBUS TCP通信功能,就需要PLC充当服务器角色,调用TCP服务器指令库,将PLC本身的M、V、DB、AI、DO等地址映射、发布成相应的标准MODBUS地址,其他的TCP客户端就可以读写由PLC充当的服务器里的数据。 同样的,如果由PLC读写其他TCP服务器的数据,只需要使用TCP客户端指令,指定读写首地址就行了的。 也就是说MODBUS TCP通信里,服务器和客户端是双向互动、平等的关系,不是RTU里主从、被动的关系。
个体职业者。
|
ALlll 侠士 经验值: 1401 发帖数: 148 精华帖: 6 |
3楼 2019-08-08 08:49:09
主题:回复:有口难辩,测试通讯学扯皮 明白了,主要是DCS那边一开始叫1500做从,我说没有从,只有客户端和服务器,他说那就做客户端。。。。。。。 还是知识面不够广,有足够的支撑就能够怀疑一切,从需求开始时。 程序如下: 西门子的通讯案例就是全双工,一个连接收一个连接发。我写的块只调用了一个连接,收一次发一次循环,没有用延时,收完立马发,发完立马收。测试过,没问题。而且为了配合我那位搞强电的朋友,块的接口做的比较友好。附上源文件,有需要的可以看看。 |
ALlll 侠士 经验值: 1401 发帖数: 148 精华帖: 6 |
4楼 2019-08-08 08:54:54
主题:回复:有口难辩,测试通讯学扯皮 |
mwb0500 游侠 经验值: 596 发帖数: 303 精华帖: 0 |
5楼 2019-08-08 09:20:17
主题:回复:有口难辩,测试通讯学扯皮 MODBUS TCP SERVER 对应 MODBUS RTU SLAVE MODBUS TCP CLIENT 对应 MODBUS RTU MASTER 他肯定是让你做SERVER,他来读的,你做成CLIENT不正确 |
mwb0500 游侠 经验值: 596 发帖数: 303 精华帖: 0 |
6楼 2019-08-08 09:23:23
主题:回复:有口难辩,测试通讯学扯皮 对方如果想让你做CLIENT的话,必须告诉你IP,PORT,他那边的寄存地地址,需要你这边的什么数据,怎么对应他那边的寄存器地址,一般来说大系统一般都是CLIENT,设备这边做成SERVER,然后你你这边映射的地址告诉人家,就完事了, |
yming 至圣 经验值: 127285 发帖数: 21992 精华帖: 824 |
7楼 2019-08-08 11:38:34
主题:回复:有口难辩,测试通讯学扯皮 不用那麻烦哦。 1、1200/1500的ModBus TCP 是可以仿真通讯的哦。(因为 仿真支持2台PLC)。 2、你的客户端PLC是可以同时对那个服务器写两个客户端哦,一个读那个服务器端口;一个写那个服务器另一个端口。分别占用两个连接资源。 3、只要你PLC连接数够多,可以同时读写很多服务器的。连接资源实在不够时,才需要断开连接,释放连接。 4、这个ModBus TCP是不需要考虑断线的。一旦存在物理连接,通讯自动恢复。 5、这是以太网的TCP连接,是可以经过路由的。
我写过一个ModBus TCP 连载。完全不用实际PLC,仿真通讯就可以了。
学而时习之,不亦说乎?温故而知新,不亦乐乎?
|
ALlll 侠士 经验值: 1401 发帖数: 148 精华帖: 6 |
10楼 2019-08-08 17:28:12
主题:回复:有口难辩,测试通讯学扯皮 1500做服务器,一下就通了,问题解决了。 分享一下做的两个块 客户端改后缀为.awl 服务器改后缀为.scl |
yming 至圣 经验值: 127285 发帖数: 21992 精华帖: 824 |
11楼 2019-08-08 21:07:02
主题:回复:有口难辩,测试通讯学扯皮 很好。实践出真知。 其实人家说你这边做从机。其实就是要你做个服务器端。 注意:一台PLC是可以同时“安装”多个MB_TCP客户端和MB_TCP服务器端的。可以同时扮演不同的角色。 这就意味着它可以响应上位机的访问,也可以主动地访问其他PLC,做数据汇总。 可以分别两两仿真测试。
学而时习之,不亦说乎?温故而知新,不亦乐乎?
|