Modbus — протокол, работающий по принципу «клиент-сервер».
Широко применяется в промышленности.
Modbus может использоваться для передачи данных через последовательные линии связи
RS-485, RS-422, RS-232, а также сети TCP/IP.
Отправка запроса осуществляется по команде:
Запрос:
Ответ:
[ID] - Адрес ведомого устройства. Диапазон 1 до 247;
[КОМАНДА] - команда чтения/записи;
[АДРЕС ДАННЫХ] - адреса регистра для чтения;
[КОЛИЧЕСТВО] - чило выходных регистров;
[CRC] - контрольная сумма.
Подробнее по ссылке.
Работа с библиотекой
Скачать библиотеку:
https://github.com/rpopov94/PyModbus.git
Технические требования
- Библиотека задумана кроссплатформенной
python==3.8
Установка зависимостей:
pip install serial
Осуществление запроса
- Подключиться к com - порту;
connect_to_port(name, baudrate=None, bytesize=None, parity=None, stopbits=None, timeout=1)
name - имя порта;
baudrate - скорость обмена данными;
bytesize - длина слова данных
parity - паритет;
stopbits - Количетсво стоп бит; timeout - задержка ответа (сек); - Команда:
Осуществление запроса осуществляется с помощью функции:
fn_sendcmd(id, cmd, register_number, number_of_regs, *args)
- id -базовый адрес устройства;
- cmd - команда чтения/записи;
- register_number - номер регистра для наблючения;
- number_of_regs - число регистров на вывод;
- *args - дополнительные параметры.
Если запрос будет корретным, от утсройство вернёт ответ
Реализованы также более высокоуровневые функции, обеспечивающие доступ к данным из устройств:
Группа функции для чтения:
read_group_Discrete_Inputs(id, register_number, number_of_regs=1)
read_group_Coils(id, register_number, number_of_regs=1)
read_group_Input_Registers(id, register_number, number_of_regs=1)
read_group_Holding_Registers(id, register_number, number_of_regs=1)
Группа функции для записи:
write_group_Coils(id, register_number, number_of_regs=1, *args)
write_single_Holding_Register(id, register_number, number_of_regs=1, *args)
write_group_Holding_Registers(id, register_number, number_of_regs=1, *args)
Параметры
id - базовый адрес устройства;
register_number - номер регистра для наблючения;
number_of_regs - число регистров на вывод;
*args - сюда указываются данные для записи.
- Отключение от порта
ch_disconnect()
Основные регистры для работы
- (0x02) — чтение значений из нескольких дискретных входов (Read Discrete Inputs);
- (0x03) — чтение значений из нескольких регистров хранения (Read Holding Registers);
- (0x04) — чтение значений из нескольких регистров ввода (Read Input Registers);
- (0x05) — запись значения одного флага (Force Single Coil);
- (0x06) — запись значения в один регистр хранения (Preset Single Register);
- (0x07) — Чтение сигналов состояния (Read Exception Status);
- (0x0F) — запись значений в несколько регистров флагов (Force Multiple Coils);
- (0x10) — запись значений в несколько регистров хранения (Preset Multiple Registers);
- (0x16) — запись в один регистр хранения с использованием маски «И» и маски «ИЛИ» (Mask Write Register);
- (0x18) — Чтение данных из очереди (Read FIFO Queue);
- (0x14) — Чтение из файла (Read File Record);
- (0x15) — Запись в файл (Write File Record);
- (0x08) — Диагностика (Diagnostic);
- (0x0B) — Чтение счетчика событий (Get Com Event Counter);
- (0x0C) — Чтение журнала событий (Get Com Event Log);
- (0x11) — Чтение информации об устройстве (Report Slave ID);
- (0x2B) — Encapsulated Interface Transport.

