Вход

Просмотр полной версии : MasterSCADA 4D и OPS UA



Lisov-R
03.07.2023, 14:08
Добрый день!
По великой нужде столкнулся с MS4D, не буду описывать всего моего удивления в этом чуде отечественного полета мысли разработчиков.
Проблема или недопонимание работы ПО в следующем:
В OPС сервере на ПЛК есть переменные in/out типа BOOL, накидал простую библиотеку в которой отображается состояние переменных и изменяется их состояние. Библиотечные переменные к которым подписываются переменные из OPС ставил тип BOOL и менял на SYSTEM_BOOL_PARAM. Если перетягиваешь переменную как выход то изменяет ее в OPС, если как вход то читает. Но нифига не работает одновременно, как выйти из этого порочного круга.

Спорягин Кирилл
03.07.2023, 15:29
А чего не описать полет мысли разработчиков?!
Будет интересно почитать...

Lisov-R
03.07.2023, 16:25
А чего не описать полет мысли разработчиков?!
Будет интересно почитать...

Ну для меня не понятно для чего сделано что перетаскивание переменной это единственный вариант для прописывания переменной в свойствах или функциях. Это хорошо когда ты один насосик как в видосиках делаешь, а если у тебя более сотни модулей и несколько тысяч переменных. Создал библиотеку в которой 18 переменных, к ним нужно перетащить значение с протокола которых 784, и еще по два раза так как входное и выходное это разные вещи, итого получаем что в долбаном интерфейсе через километр прокрутки я ДОЛЖЕН протащить 1568 раз. В свойствах примитивов или иных объектов нельзя прописать зависимость от нескольких переменных, как они позиционируют что перетащил переменную и прописал на нее действия и это избавляет от скриптов, так это же и рождает доп скрипты. Переменная не может быть как входной так и выходной как в нормальной ST коде. Нафига нужно входные и выходные переменные, можно же работать как у ВСЕХ просто с переменной. Даже в CodeSys когда создаеш ФБ то указываеш переменные in, out или inout и это идеально работает. Про графику я вообще молчу, труб нарисовали каких хочешь, а с кнопками повозись сам, скопировать свойства я не нашел или нет. У меня на данный момент 784 переменных с OPC сервера на ПЛК, чтоб прочитать переменные тебе нужен рабочий ПЛК с залитой программой и это на стадии разработки. Импорта/экспорта переменных НЕТ, редактирование и добавление не возможно, но если очень хочется то можно но это 3.14здец как (я сам костыли уже придумал). Решил тут использовать в графике "панель вкладок" это жуть. Смена расположения кнопок вкладок не как не отражается в среде разработки, но хоть реализуется в RT. Соответствено получаешь мучение при компановке окна. Размер вкладок в "панель вкладок" бывает что вообще не изменяется, от чего глюк зависит не понятно, в разработке прописал 1000х950 в RT отображается кусок окна 400х200. Свойство сохранять пропорции и тип координат тоже загадочная вещь, то работает отлично, но при "ретроградном меркурии" Х пойми куда все девается. Статус бар в шаблоне экрана я так и не впихнул, ну как не впихнул, опять же в разработке он идеально смотрится, в RT его тупо НЕТ. И это я только начал создавать проект в этом чуде, что будет далее. Еще не дошел до журнала действий оператора по аналогии как аварии чтоб можно было отобразить, но говорят не возможно. Предстоит как то придумать создание маршрутов (последовательность включения и отключения агрегатов) , боюсь что это будет страшно. Я даже еще не осилил библиотеку управлением агрегата, ну не хочется мне прописывать две переменных на одну из ОРС сервера.
Мне кажется что разработчики ни когда даже не пытались посмотреть что делают другие люди. Ну посмотрите на Шнайдер и Сименс, ну хотябы на CodeSys у которого визуализация можно сказать ка приятное дополнение.

Lisov-R
03.07.2023, 22:55
У меня есть переменная в ПЛК Run читается и пишется через OPC UA на ПЛК. Перемененная Run управляет запуском агрегата, он в логике ПЛК может сброситься в False по аварии. Я смерился что для чтения и записи в созданном объекте нужны разные переменные, создал Run_In и Run_Out. Создал две кнопки СТАРТ и СТОП с событием установить параметр Run_Out в True и False сответственно. Все не чего, но если был Run_Out:=True который записался в ПЛК в Run и по какой то причине сброшен в False то переменная в скаде Run_Out так и стается True. Для того чтоб запустить заново нужно клацнуть вначале по кнопке СТОП и затем СТАРТ чтобы запустить заново. Я решил как то сделать обмен состоянием от Run_In к Run_Out, следующим образом68610 . Переменная Run_Out меняет свое состояние при изменении Run_In.
И как мне казалось что везде работающая развязка при помощи импульса по фронту должна работать и переменная Run_Out спокойно должна менять состояние по нажатию кнопок, я ошибался все это не для MS4D.
Вопрос к знатокам где я косячу, как мне победить этот порочный круг с записью и чтением переменной.

Lisov-R
04.07.2023, 23:31
Я не отрицаю что мало чего знаю в MS4D, столкнулся первый раз. Мои действия наверное и не правильные, но я другого решения как прикрутить костыли я не нашел.
Еще раз, переменная с ОРС сервера на ПЛК в MS4D попадает как вход и выход (как две по факту переменных). Мне нужно в MS4D отслеживать ее состояние и изменять ее, но также она может менять значение логикой заложенной в ПЛК.
Если в скаде было нажато ВКЛ , а ПЛК сбросило зачение то в скаде нужно было нажать кнопку ВЫКЛ, а потом ВКЛ чтоб произошла смена значения и записалось в ПЛК (постоянную запись нельзя ставить ибо получаем вообще не управляемую вещь). Пришел к тому что нужно передать состояние входа переменной на выход. Реализовал при помощи тригера и как мне казалось могу уже упралять значением с кнопок при нажатии мыши командой установить параметр. Не заработало, не хотела менять значение, не знаю по какой логике. В итоге завел еще как в MS4D называют параметр (по мне это переменная) на включение и выключение. В кнопках прописал на нажатие мыши выдать импульс. получил такие костыли
68638
Все заработало как положено. Мне интересно почему переменная in/out идет как две разные переменные (в скадах где я работал такого не было), почему переменная в программе не меняется с кнопок из окна, и сто за хрень с языком LD (бывает и хуже) почему нельзя работать с входами и выходами ФБ как у большинства, контакт и катушку можно сразу поставить отрицание, Set или Reset.
68639

Спорягин Кирилл
06.07.2023, 09:12
К сожалению, нет возможности детально разбираться во всех Ваших замечаниях.
Скажу лишь, что, как мне кажется, большинство Ваших проблем от того, что Вы не чувствуете пока концепцию работы в Мастерскада.
Предложу методические материалы собственного авторства. Хотя, далеко не на все вопросы (или даже только на малую часть) там есть ответы.
Искренне надеюсь, что они будут полезны: https://cloud.mail.ru/public/rjK5/W6vxijZZz

slong
27.01.2025, 12:04
Я не отрицаю что мало чего знаю в MS4D, столкнулся первый раз. Мои действия наверное и не правильные, но я другого решения как прикрутить костыли я не нашел.
Еще раз, переменная с ОРС сервера на ПЛК в MS4D попадает как вход и выход (как две по факту переменных). Мне нужно в MS4D отслеживать ее состояние и изменять ее, но также она может менять значение логикой заложенной в ПЛК.
Если в скаде было нажато ВКЛ , а ПЛК сбросило зачение то в скаде нужно было нажать кнопку ВЫКЛ, а потом ВКЛ чтоб произошла смена значения и записалось в ПЛК (постоянную запись нельзя ставить ибо получаем вообще не управляемую вещь). Пришел к тому что нужно передать состояние входа переменной на выход. Реализовал при помощи тригера и как мне казалось могу уже упралять значением с кнопок при нажатии мыши командой установить параметр. Не заработало, не хотела менять значение, не знаю по какой логике. В итоге завел еще как в MS4D называют параметр (по мне это переменная) на включение и выключение. В кнопках прописал на нажатие мыши выдать импульс. получил такие костыли
68638
Все заработало как положено. Мне интересно почему переменная in/out идет как две разные переменные (в скадах где я работал такого не было), почему переменная в программе не меняется с кнопок из окна, и сто за хрень с языком LD (бывает и хуже) почему нельзя работать с входами и выходами ФБ как у большинства, контакт и катушку можно сразу поставить отрицание, Set или Reset.
68639

Здравствуйте.
Так же столкнулся с данной проблемой.
И да, так же приходится придумывать всякие "костыли" при изменении переменной в контроллере и переменными в MasterSCADA Базовый канал->(со Входа не передается на Выход).
И нет четкого описания как это правильно должно работать.
У кого то есть работающие правильно примеры, например реализации кнопок управления двигателем и т.д.
Поделитесь мыслями.

1exan
27.01.2025, 13:47
Здравствуйте.
Так же столкнулся с данной проблемой.
И да, так же приходится придумывать всякие "костыли" при изменении переменной в контроллере и переменными в MasterSCADA Базовый канал->(со Входа не передается на Выход).
И нет четкого описания как это правильно должно работать.
У кого то есть работающие правильно примеры, например реализации кнопок управления двигателем и т.д.
Поделитесь мыслями.

Если хотите управлять чем-то битовыми командами со MS4 - делайте эти команды импульсными и без обратной связи (избавите себя от многих проблем), при этом можете в скаде использовать упаковку битовых команд в регистр.
Если хотите писать и читать переменную со скады - делайте в скаде отдельный битовый тег этой переменной

melky
27.01.2025, 13:49
На примере когда мы подаем сигнал "Включить" а ПЛК его принимает и сам сбрасывает переменную. Неужели в MS4D нет такой простой комбинации как всегда подавать "Включить" в команде? (просто принудительная отправка true) ?

slong
27.01.2025, 14:48
Если хотите управлять чем-то битовыми командами со MS4 - делайте эти команды импульсными и без обратной связи (избавите себя от многих проблем), при этом можете в скаде использовать упаковку битовых команд в регистр.
Если хотите писать и читать переменную со скады - делайте в скаде отдельный битовый тег этой переменной

Согласен. В принципе я в проектах к этому и пришел.
В свойствах кнопки -> Выдать импульс -> В программе PLC устанавливается определенный бит (Это Set)
В свойствах кнопки -> Выдать импульс -> В программе PLC сбрасывается бит или триггер (Это Reset)

Но этим способом мы просто обходим проблему про которую спрашивал выше (типа другое решение), а именно корректная работа с in/out переменными не ясна.

1exan
27.01.2025, 14:57
На примере когда мы подаем сигнал "Включить" а ПЛК его принимает и сам сбрасывает переменную. Неужели в MS4D нет такой простой комбинации как всегда подавать "Включить" в команде? (просто принудительная отправка true) ?

С этим как раз проблем нет

melky
27.01.2025, 15:01
1exan так а в чем тогда проблема то? это нормально если ПЛК сбрасывает бит. Как вариант, зная что ПЛК сбрасывает бит, или даже не сбрасывает в команде отправлять триггерным способом. На входе 0 или 1 - отправить в команде противоположное значение.

1exan
27.01.2025, 16:11
1exan так а в чем тогда проблема то? это нормально если ПЛК сбрасывает бит. Как вариант, зная что ПЛК сбрасывает бит, или даже не сбрасывает в команде отправлять триггерным способом. На входе 0 или 1 - отправить в команде противоположное значение.

Проблема с битовыми переменными, которые надо переключать в противоположное состояние - т.н. "кнопки с фиксацией"

melky
27.01.2025, 16:26
1exan И? например ПЛК ничего не сбрасывает. Мы получаем от него некое число, где бит Х = 0, при отправке команды отправлять в число бит Х как !Х то есть по триггерному варианту. При следующем чтении из ПЛК мы получим противоположный бит Х. То есть бит Х входной переменной по сути нам и показывает состояние кнопки.

Или в MS4D с таким подходом все глухо?

1exan
27.01.2025, 19:15
1exan И? например ПЛК ничего не сбрасывает. Мы получаем от него некое число, где бит Х = 0, при отправке команды отправлять в число бит Х как !Х то есть по триггерному варианту. При следующем чтении из ПЛК мы получим противоположный бит Х. То есть бит Х входной переменной по сути нам и показывает состояние кнопки.

Или в MS4D с таким подходом все глухо?

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

melky
27.01.2025, 22:21
блин, в очередной раз обламываете смотреть очередную MS4D :) какая-то концепция на постоянных костылях.
в RapidScada такой хрени нет. можно хоть постоянно долбить 1-цей в устройство, хоть 0-ем в команде. И есть внеочередной опрос после команды.

1exan
28.01.2025, 04:16
блин, в очередной раз обламываете смотреть очередную MS4D :) какая-то концепция на постоянных костылях.
в RapidScada такой хрени нет. можно хоть постоянно долбить 1-цей в устройство, хоть 0-ем в команде. И есть внеочередной опрос после команды.

В общем-то там не так уж всё плохо, возможно и эти вопросы можно решить