Обновление (объединение входов и пр.)

WLMill 2.99.8

Добавлено объединение входов (суммирование) — можно назначить например несколько inProbe или inEMGStop (начиная с прошивки WLMotion 2.5).

Раньше нужно было «мудрить» с соединением или использовать плату WL3NPN для подключения нескольких датчиков к одному входу.

Можно указать их через запятую. Или воспользоваться кнопкой редактирования.

Добавить вход, править входа, удалить входа.

Если выбрать правка входов, то доступно прежнее меню с захватом и инверсией входа.

Также стало доступна установка label — названия входа или выхода. Оно будет высвечиваться в сообщениях — для лучшего понимания. Например: щуп, таблетка, высота инструмента.

Визуализация модели шпинделя и модели инструмента — помогает лучше понимать работу компенсации длины инструмента.

Модель шпинделя пока фиксированная. Модель фрезы строится автоматически по параметрам установленного инструмента H — высота цилиндра D — диаметр цилиндра.

Можно задавать и свой профиль инструмента для этого мы добавляем в таблицу инструмента колонку — modelProfile.

В этой колонке мы записываем профиль инструмента по точкам, парой координат X Y между собой разделённых запятой а между другой парой / . То есть X,Y/X,Y/X,Y…. Таким способом можно создать любой профиль.

Например сверло диаметром 8мм. 0,0/4,2 Начальная точка 0,0 потом радиус 4 и высота 2 (для конусности). Прямой участок добавляется автоматически «до шпинделя»

Жёлтой звездой обозначается рабочая точка инструмента с учетом смещения компенсации длины инструмента. В данном случаем у нас включена G43 H4.

Данное отображение справедливо только в режиме отображения XYZtool в других режимах будет отображаться траектория по шпинделю.

Добавлены множественные компенсации HD инструмента — они нужны для изменения размеров детали без правки программы. Например изменяя параметр H инструмента можно менять высоту разных элементов изделия. Также можно делать и с параметром D.

Когда она используется, то корректоры записываются как основной и дополнительный через точку.

По умолчанию пороговое значение дополнительного корректора H(D) равно 1000;

Например H1.1000 – 1 основной  корректор (из таблицы инструментов), 1000 добавочный (из G кода).

Есть пороговое значение H(D). Когда в коде встречается H(D) больше либо равным пороговому, то основной Н(D) будет равен номеру установленного инструмента, а дополнительный из кода.

Чтобы указать в программе значение дополнительного корректора мы добавляем строку.

#T1H1001=0.5 // для инструмента T1 H1001 = 0,5

#TH1002=0.2 // для текущего инструмента H1002 = 0.2

Аналогично и для D.

Общая компенсация для H  (длина инструмента) будет рассчитываться так

Компенсация длины = H основной +Hw износ + H дополнительный

Общая компенсация для  D (диаметр инструмента) будет рассчитываться так

Радиус = (D основной +Dw износ + D дополнительный)/2

Или.  Радиус = (Dw износ + D дополнительный)/2

Обновление WLMill 2.95

Добавлена кнопка закрытия программы в полноэкранном режиме.

В таблице инструментов(систем координат) добавлены кнопки для переключения отображаемых параметров.

В таблицах стала обязательной колонка GCode. — как инструмент или СК доступны из G кода.

В таблице инструментов появилось обязательная колонка Name (имя инструмента).

С помощью подсветки (красный фон) происходит подсказка:

Name — текущий инструмент (Фреза1)

GCode — значение G кода. (T0)

Также в колонке GCode происходит выделение ( <T?>) инструмента или СК которые будут использоваться в загруженной программе.

<T5>,<T7> — Будут использоваться в программе.

В таблице инструментов добавлен параметр timeWear — износ инструмента в секундах .

Считается время когда включен шпиндель и происходит движение по G коду.

Добавилась раскраска рельефа по высоте.

Данная функция помогает отображать и понимать сложные рельефы.

Исправлен (Linux) баг — утечка памяти. При записи debug файла.

В предыдущих версиях рекомендуется отключать «включить Debug»

Прочие доработки и исправления

Свой плагин для WLMill.

Количество задач, которые иногда нужно решать достаточно большое и порой использование скриптов не всегда хватает для этого. Чтобы можно было добавлять свои инструменты в функционал WLMill был создан инструмент — создание плагинов.

Как создать свой плагин?

  • Установить среду разработки QtCreator 5.12.5 (для windows).
  • Создать проект в котором произвести отладку функционала.
  • Создать плагин, который будет интерфейсом между WLMill и вашим проектом.
  • Положить файл dll в папку plugins.

1 . Скачиваем QtCreator и устанавливаем его. Внимание сейчас недоступен исходный код WLMill!!!

2. Данный шаг пропустим. Сделаем простой плагин с базовым функционалом.

3. Создаём проект плагина в QCreator.

Выбираем: Файл>>Создать файл или проект

Далее выбираем имя проекта и папку где он будет. Сделаем проект myPlugin.

Проект открыт.

Теперь удаляем файл _global.h. С помощью правой кнопкой мыши нажав на файл, выбрать пункт удалить.

Переносим файлы WLPlugins.pri, wlscriptplugin.h, wlscriptplugin.cpp в папку с проектом.

Подключаем их к нашему проекту.

Добавляем строки в наш класс MyPlugin.

Определяем интерфейс плагина и переопределив функцию getNameObjectMScript. — задав имя в скрипте.

Добавим переменную m_count и два метода взятия и установки значения.

Префикс Q_INVOKABLE — делает доступным эти функции в MScript и LScript.

#include "wlscriptplugin.h"

class  MyPlugin: public WLScriptPlugin
{
    Q_OBJECT
    Q_INTERFACES(WLScriptPlugin)
    Q_PLUGIN_METADATA(IID WLScriptPlugin_iid)// FILE "interface.json")

private:
    int m_count = 0;

public:
    MyPlugin();

    // WLScriptPlugin interface
public:
    QString getNameObjectMScript();

    Q_INVOKABLE int getCount() const;
    Q_INVOKABLE void setCount(int count);
    Q_INVOKABLE void printConsoleLScript(QString txt);
};

#endif // MYPLUGIN_H

4 Компилируем и переносим файл myPlugin.dll в папку plugins.

После запуска проверяем. Доступен ли нам объект в MScript. Набираем MY и нажимаем Ctrl+Пробел.

Объект доступен !!!

Проект целиком.

Прочие плагины.

Плагин COM порта для WLMill (WLSerialPortPlugin)

Что такое плагин?

Плаги́н[1][2] (англ. plug-in, от plug in «подключать») — независимо компилируемый программный модуль, динамически подключаемый к основной программе и предназначенный для расширения и/или использования её возможностей. Плагины обычно выполняются в виде библиотек общего пользования.

Уже давно была добавлена возможность написания своих плагинов для WLMill. Сейчас был создан пример плагина для работы с серийным портом. Давайте разберёмся что с ними делать.

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

Как организовать работу плагина:

  1. Создаём папку plugins рядом с программой WLMill (если её нет).
  2. Копируем туда файл WLSerialPortPlugin.dll
  3. Запускаем WLMill. У нас должен появится новый объект SERIALPORT в скриптах LSCRIPT и MSCRIPT. С помощью него мы будем работать с портом.
  4. Организуем работу с портом. При нажатии на кнопку вкл/выключения мы будем открывать и закрывать порт. Для этого добавим строки в MScript, в функции функции ON() и OFF(). Открываем редактор скрипта.

Находим эти функции (если они переопределены) или вставляем их в удобное место.

Для этого за пределами других функций (например в самом верху нажимаем Ctrl+Пробел и выбираем “wek ON()”.

function ON()
{
 SCRIPT.console("ON()")
 SCRIPT.console("OPEN COM "+ SERIALPORT.open("COM182"));
}

function OFF()
{
 SCRIPT.clearInterval()
 SCRIPT.clearTimeout()

 SERIALPORT.close();
}

Если всё верно, то SERIALPORT – должен быть зелёного цвета.

По умолчанию скорость передачи 9600бит/с. Её можно переопределить с помощью SERIALPORT.setBaudRate(4800) – установили скорость 4800бит/с

В функции ON мы открывaем порт COM182 и выводим сообщение в консоль MSCRIPT.

Номер ком порта можно найти в диспетчере устройств.

При выключении мы закроем порт.

  • Теперь нужно организовать приём сообщений от ком порта. При приёме сообщений вызывается функция readDataSerialPort() скрипa LScript (фоновый скрипт). Определим её
function readDataSerialPort()
{
 var data = SERIALPORT.readAll()
 SCRIPT.console(data)

//MACHINE.runGCode(data) //если раскомментировать, то выполнится полученная строка как G код

}

В данной функции мы читаем все данные и просто выводим их в консоль LScript.

Внимание!!! Если мы уберём // то у нас будет выполняться строка которую мы приняли.

  • Для отправки сообщений используется функция

SERIALPORT.sendStr(«X45 Y123.5»)

PS. Также можно будет написать свои плагины. Как это делать? скоро…

Обновление WLMill 2.93

Добавлена поддержка переменных в G коде

Инициализация из G кода

#100  = 50 // создали переменную 100 и присвоили ей значение 50

#ZFREE  = -25 // создали переменную ZFREE и присвоили ей значение -25

Внимание!!! Определение переменной в G коде доступно только с новой строки

из Скрипта

GCODE.setValueGrid(“100”,50) // создали переменную 100 и присвоили ей значение 50

GCODE.setValueGrid(“ZFREE”,-25) // создали переменную ZFREE и присвоили ей значение -25

Пример использования в G коде

#ZFREE = -25

G0 Z#ZFREE // переедет в положение Z=-25

Также можно применять формулы при определении переменной

#A = 10   //переменной A присвоено значение 10

#B = [#A] //переменной B присвоено значение A

#C = [#A+#B] //переменной C присвоено значение A+B = 20

G0 Z[#C+(#A*2+(#B+#A))*.5] //Z переедет в положение 50

Добавлена поддержка математических функций в G коде.

PI() – возвращает число ПИ (3,14….)

ABS(var) – возвращает положительное значение  

COS(var) – возвращает косинус числа (var в градусах)

ACOS(var) – возвращает арккосинус числа в градусах

SIN(var) – возвращает синус числа (var в градусах)

ASIN(var) – возвращает арксинус числа в градусах

TAN(var) – возвращает тангенс числа (var в градусах)

TAN2(var y,var x) – возвращает угол в градусах

ATAN(var) – возвращает арктангенс в градусах

CEIL(var) – округляет в большую сторону

FLOOR(var) – округляет в меньшую сторону

ROUND(var) – округляет число

SQRT(var) – квадратный корень числа

POW(var1 ,var2) – возведение var1 в степень var2

MIN(var1,var2) – минимальное значение

MAX(var1,var2) – максимальное значение

Например

#CENTERX = [#RAD*COS(#ANG)+#OFFFSETX]

Добавлена подсветка парных скобок которые возле курсора.

Обновлена документация WLMill

добавлено описание подпрограмм

добавлено описание переменных G кода

добавлен перечень M кодов, которые определены по умолчанию и как их изменить

добавлено описание использование радиальной системы координат G15/G16

Обновился WLMill 2.91

2.91 Поддержка G64 при многоосевой обработке

Была добавлен поддержка G64 для многоосевой обработки. Также как и в 3х координатах происходит сглаживание и упрощение траектории. И был добавлен ещё один параметр «A» для G64.

A — это максимальное отклонение фрезы (в градусах) от заданного направления (это не ось А!!!).

То есть теперь мы можем задавать G64 так

G64 P0.1 Q0.1 A0.1

  • P — Сглаживание траектории в XYZ детали
  • Q — Максимальное отклонение от траектории в XYZ детали
  • A — Максимальное отклонение направления фрезы в градусах.

Результат:

При простой 3х осевой обработке используется тип элементов ULine (кривая), которые поддерживаются контроллером. Но при многоосевой обработке их сейчас необходимо разбивать на несколько прямых элементов. Количество прямых мы указываем в настройке.

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

Добавили функции в скрипты

  • WLMILL.getVersionStr() — возвращает строку версии программы
  • MACHINE.getVersionDeviceStr() — — возвращает строку версии устройства

2.90 Добавлен ключ на тип линейной активации G41/42.

При его установке линия активации будет увеличена (путь) или уменьшена в зависимости от G41/42.


2.89 Добавлено использование двойного касания визуализации (сенсорный экран). Для уменьшения и увеличения масштаба.
2.88 Добавлено автозагрузка карты высот, а также параметров её отображения и использования. Добавлена поддержка нового планировщика для контроллеров WLMiotion v2.4
2.87 В таблицы инструментов добавлена возможность добавлять и удалять инструмент или СК

прочие исправления…

Обновился WLBend 2.19

Было произведено много изменений в результате чего можно улучшить производительность станка.

Использование сигнала inCutted в рубке

Было добавлено использование сигнала inCutted при работе рубки. Это сигнал означает, что произошёл отруб проволоки и станок может производить подготовку для изготовления следующего изделия.

Например при рубке с использованием поршня, этот сигнал будет установлен когда поршень будет выдвинут и по сути произошёл отруб проволоки. То есть нам не нужно ждать когда поршень вернётся назад для начала вращения Z или Y. Но подача проволоки будет заблокирована до полного выполнения рубки.

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

Для использования этого сигнала нужно установить «галочку»

Использование предварительной подготовки рубки

Когда рубка происходит с помощью гибочного узла (оси Y), то можно производить подготовку к рубке в момент протяжки проволоки на нужную длину. В результате чего мы можем распараллелить процесс и сократить время изготовления.

Для использование данной функции нужно установить «галочку».

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

Синяя стрелка указывает на состояние сигнала inCutted.

Данная функция в основном используется при реализации рубки скриптом. Для выяснения какой процесс происходит (рубка или подготовка) добавлена функция getTaskTypeStr(). Которая возвращает

getTaskTypeStr()==»preCutTask» — если идёт подготовка к рубке

getTaskTypeStr()==»cutTask» — если производится отруб

Тогда функция рубки «С» в LScript будет иметь примерный вид :

function updateCUTC()
{
	if(!CUTC.isMotion()) return 

	SCRIPT.console("updateCUTC()"+CUTC.getIOper()+CUTC.getTaskTypeStr())

	if(CUTC.getTaskTypeStr()=="preCutTask")
 //предварительная подготовка
	{
		switch(CUTC.getIOper()) //какая операция выполняется 0 - при старте
		{
			case 0: //опускаем PINP при необходимости
			if(!PINP.isMotion()) 
			{
				CUTC.setIOper(1);  
				PINP.setMovDown();

				if(PINP.startTask()==1)
				break;   
			}
			else{
				break;
			}

			case 1: //производим движение в точку откуда будет происходить рабочее движение отруба
			if(!DRIVEY.isMotion()
			&&PINP.isDown()
			&&!DRIVEY.isActiv())
			{
				DRIVEY.setNamePad("fast");
				DRIVEY.setKSpeed(1.0);

				DRIVEY.runMovAbs(-90,0,0);
				CUTC.setIOper(3)
			}
			break;		

			case 3: //завершили движение и значит завершили подготовку
			if(!DRIVEY.isMotion()			
			&&!DRIVEY.isActiv())
			{
				SCRIPT.console("updateCUTC(preCutTask) complete")        
				CUTC.setFinished()
			}
			break;
		}
	}
	else  if(CUTC.getTaskTypeStr()=="cutTask")
	{
		switch(CUTC.getIOper())
		{
			case 0: //опускаем PINP при необходимости
			if(!PINP.isMotion())
			{
				CUTC.setIOper(1);  
				PINP.setMovDown();

				if(PINP.startTask()==1)
				break;   
			}
			else{
				break;
			}

			case 1: //производим движение в точку откуда будет происходить рабочее движение отруба
			if(!DRIVEY.isMotion()
			&&PINP.isDown()
			&&!DRIVEY.isActiv())
			{
				DRIVEY.setNamePad("fast");
				DRIVEY.setKSpeed(1.0);

				DRIVEY.runMovAbs(-90,0,0);
				CUTC.setIOper(10)
			}
			break;

			case 10: //производим рабочий ход рубки
			if(!DRIVEY.isMotion()
			&&!DRIVEY.isActiv()
			&&PINP.isDown())
			{
				DRIVEY.setMainPad();
				DRIVEY.setKSpeed(1.0);

				DRIVEY.runMovAbs(-155,720,0);
				CUTC.setIOper(2)
			}
			break;

			case 2: //возвращаемся в начальное положение
			if(!DRIVEY.isMotion()
			&&!DRIVEY.isActiv())
			{			
				CUTC.setCutted() //установили флаг что отрубили
				
				DRIVEY.setNamePad("fast");

				DRIVEY.runMovAbs(-90,0,0);
				CUTC.setIOper(3)
			}
			break;

			case 3: //завершили движение и значит завершили подготовку
			if(!DRIVEY.isMotion()			
			&&!DRIVEY.isActiv())
			{
				SCRIPT.console("updateCUTC(cutTAsk) complete")        
				CUTC.setFinished()
			}
			break;
		}
	}
}

Правка счётчиков и инструмента не из меню

Для правки нажимаем на нужный счётчик или колонку инструмента

3 корректора радиусного элемента

Был добавлен один корректор радиусного элемента — корректор радиуса.

Радиус (красная стрелка) — правка радиуса элемента

Угол (фиолетовая стрелка) — правка угла происходит за счёт увеличения подачи радиусного элемента (с сохранением фактического радиуса)

Спираль (жёлтая стрелка) — правка спиральности (вращения вокруг проволоки)

Для инструментов оставлена одна таблица соответствия угла поворота Y — углу загиба

При радиусных элементах используется эта таблица. Также можно явно задавать положение гибки (для любого типа элемента). — Это доступно и в прежних версиях.

Например

«bp 10» — bend position 10

На bp влияет корректор радиуса у радиусного элемента

Обновился WLBend 2.16

  1. Добавлен флаг инструмента отмены поворота при обратной протяжки проволоки перед отрубкой.
  2. Добавлен новый тип инструмента doublePin — когда 2 пина расположены на одной гибочной голове.
  3. Сделана центровка изображения с учётом модели станка. При моделировании гибки.
  4. Прочие исправления и улучшения.

Обновился WLMill — 2.81

Добавилась кнопка с помощью которой можно быстро задавать тип ручных перемещений (по шагам или непрерывно, с трекингом и без).

con — (Continue) непрерывное движение. Пока нажата клавиша.

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

Они задаются через запятую. Например как на рисунке выше.

Причём мы можем задать размерности движения отдельно для линейного типа оси и поворотного типа. Для этого нужно ввести два числа разделённых «/».

Если вторая величина не зада, то используется одна для обеих типов осей.

Работа с джостиком

Если на одном ПК запустить несколько WLMill, то раньше они все перехватывали сигнал изменения от джостика скриптом одновременно. В результате этого оба станка перемещались одновременно. Сейчас добавилась возможность блокировки этого с помощью функции скрипта Lock и Enable.

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

+ прочие исправления

Не забывайте делать архив настроек перед обновлением!!!

Обновился WLJoystick.js

Добавилась настройка трекинга при движении в ручном режиме. Мы можем включить его установив параметр WLJoystickAxisTrack в 1.

Трекинг — это непрерывное движение оси при смене направления. ТО есть не нужно ждать когда ось завершит движение в одну сторону, чтобы начать в другую.

Скрипты доступны отдельно: https://wldev.ru/data/soft/wlmill/script/script/include/