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

Мои вопросы к вам, добрый читатель, следующие:

  1. Как можно реализовать, например, "адрес Modbus"=104 "Бит"=3? Я что-то упустил? Я хотел бы избежать написания специальной коммуникационной программы, но, если возможно, полагаться на pyModbusTCP. Пример чтения битов из pyModbusTCP находится здесь: https://pymodbustcp.readthedocs.io/en/latest/examples/read_bit.html

  2. Как можно реализовать, например, написать "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)

Большое спасибо за любые идеи и помощь.

0 ответов

Другие вопросы по тегам