2015-12-10 2 views
0

Im новой для питона Modbus и теперь у меня есть некоторые вопросы по поводу моих первых шаговпитон pymodbus Считывание регистров

Сценарий:

from pymodbus.client.sync import ModbusTcpClient 

host = '10.8.3.10' 
port = 502 

client = ModbusTcpClient(host, port) 
client.connect() 

#Register address 0x102A (4138dec) with a word count of 1 
#Value - MODBUS/TCP Connections 
#Access - Read 
#Description - Number of TCP connections 

request = client.read_holding_registers(0x3E8,10,unit=0) 
response = client.execute(request) 

print response 
#print response.registers 
print response.getRegister(12) 
print response.registers[8] 
client.close() 

Результат:

============= RESTART: D:\Users\mxbruckn\Desktop\read_modbus.py ============= 
ReadRegisterResponse (38) 
0 
0 
>>> 

теперь вопросы :

  1. Я прочитал из Регистрации 1000, 10 слов, с ведомым номером 0. это правильно, но что означает значение 38

  2. Как я могу прочитать 2 слова из регистра 1007? мой код не работает: (0x3EF, 2, единица = 0) Исключительный ответ (131, 3, IllegalValue)

Ciao, Doc

+0

обычно вы получаете IllegalValue ошибки, когда вы пытаетесь получить доступ к недопустимому адресу регистра или смещений, увидеть, если у вас действительно есть регистры на 0x3EF, 0x3f0 и 0x3F1, а также 38 в ReadRegisterResponse это длина регистров, возвращаемых с вашего запроса. – Sanju

ответ

1

первый я думаю, у вас есть какая-то ошибка в коде. С pymodbus 1.2.0 код должен выглядеть следующим образом:

from pymodbus.client.sync import ModbusTcpClient 

host = 'localhost' 
port = 502 

client = ModbusTcpClient(host, port) 
client.connect() 

rr = client.read_holding_registers(0x3E8,10,unit=0) 
assert(rr.function_code < 0x80)  # test that we are not an error 
print rr 
print rr.registers 


# read 2 registers starting with address 1007 
rr = client.read_holding_registers(0x3EF,2,unit=0) 
assert(rr.function_code < 0x80)  # test that we are not an error 
print rr 
print rr.registers 

А вот выход (пожалуйста, укажите, что я инстанцирован к хранилищу на modbusserver с 17):

ReadRegisterResponse (10) 
[17, 17, 17, 17, 17, 17, 17, 17, 17, 17] 
ReadRegisterResponse (2) 
[17, 17] 

Теперь ваш вопросы:

  1. Значение показывает количество регистров, которые вы читаете с сервера.
  2. См. Код выше.

Надежда, что помогает, Wewa