2016-08-17 194 views
1

我想使用Raspberry Pi 3模型B從Allen Bradly PLC讀取值。我使用Pymodbus Modbus TCP協議在它們之間進行通信。Pymodbus無法連接PLC從站和樹莓派主站

當我運行一個測試客戶端,我得到了以下錯誤:

[email protected]:/var $ python test1.py 
Got here 1 
Traceback (most recent call last): 
File "test1.py", line 12, in <module> 
request = client.read_holding_registers(0,1) 
File "build/bdist.linux-armv7l/egg/pymodbus/client/common.py", line 109, in read_holding_registers 
File "build/bdist.linux-armv7l/egg/pymodbus/client/sync.py", line 82, in execute 
pymodbus.exceptions.ConnectionException: Modbus Error: [Connection] Failed to connect[10.0.0.237:502] 

下面是測試客戶端代碼:

from pymodbus.client.sync import ModbusTcpClient 

#modbus connection 
client = ModbusTcpClient(host='10.0.0.237') 
connection = client.connect() 

#test print 
print "Got here 1" 

#read register 
request = client.read_holding_registers(0,1) 

print request 

client.close() 

我可以ping PLC的網卡的IP地址(10.0.0.237)就好了。 (PLC的是和在RSLinx和RSLogix5000中顯示出來。)但是,當我嘗試用命令來檢查端口502(它的Modbus使用):

telnet 10.0.0.237 502 

我得到的錯誤:

Trying 10.0.0.237... 
telnet: Unable to connect to remote host: Connection refused 

我所做的研究告訴我要檢查該端口是否打開,但這是針對PC的,我不知道如何檢查/配置PLC上的端口。

此外,我想知道是否問題是我試圖只使用Modbus來Raspbery Pi和PLC之間。我找到了可以實現接口的優秀網關。但我找不到任何有關這些是否只是另一種選擇的信息,或者是否需要這些信息。

我是新來的PLC和網絡,所以任何幫助,將不勝感激。

回答

0

我自己並沒有使用過艾倫布拉德利,但我確實使用了許多其他的PLC,並且他們的工作都差不多。

您不像打開路由器那樣打開端口,而是激活PLC中的modbus連接。通常情況下它是一個設置,但如果Allen Bradley使用他們自己的專用總線系統(例如Saia S-Bus),則有時需要特定的功能塊來啓用modbus。

一個快速谷歌搜索示例顯示,在micrologix 1400 theres複選框啓用modbus tcp在某些通道設置下。

檢查PLC是否有設置啓用Modbus主站/客戶端(主站=串行或RTU,客戶端= TCP,但有時製造商不區分它們)。

要測試Raspberry Pi,你可以下載一個modbus服務器模擬器並進行輪詢。

要使用其他東西測試PLC,您可以下載一個modbus客戶端/主站。我個人使用QmodMaster,它是免費的,可以很好地用於測試目的(搜索谷歌)。

此外,請確保您使用正確的功能代碼輪詢。這可能會引起混淆,因爲保持寄存器(地址爲4xxxx)使用功能代碼03.輸入寄存器(地址爲3xxxx)使用功能代碼04.

modbus網關用於啓用串行modbus(RTU或ASCII)通過TCP進行通信。

如果兩個設備都有modbus tcp,則不需要網關。例如,如果您的設備只具有有線modbus(RS232/485/422),則可以將其連接到網關,並將網關連接到TCP。