2016-11-11 113 views
0

通過Python腳本「輔助」的方式,在RS485總線上有1(一)個RS485千瓦時表,DDS238-1ZN類型的讀數,由模塊minimalmodbus。 增加更多的千瓦時電錶意味着(在安裝之前或安裝期間)增加的電度表的從地址必須從最初的'1'移位。 這種移位動作從掃描RS485總線開始,以確定千瓦時電錶的實際位置。使用RS485和minimalmodbus處理Python腳本的超時

第一步是以下簡單的Python腳本

import serial 
import minimalmodbus 
# Check address 00 = broadcast 
instrument = minimalmodbus.Instrument('/dev/ttyAMA0',0) # port name, slave address 
instrument.serial.baudrate = 9600 
instrument.serial.timeout = 0.5 
instrument.debug = True 
print instrument 
print instrument.read_register(21,0) # registernumber, number of decimals 
# Check address 01 = slave 01 
instrument = minimalmodbus.Instrument('/dev/ttyAMA0',1) # port name, slave address 
print instrument 
print instrument.read_register(21,0) # registernumber, number of decimals 
# Check address 02 = slave02 
instrument = minimalmodbus.Instrument('/dev/ttyAMA0',2) # port name, slave address 
print instrument 
print instrument.read_register(21,0) # registernumber, number of decimals 

上從機地址的檢查00和01產生如預期的結果(257),但(由於不存在的裝置的)明顯響應上從站地址02失效,超時。

爲了進一步解決問題的描述,參見http://www.domoticz.com/forum/viewtopic.php?f=31&t=13592#p102901

從測試運行,我可以看到,一個超時發生。 一個超時信號可能會被觸發來逐步檢查下一個從地址,if我知道這種超時模式的Python腳本超時信號的佈局......

在互聯網尋找替代方案,我看到各種'精彩的&精心製作的'解決方案來捕捉暫停,但從我的簡單腳本的角度來看,我正在尋找一些非常基本的東西(最好是'一班')使能超時檢查下一個從地址3等。

看看上面提到的那些解決方案,也許下面的設置與半碼是一個簡單/基本解決方案? [將我一直在尋找在C-功能的fread的方向()]

start of loop 
start time-counter 
read register from slave address x 
N = number of characters received 
if time-counter at value t, then 
    look if N > 0 
if N == 0 then 
    x = x + 1 
    jump to start of loop 

任何暗示使用Python或MinimalModbus執行半代碼,與所述第一腳本兼容腳本?

+0

Pymodbus似乎已經pymodbus.constants.Defaults和pymodbus.constants.ModbusStatus設施來處理奴隸的超時和狀態,但是這需要一個完全不同的腳本 任何暗示/與pymodbus這樣的腳本例子嗎? – Toulon7559

回答