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

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

Автор Тема: Как инициализировать переменные при запуске проекта ?  (Прочитано 7885 раз)

George

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Добрый день.

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

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

Спасибо.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Здравствуйте.

Цитировать
Вопрос возник из-за того, что при запуске проекта запускаются все сообщения, привязанные к переменным.
Инициализация переменных не поможет для решения этой задачи. Просто выключите опцию "Показывать сообщения по первому изменению" в Options.exe и перезапустите сервер скады (Server.exe).

George

  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
Спасибо.  Помогло :)

mepexa

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Цитировать
Вопрос возник из-за того, что при запуске проекта запускаются все сообщения, привязанные к переменным.
Инициализация переменных не поможет для решения этой задачи. Просто выключите опцию "Показывать сообщения по первому изменению" в Options.exe и перезапустите сервер скады (Server.exe).
А как быть с SMS привязаных к переменным?
при перезапуске проекта сообщения перестали запускаться (опцию выключил)
но SMS приходят, типа изменилась переменная, хотя не изменялась. 
« Изменён: 28 Мая 2018, 12:43:24 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Цитировать
но SMS приходят, типа изменилась переменная, хотя не изменялась.
При запуске проекта переменная не может не измениться, т.к. она не может не иметь значения. Поэтому численные переменные инициализируются нулем, строковые - пустой строкой. На этом этапе и происходит изменение. И если у Вас есть отправка sms для нулевого значения переменной, то она сработает. Избежать этого можно только игнорируя в скрипте первую отправку.
« Изменён: 30 Мая 2018, 11:32:26 от Simple-Scada »

mepexa

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
как игнорировать?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Не отправлять сообщение, если переменная изменилась первый раз и отправлять во всех остальных случаях. Если есть привязка к объектам на мнемосхеме, то можно делать отметку о изменении переменной в свойство Tag объекта. Либо можно создать доп. внутренние переменные в которые записывать было ли изменение основной переменной, или нет. Третий вариант использовать локальную переменную скрипта для этой цели. Допустим в проекте есть скрипт 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. Нулевое состояние всегда должно означать нормальное состояние, когда не требуется вмешательство пользователя и выдача уведомлений. Тогда и пропускать отправку не придется.
« Изменён: 30 Мая 2018, 12:00:06 от Simple-Scada »

mepexa

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Но наиболее правильным вариантом будет не использовать нулевое состояние для отправки 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 СМСок перечислять , что замкнуто, а что разомкнуто.....
« Изменён: 13 Июня 2018, 12:16:36 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Цитировать
Таких контакторов 58 штук... перезапуск проекта - и пошло 58 СМСок перечислять, что замкнуто, а что разомкнуто.
Правильно, ведь у Вас в скрипте описана отправка сообщения при нулевом состоянии и просто так игнорироваться она не будет. Поэтому, если нулевое состояние учитывается, то остается только не отправлять сообщение если переменная изменилась первый раз и отправлять во всех остальных случаях, как мы писали выше.