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

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

Автор Тема: Инициализация переменных  (Прочитано 7633 раз)

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Инициализация переменных
« : 15 Марта 2017, 19:16:33 »
Столкнулся с одной странностью, которую пока объяснить себе не могу.

Скрипт ОnDataChange (поля с ОРС переменной) устанавливает переменную (внутреннюю) в TRUE.

При запуске проекта переменная вcтает в TRUE. Минимум для OPC переменной 150 (по факту в регистре больше). Но устанавливается в поле именно это значение.

Можете описать что происходит при старте скады с переменными/полями, и что я не так делаю? Те же скрипты на другом объекте (до последнего обновления) работают чудесно(я его еще не обновил и уже боюсь). Еще есть разница во времени обновления. На старом 1с(лектус 1с), на новом 2с (лектус 4с).

Скрипты и проект я уже скидывал.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Инициализация переменных
« Ответ #1 : 15 Марта 2017, 19:58:57 »
Цитировать
Можете описать что происходит при старте скады с переменными/полями, и что я не так делаю? Те же скрипты на другом объекте (до последнего обновления) работают чудесно
В новой версии все внутренние переменные инициализируются минимумом шкалы, если диапазон шкалы лежит выше нуля. Вот пример для нескольких внутренних переменных:
  • Переменная А со шкалой 0..100, будет ицициализ. значением 0;
  • Переменная B со шкалой -30..100, будет ицициализ. значением 0;
  • Переменная C со шкалой 25-100, будет ицициализ. значением 25;
  • Переменная C со шкалой 150-300, будет ицициализ. значением 150;
Это касается только внутренних переменных. Таким образом они не могут принять значение ниже минимума шкалы после старта проекта.
Внешние переменные (с OPC-серверов) никак не инициализируются, т.к. их значения всегда приходят с OPC-сервера. А поля отображают текущие значения переменных.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Инициализация переменных
« Ответ #2 : 16 Марта 2017, 10:52:40 »
Цитировать
Можете описать что происходит при старте скады с переменными/полями, и что я не так делаю? Те же скрипты на другом объекте (до последнего обновления) работают чудесно
В новой версии все внутренние переменные инициализируются минимумом шкалы, если диапазон шкалы лежит выше нуля. Вот пример для нескольких внутренних переменных:
  • Переменная А со шкалой 0..100, будет ицициализ. значением 0;
  • Переменная B со шкалой -30..100, будет ицициализ. значением 0;
  • Переменная C со шкалой 25-100, будет ицициализ. значением 25;
  • Переменная C со шкалой 150-300, будет ицициализ. значением 150;
Это касается только внутренних переменных. Таким образом они не могут принять значение ниже минимума шкалы после старта проекта.
Внешние переменные (с OPC-серверов) никак не инициализируются, т.к. их значения всегда приходят с OPC-сервера. А поля отображают текущие значения переменных.
Понятно. Уже порешал сменив событие с OnDataChange на OnDoneInput в полях ввода и слегка подправив скрипты. А какое событие комбобокса отвечает ручному изменению параметра?

И не напомните как програмно определить есть ли уже значение с ОРС переменной? Качество?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Re: Инициализация переменных
« Ответ #3 : 16 Марта 2017, 20:44:02 »
Цитировать
А какое событие комбобокса отвечает ручному изменению параметра?
Сейчас любое изменение (вручную или программой) переменной комбо-бокса приведет к вызову OnDataChange. Кстати, это работает даже если список не связан с переменной (тогда для него выделяется отдельная виртуальная переменная при старте проекта). Но когда именно пользователь изменил список отследить не получится. Добавим такое событие по аналогии с OnDoneInput у поля.

Цитировать
И не напомните как програмно определить есть ли уже значение с ОРС переменной? Качество?
Да, нужно использовать качество. Правда бывает OPC-серверы сразу отдают скаде нули с хорошим качеством, а потом соединяются с устройством.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Инициализация переменных
« Ответ #4 : 17 Марта 2017, 11:24:01 »
Цитировать
А какое событие комбобокса отвечает ручному изменению параметра?
Сейчас любое изменение (вручную или программой) переменной комбо-бокса приведет к вызову OnDataChange. Кстати, это работает даже если список не связан с переменной (тогда для него выделяется отдельная виртуальная переменная при старте проекта). Но когда именно пользователь изменил список отследить не получится. Добавим такое событие по аналогии с OnDoneInput у поля.
Был бы очень рад как можно более скорому решению вопроса. Реально стопорнулись работы над проектом.

Суть проблемы. В один ворд пакуются значения 5 состояний (комбобоксов), которые иннициализируются в 0 (авария) и вываливаются в ОРС, а далее контроллеру. Я сейчас, конечно, придумаю затычку, но вообще это не сильно хорошо.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Инициализация переменных
« Ответ #5 : 17 Марта 2017, 18:16:06 »
Обход нашел :) Уже не к спеху, если что.