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

W.M.J

  • 帖子

    144
  • 精华

    7
  • 被关注

    40

论坛等级:侠圣

注册时间:2016-11-15

白金 白金 如何晋级?

发布于 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;//脉冲总数


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10704条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

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