临漳专业做网站wordpress 投稿者插件
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:28
当前位置: 首页 > news >正文
临漳专业做网站,wordpress 投稿者插件,南通网站建设优化公司,实体店会员卡管理系统本文导读
前面两节课程我们介绍了怎么建立Delta并联机械手的正逆解以及如何通过视觉进行匹配定位。本节课程给大家分享如何通过C#语言开发正运动Delta并联机械手传送带同步的视觉分拣。
VPLC711硬件介绍
VPLC711是正运动推出的一款基于x86平台和Windows操作系统的高性能机器…本文导读
前面两节课程我们介绍了怎么建立Delta并联机械手的正逆解以及如何通过视觉进行匹配定位。本节课程给大家分享如何通过C#语言开发正运动Delta并联机械手传送带同步的视觉分拣。
VPLC711硬件介绍
VPLC711是正运动推出的一款基于x86平台和Windows操作系统的高性能机器视觉EtherCAT运动控制器具备强大的运算能力和灵活性。它具有出色的实时性能和多路高速硬件输入与多路高速PSO输出能够精准控制多轴同步运动并与外部设备实现多协议的高速通信。 VPLC711支持多种硬件接口和通信协议方便与其他设备的连接和集成。除此之外VPLC711还具备视觉处理功能能够实时处理图像数据实现视觉检测、测量和定位等应用。 VPLC711内置Windows运动控制实时内核MotionRT7形成一种开放式IPC形态实时软控制器/软PLC为用户提供灵活集成的运动控制视觉一体化解决方案。 VPLC711硬件参数
1.采用x86高性能CPUEtherCAT可支持1ms 64轴同步运行
2.板载RS232RS485EtherNet5EtherCATUSB3.04硬件接口
3.板载20DI其中4个高速色标锁存2组高速单端编码器
4.板载20DO其中4个高速单端脉冲轴4组高速PWM
5.支持DVI-DHDMI显示支持双网口不同IP设置。
想要了解更多关于VPLC711的详情介绍可以点击“x86平台实时Windows机器视觉EtherCAT运动控制器VPLC711”查看。
一、C#语言进行Delta并联机械手的开发之运动库和视觉库的添加
1.在VS2010菜单“文件”→“新建”→“项目”启动创建项目向导。 2.选择开发语言为“Visual C#”和.NET Framework 4以及Windows窗体应用程序。 3.找到厂家提供的光盘资料里面的C#函数库路径如下32位库为例。
1进入厂商提供的光盘资料找到“04PC函数”文件夹并点击进入。 2选择“函数库2.1”文件夹。 3选择“Windows平台”文件夹。 4根据需要选择对应的函数库这里选择32位库。 5解压C#压缩包,里面有C#对应的函数库。 6函数库具体路径如下。 4.将厂商提供的C#库文件以及相关文件复制到新建的项目中注意这里面的PC函数库默认提供的是运动库如果使用视觉功能还需要获取视觉库视觉库可以找厂商的相关销售或技术人员获取。 1将Zmcaux.cs运动库和Zvision.cs视觉库文件复制到新建的项目里面中。 2将zauxdll.dll、zmotion.dll和zvision.dll文件放入bin\debug文件夹中。 5.用vs打开新建的项目文件在右边的解决方案资源管理器中点击显示所有文件然后鼠标右击Zmcaux.cs与 Zvision.cs文件点击包括在项目中。 6.双击Form1.cs里面的Form1出现代码编辑界面在文件开头写入using cszmcauxusing ZVision并声明控制器句柄g_handle。 二、PC函数介绍
1.链接控制器获取链接句柄。 2.皮带同步指令。
三、Basic脚本快速验证指令用法
1.编写Basic测试脚本进行MoveSync指令的用法测试。
背景假设有一对对射型的光电传感器固定在流水线的两端来实时检测流水线上的产品到位情况 MOVESYNC指令参数填写说明 syncposition物体到感应点时皮带轴的位置需要通过编码器锁存把产品的对应位置记录下来。 pos1:跟随轴1原点到光电传感器感应点的位置对于每个产品都是固定的。
GLOBAL CONST BeltAxis4 皮带轴是轴4
GLOBAL CONST FollowAxis10 跟随轴1是轴0
GLOBAL CONST InducPos130 跟随轴1原点到光电传感器感应点的位置
GLOBAL CONST StandbyPos150跟随轴1的待机位
GLOBAL CONST EmptyPos1400 跟随轴1的放料位
停止所有轴
RAPIDSTOP(2)
WAIT IDLE
初始化相关轴的轴参数
BASE(FollowAxis1, BeltAxis)
ATYPE 1,1
UNITS 1000,1000
SPEED 50,100
DPOS 0,0
触发示波器采集波形
TRIGGER
DELAY(1000)
跟随轴先运动到待机位
BASE(FollowAxis1)
MOVEABS(StandbyPos1)
皮带轴开始运动
VMOVE(1) AXIS(BeltAxis)
假设皮带运动到200的位置时有一个产品被检测到
BASE(FollowAxis1)
Wait UNTIL MPOS(BeltAxis) 200
MOVESYNC(0, 2000, 200, BeltAxis, InducPos1) 跟随轴加速同步段该指令执行完后将同步上产品
MOVE_OP(0, ON) 同步上后打开真空吸
MOVESYNC(0, 1000, 200, BeltAxis, InducPos1) 继续同步1s
MOVESYNC(-1, 0, 0, -1, EmptyPos1) 走到放料位置
MOVE_OP(0, OFF) 到放料位后关闭真空吸 2.通过RTSys软件的示波器观察波形分析同步过程。 根据示波器的数据分析
1、产品刚刚被检测到时皮带的位置是200跟随轴的位置是50。
2、跟随轴追上产品并保持速度和皮带轴同步时皮带的位置是400跟随轴1的位置是230。
3、由1和2可知产品在同步过程中前进了200400-200。
4、因为跟随轴1原点到光电传感器感应点的位置InducPos1我们给的数据是30所以在跟随轴1和皮带平行的情况下皮带带着产品往前跑了200后此时此刻跟随轴1原点到光产品的实际距离是23020030。
5、那么第4点计算的结果和第2的同步完成后跟随轴1的实际位置是一致的所以流水线同步指令测试正常。
四、C#例程建设之视觉流水线同步分拣
1.皮带同步指令关键参数详细介绍。
ZAux_Direct_MoveSyncZMC_HANDLE handlefloat imodeint synctimefloat syncpositionint syncaxisint imaxaxisesint *piAxislistfloat *pfDisancelist.
1参数imode
imode 0angle表示同步模式如果皮带和X轴平行填0即可。
imode -1表示结束同步模式,可运动到指定的绝对位置一般同步上抓取完物料后运动到放料位使用。
2参数synctime: 同步时间ms单位.运动在指定时间内完成完成时轴跟皮带轴上物体保持速度一致。0表示根据运动轴的速度加速度来估计同步时间。
3参数syncposition: 视觉或传感器识别到皮带是的产品时皮带此时此刻的位置信息MPOS。
4参数pfDisancelist如果是视觉定位产品时这个参数直接填视觉识别到产品时产品的世界坐标。
如果用光电传感器检测产品时这个参数是固定的在传感器刚刚好感应到产品时产品当前位置的绝对坐标。可以在此时此刻手动运动从轴来定位到产品处来获取位置信息。
2.视觉流水线同步分拣流程图。 1视觉匹配定位代码详情。 csharp
/************************************************************************************
任务编号 无
函数功能 视觉定位产品
Input 无
Output 无
返回值 子线程—进行视觉定位
***********************************************************************************/
public void RunSubTaskVisua()
{int TempArrid 0;float TempVar 0;WriteLog(视觉功能正常启动);while (SysRunFlag 0){//暂停按钮没有按下时while (SysRunFlag 1) {//采集图像VisuaOper.CameAcquisition();//进行模板匹配RTDisplay.Image VisuaOper.ShapeFind();if (MainWindows.BeltMpos ! 0)//如果采集照片的时候皮带编码器位置获取正常{//操作MoveSyncBuff数据先加锁while (true){if (MainWindows.SetMoveSyncFlag 0){MainWindows.SetMoveSyncFlag 1;break;}}//找到可以存储数据的数组起始下标int ArrId 0;for (int i 0; i 50; i){if (MainWindows.MoveSyncBuff[i, 0] 0){ArrId i;break;}}//开始存储数据 一次匹配最多10个结果TempArrid ArrId;for (int i 0; i 10; i){//如果分数满足要求if (MainWindows.VisionRst[i, 0] MainWindows.VisionScore){int j;//如果有重复的目标需要剔除for (j 0; j TempArrid; j){TempVar MainWindows.VisionRst[i, 1] - MainWindows.BeltMpos - MainWindows.MoveSyncBuff[j, 1] MainWindows.MoveSyncBuff[j, 4];if (((TempVar) 10) (TempVar -10)){j -10;break;}}if (j 0){MainWindows.MoveSyncBuff[ArrId, 0] 1;MainWindows.MoveSyncBuff[ArrId, 1] MainWindows.VisionRst[i, 1]; //存储匹配结果的X坐标MainWindows.MoveSyncBuff[ArrId, 2] MainWindows.VisionRst[i, 2]; //存储匹配结果的Y坐标MainWindows.MoveSyncBuff[ArrId, 3] MainWindows.VisionRst[i, 3]; //存储匹配结果的角度偏移MainWindows.MoveSyncBuff[ArrId, 4] MainWindows.BeltMpos; //存储匹配到产品时传送带的位置信息ArrId ArrId 1;IdentiNum.Text (Convert.ToInt32(IdentiNum.Text) 1).ToString();WriteLog(视觉目标: ( MainWindows.VisionRst[i, 1].ToString(0,0) , MainWindows.VisionRst[i, 2].ToString(0,0) ));}}//分数清空MainWindows.VisionRst[i, 0] 0;}//解锁MainWindows.SetMoveSyncFlag 0;}}Thread.Sleep(100);}
}2流水线同步分拣代码详情。
/*********************************************************************************
任务编号 无
函数功能 流水线同步分拣
Input 无
Output 无
返回值 无
**************************************************************************************/
public void RunSubTaskMotion()
{float[] MoveSyncTemp new float[5];float TempMpos 0;while (SysRunFlag 0){while (SysRunFlag 1){if (MainWindows.MoveSyncBuff[0, 0] 1){MainWindows.ZauxErr zmcaux.ZAux_Direct_GetMpos(MainWindows.g_Handle, MainWindows.ConveyorAxisId, ref TempMpos);//如果编码器位置抓取正确if (0 MainWindows.ZauxErr) {//编码器往前运动了多少TempMpos TempMpos - MainWindows.MoveSyncBuff[0, 4];//判断是否处于同步起始区if (((MainWindows.MoveSyncBuff[0, 1] TempMpos) MainWindows.SyncReX[0]) ((MainWindows.MoveSyncBuff[0, 1] TempMpos) MainWindows.SyncReX[1])){WriteLog(开始同步抓取);//取一组数据MoveSyncTemp[0] MainWindows.MoveSyncBuff[0, 1] ; //XMoveSyncTemp[1] MainWindows.MoveSyncBuff[0, 2] ; //Y MoveSyncTemp[2] MainWindows.GetBinHigt; //取料高度MoveSyncTemp[3] MainWindows.MoveSyncBuff[0, 3]; //AanleMoveSyncTemp[4] MainWindows.MoveSyncBuff[0, 4]; //Mpos//下发同步运动的指令//0、复位输出口zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 0);//1、先同步上传送带zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 0, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);//2、同步一段时间(关节轴有滞后) 50mszmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 50, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);//3、打开真空吸嘴zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 1);//4、同步一段时间 1500mszmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 700, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);//5、同步段把Z轴提升到安全高度选择轴到放料角度MoveSyncTemp[2] MainWindows.StandPos[2]; //取料高度zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 100, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);//4、解除同步去放料点MoveSyncTemp[0] MainWindows.EmptPos[0]; //XMoveSyncTemp[1] MainWindows.EmptPos[1]; //Y MoveSyncTemp[2] MainWindows.EmptPos[2]; //放料高度MoveSyncTemp[3] MainWindows.EmptPos[3]; //Aanlezmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, -1, 0, 0, -1, 4, MainWindows.gVAxisList, MoveSyncTemp);//5、关闭真空吸嘴放料,Delay100mszmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 0);zmcaux.ZAux_Direct_MoveDelay(MainWindows.g_Handle, MainWindows.gVAxisList[0], 100);//6、去安全高度MoveSyncTemp[0] MainWindows.EmptPos[0]; //XMoveSyncTemp[1] MainWindows.EmptPos[1]; //Y MoveSyncTemp[2] MainWindows.StandPos[2]; //放料高度MoveSyncTemp[3] MainWindows.EmptPos[3]; //Aanlezmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MoveSyncTemp);//操作MoveSyncBuff数据先加锁while (true){if (MainWindows.SetMoveSyncFlag 0){MainWindows.SetMoveSyncFlag 1;break;}}//视觉匹配缓冲区数据往前覆盖for (int k 0; k 49; k){MainWindows.MoveSyncBuff[k, 0] MainWindows.MoveSyncBuff[k 1, 0];MainWindows.MoveSyncBuff[k, 1] MainWindows.MoveSyncBuff[k 1, 1];MainWindows.MoveSyncBuff[k, 2] MainWindows.MoveSyncBuff[k 1, 2];MainWindows.MoveSyncBuff[k, 3] MainWindows.MoveSyncBuff[k 1, 3];MainWindows.MoveSyncBuff[k, 4] MainWindows.MoveSyncBuff[k 1, 4];}//解锁MainWindows.SetMoveSyncFlag 0;//等待输出口打开int TimeOut 10000;TimeOut 100000;//等待轴停止int AxisIdle 0; //轴停止状态while (TimeOut 0){zmcaux.ZAux_Direct_GetIfIdle(MainWindows.g_Handle, MainWindows.gVAxisList[0], ref AxisIdle);if (AxisIdle (-1)){break;}Thread.Sleep(10);TimeOut TimeOut - 10;}if (TimeOut 0){//超时要报错程序要停止WriteLog(等待轴停止超时);//Thread.Sleep(100);SysRunFlag 0;break;}SortNum.Text (Convert.ToInt32(SortNum.Text) 1).ToString();WriteLog(放料成功);//退出while 单次循环continue;}else if ((MainWindows.MoveSyncBuff[0, 1] TempMpos) MainWindows.SyncReX[1]){//操作MoveSyncBuff数据先加锁while (true){if (MainWindows.SetMoveSyncFlag 0){MainWindows.SetMoveSyncFlag 1;break;}}//视觉匹配缓冲区数据往前覆盖for (int k 0; k 49; k){MainWindows.MoveSyncBuff[k, 0] MainWindows.MoveSyncBuff[k 1, 0];MainWindows.MoveSyncBuff[k, 1] MainWindows.MoveSyncBuff[k 1, 1];MainWindows.MoveSyncBuff[k, 2] MainWindows.MoveSyncBuff[k 1, 2];MainWindows.MoveSyncBuff[k, 3] MainWindows.MoveSyncBuff[k 1, 3];MainWindows.MoveSyncBuff[k, 4] MainWindows.MoveSyncBuff[k 1, 4];}//解锁MainWindows.SetMoveSyncFlag 0;//如果视觉匹配缓冲区没有数据了if (MainWindows.MoveSyncBuff[0, 0] 0){//Delta去待机位zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MainWindows.StandPos);WriteLog(去待机位);}}}}else{//Delta去待机位zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MainWindows.StandPos);}Thread.Sleep(50);}//停止传送带zmcaux.ZAux_Direct_Single_Cancel(MainWindows.g_Handle, MainWindows.ConveyorAxisId, 2);}
}本次正运动技术C#之Delta并联机械手的视觉同步分拣就分享到这里。
更多精彩内容请关注“正运动小助手”公众号需要相关开发环境与例程代码请咨询正运动技术销售工程师。
本文由正运动技术原创欢迎大家转载共同学习一起提高中国智能制造水平。文章版权归正运动技术所有如有转载请注明文章来源。
- 上一篇: 临漳网站制作wordpress 文章不显示图片
- 下一篇: 临淄建设局网站php网站设计人员
相关文章
-
临漳网站制作wordpress 文章不显示图片
临漳网站制作wordpress 文章不显示图片
- 技术栈
- 2026年03月21日
-
临漳+网站建设做淘宝网站用什么软件有哪些内容
临漳+网站建设做淘宝网站用什么软件有哪些内容
- 技术栈
- 2026年03月21日
-
临沂做网站建设找哪家事业单位建设网站
临沂做网站建设找哪家事业单位建设网站
- 技术栈
- 2026年03月21日
-
临淄建设局网站php网站设计人员
临淄建设局网站php网站设计人员
- 技术栈
- 2026年03月21日
-
临淄网站建设crm客户管理系统设计
临淄网站建设crm客户管理系统设计
- 技术栈
- 2026年03月21日
-
灵宝市建设局网站沈阳大东区做网站公司
灵宝市建设局网站沈阳大东区做网站公司
- 技术栈
- 2026年03月21日


