Исходный код вики Создание фоновой операции
Последние авторы
author | version | line-number | content |
---|---|---|---|
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}} |