马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
2、如何修改电子凸轮关键点:新建CAM凸轮表系统会自动生成MC_Cam_REF类型的数据结构和SMC_CAMXYVA结构类型的数组,要修改关键点就需要理解者两个数据结构。MC_Cam_REF定义起点、结束点等,SMC_CAMXYVA定义每个关键点的位置、速度等并合成一个数组。 如下图后台工程新建的凸轮表及数据,可以程序中在此基础上直接修改关键点。 如将第2个关键点位置改为(200,200) CAM_A[0].dx:=200; CAM_A[0].dy:=200; file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps1.jpg 2)完全新建一个凸轮表数据: 第一步定义MC_Cam_REF类型的数据结构Cam_Mum、定义SMC_CAMXYVA结构类型的数组Cam_Mum_Arr 第二步给Cam_Mum参数赋值,根据需求设置关键点并给Cam_Mum_Arr参数赋值。 数组Cam_Mum_Arr如何与Cam_Mum关联?取Cam_Mum_Arr首地址赋值给Cam_Mum.pce即可。 VAR Cam_Mum:MC_CAM_REF; Cam_Mum_Arr:ARRAY[0..3] OF SMC_CAMXYVA; END_VAR //设置关键点 Cam_Mum_Arr[0].dX:=0; Cam_Mum_Arr[0].dY:=0; Cam_Mum_Arr[0].dV:=1; Cam_Mum_Arr[0].dA:=0; Cam_Mum_Arr[2].dX:=250; Cam_Mum_Arr[2].dY:=250; Cam_Mum_Arr[2].dV:=1; Cam_Mum_Arr[2].dA:=0; Cam_Mum_Arr[3].dX:=500; Cam_Mum_Arr[3].dY:=500; Cam_Mum_Arr[3].dV:=1; Cam_Mum_Arr[3].dA:=0; //设置凸轮属性 Cam_Mum( wCamStructID:= , byType:= 3, byVarType:= , xStart:= 0, xEnd:= 500, nElements:= 3, nTappets:= , 当没有使用挺杆时,请不要设置挺杆个数,否则会造成运行结果异常! pce:= ADR(Cam_Mum_Arr), pt:= , dwTappetActiveBits:= , strCAMName:= , byInterpolationQuality:= , byCompatibilityMode:= , bChangedOnline:= , xPartofLM:= ); file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps2.jpg 3、凸轮偏移Offset和缩放比例Scaling:CAMIN凸轮指令提供偏移Offset和缩放比例参数Scaling: 主轴MasterOffset, MasterScaling:主轴输入转换的位置是根据以下公式进行的,并且使用转化后的X作为作为凸轮的输出: X = MasterScaling*MasterPosition + MasterOffset 因此,如果主轴的比例大约1,所述凸轮将会运行在一个更高的速率,如果比例值小于1,速率将会随之降低。 从轴SlaveOffset, SlaveScaling:**如果主轴的比例值大约1,电子凸轮将会以高速运行,如果此值小于1,速度值将会随之降低,计算公式: Y = SlaveScaling*CAM( X ) + SlaveOffset 值SlaveScaling > 1 导致凸轮效果的拉伸,从轴的范围将会增加;相应的‘’如果 SlaveScaling < 1 将会导致一个收缩。 PS:从上面的计算公式可知,主从轴运行方向不一致时修改MasterScaling或SlaveScaling设置为负数即可。比如主轴一般位置设置为0~360,如果主轴反向运动将MasterScaling设置为-1,否则从轴不会运动也不会报错。 4、凸轮结束判断:理解凸轮结束点需要理解ENDofprofile(凸轮结束时周期运行输出一个任务周期的脉冲,非周期运行一直输出高电平)何时产生。 ENDofprofile为ON的那个周期PLC还在给伺服最后一段位移。 我们一般用这个信号判断凸轮一个周期运行结束,上升沿使能MC_CAMout指令分离同步,分离动作会在这个周期马上生效,然后从轴处于持续运行模式。就算凸轮结束点的速度设置为0,但是在分离这个周期速度不是为0的,因为还有最后一个周期的位移,然后从轴就会以这个周期位移为速度持续运行,如果不停止会导致位置偏差,所以最好MC_CAMout后用MC_STOP停止,或者用ENDofprofile信号的下两个周期使能MC_CAMout file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps3.jpg file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps4.jpg 5、MC_CAMOUT:1.此功能块将从轴与主轴立刻分离。 2.如果轴没有在synchronized_motion状态,执行该轴会报错(ErrorCode=34,比如经常出现凸轮分离时报34,就有可能是逻辑上多次触发了)。 3.使能凸轮分离后,轴状态为continuous_motion(速度为0也是continuous_motion状态),既如果分离时轴速度不为0,轴会以此时的速度匀速运行,一般与MC_Stop等配合使用。 6、MC_CAMIN:7、CAM非周期运行A.参数Periodic=False为非周期。 如下图,一个凸轮周期结束后EndOfProfile输出为True,如果MC_CamIn的使能条件不为False,EndOfProfile一直输出为True。 file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps5.jpg file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps6.jpg 应注意EndOfProfile为True的第一个周期从轴速度不一定为0,如果用EndOfProfile电平触发MC_CAMout应特别注意,详细请参照4 file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps7.jpg MC_Camout使用后该轴处于continuous_motion状态,如果该状态保持65535个循环周期轴将报错SMC_AXIS_NOT_READY_FOR_MOTION (34),所以建议MC_camout与MC_Stop或MC_Halt一起使用。 B.参数Periodic=False为非周期,凸轮运行完一个周期后从轴还是处于synchronized_motion状态,但是不管主轴是否运行、凸轮结束点速度是否为0,从轴都不会运行(PS如果在参数EndOfProfile为True的第一和二个周期触发MC_CAMout指令会使轴为continuous_motion状态,且速度可能不为0,请参照A部分). CAM 属性周期变化,从轴位置必须是周期值的整数倍。 8、MC_CamTableSelectA. EndOfProfile=false MasterAbsolute=false SlaveAbsolute=false 9、凸轮启动时多从轴多跑一个周期的问题一.问题描述 在将主轴和从轴使能后,再使能电子凸轮指令,此时并未通过运动指令驱动主轴运动,但从轴却会以极高的速度转一个周期。 二.问题分析 1. 电子凸轮功能工作时序(以一个主轴,一个从轴为例) 1)通过使能MC_Power指令,分别将主轴和从轴使能 2)通过使能MC_CamTableSelect指令,选择为主从轴选择凸轮表 3)通过使能MC_CamIn指令,将主从轴按选择的凸轮表,建立起跟随关系 4)对主轴,通过MC_MoveVelocity指令(或者Absolute,Relative),驱动主轴运动。 此时,从轴会跟随运动。 2. 问题出现原因 根据多次实验分析,发现有因为主轴使能后,此时主轴的电机会有微小的抖动,而导致主轴的实际位置可能出现负向的微小偏差。此时,若使能电子凸轮指令,由于用到的电子凸轮是周期性的模式(通常默认设置为360),PLC会认为主轴的负向微小位置是上一个周期的接近结束位置,如-0.1对应359.9。因此,PLC会立即控制从轴高速跟随到主轴359.9对应的从轴位置,即接近一个周期的距离。 其实,上电使能后,主从轴都有可能会出现一个微小的抖动。但通常情况下,凸轮表中,从轴位置是从0开始,因此从轴的微小抖动,虽然在启动凸轮后,也会有一个瞬间的调整过程,但由于抖动极小,因此过程不明显。 MC_CamTableSelect指令有两个关键参数MasterAbsolute和SlaveAbsolute; MC_CamIn指令也有一个同样的关键参数StartMode(取值可以是绝对模式或相对模式)。 file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps8.jpg file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps9.jpg 只有当主轴位置选择绝对模式,即MC_CamTableSelect指令关键参数MasterAbsolute为true时,PLC会按照先前的分析进行计算,导致从轴会多跑一个周期。而如果主轴位置选择的是相对模式,则不会出现该问题。 但是,这样会引申出三个问题: 如果主轴位置要求必须是绝对模式呢? 如果主轴上电使能时没有抖动,但程序控制主轴进行单轴运动一段位置后,再选择凸轮功能,这肯定会导致主轴位置有偏移,而且该偏移量是合理的,那又如何解决? 相反,如果主轴没有抖动或凸轮开始前没有使主轴运动一段距离,而是先使从轴独立运动一段距离,那从轴位置也会有一个偏移量,此时启动凸轮,必然会出现和前面类似的从轴高速调整过程。怎么办? 三.问题解决方法 鉴于前面的分析,该问题核心是要满足上面这三种情况下的正常使用。于是,结合现场应用需求,对凸轮指令的参数进一步分析和实验,得出如下结论: 在AM600的电子凸轮指令中,位置或者叫坐标变换的原理如下: 根据指令MC_CamIn中参数MasterOffset, MasterScaling进行调整: 主轴输入转换的位置是根据以下公式进行的,并且使用转化后的X作为作为凸轮的输出: X = MasterScaling*MasterPosition + MasterOffset 。因此,可以通过MasterOffset参数调整主轴的位置输入量。 SlaveOffset, SlaveScaling: 从轴输出变换的位置是根据以下公式进行的,并且使用转化后的Y作为凸轮中从轴的实际输出:Y = SlaveScaling*CAM( X ) + SlaveOffset 。因此,可以通过参数SlaveOffset调整从轴的位置输出量。 由此可见,不管是由于主轴还是从轴的初始位置偏移量(抖动或正常的运动导致)带来的从轴瞬间高速调整过程问题,解决思路都是通过一定途径,抵消掉主轴或从轴的初始偏移量。 因此,对主从轴分别进行解决: 主轴偏移量导致的问题 当问题是由于主轴的初始偏移量导致时,解决方法有两种: 1)方法1: 将主轴位置模式配置为相对模式 该方法只适用于主轴可以支持相对位置模式的情况。 具体方法是:将MC_CamTableSelect的参数MasterAbsolute的值置为False,即 不使用绝对位置模式。其它参数不变。 注:若主轴只能使用绝对位置模式,则该方法不适用。 2)方法2: 将主轴位置进行反向偏移 该方法只能用于主轴仅支持绝对位置模式的情况。 具体步骤是: 将MC_CamTableSelect的参数MasterAbsolute的值置为True,即主轴使用绝对位置模式。 定义一个LREAL型的变量MasterOffsetAdjust,该变量的初始值为 MasterOffsetAdjust := 0 – AxisMaster.fActPosition; 其中, AxisMaster为主轴变量。 然后,将MasterOffsetAdjust值赋给指令MC_CamIn的输入参数MasterOffset。如下图所示: file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps10.jpg file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps11.jpg 从轴偏移量导致的问题 当问题是由于从轴的初始偏移量导致时,解决方法也有三种: 1)方法1:将从轴位置模式配置为相对模式 该方法只适用于从轴支持相对位置模式的情况。 具体方法是:将MC_CamTableSelect的参数SlaveAbsolute的值置为False,即 不使用绝对位置模式,其它参数不变。 注:若从轴只能使用绝对位置模式,则该方法不适用。 2)方法2:将凸轮启动模式设置为相对模式 具体方法:将MC_CamIn指令的StartMode参数设置为1(相对模式),其他参数不变。 3)方法3 :将从轴位置进行反向偏移 该方法只能用于从轴仅支持绝对位置模式的情况。 具体步骤是: A.将MC_CamTableSelect的参数SlaveAbsolute的值置为True,即从轴使用绝对位置模式。 B.定义一个LREAL型的变量SlaveOffsetAdjust,该变量的初始值为 SlaveOffsetShift := AxisSlave.fActPosition; 其中, AxisSlave为从轴变量。 然后,将SlaveOffsetAdjust值赋给指令MC_CamIn的输入参数SlaveOffset。如下图所示: file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps12.jpg file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps13.jpg 主从轴都有初始的位置偏移 解决方法:将前两种方法进行结合使用 10、如何将编码器接入虚轴:1)轴池,添加设备,选择编码器轴,如下图 file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps14.jpg 轴参数设置:与实轴设置类似,需要注意的是bit width宽度必须与编码器反馈值位数一致,设置过小只能识别编码器设置的低位。 file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps15.jpg 编码器值与编码器轴关联: 将值直接赋值给编码器轴参数diEncoderPosition,di编码器可以是任何需要的变量。注意如果编码器是实际外部输入值需要将参数bVirtual设置为False。 file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps16.jpg 11、修改凸轮表下周期生效的方法第一步:产生凸轮表修改标志位 file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps17.jpg 第二步:根据凸轮周期完成标志位.EndofProfile来重新出发camtable指令 file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps18.jpg file:///C:/Users/95435/AppData/Local/Temp/ksohtml18292/wps19.jpg 这样在下个周期会按照新的凸轮表执行。
|