我正在使用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;
或其他任何错误时,我发现错误。
答案 0 :(得分:1)
我有同样的问题。我发现Hello消息将MaxMessageSize
和MaxChunkCount
设置为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()将始终失败。