ayusecret
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 181 個(gè)
工控威望: 259 點(diǎn)
下載積分: 802 分
在線時(shí)間: 72(小時(shí))
注冊(cè)時(shí)間: 2021-10-31
最后登錄: 2024-11-12
查看ayusecret的 主題 / 回貼
樓主  發(fā)表于: 2022-06-09 08:31
最近基于Python寫了一些測(cè)試MC協(xié)議的代碼,想測(cè)測(cè)斷線重連的功能,發(fā)現(xiàn)拔了網(wǎng)線后再插上,用原來的套接字無法與PLC通訊(下斷點(diǎn)調(diào)也無法實(shí)現(xiàn)).監(jiān)控PLC網(wǎng)絡(luò)狀態(tài)仍然處于連接中(與之前的套接字連接).如果我在Python程序內(nèi)重新以一個(gè)新的套接字去嘗試連接,會(huì)回復(fù)目標(biāo)計(jì)算機(jī)積極拒絕.這樣我只能復(fù)位PLC才能斷開PLC的連接狀態(tài),這在實(shí)際應(yīng)用應(yīng)該是不允許的.后面再Gxword3內(nèi)配置參數(shù),讓PLC自己10s后監(jiān)視生存,再反復(fù)3次監(jiān)視確認(rèn)自動(dòng)斷開.想請(qǐng)教各位在用上位機(jī)是如何實(shí)現(xiàn)斷線重連的,又或者是即使無重連功能,重新初始化是如何連上PLC的
cythyx
級(jí)別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 452 個(gè)
工控威望: 527 點(diǎn)
下載積分: 1634 分
在線時(shí)間: 106(小時(shí))
注冊(cè)時(shí)間: 2019-06-27
最后登錄: 2024-10-14
查看cythyx的 主題 / 回貼
1樓  發(fā)表于: 2022-06-09 08:47
使用套接字的通訊方式,一般會(huì)檢測(cè)通訊狀態(tài),如果檢測(cè)到通訊狀態(tài)斷開不是直接再連端口,需要先執(zhí)行關(guān)閉端口,再打開端口連接。
ayusecret
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 181 個(gè)
工控威望: 259 點(diǎn)
下載積分: 802 分
在線時(shí)間: 72(小時(shí))
注冊(cè)時(shí)間: 2021-10-31
最后登錄: 2024-11-12
查看ayusecret的 主題 / 回貼
2樓  發(fā)表于: 2022-06-09 09:37
圖片:
引用
引用第1樓cythyx于2022-06-09 08:47發(fā)表的  :
使用套接字的通訊方式,一般會(huì)檢測(cè)通訊狀態(tài),如果檢測(cè)到通訊狀態(tài)斷開不是直接再連端口,需要先執(zhí)行關(guān)閉端口,再打開端口連接。

試過了,PLC一直拒絕響應(yīng)
13821917697
承接電氣自動(dòng)化項(xiàng)目、電氣接線圖設(shè)計(jì)、IO點(diǎn)表、電氣元器件選型
級(jí)別: 工控俠客
精華主題: 0
發(fā)帖數(shù)量: 755 個(gè)
工控威望: 3141 點(diǎn)
下載積分: 13304 分
在線時(shí)間: 1060(小時(shí))
注冊(cè)時(shí)間: 2019-12-26
最后登錄: 2024-11-14
查看13821917697的 主題 / 回貼
3樓  發(fā)表于: 2022-06-09 11:00
圖片:
Python的不太懂啊,C#最近剛好做了個(gè)這么功能可以跟你說說思路。首先套接字?jǐn)嗑之后是不能沿用原先的連接的,我這里做的方式是重新new了一下。用一個(gè)新的連接。建立一個(gè)bool變量作為標(biāo)志位,初次連接成功之后,標(biāo)志位置反,開始正常工作。如果斷開連接,try里面的正常工作指令會(huì)報(bào)錯(cuò)跳到catch,這里我們把套接字dispose全部釋放,并且標(biāo)志位初始化。然后就又開始重新連接了。就是這樣
我看到你了
級(jí)別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 375 個(gè)
工控威望: 619 點(diǎn)
下載積分: 491 分
在線時(shí)間: 156(小時(shí))
注冊(cè)時(shí)間: 2018-05-02
最后登錄: 2024-09-12
查看我看到你了的 主題 / 回貼
4樓  發(fā)表于: 2022-06-09 11:14
為什么不直接用三菱的控件,MXcomponent啊還搞啥socket
ayusecret
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 181 個(gè)
工控威望: 259 點(diǎn)
下載積分: 802 分
在線時(shí)間: 72(小時(shí))
注冊(cè)時(shí)間: 2021-10-31
最后登錄: 2024-11-12
查看ayusecret的 主題 / 回貼
5樓  發(fā)表于: 2022-06-09 11:54
引用
引用第3樓13821917697于2022-06-09 11:00發(fā)表的  :
Python的不太懂啊,C#最近剛好做了個(gè)這么功能可以跟你說說思路。首先套接字?jǐn)嗑之后是不能沿用原先的連接的,我這里做的方式是重新new了一下。用一個(gè)新的連接。建立一個(gè)bool變量作為標(biāo)志位,初次連接成功之后,標(biāo)志位置反,開始正常工作。如果斷開連接,try里面的正常工作指令會(huì)報(bào)錯(cuò)跳到catch,這里我們把套接字dispose全部釋放,并且標(biāo)志位初始化。然后就又開始重新連接了。就是這樣

感謝提供思路,不過貌似沒給回答到點(diǎn)上,就是三菱用的是還是上個(gè)連接,即使我初始化用新的套接字也無法連上。會(huì)被拒絕。(當(dāng)然PLC參數(shù)上可用設(shè)置超時(shí)斷開)。普通程序奔潰或調(diào)試程序斷開,這種都能正常重連,不過既然你說套接字?jǐn)嗑后無法沿用原來的連接,那我只能在PLC上參數(shù)設(shè)置了。
ayusecret
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 181 個(gè)
工控威望: 259 點(diǎn)
下載積分: 802 分
在線時(shí)間: 72(小時(shí))
注冊(cè)時(shí)間: 2021-10-31
最后登錄: 2024-11-12
查看ayusecret的 主題 / 回貼
6樓  發(fā)表于: 2022-06-09 11:58
引用
引用第4樓我看到你了于2022-06-09 11:14發(fā)表的  :
為什么不直接用三菱的控件,MXcomponent啊還搞啥socket

我知道有控件,還有別人開源的HslCommunication的動(dòng)態(tài)鏈接庫,我只是想自己寫個(gè)玩玩,學(xué)習(xí)一下。不懂就要問
zmrs163
級(jí)別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 373 個(gè)
工控威望: 521 點(diǎn)
下載積分: 1466 分
在線時(shí)間: 324(小時(shí))
注冊(cè)時(shí)間: 2017-06-12
最后登錄: 2024-11-13
查看zmrs163的 主題 / 回貼
7樓  發(fā)表于: 2022-06-09 17:22
看了下你的代碼,close之后要重新connect才能發(fā)送吧
ayusecret
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 181 個(gè)
工控威望: 259 點(diǎn)
下載積分: 802 分
在線時(shí)間: 72(小時(shí))
注冊(cè)時(shí)間: 2021-10-31
最后登錄: 2024-11-12
查看ayusecret的 主題 / 回貼
8樓  發(fā)表于: 2022-06-09 19:26
引用
引用第7樓zmrs163于2022-06-09 17:22發(fā)表的  :
看了下你的代碼,close之后要重新connect才能發(fā)送吧

Close前面已經(jīng)有兩次Send是斷線后發(fā)的,提示遠(yuǎn)程主機(jī)中止連接。但又沒法Connect,因?yàn)槲业奶准忠呀?jīng)Connect了。所以只能初始化重新嘗試連接。
zmrs163
級(jí)別: 家園常客
精華主題: 0
發(fā)帖數(shù)量: 373 個(gè)
工控威望: 521 點(diǎn)
下載積分: 1466 分
在線時(shí)間: 324(小時(shí))
注冊(cè)時(shí)間: 2017-06-12
最后登錄: 2024-11-13
查看zmrs163的 主題 / 回貼
9樓  發(fā)表于: 2022-06-10 13:26
我測(cè)試了下網(wǎng)線拔掉之后PLC很快就關(guān)閉了連接,這個(gè)時(shí)候電腦客戶端重連發(fā)送即可。你程序前兩個(gè)錯(cuò)誤在于PLC關(guān)閉了連接你還嘗試發(fā)送,然后自己關(guān)閉了連接肯定不能發(fā)了,資源都已經(jīng)釋放了。最后一個(gè)錯(cuò)誤需要查看你PLC的程序,如果你PLC也執(zhí)行了CLOSE就連不了了,反之可以繼續(xù)連接。
ayusecret
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 181 個(gè)
工控威望: 259 點(diǎn)
下載積分: 802 分
在線時(shí)間: 72(小時(shí))
注冊(cè)時(shí)間: 2021-10-31
最后登錄: 2024-11-12
查看ayusecret的 主題 / 回貼
10樓  發(fā)表于: 2022-06-10 15:02
引用
引用第9樓zmrs163于2022-06-10 13:26發(fā)表的  :
我測(cè)試了下網(wǎng)線拔掉之后PLC很快就關(guān)閉了連接,這個(gè)時(shí)候電腦客戶端重連發(fā)送即可。你程序前兩個(gè)錯(cuò)誤在于PLC關(guān)閉了連接你還嘗試發(fā)送,然后自己關(guān)閉了連接肯定不能發(fā)了,資源都已經(jīng)釋放了。最后一個(gè)錯(cuò)誤需要查看你PLC的程序,如果你PLC也執(zhí)行了CLOSE就連不了了,反之可以繼續(xù)連接。

不知道你在什么環(huán)境下測(cè)試的,我是用Gxwork3,R04 CPU測(cè)試,測(cè)試環(huán)境默認(rèn)沒有開啟生存定時(shí)器,所以我拔網(wǎng)線,PLC還是不會(huì)關(guān)閉連接的。只有我在參數(shù)上再配置定時(shí)器超時(shí)自動(dòng)關(guān)閉才會(huì)關(guān)閉。
我的配圖從頭到尾,PLC都沒斷之前的連接,錯(cuò)誤都是為了演示整個(gè)過程,我知道錯(cuò)誤的原因,只是當(dāng)時(shí)納悶PLC為啥自己不斷開,后面開了定時(shí)器才正常。沒驗(yàn)證Gxwork2 Q系列PLC的,貌似Gxwork2沒有這個(gè)定時(shí)器配置,難道這就是區(qū)別?
zmrs163
級(jí)別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 373 個(gè)
工控威望: 521 點(diǎn)
下載積分: 1466 分
在線時(shí)間: 324(小時(shí))
注冊(cè)時(shí)間: 2017-06-12
最后登錄: 2024-11-13
查看zmrs163的 主題 / 回貼
11樓  發(fā)表于: 2022-06-10 16:12
我用5U測(cè)試的。5U默認(rèn)有keepalive且無法修改。正常就是不會(huì)斷開的,PLC這么快斷開我才覺得奇怪,在網(wǎng)絡(luò)上服務(wù)器如果沒有心跳無法知道客戶端是否在線,所以大多是一段時(shí)間無數(shù)據(jù)通訊后斷開釋放。
引用
引用第10樓ayusecret于2022-06-10 15:02發(fā)表的  :

不知道你在什么環(huán)境下測(cè)試的,我是用Gxwork3,R04 CPU測(cè)試,測(cè)試環(huán)境默認(rèn)沒有開啟生存定時(shí)器,所以我拔網(wǎng)線,PLC還是不會(huì)關(guān)閉連接的。只有我在參數(shù)上再配置定時(shí)器超時(shí)自動(dòng)關(guān)閉才會(huì)關(guān)閉。
我的配圖從頭到尾,PLC都沒斷之前的連接,錯(cuò)誤都是為了演示整個(gè)過程,我知道錯(cuò)誤的原因,只是當(dāng)時(shí)納悶PLC為啥自己不斷開,后面開了定時(shí)器才正常。沒驗(yàn)證Gxwork2 Q系列PLC的,貌似Gxwork2沒有這個(gè)定時(shí)器配置,難道這就是區(qū)別?