运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出

您所在的位置:网站首页 高速脉冲输出指令在自动线中的作用 运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出

运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出

#运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出| 来源: 网络整理| 查看: 265

1.Demo交互界面如下

企业微信截图_20230308090824.png

2.二维比较模式

(1)2D比较(模式25)

语法:HW_PSWITCH2(25,opnum,opstate,maxerr,num,tablepos)mode 25:二维的比较模式;opnum:对应的输出口;

opstate:第一个比较点的输出状态;

maxerr:比较位置每个轴左右的脉冲偏差,进入偏差范围后开始比较,此参数不能写0;

num:table里面存储的比较点坐标个数;

tablepos:第一个比较点坐标所在table编号。

说明:比较点写在TABLE中,两个连续的TABLE数据组成一个2D坐标,每到达一个比较位置OP反转一次。图中蓝色段表示OP开启,各类常用插补运动均支持比较,比较点坐标一定的要准确,否则会影响后面点的比较。

企业微信截图_20230308090840.png

该模式主要功能为,碰到设置好的二维比较点之后,输出口电平反转。

该模式使用时需要指定高速输出口,将首个比较点的输出状态、比较轴设置好之后,再设置比较点(即设置table寄存器,点数量等),设置比较点脉冲最大误差等参数后,启动比较。紧接着驱动轴运动即可。脉冲偏差说明:2D模式下设置XY坐标需要准确,轴运动不到准确的TABLE比较点时将无法触发,3D模式同理。故多维比较模式引入一个特殊参数maxerr位置范围偏差,左右范围均有效,即实际位置坐标点与TABLE的比较点的差值在maxerr范围内便有效,触发时刻为当前位置进入比较点的触发范围内便触发比较,比较范围示意图如下。

企业微信截图_20230308090852.png

注意:maxerr的单位为脉冲数的偏差,不是距离的偏差。如下图所示,设置高速比较输出口为0,首个比较点的输出状态为1,比较轴为0,1;设置两个比较点,比较点坐标分别为:(100,50),(160,80)。即当轴运动到点(100,50)和点(160,80),误差范围在±50个脉冲左右的范围时,都会触发电平变化。

企业微信截图_20230308090905.png

示波器波形如图所示:在坐标(100,50)时输出为1,直到坐标(160,80)的时候恢复为0。企业微信截图_20230308090915.png(2)2D比较(模式26)

语法:HW_PSWITCH2(26,opnum,opstate,maxerr,num,tablepos,[ophwtimeus,ophwtimes,hwcyctimeus])

mode 26:二维的比较模式;opnum:对应的输出口;opstate:第一个比较点的输出状态;maxerr:比较位置每个轴左右的脉冲偏差,进入偏差范围后开始比较,此参数不能写0;num:table里面存储的比较点坐标个数;tablepos:第一个比较点坐标所在table编号;* 以下参数和HW_TIMER二选一,HW_TIMER单独写可以动态调整参数 *ophwtimeus:脉冲时间;ophwtimes:脉冲个数;hwcyctimeus:脉冲周期。说明:比较点写在TABLE中,两个连续的TABLE数据组成一个2D坐标,每到达一个比较位置触发OP,每个比较点OP反转的次数和反转周期由HW_TIMER设置;到达下一个TABLE位置,OP再次触发。类似模式7和模式36。企业微信截图_20230308090927.png该模式主要功能为,碰到设置好的二维比较点之后,输出口输出一断设置好的定时脉冲。该模式使用时,需要指定高速输出口,将首个比较点的输出状态、比较轴设置好之后,再设置比较点(即设置table寄存器,点数量等),设置好比较点之后再设置脉冲有效时间、脉冲周期时间,以及脉冲个数(重复次数),设置比较点的脉冲最大误差等参数后,启动比较。紧接着驱动轴运动即可。如下图所示,设置高速比较输出口为0,首个比较点的输出状态为1,比较轴为0,1;设置两个比较点,比较点坐标分别为:(100,100),(200,200)。即当轴运动到点(100,100),点(200,200),误差范围在±10个脉冲左右的范围时,都会触发两个周期为60ms,脉冲有效时间为20ms的脉冲。企业微信截图_20230308090938.png示波器波形如图所示:在坐标(100,100),(200,200)的时候都会触发两个周期为60ms,脉冲有效时间为20ms的脉冲。企业微信截图_20230308090949.png

3.三维比较模式

(1)3D比较(模式35)

语法:HW_PSWITCH2(35,opnum,opstate,maxerr,num,tablepos)

mode 35:三维的比较模式;opnum:对应的输出口;opstate:第一个比较点的输出状态;maxerr:比较位置每个轴左右的脉冲偏差,进入偏差范围后开始比较,此参数不能写0;num:table里面存储的比较点坐标个数;tablepos:第一个比较点坐标所在table编号;说明:比较点写在TABLE中,三个连续的TABLE数据组成一个3D坐标,每到达一个比较位置触发OP,每个比较点OP反转的次数和反转周期由HW_TIMER设置;到达下一个TABLE位置,OP再次触发。类似模式26和模式7。企业微信截图_20230308091005.png

该模式主要功能为,碰到设置好的三维比较点之后,输出口电平反转。

该模式使用时需要指定高速输出口,将首个比较点的输出状态、比较轴设置好之后,再设置比较点(即设置table寄存器,点数量等),设置比较点的脉冲最大误差等参数后,启动比较。紧接着驱动轴运动即可。如下图所示,设置高速比较输出口为0,首个比较点的输出状态为1,比较轴为0,1,2;设置4个比较点,比较点坐标分别为:(80,40,20),(160,80,40),(240,120,60),(320,160,80)。即当轴运动到点(80,40,20),(160,80,40),(240,120,60),(320,160,80),误差范围在±10个脉冲左右的范围时,都会触发电平变化。

企业微信截图_20230308091016.png

示波器波形如图所示:在坐标(80,40,20),(160,80,40),(240,120,60),(320,160,80)时会发生电平变化。

企业微信截图_20230308091027.png

核心程序示例:

/*参数: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; }

(2)3D比较(模式36)

语法:HW_PSWITCH2(36,opnum,opstate,maxerr,num,tablepos, [ophwtimeus,ophwtimes,hwcyctimeus])mode 36:三维的比较模式;opnum:对应的输出口;opstate:第一个比较点的输出状态;maxerr:比较位置每个轴左右的脉冲偏差,进入偏差范围后开始比较,此参数不能写0;num:table里面存储的比较点坐标个数;tablepos:第一个比较点坐标所在table编号;* 以下参数和HW_TIMER二选一,HW_TIMER单独写可以动态调整参数 *ophwtimeus:脉冲时间;ophwtimes:脉冲个数;hwcyctimeus:脉冲周期。

企业微信截图_20230308091038.png

该模式主要功能为,碰到设置好的三维比较点之后,输出口输出一断设置好的定时脉冲。该模式使用时,需要指定高速输出口,将首个比较点的输出状态、比较轴设置好之后,再设置比较点(即设置table寄存器,点数量等),设置好比较点之后再设置脉冲有效时间,脉冲周期时间,以及脉冲个数(重复次数),设置比较点的脉冲最大误差等参数后,启动比较。紧接着驱动轴运动即可。如下图所示,设置高速比较输出口为0,首个比较点的输出状态为1,比较轴为0,1,2;设置4个比较点,比较点坐标分别为:(80,40,20),(160,80,40),(240,120,60),(320,160,80)。即当轴运动到点(80,40,20),(160,80,40),(240,120,60),(320,160,80),误差范围在±10个脉冲左右的范围时,都会触发电平变化。都会触发两个周期为40ms,脉冲有效时间为20ms的脉冲。

企业微信截图_20230308091051.png

示波器波形如图所示:在坐标(80,40,20),(160,80,40),(240,120,60),(320,160,80)时会触发两个周期为40ms,脉冲有效时间为20ms的脉冲。

企业微信截图_20230308091103.png

核心程序示例:/*参数: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; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3