Просмотр полной версии : ПЛК210 Опрос Discrete Inputs
SolitarY
22.07.2024, 12:04
Добрый день.
Опрашиваю slave устройство по ModbusRTU. Функции 04 и 03 работают корректно, Holding и Input регистры читаю. Но при использовании функции 02 в буфер опроса ответ 256, когда ожидается бит. При этом если сниферить линию, пакеты запроса и ответа корректны.
Евгений Кислов
22.07.2024, 12:16
Добрый день.
когда ожидается бит
Уточните, пожалуйста, что именно вы под этом понимаете.
при использовании функции 02 в буфер опроса ответ 256, когда ожидается бит. При этом если сниферить линию, пакеты запроса и ответа корректны.
на скрине у Вас в WORD значение 256, значит если слово сделать масссивом двух байт в первом (нулевом по индексу массива) байте единица стоит в нулевом разряде, всё как по стандарту
ЗЫ Вот только на скрине геркулеса у Вас в ответе ни чего не включено, поэтому не понятно что вообще лежит в DATA_RW[0]
SolitarY
22.07.2024, 12:35
Добрый день.
Уточните, пожалуйста, что именно вы под этом понимаете.
0 или 1, а не целочисленное типа 256
SolitarY
22.07.2024, 12:41
ЗЫ Вот только на скрине геркулеса у Вас в ответе ни чего не включено, поэтому не понятно что вообще лежит в DATA_RW[0]
почему непонятно? пакет - 01 02 01 00 А1 88
01 - slave id, 02 - функция чтения DI, 01 - кол-во байт ответа, 00 - ответ, А1 88 - CRC
Евгений Кислов
22.07.2024, 12:42
0 или 1, а не целочисленное типа 256
Предположу, что вы используете DATA_RW для всех запросов (в т. ч. "Функции 04 и 03").
Теперь предположение:
Считали в буфер, например, значение 345 (функцией 04 или 03). Т.е. DATA_RW[0] имеет значение 345 - оно же 2#0000_0001_0101_1001.
Теперь вызвали код с вашего скриншота - считываем один дискрет инпут с адресом 97.
В ответ получает байт со значением 00 - бит сброшен (01 02 01 00 ... ).
Соответственно, этот байт копируется в буфер, затирая младший байт в DATA_RW[0].
Получаем 2#0000_0001_0000_0000, оно же 256.
В рамках данного предположения - это совершенно закономерный результат.
0 или 1, а не целочисленное типа 256
77486 и что не так когда биты меняются, соответствующее целочисленное так же меняется
SolitarY
22.07.2024, 12:49
Предположу, что вы используете DATA_RW для всех запросов (в т. ч. "Функции 04 и 03").
Теперь предположение:
Считали в буфер, например, значение 345 (функцией 04 или 03). Т.е. DATA_RW[0] имеет значение 345 - оно же 2#0000_0001_0101_1001.
Теперь вызвали код с вашего скриншота - считываем один дискрет инпут с адресом 97.
В ответ получает байт со значением 00 - бит сброшен (01 02 01 00 ... ).
Соответственно, этот байт копируется в буфер, затирая младший байт в DATA_RW[0].
Получаем 2#0000_0001_0000_0000, оно же 256.
В рамках данного предположения - это совершенно закономерный результат.
Спасибо за наводку! Действительно один буфер для опроса, так что чистка буфера перед считыванием DI помогла.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot