Simple-Scada forum
Simple-Scada 2 => Ваши вопросы => Тема начата: Teodor от 15 Марта 2017, 19:16:33
-
Столкнулся с одной странностью, которую пока объяснить себе не могу.
Скрипт ОnDataChange (поля с ОРС переменной) устанавливает переменную (внутреннюю) в TRUE.
При запуске проекта переменная вcтает в TRUE. Минимум для OPC переменной 150 (по факту в регистре больше). Но устанавливается в поле именно это значение.
Можете описать что происходит при старте скады с переменными/полями, и что я не так делаю? Те же скрипты на другом объекте (до последнего обновления) работают чудесно(я его еще не обновил и уже боюсь). Еще есть разница во времени обновления. На старом 1с(лектус 1с), на новом 2с (лектус 4с).
Скрипты и проект я уже скидывал.
-
Можете описать что происходит при старте скады с переменными/полями, и что я не так делаю? Те же скрипты на другом объекте (до последнего обновления) работают чудесно
В новой версии все внутренние переменные инициализируются минимумом шкалы, если диапазон шкалы лежит выше нуля. Вот пример для нескольких внутренних переменных:
- Переменная А со шкалой 0..100, будет ицициализ. значением 0;
- Переменная B со шкалой -30..100, будет ицициализ. значением 0;
- Переменная C со шкалой 25-100, будет ицициализ. значением 25;
- Переменная C со шкалой 150-300, будет ицициализ. значением 150;
Это касается только внутренних переменных. Таким образом они не могут принять значение ниже минимума шкалы после старта проекта.
Внешние переменные (с OPC-серверов) никак не инициализируются, т.к. их значения всегда приходят с OPC-сервера. А поля отображают текущие значения переменных.
-
Можете описать что происходит при старте скады с переменными/полями, и что я не так делаю? Те же скрипты на другом объекте (до последнего обновления) работают чудесно
В новой версии все внутренние переменные инициализируются минимумом шкалы, если диапазон шкалы лежит выше нуля. Вот пример для нескольких внутренних переменных:
- Переменная А со шкалой 0..100, будет ицициализ. значением 0;
- Переменная B со шкалой -30..100, будет ицициализ. значением 0;
- Переменная C со шкалой 25-100, будет ицициализ. значением 25;
- Переменная C со шкалой 150-300, будет ицициализ. значением 150;
Это касается только внутренних переменных. Таким образом они не могут принять значение ниже минимума шкалы после старта проекта.
Внешние переменные (с OPC-серверов) никак не инициализируются, т.к. их значения всегда приходят с OPC-сервера. А поля отображают текущие значения переменных.
Понятно. Уже порешал сменив событие с OnDataChange на OnDoneInput в полях ввода и слегка подправив скрипты. А какое событие комбобокса отвечает ручному изменению параметра?
И не напомните как програмно определить есть ли уже значение с ОРС переменной? Качество?
-
А какое событие комбобокса отвечает ручному изменению параметра?
Сейчас любое изменение (вручную или программой) переменной комбо-бокса приведет к вызову OnDataChange. Кстати, это работает даже если список не связан с переменной (тогда для него выделяется отдельная виртуальная переменная при старте проекта). Но когда именно пользователь изменил список отследить не получится. Добавим такое событие по аналогии с OnDoneInput у поля.
И не напомните как програмно определить есть ли уже значение с ОРС переменной? Качество?
Да, нужно использовать качество. Правда бывает OPC-серверы сразу отдают скаде нули с хорошим качеством, а потом соединяются с устройством.
-
А какое событие комбобокса отвечает ручному изменению параметра?
Сейчас любое изменение (вручную или программой) переменной комбо-бокса приведет к вызову OnDataChange. Кстати, это работает даже если список не связан с переменной (тогда для него выделяется отдельная виртуальная переменная при старте проекта). Но когда именно пользователь изменил список отследить не получится. Добавим такое событие по аналогии с OnDoneInput у поля.
Был бы очень рад как можно более скорому решению вопроса. Реально стопорнулись работы над проектом.
Суть проблемы. В один ворд пакуются значения 5 состояний (комбобоксов), которые иннициализируются в 0 (авария) и вываливаются в ОРС, а далее контроллеру. Я сейчас, конечно, придумаю затычку, но вообще это не сильно хорошо.
-
Обход нашел :) Уже не к спеху, если что.