Обновление WLMill 2.105 — изменена загрузка плагинов и доработана загрузка QML.

Кратко:

  1. Можно создавать несколько объектов плагина от одной библиотеки. Например несколько COM портов.
  2. Загрузка окон QML и плагина сделана как обычное окно приложения. Это даёт возможность сохранения его положения и размещения при перезагрузке.
  3. Создан новый плагин COM порта. WLSerialPortPlugin2.dll
  4. Создан объект в скриптах DSTREAM (DataStream) — для формирования и разбора данных (например при работе с COM портом).
  5. Исправлена работа ручных перемещений. В редких случаях «западало 100%» при частом нажатии на Shift. Выявилось при работе с программой CARAMBA SWITCHER.
  6. Добавлен тип колонок color(цвет),file(файл),dir(папка) для систем координат, tplace и инструмента. При правке этих колонок будет вызван стандартный диалог.
  7. Добавлено окно вывода debug данных программы. (которые пишутся в файл)
  8. Прочие улучшения.

Загрузка плагинов происходит через меню правка >> plugin. У нас появляется окно в котором мы задаём имя объекта (для скрипта и отображения) и ссылка на библиотеку.

Здесь мы создаём 2 объекта для работы с последовательным портом.

Пример окон QML. Аналогично плагинам

Здесь мы создали окно для работы с щупом (WLProbe.qml — идёт в с программой) — использует стоковый скрипт WLProbe.js .Окно корректоров F и окно с тремя кнопками Start Pause Stop (дублируют текущие). https://wldev.ru/data/soft/wlmill/qml/

Прежняя загрузка «через скрипт» в окно Tab также работает. Она удобна для отладки файла qml т.к. не требует перезапуска WLMill.

DSTREAM — новый объект (поток данных) для разбора и создания потока данных. Пример

function ON()
{	
 //добавляем 2 строки для активации портов 2 и 3
 SCRIPT.console("open serial 3 - "+ SERIAL3.open("COM6")+SERIAL3.getErrorStr())
 SCRIPT.console("open serial 2 - "+ SERIAL2.open("COM5")+SERIAL2.getErrorStr())
}

function OFF()
{	
 //добавляем 2 строки для отключения портов 2 и 3
 SERIAL3.close()
 SERIAL2.close()
}
function senMessage() //отправляем сообщение
{
 DSTREAM.clear() //очищаем
 DSTREAM.writeString("Happy New Year!") //добавляем строку
 DSTREAM.writeInt16(2026) //добавляем число типа int 16 бит
 DSTREAM.addCRC16() //добавляем контрольную сумму
	
 SCRIPT.console("send Serial: "+ SERIAL2.sendData(DSTREAM.getData()))	//отправляем в SERIAL2
}

function readDataSerialPort(name) //принимаем и разбираем
{
 SCRIPT.console("read from: "+name)
	
 DSTREAM.clear()	
 DSTREAM.setData(SERIAL3.getData()); //устанавливаем данные в поток DSTREAM

 if(DSTREAM.checkCRC16()) //если контрольная сумма верна, то разбираем пакет
 {
  SERIAL3.clearRecive();
	
  SCRIPT.console("from Serial: "+DSTREAM.readString()+" "+DSTREAM.readInt16())//читаем сначала строку, затем число. как и при отправке.		
 }
}

Также можно создавать и свой поток данных. используя new DataStream()

function senMessage() //отправляем сообщение
{
 var my = new DataStream()
 my.writeString("Happy New Year!") //добавляем строку
 my.writeInt16(2026) //добавляем число типа int 16 бит
 my.addCRC16() //добавляем контрольную сумму
	
 SCRIPT.console("send Serial: "+ SERIAL2.sendData(my.getData())) //отправляем в SERIAL2
}

function readDataSerialPort(name) //принимаем и разбираем
{
 SCRIPT.console("read from: "+name)

 var my = new DataStream(SERIAL3.getData()) //устанавливаем данные в поток DSTREAM

 if(DSTREAM.checkCRC16()) //если контрольная сумма верна, то разбираем пакет
 {
 SERIAL3.clearRecive();
	
 SCRIPT.console("from Serial: "+my.readString()+" "+my.readInt16())//читаем сначала строку, затем число. как и при отправке.
 }		
}

Напиши в MAX Написать в MAX.RU