Вопросы по скриптам в Simple-Scada 2

Автор Simple-Scada, 29 января 2016, 15:19:20

deldemo

Администратор. Огромное спасибо за моментальную помощь !!!!!!!!!!!!!!!!!

deldemo

И еще один вопросик.
Можно ли как то сменить цвет системного сообщения ?

Simple-Scada

Пока нет и для этого нужно использовать собственные окна. Но можем добавить такую функцию.

deldemo

Было бы неплохо. Просто системные сообщения очень хорошо акцентируют на себе внимание. Ими очень удобно пользоваться для важных оповещений.

Vladimir

Пример скрипта
 
Код: pascal
begin
   IF (S21.Value =true) then S21_shape.Color := clgreen
                        else S21_shape.Color := clgray;
end

Если я меняю название объекта с S21_shape к примеру на S21_klapan, то приходится менять и код скрипта, т.к. объекта S21_shape больше не существует. Возможно ли сделать, чтобы название объекта автоматически менялось и в редакторе скриптов?

Simple-Scada

#80
Vladimir, в ближайшее время этой возможности не будет. Лучше всего сначала правильно именовать объекты, а затем писать скрипты, чтобы исключить переименование. Но нужно признать - это не всегда удается. В этом случае нужно использовать универсальные скрипты везде, где это возможно. Если оба варианта не подходят, то придется все-таки переименовывать.

beloleg86

#81
Подскажите есть скрипт универсальный, в зависимости от состояния переменной меняется кадр, но не получается сделать что бы менялся цвет кадра при 1 - 1 кадр зелёный, а при 0 - кадр оранжевый

Код: pascal
  if Sender is TM_Image then   // проверяем, что Sender это картинка:
    with Sender as TM_Image do // приводим объект к типу TM_Image:
      case ValueAsInt of       // если значение переменной равно:
        1 : Frame := 1;        // 1, то показать кадр 1
        0 : Frame := 0;        // 0, то показать кадр 0
   end;

Simple-Scada

#82
beloleg86, чтобы менять цвет используйте свойство Color.
Если нужно менять цвет и кадр одновременно, то можно писать так:

Код: pascal
  if Sender is TM_Image then   // проверяем, что Sender это картинка:
    with Sender as TM_Image do // приводим объект к типу TM_Image:
      case ValueAsInt of       // если значение переменной равно:
        1 : 
        begin
          Color := clGreen;      
          Frame := 1;
        end;

        0 : 
        begin
          Color := clOrange;   
          Frame := 0;  
        end;
      end;

Вместо констант цвета Вы также можете использовать функцию RGB, при помощи которой можно задать любой цвет из трёх основных. Например:

Код: pascal
  Color := RGB(255, 0, 0);  // Красный
  Color := RGB(0, 255, 0);  // Зеленый
  Color := RGB(0, 0, 255);  // Синий
  и т.д.

beloleg86

Еще вопрос по скрипту. Есть переменная с диапазоном от 0 до 100 (положение заслонки). Я выбрал объект заслонка, присвоил ей переменную, написал скрипт, что от -5 до 5 заслонка считается закрытой и меняет цвет заслонки на оранжевый, например, и от 95-105 считается открытой и меняет цвет на зелёный. скрипт выполняется только на одну секунду а потом цвет встает по умолчанию серый, как на открытии так и на закрытии.
Код: pascal
begin
  if Sender is TM_Valve then               // проверяем, что Sender это заслонка:
    with Sender as TM_Valve do             // приводим объект к типу TM_Valve:
      case ValueAsInt of                   // если значение переменной равно:
        -5..5 :                            // = -5 до 5 то считаем что заслонка закрыта
        begin
          Color := RGB(255, 0, 0);         // изменить цвет на красный
        end;

        95..105 :                          // = 95 до 105 то считаем что заслонка открыта
        begin
          Color := RGB(0, 255, 0);         // изменяем цвет на зеленый
        end;
    end;
end.

Вай-Вай

Здравствуйте есть скрипт задача которого в зависимости от значения в поле менять слой кнопки, но что-то у меня не получилось, срабатывает когда ему вздумается и совсем не так как мне нужно (
Код: pascal
begin
 if Field2.ValueAsInt > 0 then
 Button3.Layer := 5
  else
 Button3.Layer := 2;
 end.
что у меня тут не так?
и еще, тип переменной в "Field2" у меня LongWord пробовал втулить в первую строку, не получилось, с "ValueAsInt" хоть как-то заработало, хотя и не правильно (

TeNQ

#85
Цитата: Вай-Вай от 23 мая 2016, 08:50:25Здравствуйте есть скрипт задача которого в зависимости от значения в поле менять слой кнопки, но что-то у меня не получилось, срабатывает когда ему вздумается и совсем не так как мне нужно (
Попробовал, у меня так же не работает. Я создал три текстовых объекта и выводил туда значение слоя объекта в секундном скрипте.
Код: pascal
Text1.Text := 'Слой кнопки ' + IntToStr(Button1.Layer);
Text2.Text := 'Слой изображения ' + IntToStr(Image1.Layer);
Text3.Text := 'Слой поля ' + IntToStr(Field1.Layer);    
Когда слои не меняешь, то все выводится корректно. Хотя номера слоев отличаются от тех, что были заданы объектам в редакторе. А когда начинаешь менять слой объекта, получается полная ерунда. Слои объектов меняются по какому-то странному алгоритму + что-то происходит с текстовыми объектами. Так то, что должно было выводиться  в Text1.Text выводится в Text2.Text, при следующем изменении слоя выводится уже в Text3.Text. Мне кажется, что это все связано с распределение слоев. Как то упоминалось, что один слой может содержать только один объект. И этот алгоритм распределения дает сбой.

TeNQ

#86
Цитата: beloleg86 от 23 мая 2016, 08:14:20Еще вопрос по скрипту. Есть переменная с диапазоном от 0 до 100 (положение заслонки). Я выбрал объект заслонка, присвоил ей переменную, написал скрипт, что от -5 до 5 заслонка считается закрытой и меняет цвет заслонки на оранжевый, например, и от 95-105 считается открытой и меняет цвет на зелёный. скрипт выполняется только на одну секунду а потом цвет встает по умолчанию серый, как на открытии так и на закрытии.
Объект заслонка работает в трех режимах (SS2 руководство пользователя - стр.62) и они дискретные. Ваш скрипт работал бы с объектом Image, но не будет работать с объектом valve. У вас переменная привязана к объекту заслонка - режим работы Простой. Когда переменная привязанная к заслонке равна 0, то она перекрашивается в серый цвет (закрыто). 1 - зеленый (открыто). 2 и 3 соответственно аварийные состояния - красный цвет.
   Так вот по вашему скрипту 95 окрашивает заслонку в зеленый цвет, а состояние заслонки будет аварийным (ближайшее возможное значение 3). И оно перекрасится в красный практически сразу. Вот вы и видите мелькание.   

beloleg86

Большое спасибо, я так уже и делаю. У меня были насчет этого мысли такие и Вы это подтвердили

TeNQ

#88
Цитата: beloleg86 от 23 мая 2016, 12:47:00Большое спасибо, я так уже и делаю. У меня были насчет этого мысли такие и Вы это подтвердили
Да не за что. Сервер скады подвис и клиент никак не подсоединялся. Видимо игра со слоями не прошла даром)) Пришлось перезагрузить систему, иначе никак не получалось запустить. Я изменил ваш скрипт и проверил - работает.
Полю я присвоил переменную Test типа Integer. Заслонке переменную Valve_State типа Integer. В скрипт по изменению переменной поля OnDataChange
Код: pascal
begin
  case Test.ValueAsInt  of                   // если значение переменной равно:
        -5..5 :                            // = -5 до 5 то считаем что заслонка закрыта
        begin
          Valve_State.Value := 2;         // изменить цвет на красный
        end;

        6..94 :                            // = 6 до 94 то считаем что заслонка в промежуточном состоянии
        begin
          Valve_State.Value := 0;         // изменить цвет на серый
        end;

        95..105 :                          // = 95 до 105 то считаем что заслонка открыта
        begin
          Valve_State.Value := 1;         // изменяем цвет на зеленый
        end;
  end;
end.              

Simple-Scada

#89
Ошибку со слоями обнаружили и сейчас исправим. Причина оказалась в том, что происходит рассинхронизация между клиентом и сервером при попытке смены слоев и проекты начинают отличаться, что может привести и к другим ошибкам.

beloleg86, цвет аналоговой заслонки (это заслонка с включенным свойством "Показать поле") не должен автоматически меняться на серый (цвета автоматически меняются только на дискретных заслонках), поэтому мы думаем, что это недостаток скады, а не Вашего скрипта. Сейчас что-нибудь придумаем, чтобы пользователи могли работать с заслонкой не только как с дискретной.