• ОБЯЗАТЕЛЬНО заполнить свой профиль НА РУССКОМ ЯЗЫКЕ КИРИЛЛИЦЕЙ.
  • НЕ НУЖНО писать свой вопрос в первую попавшуюся тему, а вместо этого создать НОВУЮ тему.
  • Дублирование сообщений приравнивается к спаму.
  • Рекламу мы не размещаем ни на каких условиях.

Modbus для новичка

SCADA, серверы, АРМ верхнего уровня, диспетчерские
Ответить

Автор темы
SuperMike2018
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 24 май 2018, 08:54
Имя: Михаил
Благодарил (а): 2 раза

Modbus для новичка

Сообщение SuperMike2018 » 24 май 2018, 09:16

Всем привет,

Ребята не судите строго, если Вам покажется вопрос глупым. Т.к. я новичок в этом деле, поэтому конкретный вопрос трудно задать.

Вопрос такой: Создал я проект на ПЛК, хочу сделать подключение к СКАДА-системе по протоколу Модбас. связь через Модбас РТУ либо Модбас ТСР, не важно. Во-первых хочу проверить состояния адресов через программу МодСим. Как мне мои адреса в ПЛК к примеру МВ40(булеан) или MI40(интежер) сконфигурировать на протокол Модбас. Я понимаю что МВ - это 01 Coil, а MI - 03 holding registr, но как просчитать либо установить какой адрес в ПЛК будет соответствовать адресу в МодСим?

Честно, говоря у меня мозг взорвется, литературу почитал, сам пытаюсь - не получается. Объясните доходчиво))).


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 3895
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 121 раз
Поблагодарили: 221 раз

Modbus для новичка

Сообщение Ryzhij » 24 май 2018, 10:44

Для конфигурации и программы симулятора, и драйвера СКАДА (или OPC-сервера, через который СКАДА получает данные) Вам будет нужна следующая информация:
- параметры последовательного канала связи (скорость, четность, ширина стоп-бита) для Modbus-RTU или IP-адрес для Modbus-TCP;
- адрес устройства (ПЛК) в сети Modbus, т.к. ПЛК традиционно назначается слэйвом (сервером) в сети Modbus;
- карту Modbus Вашего ПЛК, которая, в зависиости от типа ПЛК, может быть как фиксированной производителем, так и назначена Вами при программировании ПЛК. Карта отражает соответствие между внутренней памятью устройства и адресацией Modbus.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр

Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3147
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Откуда: Мурманск
Благодарил (а): 12 раз
Поблагодарили: 74 раза

Modbus для новичка

Сообщение Никита » 24 май 2018, 11:16

SuperMike2018 писал(а):
24 май 2018, 09:16
Как мне мои адреса в ПЛК к примеру МВ40(булеан) или MI40(интежер) сконфигурировать на протокол Модбас.
Вы бы в таком случае с указания контроллера и среды программирования начали. Именно наложение адресов на регистры модбаса у разных контроллеров разное и надо с доками на контроллер разбираться. Возможно, вручную можно задать. Возможно жестко связаны с адресацией, но доступность к обмену надо отдельно включать. Может и вообще в ПО отдельный блок понадобится для обмена по модбасу.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "


Автор темы
SuperMike2018
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 24 май 2018, 08:54
Имя: Михаил
Благодарил (а): 2 раза

Modbus для новичка

Сообщение SuperMike2018 » 24 май 2018, 11:26

Ryzhij писал(а):
24 май 2018, 10:44
Для конфигурации и программы симулятора, и драйвера СКАДА (или OPC-сервера, через который СКАДА получает данные) Вам будет нужна следующая информация:
- параметры последовательного канала связи (скорость, четность, ширина стоп-бита) для Modbus-RTU или IP-адрес для Modbus-TCP;
- адрес устройства (ПЛК) в сети Modbus, т.к. ПЛК традиционно назначается слэйвом (сервером) в сети Modbus;
- карту Modbus Вашего ПЛК, которая, в зависиости от типа ПЛК, может быть как фиксированной производителем, так и назначена Вами при программировании ПЛК. Карта отражает соответствие между внутренней памятью устройства и адресацией Modbus.
связь вся настроена и IP адреса, и СОМ порты

Отправлено спустя 10 минут 14 секунд:
Никита писал(а):
24 май 2018, 11:16
SuperMike2018 писал(а):
24 май 2018, 09:16
Вы бы в таком случае с указания контроллера и среды программирования начали. Именно наложение адресов на регистры модбаса у разных контроллеров разное и надо с доками на контроллер разбираться. Возможно, вручную можно задать. Возможно жестко связаны с адресацией, но доступность к обмену надо отдельно включать. Может и вообще в ПО отдельный блок понадобится для обмена по модбасу.
ПЛК Юнитроникс V350, программа под него VisiLogic. RS485/232 шина есть и Эвернет карта. Может мой ответ здесь хранится а я его недопру?))


системы адресации MODBUS начинаются с 1;

адресация Vision начинается с 0.

Битовые операнды

Считывание 10-битного вектора входных значений в подчиненном контроллере Vision, начиная с входа 20, с помощью команды "Читать значения группы флагов" (MODBUS COMMAND № 1)

ПЛК Vision как главное устройство MODBUS по отношению к монохромному ПЛК

В ФБ Читать значения группы флагов приложения VisiLogic задайте параметр Slave: Start of Vector = 4020 (DEC), параметр Read: Vector Length = 10. В подчиненном контроллере Vision VisiLogic будет считывать значения I 20 - I 29.


ПЛК Vision как главное устройство MODBUS по отношению к цветному ПЛК

В ФБ Читать значения группы флагов приложения VisiLogic задайте параметр Slave: Start of Vector = 6014h (HEX), параметр Read: Vector Length = 10. В подчиненном контроллере Vision VisiLogic будет считывать значения I 20 - I 29.



SCADA в качестве главного устройства MODBUS по отношению к монохромному ПЛК
В приложении SCADA задайте параметр Slave: Start of Vector = 34021 (30001 + 4000 + 20), параметр Read: Vector Length = 10, который позволит главному устройству считывать значения I 20 - I 29 в подчиненном контроллере Vision.


SCADA в качестве главного устройства MODBUS по отношению к цветному ПЛК
Конвертируйте шестнадцатеричный формат адреса в десятичный
В приложении SCADA задайте параметр Slave: Start of Vector= 54597 (24576 (6000h) + 20), параметр Read: Vector Length = 10, который позволит главному устройству считывать значения I 20 - I 29 в подчиненном контроллере Vision.


Запись 3-битного вектора выходных значений в подчиненном контроллере Vision, начиная с Выхода 8, с помощью команды "Принудительно установить значения граппы флагов" (MODBUS COMMAND № 15)

ПЛК Vision как главное устройство MODBUS по отношению к монохромному ПЛК

В ФБ Принудительно установить значения группы флагов приложения VisiLogic задайте параметр Slave: Start of Vector = 5008, параметр Force: Vector Length = 3. В подчиненном контроллере главное устройство будет считывать значения состояния O 8 - O 10.



ПЛК Vision как главное устройство MODBUS по отношению к цветному ПЛК

В ФБ Принудительно установить значения группы флагов приложения VisiLogic задайте параметр Slave: Start of Vector = 4008h (HEX), параметр Force: Vector Length = 3. В подчиненном контроллере главное устройство будет считывать значения состояния O 8 - O 10.



SCADA в качестве главного устройства MODBUS по отношению к монохромному ПЛК
В приложении SCADA задайте параметр Slave: Start of Vector = 35009 (30001 + 5000 + 8), параметр Force: Vector Length = 3, который позволит главному устройству считывать значения O 8 - O 10 в подчиненном контроллере Vision.


SCADA в качестве главного устройства MODBUS по отношению к цветному ПЛК
Конвертируйте шестнадцатеричный формат адреса в десятичный.
В приложении SCADA задайте параметр Slave: Start of Vector = 46393 (30001 + 16384(4000h) + 8), параметр Force: Vector Length = 3, который позволит главному устройству считывать значения O 8 - O 10 в подчиненном контроллере Vision.

Регистры

Считывание вектора длиной в 9 регистров из16-битных целых чисел в подчиненном контроллере Vision, начиная с MI 32, с помощью команды "Читать регистры удержания" (MODBUS COMMAND № 03)

ПЛК Vision в качестве главного устройства MODBUS
В ФБ считывания регистров удержания VisiLogic задайте параметр Slave: Start of Vector = 32, параметр Read: Vector Length = 9. В подчиненном контроллере Vision VisiLogic будет считывать значения I 32 - I 41.

SCADA в качестве ведущего устройства MODBUS
В приложении SCADA задайте параметр Slave: Start of Vector = 40033 (40001 + 0000 + 3), параметр Read: Vector Length = 9, который позволит главному устройству считывать значения MI 32 - MI 41 в подчиненном контроллере Vision.


Примечание
Если внутри параметра Slave: Start of Vector типом выбранного регистра будет 32-битный двойной регистр (адреса подчиненных ПЛК от 5100 и выше), предустановленное значение длины вектора также необходимо удвоить.
Если к примеру, в ФБ предустановки регистров удержания приложения VisiLogic:

параметр Slave: Start of Vector установлен в значение 6300, и

требуется предустановить 4 регистра, для общего количества байт 16

необходимо установить значение параметра "Preset Vector length", равное 8.

Обратите внимание, что в данных случаях это значит, что параметр Preset: Vector Length всегда будет четным числом.


Считывание вектора длиной в 9 регистров из32-битных целых чисел в подчиненном контроллере Vision, начиная с SL 32, с помощью команды "Предустановить регистры удержания" (MODBUS COMMAND № 16)

ПЛК Vision в качестве главного устройства MODBUS
В ФБ предустановки регистров удержания приложения VisiLogic задайте параметр Slave: Preset Vector = 6132, параметр Read: Vector Length = 18( 2x9, чтобы соответствовал 32-битным регистрам SL). В подчиненном контроллере Vision приложение VisiLogic будет считывать значения SL 32 - SL 41.

SCADA в качестве ведущего устройства MODBUS
В приложении SCADA задайте параметр Slave: Start of Vector = 406133, параметр Read: Vector Length = 18, который позволит главному устройству считывать значения SL 32 - SL 41 в подчиненном контроллере Vision.


Запись вектора длиной в 6 регистров из16-битных целых чисел в подчиненном контроллере Vision, начиная с MI 32, с помощью команды "Предустановить регистры удержания (MODBUS COMMAND № 16)

ПЛК Vision в качестве главного устройства MODBUS
В ФБ предустановки регистров удержания приложения VisiLogic задайте параметр Slave: Start of Vector = 32, параметр Preset: Vector Length = 6. В подчиненном контроллере Vision приложение VisiLogic будет считывать значения MI 32 - MI 37.

SCADA в качестве ведущего устройства MODBUS
В приложении SCADA задайте параметр Slave: Start of Vector = 40033, параметр Read: Vector Length = 6, который позволит главному устройству считывать значения MI 32 - MI 37 в подчиненном контроллере Vision.

Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3147
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Откуда: Мурманск
Благодарил (а): 12 раз
Поблагодарили: 74 раза

Modbus для новичка

Сообщение Никита » 24 май 2018, 14:17

Похоже, вот Ваш случай (опрос ПЛК со стороны скады, скада в качестве мастера):
SuperMike2018 писал(а):
24 май 2018, 11:37
Считывание вектора длиной в 9 регистров из16-битных целых чисел в подчиненном контроллере Vision, начиная с MI 32, с помощью команды "Читать регистры удержания" (MODBUS COMMAND № 03)
ПЛК Vision в качестве главного устройства MODBUS
В ФБ считывания регистров удержания VisiLogic задайте параметр Slave: Start of Vector = 32, параметр Read: Vector Length = 9. В подчиненном контроллере Vision VisiLogic будет считывать значения I 32 - I 41.
SCADA в качестве ведущего устройства MODBUS
В приложении SCADA задайте параметр Slave: Start of Vector = 40033 (40001 + 0000 + 3), параметр Read: Vector Length = 9, который позволит главному устройству считывать значения MI 32 - MI 41 в подчиненном контроллере Vision.
Посмотрите, если непонятно, историческую нотацию регистров модбаса для контроллеров Modicon. И способ задания адресов в МодСиме. Штука вот в чем - в модиконах изначально использовались разные области адресного пространства для разных функций модбас. И многие модбас-клиенты используют эту нотацию вместо явного указания номера функции. В указанном выше примере 40001 - как раз начало области MI для модикона.
И клиент, если понимает такую нотацию, сам поймет что имеет дело с областью Holding regisers и сформирует запрос с нужной функцией. Из поддерживаемых им. Остальное просто - в Вашем ПЛК читается 32 регистр в нумерации ПЛК с нуля, соответственно в нумерации модбаса с единицы это будет 33.Кстати, там похоже на опечатку - Start of Vector = 40033 (40001 + 0000 + 32). Ну, по крайней мере, по логике и арифметике так должно быть. С длиной не заморачивайтесь пока, тут надо смотреть конкретный клиент. Некоторые умеют сами выстраивать цепочки, некоторые вдобавок позволяют читать цепочкой даже данные, которые не нужны, чтобы вместо нескольких запросов отправить один и взять из него нужное.
Модсима нет под рукой, не могу посмотреть реализацию, а по памяти не готов комментировать. По картинкам из гугла для рассмотренного примера надо указать 03-holding registers, а результат будет в 4... Вот по поводу надо ли единицу к номеру добавлять в модсиме - не скажу, быстрее попробовать.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "


Автор темы
SuperMike2018
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 24 май 2018, 08:54
Имя: Михаил
Благодарил (а): 2 раза

Modbus для новичка

Сообщение SuperMike2018 » 24 май 2018, 14:51

Никита писал(а):
24 май 2018, 14:17
Остальное просто - в Вашем ПЛК читается 32 регистр в нумерации ПЛК с нуля, соответственно в нумерации модбаса с единицы это будет 33.Кстати, там похоже на опечатку - Start of Vector = 40033
Никита, хотел уточнить, если в ПЛК MI 0 - то в Модбасе 40033, если MI 2 - в Модбасе 40035? и т.д.

Аватара пользователя

Никита
почётный участник форума
почётный участник форума
Сообщения: 3147
Зарегистрирован: 20 янв 2010, 22:23
Имя: Никита
Откуда: Мурманск
Благодарил (а): 12 раз
Поблагодарили: 74 раза

Modbus для новичка

Сообщение Никита » 24 май 2018, 20:13

Нет. В примере читается MI32 обращением к 40033. Если речь про MI0 то это просто 40001. Следующее 16-разрядное (MI1) ,будет MI1. Тут как раз формула простая, для первого класса.
Впрочем, её обычно надо уточнять. У каждого клиента свои заморочки, некоторые и с нуля могут считать. А некоторые позволяют пользователю задать нумерацию с 0 или 1. Это в модсиме надо глядеть.
И, да, это не в модбасе. Это именно адресация из контроллеров Modicon, откуда модбас и появился. Многие ей пользуются. А сам шнайдер, кстати, в SoMachine для новых контроллеров позволяет использовать оба варианта - %MW0 или 40001. И переключаться между ними.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "

Ответить

Вернуться в «Верхний уровень автоматизации»