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

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

torchinsky

Цитата: pan2000 от 29 июня 2020, 05:29:09Здравствуйте!
Это кнопка с восьмью состояниями. Бонусом - индикация запрещенных комбинаций. При отсутствии оных - можно обойтись кнопкой с пятью состояниями. См. пример во вложении.

За пример спасибо. Возьму на вооружение прием с кнопкой и состояниями. Но этот пример не совсем решает мою проблему. Во вложении примерный вид элемента управления как я его себе представляю. Это все заблокированные кнопки. по ним нажимать нельзя. Только в качестве отображения)

pan2000

Цитата: torchinsky от 29 июня 2020, 21:36:26Но этот пример не совсем решает мою проблему. Во вложении примерный вид элемента управления как я его себе представляю.
Здравствуйте!
Во вложении пример возможной реализации элемента управления.

msigx680

Здравствуйте! На первых страницах темы был пример реализации таймера наработки оборудования https://simple-scada.com/forum/index.php?topic=145.30
Но он в последней версии не открывается, может у кого есть пример реализации?

Simple_Scada

Здравствуйте.

ЦитироватьОч удобно и красиво получилось сделать с помощью button с enabled = false. По факту это не кнопка уже, красивая такая метка.
Для таких целей правильнее использовать компонент "Текст", его внешний вид можно настроить также как у кнопки на Вашем скриншоте(см. вложение). 

ЦитироватьНа первых страницах темы был пример реализации таймера наработки оборудования https://simple-scada.com/forum/index.php?topic=145.30
Для такой задачи сейчас можно использовать процедуры для работы с таймерами. Пример можно найти в демо-проекте -> страница "Скрипты" -> "Простые скрипты(1)" -> Пример №3. Также, время наработки можно получить по архивным данным переменой при помощи процедуры ArchiveTimeOn. Если требуется создать отчет времени наработки/простоя, то пример такого отчета можно найти по ссылке.

lipvasko

#1054
Возник вопрос, как контролировать работоспособность скады, у меня скада используется для сбора и обработки  данных по производству, счетчики и т.д., и постоянно мониторить её работоспособность , часто не выходит , она зависает второй раз , за неделю, сейчас перегрузил сам сервер (ПК).   При зависании,  вэб интерфейс работает, но данные не изменяются , скрипты не работают, но  на первый взгляд , все нормально, в логах нет ничего интересного, хотелось бы в такие моменты отсылать письмо на адрес, но как это сдель если сама скада "мертвая".

Saurin

Здравствуйте, как отправлять сообщения телеграмм боту (сообщение содержит текущее значение переменной) с помощью GET запроса?
из руководства по скриптам копипастил в проект, но он по чему то не работает, саму ссылку с гет запросом вставляю в браузер - сообщение присылается.

Simple_Scada

#1056
lipvasko, это ненормальная ситуация и нужно разобраться, что приводит к зависанию сервера. Такое возможно если в скриптах допущены грубые ошибки, например зацикливание скриптов друг на друга, из-за чего очередь скриптов будет расти бесконечно. Или имеется скрипт с бесконечный циклом, который никогда не выполнится и соответственно не даст выполниться другим скриптам. Пример зацикленных друг на друга скриптов:

Код: pascal
// скрипт по изменению переменной vrA
procedure vrA_OnDataChange(Sender: TM_Control);
begin
  vrB.Value := Random(100);  // меняем значение переменной vrB
end.
 
// скрипт по изменению переменной vrB
procedure vrB_OnDataChange(Sender: TM_Control);
begin
  vrA.Value := Random(100);  // меняем значение переменной vrA
end.
В таких (и других подобных) ситуациях скада будет выдавать отдельное сообщение в журнал сервера о переполнении очереди скриптов.

Ошибки в скриптах, которые невозможно определить на этапе компиляции будут выводиться в журнал сервера. Откройте журнал сервера и просмотрите его на предмет наличия ошибок в скриптах, если в журнале имеются скрипты с ошибками, то их нужно исправить. В журнале будет указано имя скрипта, при выполнении которого возникла ошибка, а также номер строки вызвавшей ошибку. Также, для отладки скриптов можно в настройках Options.exe активировать опцию "Лог скриптов".

Если не получится разобраться, пришлите нам на support@simple-scada.com текущую версию проекта, а также целиком папку Logs из директории "...\Simple-Scada 2\Logs". Также уточните, Вы используете последнюю версию 2.3.6.12 или более старую?

Saurin, для отправки Telegram-сообщений, не нужно использовать GET запросы. Для отправки сообщений через Telegram необходимо произвести предварительную настройку следуя инструкции. После этого можно отправлять Telegram-сообщения из скриптов используя процедуру SendTelegram. Для отправки значения переменной в Telegram-сообщении можно использовать свойство переменной AsStr, например:
Код: pascal
begin
  SendTelegram('Значение переменной = ' + MyVar.AsStr);
end.

Saurin

Это да, но если стоит задача отправлять сообщения в разные телеграмм боты?

lipvasko

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

Вопрос, при записи  в текстовый файл, необходимо записать информацию на кириллице (по русски) перепробовал уже кучу кодировок в  функции открытия файла ,а в блокноте все равно в  файле не читается информация по русски , вопрос какую кодировку использовать для вывода файл , что бы блокнотом читалось нормально.

Victor_P.

Цитата: lipvasko от 14 июля 2020, 14:13:23Вопрос, при записи  в текстовый файл, необходимо записать информацию на кириллице (по русски) перепробовал уже кучу кодировок в  функции открытия файла ,а в блокноте все равно в  файле не читается информация по русски , вопрос какую кодировку использовать для вывода файл , что бы блокнотом читалось нормально.
Используй юникод.
В блокноте поменяй шрифт и(или), возможно, кодировку. А лучше используй notepad++.

lipvasko

#1060
Так весь смех в том, что после юникода , я даже нотепадом в ютф8 прочитать не могу

Simple-Scada

#1061
lipvasko, удобнее всего использовать UTF8. Но, судя по описанию, Вы неправильно записываете в файл, а кодировка здесь не при чем. Можно предположить что при записи Вы смешиваете разные типы данных - UTF8String и string.

Saurin, отправлять через разных ботов нельзя (через несколько токенов). Обычно создают одного бота (и один токен) и через него рассылают множеству получателей в чаты. Или в группу, на которую подписаны получатели. Можно используя Telegram API реализовать и свою отправку через GET-запросы, но это будет сложно.

lipvasko

#1062
Возможно , тогда как можно записать текст ,  на кириллице , не объявляя переменную стринг или ютф8 стринг а просто  такого вида  +'это мир' ?  я , так пробовал писать на латинице и все было ок.
пишу в файл так TextFileWriteLn(DateTimeToStr(Now) +' Создан новый файл ' );

lipvasko

Добрый день, ещё подскажите , можно ли читать текстовые файлы по сери , в расшаренных папках и как это сделать , пример пожалуйста.

Миханик

Подскажите, пожалуйста в чем может быть проблема.
Имеется таблица Table_term, показывающая температуру по дням из БД.
В сервере периодически возникает ошибка: "Ошибка в скрипте Global в строке 162. Access violation at address 00F425D1 in module 'Server.exe'. Read of address 000000BD"
Строка 162 - это: aVal := aCell.Variable.AsSingle;    // получим значение в ячейке

Код: pascal
// Раскраска ячеек таблицы в зависимости от значения температуры термоподвески
procedure TableColorCell();
var
  iRow, iCol : integer;
  aCell: TM_TableCell;
  aVal : Single;
begin
  if Table_term.RowCount > 0 then
    for iRow := 1 to (Table_term.RowCount-1) do        // Цикл со второй строки таблицы до конца
      for iCol := 2 to (Table_term.ColumnsCount-1) do  // Цикл с третьего столбца таблицы до конца
      begin
        aCell := Table_term.GetCell(iCol, iRow);       // Получим нужную ячейку
        if aCell <> nil then
        begin
          aVal := aCell.Variable.AsSingle;    // получим значение в ячейке

          if aVal >= Tmax_warning then        // Если значение больше предупредительной уставки, то
            if aVal >= Tmax_alarm then        // Если значение больше аварийной уставки, то
              aCell.Color := clIndianRed      // Раскрашиваем фон ячейки в красный цвет
            else
              aCell.Color := RGB(255,255,128) // Раскрашиваем фон ячейки в желтый цвет
          else
            aCell.Color := clWhite;           // Раскрашиваем фон ячейки в белый цвет, если значение в норме
        end;
      end;
end;