回复:1200系列PLC如何通过MODBUS_TCP读写28个服务器?

yming

西门子1847工业学习平台

  • 帖子

    23148
  • 精华

    881
  • 被关注

    1253

论坛等级:至圣

注册时间:2004-03-06

钻石 钻石 如何晋级?

发布于 2018-07-28 22:23:59

16楼

展开查看
以下是引用樱桃大丸子在2018-07-28 16:39:05的发言 >15楼

感谢费心,这几天我在忙别的事情,没有跟进这个问题。我反复测试了一下,用一个指令,通过切换IP和端口号等,是可以做到超过14个服务器的,但是感觉很繁琐,效率低。感觉这种不太适合轮训,远没有RTU模式轮训方便。

以下是引用shine在2018-07-27 11:20:28的发言 >14楼:我开了2个PLCSI...

引用14楼详细内容:

我开了2个PLCSIM,测试MODBUS TCP,一个作为server,一个作为client,能看到状态码 server是7006,client是7004,一切正常,但是,client 给个req之后,状态码变成了7006,超时时间过了之后错误码80C8,然后变回7004。监控server和client的背景数据块,能看到server收到了client发过去的请求,但是没看出是否有响应,抓包工具好像也不能抓取2个plcsim直接的数据包。

因为手头只有1个cpu,分别下载到CPU,和电脑做测试,都是没有问题的,一直没搞懂为什么模拟测试不成功。如果不支持,那么不会显示7004/7006的状态,但支持的话,server没响应

以下是引用yming在2018-07-20 19:25:39的发言 >11楼:就一个客户端,轮流...

引用11楼详细内容:

就一个客户端,轮流、逐一访问各服务器。

一下子测试那么多做啥?只需要测试做2个可访问服务器的即可知道。

何况这MB_TCP系统个完全可以仿真!(硬件都不需要。)


以下是引用樱桃大丸子在2018-07-20 16:23:40的发言 >10楼:意思是程序里面总...

引用10楼详细内容:

意思是程序里面总共只创建不超过14个MB_CLIENT指令,第一个IP地址读写完成之后,用DisConnect断开连接,然后修改IP地址数据,然后再重新建立连接……如此循环执行?

我试过创建15个MB_CLIENT指令,14个为一组,当读写完成之后,我通过DisConnect断开14个连接,然后启动第15个连接,结果报错80A4,说是IP地址无效。

以下是引用yming在2018-07-20 15:52:24的发言 >9楼:应该是可以的。连...

引用9楼详细内容:

应该是可以的。

连接ID不变;

REQ=1;用DisConnect 操作;并用 状态 7003 判断。然后改变服务器 IP地址的最后一位字节。

服务器侧也需要在响应完成后,用一个周期,DisConnect 断开连接,然后恢复等待连接。




以下是引用樱桃大丸子在2018-07-20 08:08:58的发言 >3楼:貌似是不可行的...

引用3楼详细内容:

貌似是不可行的。题目中的那几个唯一条件限制了,没办法通过程序去切换,特别是那个“连接ID”,是以静态变量的形式存在的,除了下载之前赋值,程序运行的时候是没办法改变的。

以下是引用yming在2018-07-19 23:48:17的发言 >2楼:是8个固定(预...

引用2楼详细内容:

是8个固定(预留)和6个动态。

如果没有时间要求,用个1客户端去轮流读不同的MB_TCP 服务器,也是可以的。


没那么麻烦吧?!

Modbus_TCP不像485总线那样,所有从站(听者)都挂在上面,是自己的的报文就接收。

一个客户端对多个服务器的MB_TCP每次都要连接、断开连接;远程还需要“跨过”多个路由器、阶跃点,才能建立连接。传输速度可以是十几毫秒(局域网内),也可能长达上千毫秒(互联网上)。但其所达距离是485比不了的。

轮询的操作也不会那么麻烦,REQ基本不用管(保持置一),每次DONE收到后,断开连接;下个循环更改服务器地址;下一个循环再次连接;周而复始。


学而时习之,不亦说乎?温故而知新,不亦乐乎?
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15112条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。