WLMill. Туман в импульсном режиме.

В программе WLMill можно организовать работу системы охлаждения в импульсном режиме. То есть когда подача тумана и/или воздуха происходит с некоторой периодичностью.

Для этого мы будем использовать LScript и функцию контроллера – создание импульса заданной длинны на его выходе.

Создадим в LScript глобальные переменные и 2 функции

var colPause=1000
var colPulse=1000
var colEnable=0 //1-запущена выключена
var colNOut=2

function setEnableCol(enable)
{
	if(colEnable!=enable)
	{
		colEnable=enable

		if(enable)
		{
			updateCol()
		}
	}
}

function updateCol()
{
	if(colEnable)
	{
		MACHINE.setOutPulse(colNOut,1,colPulse)
		SCRIPT.setTimeout("updateCol()",colPulse+colPause)
	}
}

Отлично теперь у нас есть переменные определяющие время импульса, паузы а также включено ли охлаждение или нет.

Теперь c помощью MScript мы создадим два слайдера для задания этих параметров.

function updateCol()
{
	LSCRIPT.setValue("colPause",SLIDERPA.getValue())
	LSCRIPT.setValue("colPulse",SLIDERPU.getValue())
	
	SCRIPT.console("updateCol() pause="+SLIDERPA.getValue()+" pulse="+SLIDERPU.getValue())
}

function initCol()
{
	TOOLBAR2.addSlider("SLIDERPU","updateCol()","pulse")
	TOOLBAR2.addSlider("SLIDERPA","updateCol()","pause")

	SLIDERPU.setMinMaxValue(50,500)
	SLIDERPA.setMinMaxValue(500,3000)

	SLIDERPU.setValue(200)
	SLIDERPA.setValue(1000)
	
	SLIDERPA.setInverse(1)

	updateCol()
}

И добавим вызов initCol() в функцию init()

Так же в M8() – добавим включение аспирации

function M8()
{
	LSCRIPT.runFunction("setEnableCol(1)")
}

Так же в M9() – добавим выключение аспирации

function M9()
{	
	LSCRIPT.runFunction("setEnableCol(0)")
}

Теперь мы можем включать и отключать аспирацию а также задавать и менять параметры в процессе работы.

Используйте версию WLMil 2.2.36+

Новый раздел в документации наших устройств.

В процессе работы приходится сталкиваться с недочётами у наших устройств, которые конечно исправляются. Однако можно исправить некоторые недочёты у ранних версий устройств.

Например:

  • Организация раздельного питания
  • Дополнительный резистор входа

Для устранения этих недочётов были дополнены инструкции (мануалы). С описанием необходимых действий. Если вы сомневаетесь, то можете выслать контроллер нам на доработку.

Мануалы:

  • WLDAxis8 (можно применить к ранним версиям)
  • WLM55E
  • WLM55J (можно применить и для 35J)
  • WLM155S

WLMill (2.0.2.21)

Добавлена поддержка пульта управления XHC (WHB04…). Основные особенности:

  1. Ручной маховик.
  2. Два селектора выбора режимов.
  3. 16 кнопок. + поддержка комбинации двух кнопок (когда удерживается одна и нажимается другая)
  4. Проводная и беспроводная версия. (Внимание требуется хорошее питание по USB)

Для работы с пультом был создан объект XHB (в обоих скриптах LScript/MScript):

Можно узнавать состояние кнопок и селекторов пульта. Выводить некоторые данные на дисплей пульта.

Подсказки

При изменении состояния маховика, кнопок, селекторов. Вызываются функции для обработки этих событий (LScript).

Был написан базовый скрипт WLXHC.js (и добавлен в стандартный набор) в котором реализованы основные операции работы с ним.

  1. Ручное перемещение (с точным позиционированием). Согласно установленным селекторам
  2. Реализованы кнопки:
    • RESET
    • Stop
    • Start/pause
    • Fn+Feed+
    • Fn+Feed-
    • Fn+Spindle+
    • Fn+Spindle-
    • Fn+M_HOME (переезд в G54 X0 Y0 Z0)
    • Fn+Safe-Z
    • Fn+W_HOME
    • Fn+Probe-Z
  3. Реализованы вызовы макросов 1-10 с помощью кнопок. Вызывается макрос “macroXXWLXHC()” в скрипте MScript (добавлены подсказки в редакторе скриптов)

PS также был расширен функционал скриптов. Теперь возможно добавлять функции “wek” которые будут высвечиваться в редакторе скриптов. Например в скрипте WLXHC.js:

MSCRIPT.addIncludeWeakFunction(“macro”+(i+1)+”WLXHC”) //добавляем прjтотип функции в MScript

Текст первой версии:

/*
WLXHC - пример работы с пультом XHC

Установка:
1.Для работы с пультом XHC нужно определить функции которые вызываются при изменение данных от него.
 
2.Ниже будут примеры функций. Которые могут быть использованы вами. 

3. Копируем этот файл (WLXHCk.js) в папку /wlmillconfig/script/include
    Подключаем,  добавляя в LScript.
      function init()
      {
      SCRIPT.includeFile("/include/WLXHC.js")
      ....	   
      }
	  
*/

function WLXHCInit()
{
SCRIPT.console("WLXHCInit()")

SCRIPT.setTimeout("updateDisplayWLXHC()",50)

var i=5
for(i=0;i<10;i++) 
   MSCRIPT.addIncludeWeakFunction("macro"+(i+1)+"WLXHC")
}

function updateDisplayWLXHC()
{
if(XHC.getSelectorA()==20  //A || B ||C
 ||XHC.getSelectorA()==21 
 ||XHC.getSelectorA()==22)
   XHC.setDisplayData(MACHINE.getCurPositionSC("A")
                                    ,MACHINE.getCurPositionSC("B")
                                    ,MACHINE.getCurPositionSC("C")
                                    ,GCODE.getValue("F"))
else
   XHC.setDisplayData(MACHINE.getCurPositionSC("X")
                                    ,MACHINE.getCurPositionSC("Y")
                                    ,MACHINE.getCurPositionSC("Z")
                                    ,GCODE.getValue("F"))
                                                                        

SCRIPT.setTimeout("updateDisplayWLXHC()",50)
}

function changedWhellXHC(dist)
{
SCRIPT.console("changedWhellXHC("+dist+")")

var distXYZ=0

switch(XHC.getSelectorX())
{
case 13: //2%
                distXYZ=0.001
                break;

case 14: //5%
                distXYZ=0.010
                break;

case 15://10% 
                distXYZ=0.100
                break;

case 16: //30%
                distXYZ=1.000
                break;

case 26: //60%
                distXYZ=1.000
                break;

case 27: //100%
                distXYZ=1.000
                break;

case 155: //Lead
                distXYZ=1.000
                break;
}

var F=20

if(MACHINE.isPossiblyManual())
switch(XHC.getSelectorA())
{
case 17: //X
               DRIVEX.runMovRel(dist*distXYZ,F,1)
               break;

case 18: //Y
               DRIVEY.runMovRel(dist*distXYZ,F,1)
               break;

case 19: //Z
               DRIVEZ.runMovRel(dist*distXYZ,F,1)
               break;

case 20: //A
                DRIVEA.runMovRel(dist*distXYZ,F,1)
                break;
}

}

function changedButtonsXHC(button1,button2)
{
SCRIPT.console("changedButtonsXHC("+button1+","+button2+")")

switch(button1) 
{
case 1: //RESET
              MACHINE.reset();
              break;

case 2: //Stop
              MACHINE.stopMov()
              break;

case 3: //Start/pause
              if(MACHINE.isPause())                             
                 MACHINE.setPause(0)
              else
                {
                if(MACHINE.isActiv())
                    MACHINE.setPause()
                    else
                    MACHINE.startMov()
                 }
              break;

case 12: //Fn key + button2
                 switch(button2)
                 {
                 case 4: //Feed+
                               MACHINE.setPercentF(MACHINE.getPercentF()+2.5)
                               break;
                 case 5: //Feed -
                              MACHINE.setPercentF(MACHINE.getPercentF()-2.5)
                              break;
                 case 6: //Spindle+
                              MACHINE.setPercentS(MACHINE.getPercentS()+2.5)
                              break;
                case 7: //Spindle-
                              MACHINE.setPercentS(MACHINE.getPercentS()-2.5)
                              break;
                case 8: //M_HOME <--
				              if(MACHINE.getCurPosition("Z")<0)  
                                 MACHINE.runGCode("G53 G90 G0 Z0")
                              MACHINE.runGCode("G53 G90 G0 X0 Y0")
                              break;
                case 9: //Safe-Z
                              MACHINE.runGCode("G91 G28 G0 Z0")
                              break;
                case 10: //W_HOME <--
				              if(MACHINE.getCurPositionSC("Z")<0)  
                                 MACHINE.runGCode("G90 G0 Z0")
                              MACHINE.runGCode("G90 G0 X0 Y0")
                              break;
                case 11: //W_HOME <--
                              if(MACHINE.getStateSpindle()!=0)
                                  MACHINE.runMCode(5);
                             else
                                 MACHINE.runMCode(3);
                              break;
                case 13: //Probe-Z
                              break;
                 }
                break;

case 4: 
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:MSCRIPT.runFunction("macro"+(button1-3)+"WLXHC()",1);
               break
case 13:MSCRIPT.runFunction("macro9WLXHC()",1);
               break
case 16:MSCRIPT.runFunction("macro10WXHC()",1);
               break
}

}

function changedSelectorXXHC(pselect)
{
SCRIPT.console("changedSelectorXXHC("+pselect+")")
}

Видео: скоро)

WLMill (2.0.2.8)

Исправлена ошибка при работе с G83 + выполнение скриптов (M6 например).

В момент выполнения скрипта были неверные данные G кода – будущие, от просмотра вперед.

Это важно при смене инструмента!

Также в предыдущих версиях была добавлена возможность исправления неверно заданных дуг.

Иногда, когда дуги имели малые размеры, то радиус от начала к центру и от конца к центру мог сильно отличаться. На что программа выводила сообщение.

Сейчас можно включить авто-исправление. Задав максимальную ошибку радиуса. Если ошибка задана равной нулю, то авто-исправление отключено.

В процессе исправления берется средний радиус и находятся новые координаты центра дуги.

Обновился WLFW (v1.2)

Обновилась программа для обновления прошивок наших устройств. Основные изменения:

  1. На компьютере создаётся репозиторий(папка с прошивками) и прошивки хранятся в нём – и они всегда доступны. При появлении новых прошивок можно их скачать с нашего сайта (в том числе автоматически с помощью программы WLFW).
  2. Создан файл настроек “wlfw.ini” с настройками программы.
  3. WLFW теперь имеет 2 набора отображаемых инструментов. Простой и Эксперт – с расширенными возможностями.
  4. Изменились надписи на кнопках для лучшего понимания их назначения.
  5. Добавлен перевод
  6. Доработана документация

WLFW(v1.2)
WLFW(v1.2) – Эксперт

PS Теперь все программы и прошивки имеют версию не связанную со временем (как это было раньше). Также у исполняемых файлов программ и файлов прошивок добавляются версии в их название. Для более простой идентификации.

WLMill >> WLTurn для токарного станка (первая версия)

В WLMill-beta была добавлена возможность для работы с токарным станком(WLTurn). Делается это выставлением селектора в меню.

Для токарной версии выбираем Turn. После чего необходимо перезагрузить программу.

В заголовке окна у нас появится надпись WLTurn. Теперь у нас изменилось следующее:

1.Изменилась ориентация осей. Теперь кнопки на клавиатуре влево/вправо = Z, вверх/вниз = X pageUp/pageDown = Y.

2. Изменились стандартные ориентации визуального вида.

3. В G коде добавилась поддержка G7(диаметр), G8(радиус) по X.

4. Изменилась смена инструмента в G коде. Инструмент и его смена происходит по вызову T

Например:

T1 // установить инструмент №1 (Устанавливается только инструмент!!!)

T05 // установить инструмент №5 (Устанавливается только инструмент!!!)

T101 // установить инструмент №1 и смещение №1

T911 // установить инструмент №9 и смещение №11

T1010 // установить инструмент №10 и смещение №10

T1505 // установить инструмент №15 и смещение №5

T55556 // неверный ввод

При смене инструмента вызывается функция changedTool в MScript. Данную функцию можно переопределить и добавить необходимые действия (wek).

По умолчанию появляется окно с подтверждением смены инструмента в ручном режиме, либо отмены этого действия.

5. Работа со смещениями инструмента.(они доступны и в WLMill)

В закладке Tool желательно добавить колонки для отображения смещения инструмента. Для этого нажимаем на колонки и вводим колонки которые мы хотим отображать через запятую.

index – индекс инструмента

Xo,Zo – смещение инструмента

Xw,Zw – коррекция смещения инструмента ( фактическое смещение = Xo+Xw)

Comment – добавили колонку комментария для каждого инструмента. В ней мы можем коротко охарактеризовать инструмент. Теперь у нас будут подсвечиваться(красным) смещения которые сейчас активны.

Задание смещений. Задание смещений удобно производить с помощью скрипта WLToolOffset.js – он идёт по умолчанию с программой. Также его можно добавить самостоятельно.

WLToolOffset – Добавляет кнопку внизу таблицы инструментов. Нажав на неё мы можем установить смещения инструмента задав текущее(истинное) значение координаты для этого инструмента. После чего будет рассчитано и установлено смещение инструмента. И координаты установятся нужные значения.

Общий алгоритм задания смещений будет выглядеть так:

1. Устанавливаем первый инструмент он будет базовый. (вводим Т101)

2. Задаём ему смещения Xo=0 Yo=0 (вводим в таблицу).

3. Определяем координаты Z и X для этого инструмента и вводим их как смещение СК (Где кнопки ручных перемещений)

4. Меняем инструмент (Т202 – инструмент №2 смещение №2) и определяем координаты Z и X для этого инструмента и задаём смещения этого инструмента с помощью кнопки ToolOffset.

5.Проделываем п3 и п4 для остальных инструментов.

PS На данный момент не отлажена работа станка с середины программы. Она будет происходить как и с WLMill (подход XY и опускание по Z) !!!

Видео:

WLMill-beta. Доработан редактор скриптов.

Были добавлены короткие описания типов элементов которые можно подставить в текст скрипта.

obj – объект к нему можно обращаться через функции.

var – глобальные переменные который определил пользователь (в тексте скриптов)

fun – функция которая была определена

pro – свойства, которые можно использовать в программе как глобальные переменные. Но которые были созданы скриптом. Например на скрине снизу WLJoystickPath – путь до файла WLJoystick.js

wek – функция которую можно переопределить в тексте скрипта. То есть если не было определения этой функции в тексте скрипта, то будет выполняться стандартная функция (из памяти WLMill). Если мы хотим переопределить эту функцию, то мы выбираем её и редактор автоматически вставит(из памяти WLMill) в текст стандартной функции в текст скрипта.

Например мы можем переопределить 4 функции которые ещё не определены, но используются стандартные.

WLDEV + Aliexpress = wldev.aliexpress.ru

Был сделан магазин на площадке Aliexpress…

https://wldev.aliexpress.ru

WLMill-beta. Добавлен функционал для Кнопок

Уже давно можно создавать пользовательские кнопки. При нажатии на которые можно запускать выполнение скриптов. Но до настоящего времени отсутствовала возможность фиксации кнопки в нажатом положении (чекабельности).

Теперь это свойство доступно. И для работы с ним добавлено несколько методов.

setChekable(enable) // вкл/выкл использования защёлкивания

setChecked(check) // перевести кнопку в состояние нажата/отпущена

isChecked() // -> возвращает текущее состояние кнопки

setScriptRelease( txt) //устанавливает скрипт выполнения при отжатии кнопки

setScript( txt) //устанавливает скрипт выполнения при нажатии кнопки ///как и раньше

Ниже приведён пример функции которая создаёт кнопку ENABLEH с фиксацией. Для теста можно добавить данную функцию в MScript и добавить её вызов в init().

function initButtonH()
{
TOOLBAR2.addButton("ENABLEH")

ENABLEH.setShow(1)
ENABLEH.setText("Enable H")
ENABLEH.setCheckable(1)
ENABLEH.setScript("SCRIPT.console('press')");
ENABLEH.setScriptRelease("SCRIPT.console('release')");
}

WLMill-beta. Изменено окно редактирования скриптов.

В WLMill beta было переработано окно редактирования скриптов.

Было добавлено:

  1. Одновременная работа с несколькими файлами (которые были добавлены через include).
  2. Подсветка синтаксиса.
  3. Добавлена система подсказок при написание скриптов. То есть при нажатии CTRL+Пробел редактор может предложить нам варианты, что можно вписать. Это могут быть функции, глобальные переменные, объекты и их методы. И нам не надо держать в голове весь багаж этих функций.