Advertisement
MX_Master

UnifiedRemote - NCStudio5 Vertical - remote.lua

Jul 31st, 2015
416
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 30.71 KB | None | 0 0
  1. -- СТАНДАРТНЫЕ БИБЛИОТЕКИ --
  2. -- https://github.com/unifiedremote/Docs/tree/master/libs
  3.  
  4. local win       = require("win");           -- https://github.com/unifiedremote/Docs/blob/master/libs/win.md
  5. local keyboard  = require("keyboard");      -- https://github.com/unifiedremote/Docs/blob/master/libs/keyboard.md
  6. local timer     = libs.timer;               -- https://github.com/unifiedremote/Docs/blob/master/libs/timer.md
  7. local os        = require("os");            -- https://github.com/unifiedremote/Docs/blob/master/libs/os.md
  8. local ffi       = require("ffi");           -- https://github.com/unifiedremote/Docs/blob/master/libs/ffi.md
  9. local log       = require("log");           -- https://github.com/unifiedremote/Docs/blob/master/libs/log.md
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16. -- ПОЛЕЗНЫЕ ПЕРЕМЕННЫЕ --
  17.  
  18. local sProcessName              = "NCStudio.exe";   -- имя исполняемого файла
  19.  
  20. local sMDICommandText           = "";               -- буфер для хранения текста MDI команды
  21.  
  22. local nMainWindowHandler        = 0;                -- ID главного окна программы
  23. local nMainWindowScanInterval   = 1000;             -- интервал в миллисекундах между проверками на существование главного окна программы
  24. local nAxisPosChangeInterval    = 250;              -- интервал в миллисекундах между чтениями координат осей с главного окна
  25.  
  26. local nButtonsCount             = 69;               -- кол-во кнопок в главном окне программы
  27. local tButtonHandler            = {};               -- таблица с ID нужных кнопок главного окна
  28.  
  29. local nSlidersCount             = 3;                -- кол-во слайдеров для регулировки в главном окне программы
  30. local tSliderHandler            = {};               -- таблица с ID нужных слайдеров главного окна
  31.  
  32. local nPercentStaticsCount      = 2;                -- кол-во статичных текстовых полей в главном окне, содержащих знак %
  33. local tPercentStaticHandler     = {};               -- таблица с ID статичных текстовых полей, содержащих знак %
  34.  
  35.  
  36.  
  37.  
  38.  
  39. -- ПОЛЕЗНЫЕ С++ ФУНКЦИИ --
  40.  
  41. ffi.cdef[[
  42. int SendMessageA( int hWnd, int Msg, int wParam, int lParam );
  43. ]]
  44.  
  45.  
  46. local WM_LBUTTONDOWN    = 0x0201;
  47. local WM_LBUTTONUP      = 0x0202;
  48. local BM_CLICK          = 0x00F5;
  49. local BM_GETCHECK       = 0x00F0;
  50. local BST_CHECKED       = 0x0001;
  51.  
  52.  
  53. -- функция эмулирует левый клик мыши по кнопке с указанным ID
  54. function fButtonClick ( nHandler )
  55.     ffi.C.SendMessageA( nHandler, BM_CLICK, 0, 0 ); -- нажимаем левую кнопку мыши
  56. end
  57.  
  58.  
  59. -- функция проверяет нажата ли кнопка с указанным ID
  60. function fButtonPressed ( nHandler )
  61.     return ( ffi.C.SendMessageA( nHandler, BM_GETCHECK, 0, 0 ) == BST_CHECKED );
  62. end
  63.  
  64.  
  65. -- функция передвигает курсор указанного слайдера вправо/влево
  66. function fSliderMove ( nHandler, sDirection )
  67.     -- если sDirection не указано или имеет неверное значение
  68.     if sDirection ~= "right" and sDirection ~= "left" then
  69.         sDirection = "left"; -- сделаем направление - влево
  70.     end
  71.  
  72.     -- сделаем слайдер в фокусе
  73.     ffi.C.SendMessageA( nHandler, WM_LBUTTONDOWN, 0, 0 ); -- нажимаем левую кнопку мыши на слайдере
  74.     ffi.C.SendMessageA( nHandler, WM_LBUTTONUP, 0, 0 ); -- отжимаем левую кнопку мыши
  75.  
  76.     keyboard.stroke( sDirection ); -- нажимаем кнопку влево / вправо
  77. end
  78.  
  79.  
  80.  
  81.  
  82.  
  83. -- ПОЛЕЗНЫЕ ФУНКЦИИ --
  84.  
  85. -- функция находит в главном окне программы нужные элементы
  86. -- для последующего чтения данных и правки значений
  87. function fFindAllWindowsHandlers()
  88.     -- если нет главного окна программы, то делать ничего не будем
  89.     if nMainWindowHandler < 1 then return end
  90.  
  91.     -- найдем все элементы главного окна
  92.     local tAllSubWindows = win.findall( nMainWindowHandler, nil, nil, true );
  93.  
  94.     -- создадим таблицы для хранения ID элементов главного окна
  95.     local tAllButtons   = {}; -- таблица с ID всех кнопок главного окна
  96.     local tAllSliders   = {}; -- таблица с ID всех слайдеров главного окна
  97.     local tAllStatic    = {}; -- таблица с ID всех статичных текстовых полей главного окна
  98.  
  99.     -- пробежимся по общему списку ID всех элементов главного окна
  100.     for k,v in pairs(tAllSubWindows) do
  101.         local sClass = win.class(v); -- узнаем класс текущего элемента
  102.  
  103.         -- если текущий элемент это "Button", то кладем его ID в соотв. таблицу
  104.         if sClass == "Button" then
  105.             table.insert( tAllButtons, v );
  106.         -- если текущий элемент это "msctls_trackbar32", то кладем его ID в соотв. таблицу
  107.         elseif sClass == "msctls_trackbar32" then
  108.             table.insert( tAllSliders, v );
  109.         -- если текущий элемент это "Static", то кладем его ID в соотв. таблицу
  110.         elseif sClass == "Static" then
  111.             table.insert( tAllStatic, v );
  112.         end
  113.     end
  114.  
  115.     -- если кол-во кнопок окна совпадает с заданным в настройках
  116.     if #tAllButtons == nButtonsCount then
  117.         -- из общего списка всех кнопок окна нам нужны только эти
  118.         -- X: 60, Y: 61, Z: 62, Feed: 64, Speed: 67, Spindle ON: 65
  119.         tButtonHandler.X          = tAllButtons[60];
  120.         tButtonHandler.Y          = tAllButtons[61];
  121.         tButtonHandler.Z          = tAllButtons[62];
  122.         tButtonHandler.F          = tAllButtons[64];
  123.         tButtonHandler.S          = tAllButtons[67];
  124.         tButtonHandler.SpindleON  = tAllButtons[65];
  125.     end
  126.  
  127.     -- если кол-во слайдеров окна совпадает с заданным в настройках
  128.     if #tAllSliders == nSlidersCount then
  129.         -- из общего списка всех слайдеров окна нам нужны только эти
  130.         -- Feed: 1, Speed: 3
  131.         tSliderHandler.F = tAllSliders[1];
  132.         tSliderHandler.S = tAllSliders[3];
  133.     end
  134.  
  135.     -- выберем из всех статичных текстовых полей только те, что содержат знак %
  136.     local tStaticWithPercent = {};
  137.     for k,v in pairs(tAllStatic) do
  138.         if string.find( win.title(v), "%", 1, true) then
  139.             table.insert( tStaticWithPercent, v );
  140.         end
  141.     end
  142.  
  143.     -- если кол-во статичных текстовых полей окна совпадает с заданным в настройках
  144.     if #tStaticWithPercent == nPercentStaticsCount then
  145.         -- из общего списка всех статичных текстовых полей окна нам нужны только эти
  146.         -- Feedrate Percent: 2
  147.         tPercentStaticHandler.FeedPercent = tStaticWithPercent[2];
  148.     end
  149. end
  150.  
  151.  
  152. -- функция выводит главное окно программы на передний план
  153. function fFocusMainWindow()
  154.     -- если нет главного окна программы, то делать ничего не будем
  155.     if nMainWindowHandler < 1 then return end
  156.  
  157.     -- переключаемся на окно процесса прораммы и ждем пока полностью покажется окно
  158.     win.switchtowait(sProcessName);
  159. end
  160.  
  161.  
  162. -- функция отображает указанный текст в инфо блоке пульта
  163. function fShowInfo ( sInfo )
  164.     -- проверяем существует ли в пульте элемент infoLabel и меняем его текст
  165.     if layout.infoLabel ~= nil then
  166.         layout.infoLabel.text = sInfo;
  167.     end
  168. end
  169.  
  170.  
  171.  
  172.  
  173.  
  174. -- ДЕЙСТВИЯ --
  175.  
  176. -- функция вызывается при нажатии кнопки "-" рядом с пунктом "F"
  177. actions.feedrateDown = function()
  178.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  179.     fSliderMove( tSliderHandler.F, "left" ); -- двигаем слайдер скорости подачи влево
  180. end
  181. -- функция вызывается при нажатии кнопки "+" рядом с пунктом "F"
  182. actions.feedrateUp = function()
  183.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  184.     fSliderMove( tSliderHandler.F, "right" ); -- двигаем слайдер скорости подачи вправо
  185. end
  186.  
  187. -- функция вызывается при нажатии кнопки "-" рядом с пунктом "S"
  188. actions.spindleSpeedDown = function()
  189.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  190.     fSliderMove( tSliderHandler.S, "left" ); -- двигаем слайдер скорости вращения шпинделя влево
  191. end
  192. -- функция вызывается при нажатии кнопки "+" рядом с пунктом "S"
  193. actions.spindleSpeedUp = function()
  194.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  195.     fSliderMove( tSliderHandler.S, "right" ); -- двигаем слайдер скорости вращения шпинделя вправо
  196. end
  197.  
  198. -- функция вызывается при нажатии на кнопку SPINDLE
  199. actions.toggleSpindle = function()
  200.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  201.     fButtonClick( tButtonHandler.SpindleON ); -- делаем левый клик по кнопке ON рядом со скоростью шпинделя
  202. end
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209. -- функция вызывается при нажатии на кнопку "X" (e-stop)
  210. actions.estop = function()
  211.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  212.     keyboard.stroke("leftctrl","F12"); -- нажимаем комбинацию кнопок CTRL + F12
  213. end
  214.  
  215. -- функция вызывается при нажатии на кнопку ">" (play)
  216. actions.play = function()
  217.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  218.     keyboard.stroke("F9"); -- эмулируем нажатие кнопки F9
  219. end
  220.  
  221. -- функция вызывается при нажатии на кнопку "||" (pause)
  222. actions.pause = function()
  223.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  224.     keyboard.stroke("F10"); -- эмулируем нажатие кнопки F10
  225. end
  226.  
  227. -- функция вызывается при нажатии на кнопку "[]" (stop)
  228. actions.stop = function()
  229.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  230.     keyboard.stroke("F11"); -- эмулируем нажатие кнопки F11
  231. end
  232.  
  233. -- функция вызывается при нажатии на кнопку HOME
  234. actions.refAllHome = function()
  235.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  236.     keyboard.stroke("F7"); -- эмулируем нажатие кнопки F11
  237. end
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244. -- функция вызывается при нажатии на кнопку "X=0"
  245. actions.xZero = function()
  246.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  247.     fButtonClick( tButtonHandler.X ); -- делаем левый клик по кнопке координаты X
  248. end
  249.  
  250. -- функция вызывается при нажатии на кнопку "Y=0"
  251. actions.yZero = function()
  252.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  253.     fButtonClick( tButtonHandler.Y ); -- делаем левый клик по кнопке координаты Y
  254. end
  255.  
  256. -- функция вызывается при нажатии на кнопку "Z=0"
  257. actions.zZero = function()
  258.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  259.     fButtonClick( tButtonHandler.Z ); -- делаем левый клик по кнопке координаты Z
  260. end
  261.  
  262.  
  263.  
  264.  
  265.  
  266. -- функция вызывается при нажатии на кнопку "--X"
  267. actions.xFastMinusStart = function()
  268.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  269.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  270.     keyboard.down("leftctrl","num4");-- нажимаем комбинацию кнопок CTRL + num4
  271. end
  272. -- функция вызывается при отжатии кнопки "--X"
  273. actions.xFastMinusEnd = function()
  274.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  275.     keyboard.up("leftctrl","num4"); -- отжимаем комбинацию кнопок CTRL + num4
  276. end
  277.  
  278. -- функция вызывается при нажатии на кнопку "-X"
  279. actions.xSlowMinusStart = function()
  280.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  281.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  282.     keyboard.down("num4"); -- нажимаем на кнопку num4
  283. end
  284. -- функция вызывается при отжатии кнопки "-X"
  285. actions.xSlowMinusEnd = function()
  286.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  287.     keyboard.up("num4"); -- отжимаем кнопку num4
  288. end
  289.  
  290. -- функция вызывается при нажатии на кнопку "X+"
  291. actions.xSlowPlusStart = function()
  292.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  293.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  294.     keyboard.down("num6"); -- нажимаем на кнопку num4
  295. end
  296. -- функция вызывается при отжатии кнопки "X+"
  297. actions.xSlowPlusEnd = function()
  298.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  299.     keyboard.up("num6"); -- отжимаем кнопку num4
  300. end
  301.  
  302. -- функция вызывается при нажатии на кнопку "X++"
  303. actions.xFastPlusStart = function()
  304.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  305.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  306.     keyboard.down("leftctrl","num6");-- нажимаем комбинацию кнопок CTRL + num6
  307. end
  308. -- функция вызывается при отжатии кнопки "X++"
  309. actions.xFastPlusEnd = function()
  310.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  311.     keyboard.up("leftctrl","num6"); -- отжимаем комбинацию кнопок CTRL + num6
  312. end
  313.  
  314.  
  315.  
  316.  
  317.  
  318. -- функция вызывается при нажатии на кнопку "--Y"
  319. actions.yFastMinusStart = function()
  320.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  321.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  322.     keyboard.down("leftctrl","num2");-- нажимаем комбинацию кнопок CTRL + num2
  323. end
  324. -- функция вызывается при отжатии кнопки "--Y"
  325. actions.yFastMinusEnd = function()
  326.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  327.     keyboard.up("leftctrl","num2"); -- отжимаем комбинацию кнопок CTRL + num2
  328. end
  329.  
  330. -- функция вызывается при нажатии на кнопку "-Y"
  331. actions.ySlowMinusStart = function()
  332.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  333.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  334.     keyboard.down("num2"); -- нажимаем на кнопку num2
  335. end
  336. -- функция вызывается при отжатии кнопки "-Y"
  337. actions.ySlowMinusEnd = function()
  338.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  339.     keyboard.up("num2"); -- отжимаем кнопку num2
  340. end
  341.  
  342. -- функция вызывается при нажатии на кнопку "Y+"
  343. actions.ySlowPlusStart = function()
  344.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  345.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  346.     keyboard.down("num8"); -- нажимаем на кнопку num4
  347. end
  348. -- функция вызывается при отжатии кнопки "Y+"
  349. actions.ySlowPlusEnd = function()
  350.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  351.     keyboard.up("num8"); -- отжимаем кнопку num4
  352. end
  353.  
  354. -- функция вызывается при нажатии на кнопку "Y++"
  355. actions.yFastPlusStart = function()
  356.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  357.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  358.     keyboard.down("leftctrl","num8");-- нажимаем комбинацию кнопок CTRL + num8
  359. end
  360. -- функция вызывается при отжатии кнопки "Y++"
  361. actions.yFastPlusEnd = function()
  362.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  363.     keyboard.up("leftctrl","num8"); -- отжимаем комбинацию кнопок CTRL + num8
  364. end
  365.  
  366.  
  367.  
  368.  
  369.  
  370. -- функция вызывается при нажатии на кнопку "--Z"
  371. actions.zFastMinusStart = function()
  372.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  373.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  374.     keyboard.down("leftctrl","num1");-- нажимаем комбинацию кнопок CTRL + num1
  375. end
  376. -- функция вызывается при отжатии кнопки "--Z"
  377. actions.zFastMinusEnd = function()
  378.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  379.     keyboard.up("leftctrl","num1"); -- отжимаем комбинацию кнопок CTRL + num1
  380. end
  381.  
  382. -- функция вызывается при нажатии на кнопку "-Z"
  383. actions.zSlowMinusStart = function()
  384.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  385.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  386.     keyboard.down("num1"); -- нажимаем на кнопку num1
  387. end
  388. -- функция вызывается при отжатии кнопки "-Z"
  389. actions.zSlowMinusEnd = function()
  390.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  391.     keyboard.up("num1"); -- отжимаем кнопку num1
  392. end
  393.  
  394. -- функция вызывается при нажатии на кнопку "Z+"
  395. actions.zSlowPlusStart = function()
  396.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  397.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  398.     keyboard.down("num9"); -- нажимаем на кнопку num4
  399. end
  400. -- функция вызывается при отжатии кнопки "Z+"
  401. actions.zSlowPlusEnd = function()
  402.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  403.     keyboard.up("num9"); -- отжимаем кнопку num4
  404. end
  405.  
  406. -- функция вызывается при нажатии на кнопку "Z++"
  407. actions.zFastPlusStart = function()
  408.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  409.     keyboard.stroke("leftctrl","2"); -- нажимаем комбинацию кнопок CTRL + 2, чтобы перейти на закладку JOG
  410.     keyboard.down("leftctrl","num9");-- нажимаем комбинацию кнопок CTRL + num9
  411. end
  412. -- функция вызывается при отжатии кнопки "Z++"
  413. actions.zFastPlusEnd = function()
  414.     fFocusMainWindow(); -- выводим главное окно программы на передний план
  415.     keyboard.up("leftctrl","num9"); -- отжимаем комбинацию кнопок CTRL + num9
  416. end
  417.  
  418.  
  419.  
  420.  
  421.  
  422. -- функция вызывается при любом изменении текста элемента пульта для ввода MDI команд
  423. actions.MDItextChanged = function ( sText )
  424.     -- в переменной sMDICommandText всегда будет хранится текущая версия текста
  425.     -- элемента пульта для ввода MDI команд
  426.     sMDICommandText = sText;
  427. end
  428.  
  429. -- функция вызывается при нажатии кнопки SEND рядом с полем ввода MDI команд
  430. -- и выполняет указанную в MDI поле команду
  431. actions.MDIrun = function()
  432.     -- если главное окно программы НЕ найдено или длина строки команды слишком мала
  433.     if nMainWindowHandler < 1 or string.len(sMDICommandText) < 1 then
  434.         -- просто завершим функцию
  435.         return;
  436.     end
  437.  
  438.     -- выводим главное окно программы на передний план
  439.     fFocusMainWindow();
  440.  
  441.     -- открываем окно ввода MDI команд - нажимаем комбинацию кнопок CTRL + SHIFT + F9
  442.     keyboard.stroke("leftctrl","leftshift","F9");
  443.     -- делаем небольшую паузу (0.2 сек), чтобы окно полностью открылось
  444.     os.sleep(200);
  445.     -- вводим текст команды
  446.     keyboard.text(sMDICommandText);
  447.     -- жмем ENTER
  448.     keyboard.stroke("enter");
  449.  
  450.     -- выводим инфо о последней команде
  451.     fShowInfo("Last command: "..sMDICommandText);
  452.  
  453.     -- очищаем форму для ввода MDI команд в пульте
  454.     layout.MDIinput.text = "";
  455.     -- очищаем буфер c текстом команды
  456.     sMDICommandText = "";
  457. end
  458.  
  459.  
  460.  
  461.  
  462.  
  463. -- функция вызывается перед выполнением любого действия пульта
  464. events.preaction = function ( name, extras )
  465.     -- если нет главного окна программы, то действие выполнять не надо
  466.     if nMainWindowHandler < 1 then
  467.         return false;
  468.     -- а если окно есть - выполним
  469.     else
  470.         return true;
  471.     end
  472. end
  473.  
  474.  
  475.  
  476.  
  477.  
  478. -- ИНИЦИАЛИЗАЦИЯ --
  479.  
  480. -- этот блок кода выполняется сразу же при обработке текущего файла сервером
  481. do
  482.     -- получим и сохраним ID главного окна программы в переменную
  483.     nMainWindowHandler = win.window(sProcessName);
  484.  
  485.     -- найдем ID всех нужных элементов главного окна
  486.     fFindAllWindowsHandlers();
  487.  
  488.     -- запустим повтор указанной функции каждые nMainWindowScanInterval микросекунд
  489.     timer.interval(
  490.         -- Функция проверяет существование главного окна программы,
  491.         -- и, если нужно, находит новые ID главного окна и всех его нужных элементов.
  492.         -- Также проверяется работает ли шпиндель и, в звисимости от этого,
  493.         -- может менятся кнопка для запуска шпинделя в пульте
  494.         function()
  495.             -- получим и сохраним ID главного окна программы в локальную переменную
  496.             local nHandler = win.window(sProcessName);
  497.  
  498.             -- если найдено новое главное окно программы
  499.             if nHandler > 0 and nMainWindowHandler ~= nHandler then
  500.                 -- сохраним ID главного окна программы в глобальную переменную
  501.                 nMainWindowHandler = nHandler;
  502.                 -- найдем ID всех нужных элементов главного окна
  503.                 fFindAllWindowsHandlers();
  504.                 -- выведем оповещение в инфо блоке о том, что главное окно программы найдено
  505.                 fShowInfo("Remote works fine");
  506.             -- если главное окно программы НЕ найдено
  507.             elseif nHandler < 1 then
  508.                 -- выведем оповещение в инфо блоке о том, что главное окно программы НЕ найдено
  509.                 fShowInfo("Program "..sProcessName.." isn't running");
  510.                 -- ID главного окна теперь нет
  511.                 nMainWindowHandler = 0;
  512.             end
  513.        
  514.             -- если главное окно программы найдено
  515.             if nHandler > 0 then
  516.                 -- если шпиндель включён
  517.                 if fButtonPressed( tButtonHandler.SpindleON ) then
  518.                     -- поменяем текст и цвет кнопки пульта для запуска шпинделя
  519.                     layout.toggleSpindle.text   = "SPINDLE : ON";
  520.                     layout.toggleSpindle.light  = "normal:#FF8000;focus:#FFCC99;active:#FFCC99;color:#800000;";
  521.                     layout.toggleSpindle.dark   = "normal:#FF8000;focus:#FFCC99;active:#FFCC99;color:#800000;";
  522.                 -- если шпиндель не работает
  523.                 else
  524.                     -- вернём обычный текст и цвет кнопки пульта для запуска шпинделя
  525.                     layout.toggleSpindle.text   = "SPINDLE";
  526.                     layout.toggleSpindle.light  = "normal:orange;focus:#FFCC99;active:#FFCC99;color:#FFFFFF;";
  527.                     layout.toggleSpindle.dark   = "normal:orange;focus:#FFCC99;active:#FFCC99;color:#FFFFFF;";
  528.                 end
  529.             end
  530.         end,
  531.        
  532.         nMainWindowScanInterval -- значение этой переменной смотрите в начале файла
  533.     );
  534.  
  535.     -- запустим повтор указанной функции каждые nAxisPosChangeInterval микросекунд
  536.     timer.interval(
  537.         -- функция обновляет значения позиций координат, скоростей и прочего в пульте
  538.         function()
  539.             -- если нет главного окна или элемента с позицие X, то делать ничего не будем
  540.             if nMainWindowHandler < 1 or tButtonHandler.X < 1 then return end
  541.  
  542.             -- обновление координат осей
  543.             layout.xPos.text = win.title( tButtonHandler.X ); -- Work X, рабочая позиция координаты X
  544.             layout.yPos.text = win.title( tButtonHandler.Y ); -- Work Y, рабочая позиция координаты Y
  545.             layout.zPos.text = win.title( tButtonHandler.Z ); -- Work Z, рабочая позиция координаты Z
  546.  
  547.             -- обновление скорости подачи
  548.             layout.fValue.text      = win.title( tButtonHandler.F ); -- FeedPercent, процент скорости подачи
  549.             layout.fPercent.text    = win.title( tPercentStaticHandler.FeedPercent ); -- Feedrate, скорость подачи
  550.  
  551.             -- обновление скорости вращения шпинделя
  552.             layout.sValue.text = win.title( tButtonHandler.S ); -- Speed, скорость вращения шпинделя
  553.         end,
  554.        
  555.         nAxisPosChangeInterval -- значение этой переменной смотрите в начале файла
  556.     );
  557. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement