Upload
others
View
30
Download
0
Embed Size (px)
Citation preview
深圳市高川自动化技术有限公司
- 1 -
高川激光功能使用说明
目录
功能说明 .............................................................................................................................................. - 2 -
接口列表 .............................................................................................................................................. - 3 -
硬件接口说明 ...................................................................................................................................... - 4 -
立即模式编程说明 .............................................................................................................................. - 5 -
波形控制模式编程说明 ...................................................................................................................... - 9 -
位置比较控制模式编程说明 ............................................................................................................ - 10 -
文件版本
版本 时间 说明
1.0 2018.04.16 初稿-ou.cg
深圳市高川自动化技术有限公司
- 2 -
功能说明
激光控制包括三种控制模式(通过 NMC_LaserSetMode),如下:
模式 说明
基本控制模式 用户通过指令(立即或者缓冲区)直接控制激光的开关和能量
也可以设定为自动速度能量跟随
波形控制模式 用户下载‘能量—时间’数组到控制器,控制器在激光输出时,自动
按照数组设定的关系控制激光,如下示意(激光开):
分为点焊和线焊,
点焊,用户在调用 NMC_LaserTimeArrayOn 后,控制器按照设定的能
量-时间数组控制激光能量,直到最后一个点,然后关闭激光输出。
线焊,用户在调用 NMC_LaserTimeArrayOn 后,控制器按照设定的能
量-时间数组控制激光能量,直到最后一个点,并一直保持最后一个
点的能量。用户调用 NMC_LaserTimeArrayOff 后,控制器同样按照指
令新设定的数组控制激光能量,直到最后一个点,然后关闭激光输出。
位置比较控制模式 位置比较控制模式(SHIO),用于对门控信号进行控制,通常应用是
自动通过位置变化量(规划或者编码器)对门控信号进行打开或关闭
的控制方式,如下图示意:
深圳市高川自动化技术有限公司
- 3 -
接口列表
以下为激光控制相关的指令,具体原型及参数请参考头文件:
接口 说明
NMC_LaserSetMode 设置激光控制的模式。该模式的设定,约束相
应指令的功能和操作
NMC_LaserSetOutputType 激光物理信号输出类型配置
NMC_LaserSetParam 设置激光参数
NMC_LaserSetPower 设置立即输出激光的能量
NMC_LaserOnOff 激光立即输出开关
NMC_CrdBufLaserSetFollow 设置缓冲区激光能量跟随
NMC_CrdBufLaserPower 缓冲区设置激光能量
NMC_CrdBufLaserOnOff 缓冲区激光开关
深圳市高川自动化技术有限公司
- 4 -
NMC_LaserSetTimeArrayPower 设置时间序列激光的能量
NMC_LaserTimeArrayOn 打开时间序列激光
NMC_LaserTimeArrayOff 关闭时间序列激光
NMC_SHIOConfigPara 配置 SHIO 功能的参数
NMC_SHIOChangeAxisMask 切换轴(允许和坐标系不完全一致)
NMC_SHIOGateOn 允许 GATE 输出
NMC_SHIOGateOff 禁止 GATE 输出
NMC_SHIOTriggerOn 设置 Trigger 输出
NMC_SHIOTriggerOff 禁止 GATE 输出
NMC_BufSHIOGateOn 允许 GATE 输出
NMC_BufSHIOGateOff 禁止 GATE 输出
硬件接口说明
激光控制输出通道位于控制器的扩展接口上,扩展接口阵脚排列如下:
深圳市高川自动化技术有限公司
- 5 -
以下为信号及引脚:
类型 引脚
PWM 输出 GND:引脚 3
PWM:引脚 5
DA(模拟量输出)
GND:引脚 3
DA:引脚 23
SHIO Gate Gate+:引脚 8
Gate-:引脚 7
注:1.以上模拟量输出引脚以 GCN800A 参考。具体参考硬件手册
立即模式编程说明
一般控制流程:
1.配置激光控制模式及信号输出模式
// g_hDev为控制器设备句柄,设置激光通道0为立即模式
rtn = NMC_LaserSetMode(g_hDev,BASIC_OUTPUT_MODE,0);
if(rtn != 0){ return ;}
// 激光通道0配置为占空比,使用PWM输出通道0,频率为10HZ
rtn = NMC_LaserSetOutputType(g_hDev,LASER_PWM_DUTY,0,10,0);
if(rtn != 0){ return ;}
深圳市高川自动化技术有限公司
- 6 -
2.激光控制
2.1.直接设置激光能量/开关激光
short rtn;
HAND g_hDev;
// 打开第一个运动控制器
rtn = NMC_DevOpen(0,&g_hDev);
if(rtn != 0) { return ;}
// g_hDev为控制器设备句柄,设置激光通道0为立即模式
rtn = NMC_LaserSetMode(g_hDev,BASIC_OUTPUT_MODE,0);
if(rtn != 0){ return ;}
// 激光通道0配置为占空比,使用PWM输出通道0,频率为10HZ
rtn = NMC_LaserSetOutputType(g_hDev,LASER_PWM_DUTY,0,10,0);
if(rtn != 0){ return ;}
// 直接设置激光能量
rtn = NMC_LaserSetPower(g_hDev,10,0);
if(rtn != 0){ return ;}
// 开光
rtn = NMC_LaserOnOff(g_hDev,1,0);
if(rtn != 0){ return ;}
2.2.也可以在插补缓冲区中对激光进行控制,如下:
short rtn;
HAND g_hDev;
HAND g_hCrd;
// 打开第一个运动控制器
rtn = NMC_DevOpen(0,&g_hDev);
if(rtn != 0) { return ;}
//设置激光通道0为立即模式
rtn = NMC_LaserSetMode(g_hDev,BASIC_OUTPUT_MODE,0);
if(rtn != 0){ return ;}
// 激光通道0配置为占空比,使用PWM输出通道0,频率为10HZ
rtn = NMC_LaserSetOutputType(g_hDev,LASER_PWM_DUTY,0,10,0);
if(rtn != 0){ return ;}
// 创建坐标系句柄
rtn = NMC_CrdOpenEx(g_hDev,0,&g_hCrd);
深圳市高川自动化技术有限公司
- 7 -
if(rtn != 0) { return ;}
// 配置坐标系
TCrdConfig crdCfg;
memset(&crdCfg,0,sizeof(TCrdConfig));
crdCfg.axCnts = 2;
crdCfg.pAxArray[0] = 0;
crdCfg.pAxArray[1] = 1;
crdCfg.pAxArray[2] = -1;
crdCfg.pAxArray[3] = -1;
crdCfg.port[0] = 0;
crdCfg.port[1] = 0;
crdCfg.port[2] = 0;
rtn = NMC_CrdConfig(g_hCrd,&crdCfg);
if(rtn != 0) { return ;}
TCrdPara crdPrm;
memset(&crdPrm,0,sizeof(TCrdPara));
crdPrm.synAccMax = 10;
crdPrm.synVelMax = 100;
crdPrm.orgFlag = 1;
crdPrm.offset[0] = 0;
rtn = NMC_CrdSetPara(g_hCrd,&crdPrm);
if(rtn != 0) { return ;}
// 清除缓冲区,压入缓冲区指令
rtn = NMC_CrdBufClr(g_hCrd);
if(rtn != 0) { return ;}
//设置激光通道0的能量为10
rtn = NMC_CrdBufLaserPower(g_hCrd,100,10,0);
if(rtn != 0){ return ;}
// 开激光
rtn = NMC_CrdBufLaserOnOff(g_hCrd,101,1,0);
if(rtn != 0){ return ;}
// 启动直线插补
tgtPos[0] = 10000;
tgtPos[1] = 0;
rtn = NMC_CrdLineXYZ(g_hCrd,154,0x3,tgtPos,0,10,1);
if(rtn != 0){ return ;}
//插补完成后关闭激光输出
rtn = NMC_CrdBufLaserOnOff(g_hCrd,101,0,0);
if(rtn != 0){ return ;}
//指令压入结束
深圳市高川自动化技术有限公司
- 8 -
rtn = NMC_CrdEndMtn(g_hCrd);
if(rtn != 0){ return ;}
//启动缓冲区运动
rtn = NMC_CrdStartMtn(g_hCrd);
if(rtn != 0){ return ;}
2.3.速度能量跟随输出
以下仅给出激光控制相关的代码,控制器及坐标系初始化请参考 2.2,或高川编程手册或例
程。
// 打开激光速度能量跟随,跟随倍率为5,跟随规划位置
rtn = NMC_CrdBufLaserSetFollow(g_hCrd,1,5,0,0);
if(rtn != 0){ return ;}
// 关闭激光
rtn = NMC_CrdBufLaserOnOff(g_hCrd,101,0,0);
if(rtn != 0){ return ;}
// 运动到起始点
tgtPos[0] = 20000;
tgtPos[1] = 0;
rtn = NMC_CrdLineXYZ(g_hCrd,154,0x3,tgtPos,0,vel,acc);
if(rtn != 0){ return ;}
// 开光
rtn = NMC_CrdBufLaserOnOff(g_hCrd,101,1,0);
if(rtn != 0){ return ;}
// 加工(插补过程中,激光自动根据速度变化)
tgtPos[0] = 100000;
tgtPos[1] = 0;
rtn = NMC_CrdLineXYZ(g_hCrd,154,0x3,tgtPos,0,vel,0.01);
if(rtn != 0){ return ;}
// 加工完成,关闭激光
rtn = NMC_CrdBufLaserOnOff(g_hCrd,101,0,0);
if(rtn != 0){ return ;}
深圳市高川自动化技术有限公司
- 9 -
波形控制模式编程说明
一般编程流程:
以下编程说明仅给出激光控制相关的代码,控制器及坐标系初始化请参考 2.2,或参考高川
编程手册或例程。
1.配置激光控制模式及信号输出模式
// g_hDev为控制器设备句柄,设置激光通道0为波形控制模式
rtn = NMC_LaserSetMode(g_hDev, TIME_ARRAY_OUTPUT_MODE,0);
if(rtn != 0){ return ;}
// 激光通道0配置为占空比,使用PWM输出通道0,频率为10HZ
rtn = NMC_LaserSetOutputType(g_hDev,LASER_PWM_DUTY,0,10,0);
if(rtn != 0){ return ;}
……
2.激光控制
2.1 点焊
// 点焊,配置时间能量数组
TLaserPower lserPw;
memset(&lserPw,0,sizeof(TLaserPower));
lserPw.count = 40;
for(int i=0;i<20;i++)
{
lserPw.time[i] = 100;
lserPw.power[i] = i*2;
}
for(int i=0;i<20;i++)
{
lserPw.time[i+20] = 100;
lserPw.power[i+20] = (20-i)*2;
}
rtn = NMC_LaserSetTimeArrayPower(g_hDev,0,&lserPw);
if(rtn != 0){ return ;}
// 点焊,开光
rtn = NMC_LaserTimeArrayOn(g_hDev,0,SPOT_WELDING,0);
if(rtn != 0){ return ;}
深圳市高川自动化技术有限公司
- 10 -
2.2 线焊
// 线焊,开光能量控制数组
TLaserPower lserPw;
memset(&lserPw,0,sizeof(TLaserPower));
lserPw.count = 20;
for(int i=0;i<20;i++)
{
lserPw.time[i] = 100;
lserPw.power[i] = i*2;
}
rtn = NMC_LaserSetTimeArrayPower(g_hDev,0,&lserPw);
if(rtn != 0){ return ;}
// 线焊,开光,能量自动按照设定的数组上升,直到最后的值,并最终保持
rtn = NMC_LaserTimeArrayOn(g_hDev,0,LINE_WELDING,0);
if(rtn != 0){ return ;}
// ……
// 线焊关光规划
TLaserPower lserPw;
memset(&lserPw,0,sizeof(TLaserPower));
lserPw.count = 20;
for(int i=0;i<20;i++)
{
lserPw.time[i] = 100;
lserPw.power[i] = (19-i)*2;
}
rtn = NMC_LaserSetTimeArrayPower(g_hDev,0,&lserPw);
if(rtn != 0){ return ;}
// 线焊,关光,能量自动按照设定的数组下降,直到最后的值,并最终降为0
rtn = NMC_LaserTimeArrayOff(g_hDev,0,LINE_WELDING,0);
if(rtn != 0){ return ;}
位置比较控制模式编程说明
一般编程流程:
深圳市高川自动化技术有限公司
- 11 -
以下编程说明仅给出激光控制相关的代码,控制器及坐标系初始化请参考 2.2,或参考高川
编程手册或例程。
1.配置激光控制模式及信号输出模式
// g_hDev为控制器设备句柄,设置激光通道0为位置比较控制模式
rtn = NMC_LaserSetMode(g_hDev,SHIO_OUTPUT_MODE,0);
if(rtn != 0){ return; }
……
2.控制
2.1 根据位移间距输出 gate(缓冲区)
//位置比较控制模式参数配置
TSHIOPara shioPrm;
shioPrm.isArray = 0;
shioPrm.outMode = 2; // 根据位移间隔输出gate
shioPrm.posSrc = 0; // 位置源为外部编码器
shioPrm.axisMask = 0x3; // XY合成位置
shioPrm.delay = 0; // 无延时
shioPrm.gateTime = 0.00001; // gate打开时间为10微秒
shioPrm.gateDistance = 20; // 位移间距为20 pulse
rtn = NMC_SHIOConfigPara(g_hDev,&shioPrm,0);
if(rtn != 0){ return; }
//……
// 缓冲区中控制gate信号
// 启动gate信号输出
rtn = NMC_BufSHIOGateOn(g_hCrd,1,0);
if(rtn != 0){ return; }
// 运动到起始点
tgtPos[0] = 20000;
tgtPos[1] = 0;
rtn = NMC_CrdLineXYZ(g_hCrd,154,0x3,tgtPos,0,vel,acc);
if(rtn != 0){ return; }
// 关闭gate信号控制
rtn = NMC_BufSHIOGateOff(g_hCrd,1,0);
if(rtn != 0){ return; }
// 加工,加工过程中,gate信号按照设定自动输出
tgtPos[0] = 100000;
tgtPos[1] = 0;
rtn = NMC_CrdLineXYZ(g_hCrd,154,0x3,tgtPos,0,vel,0.01);
深圳市高川自动化技术有限公司
- 12 -
if(rtn != 0){ return; }
2.2 立即开关 gate 信号
//位置比较控制模式参数配置
TSHIOPara shioPrm;
shioPrm.isArray = 0;
shioPrm.outMode = 1; // 立即输出
shioPrm.posSrc = 1;
shioPrm.axisMask = 0x3;
shioPrm.delay = 0;
shioPrm.gateTime = 0.0008;
shioPrm.gateDistance = 20;
rtn = NMC_SHIOConfigPara(g_hDev,&shioPrm,0);
if(rtn != 0){ return; }
//……
// 缓冲区中控制gate信号
// 启动gate信号输出
rtn = NMC_BufSHIOGateOn(g_hCrd,1,0);
if(rtn != 0){ return; }
// 关闭gate信号输出
rtn = NMC_BufSHIOGateOff(g_hCrd,1,0);
if(rtn != 0){ return; }
// 也可以在非缓冲区中,调用NMC_SHIOGateOn/NMC_SHIOGateOff对gate信号
进行控制