Здравствуйте! Обнаружился неприятный баг в версии 2.2.7.1:
Необходим универсальный скрипт, который обрабатывал бы два DI сигнала и менял цветовую индикацию разгных объектов. Пусть будут два сигнала DI_1 и DI_2. На основную переменную - DI_1, на дополнительную - DI_2. Объекты Клапан и Изображение.
Цветовая схема:
Если DI_1 = 1 DI_2 = 0 - зелёный цвет;
Если DI_0 = 1 DI_2 = 1 - серый цвет;
Если DI_1 = 1 DI_2 = 1 - красный цвет;
Если DI_1 = 0 DI_2 = 0 - серый цвет, жёлтое моргание;
Пишем скрипт (листинг ниже) и подвязываем его на оба события по основному и дополнительному тэгу. С приведённым листингом - объект изображение отрабатывает правильно по цветовой схеме, а вот клапан - нет.
Клапан работает двояко: если был сигнал DI_1 = 0, DI_2 = 1, пришло событие DI_1 = 1 - клапан становится зелёным (так не должно быть), а изображение - красным (как и положено).
Если был сигнал DI_1 = 1, DI_2 = 0, пришло событие DI_2 = 1 - клапан становится карсным как и положено.
Другие переменные на клапан не подвязывались.
Листинг:
var
Color1_0, Font1_0, Color0_1, Font0_1, Color1_1, Font1_1, Color0_0, Font0_0, Flash1_1, Flash0_0: Cardinal;
begin
Color1_0 := $00CE00; //Green
Font1_0 := clBlack;
Color0_1 := clLightGray;
Font0_1 := ClBlack;
Color1_1 := ClRed; //Green
Font1_1 := clBlack;
Color0_0 := clLightGray;
Font0_0 := clBlack;
Flash1_1 := ClNone;
Flash0_0 := clYellow;
//Если вызвавший объект - изображение
if Sender is TM_Image then
with Sender as TM_Image do
begin
if ((Variable.AsBool = true) AND (VariableEX.AsBool = false)) then
begin
Alpha := 255; Color := Color1_0;
FlashColor := clNone;
end;
if ((Variable.AsBool = false) AND (VariableEX.AsBool = true)) then
begin
Alpha := 255; Color := Color0_1;
FlashColor := clNone;
end;
if ((Variable.AsBool = true) AND (VariableEX.AsBool = true)) then
begin
Alpha := 255; Color := Color1_1;
FlashColor := Flash1_1;
end;
if ((Variable.AsBool = false) AND (VariableEX.AsBool = false)) then
begin
Alpha := 255; Color := Color0_0;
FlashColor := Flash0_0;
end;
end;
//Если вызвавший объект - клапан
if Sender is TM_Valve then
with Sender as TM_Valve do
begin
if ((Variable.AsBool = true) AND (VariableEX.AsBool = false)) then
begin
Alpha := 255; Color := Color1_0;
FlashColor := clNone;
end;
if ((Variable.AsBool = false) AND (VariableEX.AsBool = true)) then
begin
Alpha := 255; Color := Color0_1;
FlashColor := clNone;
end;
if ((Variable.AsBool = true) AND (VariableEX.AsBool = true)) then
begin
Alpha := 255; Color := Color1_1;
FlashColor := Flash1_1;
end;
if ((Variable.AsBool = false) AND (VariableEX.AsBool = false)) then
begin
Alpha := 255; Color := Color0_0;
FlashColor := Flash0_0;
end;
end;
end.
P.S.: у нас приобретены лицензии Simple Scada 2.2.7.1. версии Professional (с расиренной техподдержкой, ФКП "Комбинат "Каменский").
Просим также прислать последниие версии скады (ссылки наскачивание) на наш email.