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

林春浩

  • 帖子

    115
  • 精华

    0
  • 被关注

    2

论坛等级:游士

注册时间:2008-09-18

普通 普通 如何晋级?

发布于 2009-05-18 20:14:57

0楼

VAR_INPUT
Init : BOOL; // Initialize//初始化
ActPos : REAL; // [mm][癩 actual position value//当前实际位置
PT1 : REAL; // [ms] low pass time//低通时间?
Cycle : INT; // [ms] CPU cycle time//CPU循环时间
END_VAR

VAR_IN_OUT
OldPos : REAL; // [mm][癩 last value//上一时刻位置
v : REAL; // [m/s][?s] Speed//速度
END_VAR

VAR_OUTPUT
VOut : REAL; // [mm/s][?s] Speed//速度(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),依次循环。

// mm/ms deg/ms

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


// lowpass

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位。

其实写plc程序除了逻辑思维好、熟悉各种特性外一定要对微机原理有了解。

你这个程序是ABB的还是哪的啊,西门子的我没见过 IF THEN的语句啊
西门子的FBD和类似汇编的用法很不错,其实熟练的应该是用STL的

最近接触了编程语言发现VACON变频器的NC1131不错,FBD,自然语言,LAD都可以,很灵活的
要做自己开心的事情!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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