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

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

Автор Тема: Квитирование по кнопке в контроллер  (Прочитано 35739 раз)

AndreyShilov

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Добрый вечер, хочу, чтобы по нажатию кнопки "Подтвердить" квитировать сообщения и отправить сигнал квитирования в контроллер, как мне это можно сделать? К примеру активно сейчас сообщение "Авария насоса". Пользователь нажмет "Подтвердить" и в этот момент пропадет сообщение и одновременно отправится сигнал квитирования в контроллер. Возможно к этой кнопке можно как-то привязать сигнал bool значением которой управляла бы эта кнопка? 

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1385
    • Просмотр профиля
Re: Квитирование по кнопке в контроллер
« Ответ #1 : 01 Августа 2025, 09:15:54 »
Здравствуйте.

Чтобы при подтверждении (квитировании) сообщения в переменную, с которой связано сообщение, записывался ноль, можно использовать свойство сообщения "Сброс".

Если сигнал квитирования на ПЛК реализован через одну переменную, то вместо штатной панели сообщений можно создать свою. Кнопку подтверждения нужно связать с требуемой переменной и оставить у кнопки одно состояние со значением 0. Тогда при нажатии на нее в переменную будет записываться значение 0.

vba

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Квитирование по кнопке в контроллер
« Ответ #2 : 22 Января 2026, 11:57:09 »
Добрый день.
Похожая проблема с квитированием, не стал делать новую тему.
Алармы формируются в ПЛК, поэтому для ПЛК нужен признак квитирования каждого аларма в отдельности от scada. Изначально собрал алармы в word (биты 1-4). В свойствах сообщения взвел Сброс (Message 1 на скрине). Если алармы квитировать по одному, то все работает.
Если будут одновременно активны несколько алармов, и нажать Квитировать все, то у меня в слове алармов сбрасывается только один бит, самый старший по номеру из активных. Т.е. если биты 1 и 2 были в 1, то при нажатии Квитировать все, сбрасывается только бит 2. В ПЛК сделал логику в начале функционального блока по отлову и запоминанию падающего фронта битов алармов (запоминание факта квитирования от scada), дальше эти биты опять переписывается в 1, т.к. условия алармов еще активны.
Пробовал делать тестовый word, который не переписывается постоянно в ПЛК, привязывал алармы к его битам. Работало нормально, все биты сбрасывались при нажатии Квитировать все.
Пока остановился на варианте передачи алармов на scada отдельными битовыми переменными, не собранными в word (Message 2...5 на скрине). Так кнопка Квитировать все работает.
Было бы хорошо у сообщения иметь поле Квитировано, которое можно было бы привязать к параметру и передавать в ПЛК.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Квитирование по кнопке в контроллер
« Ответ #3 : 27 Января 2026, 15:16:05 »
Здравствуйте.

Спасибо за информацию, причину выявили, добавим исправление в ближайшее обновление.
« Изменён: 27 Января 2026, 17:01:58 от Simple-Scada »

vba

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Квитирование по кнопке в контроллер
« Ответ #4 : 28 Января 2026, 08:14:18 »
Когда примерно выйдет обновление?
Надо решить как проект делать.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Квитирование по кнопке в контроллер
« Ответ #5 : 28 Января 2026, 21:46:19 »
Включили исправление в обновление 2.7.4.0. Скачать можно по прежним ссылкам.

Цитировать
Надо решить как проект делать.
Рекомендуем работать с битами внешних переменных (получаемых с OPC-сервера) только на чтение (если ваш OPC-сервер и ПЛК не поддерживает прямую адресацию на уровне битов).

Для записи значений в биты переменной лучше всегда использовать отдельные Boolean переменные, вместо работы с битами. Это касается не только скады, но и любого другого ПО, которое может менять биты во внешней (опрашиваемой) переменной. Причина в следующем:
  • Скада и ПЛК всегда работают с разной частотой и не синхронизированы;
  • При изменении любого бита, скада передаст в ПЛК не сам бит, а целиком число, которому принадлежит этот бит (затирая остальные биты). То же самое с чтением;
В результате всегда возможны конфликты:
  • Скада читает значение 0001 и пытается сбросить бит, т.е. записать 0000;
  • В этот момент на ПЛК значение меняется на 1111;
  • Скада отправляет свою версию 0000;
  • В результате на ПЛК затираются четыре бита, а планировалось сбросить только один.
Поэтому, менять биты должен только источник данных, все остальные должны только читать биты.
« Изменён: 28 Января 2026, 22:06:57 от Simple_Scada »