Создание сообщения

<< Click to Display Table of Contents >>

Navigation:  Проект > Элементы дерева объектов > Палитра ФБ > Служебные > Скрипт > Руководство и примеры > Начало работы >

Создание сообщения

Для создания сообщений есть специальная вкладка Список сообщений. Нажмем на кнопку Добавить - добавится сообщение.

sluzhebnie_skript_rukovodstvo_i_primery_nachalo_raboty_sozdanie_soobshcheniya

Изменим категорию на Отсутствие значения - она больше подходит нам по смыслу. Также укажем текст - "Нет значения одного из параметров".

sluzhebnie_skript_rukovodstvo_i_primery_nachalo_raboty_sozdanie_soobshcheniya1

Если данное сообщение необходимо квитировать, то установите соответствующий флаг. Нам сейчас это не нужно.

Теперь можно доработать код, в котором вызвать данное сообщение.

Исправим наш текст скрипта.

public override void Execute()
{
 if (Условие.HasValue==true && (Параметр1.HasValue == false || Параметр2.HasValue == false))
  HostFB.FireEvent(1); //вызов сообщения
 if (Условие == true)
 {
  Выход = Параметр1 + Параметр2;
 }
 else
 {
  Выход = Параметр1 - Параметр2;
 }
}

В условии if мы проверяем, что если у Условия есть значения, а у Параметр1 или Параметр2 его нет, то мы выдаем сообщение. Можно использовать и более короткую форму записи:

if (Условие.HasValue && (!Параметр1.HasValue || !Параметр2.HasValue))

Остановимся подробнее на вызове сообщения:

HostFB.FireEvent(1);

HostFB - это обращение к текущему ФБ, это основной класс из которого можно обращаться к элементам скрипта и проекта.

FireEvent - метод вызывающий сообщений. Данный метод перегружен - имеет несколько реализаций, отличающихся разным набором входных аргументов. Полный список перегрузок:

HostFB.FireEvent(int id);
HostFB.FireEvent(int id, string message);
HostFB.FireEvent(int id, string message, uint quality);
HostFB.FireEvent(int id, string message, uint quality, DateTime time);
HostFB.FireEvent(int id, string message, uint quality, DateTime time, long objectStateId);
HostFB.FireEvent(int id, string message, uint quality, DateTime time, long objectStateId, OperatorsHlp.OperatorHlp oper, string comment);

Мы используем самую первую - в ней мы передаем только идентификатор сообщения, заданный на вкладке Список сообщений. В этом случае вызывается сообщение с текстом заданным у сообщения.

Следующий вариант перегрузки, позволяет задать собственный текст сообщения - тогда на вкладке Список сообщений его можно не указывать. Этот вариант перегрузки применяется, если текст должен меняться в зависимости от условий.

Вариант 3 и 4, помимо текста сообщения позволяют задать качество и метку времени сообщения.

Вариант 5 позволяет формировать сообщения от имени определенного экземпляра типизированного объекта.

Вариант 6 - формировать от определенного оператора.

Сообщение типа FireEvent - это сообщение-информация, которое не имеет времени конца. Данный тип сообщения призван сообщать о каких то проблемах в выполнении скрипта. Если же наша цель формировать сообщения с началом и концом (чтобы в журнале видеть когда сообщение потеряло активность), то используется другой метод HostFB - SetEventState. Данный метод имеет следующий синтаксис:

HostFB.SetEventState(int id, bool on);

id - также номер сообщения на вкладке Настройки сообщений. on - состояние сообщения, если вызвать данный метод с параметром on равным true, то сообщение откроется - оно станет активным. Если вызвать метод еще раз но с параметром false, то сообщение закроется - перестанет быть активным и получит время конца.

Данный метод также имеет различные варианты перегрузок:

HostFB.SetEventState(int id, bool on, string message);
HostFB.SetEventState(int id, bool on, string message, uint quality)
HostFB.SetEventState(int id, bool on, string message, uint quality, DateTime time);
HostFB.SetEventState(int id, bool on, string message, uint quality, DateTime time, long objectStateId);
HostFB.SetEventState(int id, bool on, string message, uint quality, DateTime time, long objectStateId, OperatorsHlp.OperatorHlp oper, string comment)

Перегрузки аналогичны как и для FireEvent.

Отдельно стоит отметить назначение категории вызываемому сообщению. Мы изменили категорию у нашего сообщения на категорию Отсутствие значения. Это стандартная категория сообщений, но что будет если создать собственную?

Выделим элемент Система - Сообщения - Категории и сделаем новую категорию.

sluzhebnie_skript_rukovodstvo_i_primery_nachalo_raboty_sozdanie_soobshcheniya2

Теперь попробуем назначить ее категории сообщений нашего скрипта.

sluzhebnie_skript_rukovodstvo_i_primery_nachalo_raboty_sozdanie_soobshcheniya3

Наша категория в списке отсутствует. Но появилась еще одна вкладка - Сообщения.

sluzhebnie_skript_rukovodstvo_i_primery_nachalo_raboty_sozdanie_soobshcheniya4

Вот как раз в ней и нужно изменить категорию на пользовательскую

sluzhebnie_skript_rukovodstvo_i_primery_nachalo_raboty_sozdanie_soobshcheniya5

Да, несколько неудобно, но по другому реализовать это было нельзя. Вернем назад на категорию Отсутствие значения нажав на кнопку Вернуть умолчания.

Теперь проверим в режиме исполнения. Запустим наш проект и подадим значения на наши входы:

sluzhebnie_skript_rukovodstvo_i_primery_nachalo_raboty_sozdanie_soobshcheniya6

Возникло сообщение.

Вы можете применять сообщения для выдачи диагностической информации вашего скрипта. Также вы можете применять для этой цели специальные выходы скрипта, которые потом размещать на мнемосхеме. Вариант решения полностью зависит от вашей задачи и предпочтений.​​