Показано с 1 по 8 из 8

Тема: ПЛК210 Опрос Discrete Inputs

  1. #1

    По умолчанию ПЛК210 Опрос Discrete Inputs

    Добрый день.
    Опрашиваю slave устройство по ModbusRTU. Функции 04 и 03 работают корректно, Holding и Input регистры читаю. Но при использовании функции 02 в буфер опроса ответ 256, когда ожидается бит. При этом если сниферить линию, пакеты запроса и ответа корректны.
    Изображения Изображения

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,627

    По умолчанию

    Добрый день.

    когда ожидается бит
    Уточните, пожалуйста, что именно вы под этом понимаете.

  3. #3
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,591

    По умолчанию

    Цитата Сообщение от SolitarY Посмотреть сообщение
    при использовании функции 02 в буфер опроса ответ 256, когда ожидается бит. При этом если сниферить линию, пакеты запроса и ответа корректны.
    на скрине у Вас в WORD значение 256, значит если слово сделать масссивом двух байт в первом (нулевом по индексу массива) байте единица стоит в нулевом разряде, всё как по стандарту

    ЗЫ Вот только на скрине геркулеса у Вас в ответе ни чего не включено, поэтому не понятно что вообще лежит в DATA_RW[0]
    Последний раз редактировалось capzap; 22.07.2024 в 12:37.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  4. #4

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Добрый день.



    Уточните, пожалуйста, что именно вы под этом понимаете.
    0 или 1, а не целочисленное типа 256
    Последний раз редактировалось SolitarY; 22.07.2024 в 12:42.

  5. #5

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ЗЫ Вот только на скрине геркулеса у Вас в ответе ни чего не включено, поэтому не понятно что вообще лежит в DATA_RW[0]
    почему непонятно? пакет - 01 02 01 00 А1 88
    01 - slave id, 02 - функция чтения DI, 01 - кол-во байт ответа, 00 - ответ, А1 88 - CRC

  6. #6
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,627

    По умолчанию

    Цитата Сообщение от SolitarY Посмотреть сообщение
    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.

    В рамках данного предположения - это совершенно закономерный результат.

  7. #7
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,591

    По умолчанию

    Цитата Сообщение от SolitarY Посмотреть сообщение
    0 или 1, а не целочисленное типа 256
    Screenshot 2024-07-22 124153.png и что не так когда биты меняются, соответствующее целочисленное так же меняется
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #8

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Предположу, что вы используете 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 помогла.

Похожие темы

  1. Чтение дискретных входов Discrete Inputs от carel evd по modbus пр120
    от Stasyllius_83 в разделе Программируемые реле
    Ответов: 8
    Последнее сообщение: 25.02.2024, 23:10
  2. Опрос ТСРВ-024М с ПЛК210
    от Irida в разделе ПЛК2хх
    Ответов: 6
    Последнее сообщение: 23.02.2024, 22:36
  3. ПЛК210-003 опрос СП310 Modbus TCP
    от anisnaya в разделе ПЛК2хх
    Ответов: 1
    Последнее сообщение: 06.10.2023, 08:47
  4. ПЛК210 и опрос 29 УПП по RS485
    от Chaynik в разделе ПЛК2хх
    Ответов: 3
    Последнее сообщение: 27.06.2023, 13:18
  5. ПЛК210 опрос RS-485
    от Andrei04 в разделе ПЛК2хх
    Ответов: 14
    Последнее сообщение: 02.11.2022, 15:51

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •