Для реализации пользовательских алгоритмов на панели ОВЕН СП3xx используются макросы. Макросы представляют собой небольшие программы, написанные на языке ANSI C (C89). Каждый проект по умолчанию содержит глобальный макрос (рис. 1), который предназначен для объявления глобальных переменных и функций, доступных в пользовательских макросах.
Для создания пользовательского макроса в дереве проекта выбирается узел Макросы, в контекстном меню – команда Добавить макрос. Другая команда этого меню – Компиляция – используется для проверки корректности синтаксиса всех макросов проекта.
Простейший макрос
На рис. 2 приведен пример простейшего макроса, который суммирует значения регистров PSW300-303 и записывает результат в регистр PSW400. В левой части редактора макросов отображается список системных функций. Их полное описание приведено в Руководстве пользователя и справке программы Конфигуратор СП300.

Вызов макросов
Код, содержащийся в пользовательских макросах, выполняется при их вызове. Вызов осуществляется с помощью элементов Функциональная кнопка и Функциональная область.
Первый элемент, как правило, применяется для однократного вызова макросов, второй – для циклического (рис. 3). Следует отметить, что при вызове макроса все его переменные инициализируются начальными значениями, поэтому при необходимости сохранения результатов вычислений следует использовать память панели.

Работа с внутренней памятью
Панели СП3xx имеют три независимые области памяти – PSB (биты), PSW (оперативные регистры), PFW (энергонезависимые регистры). Методика работы с каждой областью памяти в макросах различается.

- Для работы с PSB используются функции: GetPSBStatus – чтение бита; SetPSB – установка бита в TRUE; ResetPSB – установка бита в FALSE. В качестве примера представлен макрос, который записывает значение бита PSB300 в PSB400 (рис. 4).
- Работа с PSW производится с помощью оператора присваивания «=»: PSW[400]=PSW[300];
- Работа с PFW осуществляется с помощью функций Read/Reads и Write/ Writes. На рис. 5 приведен код макроса, который считывает значение PFW300 в локальную переменную wVar и записывает ее значение в PFW400. C помощью функций Reads/Writes можно считывать и записывать массивы данных.
Пример использования макросов – работа с COM-портом

Для записи в регистр битовой маски выходов модулей ОВЕН MУ110 и МК110 нужно применять функцию Modbus 0x10 (Write Multiple Registers). Однако при использовании графических элементов панели запись одного регистра всегда производится функцией 0x06 (Write Single Register), поэтому при работе с модулями МУ/МК обмен реализуется через макросы.
В качестве примера рассмотрим работу с модулем ОВЕН МК110. Объявим в глобальном макросе функцию MK_MASK_WRITE. Ее аргументами являются адрес модуля, адрес записываемого регистра, значение и номер бита, в который записывается статус обмена.
Код функции показан на рис. 6. Функция MK_MASK_WRITE выполняет три действия:

- формирует запрос к модулю по протоколу Modbus;
- отправляет этот запрос в PLC-порт, считывает ответ и освобождает порт;
- выставляет флаг ошибки в заданный бит при некорректном ответе.
Функцию MK_MASK_WRITE следует вызывать в пользовательском макросе (рис. 7). В результате выполнения данного макроса в модуль МК110 с адресом 70 в регистр 50 (регистр битовой маски выходов) будет записано значение регистра панели PSW300. В случае ошибки биту PSB400 присваивается значение TRUE.

Обращаем внимание, что при работе с портом нет необходимости задавать его параметры, так как они настраиваются в Конфигураторе СП300. Использование порта в макросе не влияет на опрос через графические элементы.
Заключение
Макросы представляют собой удобный инструмент для решения нестандартных задач. Использование макросов значительно расширяет возможности панелей СП3xx. Подробное описание макросов приведено в Руководстве пользователя и справке программы Конфигуратор СП300. Пример работы с модулями МУ/МК доступен для скачивания на сайте owen.ru.
