技术论坛

 回复:S7-1500中累加计算怎么编程啊?

返回主题列表
作者 主题
工作狂人
侠士

经验值:1598
发帖数:262
精华帖:5
楼主    2017-04-17 08:41:30
主题:S7-1500中累加计算怎么编程啊?

刚接触S7-1500,现场有个计算长度的测量轮,原理就是单圈编码器计圈数乘以测量轮周长来计算钢板长度。在计算过程中要求在电脑上实时的显示钢板长度。这样我感觉只能用累加指令,用反馈回的码值除以单圈码值进行累加,计算完成后用确认信号将累加值清零,但是没找到方法。这样应该怎么编程啊?

W.M.J
侠圣

经验值:2299
发帖数:144
精华帖:7
17楼    2017-04-20 11:37:52
精华帖  主题:回复:S7-1500中累加计算怎么编程啊?

 这个就是相邻两个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;//脉冲总数


您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。