Я работаю над проектом, в котором я использую Pymodbus для подключения к системе промышленных вентиляторов. Я могу прочитать некоторые адреса на этом вентиляторе, но не другие. В буклете с инструкциями к вентилятору, с которым я работаю, адреса распределяются по группам параметров следующим образом:
Grouping | Description |
---|---|
Group 00 | Basic parameters |
Group 01 | V/F pattern selections and setup |
Group 02 | Motor parameters |
Group 03 | Multi function digital Inputs/Outputs |
... | |
Group 15 | PLC monitoring function |
Для каждой группы (1-15) выше есть более конкретные адреса, указанные на последующих страницах руководства. Например, для группы 00 выше есть записи адреса, указанные ниже:
Group-address | Description | Range |
---|---|---|
00-00 | Control Mode Selection | 0: V/F Mode, 1: Vector mode |
00-02 | Main run command. | 0: Keypad, 1:Communication, 2: PLC |
... | ||
00-20. | Jog deceleration time. | ~0.1-3600.0 |
Я могу получить доступ и распечатать вышеуказанные адреса (в случае группировки «00») с помощью следующего скрипта Python:
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
modbus_conn = ModbusClient(method='rtu', port="/dev/tty.usbserial-AQ00BYCR",baudrate=38400,parity = 'O')
modbus_conn.connect()
print(modbus_conn.read_holding_registers(0,20,unit=1).registers[0])
Проблема, однако, в том, что я не могу получить доступ к более высоким группам ('01' -> '15'). Например, если я попытаюсь получить доступ к любому адресу выше 20 с помощью приведенного выше сценария, я получу ошибку «Нет регистров». Я предполагаю, что это потому, что я заперт в выборке первой группы ('00') с моим скриптом.
Я исследовал идею о том, что группы определяют разные начальные точки адресов, поэтому я проверил, означает ли, например, «01» адрес, начинающийся с позиции «100», как показано ниже:
modbus_conn.read_holding_registers(100,5,unit=1).registers[0]
но это оказалось не сработает (поскольку я снова получил ошибки «регистр не существует»).
Что я делаю не так?
Что мне не хватает?
Кто-нибудь знает, как получить доступ к адресам, сгруппированным вышеописанным образом? Я такое впервые вижу, и я в тупике.
Заранее спасибо!
0100H
(в отличие от десятичного числа 100); так что попробуйтеmodbus_conn.read_holding_registers(0x100,1,unit=1).registers[0]
. - person Brits   schedule 23.01.2021