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

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

Автор Тема: Вопросы и предложения по Simple-Scada 2  (Прочитано 353418 раз)

Виктор К

  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1410 : 14 Декабря 2021, 14:13:23 »
Добрый день. Отправил всю информацию на support.

Виктор К

  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1411 : 14 Декабря 2021, 14:31:28 »
Кстати, удается повторить проблему с ОРС сервером. При закрытии ОРС, в консоли скады это выглядит вот так.
« Изменён: 14 Декабря 2021, 15:15:47 от Виктор К »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2996
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1412 : 19 Декабря 2021, 21:20:08 »
Внесли несколько изменений в обновление 2.5.14.0, возможно они решат проблему переподключения по OPC-DA.

Botsmall

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1413 : 20 Декабря 2021, 16:42:32 »
Как мне показалось для Telegrama актуальны аварийные сообщения.
И было просто замечательно при создании аварийных сигналов в меню сообщений, иметь простую галочку: "отправлять в Telegram".
« Изменён: 21 Декабря 2021, 16:39:01 от Botsmall »

Виктор К

  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1414 : 21 Декабря 2021, 07:20:28 »
Добрый день. Небольшой недочет в программе настройки. При закрытии окна крестиком, внесенные изменения сохраняются.
Хотя логичнее при закрытии по крестику: закрывать без сохранения внесенных изменений.
А по кнопке "Сохранить и закрыть" соответственно сохранять изменения и закрывать окно (или вообще сделать кнопку "применить").

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1165
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1415 : 21 Декабря 2021, 20:49:45 »
Здравствуйте.

Цитировать
И было просто замечательно при создании аварийных сигналов в меню сообщений, иметь простую галочку: "отправлять в Telegram".
Варианты отправки сообщений E-mail/SMS/Telegram рассмотрены по ссылке. В большинстве случаев отправка сообщений всем получателям из списка, указанного в настройках не подходит пользователям. Обычно требуется отправка разных сообщений разным получателям или группам получателей. Поэтому, простая галочка "отправлять в Telegram" не подойдет большинству пользователей. Обсудим и подумаем, возможно ли это реализовать не усложняя интерфейс и возможно в будущих обновлениях подобный функционал будет добавлен.

Цитировать
При закрытии окна крестиком, внесенные изменения сохраняются.
Так и задумано, любые изменения в настройках сохраняются сразу после их изменения. Приложение настроек работает таким образом еще с первой версии(2014г.) и за это время пользователи не сообщали о каких либо неудобствах в использовании настроек. Пожелание учтем и обсудим.

Eugene_

  • Пользователь
  • **
  • Сообщений: 75
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1416 : 23 Декабря 2021, 09:14:05 »
Добрый день. Небольшой недочет в программе настройки. При закрытии окна крестиком, внесенные изменения сохраняются.
Хотя логичнее при закрытии по крестику: закрывать без сохранения внесенных изменений.
А по кнопке "Сохранить и закрыть" соответственно сохранять изменения и закрывать окно
Присоединяюсь к пожеланию. как пользователи мы просто смирились с этой особенностью  :)

Botsmall

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1417 : 23 Декабря 2021, 18:48:20 »
Вопрос.
1. Имеется список неподтвержденных аварий.
Некоторые из них активны и подтверждены.
После перезапуска сервера SS или OPC, активные аварии вновь добавляются в папку "Неподтвержденные".
Такая логика и должна быть?
P.S. Переменные, аварии по которым мы рассматриваем, имеют свойство "авт. восстановление - вкл".
Аварии добавлены через шаблоны, путем вытягивания битов из переменной.

2. Так же заметил, что имея скрипт отправки сообщения в Telegram по закрытию проекта: "Выключение проекта",
это сообщение приходит лишь только при последующем включении...

3. Для определения качества связи с OPC сервером (для дальнейшей отправки результата в Telegram)
использовал конструкцию communication_.IsGoodQuality = False.
Где переменная communication_ простая "программная" переменная созданная в OPC.
При отсутствии связи с OPC, сообщение действительно формируется, но формируется 2 раза. Притом 2 раз
практически всегда приходится на 10 цикл (секундный скрипт). Как ни старался, побороть не получилось.
Вышел из ситуации созданием задержки перед формированием аварии.
« Изменён: 24 Декабря 2021, 16:31:02 от Botsmall »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1165
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1418 : 24 Декабря 2021, 23:27:59 »
Здравствуйте.

1. Да, так и должно быть. Чтобы при перезапусках проекта сообщения не выдавались, нужно в настройках Options.exe на вкладке "Simple-Scada Server" отключить опцию "Показывать сообщения по первому изменению". Если данная опция будет отключена, то сообщения при перезапусках не будут выдаваться. Не забудьте перезапустить сервер скады при изменении настроек.

2. Выполнить отправку Telegram-сообщения через скрипт "Остановка проекта" невозможно, т.к это асинхронная операция(так же как, например построение отчета, работа с БД, вызов архивных процедур и т.д.). При остановке проекта сервер не может ждать пока выполнятся все асинхронные операции, поэтому они игнорируются. Также, данный скрипт выполняется только при остановке проекта на сервере, т.е. фактически только когда его вручную остановит пользователь, поэтому такая отправка сообщения имеет мало смысла, т.к. пользователь знает что он остановил проект.

3. Если сообщение отправляется несколько раз, то нужно проверять по какому событию выполняется скрипт, проверять сам скрипт и его условия. Само по себе сообщение не будет отправляться несколько раз. Если такое происходит, значит это позволяют условия скрипта. Если используется секундный скрипт, то для однократной отправки сообщения нужно использовать доп. переменную, которая будет блокировать повторную отправку сообщения. Для более подробного ответа по данному вопросу требуется проверка проекта. Если не разберетесь, пришлите на support@simple-scada.com текущую версию Вашего проекта из директории "..\Simple-Scada 2\Projects" и укажите, какой скрипт нужно проверить.

Пример скрипта по третьему вопросу: создадим новую внутреннюю переменную с типом данных Int и именем "vrLinkTimer" - эта переменная будет использоваться для подсчета времени отсутствия связи с контроллером. Также, создадим внутреннюю переменную с типом данных Boolean и именем "vrLost" - данная переменная будет использоваться для того, чтобы сообщения о потере связи выдавались однократно. Далее, создадим скрипт с типом события "Прошла секунда" и напишем такой код:
Код: (delphi)
 const
  TIMEOUT = 10;
begin
  if communication_.IsGoodQuality = False then
  begin
    vrLinkTimer.Value := vrLinkTimer.AsInt + 1;
    { проверка на отсутствие связи }
    if (vrLost.AsBool = False) and (vrLinkTimer.AsInt >= TIMEOUT) then
    begin
      vrLost.Value := True;
      SendTelegram('Потеряна связь с OPC-сервером!');
    end;
  end
  else
    vrLinkTimer.Value := 0;
  { проверка на восстановление связи }
  if (vrLost.AsBool) and (vrLinkTimer.AsInt < TIMEOUT) then
  begin
    vrLost.Value := False;
    SendTelegram('Cвязь с OPC-сервером восстановлена!');
  end;
end.

Botsmall

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1419 : 27 Декабря 2021, 12:20:50 »
1. Понял, спасибо. Но:
Протестировал опцию "Показывать сообщения по первому изменению".
При отключенной опции сообщение действительно не формируется, но и в активных авариях пусто.
Такая ситуация еще больше вводит в заблуждение.

2. Понял, спасибо.
3. Именно так я и поступил. Создал доп. переменную. Такой вариант устроил.
К слову: "проблемный" скрипт просто представлял из себя секундный скрипт:

Код
.....
if communication_.IsGoodQuality = False then QualityOPC.value := True else QualityOPC.value := False;
.....

Переменная communication_ программная переменная в OPC сервере (MasterOPC Universal Modbus Server),
которая принудительно устанавливается в 1 при включении OPC сервера.
 
« Изменён: 27 Декабря 2021, 13:01:39 от Botsmall »

Botsmall

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1420 : 27 Декабря 2021, 17:59:36 »
Появились еще вопросики.
4. Имеется переменная Int64, каждый бит которой отвечает за ту или иную аварию.
Задача отправлять в Telegram поступающие сигналы.
Натолкнулся на проблему:
Необходимо сравнивать переменную с предыдущим значением. Смотреть какой бит поменялся и отправлять в Telegram соответствующее сообщение.
Таких переменных очень много, и создавать под каждую отдельную внутреннюю не хватит терпения. Используется универсальный скрипт.
Есть функция PrevAsInt, но она работает только с типами событий "Изменились переменные". Т.е. для каждой переменной мне необходимо создать свой скрипт, что в принципе еще сложней и затратней по времени.
Упростило бы задачу, если функция PrevAsInt работала и с универсальными скриптами. 2 строчки в скрипте заменили бы часовое добавление скриптов или внутренних переменных.

5. Имеется универсальный скрипт, который контролирует качество переменной, и в зависимости от ее состояния передает в telegram об
отсутствии или восстановлении связи с устройством. Проблема в том, что универсальный скрипт вызывается и по изменению качества переменной и собственно по изменению значения самой переменной. Если меняется только качество переменной - все работает.
Но если меняется сама переменная -  так же формируется лишнее сообщение. Опять же, выход я вижу в создании доп. внутренней переменной (либо таймер, либо пред. знач.) на каждое устройство. Или иметь в PLC переменную "пустышку", которая бы никогда не изменяло свое значение.

Пункт 4 и 5 подобны. Возможна ли другая реализация?, помогите пожалуйста разобраться с вопросом.

« Изменён: 27 Декабря 2021, 19:00:06 от Botsmall »

pan2000

  • Постоялец
  • ***
  • Сообщений: 170
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1421 : 28 Декабря 2021, 03:54:24 »
        Здравствуйте.
...Необходимо сравнивать переменную с предыдущим значением. ... Используется универсальный скрипт...
Хранить предыдущее значение переменной можно в описании переменной в виде текста или в одной из границ.
Скрипт "Изменились переменные" (для переменных с однотипными сообщениями по битам):
Код: (delphi)
var i: integer;
    j, k: int64;
begin
  with Variable do begin
    k := AsInt64;                                   // на случай, если переменная изменится во время выполнения скрипта
    j := k xor StrToInt64Def(Description, k);       // вектор изменений переменной, при первом вызове скрипта
                                                    //  сработает Def-условие (Description = '') и вектор = 0
    for i := 0 to 63 do                             // цикл по битам
      if GetBit(j, i) then AddMessage(Now, mkAlarm, // сообщение при изменении переменной
        'Переменная ' + Name + ' бит ' + IntToStr(i) + ' изменился в ' + GetBit(k,i).ToISOString,
        true, false);
    Description := IntToStR(k);                     // запомнить текущее значение как предыдущее
  end;
// отладочное сообщение примера: <имя переменной> <вектор изменений>
  if j<>0 then Text8.Text := Variable.Name + '  ' + IntToHex(j, 16);
end.

Пример проекта, включающего оба способа хранения предыдущего значения, во вложении.
« Изменён: 28 Декабря 2021, 11:05:13 от pan2000 »

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 153
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1422 : 28 Декабря 2021, 12:41:37 »
Здравствуйте.
Имеется универсальный скрипт, который контролирует качество переменной, и в зависимости от ее состояния передает в telegram об
отсутствии или восстановлении связи с устройством. Проблема в том, что универсальный скрипт вызывается и по изменению качества переменной и собственно по изменению значения самой переменной. Если меняется только качество переменной - все работает.
Но если меняется сама переменная -  так же формируется лишнее сообщение. Опять же, выход я вижу в создании доп. внутренней переменной (либо таймер, либо пред. знач.) на каждое устройство. Или иметь в PLC переменную "пустышку", которая бы никогда не изменяло свое значение.

Для этого нужно создать внутреннюю переменную для каждого устройства, с типом данных Boolean и именем, например "vrControl + Имя переменной устройства", а в "Описание" переменной ввести название устройства. Далее, создать скрипт с типом события "Изменились переменные", добавить в список скрипта все переменные, которые необходимо отслеживать и написать такой код:

Код: (delphi)
var
  aVar: TM_Variable;
begin
  // ищем переменную по имени "vrControl + Имя переменной которая вызвала скрипт"
  aVar := GetVariableByName('vrControl' + Variable.Name);
  if aVar <> nil then     // если переменная существует
    if not IsFirstChange then
    begin
      // проверка на восстановление связи
      if (Variable.IsGoodQuality = True) and (aVar.AsBool = False) then
      begin
        aVar.Value := True;
        SendTelegram('Cвязь с устройством ' + aVar.Description + ' восстановлена!');
      end else
        // проверка на отсутствие связи
        if (Variable.IsGoodQuality = False) and (aVar.AsBool) then
        begin
          aVar.Value := False;
          SendTelegram('Связь с устройством ' + aVar.Description + ' потеряна!')
        end;
    end else
      aVar.Value := True;
end.
« Изменён: 30 Декабря 2021, 17:03:14 от Simple-Scada »

Botsmall

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1423 : 10 Января 2022, 16:27:35 »
Большое спасибо за ответы.

to Senpai.
Как раз таки и хотел избавиться от внутренних переменных.
Вся структура проекта, описания устройств, комментарии и т.д. прописаны в шаблонах.
Идея была такова, чтобы использовать эти данные для формирования сообщения с помощью одного универсального скрипта,
который сидит в этих шаблонах, без использования внутренних переменных
(описание которых полностью дублирует данные в используемых шаблонах).
Ваш вариант решает проблему, но получается масло масляное.

to Pan2000.
Идея записи пред. знач. в описание переменной без внутренних с использованием одного универсального скрипта,
который дублируется в шаблонах мне помогла в одном случае: когда переменная, с битами которой мы работаем,
отвечает за состояние одного устройства.
Но я натолкнулся на проблему, когда переменная указывает на тип аварии, а ее биты на то или иное устройство:
в этом случае при изменении значения переменной запускается сразу несколько "экземпляров" универсального скрипта.
пред. значение необходимо записывать только после выполнения последнего "экземпляра",- это дополнительные условия.
Пришлось прибегнуть к использованию доп. переменных и скрипта типа "изменились переменные".
Повторюсь, если бы была возможность использовать функцию PrevInt в универсальных скриптах, мою задачу решила бы одна строчка.
Не знаю, насколько это реализуемо (PrevInt в универсальных скриптах).

1. На фоне вышеописанного появился вопрос. В какой последовательности выполняются скрипты?
2. Есть скрипт "изменились переменные", к нему привязаны много однотипных переменных.
Задача: определить первые два символа в названии вызвавшей скрипт переменной , по этому условию сформировать то или иное сообщение.
Функция Delete работает со String, а свойство Variable.Name - Unicode...не смог преобразовать типы...   
« Изменён: 11 Января 2022, 10:08:03 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1165
    • Просмотр профиля
Re: Вопросы и предложения по Simple-Scada 2
« Ответ #1424 : 11 Января 2022, 10:07:51 »
Здравствуйте.

Цитировать
В какой последовательности выполняются скрипты?
См. пояснения по ссылке.

Цитировать
Функция Delete работает со String, а свойство Variable.Name - Unicode...не смог преобразовать типы... 
String = UnicodeString. Ничего преобразовывать не требуется. Также, начиная с версии 2.5.13.0 нет необходимости конвертировать разные типы строк, т.к. тип данных UTF8String заменён на string и больше не используется. У Вас проблема вероятно в том, что в процедуру Delete Вы передаете свойство переменной .Name, а нужно передавать отдельную строковую переменную - см. пример кода по ссылке. Создайте в скрипте локальную переменную, как в примере по ссылке, запишите в нее имя переменной(Variable.Name) и затем используйте эту локальную переменную в процедуре Delete. Если не разберетесь, пришлите целиком скрипт, который не компилируется сюда или на почту support@simple-scada.com.
« Изменён: 11 Января 2022, 10:13:11 от Simple-Scada »