NonePy ModbusTCP: read/write_single_coil - какой битовый адрес в моем случае?
Я изучаю возможность связи с устройством с помощью модуля pyModbusTCP и python. Поставщик прислал мне макет протокола связи, но я не понимаю, как соотнести информацию из руководства и информацию, которую хочет pyModbusTCP.
У меня еще нет устройства, и я также новичок в Modbus, прочитав в основном Википедию и некоторые другие статьи.
Вот выдержка из руководства (извинения, я не знаю, как вставить таблицы):
+------------------------+---------------+--------------------------+
| Modbus address | Bit | Description |
+------------------------+---------------+--------------------------+
| 2 | 0 | Binary, some function |
| | 1 | Binary, some function |
| | 2 | Binary, some function |
| | 3 | Binary, some function |
| | 4 | Binary, some function |
| | 5 | Binary, some function |
| | 6 | Binary, some function |
| | 7 | Binary, some function |
+------------------------+---------------+--------------------------+
| 104 | 0 | Binary, some function |
| | 1 | Binary, some function |
| | 2 | Binary, some function |
| | 3 | Binary, some function |
| | 4 | Binary, some function |
| | 5 | Binary, some function |
| | 6 | Binary, some function |
| | 7 | Binary, some function |
+------------------------+---------------+--------------------------+
| 112 | | Current level, 0-200 |
+------------------------+---------------+--------------------------+
В руководстве также объясняется, что функции MODBUS поддерживаются 0x03, 0x01, 0x06, 0x10 и 0x05.
Я планирую использовать эту функцию из pyModbusTCP для чтения катушек:read_coils (bit_addr, bit_nb = 1) и write_single_coil (bit_addr, bit_value).
Modbus function READ_COILS (0x01)
Parameters:
bit_addr (int) – bit address (0 to 65535)
bit_nb (int) – number of bits to read (1 to 2000)
Returns:
bits list or None if error
Return type:
list of bool or None
Мои вопросы к вам, добрый читатель, следующие:
Как можно реализовать, например, "адрес Modbus"=104 "Бит"=3? Я что-то упустил? Я хотел бы избежать написания специальной коммуникационной программы, но, если возможно, полагаться на pyModbusTCP. Пример чтения битов из pyModbusTCP находится здесь: https://pymodbustcp.readthedocs.io/en/latest/examples/read_bit.html
Как можно реализовать, например, написать "Modbus address"=2 "Bit"=6? Правильно ли следующее:
from pyModbusTCP.client import ModbusClient
import time
SERVER_HOST = "localhost"
SERVER_PORT = 502
c = ModbusClient()
c.host(SERVER_HOST)
c.port(SERVER_PORT)
addr = 2
while True:
# if open() is ok, write coils (modbus function 0x01)
if c.is_open():
is_ok = c.write_single_coil(addr, 0) # bit 0
time.sleep(0.5)
is_ok = c.write_single_coil(addr, 0) # bit 1
time.sleep(0.5)
is_ok = c.write_single_coil(addr, 0) # bit 2
time.sleep(0.5)
is_ok = c.write_single_coil(addr, 0) # bit 3
time.sleep(0.5)
is_ok = c.write_single_coil(addr, 0) # bit 4
time.sleep(0.5)
is_ok = c.write_single_coil(addr, 0) # bit 5
time.sleep(0.5)
is_ok = c.write_single_coil(addr, 1) # bit 6 <<--
time.sleep(0.5)
is_ok = c.write_single_coil(addr, 0) # bit 7
time.sleep(0.5)
time.sleep(1)
Большое спасибо за любые идеи и помощь.