回复:解释一下老外的程序 scl编程 通过读取传感器的位置值,计算速度。

工控毛尖

  • 帖子

    829
  • 精华

    1
  • 被关注

    21

论坛等级:侠士

注册时间:2009-05-19

普通 普通 如何晋级?

发布于 2009-06-07 22:23:43

0楼

VAR_INPUT
Init : BOOL; // 初始化
ActPos : REAL; // [mm]当前实际位置
PT1 : REAL; // [ms] 低通时间
Cycle : INT; // [ms] CPU循环时间
END_VAR

VAR_IN_OUT
OldPos : REAL; //上一时刻位置
v : REAL; //速度
END_VAR

VAR_OUTPUT
VOut : REAL; // 速度(mm/s)
END_VAR

VAR_TEMP
v_p : REAL;//临时变量,中间过渡用
v_raw : REAL;
END_VAR

BEGIN
IF Init THEN
OldPos := ActPos;
v := 0.0;//初始化则将当前位置赋值给OldPos,并令v等于0
END_IF;

v_p := ActPos - OldPos;//这句话什么意思?//下个扫描周期,将当前置 减去初始化位置(以后的每个扫描周期都是第N+1个扫描周期位置-第N个扫描周期位置),即可看作物理学中位移信息。

OldPos := ActPos; //这句话什么意思?第1个周期时,v_p=0,第2个周期时v_p=pos2-pos1,然后另oldpos=pos2。。。。。则第N个周期时V_P=pos(N)-pos(N-1),第N+1个周期时,V_P=pos(N+1)-pos(N),依次循环。

v_raw := v_p / Cycle; //这句话什么意思?//一个周期的位移/扫描周期便是上一个周期的速度


v := v + Cycle/PT1 * (v_raw - v );//这句话什么意思?//注意到V是IN_OUT变量。则第N个周期时此出v的值是第N-1个周期的V,即上一个周期的速度值,于是可以这样认为,上个周期的速度v+(本周起计算的速度v_raw-上个周期的计算速度v)*修正系数Cycle/PT1

// only 2 digits
VOut := DINT_TO_REAL (REAL_TO_DINT(v * 100000.0)) / 100.0;//这句话什么意思?

双整型的v转成实型后除以100.0后再转成实型,应该是为保持精度设置的,精度应该是小数点后2位。

止于至善——独学而无友,则孤陋而寡闻。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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