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

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

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

Andy

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #990 : 18 Декабря 2019, 16:43:35 »
Добрый день.
Решил попробовать свести данные по одному узлу в сводную таблицу, использовав в редакторе соответствующий элемент "Таблица".
Вопрос вот в чём- Можно изменить фон определенной ячейки с переменной в зависимости от ей значения (1-зеленый. 0-красный)?
Одна переменная может говорить, что  устройство работает "1" - все ок..зеленое.
Другая же сообщает об аварии "1" - в этом случае красным красить.
У меня получилось только все ячейки  скопом покрасить.
Спасибо.
« Изменён: 18 Декабря 2019, 16:46:46 от Andy »

Neskad

  • Новичок
  • *
  • Сообщений: 31
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #991 : 18 Декабря 2019, 17:40:36 »
Да, можно, оказывается.  :)

Код: ("delphi")
var
  i, j, maxi, maxj: integer;
  cell: TM_TableCell;
begin
  maxi:= Table1.ColumnsCount - 1;
  maxj:= Table1.Columns[0].CellsCount - 1;
  for i:= 0 to maxi do
    begin
      for j:= 0 to maxj do
        begin
          cell:= Table1.GetCell(i, j);
          cell.Color:= RandomColor;
        end;
    end;
end.

Andy

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #992 : 19 Декабря 2019, 09:21:28 »
Да, можно, оказывается.  :)

Большое спасибо! Table1.GetCell(i, j) -ключевой момент для меня был.  Все получилось.
Еще один вопрос- Как правильно написать код, чтоб при нуле разом и цвет поменялся и текст?


Код
  case AsInt of
        0 : begin
 Table1.GetCell(1, 0).Text := 'Stop';
            Table1.GetCell(1, 0).Color := clRed;
end;
Разобрался, заработало.
Спасибо.
« Изменён: 19 Декабря 2019, 09:59:59 от Andy »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1385
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #993 : 19 Декабря 2019, 09:59:58 »
Здравствуйте.

Цитировать
Как правильно написать код, чтоб при нуле разом и цвет поменялся и текст?
Для этого нужно использовать конструкцию begin...end:
Код: (delphi)
case AsInt of
      0 :
      begin
        Table1.GetCell(1, 0).Text := 'Stop';
        Table1.GetCell(1, 0).Color := clRed;
      end;
end;
« Изменён: 19 Декабря 2019, 10:04:22 от Simple-Scada »

lipvasko

  • Пользователь
  • **
  • Сообщений: 65
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #994 : 25 Декабря 2019, 15:54:38 »
Всем хорошего дня , подскажите как наиболее коротко и оптимально проверить строку, что она не сможет преобразоваться в интежер, т.е. в ней есть посторонние символы и буквы

pan2000

  • Постоялец
  • ***
  • Сообщений: 225
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #995 : 25 Декабря 2019, 17:00:32 »
Всем хорошего дня , подскажите как наиболее коротко и оптимально проверить строку, что она не сможет преобразоваться в интежер, т.е. в ней есть посторонние символы и буквы
  Здравствуйте!
На мой взгляд, наиболее оптимальное разрешение спорных вопросов - использование исключений, в Вашем случае:
Код: (delphi)
begin
  try
    Text1.Text := IntToStr(StrToInt(aSTR.AsStr));  // попытались
  except
    Text1.Text := 'Увы, это не переводимая игра слов C(К/ф""Бриллиантовая рука"")';  // не удалось
  end.           

aStr - внутренний тег типа строка.
Пример во вложении (!)
 

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #996 : 25 Декабря 2019, 17:17:05 »
Здравствуйте.

Ещё часто подходит функция StrToIntDef, которая в случае неудачи возвращает заданное вами значение. Например:
Код: (delphi)
var
  I: Integer;
begin
  I := StrToIntDef(myString, -999); // в случае неудачи вернуть значение -999
  if I = -999 then
    Log_Add('Ошибка!');
end.

pan2000

  • Постоялец
  • ***
  • Сообщений: 225
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #997 : 25 Декабря 2019, 17:55:39 »
Здравствуйте.

Ещё часто подходит функция StrToIntDef, которая в случае неудачи возвращает заданное вами значение. Например:

Значение по умолчанию - это частный случай для ограниченного диапазона значений. Петрову поможет, а Сидорову - нет. Чем try, как общий случай, то плох?
Года три назад try - это был единственный вариант борьбы с отладкой по TeamViewer, когда проект на удаленной машине вставал 'раком' по завершении цикла отладки.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #998 : 25 Декабря 2019, 18:08:48 »
Цитировать
Чем try, как общий случай, то плох?
Почему плох? Мы же не случайно написали: "Ещё часто подходит функция StrToIntDef". Про "try..except" не стали писать ещё раз, т.к. Вы описали этот вариант в пред. сообщении. Но минус у "try..except" есть, он состоит в том, что каждый раз когда блок исключения будет выполняться, в журнал сервера будет выводиться аварийное сообщение, что может помешать просмотру других сообщений, если таких случаев будет много. Для StrToInt это будет сообщение "Ошибка в скрипте "имя_скрипта" в строке N. 'text' is not a valid integer value".

Den

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #999 : 25 Декабря 2019, 18:21:48 »
Привет всем.
Купил версию Про ради
1. перекачки тэгов из теплокорректоров Логика в s7-1511
2. Телеграм-уведомлений.
3. Красивых отчётов с автоматической рассылкой по емейл.

Вопрос по отправке телеграм-сообщений: можно ли вставлять переменную в текст сообщения?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1000 : 25 Декабря 2019, 18:28:42 »
Цитировать
Вопрос по отправке телеграм-сообщений: можно ли вставлять переменную в текст сообщения?
Конечно, например:
Код: (delphi)
begin
  SendTelegram('Значение переменной vrMyVar равно ' + vrMyVar.AsStr);
end.

Andy

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1001 : 26 Декабря 2019, 16:46:15 »
Добрый день.
Имеется переменная  с опс сервера, которую нужно откорректировать -  прибавить 4 и результат вывести, например, в поле Field1.
Подскажите как это можно реализовать. 
Спасибо.

Den

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1002 : 27 Декабря 2019, 11:33:39 »
Да.
Переменная в текст сообщения вставляется, в моём случае длинный String,
и норм отправляется.
Спасибо.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1385
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1003 : 27 Декабря 2019, 12:05:33 »
Здравствуйте.

Andy, допустим переменная с OPC-сервера будет с именем "MyVar", а откорректированная переменная с именем "MyVarCorrect". Для решения задачи нужно создать скрипт с типом события "Изменились переменные", добавить в него переменную "MyVar" как это описано здесь и написать такой код:
Код: (delphi)
begin
  MyVarCorrect.Value := MyVar.Value + 4;
end.

Теперь скрипт будет выполняться при каждом изменении переменной MyVar и в переменную MyVarCorrect будет записываться значение увеличенное на 4. Для вывода полученного значения, переменную MyVarCorrect можно связать с нужным Полем.

Andy

  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1004 : 27 Декабря 2019, 16:54:14 »
Спасибо! Сработало.