Datalogic 雕刻机
选型需要考虑:
1. 材料
2. 材质
3. 内容
4. 范围 选择镜头
5. 厚度
6. 效率
7. 效果
脚本代码:
// COM 串口设置
const N_COM = "COM2"; const N_PATH_APP = "D:\\232_load_file\\";
const N_PATH_XLP = N_PATH_APP+"xlp\\"; const N_PATH_DEBUG = N_PATH_APP+"laser_debug\\laser_debug"
var N_DEBUG = false; var bLoaded = false;
var bStopLaser = false; function onQueryStart()
{
// 收到开始雕刻信号
if (!bLoaded)
{
debug_print("onQueryStart - Not Load");
return;
}
if (bMarking)
{
debug_print("onQueryStart - Marking");
return;
}
if (N_DEBUG)
{
if (bStopLaser)
{
debug_print("onQueryStart - Test Stop");
bStopLaser = false;
return;
}
bStopLaser = false;
n_StartTime = new Date();
n_StartTime = new Date();
}
uxStatus.text = "开始激光雕刻... ";
bMarking = true;
h_Doc.execute(true, true);
}
function onLaserStop()
{
// 停止激光后
debug_print("onLaserStop ... ");
bMarking = false;
uxStatus.text = "待命";
}
function onLaserStart()
{
// TODO
}
function onLaserEnd()
{
// 雕刻完成后
if (N_DEBUG)
{
var d = new Date();
d = new Date();
var timeDiff = (d - n_StartTime) / ;
if (timeDiff > )
{
var strOut = "onLaserEnd ... count=" + n_MarkCount + " ,delay = " + timeDiff.toString();
debug_print(strOut);
}
n_MarkCount++;
debug_print("onLaserEnd ... count=" + n_MarkCount + " ,time=" + timeDiff.toString());
}
var cmdOut;
cmdOut = "<XE>";
debug_print("232 Send="+cmdOut);
h_port.writeBlock(cmdOut, cmdOut.length);
uxStatus.text = "待命";
System.collectGarbage();
bMarking = false;
}
function onLaserError(error)
{
switch(error)
{
case System.DSP_IN_HANG:
System.resetBoard();
break;
case System.DSP_ERROR_INIT:
// This event is triggered each time the script engine starts
// if the board was not properly loaded
// MessageBox.critical( "Board initialization error", MessageBox.Ok );
break;
// TODO
}
}
function main()
{
System.sigQueryStart.connect(onQueryStart);
System.sigLaserStop.connect(onLaserStop);
System.sigLaserStart.connect(onLaserStart);
System.sigLaserEnd.connect(onLaserEnd);
System["sigLaserError(int)"].connect(onLaserError); // 系统初始化
System.sigClose.connect(onClose); bMarking = false;
n_StartTime = new Date();
n_StartTime = new Date();
n_MarkCount = ; initCOM();
initIO();
initTimer(); //Create preview dialogue
dialog = new Dialog("Laser Custom Application - 232 Load Text - 3.00",Dialog.D_NONE,false);
dialog.setFixedSize(,);
renderarea = new RenderArea();
dialog.add(renderarea); uxGroupFile = new GroupBox();
uxGroupFile.title = "图面文件";
dialog.add( uxGroupFile ); uxFileName = new Label();
uxFileName.alignment = 0x02; // align right
uxFileName.text = ""
uxGroupFile.add( uxFileName ); uxDebug = new CheckBox();
uxDebug.text = "记录日志";
uxDebug.checked = false;
uxDebug.sigStateChanged.connect(onStateChanged);
dialog.add( uxDebug ); uxAim = new PushButton();
uxAim.text = "红光校准";
uxAim.sigPressed.connect(startAiming);
dialog.add(uxAim); uxStop = new PushButton();
uxStop.text = "停止激光";
uxStop.sigPressed.connect(stopLaser);
dialog.add(uxStop); uxMark = new PushButton();
uxMark.text = "开始雕刻";
uxMark.sigPressed.connect(startMark);
dialog.add(uxMark); uxStatus = new Label();
uxStatus.alignment = 0x02; // align right
uxStatus.text = "待命";
dialog.add( uxStatus ); initCOMUI();
initIOUI(); dialog.show(); debug_print( "Ready !" );
IoPort.setReady(true);
}
function onClose()
{
IoPort.setReady(false);
} // 加载图面文件
function onLoadPlain()
{
var file_name;
file_name = FileDialog.getOpenFileName("Laser Documents (*.xlp)", "Select XLP A");
if (file_name)
{
uxFileName.text = file_name;
loadPlain(uxFileName.text);
} file_name = FileDialog.getOpenFileName("Laser Documents (*.xlp)", "Select XLP B");
if (file_name)
{
uxFileName2.text = file_name;
}
}
function loadPlain(file_name)
{
// 1.21 加载xlp文件
h_Doc = new LaserDoc;
if (h_Doc.load(file_name))
{
renderarea.preview(h_Doc);
bLoaded = true;
n_MarkCount = ;
return true;
}
else
{
// MessageBox.information( "加载错误!-"+file_name, MessageBox.Ok );
debug_print("Error load XLP- " + file_name + " !");
bLoaded = false;
return false;
}
} // 雕刻控制
function startMark()
{
// 2.1 触发激光雕刻
onQueryStart();
}
function stopLaser()
{
System.stopLaser();
}
function startAiming()
{
if (System.isLaserBusy()) return;
h_Doc.execute(true, false);
uxStatus.text = "红光校准";
} // 232 COM 通讯处理
function initCOM()
{
N_CHAR_SYNC = "";//"UUUU";
N_CHAR_START = "<";
N_CHAR_END = ">";
n_RxBuffer = ""; // COM init
h_port = new ComPort;
h_port["readyRead()"].connect(onReadyRead);
h_port.portName = N_COM;
h_port.baudRate = ComPort.BAUD9600;
h_port.flowControl = ComPort.FLOW_OFF;
h_port.parity = ComPort.PAR_NONE;
h_port.dataBits = ComPort.DATA_8;
h_port.stopBits = ComPort.STOP_1;
var result = h_port.open(ComPort.ReadWrite);
debug_print("Open - "+N_COM+"="+result);
if (!result) debug_print( "open_error-"+N_COM, MessageBox.Ok );
}
function initCOMUI()
{
uxStatusCOM = new Label();
uxStatusCOM.alignment = 0x02; // align right
uxStatusCOM.text = "COM = "+N_COM+",9600,8,N,1,N";
dialog.add( uxStatusCOM );
}
function onReadyRead()
{
// 接收数据
debug_print( "onReadyRead = " );
var msg = h_port.readBlock();
var str = "";
for (var i=; i<msg.length; i++)
{
str += String.fromCharCode(msg[i]);
}
for (var i=; i<n_RxBuffer.length; i++)
{
debug_print("n_RxBuffer="+i+"="+n_RxBuffer.charCodeAt(i));
}
// h_port.writeBlock(str, str.length);
n_RxBuffer += str;
debug_print(n_RxBuffer);
var cmds = n_RxBuffer.split(N_CHAR_START);
debug_print("cmds="+cmds);
n_RxBuffer = "";
if (cmds.length <) return;
for (var i=; i<cmds.length; i++)
{
var end = cmds[i].indexOf(N_CHAR_END);
if (end > )
{
cmds[i] = cmds[i].substring(, end);
decodeCommand(cmds[i]);
}
else if (i == (cmds.length-))
{
n_RxBuffer = N_CHAR_START + cmds[i];
}
}
}
function decodeCommand(cmd)
{
// 解读指令
cmd = cmd.replace(N_CHAR_END,"");
debug_print("decodeCommand="+cmd);
switch (cmd[])
{
case 'X':
// 开始雕刻
onQueryStart();
var cmdOut;
cmdOut = N_CHAR_SYNC + N_CHAR_START + "X" + N_CHAR_END;
debug_print("232 Send="+cmdOut);
h_port.writeBlock(cmdOut, cmdOut.length);
break;
case 'P':
// 停止雕刻
bStopLaser = true;
System.stopLaser();
var cmdOut;
cmdOut = N_CHAR_SYNC + N_CHAR_START + "P" + N_CHAR_END;
debug_print("232 Send="+cmdOut);
h_port.writeBlock(cmdOut, cmdOut.length);
break;
case 'L':
// 选泽图面文件
cmd = cmd.substring(, cmd.length);
var fullPath = N_PATH_XLP + cmd + ".xlp";
var infile = new File(fullPath);
debug_print("L="+fullPath);
uxStatus.text = "232 选择 XLP = " + fullPath;
uxFileName.text = fullPath;
var result = loadPlain(uxFileName.text);
var cmdOut;
if (result)
{
cmdOut = N_CHAR_SYNC + N_CHAR_START + "L" + cmd + N_CHAR_END;
debug_print("232 Send="+cmdOut);
h_port.writeBlock(cmdOut, cmdOut.length);
}
break;
case 'D':
// 修改文字
cmd = cmd.substring(, cmd.length);
var para = cmd.split(",");
if (para.length >= )
{
debug_print("D="+cmd);
uxStatus.text = "232 修改文字ID"+para[].toString()+"为"+para[].toString();
var h_Obj = h_Doc.getLaserObject(para[].toString());
h_Obj.text = para[].toString();
h_Obj.update();
renderarea.preview(h_Doc);
var cmdOut;
cmdOut = N_CHAR_SYNC + N_CHAR_START + "D" + para[].toString() + "," + para[].toString() + N_CHAR_END;
debug_print("232 Send="+cmdOut);
h_port.writeBlock(cmdOut, cmdOut.length);
}
break;
case 'O':
// 偏移XYA
cmd = cmd.substring(, cmd.length);
var para = cmd.split(",");
if (para.length >= )
{
h_Obj = h_Doc.getLaserObject(para[].toString());
offX = parseFloat(para[]);
offY = parseFloat(para[]);
offA = parseFloat(para[]);
if ((offX!=NaN) && (offX!=NaN) && (offX!=NaN))
{
uxStatus.text = "232 修改ID"+para[].toString()+",X="+offX.toString()+",Y="+offY.toString()+",A="+offA.toString();
// 获取现时角度
var oldAng = Math.acos(h_Obj.x11) * / Math.PI;
if ( h_Obj.x12 < ) oldAng = - oldAng;
// MessageBox.critical( oldAng, MessageBox.Ok );
offA = offA - oldAng;
// 移动对象
h_Obj.moveTo(offX, offY);
// 旋转对象
h_Obj.rotate(offA);
// print("x11="+h_Obj.x11.toString()+",x12="+h_Obj.x12.toString()+",x21="+h_Obj.x21.toString()+",x22="+h_Obj.x22.toString());
renderarea.preview(h_Doc);
print("O=offX="+offX+",offY="+offY+"offA="+offA);
var cmdOut;
cmdOut = N_CHAR_SYNC + N_CHAR_START + "O" + para[] + "," + para[] + "," + para[] + "," + para[] + N_CHAR_END;
print("232 Send="+cmdOut);
h_port.writeBlock(cmdOut, cmdOut.length);
}
}
break;
case 'T':
test1();
break;
}
} // 测试 IO 触发
function initIO()
{
if (!N_DEBUG) return;
// reset IO port
IoPort.setReady(false);
}
function initIOUI()
{
if (!N_DEBUG) return; uxGroupTest = new GroupBox();
uxGroupTest.title = "测试";
dialog.add( uxGroupTest ); uxtest1 = new PushButton();
uxtest1.text = "测试选择1";
uxtest1.sigPressed.connect(test1);
uxGroupTest.add(uxtest1);
}
function test1()
{
if (!N_DEBUG) return;
debug_print("test1...");
IoPort.setReady(true);
// reset test input pin
timerTest1 = System.setTimer();
} // 定时器设置
function initTimer()
{
if (!N_DEBUG) return;
System["sigTimer(int)"].connect(onTimer);
}
function onTimer(ID)
{
System.killTimer(ID);
switch (ID)
{
case(timerTest1):
debug_print("timerTest1...");
IoPort.setReady(false);
break;
}
System.collectGarbage();
} // 除错日志
function onStateChanged()
{
if (uxDebug.checked)
{
N_DEBUG = true;
}
else
{
N_DEBUG = false;
}
}
function debug_print(message)
{
if (!N_DEBUG) return; var d = new Date();
d = new Date(); var yyyy = d.getFullYear().toString();
var mm = (d.getMonth()+).toString();
var dd = d.getDate().toString();
var hh = d.getHours().toString();
var mi = d.getMinutes().toString();
var ss = d.getSeconds().toString();
var ms = d.getMilliseconds().toString();
if (dd.length < ) dd = "" + dd;
if (hh.length < ) hh = "" + hh;
if (mi.length < ) mi = "" + mi;
if (ss.length < ) ss = "" + ss;
if (ms.length < ) ms = "" + ms;
if (ms.length < ) ms = "" + ms; var day = yyyy + "-" + mm + "-" + dd;
var time = hh + ":" + mi + ":" + ss + "." + ms;
var s = day + " " + time + "\t" + message; var pathFile = N_PATH_DEBUG + "-" + day + ".txt";
appendTextToFile(pathFile, s);
// print(s);
}
function appendTextToFile(file_name, text)
{
var full_path_txt = file_name;
var outfile = new File(full_path_txt);
var result = false;
var strOut = text + "\r\n"; outfile.open(File.WriteOnly| File.Append);
outfile.writeLine(strOut, strOut.length);
outfile.close(); return result;
} 折叠/显示
打印测试效果如下:
Datalogic 雕刻机的更多相关文章
- Datalogic组网模式下通讯
1.首先要在visiset工具下,设置好地址端口号,组网模式master slave参数: 2.打开工具hercules,选择TCP Client选项,设置参数好连接并通讯,发送打开.关闭 按钮指令, ...
- 雕刻机制作 PCB 指南
之前使用过感光蓝油制作过 PCB,虽然感光法精度高,但个人制作耗时耗力,发给厂家周期又很长.看到国外的网友使用雕刻机制作 PCB 视频之后.几番周折之后还是成功了.有感于网上几乎没有一份完整的雕刻机 ...
- C#利用控件mscomm32.ocx读取串口datalogic扫描枪数据
1).开发环境VS12,语言C# 2).扫描枪品牌:datalogic 4470 3).通讯协议:串口 1.首先,第一步创建一个新工程,windows窗体应用程序,命名为TestScanner,如下: ...
- 001_项目开源之_STM32激光雕刻机
我是标题:STM32激光雕刻机(开源免费) (一)首先感谢将离九歌 https://github.com/MaxwellXyao 提供的C8T6/GRBL的源码 (二)本设计开源(免费),请忽倒 ...
- 电子爱好者DIY篇
2016/7/15 电子爱好者DIY篇 一年和之前就想到了一些感悟,现在有些模糊的清晰起来了,但还是不够清晰,故写下来做个日志. 结论 首先把结论放在前面.目前随着电子集成电路的发展,电子DIY越来越 ...
- 智能车学习(二十)——浅谈C车硬连接与软连接
一.为何要追求软连接? 车子进行软连接之后,可以达到一种效果,就是在高速过程中,车子如果快要发生侧翻的时候,只会跳一个后轮,且只是轻微,而前轮如果进行的内倾,就可以让前轮最大面积接触,增大 ...
- 智能车学习(十七)——舵机学习
一.舵机的结构 舵机简单的说就是集成了直流电机.电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元.能够利用简单的输入信号比较精确的转动给定角度的电机系统.舵机安装了一个电位器(或 ...
- 一维条形码攻击技术(Badbarcode)
0x00 前言 在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主 在PacSec介绍的条形码攻击和twitter上的demo视频太炫酷,所以就自己买了 ...
- require js 将config和入口函数分开写
原文地址 https://github.com/jrburke/requirejs/issues/354 Area there any plans to standardize/recommend a ...
随机推荐
- MIME Type介绍 Content-Type 各种定义
多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符.二进制格式附件等多种格 ...
- react native开源库管理
安装: 1,正确的安装方式是 npm install xxx --save,经常看到许多组件安装文档上后面没有 --save,如果没有建议加上 否则组件信息不会出现在package.json中,导入组 ...
- Vue 实例暴露了一些有用的实例属性与方法。这些属性与方法都有前缀 $,以便与代理的 data 属性区分
var data = { a: 1 } var vm = new Vue({ el: '#example', data: data }) vm.$data === data // -> true ...
- where与having 的区别
二者的区别在于作用对象不同. where子句作用于基本表或视图,从中选择满足条件的一行或多行元祖. having短语作用于组,从中选择满足条件的组.这些组应该由group by 短句来进行分组.
- RookeyFrame 整个运行流程
准备开始整理一下这个项目的整体框架,很久没研究这个框架了,心里还是念着的,今儿乘有时间弄一下. 一丁点建议: 先自己一个一个的搬作者的类库,这样就能很好的理解作者的项目结构 每搬一个类库都运行一下哦, ...
- C++智能指针总结
本文介绍c++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用. 为什么要使用智能 ...
- 可持久化0-1Trie树
我跟可持久化数据结构杠上了 \(QwQ\) .三天模拟赛考了两次可持久化数据结构(主席树.可持久化0-1Trie树),woc. 目录: 个人理解 时空复杂度分析 例题及简析 一.个人理解 可持久化0- ...
- nginx rewrite中的break和last
两个指令用法相同,但含义不同,需要放到rewrite规则的末尾,用来控制重写后的链接是否继续被nginx配置执行(主要是rewrite.return指令). 示例1:(连续俩条rewrite规则)se ...
- 禁止tomcat的Catina.out的累计输出
禁止tomcat的Catina.out的累计输出 1.设置 catina.sh的CATALINA_OUT=/dev/null
- oracle 如何快速删除两表非关联数据(脏数据)?
1.情景展示 现在有两者表,表1中的主键id字段和表2的index_id相对应.如何删除两表非关联数据? 2.解决方案 --第1步 delete from VIRTUAL_CARD t where ...