运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出
供稿:深圳市正运动技术有限公司
- 关键词:运动控制器,PSO视觉飞拍,多轴PSO
- 作者:正运动技术
- 摘要:上节讲解了多轴PSO等距周期和固定时间周期两种比较输出模式,本节主要讲解二维三维比较输出模式。
ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC408CE内置高精度PSO位置同步输出功能,在加工圆角与曲线时即使进行有减速调整,在高速加工的场合中也能控制激光输出的等间距输出。 1.新建MFC项目并添加函数库 注:本例程在VS2010编译环境下,基于.NET Framework 4.0框架创建的MFC窗体应用程序。 (1)工具栏菜单“文件”→“新建”→“项目”,启动创建项目向导。 4.查看PC函数手册 5.控制器网口连接函数接口 7.硬件定时器函数接口 ZAux_Direct_HwTimer硬件定时器硬件比较输出后一段时间还原电平。 (1)2D比较(模式25) opstate:第一个比较点的输出状态; maxerr:比较位置每个轴左右的脉冲偏差,进入偏差范围后开始比较,此参数不能写0; num:table里面存储的比较点坐标个数; tablepos:第一个比较点坐标所在table编号。 该模式主要功能为,碰到设置好的二维比较点之后,输出口电平反转。 语法:HW_PSWITCH2(26,opnum,opstate,maxerr,num,tablepos,[ophwtimeus,ophwtimes,hwcyctimeus]) 3.三维比较模式 (1)3D比较(模式35) 语法:HW_PSWITCH2(35,opnum,opstate,maxerr,num,tablepos) 该模式主要功能为,碰到设置好的三维比较点之后,输出口电平反转。 核心程序示例: (2)3D比较(模式36) 本次,正运动技术运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出,就分享到这里。1.Demo交互界面如下
/*参数:mode 25, 26 ,35,36.2D/3D的比较模式
Axisnum:轴数组
Opnum :对应的输出口
Opstate: 第一个比较点的输出状态.
maxerr:比较位置每个轴左右的脉冲偏差, 进入偏差范围后开始比较.
num :TABLE 里面存储的比较点个数.
tablepos: 第一个比较点坐标所在 TABLE 编号
与 hwtimer 并用时, 可以动态调整 hwtimer 参数.
ModePara1:脉冲时间
ModePara2:脉冲个数
ModePara3:脉冲周期
*/
int32 CMyControlDlg:: ZAux_Direct_HwPswitch2_2D(ZMC_HANDLE handle, int *Axisnum,int Mode,int Opnum , int Opstate,int maxerr,int num, int tablepos, float ModePara1, float ModePara2,float ModePara3)
{
if(0 > Axisnum[0] || Axisnum[0] > MAX_AXIS_AUX)
{
return ERR_AUX_PARAERR;
}
char cmdbuff[2048];
char tempbuff[2048];
char cmdbuffAck[2048];
//生成命令
sprintf(cmdbuff, "BASE(%d,%d)\n", Axisnum[0], Axisnum[1]);
switch(Mode)
{
case 25:
sprintf(tempbuff, "HW_PSWITCH2(%d,%d,%d,%d,%d,%d)", Mode, Opnum, Opstate, maxerr,num,tablepos);
strcat(cmdbuff, tempbuff);
break;
case 26:
sprintf(tempbuff, "HW_PSWITCH2(%d,%d,%d,%d,%d,%d,%f,%f,%f)", Mode,Opnum, Opstate, maxerr,num,tablepos,ModePara1,ModePara2,ModePara3);
strcat(cmdbuff, tempbuff);
break;
case 35:
sprintf(tempbuff, "HW_PSWITCH2(%d,%d,%d,%d,%d,%d)", Mode, Opnum, Opstate, maxerr,num,tablepos);
strcat(cmdbuff, tempbuff);
break;
case 36:
sprintf(tempbuff, "HW_PSWITCH2(%d,%d,%d,%d,%d,%d,%f,%f,%f)", Mode,Opnum, Opstate, maxerr,num,tablepos,ModePara1,ModePara2,ModePara3);
strcat(cmdbuff, tempbuff);
break;
default:
return ERR_AUX_PARAERR;
break;
}
//调用命令执行函数
int ret=ZAux_Execute(handle, cmdbuff, cmdbuffAck,2048);
if (strlen(cmdbuffAck)!=0)
return ERR_ACKERROR;
return ret;
}
/*参数:mode 25, 26 ,35,36.2D/3D的比较模式
Axisnum:轴数组
Opnum :对应的输出口
Opstate: 第一个比较点的输出状态.
maxerr:比较位置每个轴左右的脉冲偏差, 进入偏差范围后开始比较.
num:TABLE 里面存储的比较点个数.
tablepos: 第一个比较点坐标所在 TABLE 编号
与 hwtimer 并用时, 可以动态调整 hwtimer 参数.
ModePara1:脉冲时间
ModePara2:脉冲个数
ModePara3:脉冲周期
*/
int32 CMyControlDlg:: ZAux_Direct_HwPswitch2_2D(ZMC_HANDLE handle, int *Axisnum,int Mode,int Opnum , int Opstate,int maxerr,int num, int tablepos, float ModePara1, float ModePara2,float ModePara3)
{
if(0 > Axisnum[0] || Axisnum[0] > MAX_AXIS_AUX)
{
return ERR_AUX_PARAERR;
}
char cmdbuff[2048];
char tempbuff[2048];
char cmdbuffAck[2048];
//生成命令
sprintf(cmdbuff, "BASE(%d,%d)\n", Axisnum[0], Axisnum[1]);
switch(Mode)
{
case 25:
sprintf(tempbuff, "HW_PSWITCH2(%d,%d,%d,%d,%d,%d)", Mode, Opnum, Opstate, maxerr,num,tablepos);
strcat(cmdbuff, tempbuff);
break;
case 26:
sprintf(tempbuff, "HW_PSWITCH2(%d,%d,%d,%d,%d,%d,%f,%f,%f)", Mode,Opnum, Opstate, maxerr,num,tablepos,ModePara1,ModePara2,ModePara3);
strcat(cmdbuff, tempbuff);
break;
case 35:
sprintf(tempbuff, "HW_PSWITCH2(%d,%d,%d,%d,%d,%d)", Mode, Opnum, Opstate, maxerr,num,tablepos);
strcat(cmdbuff, tempbuff);
break;
case 36:
sprintf(tempbuff, "HW_PSWITCH2(%d,%d,%d,%d,%d,%d,%f,%f,%f)", Mode,Opnum, Opstate, maxerr,num,tablepos,ModePara1,ModePara2,ModePara3);
strcat(cmdbuff, tempbuff);
break;
default:
return ERR_AUX_PARAERR;
break;
}
//调用命令执行函数
int ret=ZAux_Execute(handle, cmdbuff, cmdbuffAck,2048);
if (strlen(cmdbuffAck)!=0)
return ERR_ACKERROR;
return ret;
}
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
<section data-source="bj.96weixin.com" style="margin: 0px 0px 32px; padding: 0px; outline: 0px; max-width: 100%; color: rgb(34, 34, 34); font-family: system-ui, -apple-system, BlinkMacSystemFont, " helvetica="" neue",="" "pingfang="" sc",="" "hiragino="" sans="" gb",="" "microsoft="" yahei="" ui",="" yahei",="" arial,="" sans-serif;="" letter-spacing:="" 0.544px;="" background-color:="" rgb(255,="" 255,="" 255);="" line-height:="" 1.5em;="" text-indent:="" 0em;="" box-sizing:="" border-box="" !important;="" overflow-wrap:="" break-word="" !important;"="">