2016-11-08 198 views
1

我想通過Modbus RTU半雙工RS-485連接從我的Windows機器(Windows 10)與自定義板通信。我正在使用python MinimalModbus API並安裝了所有依賴庫。我也有適當的RS-422/485適配器。我知道波特率,COM端口,從機地址和校驗位都是正確的。我也知道我的代碼是從一個O範圍跟蹤輸出一個比特流。出於某種原因,董事會根本不會迴應。任何幫助將非常感激。MinimalModbus IO錯誤

import minimalmodbus 
import serial 

#minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL = True 
minimalmodbus.PARITY = serial.PARITY_EVEN 
#minimalmodbus.handle_local_echo=True 
minimalmodbus.BAUDRATE = 57600 
minimalmodbus.TIMEOUT = .01 
instrument = minimalmodbus.Instrument('COM4',0) 
instrument.debug = True 
print(instrument.read_register(11,1)) 

MinimalModbus debug mode. Writing to instrument (expecting 7 bytes back): '\x00\x03\x00\x0b\x00\x01ô\x19' (00 03 00 0B 00 01 F4 19) 
MinimalModbus debug mode. No sleep required before write. Time since previous read: 1478637162864.7 ms, minimum silent period: 0.67 ms. 
MinimalModbus debug mode. Response from instrument: ''() (0 bytes), roundtrip time: 10.9 ms. Timeout setting: 10.0 ms. 

Traceback (most recent call last): 
    File "RS485.py", line 11, in <module> 
    print(instrument.read_register(11,1)) 
    File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 258, in read_register 
    return self._genericCommand(functioncode, registeraddress, numberOfDecimals=numberOfDecimals, signed=signed) 
    File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 697, in _genericCommand 
    payloadFromSlave = self._performCommand(functioncode, payloadToSlave) 
    File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 795, in _performCommand 
    response = self._communicate(request, number_of_bytes_to_read) 
    File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 930, in _communicate 
    raise IOError('No communication with the instrument (no answer)') 
OSError: No communication with the instrument (no answer) 
+0

由於電路板沒有響應並且您的代碼發送數據(您是否非常喜歡這種格式?),因此調試目標設備而不是PC可能是個好主意。 – Olaf

+0

我正在檢查我的o-scope上的比特流。我知道目標設備需要爲每個PDU增加一個停止開始和奇偶校驗位,但我無法準確計算出比特流的外觀。轉換器的延遲可能會改變波特率嗎? – CompMan

+0

你知道所有的modbus設備是否都需要這些精確的附加位?還是他們是特定於此董事會?另外,當你說調試目標設備時,你的意思是軟件嗎?像使用GDB一樣通過固件,因爲我試圖與它溝通? – CompMan

回答

0
問題

位於行:

instrument = minimalmodbus.Instrument('COM4',0) 

是在指示minimalmodbus達到用於儀表具有MODBUS ID等於零。這是一個無效的ID。

檢查儀器的設置並更正代碼中的ID。

0

嘗試設置從站ID爲 instrument = minimalmodbus.Instrument('COM4',1),其中1是您的自定義儀器的從站ID。

並嘗試增加超時參數與此行

minimalmodbus.TIMEOUT = 1,其中1等於1000毫秒。