На форуме обязательно:
  1. Заполнить свой профиль НА РУССКОМ ЯЗЫКЕ КИРИЛИЦЕЙ. См. Правила, п.2.d.
  2. Не писать свой вопрос в первую попавшуюся тему, а вместо этого создать свою. См. Правила, п.3.a.

Рекламу мы не размещаем ни на каких условиях.

Modbus для новичка

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

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

Modbus для новичка

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

Всем привет,

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

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

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


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

Modbus для новичка

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

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

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

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

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.

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

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

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? и т.д.

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

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

Modbus для новичка

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

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

Ответить

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