Исходный код вики Создание фоновой операции

Редактировал(а) Edgar Allan Poe 2024/02/28 18:13

Последние авторы
1 {{success title="**Внимание!**"}}
2 Перед началом работы убедитесь в наличии активной опции «Фоновые операции».
3 {{/success}}
4
5 Для многих задач по управлению ЧПУ системой требуется возможность фонового выполнения макросов, в которых отслеживаются определённые параметры работы системы и выполняются необходимые действия (например, управление выходами).
6
7 Код макроса может быть написан в любом текстовом редакторе (стандартный Блокнот, Notepad++ и другие). Список функций в API для разработки фоновых макросов приведён в разделе "Функции для разработки фоновых макросов". Обратите внимание, что набор доступных функций отличается в API фоновых макросов и классических макросов.
8
9 Для создания фоновой операции воспользуйтесь окном "[[doc:Руководство пользователя.Описание M-кодов.Управление макросами и фоновыми операциями.WebHome]]": нажмите кнопку "Создать" и введите имя фоновой операции. После того как новая фоновая операция появится в списке, перейдите в режим редактирования (окно стандартного текстового редактора) для добавления кода. Для запуска фоновой операции выделите её в списке и нажмите кнопку "Запустить".
10
11 При запуске сервер PUMOTIX начинает выполнение каждого фонового макроса в отдельном потоке. При этом внутри макроса вызывается функция — обработчик с интервалом 100 мс (интервал между вызовами обработчика может изменяться в зависимости от определённых условий, для точного замера прошедшего времени используйте функцию [[GetSystemTickCount>>doc:Руководство пользователя.Описание фоновых операций.Функции для разработки фоновых макросов.WebHome||anchor="number GetSystemTickCount ()"]]).
12
13 {{code language="lua" title="**Пример фонового макроса**"}}
14 function handle()
15 local x = AxisGetMachinePos(Axis.X)
16
17 local new_state_0 = x < 0
18 local new_state_1 = x >= 0
19
20 if (PinGetState(Outputs.UserOutput_0) ~= new_state_0) then
21 PinSetState(Outputs.UserOutput_0, new_state_0)
22 end
23
24 if (PinGetState(Outputs.UserOutput_1) ~= new_state_1) then
25 PinSetState(Outputs.UserOutput_1, new_state_1)
26 end
27 end
28 {{/code}}