选型需要考虑:

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 雕刻机的更多相关文章

  1. Datalogic组网模式下通讯

    1.首先要在visiset工具下,设置好地址端口号,组网模式master slave参数: 2.打开工具hercules,选择TCP Client选项,设置参数好连接并通讯,发送打开.关闭 按钮指令, ...

  2. 雕刻机制作 PCB 指南

    之前使用过感光蓝油制作过 PCB,虽然感光法精度高,但个人制作耗时耗力,发给厂家周期又很长.看到国外的网友使用雕刻机制作 PCB  视频之后.几番周折之后还是成功了.有感于网上几乎没有一份完整的雕刻机 ...

  3. C#利用控件mscomm32.ocx读取串口datalogic扫描枪数据

    1).开发环境VS12,语言C# 2).扫描枪品牌:datalogic 4470 3).通讯协议:串口 1.首先,第一步创建一个新工程,windows窗体应用程序,命名为TestScanner,如下: ...

  4. 001_项目开源之_STM32激光雕刻机

    我是标题:STM32激光雕刻机(开源免费) (一)首先感谢将离九歌   https://github.com/MaxwellXyao  提供的C8T6/GRBL的源码 (二)本设计开源(免费),请忽倒 ...

  5. 电子爱好者DIY篇

    2016/7/15 电子爱好者DIY篇 一年和之前就想到了一些感悟,现在有些模糊的清晰起来了,但还是不够清晰,故写下来做个日志. 结论 首先把结论放在前面.目前随着电子集成电路的发展,电子DIY越来越 ...

  6. 智能车学习(二十)——浅谈C车硬连接与软连接

    一.为何要追求软连接?       车子进行软连接之后,可以达到一种效果,就是在高速过程中,车子如果快要发生侧翻的时候,只会跳一个后轮,且只是轻微,而前轮如果进行的内倾,就可以让前轮最大面积接触,增大 ...

  7. 智能车学习(十七)——舵机学习

    一.舵机的结构      舵机简单的说就是集成了直流电机.电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元.能够利用简单的输入信号比较精确的转动给定角度的电机系统.舵机安装了一个电位器(或 ...

  8. 一维条形码攻击技术(Badbarcode)

    0x00 前言 在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主 在PacSec介绍的条形码攻击和twitter上的demo视频太炫酷,所以就自己买了 ...

  9. require js 将config和入口函数分开写

    原文地址 https://github.com/jrburke/requirejs/issues/354 Area there any plans to standardize/recommend a ...

随机推荐

  1. Mysql建表通用写法

    Mysql建表通用写法 CREATE TABLE IF NOT EXISTS stu( id ) PRIMARY KEY AUTO_INCREMENT,//主键 自增 stuname ) NOT NU ...

  2. 查看服务器被访问最大的ip

    网站有时会很卡,可以先看看哪些ip访问最多,一行命令就可以列出来,如下所示 netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c ...

  3. Windows 10中的CSC.exe、CSC.rsp

    (1)CSC.exe位置 [4.0的位于] C:\Windows\Microsoft.NET\Framework\v4.0.30319 [之后版本的位于] C:\Program Files (x86) ...

  4. [Zjoi2006]三色二叉树(bzoj1864)(洛谷2585)题解

    原题地址:https://www.luogu.org/problemnew/show/P2585 题目大意:可以把一个节点染成三种颜色,父节点和两个子节点(可以有一个)颜色不能相同.求最多(少)能有多 ...

  5. luogu P1724 东风谷早苗

    二次联通门 : luogu P1724 东风谷早苗 /* luogu P1724 东风谷早苗 模拟即可 手抖 Y-- 打成 Y++ WA了两发.. */ #include <cstring> ...

  6. Vue项目预渲染机制

    我们知道SPA有很多优点,不过一个缺点就是对(不是Google的)愚蠢的搜索引擎的SEO不友好,为了照顾这些引擎,目前主要有两个方案:服务端渲染(Server Side Rendering).预渲染( ...

  7. 如何使用git把本地代码上传到远程仓库上

    初始化 git init 查看当前仓库状态 git status 将项目的文件添加到仓库中 git add test.txt git add -A git add . 将add的文件commit到仓库 ...

  8. mpvue图片上传

    mpvue小程序项目中的图片上传 我的csdn博客地址:https://blog.csdn.net/zmkyf1993 一般我是优先更新csdn内容,然后在拷过来的. 效果图 通过mpvue文档得知他 ...

  9. Java——获取网页内容并在本地生成HTML文件

    使用java.net包下的URL类,可以将一个网页(链接)封装成一个URL对象. URL对象有一个openStream()方法,使用该方法可以获取该网页的输入流,我们可以通过读取输入流的方式获得网页的 ...

  10. OpenFOAM——圆柱绕流对流换热

    本算例来自<ANSYS FLUENT技术基础与工程应用:流动传热与环境污染控制领域> TOP和DOWN为对称边界(symmetry),入口速度为0.01m/s,入口温度为300K,圆柱温度 ...