恭喜,你发布的帖子
发布于 2017-04-20 11:37:52
17楼
这个就是相邻两个PLC程序扫描周期读到的编码器实际读数之差的累加,但必须注意编码器度数溢出时的处理。下面截取以前做的其中累计脉冲的程序例子:
#MaxPulseVal := 8192.0;//读取到的编码器最大度数
//------------------------------------------------------------------
#tempData.r_currCycleEncoderVal := UDINT_TO_REAL(#actEncoderVal);//读取到的编码器当前值
//------------------------------------------------------------------
#tempData.r_encoderValPerCycle := #tempData.r_currCycleEncoderVal - #TempData.r_lastCycleEncoderVal; //两个周期的度数差
#tempData.b_I_OverFlowFlag := ABS(#tempData.r_encoderValPerCycle) > #MaxPulseVal / 2;//判断编码器是否旋转是否超过一圈
//判断是正转超出还是反转超出
IF #tempData.b_I_OverFlowFlag THEN
IF #tempData.r_encoderValPerCycle > 0.0 THEN //underflow 说明是反转超出一圈
#tempData.r_effectEncoderValPerCycle := - (#MaxPulseVal - #tempData.r_currCycleEncoderVal + #tempData.r_lastCycleEncoderVal);
ELSE //overflow说明是正转超出一圈 #tempData.r_effectEncoderValPerCycle := #MaxPulseVal - #tempData.r_lastCycleEncoderVal + #tempData.r_currCycleEncoderVal;
END_IF;
ELSE
#tempData.r_effectEncoderValPerCycle := #tempData.r_encoderValPerCycle; //正常范围
END_IF;
#tempData.r_lastCycleEncoderVal := #tempData.r_currCycleEncoderVal;
#tempData.r_TotalPulse := #tempData.r_actPosition + #tempData.r_effectEncoderValPerCycle;//脉冲总数
请填写推广理由:
分享
只看
楼主