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 消息将 MaxMessageSizeMaxChunkCount 设置为 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() 总是会失败。