发布于 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位。
止于至善——独学而无友,则孤陋而寡闻。