FreeOPCUA python客户端示例

时间:2017-08-15 06:30:59

标签: python linux opc-ua

我正在使用freeOpcua编写一个简单的客户端示例。我首先在我的笔记本电脑上测试它,运行它的服务器代码,然后在raspberry pi3中运行linux中的客户端代码。所以我能够连接到服务器。

现在我有一台运行B& R服务器的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()$sql1 = oci_parse($conn,"SELECT COUNT(*) FROM formC where UPPER(approvedBy) = '$approvedBy'"); oci_execute($sql1); $count = oci_fetch_all($sql1,$abc); $a=$count/6; 或其他任何错误时,我发现错误。

1 个答案:

答案 0 :(得分:1)

我有同样的问题。我发现Hello消息将MaxMessageSizeMaxChunkCount设置为0.我更改了freeopcua代码,使其设置为UaExpert使用的相同值,并且它奏效了。

所以在freeopcua代码的freeopcua/ua/uaprotocol_hand.py中,我更改了Hello类的 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()将始终失败。