Вход

Просмотр полной версии : CODESYS и MasterScada 4D по OPC UA



papagen
11.08.2022, 09:32
Здравствуйте.
Имеется: CODESYS 3.5 SP17 patch3
MasterScada 4D.
Необходимо получить переменные из программы для плк 210 ( из CODESYS)
в мастерскаду по протоколу OPC UA.

Можно ли как-то получить переменные не имея под рукой физического контроллера?
Если можно, то как?
Спасибо

Евгений Кислов
11.08.2022, 09:34
Здравствуйте.
Имеется: CODESYS 3.5 SP17 patch3
MasterScada 4D.
Необходимо получить переменные из программы для плк 210 ( из CODESYS)
в мастерскаду по протоколу OPC UA.

Можно ли как-то получить переменные не имея под рукой физического контроллера?
Если можно, то как?
Спасибо

Добрый день.
Да, можно - используйте виртуальный контроллер CODESYS Control Win V3.
https://youtu.be/RgtfIOgKwTY

Jukki
14.04.2023, 15:50
Добрый день.
Сделал всё по видео, не могу подключиться к OPC UA CODESYS Control Win V3.
MasterScada 4D не находит ничего. Multi-Protocol MasterOPC Server сервер OPC UA видит, но не может подключиться даже анонимно (см. скрин).
Matrikon OPC UA Explorer пишет:
Connection failed due to BadIdentityTokenInvalid: The user identity token is not valid.(0x80200000).
Connection for OPCUAServer@User-PC - Session - 1 failed due to BadIdentityTokenInvalid: The user identity token is not valid.(0x80200000).

В логе CODESYS Control Win V3 всё хорошо, сервер OPC UA запускается.

Евгений Кислов
14.04.2023, 23:49
Добрый день.
При подключении к виртуальному контроллеру вам приходится вводить логин и пароль?

Jukki
17.04.2023, 07:41
Да, при первом запуске он попросил придумать логин пароль, а при подключении спрашивает их.

Евгений Кислов
17.04.2023, 07:43
Да, при первом запуске он попросил придумать логин пароль, а при подключении спрашивает их.

Тогда надо либо использовать их при подключении, либо (что проще на начальном этапе) разрешить "анонимное подключение":

67353

Jukki
17.04.2023, 08:51
Тогда надо либо использовать их при подключении, либо (что проще на начальном этапе) разрешить "анонимное подключение":

67353

Спасибо, разрешить "анонимное подключение" помогло.
Я имею в ввиду что CDS спрашивает этот пароль при установке соединения к Device и загрузке проекта.
OPC UA клиенты же не имели возможности их ввести, это видно на моём скрине. Странно что похоже только я столкнулся с такой проблемой, настройки CDS то стандартные.

Евгений Кислов
17.04.2023, 08:54
OPC UA клиенты же не имели возможности их ввести, это видно на моём скрине.

Для них отдельно надо настраивать доступ с логином/паролем или сертификатом.

DonGarik
26.08.2024, 14:48
Столкнулся с проблемой, не могу записать в переменную типа REAL новое значение. Считать я могу , а записать нет. Хотя с переменными типа INT проблем нет, напишите кто сталкивался

Тимур Назарбоев
27.08.2024, 09:15
Столкнулся с проблемой, не могу записать в переменную типа REAL новое значение. Считать я могу , а записать нет. Хотя с переменными типа INT проблем нет, напишите кто сталкивался

Добрый день, не могли бы вы уточнить как именно вы производите запись (какие функции чтения/записи используете и т п)?

DonGarik
16.12.2024, 18:23
Столкнулся с ещё одной проблемой. Masterscada долго подключается к OPC серверу (ПЛК 210). Также есть еще один баг, если перезагрузить комп на котором крутиться Masterscada, то при повторном подключении к OPC серверу связь с ним поддерживается несколько минут после чего связь отваливается на несколько минут и потом снова появляется. Проблема стабильно повторяется на разных контроллерах и оборудовании. Техподдержка с обоих сторон (овен и Инсайт) не помогла

Yakut
26.05.2025, 07:36
А мастер скада с кодесис работает только по OPC UA?
Можно ли просто по протоколу MODBUS TCP/IP передавать данные?

Евгений Кислов
26.05.2025, 07:38
А мастер скада с кодесис работает только по OPC UA?
Можно ли просто по протоколу MODBUS TCP/IP передавать данные?

Добрый день
Можно.

Olich_BAD
18.08.2025, 09:39
Добрый день, использую CODESYS 3.5 и MasterSCADA 4D. Использую протокол OPC UA. При перезагрузке контроллера или его остановки и затем запуска, то подключение происходит нормально. Но если загружать в плк новую программу отличающуюся на одну переменную, то MasterSCADA 4D отказывается переподключаться. Подключается, если сделать в MasterSCADA любое изменение и выполнить её исполнение. В чём может быть проблемма?

asuwcc
19.08.2025, 13:39
Добрый день, использую CODESYS 3.5 и MasterSCADA 4D. Использую протокол OPC UA. При перезагрузке контроллера или его остановки и затем запуска, то подключение происходит нормально. Но если загружать в плк новую программу отличающуюся на одну переменную, то MasterSCADA 4D отказывается переподключаться. Подключается, если сделать в MasterSCADA любое изменение и выполнить её исполнение. В чём может быть проблемма?

День добрый.

Ловите параметр Отказ в протоколе (обратный фронт) и вызывайте ФБ RestartPLC - Функция RestartPLC служит для перезагрузки исполнительной системы в режиме исполнения. Находится в библиотеке BaseObjects.Функции.Системные

Olich_BAD
19.08.2025, 14:53
Спасибо, неплохой вариант

МихаилГл
20.08.2025, 06:53
День добрый.

Ловите параметр Отказ в протоколе (обратный фронт) и вызывайте ФБ RestartPLC - Функция RestartPLC служит для перезагрузки исполнительной системы в режиме исполнения. Находится в библиотеке BaseObjects.Функции.Системные

А у меня другая проблема. При перезапуске среды исполнения (которая в редакторе, а не отдельно), данные по OPC UA почти всегда повторно не подтягиваются... Среда только при изменении тэгов в контроллере начинает оживать. Отказов нет. Просто не считывает данные с протокола. Как принудительно заставить обновить все переменные?

melky
20.08.2025, 08:39
OPC UA это же по подписке по умолчанию вроде. Или включен такой режим.

МихаилГл
20.08.2025, 22:01
OPC UA это же по подписке по умолчанию вроде. Или включен такой режим.

Да вот хз. Там в мсд4 стока галок, и подписку и прочее менял. Не понимаю как правильно настроить. Как принудительно переподписаться или как там. По идее порезагрузка плк решает все, но что, при каждом изменении визуализации это делать... Может есть более простое решение. Иногда помогает просто выключение среды редактирования. 1 раз из 10 проканывает. Вроде и к среде привык, как то не так бесит ее необычность, но такие косяки все равно неприятны...

Woodman
14.11.2025, 00:18
Да вот хз. Там в мсд4 стока галок, и подписку и прочее менял. Не понимаю как правильно настроить. Как принудительно переподписаться или как там. По идее порезагрузка плк решает все, но что, при каждом изменении визуализации это делать... Может есть более простое решение. Иногда помогает просто выключение среды редактирования. 1 раз из 10 проканывает. Вроде и к среде привык, как то не так бесит ее необычность, но такие косяки все равно неприятны...

Уточняйте используемую версию :)
Обновился до 1.3.9, перестали обновляться переменные если ПЛК перезагрузить. Обновляются только те которые меняются. Приходится перезапускать систему исполнения, хотя появилось новая настройка "Переподписка", но еще не пробовал.

Так вот в 1.3.9. появилась галочка "Переподписка при изменении модели сервера". Может поможет..

Woodman
14.11.2025, 00:22
Есть вопрос по командам, напишу пока здесь, чтобы темы не плодить.
При нажатии на кнопку в команду записывается значение 1 и соответсвенно идет на запись в OPC UA.
ПЛК видит 1 и записывает значение тега в 0.
Это значение я привязываю на вход команды.
Проблема состоит в том что если еще раз нажать на команду, 1 больше не записывается в команде, хотя временная метка меняется.
На выходе как висит 1 так и висит, на запись в OPC UA повторно не происходит...

МихаилГл
14.11.2025, 01:57
Есть вопрос по командам, напишу пока здесь, чтобы темы не плодить.
При нажатии на кнопку в команду записывается значение 1 и соответсвенно идет на запись в OPC UA.
ПЛК видит 1 и записывает значение тега в 0.
Это значение я привязываю на вход команды.
Проблема состоит в том что если еще раз нажать на команду, 1 больше не записывается в команде, хотя временная метка меняется.
На выходе как висит 1 так и висит, на запись в OPC UA повторно не происходит...

Добавь st программу, где проверяешь выход. Если выход не равен 0, делаешь его равным 0. У меня такой костыль.

PS В ms4d...

МихаилГл
14.11.2025, 02:01
Уточняйте используемую версию :)
Обновился до 1.3.9, перестали обновляться переменные если ПЛК перезагрузить. Обновляются только те которые меняются. Приходится перезапускать систему исполнения, хотя появилось новая настройка "Переподписка", но еще не пробовал.

Так вот в 1.3.9. появилась галочка "Переподписка при изменении модели сервера". Может поможет..

Я на их презентации слышал это, и задавал вопрос. Но переподписка какая-то была и в 1.3.8, она не помогала. И вроде они что-то в регул добавили, но не в овен. Короче я сделал другой костыль. В скаде нарисовал кнопку, а в плк по этой кнопке записываю всё регистры протокола во временные, потом их обнуляю, а через 10 сек временные возвращаю на место. При этом на эти 10 сек работу алгоритма приостанавливаю.

PS Кстати да, вроде на 1.3.9.0 уже и перезагрузка не очень помогает (как раз ключ приехал, поэтому уже тестирую не на 1.3.8.0 а на этой). Описанный костыль офигительно помогает. Кнопка доступна только пользователю с правами админа, так что теперь, если не переподписались теги, не проблема. При изменении в проекте жму кнопочку и вперед. Кстати, помогает также заливка в ПЛК чистого проекта (чтоб не онлайн подключение, а именно очищенное), но костыль работает, так что решений много, но иногда бесит (пока это решение не найдешь)...

Woodman
14.11.2025, 11:14
Добавь st программу, где проверяешь выход. Если выход не равен 0, делаешь его равным 0. У меня такой костыль.

PS В ms4d...

Да, такой вариант сделал, но когда команд около 200 то это явно попахивает костылями.

Woodman
14.11.2025, 11:18
В скаде нарисовал кнопку, а в плк по этой кнопке записываю всё регистры протокола во временные, потом их обнуляю, а через 10 сек временные возвращаю на место. При этом на эти 10 сек работу алгоритма приостанавливаю.


Ничего себе решение жесткое. даже не представляю что скажут потомки.
я придумал сделать маленькое колебание сигнала раз в секунду если оно не меняется :)

МихаилГл
14.11.2025, 11:53
Да, такой вариант сделал, но когда команд около 200 то это явно попахивает костылями.

Все дискреты сведены в dword-ы, т.е. у меня 4 командных слова, где я управляю механизмами. И я проверяю не каждый bool, а сразу 32 в одном слове, проверив, равны ли они 0. Хотел до lword-а сжать, но к сожалению динамика в визуализации МС4Д тока 32 бита слова понимает, ссылки на остальные уже не видит (косяк среды).


Ничего себе решение жесткое. даже не представляю что скажут потомки.
я придумал сделать маленькое колебание сигнала раз в секунду если оно не меняется :)

А дискреты? Я же не вижу сигналы от ПЛК, ну или там протокол косячит. Ну а после первого изменения, да, все Ок.

1exan
14.11.2025, 13:00
Есть вопрос по командам, напишу пока здесь, чтобы темы не плодить.
При нажатии на кнопку в команду записывается значение 1 и соответсвенно идет на запись в OPC UA.
ПЛК видит 1 и записывает значение тега в 0.
Это значение я привязываю на вход команды.
Проблема состоит в том что если еще раз нажать на команду, 1 больше не записывается в команде, хотя временная метка меняется.
На выходе как висит 1 так и висит, на запись в OPC UA повторно не происходит...

Поищите в протоколах, в своем устройстве такую настройку
86732

Woodman
14.11.2025, 15:48
А дискреты? Я же не вижу сигналы от ПЛК, ну или там протокол косячит. Ну а после первого изменения, да, все Ок.

Что- что, а дискреты упаковываем, так тэгов не напасешься.

МихаилГл
14.11.2025, 16:14
Что- что, а дискреты упаковываем, так тэгов не напасешься.

Ты проверь что 1exan предложил, и расскажи, получилось или нет. Самому лень)

Хотя у меня плк дома, на выходных может сам проверю. Но что-то мне не верится, не может быть всё так легко. Как плк то поймёт, или это протокол на его стороне тоже умеет...

Woodman
17.11.2025, 15:54
Поищите в протоколах, в своем устройстве такую настройку
86732

Добрый день, проверили, все работает замечательно, и то что доктор прописал.
напомнило мем как выучить MasterSCADA за 21 день.

1exan спасибо за совет.

МихаилГл
18.11.2025, 07:45
Добрый день, проверили, все работает замечательно, и то что доктор прописал.
напомнило мем как выучить MasterSCADA за 21 день.

1exan спасибо за совет.

Точно, работает. Чисто по наблюдениям: если у входа параметр не изменился, то переменная не меняется. А если вход сбросился (аналоговый или дискретный), и на выходе старое значение, то тогда, когда заново вводишь это значение , оно не меняется, но метка времени изменяется и параметр снова уходит во вне на контроллер.

Интересный механизм. Мне как раз для аналогового задания не удавалось этот косяк убрать. Оказывается мой косяк из-за незнания...

Я за 2 недели с нуля проект более-менее работоспособный набросал, при этом в мастер скаде никогда и не работал. Только год назад с SQL запросом разбирался. Но это считай что не знал ее совсем.

Так что 21 день - это даже много...

PS И похоже переменные адекватно обновляются и сразу подтягиваются при перезаливке проекта без костыля на переподключение переменных... Ну это плюс в карму тогда разрабам, и минус мне, за непонимание...
Скада приобретает более положительный отзыв. Остался один минус, это то, что переменную к динамике можно только перетаскиванием мышью прицепить. Или есть другое решение? А то каждую динамику в визуализации так не натаскаешь мышью, рука устанет...

PS2 Рано обрадовался. Хорошо что не удалил кнопку переподключения переменных. Через 3 часа редактирования все таки отвалились переменные. Ну ладно...

Woodman
18.11.2025, 12:24
Через 3 часа редактирования все таки отвалились переменные. Ну ладно...

А помогает перезагрузка сервера mplc в MasterSCADA Monitor?
Он же переподключится и на все подпишется.

МихаилГл
18.11.2025, 12:33
ХЗ, не пробовал.

PS А я как то это забыл (не знал и забыл). Я же до этого юзал некоммерческую демку... Надо этот механизм тоже проверить.

PS2 Кстати, скада вертится на сенсорном ПК. Там выставлено "во весь экран". На производстве в поле к этой кнопке в трее по идее не добраться, даже если она и работает и переподписывается на теги...

МихаилГл
18.11.2025, 13:19
А помогает перезагрузка сервера mplc в MasterSCADA Monitor?
Он же переподключится и на все подпишется.

Так, удалось проверить. Перезагрузка mplc в MasterSCADA Monitor не помогает. Только моя волшебная кнопочка.

1exan
18.11.2025, 15:04
Есть вопрос по командам, напишу пока здесь, чтобы темы не плодить.
При нажатии на кнопку в команду записывается значение 1 и соответсвенно идет на запись в OPC UA.
ПЛК видит 1 и записывает значение тега в 0.
Это значение я привязываю на вход команды.
Проблема состоит в том что если еще раз нажать на команду, 1 больше не записывается в команде, хотя временная метка меняется.
На выходе как висит 1 так и висит, на запись в OPC UA повторно не происходит...

Если команды отрабатываются в ПЛК по фронту, можно использовать не установку 1, а "послать импульс" (как-то так примерно называется, установить разумное значение длительности импульса). Просто будет отправка команды записи 0 в уже сброшенную команду

Woodman
18.11.2025, 18:01
Если команды отрабатываются в ПЛК по фронту, можно использовать не установку 1, а "послать импульс" (как-то так примерно называется, установить разумное значение длительности импульса). Просто будет отправка команды записи 0 в уже сброшенную команду

Это я для пример написал 1, пишутся разные значения в зависимости от команды. (или я чего то не знаю и испульс может не только 1 посылать? )
а Выдать импульс используем для переменных типа BOOL.

МихаилГл
18.11.2025, 18:05
Если команды отрабатываются в ПЛК по фронту, можно использовать не установку 1, а "послать импульс" (как-то так примерно называется, установить разумное значение длительности импульса). Просто будет отправка команды записи 0 в уже сброшенную команду

Да, кстати. А если я в dword воткнул 32 bool для компактности и ограничения по тегам... Тут фронт не прокатит. Только надежда на изменение по времени или костыль со сбросом в st мастер скады

1exan
19.11.2025, 04:13
Да, кстати. А если я в dword воткнул 32 bool для компактности и ограничения по тегам... Тут фронт не прокатит. Только надежда на изменение по времени или костыль со сбросом в st мастер скады

Если это импульсные команды - почему не прокатит?

1exan
19.11.2025, 04:16
Это я для пример написал 1, пишутся разные значения в зависимости от команды. (или я чего то не знаю и испульс может не только 1 посылать? )
а Выдать импульс используем для переменных типа BOOL.

Для числовых команд такого нет. Можно программку сделать чтобы на заданное время нужное значение выставляла, а потом сбрасывала опять в 0

Woodman
19.11.2025, 12:19
Для числовых команд такого нет. Можно программку сделать чтобы на заданное время нужное значение выставляла, а потом сбрасывала опять в 0

Текущий вариант с записью одного и тоже значения по изменению метки времени устраивает.
Писать различные программки\скрипты стараюсь в крайних случаях.

melky
19.11.2025, 12:22
ок, вариант. Реализация в ПР, ПЛК - пишем туда 1, ПЛК выполняет действие и сбрасывает переменную в 0.

У вас разделены чтение и запись, если правильно понимаю, как это реализовать если у вас постоянная 1 и пишется периодически?
Вариант 2. Не предусмотрели сброс в переменной в 0 после выполнения действия, а надо записать 1, потом 0. Какие действия?

МихаилГл
19.11.2025, 13:09
ок, вариант. Реализация в ПР, ПЛК - пишем туда 1, ПЛК выполняет действие и сбрасывает переменную в 0.

У вас разделены чтение и запись, если правильно понимаю, как это реализовать если у вас постоянная 1 и пишется периодически?
Вариант 2. Не предусмотрели сброс в переменной в 0 после выполнения действия, а надо записать 1, потом 0. Какие действия?

Да всё решено просто, у ТС думаю так же. У меня: В плк команда обрабатывается и ставится в 0. При этом в скаде скрипт, который смотрит ВЫХОДНУЮ переменную скады, и обнуляет её. Вот вам и импульс. Плк успевает увидеть 1цу. Это по второму варианту. При этом у меня dword, и я сразу в 0 сбрасываю как бы 32 команды. Но это теперь и с выбором изменения по времени думаю будет работать. А для первого варианта похоже скаде сравнивает вход и выход, и если огни не равны, то посылает переменную снова. А вообще я уже запутался. Работает и ладно. Рано костыли удалять.

Woodman
19.11.2025, 15:34
ок, вариант. Реализация в ПР, ПЛК - пишем туда 1, ПЛК выполняет действие и сбрасывает переменную в 0.

У вас разделены чтение и запись, если правильно понимаю, как это реализовать если у вас постоянная 1 и пишется периодически?
Вариант 2. Не предусмотрели сброс в переменной в 0 после выполнения действия, а надо записать 1, потом 0. Какие действия?

В OPC-UA обычно все работают по подписке, поэтому да, чтение и запись разделена.

не вижу ничего плохого, хоть с и сброс выполняется сразу.
но если представить что прилетела запись 1, хотя там уже 1, то команда же выполняется..
если алгоритм в ПЛК кривой и забыл 0 записать, что что тут уже.
а вообще да, что-то в дебри зашли :)