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

Тема: Подключение МВ210 по TCP Modbus на C++

  1. #1

    Question Подключение МВ210 по TCP Modbus на C++

    Добрый день!
    Заранее извиняюсь, если тема избита, но я час листал/искал по форуму, гуглил и ничего не нашел, кроме общего описания протокола и мануала.
    Пытаюсь подключить МВ210-204 по TCP, по протоколу Modbus, пишу на С++.
    Соединение устанавливается, хочу прочитать, допустим, состояние входа i1.
    Судя по мануалу это команда 04 – Read Input Registers, адрес регистра 51.
    Отправляю (hex) 00 00(номер транзакции) 00 00(id протокола) 00 06(6 байт далее) 01(slave id) 04(команда) 00 33(регистр) 00 01(количество регистров)
    Ответ(hex): 00 00 00 00 00 03 01 84 02 - 9 байт. А должно быть 11, т.к. последний 02 это длина данных, ещё 2 байта, которые не приходят.
    Замыкаю, размыкаю контакты - в ответе ничего не меняется.
    И почему-то Function Code возвращается 03 а не 04.
    Пробовал команду 03, то же самое.
    Что я делаю не так?

    В OWEN Configurator всё прекрасно считывается, устройство рабочее.

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

    По умолчанию

    Цитата Сообщение от Дмитрий из СПб Посмотреть сообщение
    Добрый день!
    Заранее извиняюсь, если тема избита, но я час листал/искал по форуму, гуглил и ничего не нашел, кроме общего описания протокола и мануала.
    Пытаюсь подключить МВ210-204 по TCP, по протоколу Modbus, пишу на С++.
    Соединение устанавливается, хочу прочитать, допустим, состояние входа i1.
    Судя по мануалу это команда 04 – Read Input Registers, адрес регистра 51.
    Отправляю (hex) 00 00(номер транзакции) 00 00(id протокола) 00 06(6 байт далее) 01(slave id) 04(команда) 00 33(регистр) 00 01(количество регистров)
    Ответ(hex): 00 00 00 00 00 03 01 84 02 - 9 байт. А должно быть 11, т.к. последний 02 это длина данных, ещё 2 байта, которые не приходят.
    Замыкаю, размыкаю контакты - в ответе ничего не меняется.
    И почему-то Function Code возвращается 03 а не 04.
    Пробовал команду 03, то же самое.
    Что я делаю не так?

    В OWEN Configurator всё прекрасно считывается, устройство рабочее.
    Добрый день.
    Вам надо cчитывать не один регистр, а 2.
    Нельзя считать только половину параметра (а параметр "Состояние дискретных входов" имеет тип UINT32).
    В этом случае модуль возвращает ошибку 02 (00 00 00 00 00 03 01 84 02) - ILLEGAL DATA ADDRESS.

  3. #3

    По умолчанию

    Спасибо, заработало!
    00 00 00 00 00 07 01 04 04 00 01 00 00 - замкнуто
    00 00 00 00 00 07 01 04 04 00 00 00 00 - разомкнуто

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

    По умолчанию

    00 00 Transaction identifier 0x0000 (0)
    00 00 Protocol identifier 0 = MODBUS protocol
    00 03 Length 0x0003 (3)
    01 Unit identifier 0x01 (1)
    84 Error code 0x80 + 0x04 (4) - Read Input Registers
    02 Exception code [02] ILLEGAL DATA ADDRESS

Похожие темы

  1. Ответов: 3
    Последнее сообщение: 17.07.2020, 22:43
  2. Ответов: 1
    Последнее сообщение: 01.07.2020, 09:58
  3. Подключение МВ210-101 к ПЛК100
    от Денис Жмуров в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 10.06.2020, 18:34
  4. Подключение МВ210 к плк160
    от Brandon_heat_dre в разделе Мх210
    Ответов: 1
    Последнее сообщение: 29.07.2019, 10:27
  5. modbus TCP,МВ210, С/С++, ошибка при чтении входных регистров
    от evgen2 в разделе Помощь Разработчикам
    Ответов: 3
    Последнее сообщение: 04.02.2019, 15:48

Ваши права

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