回复:关于TCP/UDP通信的连接资源、CONN-ID、连接的新建另建与重建

已锁定

宝冬

  • 帖子

    422
  • 精华

    27
  • 被关注

    256

论坛等级:至圣

注册时间:2016-07-06

钻石 钻石 如何晋级?

发布于 2023-12-14 13:24:51

3楼

展开查看
以下是引用执笔画管脚在2023-12-14 11:53:29的发言 >2楼

再贴一下我遇到的问题吧,因为ModBusTCP也是基于楼主提到的那些基本的TCP/UDP指令封装的。遇到问题后我通过操作背景数据块,测试了一些重连方法,并没有解决问题。

当然,这些纯属好奇,因为正常程序不会有我这种手动更改Connection_ID操作。


具体描述如下:

两个西门子PLC走MODBUS TCP,通讯成功的情况下,手动把服务器的Connection_ID改掉,虽然系统会马上把你手动改的值覆盖成正确值,但此时通讯已经掉线,服务器这边会报80A3。

这种状态下重启服务器可以恢复通讯,暂时没找到其他方法。



Conn-ID是对一个已经存在的通信线程对象的引用。


你自己改的数值,这个数值对应的通信线程对象为null,根本不存在,所以指令自动给修复回来。


但是TCP通道传输,那是高速行为,对时序动作的要求是非常严格的。虽然连接ID自动修复回来了,但在这之前,server指令就已经因为参数错误,被破坏了。server端,因为瞬间突然失去通信线程对象,功能失败。


可以按照我顶楼说的原理和例子,一旦出错,就摧毁连接并重建,并停止MBTCP指令调用。

client和server两端,都是这样重建conn,诊断确认conn的状态ok后,再调用Client端指令,重新开始ModbusTCp。



80A3这个代码是T_Diag的status码,它的含义就是指通信线程对象不存在。




在MB-Server实例内部,你可以看到,其实也是通过那几条基础指令来实现功能。所以高层通信指令,都是底层通信指令的应用实例。



评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15688条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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