python opc ua client 如何自动连接,不超时断线,不报警退出。

shijiandeguanli 2019-09-23 07:44:21
大家好,
我用Python 设计一个opc ua client ,
如下程序代码1所示,
但,运行的过程中,如果OPC UA 服务器没启动,程序会发生如下的“报错信息1”
如果OPC UA服务器中途停止,程序会发生如下的“报错信息2”超时报错。

我想达到的效果是: 这个代码在运行的时候,当OPC UA服务器没启动是,在等待链接。当OPC UA停止时,也是在等待链接。不要报错。






#程序代码1
import time
from opcua import Client
from opcua import ua

client = Client("opc.tcp://WIN-G9KK36SKPQC:37800")
client.connect()


while True:
#读取变量节点
ret = client.get_node("ns=1;s=T1")
ret2 = client.get_node("ns=1;s=D2")
print(ret.get_value())
print(ret2.get_value())
time.sleep(1)

client.disconnect()


报错信息1:
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\新建文件夹\OPC测试\结合\NewTryTest 变量节点.py", line 11, in <module>
client.connect()
File "D:\Program Files\Python3.6.3\lib\site-packages\opcua\client\client.py", line 255, in connect
self.connect_socket()
File "D:\Program Files\Python3.6.3\lib\site-packages\opcua\client\client.py", line 280, in connect_socket
self.uaclient.connect_socket(self.server_url.hostname, self.server_url.port)
File "D:\Program Files\Python3.6.3\lib\site-packages\opcua\client\ua_client.py", line 245, in connect_socket
return self._uasocket.connect_socket(host, port)
File "D:\Program Files\Python3.6.3\lib\site-packages\opcua\client\ua_client.py", line 142, in connect_socket
sock = socket.create_connection((host, port), timeout=self.timeout)
File "D:\Program Files\Python3.6.3\lib\socket.py", line 724, in create_connection
raise err
File "D:\Program Files\Python3.6.3\lib\socket.py", line 713, in create_connection
sock.connect(sa)
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。


报错信息2:
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\新建文件夹\OPC测试\结合\NewTryTest 变量节点.py", line 18, in <module>
print(ret.get_value())
File "D:\Program Files\Python3.6.3\lib\site-packages\opcua\common\node.py", line 153, in get_value
result = self.get_data_value()
File "D:\Program Files\Python3.6.3\lib\site-packages\opcua\common\node.py", line 162, in get_data_value
return self.get_attribute(ua.AttributeIds.Value)
File "D:\Program Files\Python3.6.3\lib\site-packages\opcua\common\node.py", line 273, in get_attribute
result = self.server.read(params)
File "D:\Program Files\Python3.6.3\lib\site-packages\opcua\client\ua_client.py", line 326, in read
data = self._uasocket.send_request(request)
File "D:\Program Files\Python3.6.3\lib\site-packages\opcua\client\ua_client.py", line 78, in send_request
data = future.result(self.timeout)
File "D:\Program Files\Python3.6.3\lib\concurrent\futures\_base.py", line 434, in result
raise TimeoutError()
concurrent.futures._base.TimeoutError
...全文
1478 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
神秘奢华 2020-12-10
  • 打赏
  • 举报
回复
你这种情况可以写一个递归,try 。。。 except 调用自身。我还遇到一种订阅的时候报错,但是连接和订阅在两个线程。报错try不到就很烦
27-_- 2019-11-18
  • 打赏
  • 举报
回复
楼主,我也有这个疑问,请问您把这个问题解决了吗

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧