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

Тема: MK110 Управление выходами по Modbus

  1. #1

    По умолчанию MK110 Управление выходами по Modbus

    Здравствуйте!
    Пишем свою простенькую систему управления включением освещения на C# под web. Заметим, что это наш первый опыт взаимодействия с устройствами по COM портам: никогда не трогали, занимались только вебом (менюшки, формочки, картиночки :-)
    В проекте учавствуют 5шт МК110-8Д. Пытаемся начать писать во конкретные выходы конкретного устройства используя ModBus команду на Write Single Coils - 0x05 (взято из спецификации).
    В порт уходит (согласно ModBus Protocol Specification V.1.1b3):
    byte[] message = {
    settings.Address, //Адрес устройства
    Convert.ToByte(0x05), //Команда на запись
    Convert.ToByte(0), //2 байта Адреса выхода
    Convert.ToByte(0),
    Convert.ToByte(0), //2 байта значения выхода
    Convert.ToByte(1),
    0,0 (CRC, опущен)
    };

    Уходить, то уходит, но пока безрезультатно...
    Пожалуйста помогите разобраться! Сидим уже 3-й день )))
    Спасибо!

    P.S. С устройством все в пордяке: связь есть, работает, читаем значения выходов маской.
    Последний раз редактировалось krainov; 03.08.2016 в 17:06.

  2. #2
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,841

    По умолчанию

    Цитата Сообщение от krainov Посмотреть сообщение
    Здравствуйте!
    Пишем свою простенькую систему управления включением освещения на C# под web. Заметим, что это наш первый опыт взаимодействия с устройствами по COM портам: никогда не трогали, занимались только вебом (менюшки, формочки, картиночки :-)
    В проекте учавствуют 5шт МК110-8Д. Пытаемся начать писать во конкретные выходы конкретного устройства используя ModBus команду на Write Single Coils - 0x05 (взято из спецификации).
    В порт уходит (согласно ModBus Protocol Specification V.1.1b3):
    byte[] message = {
    settings.Address, //Адрес устройства
    Convert.ToByte(0x05), //Команда на запись
    Convert.ToByte(0), //2 байта Адреса выхода
    Convert.ToByte(0),
    Convert.ToByte(0), //2 байта значения выхода
    Convert.ToByte(1),
    0,0 (CRC, опущен)
    };

    Уходить, то уходит, но пока безрезультатно...
    Пожалуйста помогите разобраться! Сидим уже 3-й день )))
    Спасибо!

    P.S. С устройством все в пордяке: связь есть, работает, читаем значения выходов маской.
    Если "CRC, опущен", то модуль игнорирует эту телеграмму.
    Кроме того https://ru.wikipedia.org/wiki/Modbus...B1.D0.BE.D0.BA
    Запись одного значения
    5 (0x05) — запись значения одного флага (Force Single Coil).
    6 (0x06) — запись значения в один регистр хранения (Preset Single Register).
    Команда состоит из адреса элемента (2 байта) и устанавливаемого значения (2 байта).

    Для регистра хранения значение является просто 16-битным словом.
    Для флагов значение 0xFF00 означает включённое состояние, 0x0000 — выключенное, другие значения недопустимы.
    Если команда выполнена успешно, ведомое устройство возвращает копию запроса
    А у Вас почему-то
    Convert.ToByte(0), //2 байта значения выхода
    Convert.ToByte(1),

    ЗЫ.
    И самое главное модуль не поддерживает команду Write Single Coils - 0x05
    Допустимо использовать только 15 (0x0F) — запись значений в несколько регистров флагов (Force Multiple Coils)
    Захват-1.png

    Пример использования команды 0x0F есть в по ссылке
    Захват-2.png
    Последний раз редактировалось petera; 03.08.2016 в 17:51.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #3

    По умолчанию

    Цитата Сообщение от krainov Посмотреть сообщение
    Convert.ToByte(0x05), //Команда на запись
    модуль не поддерживает 5-ую функцию, на запись модуль поддерживает функции 0х10 и 0х0f.

  4. #4

    По умолчанию

    Спасибо за наводку!
    Заработал

    In case someone needs the solution

    //команда на запись во вход
    byte[] message = {
    settings.Address,
    0x0F,

    //адрес ВЭ
    0x00,
    0x00,

    //кол-во ВЭ
    0x00,
    0x04,

    //кол-во байт маски
    0x01,

    //маска
    0x01,

    0,0 //CRC - опущен (но необходим)
    };

Похожие темы

  1. Ответов: 8
    Последнее сообщение: 26.03.2015, 11:16
  2. MK110 как управлять выходами по Modbus
    от MK110 в разделе Эксплуатация
    Ответов: 8
    Последнее сообщение: 26.03.2015, 11:16
  3. управление выходами плк с пк
    от Columbariy в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 22.03.2010, 09:21
  4. управление дискрет выходами ТРМ 138 с ПЛК
    от Роман_1977 в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 08.08.2008, 12:22

Ваши права

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