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

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

Автор Тема: Запись в БД по переднему или заднему фронту изменения переменной в ПЛК  (Прочитано 779 раз)

Gorsky17

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Здравствуйте!
Есть битовая переменная в ПЛК. При бит = True хочу формировать запрос к БД только 1 раз. При использовании скрипта "изменились переменные" с битовой переменной получаю сразу 2 записи в БД по переднему и заднему фронтам. Есть возможность работы только по переднему или только по заднему фронту?

P.s. велосипед написан, но хотелось бы более изящного решения.

Pendalf

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

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

А как именно конкретно ваш велосипед реализован?

Simple_Scada

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

Цитировать
Есть битовая переменная в ПЛК. При бит = True хочу формировать запрос к БД только 1 раз. При использовании скрипта "изменились переменные" с битовой переменной получаю сразу 2 записи в БД по переднему и заднему фронтам.
Если в скрипте с типом события "Изменились переменные" требуется формировать запрос к БД только при изменении бита переменной с 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 текущую версию проекта и указать скрипт, который нужно проверить.
« Изменён: 07 Февраля 2024, 09:33:18 от Simple_Scada »

Gorsky17

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

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

Pendalf

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