Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: George от 26 Мая 2018, 19:21:18

Название: Как инициализировать переменные при запуске проекта ?
Отправлено: George от 26 Мая 2018, 19:21:18
Добрый день.

Каким образом можно задать значения переменным при запуске проекта?
Я полагал, что это можно получить при вводе в поле "Значение", но, видимо, это не так.
В подсказке к полю говориться, что при вводе цифры в поле  "Значение" оно (значение поля)
будет, как если-бы оно (значение) пришло с контроллера.
Я (к примеру) вставляю значение равное например 1 или 2 и т.д., но при запуске проекта
переменная инициализируется нулем.
Поясните, пжлста, про это поле.

Вопрос возник из-за того, что при запуске проекта запускаются все сообщения, привязанные к переменным.
После подтверждения сообщений все работает нормально.
Хочу попробовать проинициализировать переменные принудительно.

Спасибо.
Название: Re: Как инициализировать переменные при запуске проекта ?
Отправлено: Simple-Scada от 26 Мая 2018, 19:25:25
Здравствуйте.

Цитировать
Вопрос возник из-за того, что при запуске проекта запускаются все сообщения, привязанные к переменным.
Инициализация переменных не поможет для решения этой задачи. Просто выключите опцию "Показывать сообщения по первому изменению" в Options.exe (https://simple-scada.com/help/manual/settings-simple-scada-server.html) и перезапустите сервер скады (Server.exe).
Название: Re: Как инициализировать переменные при запуске проекта ?
Отправлено: George от 26 Мая 2018, 19:43:33
Спасибо.  Помогло :)
Название: Re: Как инициализировать переменные при запуске проекта ?
Отправлено: mepexa от 27 Мая 2018, 15:09:47
Цитировать
Вопрос возник из-за того, что при запуске проекта запускаются все сообщения, привязанные к переменным.
Инициализация переменных не поможет для решения этой задачи. Просто выключите опцию "Показывать сообщения по первому изменению" в Options.exe (https://simple-scada.com/help/manual/settings-simple-scada-server.html) и перезапустите сервер скады (Server.exe).
А как быть с SMS привязаных к переменным?
при перезапуске проекта сообщения перестали запускаться (опцию выключил)
но SMS приходят, типа изменилась переменная, хотя не изменялась. 
Название: Re: Как инициализировать переменные при запуске проекта ?
Отправлено: Simple-Scada от 28 Мая 2018, 12:47:01
Цитировать
но SMS приходят, типа изменилась переменная, хотя не изменялась.
При запуске проекта переменная не может не измениться, т.к. она не может не иметь значения. Поэтому численные переменные инициализируются нулем, строковые - пустой строкой. На этом этапе и происходит изменение. И если у Вас есть отправка sms для нулевого значения переменной, то она сработает. Избежать этого можно только игнорируя в скрипте первую отправку.
Название: Re: Как инициализировать переменные при запуске проекта ?
Отправлено: mepexa от 29 Мая 2018, 18:40:56
как игнорировать?
Название: Re: Как инициализировать переменные при запуске проекта ?
Отправлено: Simple-Scada от 30 Мая 2018, 11:57:46
Не отправлять сообщение, если переменная изменилась первый раз и отправлять во всех остальных случаях. Если есть привязка к объектам на мнемосхеме, то можно делать отметку о изменении переменной в свойство Tag (https://simple-scada.com/help/script/tag.html) объекта. Либо можно создать доп. внутренние переменные в которые записывать было ли изменение основной переменной, или нет. Третий вариант использовать локальную переменную скрипта для этой цели. Допустим в проекте есть скрипт OnDataChange по переменной myVariable и в нём выполняется отправка sms при нулевом значении:
Код: (delphi)
begin
    if myVariable.AsInt = 0 then
      SendSMS('7928456789', 'Авария котла!');
end.

Тогда можно изменить его так, чтобы первая отправка игнорировалась:
Код: (delphi)
var
  aSkipped: Boolean;   // после запуска проекта эта переменная будет равна False
begin
  if aSkipped then                            // если одна отправка уже была игнорирована
    if myVariable.AsInt = 0 then              // если значение равно 0
      SendSMS('7928456789', 'Авария котла!'); // то отправляем sms

  { отмечаем, что отправка была пропущена и теперь можно отправлять все сообщения }
  aSkipped := True;
end.
Но наиболее правильным вариантом будет не использовать нулевое состояние для отправки sms, для выдачи аварийных/предупреждающих сообщений и для отправки e-mail. Нулевое состояние всегда должно означать нормальное состояние, когда не требуется вмешательство пользователя и выдача уведомлений. Тогда и пропускать отправку не придется.
Название: Re: Как инициализировать переменные при запуске проекта ?
Отправлено: mepexa от 10 Июня 2018, 19:51:41
Но наиболее правильным вариантом будет не использовать нулевое состояние для отправки sms, для выдачи аварийных/предупреждающих сообщений и для отправки e-mail. Нулевое состояние всегда должно означать нормальное состояние, когда не требуется вмешательство пользователя и выдача уведомлений. Тогда и пропускать отправку не придется.
А вот тэг с контактора имеет значение = 0  => "контактор разомкнут"
                                            значение = 1  => "контактор замкнут"

Код: (delphi)
  begin
   if Sender is TM_Object then
     case TM_Object(Sender).AsInt of
          0: SendSMS ('78888888848', '9QF ввод Т4 отключен');
          1: SendSMS ('78888888848', '9QF ввод Т4 включен');
     end;
   end.
Таких контакторов 58 штук....
перезапуск проекта - и пошло 58 СМСок перечислять , что замкнуто, а что разомкнуто.....
Название: Re: Как инициализировать переменные при запуске проекта ?
Отправлено: Simple-Scada от 13 Июня 2018, 12:21:12
Цитировать
Таких контакторов 58 штук... перезапуск проекта - и пошло 58 СМСок перечислять, что замкнуто, а что разомкнуто.
Правильно, ведь у Вас в скрипте описана отправка сообщения при нулевом состоянии и просто так игнорироваться она не будет. Поэтому, если нулевое состояние учитывается, то остается только не отправлять сообщение если переменная изменилась первый раз и отправлять во всех остальных случаях, как мы писали выше.