技术论坛

 有口难辩,测试通讯学扯皮

返回主题列表
作者 主题
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
主题:回复:有口难辩,测试通讯学扯皮

源文件:

ModbusTCP_Client.txt

不让上传源文件格式,下载后另存为.awl就行了





我会写一个服务器程序再尝试与DCS通讯,到时再上传服务器程序。

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做服务器,一下就通了,问题解决了。

分享一下做的两个块

ModbusTCP_Client.txt

ModbusTCP_Server.txt

客户端改后缀为.awl

服务器改后缀为.scl

ModbusTCP块使用说明.docx

ModbusTCP_RuiQi.zip



yming
至圣

经验值: 127285
发帖数: 21992
精华帖: 824
11楼    2019-08-08 21:07:02
主题:回复:有口难辩,测试通讯学扯皮

很好。实践出真知。

其实人家说你这边做从机。其实就是要你做个服务器端。


注意:一台PLC是可以同时“安装”多个MB_TCP客户端和MB_TCP服务器端的。可以同时扮演不同的角色。

这就意味着它可以响应上位机的访问,也可以主动地访问其他PLC,做数据汇总。


可以分别两两仿真测试。




学而时习之,不亦说乎?温故而知新,不亦乐乎?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。