Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Gorsky17 от 06 Февраля 2024, 15:46:24

Название: Запись в БД по переднему или заднему фронту изменения переменной в ПЛК
Отправлено: Gorsky17 от 06 Февраля 2024, 15:46:24
Здравствуйте!
Есть битовая переменная в ПЛК. При бит = True хочу формировать запрос к БД только 1 раз. При использовании скрипта "изменились переменные" с битовой переменной получаю сразу 2 записи в БД по переднему и заднему фронтам. Есть возможность работы только по переднему или только по заднему фронту?

P.s. велосипед написан, но хотелось бы более изящного решения.
Название: Re: Запись в БД по переднему или заднему фронту изменения переменной в ПЛК
Отправлено: Pendalf от 06 Февраля 2024, 22:02:24
Есть схожая проблема с битами в переменной.

Красивого решения нет - скорее всего посоветуют разбить на разные булевые теги и с ними работать, Ну а с фронтами придётся работать через велосипед.

А как именно конкретно ваш велосипед реализован?
Название: Re: Запись в БД по переднему или заднему фронту изменения переменной в ПЛК
Отправлено: Simple_Scada от 07 Февраля 2024, 01:32:32
Здравствуйте.

Цитировать
Есть битовая переменная в ПЛК. При бит = True хочу формировать запрос к БД только 1 раз. При использовании скрипта "изменились переменные" с битовой переменной получаю сразу 2 записи в БД по переднему и заднему фронтам.
Если в скрипте с типом события "Изменились переменные (https://simple-scada.com/help/script/changed-the-variables.html)" требуется формировать запрос к БД только при изменении бита переменной с False на True, то можно использовать следующий пример кода:
Код: (delphi)
begin
// если значение 6-ого бита переменной вызвавшей скрипт = True, а предыдущее значение = False то
if (GetBit(Variable.AsInt,5)) and (not GetBit(PrevAsInt,5)) then
  begin
    // здесь формируем запрос к БД
  end;
end.
В данном скрипте запрос будет выполняться только при изменении значения указанного бита переменной с False на True. Чтобы прокомментировать, почему у Вас производится две записи в БД и дать дополнительные рекомендации, требуется проверка проекта. Вы можете прислать нам на support@simple-scada.com текущую версию проекта и указать скрипт, который нужно проверить.
Название: Re: Запись в БД по переднему или заднему фронту изменения переменной в ПЛК
Отправлено: Gorsky17 от 07 Февраля 2024, 09:43:10
Работает, спасибо.

Мой велосипед был основан на использовании счетчика CTU в ПЛК. Я просто регистрировал изменение переменной CV. Но это плохой способ, так как при откл/вкл ПЛК переменная CV обнулялась и это обнуление тоже считалось изменением переменной в Simple scada, что влекло создание фантомной записи в БД. :-(
В общем используйте предложенный администратором метод, он рабочий.
Название: Re: Запись в БД по переднему или заднему фронту изменения переменной в ПЛК
Отправлено: Pendalf от 07 Февраля 2024, 23:35:37
Ясно, спасибо. Действительно велосипед.