Исходный код вики Создание фоновой операции
Версия 10.2 от knetyaga на 2022/06/10 13:29
Последние авторы
| author | version | line-number | content |
|---|---|---|---|
| 1 | (% class="auto-cursor-target" %) | ||
| 2 | \\ | ||
| 3 | |||
| 4 | {{tip title="Внимание!"}} | ||
| 5 | Перед началом работы убедитесь в наличии активной опции «Фоновые операции». | ||
| 6 | {{/tip}} | ||
| 7 | |||
| 8 | Для многих задач по управлению ЧПУ системой требуется возможность фонового выполнения макросов, в которых отслеживаются определённые параметры работы системы и выполняются необходимые действия (например, управление выходами). | ||
| 9 | |||
| 10 | Код макроса может быть написан в любом текстовом редакторе (стандартный Блокнот, Notepad++ и другие). Список функций в API для разработки фоновых макросов приведён в разделе "Функции для разработки фоновых макросов". Обратите внимание, что набор доступных функций отличается в API фоновых макросов и классических макросов. | ||
| 11 | |||
| 12 | Для создания фоновой операции воспользуйтесь окном "[[doc:Управление макросами и фоновыми операциями]]": нажмите кнопку "Создать" и введите имя фоновой операции. После того, как новая фоновая операция появится в списке, перейдите в режим редактирования (окно стандартного текстового редактора) для добавления кода. Для запуска фоновой операции выделите её в списке и нажмите кнопку "Запустить". | ||
| 13 | |||
| 14 | При запуске сервер PUMOTIX начинает выполнение каждого фонового макроса в отдельном потоке. При этом внутри макроса вызывается функция - обработчик с интервалом 100 мс (интервал между вызовами обработчика может изменяться в зависимости от определённых условий, для точного замера прошедшего времени используйте функцию [[GetSystemTickCount>>doc:Функции для разработки фоновых макросов||anchor="number GetSystemTickCount ()"]]). | ||
| 15 | |||
| 16 | {{code title="Пример фонового макроса"}} | ||
| 17 | function handle() | ||
| 18 | local x = AxisGetMachinePos(Axis.X) | ||
| 19 | |||
| 20 | local new_state_0 = x < 0 | ||
| 21 | local new_state_1 = x >= 0 | ||
| 22 | |||
| 23 | if (PinGetState(Outputs.UserOutput_0) ~= new_state_0) then | ||
| 24 | PinSetState(Outputs.UserOutput_0, new_state_0) | ||
| 25 | end | ||
| 26 | |||
| 27 | if (PinGetState(Outputs.UserOutput_1) ~= new_state_1) then | ||
| 28 | PinSetState(Outputs.UserOutput_1, new_state_1) | ||
| 29 | end | ||
| 30 | end | ||
| 31 | {{/code}} | ||
| 32 | |||
| 33 | (% class="auto-cursor-target" %) | ||
| 34 | \\ |