FreeOPCUA python 客户端示例
FreeOPCUA python client example
我正在使用 freeOpcua 编写一个简单的客户端示例。我首先在我的笔记本电脑上通过 运行 它的服务器代码测试了它,然后 运行 来自树莓派 pi3 中 linux 的客户端代码。所以我能够连接到服务器。
现在我有一个PLC,它是运行贝加莱服务器。我需要连接到该服务器并获取属性值,但我每次尝试连接时都显示 connection refused error
。服务器 运行 正常,因为我已经在 windows 上使用客户端软件对其进行了测试,但未在 linux 中连接。我正在使用 freeopcua 客户端示例连接到服务器。
我是否需要启用我尝试通信的端口?
有没有人有这方面的经验。请帮忙。谢谢。
编辑:
IP 地址为 192.168.1.21,端口号为 135。我正在执行如下操作:
client = Client("opc.tcp://192.168.1.21:135/")
client.connect()
#This gives error of connection refused.
我打开了client.connect(),发现它有以下功能:
connect_socket()
send_hello()
open_secure_channel()
create_session()
activate_session()
所以我没有做 client.connect()
我做了 client.connect_socket()
所以一切正常,没有给出任何错误。然后我 print(client.get_root_node())
它显示 Node(TwoByteNodeId(i=84))
和 print(client.get_server_node())
它显示 Node(FourByteNodeId(i=2253))
。这些值是什么。我可以认为我可以通过 client.connect_socket()
连接到服务器。
当我尝试使用 client.get_endpoints()
获取端点时,出现以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "opcua/client/client.py", line 299, in get_endpoints
return self.uaclient.get_endpoints(params)
File "opcua/client/ua_client.py", line 323, in get_endpoints
data = self._uasocket.send_request(request)
File "opcua/client/ua_client.py", line 76, in send_request
data = future.result(self.timeout)
File "/usr/local/lib/python2.7/dist-packages/concurrent/futures/_base.py",
line 431, in result
raise TimeoutError()
concurrent.futures._base.TimeoutError
此外,当我尝试执行 open_secure_channel()
或 create_session()
或任何其他操作时,它给了我上述错误。
我遇到了同样的问题。我发现 Hello 消息将 MaxMessageSize
和 MaxChunkCount
设置为 0。我更改了 freeopcua
代码,使其设置为 UaExpert
使用的相同值,并且成功了。
所以在 freeopcua
代码中,在 freeopcua/ua/uaprotocol_hand.py
中,我更改了 Hello class:
的 init
class Hello(uatypes.FrozenClass):
def __init__(self):
self.ProtocolVersion = 0
self.ReceiveBufferSize = 65536
self.SendBufferSize = 65536
self.MaxMessageSize = 16777216
self.MaxChunkCount = 5000
self.EndpointUrl = ""
self._freeze = True
如果您不知道如何编辑 python 包,我的位于此处:C:\Users\username\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\opcua\ua
基本上你的python_directory\Lib\site-packages\opcua\ua
编辑:我的 open_secure_channel() 在我进行此更改之前正在运行,因此您可能遇到不同的问题。在此更改之前,我的 create_sessions() 和 get_endpoints() 总是会失败。
我正在使用 freeOpcua 编写一个简单的客户端示例。我首先在我的笔记本电脑上通过 运行 它的服务器代码测试了它,然后 运行 来自树莓派 pi3 中 linux 的客户端代码。所以我能够连接到服务器。
现在我有一个PLC,它是运行贝加莱服务器。我需要连接到该服务器并获取属性值,但我每次尝试连接时都显示 connection refused error
。服务器 运行 正常,因为我已经在 windows 上使用客户端软件对其进行了测试,但未在 linux 中连接。我正在使用 freeopcua 客户端示例连接到服务器。
我是否需要启用我尝试通信的端口?
有没有人有这方面的经验。请帮忙。谢谢。
编辑:
IP 地址为 192.168.1.21,端口号为 135。我正在执行如下操作:
client = Client("opc.tcp://192.168.1.21:135/")
client.connect()
#This gives error of connection refused.
我打开了client.connect(),发现它有以下功能:
connect_socket()
send_hello()
open_secure_channel()
create_session()
activate_session()
所以我没有做 client.connect()
我做了 client.connect_socket()
所以一切正常,没有给出任何错误。然后我 print(client.get_root_node())
它显示 Node(TwoByteNodeId(i=84))
和 print(client.get_server_node())
它显示 Node(FourByteNodeId(i=2253))
。这些值是什么。我可以认为我可以通过 client.connect_socket()
连接到服务器。
当我尝试使用 client.get_endpoints()
获取端点时,出现以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "opcua/client/client.py", line 299, in get_endpoints
return self.uaclient.get_endpoints(params)
File "opcua/client/ua_client.py", line 323, in get_endpoints
data = self._uasocket.send_request(request)
File "opcua/client/ua_client.py", line 76, in send_request
data = future.result(self.timeout)
File "/usr/local/lib/python2.7/dist-packages/concurrent/futures/_base.py",
line 431, in result
raise TimeoutError()
concurrent.futures._base.TimeoutError
此外,当我尝试执行 open_secure_channel()
或 create_session()
或任何其他操作时,它给了我上述错误。
我遇到了同样的问题。我发现 Hello 消息将 MaxMessageSize
和 MaxChunkCount
设置为 0。我更改了 freeopcua
代码,使其设置为 UaExpert
使用的相同值,并且成功了。
所以在 freeopcua
代码中,在 freeopcua/ua/uaprotocol_hand.py
中,我更改了 Hello class:
class Hello(uatypes.FrozenClass):
def __init__(self):
self.ProtocolVersion = 0
self.ReceiveBufferSize = 65536
self.SendBufferSize = 65536
self.MaxMessageSize = 16777216
self.MaxChunkCount = 5000
self.EndpointUrl = ""
self._freeze = True
如果您不知道如何编辑 python 包,我的位于此处:C:\Users\username\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\opcua\ua
基本上你的python_directory\Lib\site-packages\opcua\ua
编辑:我的 open_secure_channel() 在我进行此更改之前正在运行,因此您可能遇到不同的问题。在此更改之前,我的 create_sessions() 和 get_endpoints() 总是会失败。