CODESYS中一个TCP Server可以同时与多个client连接吗?

        最近在学习CODESYS。官方的一个讲解以太网通讯的视频连接如下:

C05实战.CODESYS通信实例介绍_哔哩哔哩_bilibili

        在这个视频中讲解了CODESYS做TCP Server的方法。具体方法这里不讲解。我的好奇点在于:我们都知道对于一个SERVER,最基本的要求是一个SOCKET与多个CLIENT同时连接。那么视频中讲解的SERVER可以吗?视频没有给出答案,本文就是要填补视频的空白。

        首先,创建一个SERVER,这个步骤在视频中有详解讲解,这里不赘述。

        其次,声明2个连接:

                        SerConnect1:        NBS.TCP_Connection;
                        SerConnect2:        NBS.TCP_Connection;

        这2个连接进行监听的语句

                        SerConnect1(xenable := TRUE, hserver := server.hServer);

                        SerConnect2(xenable := TRUE, hserver := server.hServer);

       这2个连接都监听同一个socket(server.hServer).

        当一个客户端连接到这个主机的SOCKET时,SerConnect1处于激活状态(SerConnect1.xActive信号为1)。当第二个客户端连接到这个主机的SOCKET时,SerConnect2也处于激活状态。这一测试表明CODESYS的server的一个SOCKET是可以连接2个客户端的。

        测试到此已经有一个重要的结论了。继续测试,当第一个客户端主动断开连接时,发现SerConnect1仍然处在连接状态,当第二个客户端主动断开连接时,发现SerConnect2也还是处在连接状态。这就带来一个问题,就是server如何判断当前的连接状态是好的还是已经断开了。为此我问询了deepseek。AI给出的解决办法是server为每个连接定时发送心跳信号。如果心跳信号反馈正常,那么说明当前这个连接是正常的。如果收不到反馈,说明这个连接已经断开了。这个办法是可行的,可惜的是在CODESYS教学视频中对此是没有讲解的。

        附带说明一下,当心跳信号有问题时,应该复位该连接监听语句的xenable信号。之后再次置位该信号,这样就可以释放资源,再次进行监听。

        注:以上测试的环境是Control Win V3。

        最后强调一个事情,这其实在上一篇“FB和对象”文档已经有所表述。这里在重复一遍。就是虽然一个server的socket可以建立多个客户端连接,但是连接的数量不是动态的,而是在编程阶段已经在声明区声明好的,连接数量是确定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值