Пользовательские программы (₽)

Функционал пользовательских программ предоставляется в бета-версии.

Пользовательские программы предназначены для автоматического управления объектами при выполнении определенных условий, заданных пользователем с помощью языка программирования Object Pascal.

Пользователю доступно: 

Доступность просмотра, создания, редактирования и количество пользовательских программ определяется:

Просмотр списка пользовательских программ

В разделе Администрирование откройте вкладку Программы. Откроется окно:

Graphic

В списке пользовательских программ отображается следующая информация:

  • Название

    — название программы;
  • Прибор

    — названия приборов, параметры которых содержит программа;
  • Категория

    — категории, в которые входит программа;
  • Статус

    — статус выполнения программы. Возможные варианты:
    • Остановлен

      GraphicПрограмма доступна для запуска
      GraphicПрограмма недоступна для запуска:
      • последняя компиляция невыполнена;

      • ограничение по тарифному плану.

    • В работе

      GraphicПрограмма выполняется успешно. Доступна кнопка «Остановить».
    • Ошибка

      GraphicПрограмма недоступна для запуска выявлены ошибки при исполнении. Проверьте корректность данных параметров.

Для просмотра и редактирования программы нажмите на название программы:

Graphic

Создание и компилирование программ

В разделе Администрирование откройте вкладку Программы. Откроется окно:

Graphic

При создании программы учитывайте следующие особенности:

  • Используйте язык программирования Object Pascal. Поддержаны модули:

    • SysUtils. Из соображений безопасности не поддержана работа с файлами, установление сетевых соединений;

    • DateUtils

  • Поддержаны системные переменные:

  • Учитывайте ограничения имени переменной (зарезервированные слова Object pascal и модификаторы);

  • При написании программы не изменяйте сигнатуру функции;

  • Запрещается использовать циклические условия while…do,  for…to, repeat...until;

  • Запись производится циклически с периодом 1 минута;

  • Запись значения из программы является приоритетной, если произошел обрыв связи с прибором или значение параметра было изменено извне, сервис выполнит запись ещё раз через минуту;

  • Отключение опроса параметров (снятие флагов «Оперативный», «Конфигурационный», «Управляемый»), удаление параметра или прибора из OwenCloud приведет к автоматической остановке выполнения программы и появлению статуса Ошибка;

Примечание
В связи с тем, что доступен вывод значений только параметров прибора, для проверки кода используйте онлайн-компиляторы (например, компилятор).

Для создания пользовательской программы нажмите кнопку Добавить программу. Откроется окно:

Graphic

Наименование – введите название пользовательской программы.

Категория – выберите группы, к которым будет относиться пользовательская программа.

Нажмите кнопку Продолжить. Откроется окно редактора программы:

Graphic

Добавьте переменные и/или константы. Поддержаны следующие виды переменных:

  • локальные переменные. Значение переменной обновляется при каждом запуске функции. Локальные переменные назначаются в коде программы.

  • глобальные переменные. Значение перемененной определяется перед первым запуском в функции инициализации (procedure Init).

  • входные переменные. Параметры приборов, которые в программе доступны для чтения.

  • выходные переменные. Параметры приборов, которые в программе доступны для записи.

Нажмите кнопку Добавить и выберите переменную или константу для добавления. Возможные варианты:

  • входная переменная. Откроется окно:

    Graphic
    • Имя — введите название переменной;

    • Тип — отображается тип переменной;

    • Параметр — нажмите на кнопку Graphicи выберите параметр для переменной. Для переменных типа «Вход» отображаются параметры, которые имеют хотя бы один из типов: «Оперативный», «Конфигурационный» или «Управляемый»;

    • Описание — при необходимости добавьте описание переменной.

  • выходная переменная. Откроется окно:

    Graphic
    • Имя — введите название переменной;

    • Тип — отображается тип переменной;

    • Параметр — нажмите на кнопку Graphic и выберите параметр для переменной. Для переменных типа «Выход» отображаются параметры, которые имеют хотя бы один из типов: «Оперативный», «Конфигурационный» или «Управляемый»;

    • Описание — при необходимости добавьте описание переменной.

  • глобальная переменная. Откроется окно:

    Graphic
    • Имя — введите название переменной;

    • Тип — отображается тип переменной;

    • Формат — выберите формат переменной. Возможные варианты: INT, SINT, DINT, UINT, UDINT, ULINT, RAEL, LREAL, BOOL, STRING, BYTE, WORD, DWORD, LWORD;

    • Описание — при необходимости добавьте описание переменной.

  • константа. Откроется окно:

    Graphic
    • Имя — введите название переменной;

    • Тип — отображается тип переменной;

    • Формат — выберите формат переменной. Возможные варианты: INT, SINT, DINT, UINT, UDINT, ULINT, RAEL, LREAL, BOOL, STRING, BYTE, WORD, DWORD, LWORD;

    • Значение — введите значение переменной;

    • Описание — при необходимости добавьте описание переменной.

Запустите компиляцию программы и дождитесь успешного завершения процесса. При возникновении ошибки компилятор выдаст соответствующее сообщение.

Запуск и остановка пользовательской программы

Запуск и остановка пользовательской программы доступна пользователям с ролью «Управляющий программами».

В главном окне OwenCloud выберите пользовательскую программу. Откроется окно:

Graphic

Во вкладке Программа отображаются текущие значения параметров и статус выполнения программы.

При необходимости запустите/остановите выполнение или перейдите в настройки программы.

Остановка программы производится по нажатию кнопки Запуск / Остановка или автоматически. Автоматическая остановка производится в следующих случаях:

  • Пользовательская программа приводит к нагрузке системы и/или не отвечает критериям безопасности;

  • При смене тарифного плана с наименьшим количеством пользовательских программ, запущенные программы сверх тарифного плана будут автоматически остановлены;

  • При отключении опроса или удалении параметра / прибора, входящего в программу, программа будет автоматически остановлена со статусом выполнения Ошибка.

При автоматической остановке программы производится отправка уведомлений на электронную почту пользователям компании с ролью «Управляющий программами» и «Управляющий командами».

Просмотр журнала изменений статуса программы

В журнале отображается в какое время каким пользователем или системой была произведена остановка или запуск программы. При автоматической остановке программы системой отображается причина остановки.

В главном окне OwenCloud выберите пользовательскую программу и откройте вкладку Журнал. Откроется окно:

Graphic

Журнал содержит следующую информацию:

  • Дата и время — дата и время (UTC+3) изменения статуса программы;

  • Статус — статус программы. Возможные значения: запуск, остановка;

  • Инициатор — имя учетной записи, под которой изменился статус выполнения программы;

  • Комментарий — комментарии, которые были указаны при изменении статуса выполнения программы.

Просмотр журнала записи выходных параметров

В главном окне OwenCloud выберите пользовательскую программу и откройте вкладку Журнал записи параметров. Откроется окно:

Graphic

В журнале записи параметров отображается следующая информация:

  • Дата и время

    — дата и время (UTC+3) выполнения изменений параметров.
  • Имя переменной

    — название переменной в программе.
  • Параметр

    — измененный параметр. Формат: <название параметра>| <код параметра>.
  • Прибор

    — название прибора, которому принадлежит параметр.
  • Записываемое значение

    — значение параметра, записываемое программой в прибор.
  • Статус команды

    — статус отправленной команды. Возможные значения: в работе, ошибка, выполнено.

Примеры пользовательских программ

Запись по изменению

Запись значения в переменные в зависимости от значения других переменных осуществляется с помощью оператора If.

Полная конструкция:

If <условие> then // Если <условие> равно true, то begin [действия] end else    // иначе begin [действия] end

В данной конструкции может не использоваться:

  • else, если по алгоритму программы else не требуется;

  • блок begin … end, если выполняется только одно действие

Пример 1

Включение/выключение исполнительного механизма в зависимости от показаний датчика

Описание: Если температура больше 28 градусов, необходимо включение вентилятора. Если меньше 28, вентилятор отключается.

Код программы:

begin If (temp >= 28) then vent := 1 else  vent := 0; end
Graphic

Пример 2

Двухпозиционное управление исполнительным механизмом.

Описание: При увеличении температуры до 28 градусов, вентилятор включается, температура начинает уменьшаться. При уменьшении температуры до 23 градусов вентилятор отключается, температура постепенно увеличивается.

Код программы:

procedure UserFunction; cdecl; export; begin If (temp >= 28) then vent := 1; if (temp <= 23) then vent := 0; end;
Graphic

Запись по времени

Запись значений в определенное календарное время. Составление расписания по дням недели. Запись значений на определенное время по таймеру.

Пример 1

Описание: Вентилятор находится во включенном состоянии в рабочее время с 9:00 до 18:00 и в отключенном состоянии с 18:00 до 9:00.

Код программы:

var hh_sys, min_sys, ss_sys, ms_sys : word; work: boolean; procedure UserFunction; cdecl; export; begin DecodeTime(Time, hh_sys, min_sys, ss_sys, ms_sys); work := (hh_sys >= 9) and (hh_sys <= 17); If (work) then vent := 1 else vent := 0; end;
Graphic

Пример 2

Добавим к прошлому примеру проверку на выходные дни.

Описание: Вентилятор находится во включенном состоянии в рабочее время с 9:00 до 18:00 и в отключенном состоянии с 18:00 до 9:00 за исключением субботы и воскресенья каждой недели.

Код программы:

var hh_sys, min_sys, ss_sys, ms_sys : word; work, weekend : boolean; procedure UserFunction; cdecl; export; begin weekend := (DayOfTheWeek(now) = DaySaturday) or (DayOfTheWeek(now) = DaySunday); If (not(weekend)) then begin DecodeTime(Time, hh_sys, min_sys, ss_sys, ms_sys); work := (hh_sys >= 9) and (hh_sys <= 17); If (work) then vent := 1  else vent := 0; end; end;
Graphic

Работа с системными переменными

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

Пример 1

Добавим валидацию на код ошибки для одного из предыдущих примеров.

Описание: Если потеряна связь с прибором, показывающим температуру, то выключаем вентилятор. Если проблем со связью нет, то выполняем необходимую нам логику.

Код программы:

procedure UserFunction; cdecl; export; begin If not(temp_fault = 255) then If (temp >= 28) then vent := 1 else    vent := 0 else vent := 0; end;
Graphic

Пример 2

Допустим используются два шлюза ПМ210, к которым по интерфейсу RS-485 подключены опрашиваемые приборы. Рассмотрим случай, когда теряется связь не с приборами за шлюзом (как в прошлом примере), а с самим шлюзом ПМ210.

Описание: При потере связи с первым шлюзом, подаем команду выключения вентилятора в прибор за вторым шлюзом. Если проблем нет, то выполняем необходимую логику.

Код программы:

var user_time, data_time_gmt : TDateTime; procedure UserFunction; cdecl; export; begin user_time := now; data_time_gmt  :=  IncHour(UnixToDateTime(temp_lastTime), 3); If MinutesBetween(user_time, data_time_gmt) >= 5 then begin vent := 0; end else If (temp >= 28) then vent := 1 else    vent := 0 end;
Graphic