加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15267534595

河南省周口市SIEMENS西门子(授权)中国一级总代理商

更新时间
2025-01-31 09:10:00
价格
请来电询价
变频器
西门子代理商
触摸屏
西门子一级代理
伺服电机
西门子一级总代理
联系电话
18126392341
联系手机
15267534595
联系人
梁涛
立即询价

详细介绍

TCP/UDP通信的一个连接资源,是用一个CONN-ID来标识,其实就是一个static thread(静态通信线程)。


什么是静态线程?玩过上位机的都明白。就相当于平行运行在另一个CPU核芯中的一个OB。


这个OB有自己的扫描周期。这个OB里面就是具体完成TCP/UDP的底层实现细节的代码和实例。这一切都被官方隔离看不见,只暴露了一个线程实例对象的CONN-ID作为使用接口。



自己开发上位机也是如此。上位机需要为每一个下位的PLC节点保持一个通信线程,保持持续的侦听和收发。这个线程对象必须是静态的,保证它的持续存在和数据一致。

比如你有5个下位PLC,就要建立5个静态通信线程对象,各自独立平行运转,构成一个上位机整体框架中的位于Zui底部的通信层。

通信层之上的业务数据的往来处理和数据库进出,还有顶部的UI层,都是建立在Zui底部的多个通信线程对象的基础上,也都是由多个不同功能的对象组成。所谓层就是多个对象的集合,这就是通常所说的面向对象编程。对象就是PLC中所说的实例,Instance。

至于构成这些各层的对象从哪里来?都是从负责生产具体功能对象的工厂对象来,这就是IT行业的设计模式中提到的几种工厂模式。

现在人们都普遍采用面向接口的抽象框架,这种与实体对象的解耦设计。所以上位机的主体框架,都变成由一大堆抽象接口搭建构成,而执行具体功能的诸多对象都被剥离出去,单独管理。这被称为控制反转和依赖性注入。目的就是为了使整体框架的共性基础本质的抽象更纯粹,而不是为了特定对象才设计出来的,增加通用性和扩展性。



这另外一个CPU核芯,可以是分片运行CPU机制中的另外一部分,比如通信负荷的20%设定之类,也可以是真正多核CPU的另外一个物理核芯。这就要看价钱,以及官方有多么垄断黑和暴利。

所谓通信资源的数量限制,就是允许你建立多少个不同的专用线程。这种限制就是真正榨利润的拿捏之处。其实这东西成本根本不值钱,都是论斤称的。

通信是工业的核心基础,所以线程的限制往往都卡在通信上。为啥S7不开源。都是垄断和利益之争。

进口、国产、软硬件生态之争都在其中,正在发生。


其实所有的后台异步指令,都是像这样存在于平行运转的另外CPU核芯中。区别就是线程的内容不同,静态与动态的选择不同。


动态的对象,才是人们通常所说的对象。随着需求,被临时创建出来,用完了就销毁和释放资源,下次用到再重新创建和分配资源。temp变量就这样。static变量都是相对多耗费资源的。



当PLC的TCP/UDP通信出现故障的时候,这也包括ModbusTCP和S7通信故障,这个后台通信线程其实还是一直存在的,CONN-ID还是被一直占用的,只是线程里面的运行出了问题。


这时候,你如果想直接建立一个相同ID的新连接是不行的,必须先把此ID的连接断开,也就是先把这个线程对象释放和摧毁掉,然后新建一个相同ID的新线程,这就是重建。

如果你新建的连接ID是不同的,那就是另建一个连接。


关于新建、重建、另建,需要用到以下4个官方指令。这几个指令的合理运用,可以保证连接修复是可靠的。连接的存在和状态可控了,在此连接之上运用的各种以太网协议收发指令就容易和OK了。

TCON:建立以太网连接

TDISCON:断开以太网连接

T_DIAG: 诊断连接

T_RESET: 复位连接



以下给了几个代码截图例子,演示一下这几个指令运用的可选思路,供大家参考。


1、用TCON和TDISCON去新建和另建的基本逻辑。这是一个单元FB的内部。



2、上述单元被调用,去上电后建立两个UDP连接的一个例子。



3、当连接出现阻塞故障的时候,用T_Reset去重建这两个连接的例子。


修复UDP连接的过程和效果,如下Trace图



相关产品

联系方式

  • 电  话:18126392341
  • 联系人:梁涛
  • 手  机:15267534595
  • 微  信:15267534595