2015-07-24 3 views
0

Я работал с простой программой, используя библиотеку pymodbus в python. Это пример программы, которую я нашел в документации библиотеки. Код выглядит следующим образомPymodbus - Простая программа

from pymodbus.client.sync import ModbusTcpClient 

client = ModbusTcpClient('192.168.10.3') 
client.write_coil(410001, False) 
result = client.read_coils(410001,1,unit=1) 
print result.bits[0] 
client.close() 

Я получаю ошибку

Traceback (most recent call last): 
    File "start_2407.py", line 4, in <module> 
    client.write_coil(410001, False) 
    File "build\bdist.win-amd64\egg\pymodbus\client\common.py", line 61, in write_coil 
    File "build\bdist.win-amd64\egg\pymodbus\client\sync.py", line 131, in execute 
    File "build\bdist.win-amd64\egg\pymodbus\client\sync.py", line 46, in execute 
    File "build\bdist.win-amd64\egg\pymodbus\transaction.py", line 243, in buildPacket 
    File "build\bdist.win-amd64\egg\pymodbus\bit_write_message.py", line 58, in encode 
struct.error: 'H' format requires 0 <= number <= 65535 

необходимо предоставить место адреса в шестнадцатеричном Do? Я тоже пробовал это, но результат не соответствует тому, что я получаю от Modscan2.

+0

Вы отслеживаете, что вы пытаетесь написать адрес 410001 вместо 10001. Это опечатка? – Vincent

+0

да простите, я пытаюсь написать 410001 – apoorvasomani

ответ

1

Переменные Modbus адресуются в диапазоне 0-65535. Вы можете иметь до 65536 катушек, дискретных входов, входных регистров и регистров хранения. Вы не можете использовать 410001 в качестве входа в PyModbus. 410001 - очень обычный (не стандартный) способ представления 10000-го регистра регистрации. Да, это странно. Поставщики Modbus очень креативны, когда придумывают карты памяти.

Вы можете прочитать этот регистр, используя метод read_holding_registers с адресом = 10000.

1

410001 больше, чем 65535.

.write_coil() ожидает номер <= 65535.

Вам придется изменить 410001 на другое значение, чтобы оно работало.

Шестнадцатеричный или нет, это не имеет значения.

+0

Modscan2 показывает 410001 память для хранения регистр имеет 1022 значение. Как мне получить доступ к этому значению? – apoorvasomani

Смежные вопросы