ayusecret
级别: 略有小成
精华主题: 0
发帖数量: 183 个
工控威望: 261 点
下载积分: 806 分
在线时间: 73(小时)
注册时间: 2021-10-31
最后登录: 2024-11-18
查看ayusecret的 主题 / 回贴
楼主  发表于: 2022-06-09 08:31
最近基于Python写了一些测试MC协议的代码,想测测断线重连的功能,发现拔了网线后再插上,用原来的套接字无法与PLC通讯(下断点调也无法实现).监控PLC网络状态仍然处于连接中(与之前的套接字连接).如果我在Python程序内重新以一个新的套接字去尝试连接,会回复目标计算机积极拒绝.这样我只能复位PLC才能断开PLC的连接状态,这在实际应用应该是不允许的.后面再Gxword3内配置参数,让PLC自己10s后监视生存,再反复3次监视确认自动断开.想请教各位在用上位机是如何实现断线重连的,又或者是即使无重连功能,重新初始化是如何连上PLC的
zmrs163
级别: 家园常客
精华主题: 0
发帖数量: 373 个
工控威望: 521 点
下载积分: 1466 分
在线时间: 324(小时)
注册时间: 2017-06-12
最后登录: 2024-11-18
查看zmrs163的 主题 / 回贴
1楼  发表于: 2022-06-09 17:22
看了下你的代码,close之后要重新connect才能发送吧
zmrs163
级别: 家园常客
精华主题: 0
发帖数量: 373 个
工控威望: 521 点
下载积分: 1466 分
在线时间: 324(小时)
注册时间: 2017-06-12
最后登录: 2024-11-18
查看zmrs163的 主题 / 回贴
2楼  发表于: 2022-06-10 13:26
我测试了下网线拔掉之后PLC很快就关闭了连接,这个时候电脑客户端重连发送即可。你程序前两个错误在于PLC关闭了连接你还尝试发送,然后自己关闭了连接肯定不能发了,资源都已经释放了。最后一个错误需要查看你PLC的程序,如果你PLC也执行了CLOSE就连不了了,反之可以继续连接。
zmrs163
级别: 家园常客
精华主题: 0
发帖数量: 373 个
工控威望: 521 点
下载积分: 1466 分
在线时间: 324(小时)
注册时间: 2017-06-12
最后登录: 2024-11-18
查看zmrs163的 主题 / 回贴
3楼  发表于: 2022-06-10 16:12
我用5U测试的。5U默认有keepalive且无法修改。正常就是不会断开的,PLC这么快断开我才觉得奇怪,在网络上服务器如果没有心跳无法知道客户端是否在线,所以大多是一段时间无数据通讯后断开释放。
引用
引用第10楼ayusecret于2022-06-10 15:02发表的  :

不知道你在什么环境下测试的,我是用Gxwork3,R04 CPU测试,测试环境默认没有开启生存定时器,所以我拔网线,PLC还是不会关闭连接的。只有我在参数上再配置定时器超时自动关闭才会关闭。
我的配图从头到尾,PLC都没断之前的连接,错误都是为了演示整个过程,我知道错误的原因,只是当时纳闷PLC为啥自己不断开,后面开了定时器才正常。没验证Gxwork2 Q系列PLC的,貌似Gxwork2没有这个定时器配置,难道这就是区别?