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

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

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Ivan_Vit

Страницы: [1]
1
Здравствуйте, коллеги!

Ситуация такая. В моем проекте предусмотрены сообщения , например, работа К3.2 ( по переменной status_37  бит 1) и всё работает.

Мне нужно сделать сообщения для всех датчиков давления и температуры так, чтобы при приходе  с датчика температуры аналогового значения "-55"  или при приходе с датчика давления "-1" формировалось сообщение , например, "неисправность датчика давления в контуре СК" или "неисправность датчика давления в контуре ОВ ".

Уточню , то есть у меня есть много аналоговых значений от датчиков , например, температуры , установленных в разных местах. И мне необходимо при достижении аварийного значение указать в сообщение у какого именно датчика, установленного в определенном месте, возникла ошибка.

Пока что я только смог настроить аварийные границы. То есть я в разделе " переменные" выбирал необходимую переменную, настраивал аварийные границы  и да, сообщение приходит, но оно некрасивое и не совсем то что нам нужно. Вот что приходит к примеру: _43241_temp_otop_obratka достигнута аварийная граница ! Значение "-55".

Отмечу, что я настроил шаблон сообщений ( ниже привел пример) Но, почему то, должным образом приходит только от одного датчика, а по остальным не приходит сообщение, приходит только настроенная мной граница. Я всё перепроверил. От того шаблона, от которого приходит сообщение я сравнивал со всем шаблонами, ничего не нашел, не понимаю в чём проблема

2
Подскажите, а если есть в свойствах объекта и "Тэг" и "Бит", то в какую из этих нужно указать номер бита и почему ?
Исходя из скрипта    if GetBit(AsInt, Tag) then    он будет брать значение из "Тэг". А как тогда сделать, чтобы брал из "Бит"?


Здравйствуйте.

Свяжите объекты с требуемой переменной и у каждого объекта в свойстве "Тэг" укажите номер бита, по которому должен меняться цвет (биты нумеруются с нуля). Далее, нужно написать один универсальный скрипт приведенный ниже и назначить его на событие OnDataChange требуемых объектов.
Код: (delphi)
begin
  if Sender is TM_Object then            // проверяем, что Sender это объект
    with Sender as TM_Object do          // приводим Sender к типу "TM_Object"
      if GetBit(AsInt, Tag) then         // если значение бита, указанного в свойстве "Тег" объекта равно True, то
        Color := clGreen                 // изменить цвет объекта на зеленый
      else                               // иначе
        Color := clRed;                  // изменить цвет объекта на красный
end.

3
Здравствуйте, подскажите, буду очень признателен!

Из руководства:
Если необходимо изменять цвет по биту одной переменной, а скорость анимации по биту другой переменной, то нужно указать в свойстве изображения «Переменная» первую переменную, а в свойстве «Доп. переменная» вторую переменную. Далее, нужно написать универсальный скрипт приведенный ниже и установить его на событие OnDataChange и OnDataChangeEx требуемых изображений:
Код: (delphi)
begin
if Sender is TM_Image then // сначала убедимся, что скрипт вызван объектом «Изображение»
with Sender as TM_Image do // далее будем работать с объектом Sender, как с изображением
begin
// меняем цвет изображения по основной переменной
if GetBit(AsInt, 3) = TRUE then
Color := clGreen
else
Color := clRed;
// меняем скорость анимации изображения по доп. переменной «VariableEx»
if GetBit(VariableEx.AsInt, 1) = TRUE then
AnimSpeed := 10
else
AnimSpeed := 0;
end;
end.
Мой случай:
У меня есть две переменные status_36 и status_37, по status_36 по биту 5 сигнал аварии, транспарант( кнопка ) должна гореть красным.
По status_37 по биту 0 приходит сигнал работы, кнопка должна при работе гореть зеленым.
Далее, свойствах кнопки я могу указать основную и доп. переменную, а также могу указать бит и тег, в событиях кнопки есть ondatachange и ondatachangeEx.
Нужно ли в свойствах кнопки вписывать биты, по которым приходит сигнал, если да то как , так как есть одна строка куда указывается бит и одна строка, где указывается тег. А у меня же два бита используются 5 и 0.
Проблема в том , что в свойствах кнопки есть только одно поле «Бит», но у меня два бита в разных переменных. Невозможно указать оба бита в одном поле.

Далее, если я правильно понял ( прошу, дайте знать правильно/неправильно понял)
кнопкой(транспарантом) можно управлять полностью через скрипт, при этом настройка свойствах кнопки будет следующей:

Основная переменная (Variable): status_36
Доп. переменная (VariableEx): status_37
Бит: 0 или оставить пустым (так так как управление полностью через скрипт). Отмечу, что оставить пустым не получается, есть вариант сделать "-1" (что означает не работать с битами). Остается только ставить нуль, но это сомнительно.
Tag: не использую.

Тогда скрипт будет таким:
Код: (delphi)
begin
if Sender is TM_Button then
with Sender as TM_Button do
begin
// Проверяем бит 5 в status_36 (авария)
var alarmBit := 5; // бит для аварии
var workBit := 0; // бит для работы

// Получаем значения переменных
var alarmStatus := GetBit(AsInt, alarmBit); // Основная переменная (status_36)
var workStatus := GetBit(VariableEx.AsInt, workBit); // Доп. переменная (status_37)

// Определяем цвет
if alarmStatus = TRUE then
States[0].Color := clRed // Авария — красный
else if workStatus = TRUE then
States[0].Color := clGreen // Работа — зеленый
else
States[0].Color := clGray; // Ни аварии, ни работы — серый
end;
Основной вопрос заключается в том, а если этих кнопок будет много, то будет ли возможность сделать универсальный скрипт для такого случая ? Чтобы к каждой кнопки не привязывать скрипт, где просто нужно поменять нумера для битов.

Страницы: [1]