Просмотр полной версии : C# MS4D | Управление параметром из 2х скриптов
Здравствуйте! Знакомлюсь с MS4D, есть 2 скрипта(программы объекта) на c#:
Устанавливает параметр State при некоторых условиях, исполняется периодически.
if(Alert == 2 || Alert_1 == 2 || Alert_2 == 2 || Alert_3 == 2)
{
State = 2;
}
Действие по кнопке квитировать, сбрасывает State.
public override void Execute()
{
State = 0;
}
Проблема в том, что первый скрипт "зажимает" в состоянии тревоги, даже если условие перестало выполняться. Собственно вопрос, есть ли возможность не менять состояние выхода при не выполнении условия?
Если Alert равен чему-то, то даже если вы сбросите, он снова появится (изменится State) и это нормально. Вы же не Alert сбрасываете своим вторым скриптом, а свою переменную State
Опять же, у вас Alert сработал, вы сбросите (используя промежуточную переменную), а потом у вас сработает Alert_1 и ничего не произойдет, так как вы промежуточной переменной запретите срабатывать всем Алертам.
Имхо, тут нужен массив или словарик, в зависимости сколько у вас там Алертов. И в нем сделать промежуточные переменные, чтобы когда вы квитируете, оно больше не реагировало.
Я правильно понимаю, что от оборудования, прилетает ошибка, что-то засветилось, зажужжало, вы просто отключаете это жужжание - то есть оператор принял и оповещен, но само оборудование то продолжает быть в ошибке.
Есть датчики, в них заданы уставки, при сработке уставок они ставят свою переменную Alert в значение 1 либо 2:
if(T.Value >= Hi && T.Value < HiHi)
{
//Верхняя предупредительная уставка
Alert = 1;
}
else if(T.Value >= HiHi)
{
//Верхняя аварийная уставка
Alert = 2;
}
else if(T.Value <= Lo && T.Value > LoLo)
{
//Нижняя предупредительная уставка
Alert = 1;
}
else if(T.Value <= LoLo)
{
//Нижняя аварийная уставка
Alert = 2;
}
else
{
Alert = 0;
//Нормальный режим
}
от значения Alert привязываются визуальные параметры в окне, эта логика работает отлично.
Но, нужно в основном окне при сработке любого Alert на датчиках - подсветить фон всего окна красным, пока не квитируется кнопкой(то есть, без разницы уставка в сработке или нет, если было - то меняем фон пока не квитируют). Для этого создал параметр State, от него зависит цвет фона, это тоже работает. Но программа 1 после сработки уставки видимо запоминает последнее значение или как(не силен в промышленном программировании), то есть при исполнении вижу, что на выходе программы2 State = 0, но на выходе программы1 остается State = 2, хотя Alert не в сработке
Разобрался, видимо программе на выходе нужно всегда какое то значение отдавать, то есть если один раз задали 2 и допустим в следующей итерации не задаем значение(так как условие не выполняется), то отдаст туже 2, надо же что-то отдать...
Пытался подать это же значение на вход и при не выполнении условия - отдавать то, что на входе получили, но видимо не успевает подхватить значение.
Вышел из положения так - сделал флаг, при квитировании ставлю его в true, в программе 1 при невыполнении условия смотрю этот флаг, если он true - cбрасываю значение и возвращаю флаг в false
Ну, а если у вас с датчика продолжает переть HiHi ? вы сбросили окно (цвет) и он тут же вернулся обратно в красный? или вы квитированием еще что-то сбрасываете?
Если все еще сработан HiHi, то продолжает красным гореть все верно, другого и не требуется. Это как предупреждение, что вот была сработка - посмотри в чем дело. А если висит в сработке, то так и должно гореть - пока из сработки не выйдет.
ага, и если там звук, то оператор хоть пообжимайся ? почему вдруг ничего не сбрасывается :)
с одной стороны понятно, сбросит и забудет, с другой стороны, запись в журнал - Федя сбросил, но никому ничего не сказал.
Необходимо ещё обратить внимание на это:
Вопрос:
Как реализовать несколько входящих связей в параметре?
Ответ:
Диспетчеризация входящих связей для параметров проекта в MasterSCADA 4D в настоящий момент не поддерживается.
Таким образом, для корректной работы должна быть только одна входящая связь.
Если в проекте необходима диспетчеризация нескольких связей, то такую диспетчеризацию необходимо проводить в программе (например ST или FBD).
https://support.iek-digital.ru/ru/knowledge_base/art/85/cat/10/neskolko-vhodjaschih-svjazej-v-parametre
Ну разве AND кто-то отменял? а уже выход его это одна связь. (пример)
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot