2017-08-15 228 views
1

我正在使用freeOpcua來編寫一個簡單的客戶端示例。我首先在我的筆記本電腦上測試了它,運行它的服務器代碼,然後在raspberry pi3中運行linux中的客戶端代碼。所以我能夠連接到服務器。FreeOPCUA python客戶端示例

現在我有一臺運行B & R Server的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()所以就ok了,並沒有給出任何錯誤的。然後我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()或任何其他它給了我上面的錯誤。

+0

是否還有更多的錯誤信息可用?你能顯示服務器返回的端點嗎? –

+0

@KevinHerron請看編輯 –

+0

那些獲得節點方法並不需要你連接,他們只是建立NodeIds。你有錯誤的IP /端口或服務器沒有運行或允許連接。拒絕連接是連接被拒絕。 –

回答

1

我有這個相同的問題。我發現Hello消息是將MaxMessageSizeMaxChunkCount設置爲0.我更改了freeopcua代碼,以便它設置爲UaExpert所使用的相同值,並且它工作正常。

所以在freeopcua代碼,在freeopcua/ua/uaprotocol_hand.py,我改變了Hello類的初始化

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()是以前我做了這個變化的工作,所以你可能有不同的概率LEM。在這個改變之前,我的create_sessions()和get_endpoints()總是失敗。

+0

太好了。謝謝。你從linux或windows使用uaexpert。哪個版本的Windows 10,8,7? –

+0

我正在使用Windows 7 – joeb