Показано с 1 по 10 из 10

Тема: Выполнить скрипт если изменилось значение в OPC переменной

  1. #1
    Пользователь
    Регистрация
    02.11.2012
    Адрес
    г.Челябинск
    Сообщений
    95

    По умолчанию Выполнить скрипт если изменилось значение в OPC переменной

    Доброгово времени суток, подскажите как можно реализовать следующую задачу: в OPC переменной прибора может быть число 1 или 2, если значение изменилось, необходимо выполнить скрипт.

  2. #2

    По умолчанию

    Вне функции OnRead заводите переменную:
    local lastVal=0;

    В каждом OnRead сравниваете значение lastVal с текущим значением тега - если изменилось, делаете что вам нужно.
    В конце OnRead сохраняете в lastVal текущее значение.
    Спасибо.

  3. #3
    Пользователь
    Регистрация
    02.11.2012
    Адрес
    г.Челябинск
    Сообщений
    95

    По умолчанию

    В скрипте c# отсутствует функция OnRead, видим только Execute. И ещё подскажите, опрос у скрипта должен быть периодический или По изменению входов.

  4. #4

    По умолчанию

    В скаде - аналогично. В теле класса, вне метода Execute объявляете переменную:
    int lastVal=0;
    В execute сраниваете в текущим значением, если отличается - выполняете что вам нужно.
    В конце сохраняете значение в lastVal.
    Способ выполнения скрипта роли не играет.
    Спасибо.

  5. #5
    Пользователь
    Регистрация
    02.11.2012
    Адрес
    г.Челябинск
    Сообщений
    95

    По умолчанию

    На данный момент так и реализовали. Но при этом значение данной переменной обновляется через 5 секунд, однако остальные переменые обновляются раньше (менее 1 секунды) из за чего возникает "коллизия" в обработке данных.

  6. #6

    По умолчанию

    Какой переменной?
    Спасибо.

  7. #7
    Пользователь
    Регистрация
    02.11.2012
    Адрес
    г.Челябинск
    Сообщений
    95

    По умолчанию

    В общем решили данную задачу немного по другому. Столкнлись с такой проблемой на данный момент: у скрипта два дискретных выхода, в теле скрипта этим выходам присваивается состояние true, после того как состояние этих выходов передали в тэг (OPC переменную) необходимо вернуть состояние выхода скрипта в false. Но ни как не можем понять, как это сделать, т.к. если в самом скрипте добавить строчки с присвоением состояния false этим выходам, состояние true не успевает передать состояние в тэг. Не подскажите, как это сделать правильно?

  8. #8

    По умолчанию

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

  9. #9
    Пользователь
    Регистрация
    02.11.2012
    Адрес
    г.Челябинск
    Сообщений
    95

    По умолчанию

    Периодический опрос не подходит, т.к. скрипт играет роль события. Если на форме нажали кнопки 1 или 2, то на выход_1 результат true, если нажали кнопки 3 или 4, но на выход_2 результат true. И вот тут по идее напрашивается счётчик (задержка или что-то в этом роде), но sleep не помогает, просто пустой цикл тоже.

  10. #10

    По умолчанию

    Sleep или цикл - вы просто остановите весь поток и все.
    Или периодический опрос и считать циклы или вызвать HostFB.SetNeedUpdate() - это заставит на следующем цикле опять выполнится Execute, даже если входы не менялись.
    Спасибо.

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 05.04.2023, 12:22
  2. Проект на ПР200. Значение переменной с панели ПР200 не заменяет значение по умолчанию
    от Сергей Потапенко в разделе Среда программирования OWEN Logic
    Ответов: 7
    Последнее сообщение: 03.09.2020, 09:15
  3. Максимальное значение переменной.
    от Vitamin в разделе Master SCADA 3
    Ответов: 3
    Последнее сообщение: 31.07.2020, 13:57
  4. Отдать значение переменной по IP
    от vnkorol в разделе СПК2xx (архив)
    Ответов: 18
    Последнее сообщение: 27.04.2017, 12:29
  5. Ответов: 5
    Последнее сообщение: 09.09.2015, 12:39

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •