Функционал пользовательских программ предоставляется в бета-версии.
Пользовательские программы предназначены для автоматического управления объектами при выполнении определенных условий, заданных пользователем с помощью языка программирования Object Pascal.
Пользователю доступно:
запуск и остановка, просмотр статуса выполнения программы и значений текущих входных / выходных параметров;
Доступность просмотра, создания, редактирования и количество пользовательских программ определяется:
выбранным тарифом;
- .
Просмотр списка пользовательских программ
В разделе Администрирование откройте вкладку Программы. Откроется окно:
В списке пользовательских программ отображается следующая информация:
Название
— название программы;Прибор
— названия приборов, параметры которых содержит программа;Категория
— категории, в которые входит программа;Статус
— статус выполнения программы. Возможные варианты:Остановлен
В работе
Ошибка
Для просмотра и редактирования программы нажмите на название программы:
Создание и компилирование программ
В разделе Администрирование откройте вкладку Программы. Откроется окно:
При создании программы учитывайте следующие особенности:
Используйте язык программирования Object Pascal. Поддержаны модули:
Поддержаны системные переменные:
*имя_переменной*_lastTime — время последних данных. В формате UnixTime без учета часового пояса (GMT±0). Размер переменной 64 бита (LINT);
*имя_переменной*_fault — код ошибки, сгенерированный OwenCloud или код ошибки протокола Modbus. Размер переменной 64 бита (LINT).
Учитывайте ограничения имени переменной (зарезервированные слова Object pascal и модификаторы);
При написании программы не изменяйте сигнатуру функции;
Запрещается использовать циклические условия while…do, for…to, repeat...until;
Запись производится циклически с периодом 1 минута;
Запись значения из программы является приоритетной, если произошел обрыв связи с прибором или значение параметра было изменено извне, сервис выполнит запись ещё раз через минуту;
Отключение опроса параметров (снятие флагов «Оперативный», «Конфигурационный», «Управляемый»), удаление параметра или прибора из OwenCloud приведет к автоматической остановке выполнения программы и появлению статуса Ошибка;
Для создания пользовательской программы нажмите кнопку Добавить программу. Откроется окно:
Наименование – введите название пользовательской программы.
Категория – выберите группы, к которым будет относиться пользовательская программа.
Нажмите кнопку Продолжить. Откроется окно редактора программы:
Добавьте переменные и/или константы. Поддержаны следующие виды переменных:
локальные переменные. Значение переменной обновляется при каждом запуске функции. Локальные переменные назначаются в коде программы.
глобальные переменные. Значение перемененной определяется перед первым запуском в функции инициализации (procedure Init).
входные переменные. Параметры приборов, которые в программе доступны для чтения.
выходные переменные. Параметры приборов, которые в программе доступны для записи.
Нажмите кнопку Добавить и выберите переменную или константу для добавления. Возможные варианты:
входная переменная. Откроется окно:
Имя — введите название переменной;
Тип — отображается тип переменной;
Параметр — нажмите на кнопку и выберите параметр для переменной. Для переменных типа «Вход» отображаются параметры, которые имеют хотя бы один из типов: «Оперативный», «Конфигурационный» или «Управляемый»;
Описание — при необходимости добавьте описание переменной.
выходная переменная. Откроется окно:
Имя — введите название переменной;
Тип — отображается тип переменной;
Параметр — нажмите на кнопку и выберите параметр для переменной. Для переменных типа «Выход» отображаются параметры, которые имеют хотя бы один из типов: «Оперативный», «Конфигурационный» или «Управляемый»;
Описание — при необходимости добавьте описание переменной.
глобальная переменная. Откроется окно:
Имя — введите название переменной;
Тип — отображается тип переменной;
Формат — выберите формат переменной. Возможные варианты: INT, SINT, DINT, UINT, UDINT, ULINT, RAEL, LREAL, BOOL, STRING, BYTE, WORD, DWORD, LWORD;
Описание — при необходимости добавьте описание переменной.
константа. Откроется окно:
Имя — введите название переменной;
Тип — отображается тип переменной;
Формат — выберите формат переменной. Возможные варианты: INT, SINT, DINT, UINT, UDINT, ULINT, RAEL, LREAL, BOOL, STRING, BYTE, WORD, DWORD, LWORD;
Значение — введите значение переменной;
Описание — при необходимости добавьте описание переменной.
Запустите компиляцию программы и дождитесь успешного завершения процесса. При возникновении ошибки компилятор выдаст соответствующее сообщение.
Запуск и остановка пользовательской программы
Запуск и остановка пользовательской программы доступна пользователям с ролью «Управляющий программами».
В главном окне OwenCloud выберите пользовательскую программу. Откроется окно:
Во вкладке Программа отображаются текущие значения параметров и статус выполнения программы.
При необходимости запустите/остановите выполнение или перейдите в настройки программы.
Остановка программы производится по нажатию кнопки Запуск / Остановка или автоматически. Автоматическая остановка производится в следующих случаях:
Пользовательская программа приводит к нагрузке системы и/или не отвечает критериям безопасности;
При смене тарифного плана с наименьшим количеством пользовательских программ, запущенные программы сверх тарифного плана будут автоматически остановлены;
При отключении опроса или удалении параметра / прибора, входящего в программу, программа будет автоматически остановлена со статусом выполнения Ошибка.
При автоматической остановке программы производится отправка уведомлений на электронную почту пользователям компании с ролью «Управляющий программами» и «Управляющий командами».
Просмотр журнала изменений статуса программы
В журнале отображается в какое время каким пользователем или системой была произведена остановка или запуск программы. При автоматической остановке программы системой отображается причина остановки.
В главном окне OwenCloud выберите пользовательскую программу и откройте вкладку Журнал. Откроется окно:
Журнал содержит следующую информацию:
Дата и время — дата и время (UTC+3) изменения статуса программы;
Статус — статус программы. Возможные значения: запуск, остановка;
Инициатор — имя учетной записи, под которой изменился статус выполнения программы;
Комментарий — комментарии, которые были указаны при изменении статуса выполнения программы.
Просмотр журнала записи выходных параметров
В главном окне OwenCloud выберите пользовательскую программу и откройте вкладку Журнал записи параметров. Откроется окно:
В журнале записи параметров отображается следующая информация:
Дата и время
— дата и время (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
Пример 2
Двухпозиционное управление исполнительным механизмом.
Описание: При увеличении температуры до 28 градусов, вентилятор включается, температура начинает уменьшаться. При уменьшении температуры до 23 градусов вентилятор отключается, температура постепенно увеличивается.
Код программы:
procedure UserFunction; cdecl; export;
begin
If (temp >= 28) then vent := 1;
if (temp <= 23) then vent := 0;
end;
Запись по времени
Запись значений в определенное календарное время. Составление расписания по дням недели. Запись значений на определенное время по таймеру.
Пример 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;
Пример 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;
Работа с системными переменными
Для входных, выходных и глобальных переменных поддержаны системные переменные. Их можно получить следующим образом:
*имя_переменной*_lastTime — время последних данных. В формате UnixTime без учета часового пояса (GMT±0). Размер переменной 64 бита (LINT);
*имя_переменной*_fault — код ошибки, сгенерированный OwenCloud или код ошибки протокола Modbus. Размер переменной 64 бита (LINT).
Пример 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;
Пример 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;