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 ...
随机推荐
- hiveserver2和zookeeper的HA搭建(转)
最近公司新项目申请资源,虚拟机资源打开时候使用source login.sh的脚本来进行登录注册,好奇心驱使下看了看里面的shell脚本,使用到了hiveserver2的zookeeper连接,百度一 ...
- 每隔15s异步刷新手机页面
前台异步js发请求代码: <script type="text/javascript"> var lightArr; var lightHistoryArr; /* 每 ...
- Vsftpd 2.2.x安装和配置--centos7前的版本
Vsftpd 2.2.x安装和配置--centos7前的版本 原文链接:https://my.oschina.net/loubobooo/blog/1633367 1. 关闭防火墙和Selinux L ...
- 67-Flutter中高德地图插件的使用
1.注册和建立高德API应用 高德网站:https://lbs.amap.com/ 控制台-应用管理-创建应用 在创建 Key 2.获得SHA1 进入Flutter项目中的android文件夹内,打开 ...
- MongoDB 聚合函数
概念 聚合函数是对一组值执行计算并返回单一的值 主要的聚合函数 count distinct Group MapReduce 1.count db.users.count() db.users.cou ...
- 使用nodegui 开发高性能的跨平台桌面端应用
nodegui 是基于qt + nodejs 的跨平台桌面开发方案,官方同时也提供了很不错的文档 简单使用 使用官方的starter clone 代码 git clone https://github ...
- Centrifugo 语言无关的实时消息服务
Centrifugo 语言无关的实时消息服务,基于golang编写,提供了websocket 以及sockjs 的兼容处理,使用上很简单 同时也支持基于redis的扩展,以下是一个简单的运行测试 环境 ...
- 8.8poc包问题
对于8.8的包的问题:zabbix server设备重启后 zabbix server,mariadb,zabbix agent启动不了.是因为在7代的centos中在主机重启后.自动删除了/var/ ...
- json-server模拟服务器API
一.npm安装 npm install --global json-server 二.使用:创建一个json数据文件,比如: { "students": [{ "id&q ...
- 《Elasticsearch实战》读书笔记
遗留问题: 1._source字段和field字段的区别 2.q和search的区别(查询请求中) 3.输入关键字的大小写,参考prefix查询,match_phrase_prefix查询(4.4.2 ...