Всем привет,
Ребята не судите строго, если Вам покажется вопрос глупым. Т.к. я новичок в этом деле, поэтому конкретный вопрос трудно задать.
Вопрос такой: Создал я проект на ПЛК, хочу сделать подключение к СКАДА-системе по протоколу Модбас. связь через Модбас РТУ либо Модбас ТСР, не важно. Во-первых хочу проверить состояния адресов через программу МодСим. Как мне мои адреса в ПЛК к примеру МВ40(булеан) или MI40(интежер) сконфигурировать на протокол Модбас. Я понимаю что МВ - это 01 Coil, а MI - 03 holding registr, но как просчитать либо установить какой адрес в ПЛК будет соответствовать адресу в МодСим?
Честно, говоря у меня мозг взорвется, литературу почитал, сам пытаюсь - не получается. Объясните доходчиво))).
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Modbus для новичка
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 5
- Зарегистрирован: 24 май 2018, 08:54
- Имя: Михаил
- Благодарил (а): 2 раза
-
- почётный участник форума
- Сообщения: 5790
- Зарегистрирован: 07 окт 2011, 09:12
- Имя: Гаско Вячеслав Эриевич
- Страна: Россия
- город/регион: Рязань
- Благодарил (а): 673 раза
- Поблагодарили: 841 раз
Modbus для новичка
Для конфигурации и программы симулятора, и драйвера СКАДА (или OPC-сервера, через который СКАДА получает данные) Вам будет нужна следующая информация:
- параметры последовательного канала связи (скорость, четность, ширина стоп-бита) для Modbus-RTU или IP-адрес для Modbus-TCP;
- адрес устройства (ПЛК) в сети Modbus, т.к. ПЛК традиционно назначается слэйвом (сервером) в сети Modbus;
- карту Modbus Вашего ПЛК, которая, в зависиости от типа ПЛК, может быть как фиксированной производителем, так и назначена Вами при программировании ПЛК. Карта отражает соответствие между внутренней памятью устройства и адресацией Modbus.
- параметры последовательного канала связи (скорость, четность, ширина стоп-бита) для Modbus-RTU или IP-адрес для Modbus-TCP;
- адрес устройства (ПЛК) в сети Modbus, т.к. ПЛК традиционно назначается слэйвом (сервером) в сети Modbus;
- карту Modbus Вашего ПЛК, которая, в зависиости от типа ПЛК, может быть как фиксированной производителем, так и назначена Вами при программировании ПЛК. Карта отражает соответствие между внутренней памятью устройства и адресацией Modbus.
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
«У человека в душе дыра размером с Бога, и каждый заполняет её как может.» (Жан-Поль Сартр)
"Ту пустоту, которая остаётся в душе, когда в ней нет Бога, и весь мир не может заполнить." (святитель Николай Сербский)
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Modbus для новичка
Вы бы в таком случае с указания контроллера и среды программирования начали. Именно наложение адресов на регистры модбаса у разных контроллеров разное и надо с доками на контроллер разбираться. Возможно, вручную можно задать. Возможно жестко связаны с адресацией, но доступность к обмену надо отдельно включать. Может и вообще в ПО отдельный блок понадобится для обмена по модбасу.SuperMike2018 писал(а): ↑24 май 2018, 09:16 Как мне мои адреса в ПЛК к примеру МВ40(булеан) или MI40(интежер) сконфигурировать на протокол Модбас.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
-
- здесь недавно
- Сообщения: 5
- Зарегистрирован: 24 май 2018, 08:54
- Имя: Михаил
- Благодарил (а): 2 раза
Modbus для новичка
связь вся настроена и IP адреса, и СОМ портыRyzhij писал(а): ↑24 май 2018, 10:44 Для конфигурации и программы симулятора, и драйвера СКАДА (или OPC-сервера, через который СКАДА получает данные) Вам будет нужна следующая информация:
- параметры последовательного канала связи (скорость, четность, ширина стоп-бита) для Modbus-RTU или IP-адрес для Modbus-TCP;
- адрес устройства (ПЛК) в сети Modbus, т.к. ПЛК традиционно назначается слэйвом (сервером) в сети Modbus;
- карту Modbus Вашего ПЛК, которая, в зависиости от типа ПЛК, может быть как фиксированной производителем, так и назначена Вами при программировании ПЛК. Карта отражает соответствие между внутренней памятью устройства и адресацией Modbus.
Отправлено спустя 10 минут 14 секунд:
Никита писал(а): ↑24 май 2018, 11:16ПЛК Юнитроникс V350, программа под него VisiLogic. RS485/232 шина есть и Эвернет карта. Может мой ответ здесь хранится а я его недопру?))SuperMike2018 писал(а): ↑24 май 2018, 09:16 Вы бы в таком случае с указания контроллера и среды программирования начали. Именно наложение адресов на регистры модбаса у разных контроллеров разное и надо с доками на контроллер разбираться. Возможно, вручную можно задать. Возможно жестко связаны с адресацией, но доступность к обмену надо отдельно включать. Может и вообще в ПО отдельный блок понадобится для обмена по модбасу.
системы адресации 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.
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Modbus для новичка
Похоже, вот Ваш случай (опрос ПЛК со стороны скады, скада в качестве мастера):
И клиент, если понимает такую нотацию, сам поймет что имеет дело с областью Holding regisers и сформирует запрос с нужной функцией. Из поддерживаемых им. Остальное просто - в Вашем ПЛК читается 32 регистр в нумерации ПЛК с нуля, соответственно в нумерации модбаса с единицы это будет 33.Кстати, там похоже на опечатку - Start of Vector = 40033 (40001 + 0000 + 32). Ну, по крайней мере, по логике и арифметике так должно быть. С длиной не заморачивайтесь пока, тут надо смотреть конкретный клиент. Некоторые умеют сами выстраивать цепочки, некоторые вдобавок позволяют читать цепочкой даже данные, которые не нужны, чтобы вместо нескольких запросов отправить один и взять из него нужное.
Модсима нет под рукой, не могу посмотреть реализацию, а по памяти не готов комментировать. По картинкам из гугла для рассмотренного примера надо указать 03-holding registers, а результат будет в 4... Вот по поводу надо ли единицу к номеру добавлять в модсиме - не скажу, быстрее попробовать.
Посмотрите, если непонятно, историческую нотацию регистров модбаса для контроллеров Modicon. И способ задания адресов в МодСиме. Штука вот в чем - в модиконах изначально использовались разные области адресного пространства для разных функций модбас. И многие модбас-клиенты используют эту нотацию вместо явного указания номера функции. В указанном выше примере 40001 - как раз начало области MI для модикона.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.
И клиент, если понимает такую нотацию, сам поймет что имеет дело с областью Holding regisers и сформирует запрос с нужной функцией. Из поддерживаемых им. Остальное просто - в Вашем ПЛК читается 32 регистр в нумерации ПЛК с нуля, соответственно в нумерации модбаса с единицы это будет 33.Кстати, там похоже на опечатку - Start of Vector = 40033 (40001 + 0000 + 32). Ну, по крайней мере, по логике и арифметике так должно быть. С длиной не заморачивайтесь пока, тут надо смотреть конкретный клиент. Некоторые умеют сами выстраивать цепочки, некоторые вдобавок позволяют читать цепочкой даже данные, которые не нужны, чтобы вместо нескольких запросов отправить один и взять из него нужное.
Модсима нет под рукой, не могу посмотреть реализацию, а по памяти не готов комментировать. По картинкам из гугла для рассмотренного примера надо указать 03-holding registers, а результат будет в 4... Вот по поводу надо ли единицу к номеру добавлять в модсиме - не скажу, быстрее попробовать.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "
-
- здесь недавно
- Сообщения: 5
- Зарегистрирован: 24 май 2018, 08:54
- Имя: Михаил
- Благодарил (а): 2 раза
Modbus для новичка
Никита, хотел уточнить, если в ПЛК MI 0 - то в Модбасе 40033, если MI 2 - в Модбасе 40035? и т.д.
-
- почётный участник форума
- Сообщения: 3971
- Зарегистрирован: 20 янв 2010, 22:23
- Имя: Никита
- Страна: РФ
- город/регион: Мурманск
- Благодарил (а): 21 раз
- Поблагодарили: 229 раз
Modbus для новичка
Нет. В примере читается MI32 обращением к 40033. Если речь про MI0 то это просто 40001. Следующее 16-разрядное (MI1) ,будет MI1. Тут как раз формула простая, для первого класса.
Впрочем, её обычно надо уточнять. У каждого клиента свои заморочки, некоторые и с нуля могут считать. А некоторые позволяют пользователю задать нумерацию с 0 или 1. Это в модсиме надо глядеть.
И, да, это не в модбасе. Это именно адресация из контроллеров Modicon, откуда модбас и появился. Многие ей пользуются. А сам шнайдер, кстати, в SoMachine для новых контроллеров позволяет использовать оба варианта - %MW0 или 40001. И переключаться между ними.
Впрочем, её обычно надо уточнять. У каждого клиента свои заморочки, некоторые и с нуля могут считать. А некоторые позволяют пользователю задать нумерацию с 0 или 1. Это в модсиме надо глядеть.
И, да, это не в модбасе. Это именно адресация из контроллеров Modicon, откуда модбас и появился. Многие ей пользуются. А сам шнайдер, кстати, в SoMachine для новых контроллеров позволяет использовать оба варианта - %MW0 или 40001. И переключаться между ними.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" приходит единственный вопрос: "Нахрена? "