Пытаюсь считать с СТГ 3 текущие измеренное значение,
Пример запроса данных:
01; 03; 00; 00; 00; 02; sum 0; sum 1,
где N номер сигнализатора в сети. Устанавливается пользователем в
диапазоне от 1 до 31;
sum 0; sum 1 контрольная сумма (CRC), рассчитывается в соответствии
с протоколом «MODBUS-RTU».
# Извлечение данных из регистров
reg0 = registers[0]
reg1 = registers[1]
# Разбиение регистров на байты
byte1 = (reg0 >> 8) & 0xFF
byte2 = reg0 & 0xFF
byte3 = (reg1 >> 8) & 0xFF
byte4 = reg1 & 0xFF
# Извлечение состояния сигнализации и знака
sign_bit = (byte1 >> 7) & 0x01
p1 = (byte1 >> 3) & 0x01
p2 = (byte1 >> 4) & 0x01
comma_position = (byte1 & 0x07)
# Определение знака
sign = '-' if sign_bit else '+'
# Чтение значений
integer_part = byte2 * 100 + byte3 * 10 + (byte4 >> 4)
decimal_part = (byte4 & 0x0F) * 100
# Формирование значения
value = integer_part + decimal_part / 10000
if sign_bit:
value = -value
# Сдвиг запятой
value /= 10 ** comma_position
# Форматирование результата
print(f"Значение: {value:.{comma_position}f}")
print(f"Состояние сигнализации: П1={p1}, П2={p2}")
def main():
# Параметры запроса
unit_id = 1
address = 0x00 # Начальный адрес
count = 2 # Количество регистров
while True:
# Чтение данных
data = read_modbus_data(client, unit_id, address, count)
if data:
interpret_data(data.registers)
Ну как бы все просто и элементарноно в ответ я получаю всякую ерунду
Значение: 0.02120
Состояние сигнализации: П1=0, П2=0
Значение: 0.02423
Состояние сигнализации: П1=0, П2=0
Значение: 0.01677
Состояние сигнализации: П1=0, П2=0
Значение: 0.015674
Состояние сигнализации: П1=0, П2=0
Значение: 0.016387
Хотя в официальной программе значениечто я делаю не так?




но в ответ я получаю всякую ерунду
Ответить с цитированием