Modbus响应,minimalmodbus

时间:2014-11-06 13:09:44

标签: python modbus

我使用minimalmodbus来获取设备的状态,但似乎设备给了我一个字节太多,第一个字节总是x00,因此我没有解析最后一个字节。还注意到该设备最终还给了我x00,但之后在寡妇身上使用了CAS。

$ ./rstest.py 
minimalmodbus.Instrument<id=0xb6c844e0, address=4, mode=rtu, close_port_after_each_call=True, precalculate_read_size=True, debug=True, serial=Serial<id=0xb6c861d0, open=False>(port='/dev/ttyUSB0', baudrate=19200, bytesize=8, parity='N', stopbits=2, timeout=0.1, xonxoff=False, rtscts=False, dsrdtr=False)>

MinimalModbus debug mode. Writing to instrument (expecting 6 bytes back): '\x04\x01\x00\x00\x00\x01\xfd\x9f'
MinimalModbus debug mode. No sleep required before write. Time since previous read: 1415278843825.3 ms, minimum silent period: 2.01 ms.
MinimalModbus debug mode. Response from instrument: '\x00\x04\x01\x01\x01\x90' (6 bytes), roundtrip time: 15.6 ms. Timeout setting: 100.0 ms.

如您所见,\x00\x04\x01\x01\x01\x90应为x04\x01\x01\x01\x90\x84

无论如何要剥离并丢弃第一个字节?

编辑:请求的代码

#!/usr/bin/env python

import minimalmodbus
import sys
minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL = True
minimalmodbus.STOPBITS = 2

instr = minimalmodbus.Instrument('/dev/ttyUSB0', 04) #port, slaveadress

#instr.serial.echo = False
instr.serial.timeout = 0.1
instr.precalculate_read_size = True
instr.debug = True
instr.serial.baudrate = 19200
print instr
i = 0
c = 0
while i < 1:
    try:
        #temp = instr.read_register(2, 1, 4, signed=False)
        temp = instr.read_bit(0, functioncode=1)
        print 'OK!'
        print temp
        i = 100
    except ValueError:
        c = c + 1
        print 'Error number'
        print c 
        i = 1
    except IOError:
        c = c + 1
        print 'Error number'
        print c
        i = 1

0 个答案:

没有答案