Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Вопросы по скриптам в Simple-Scada 2  (Прочитано 318715 раз)

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #75 : 14 Мая 2016, 11:38:32 »
Администратор. Огромное спасибо за моментальную помощь !!!!!!!!!!!!!!!!!

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #76 : 14 Мая 2016, 11:59:03 »
И еще один вопросик.
Можно ли как то сменить цвет системного сообщения ?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #77 : 14 Мая 2016, 12:00:14 »
Пока нет и для этого нужно использовать собственные окна. Но можем добавить такую функцию.

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #78 : 14 Мая 2016, 12:17:45 »
Было бы неплохо. Просто системные сообщения очень хорошо акцентируют на себе внимание. Ими очень удобно пользоваться для важных оповещений.

Vladimir

  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #79 : 19 Мая 2016, 15:45:07 »
Пример скрипта
 
Код
begin
   IF (S21.Value =true) then S21_shape.Color := clgreen
                        else S21_shape.Color := clgray;
end

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

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #80 : 19 Мая 2016, 23:48:13 »
Vladimir, в ближайшее время этой возможности не будет. Лучше всего сначала правильно именовать объекты, а затем писать скрипты, чтобы исключить переименование. Но нужно признать - это не всегда удается. В этом случае нужно использовать универсальные скрипты везде, где это возможно. Если оба варианта не подходят, то придется все-таки переименовывать.
« Изменён: 25 Марта 2022, 12:28:26 от Simple_Scada »

beloleg86

  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #81 : 21 Мая 2016, 00:14:17 »
Подскажите есть скрипт универсальный, в зависимости от состояния переменной меняется кадр, но не получается сделать что бы менялся цвет кадра при 1 - 1 кадр зелёный, а при 0 - кадр оранжевый

Код
  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;
« Изменён: 21 Мая 2016, 09:16:23 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #82 : 21 Мая 2016, 09:21:18 »
beloleg86, чтобы менять цвет используйте свойство Color.
Если нужно менять цвет и кадр одновременно, то можно писать так:

Код
  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, при помощи которой можно задать любой цвет из трёх основных. Например:

Код
  Color := RGB(255, 0, 0);  // Красный
  Color := RGB(0, 255, 0);  // Зеленый
  Color := RGB(0, 0, 255);  // Синий
  и т.д.
« Изменён: 21 Мая 2016, 09:26:24 от Simple-Scada »

beloleg86

  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #83 : 23 Мая 2016, 08:14:20 »
Еще вопрос по скрипту. Есть переменная с диапазоном от 0 до 100 (положение заслонки). Я выбрал объект заслонка, присвоил ей переменную, написал скрипт, что от -5 до 5 заслонка считается закрытой и меняет цвет заслонки на оранжевый, например, и от 95-105 считается открытой и меняет цвет на зелёный. скрипт выполняется только на одну секунду а потом цвет встает по умолчанию серый, как на открытии так и на закрытии.
Код
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.

Вай-Вай

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #84 : 23 Мая 2016, 08:50:25 »
Здравствуйте есть скрипт задача которого в зависимости от значения в поле менять слой кнопки, но что-то у меня не получилось, срабатывает когда ему вздумается и совсем не так как мне нужно (
Код
begin
 if Field2.ValueAsInt > 0 then
 Button3.Layer := 5
  else
 Button3.Layer := 2;
 end.
что у меня тут не так?
и еще, тип переменной в "Field2" у меня LongWord пробовал втулить в первую строку, не получилось, с "ValueAsInt" хоть как-то заработало, хотя и не правильно (

TeNQ

  • Постоялец
  • ***
  • Сообщений: 199
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #85 : 23 Мая 2016, 12:00:07 »
Здравствуйте есть скрипт задача которого в зависимости от значения в поле менять слой кнопки, но что-то у меня не получилось, срабатывает когда ему вздумается и совсем не так как мне нужно (
Попробовал, у меня так же не работает. Я создал три текстовых объекта и выводил туда значение слоя объекта в секундном скрипте.
Код
Text1.Text := 'Слой кнопки ' + IntToStr(Button1.Layer);
Text2.Text := 'Слой изображения ' + IntToStr(Image1.Layer);
Text3.Text := 'Слой поля ' + IntToStr(Field1.Layer);   
Когда слои не меняешь, то все выводится корректно. Хотя номера слоев отличаются от тех, что были заданы объектам в редакторе. А когда начинаешь менять слой объекта, получается полная ерунда. Слои объектов меняются по какому-то странному алгоритму + что-то происходит с текстовыми объектами. Так то, что должно было выводиться  в Text1.Text выводится в Text2.Text, при следующем изменении слоя выводится уже в Text3.Text. Мне кажется, что это все связано с распределение слоев. Как то упоминалось, что один слой может содержать только один объект. И этот алгоритм распределения дает сбой.
« Изменён: 23 Мая 2016, 12:02:26 от TeNQ »

TeNQ

  • Постоялец
  • ***
  • Сообщений: 199
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #86 : 23 Мая 2016, 12:43:03 »
Еще вопрос по скрипту. Есть переменная с диапазоном от 0 до 100 (положение заслонки). Я выбрал объект заслонка, присвоил ей переменную, написал скрипт, что от -5 до 5 заслонка считается закрытой и меняет цвет заслонки на оранжевый, например, и от 95-105 считается открытой и меняет цвет на зелёный. скрипт выполняется только на одну секунду а потом цвет встает по умолчанию серый, как на открытии так и на закрытии.
Объект заслонка работает в трех режимах (SS2 руководство пользователя - стр.62) и они дискретные. Ваш скрипт работал бы с объектом Image, но не будет работать с объектом valve. У вас переменная привязана к объекту заслонка - режим работы Простой. Когда переменная привязанная к заслонке равна 0, то она перекрашивается в серый цвет (закрыто). 1 - зеленый (открыто). 2 и 3 соответственно аварийные состояния - красный цвет.
   Так вот по вашему скрипту 95 окрашивает заслонку в зеленый цвет, а состояние заслонки будет аварийным (ближайшее возможное значение 3). И оно перекрасится в красный практически сразу. Вот вы и видите мелькание.   
« Изменён: 23 Мая 2016, 12:45:48 от TeNQ »

beloleg86

  • Новичок
  • *
  • Сообщений: 44
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #87 : 23 Мая 2016, 12:47:00 »
Большое спасибо, я так уже и делаю. У меня были насчет этого мысли такие и Вы это подтвердили

TeNQ

  • Постоялец
  • ***
  • Сообщений: 199
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #88 : 23 Мая 2016, 13:24:14 »
Большое спасибо, я так уже и делаю. У меня были насчет этого мысли такие и Вы это подтвердили
Да не за что. Сервер скады подвис и клиент никак не подсоединялся. Видимо игра со слоями не прошла даром)) Пришлось перезагрузить систему, иначе никак не получалось запустить. Я изменил ваш скрипт и проверил - работает.
Полю я присвоил переменную Test типа Integer. Заслонке переменную Valve_State типа Integer. В скрипт по изменению переменной поля OnDataChange
Код
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.             
« Изменён: 23 Мая 2016, 13:34:48 от TeNQ »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #89 : 23 Мая 2016, 15:33:12 »
Ошибку со слоями обнаружили и сейчас исправим. Причина оказалась в том, что происходит рассинхронизация между клиентом и сервером при попытке смены слоев и проекты начинают отличаться, что может привести и к другим ошибкам.

beloleg86, цвет аналоговой заслонки (это заслонка с включенным свойством "Показать поле") не должен автоматически меняться на серый (цвета автоматически меняются только на дискретных заслонках), поэтому мы думаем, что это недостаток скады, а не Вашего скрипта. Сейчас что-нибудь придумаем, чтобы пользователи могли работать с заслонкой не только как с дискретной.
« Изменён: 23 Мая 2016, 19:42:29 от Simple-Scada »