Python opcua 模块取消错误
Python opcua module CancelledError
我目前正在尝试连接到 OPC UA 服务器,该服务器在我的本地设备上设置为测试环境。服务器不是我架设的,没有在python实现(想想可能是json)。
我想使用以下代码连接到它:
from opcua import Client
from opcua import ua
url = 'https://{MyPCsName}:8443/opcua'
client = Client(url)
client.connect()
但是出现错误:
---------------------------------------------------------------------------
CancelledError Traceback (most recent call last)
<ipython-input-18-b87841b743a5> in <module>
5
6 client = Client(url)
----> 7 client.connect()
~\anaconda3\lib\site-packages\opcua\client\client.py in connect(self)
272 self.connect_socket()
273 try:
--> 274 self.send_hello()
275 self.open_secure_channel()
276 try:
~\anaconda3\lib\site-packages\opcua\client\client.py in send_hello(self)
314 Send OPC-UA hello to server
315 """
--> 316 ack = self.uaclient.send_hello(self.server_url.geturl(), self.max_messagesize, self.max_chunkcount)
317
318 # TODO: Handle ua.UaError
~\anaconda3\lib\site-packages\opcua\client\ua_client.py in send_hello(self, url, max_messagesize, max_chunkcount)
270
271 def send_hello(self, url, max_messagesize=0, max_chunkcount=0):
--> 272 return self._uasocket.send_hello(url, max_messagesize, max_chunkcount)
273
274 def open_secure_channel(self, params):
~\anaconda3\lib\site-packages\opcua\client\ua_client.py in send_hello(self, url, max_messagesize, max_chunkcount)
188 binmsg = uatcp_to_binary(ua.MessageType.Hello, hello)
189 self._socket.write(binmsg)
--> 190 ack = future.result(self.timeout)
191 return ack
192
~\anaconda3\lib\concurrent\futures\_base.py in result(self, timeout)
435
436 if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]:
--> 437 raise CancelledError()
438 elif self._state == FINISHED:
439 return self.__get_result()
CancelledError:
我略读了 Git 存储库 https://github.com/FreeOpcUa/python-opcua and the "documentation" https://python-opcua.readthedocs.io/en/latest/index.html(据我了解,这或多或少是源代码的副本......) ,但我找不到解决发生的错误的方法。
从服务器端来看,应该没问题,因为我可以在 'https://{MyPCsName}:8443/opcua'
下访问服务器,在 UaExpert 上没问题。
真心希望得到您的帮助。
从错误看来,Python 客户端正在尝试使用 UA 二进制 TCP 传输进行连接,但您已获得一个 HTTPS 端点 URL。
也许您需要使用不同的端点 URL 来连接到此服务器?如果使用默认端口,可能是 opc.tcp://{PCName}:4840/opcua
。
我目前正在尝试连接到 OPC UA 服务器,该服务器在我的本地设备上设置为测试环境。服务器不是我架设的,没有在python实现(想想可能是json)。 我想使用以下代码连接到它:
from opcua import Client
from opcua import ua
url = 'https://{MyPCsName}:8443/opcua'
client = Client(url)
client.connect()
但是出现错误:
---------------------------------------------------------------------------
CancelledError Traceback (most recent call last)
<ipython-input-18-b87841b743a5> in <module>
5
6 client = Client(url)
----> 7 client.connect()
~\anaconda3\lib\site-packages\opcua\client\client.py in connect(self)
272 self.connect_socket()
273 try:
--> 274 self.send_hello()
275 self.open_secure_channel()
276 try:
~\anaconda3\lib\site-packages\opcua\client\client.py in send_hello(self)
314 Send OPC-UA hello to server
315 """
--> 316 ack = self.uaclient.send_hello(self.server_url.geturl(), self.max_messagesize, self.max_chunkcount)
317
318 # TODO: Handle ua.UaError
~\anaconda3\lib\site-packages\opcua\client\ua_client.py in send_hello(self, url, max_messagesize, max_chunkcount)
270
271 def send_hello(self, url, max_messagesize=0, max_chunkcount=0):
--> 272 return self._uasocket.send_hello(url, max_messagesize, max_chunkcount)
273
274 def open_secure_channel(self, params):
~\anaconda3\lib\site-packages\opcua\client\ua_client.py in send_hello(self, url, max_messagesize, max_chunkcount)
188 binmsg = uatcp_to_binary(ua.MessageType.Hello, hello)
189 self._socket.write(binmsg)
--> 190 ack = future.result(self.timeout)
191 return ack
192
~\anaconda3\lib\concurrent\futures\_base.py in result(self, timeout)
435
436 if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]:
--> 437 raise CancelledError()
438 elif self._state == FINISHED:
439 return self.__get_result()
CancelledError:
我略读了 Git 存储库 https://github.com/FreeOpcUa/python-opcua and the "documentation" https://python-opcua.readthedocs.io/en/latest/index.html(据我了解,这或多或少是源代码的副本......) ,但我找不到解决发生的错误的方法。
从服务器端来看,应该没问题,因为我可以在 'https://{MyPCsName}:8443/opcua'
下访问服务器,在 UaExpert 上没问题。
真心希望得到您的帮助。
从错误看来,Python 客户端正在尝试使用 UA 二进制 TCP 传输进行连接,但您已获得一个 HTTPS 端点 URL。
也许您需要使用不同的端点 URL 来连接到此服务器?如果使用默认端口,可能是 opc.tcp://{PCName}:4840/opcua
。