PDA

Просмотр полной версии : Коллизии с кнопками управления при реализации логики в MasterOPC



Димон_11
02.07.2025, 19:23
Добрый день, я новичок в MasterScada, есть такая задача:
1) У некоторых объектов есть параметр Работа(bool), который генерируется в MasterOPC по своим законам и со своими зависимостями.
2) В MasterScada настроены 2 кнопки для влияния на этот параметр: "Старт" и "Стоп" (для удобства).
3) Пользователь, когда кнопки "Старт" и "Стоп" разблокированы может на них нажимать и соответственно значение должно приходить в OPC. При этом OPC может отвергнуть это значение по своим условиям или при выборе определённой предустановки выставить нужное значение.
4) В Masterscada для управления реализовано 2 параметра: "работа" и "уставка работы". При нажатии нужной кнопки в действиях по клику мыши происходит установка параметра "уставка работы" в true или false соответственно. Параметр "работа" используется для подсветки текущего состояния.
5) В итоге, если пользователь нажал кнопку стоп -> "уставка работы" перешла в false -> данные передались в OPC -> а дальше два варианта, алгоритмом в OPC разрешено в данный момент выставить false или не разрешено -> так вот, если не разрешено, то он обратно выставляет true.

При этом в уставке остаётся false, и при следующем нажатии на кнопку "Стоп" вообще ничего не будет происходить, т.к. не менялось значение.

Как возможно это победить или оптимизировать?


P. S.
Пробовал писать fbd скрипт с таймером tonof который каждые 3 секунды по переднему фронту ставит значение из параметра "работа" в параметр "уставка работы", но при этом кнопки перестают нормально работать-> начинают по 5 раз пытаться менять значение и в итоге ничего не выходит. Да и к тому же это изначально проигрышный вариант.

Кто, что посоветует?)

1exan
02.07.2025, 19:40
Добрый день, я новичок в MasterScada, есть такая задача:
1) У некоторых объектов есть параметр Работа(bool), который генерируется в MasterOPC по своим законам и со своими зависимостями.
2) В MasterScada настроены 2 кнопки для влияния на этот параметр: "Старт" и "Стоп" (для удобства).
3) Пользователь, когда кнопки "Старт" и "Стоп" разблокированы может на них нажимать и соответственно значение должно приходить в OPC. При этом OPC может отвергнуть это значение по своим условиям или при выборе определённой предустановки выставить нужное значение.
4) В Masterscada для управления реализовано 2 параметра: "работа" и "уставка работы". При нажатии нужной кнопки в действиях по клику мыши происходит установка параметра "уставка работы" в true или false соответственно. Параметр "работа" используется для подсветки текущего состояния.
5) В итоге, если пользователь нажал кнопку стоп -> "уставка работы" перешла в false -> данные передались в OPC -> а дальше два варианта, алгоритмом в OPC разрешено в данный момент выставить false или не разрешено -> так вот, если не разрешено, то он обратно выставляет true.

При этом в уставке остаётся false, и при следующем нажатии на кнопку "Стоп" вообще ничего не будет происходить, т.к. не менялось значение.

Как возможно это победить или оптимизировать?


P. S.
Пробовал писать fbd скрипт с таймером tonof который каждые 3 секунды по переднему фронту ставит значение из параметра "работа" в параметр "уставка работы", но при этом кнопки перестают нормально работать-> начинают по 5 раз пытаться менять значение и в итоге ничего не выходит. Да и к тому же это изначально проигрышный вариант.

Кто, что посоветует?)

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

С таймерами я тоже сначала пробовал - ненадёжный вариант

Димон_11
02.07.2025, 20:49
Есть в протоколах параметр "Способ записи" - попробуйте поставить вместо значения по умолчанию "По изменению" значение "По изменению времени". Тогда отправка команды записи будет производиться даже если само значение не изменилось, а поменялась только метка времени значения на выходе
84647

С таймерами я тоже сначала пробовал - ненадёжный вариант

Спасибо за совет! Буду пробовать! Насколько понимаю, переменные должны быть в этом случае в объектах не просто bool a SYSTEM_BOOL_PARAM?

kondor3000
02.07.2025, 21:04
Спасибо за совет! Буду пробовать! Насколько понимаю, переменные должны быть в этом случае в объектах не просто bool a SYSTEM_BOOL_PARAM?

Использовать можно и то и то, желательно, чтобы они были одинаковыми во всех блоках.

МихаилГл
03.07.2025, 04:43
Тоже заметил такое, но поборол скриптом на ST, просто нажатие кнопки записывает в переменную TRUE, а скрипт на ST проверяет: если переменная TRUE, он ее делает в FALSE. А это свойство, что выше, не видел, интересно, работает ли оно...

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

Димон_11
06.08.2025, 18:05
Спасибо! Хороший совет, я проверил, действительно хорошо работает, отслеживание по времени получается удобно, единственное надо учесть, что у связываемых переменных тоже должен быть составной тип данных с меткой времени

Димон_11
06.08.2025, 18:05
Как реализовали в итоге? Через метки времени?

1exan
06.08.2025, 18:19
Как реализовали в итоге? Через метки времени?

Если это мне, то да - я делаю уставку записи тегов "По изменению времени"