西门子(中国)有限公司(SLC)

注册 登录

  签到     订阅   每日登录:+1西币 +1经验值我的支持中心

信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。

技术论坛


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

返回主题列表
作者 主题
ALlll
侠客

经验值: 653
发帖数: 71
精华帖: 3
楼主    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
至圣

经验值: 75657
发帖数: 16781
精华帖: 589
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),如果存在连接,而一直没有释放;则该端口一直被占用,别人无法连接。

龙云浪子
侠圣

经验值: 3136
发帖数: 478
精华帖: 3
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
侠客

经验值: 653
发帖数: 71
精华帖: 3
3楼    2019-08-08 08:49:09
主题:回复:有口难辩,测试通讯学扯皮

明白了,主要是DCS那边一开始叫1500做从,我说没有从,只有客户端和服务器,他说那就做客户端。。。。。。。

还是知识面不够广,有足够的支撑就能够怀疑一切,从需求开始时。


程序如下:

西门子的通讯案例就是全双工,一个连接收一个连接发。我写的块只调用了一个连接,收一次发一次循环,没有用延时,收完立马发,发完立马收。测试过,没问题。而且为了配合我那位搞强电的朋友,块的接口做的比较友好。附上源文件,有需要的可以看看。



ALlll
侠客

经验值: 653
发帖数: 71
精华帖: 3
4楼    2019-08-08 08:54:54
主题:回复:有口难辩,测试通讯学扯皮

源文件:

ModbusTCP_Client.txt

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





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

您收到0封站内信:
×
×