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

已锁定

执笔画管脚

西门子1847工业学习平台

  • 帖子

    278
  • 精华

    2
  • 被关注

    13

论坛等级:侠圣

注册时间:2012-05-10

白金 白金 如何晋级?

发布于 2023-12-14 20:36:53

5楼

展开查看
以下是引用宝冬在2023-12-14 13:24:51的发言 >3楼

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


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


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


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

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



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




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



以下是引用执笔画管脚在2023-12-14 11:53:29的发言 >2楼:再贴一下我遇到的问...

引用2楼详细内容:

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

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


具体描述如下:

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

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



我试过在客户端和服务器端分别做各种恢复操作,包括DISCONNECT连接,断掉server指令再重新启用,reset连接,初始化指令背景DB等操作,均无法恢复。两端同步做恢复操作还没试过,回头我测试一下。
你若安好便是晴天
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15106条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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