查看: 7559|回复: 25
收起左侧

6.电子凸轮入门应用关键点修改的几种方法

邀请回答

马上注册,享受更多特权

您需要 登录 才可以下载或查看,没有帐号?立即注册   

x
点击访问:电子凸轮入门应用基础教程汇总贴

1.课程目标及目录

image.png

这节课内容应该算是整个电子凸轮入门应用中最最最重要的课程了。这节课和视频的第7讲讲的实际上是一件事情,只是由于课程时长太长所以将视频拆分成2节课进行讲解。而文字版的教案呢,就放到一篇帖子里写清楚

本节课程的学习目标:
1.理解为啥要修改电子凸轮的关键点
2.了解电子凸轮修改的几种常见方法
3.实现电子凸轮关键点的动态修改

本节课程内容,相当相当相当重要,希望大家能自己完成凸轮表关键点的修改仿真调试。
image.png

2.为啥要修改凸轮关键点

原因是:为了满足客户的设备工艺需求。我们来看看下面这个案例:



上面这个视频呢,是我在冷切制袋机上的一个应用。客户端需要的是切圆角的工艺(行业内称R角)
image.png
行业内,圆角方案有2种:CCD单切视觉打圆角 和 双切移刀打圆角。
CCD摄像头比较贵,高端机型才用。双切移刀方案是常规方案,方案需要切刀动2下,第二次需要移刀动作然后再切再复原。
image.png

第一周期不动,第二周期移刀移过去再移回来,而且要求移刀移动的距离可设,可修改,那么这里就需要更改凸轮曲线从轴(移刀轴的)运动距离了,1mm,2mm,3mm等

image.png

我在例程中详细的写了7种方式的程序:

dChangeMode                :        DINT                := 1;        //= 1.切换凸轮表静态切换                                 = 2.切换凸轮表,末点切换
                                                                                //= 3.凸轮末点修改关键点,下一周期生效                = 4.凸轮修改关键点,当前周期生效
                                                                                //= 5.修改关键点个数                                        = 6.修改首末关键点点位置,重新触发MC_TableSelect
                                                                                //= 7.使用程序新建电子凸轮        

3.凸轮曲线修改原则

image.png

什么是好的凸轮曲线?
答:适合的凸轮曲线就是好的凸轮曲线。
什么样算“适合”?
(1)满足精度要求的
(2)满足效率要求
(3)满足工艺功能要求
(4)噪音小,运行流畅的

引用自“工控小学生”

image.png

4.切换凸轮表的方法

1.首先我们需要明确我们要实现的功能
2.设置主轴和从轴参数,主轴和从轴使能
3.新建多个工艺需求电子凸轮表
4.凸轮曲线的绑定(MC_CamTableSelect )
5.电子凸轮表单周期解析(MC_CamIn)
6.给主轴一个速度匀速运动。
7.根据工艺需求,程序中切换电子凸轮表
8.需要重新触发MC_CamTableSelect ,不需要触发MC_CamIn

image.png

5.修改凸轮关键点

5.1凸轮表的数据结构

image.png

5.2修改凸轮表数组的方法

image.png
我们一般的修改方式两种:
A.凸轮末点信号触发,这个扫描周期进行电子凸轮关键点写入;

B.使用IF语句,修改时不修改当前运行段两端的凸轮关键点,讲解如下:
运行中修改(4个关键点)
1.如果当前运行在1和2关键点之间段,则可以修改第3个关键点
2.如果当前运行在3和4关键点之间段,则可以修改第2个关键点

修改首末关键点的方法:
修改凸轮表数组最后一个关键点的数据,然后再触发MC_CamTableSelect

CASE语句的代码片段如下

        3://= 3,凸轮末点修改关键点,下一周期生效
                xCamTable                                := Cam_1mm;
                IF FB_CamIn.EndOfProfile THEN
                        //----第一个关键点-------------------------------
                        Cam_1mm_A[0].dX                :=                 0;
                        Cam_1mm_A[0].dY                :=                 0;        
                        Cam_1mm_A[0].dV                :=                 0;                

                        //----第二个关键点-------------------------------
                        Cam_1mm_A[1].dX                :=                 360;
                        Cam_1mm_A[1].dY                :=                 0;        
                        Cam_1mm_A[1].dV                :=                 0;        

                        //----第三个关键点-------------------------------
                        Cam_1mm_A[2].dX                :=                 440;
                        Cam_1mm_A[2].dY                :=                 fDistance;        
                        Cam_1mm_A[2].dV                :=                 0;        

                        //----第四关键点---------------------------------
                        Cam_1mm_A[3].dX                :=                 640;
                        Cam_1mm_A[3].dY                :=                 fDistance;        
                        Cam_1mm_A[3].dV                :=                 0;        

                        //----第五关键点---------------------------------
                        Cam_1mm_A[4].dX                :=                 720;
                        Cam_1mm_A[4].dY                :=                 0;        
                        Cam_1mm_A[4].dV                :=                 0;        
                END_IF        
        4://= 4,当前凸轮周期,非运行段凸轮修改关键点,当前周期生效
                xCamTable                                := Cam_1mm;
                IF (Master.fSetPosition > 360.0) AND (Master.fSetPosition < 440.0) THEN
                        //----当前运行在,第2,3关键点,可以修改第4个关键点数据-------------------
                        Cam_1mm_A[3].dX                :=                 640;
                        Cam_1mm_A[3].dY                :=                 fDistance;        
                        Cam_1mm_A[3].dV                :=                 0;        
                ELSIF (Master.fSetPosition < 360.0) OR (Master.fSetPosition > 640.0) THEN
                        Cam_1mm_A[2].dX                :=                 440;
                        Cam_1mm_A[2].dY                :=                 fDistance;        
                        Cam_1mm_A[2].dV                :=                 0;        
                END_IF        
        5:        //= 5.凸轮末点修改 凸轮关键点个数,不修改首末关键点,不需要重新触发MC_CamTableSelect
                xCamTable                                := Cam1;
                IF FB_CamIn.EndOfProfile AND bTest THEN
                        Cam1.nElements        := 2;

                        //---设置凸轮关键点个数为2-----------------
                        Cam1_A[0].dX                := 0;
                        Cam1_A[0].dY                := 0;
                        Cam1_A[0].dV                := 0;
                        Cam1_A[0].dA                := 0;        

                        Cam1_A[1].dX                := 360;
                        Cam1_A[1].dY                := 360;
                        Cam1_A[1].dV                := 0;
                        Cam1_A[1].dA                := 0;
                ELSIF FB_CamIn.EndOfProfile AND NOT bTest THEN
                        //---设置凸轮关键点个数为4-----------------
                        Cam1.nElements                := 4;

                        Cam1_A[0].dX                := 0;
                        Cam1_A[0].dY                := 0;
                        Cam1_A[0].dV                := 0;
                        Cam1_A[0].dA                := 0;        

                        Cam1_A[1].dX                := 120;
                        Cam1_A[1].dY                := 120;
                        Cam1_A[1].dV                := 1;
                        Cam1_A[1].dA                := 0;        

                        Cam1_A[2].dX                := 240;
                        Cam1_A[2].dY                := 240;
                        Cam1_A[2].dV                := 1;
                        Cam1_A[2].dA                := 0;        

                        Cam1_A[3].dX                := 360;
                        Cam1_A[3].dY                := 360;
                        Cam1_A[3].dV                := 0;
                        Cam1_A[3].dA                := 0;                
                END_IF        

        6://= 6,修改首末关键点位置需要重新触发MC_TableSelect
                xCamTable                                        := Cam1;
                bEndOk                                                := FALSE;
                //---5.改首末关键点的位置,需要重新触发MC_CamTableSelect,否则速度突变
                IF FB_CamIn.EndOfProfile AND bEndPoint THEN
                        Cam1_A[3].dX                        := 360;
                        Cam1_A[3].dY                        := 180;
                        Cam1_A[3].dV                        := 0;
                        Cam1_A[3].dA                        := 0;

                        //---重新触发标志位-----------------------------------------------------------------
                        bEndOk                := TRUE;        
                END_IF

6.使用程序新建电子凸轮

image.png

image.png

        7://使用程序新建电子凸轮表
        IF bCamInit THEN
                //----程序新建凸轮表对应的关键点的数据结构,我们新建4个关键点
                axCamPointXYVA[0].dX        :=        0;
                axCamPointXYVA[0].dY        :=        0;
                axCamPointXYVA[0].dV        :=        0;
                axCamPointXYVA[0].dA        :=        0;        

                axCamPointXYVA[1].dX        :=        120;
                axCamPointXYVA[1].dY        :=        120;
                axCamPointXYVA[1].dV        :=        1;
                axCamPointXYVA[1].dA        :=        0;        

                axCamPointXYVA[2].dX        :=        240;
                axCamPointXYVA[2].dY        :=        240;
                axCamPointXYVA[2].dV        :=        1;
                axCamPointXYVA[2].dA        :=        0;        

                axCamPointXYVA[3].dX        :=        360;
                axCamPointXYVA[3].dY        :=        360;
                axCamPointXYVA[3].dV        :=        0;
                axCamPointXYVA[3].dA        :=        0;        
        END_IF

        //----程序新建一个凸轮表-----------------------------
        MC_CamTableByHand(
                wCamStructID:=                                 ,                 //此功能用于检查输入的数据结构是否为 MC_CAM_REF类型的。
                byType:=                                         3,                 //1 一维数组 2 二维数组 3多项式插值xyva
                byVarType:=                                 ,                 //只在 byType=1 或者 byType=2时使用 1: INT 2: UINT 3: DINT 4: UDINT 5: REAL 6: LREAL 
                xStart:=                                         0,                 //凸轮表主轴起点位置
                xEnd:=                                                 360,         //主轴末点位置
                nElements:=                                 4,                 //关键点的个数
                nTappets:=                                         ,                 //挺杆开关动作序号
                pce:=                                                 ADR(axCamPointXYVA),                 //关键点的数组地址
                pt:=                                                 , 
                dwTappetActiveBits:=                 , 
                strCAMName:=                                 'MC_CamTableByHand', 
                byInterpolationQuality:=         , 
                byCompatibilityMode:=                 , 
                bChangedOnline:=                         , 
                xPartofLM:=                                 );                //是否是通过后台软件创建,我们是程序手动创建的,所以不填就好了,这个是用来管理的

        //----程序中动态修改关键点
        IF FB_CamIn.EndOfProfile AND bCamModifyByHand THEN
                //
                axCamPointXYVA[0].dX        := 0;
                axCamPointXYVA[0].dY        := 0;
                axCamPointXYVA[0].dV        := 0;
                axCamPointXYVA[0].dA        := 0;        

                axCamPointXYVA[1].dX        := 120;
                axCamPointXYVA[1].dY        := 150;
                axCamPointXYVA[1].dV        := 1;
                axCamPointXYVA[1].dA        := 0;        

                axCamPointXYVA[2].dX        := 240;
                axCamPointXYVA[2].dY        := 220;
                axCamPointXYVA[2].dV        := 1;
                axCamPointXYVA[2].dA        := 0;        

                axCamPointXYVA[3].dX        := 360;
                axCamPointXYVA[3].dY        := 360;
                axCamPointXYVA[3].dV        := 0;
                axCamPointXYVA[3].dA        := 0;                
        END_IF

        xCamTable                                        := MC_CamTableByHand;

7.练习题

image.png

image.png



回复 邀请回答送花

使用道具 举报

dxzheng 2020-5-26 19:11:18 | 显示全部楼层
好帖子,谢谢分享
回复 送花

使用道具 举报

向~ 2020-5-28 19:19:16 | 显示全部楼层
朱工你好  请问下追色标的时候  计算出来色标超前还是滞后的偏差  是怎么计算出来的
回复 送花

使用道具 举报

zhibo_1001 2020-6-8 14:16:30 | 显示全部楼层
朱工,您好,针对您上面所发的例程,我在测试的过程中遇到一个问题,修改末关键点后重新触发MC_TableSelect时,块报错,修改首末点时还需要做其他的设置吗?
回复 送花

使用道具 举报

zhibo_1001 2020-6-8 14:20:15 | 显示全部楼层
本帖最后由 zhibo_1001 于 2020-6-10 11:49 编辑

朱工,您好!针对您发的例程,我在修改凸轮末点后重新触发MC_TableSelect时,块报错,是什么原因?还有参数需要设定吗?
44e2338b67d8cc457cbcf1b9b72f1df.png
回复 送花

使用道具 举报

yyc99888 2020-6-8 19:03:52 | 显示全部楼层
不错,讲的非常好
回复 送花

使用道具 举报

向~ 2020-6-11 09:30:24 | 显示全部楼层
IF (Master.fSetPosition > 360.0) AND (Master.fSetPosition < 440.0)      整体分析是凸轮运行在那几个关键点的区间  请问下&gt,和&lt 是什么意思
回复 送花

使用道具 举报

不错,学习了
回复 送花

使用道具 举报

Julius_wen 2020-6-11 20:53:49 | 显示全部楼层
向~ 发表于 2020-6-11 09:30
IF (Master.fSetPosition > 360.0) AND (Master.fSetPosition < 440.0)      整体分析是凸轮运行在那几个关 ...

额,是大  > 和 < 的意思(大于 小于)不知道为啥贴代码的时候,成&gt了
回复 送花

使用道具 举报

Julius_wen 2020-6-11 20:57:51 | 显示全部楼层
zhibo_1001 发表于 2020-6-8 14:20
朱工,您好!针对您发的例程,我在修改凸轮末点后重新触发MC_TableSelect时,块报错,是什么原因?还有参数 ...

是不是中间点长度 大于末点 长度了
回复 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册   

本版积分规则

有技术问题,就上汇川技术社区

INOVANCE汇川技术 公众号

汇川控制技术 公众号

全国服务热线:8:30-17:30

4000-300124

苏州地址:江苏省苏州市吴中区越溪友翔路16号

深圳地址:深圳市宝安区留仙二路6号鸿荣源鸿威工业区E栋

Copyright © 2003-2100 汇川技术 Powered by Discuz! X3.4 ( 苏ICP备12002088号 )
快速回复 返回列表 返回顶部