发布于 2013-11-24 21:16:26
1楼
看来我的无聊指数比较高
FUNCTION_BLOCK FB130
TITLE = 'friction control'
VERSION : '0.0'
VAR_INPUT
Speed_Input : INT ;
Dimension : INT ; //Speed Dimension
END_VAR
VAR_OUTPUT
Fric_CMD_Output : REAL ;
END_VAR
VAR
Index : INT ;
Value : INT ;
Step : INT ;
Scale1 : REAL ;
Scale2 : REAL ;
Friction_Value : ARRAY [0 .. 20 ] OF REAL ;
Speed : INT ;
END_VAR
FOR Index:= 0 TO 20 BY 1 DO
Value:=REAL_TO_INT(INT_TO_REAL(Dimension)/20.0);
Speed:=REAL_TO_INT(ABS(INT_TO_REAL(Speed_Input)));
Step:=Speed/Value;
IF Step=Index AND Step<20 THEN
Scale1:=(Friction_Value[Index+1]-Friction_Value[Index])/1.0 ;
Scale2:=INT_TO_REAL(Speed)/(INT_TO_REAL(Dimension)/20.0)-INT_TO_REAL(Index);
Fric_CMD_Output:=Scale2*Scale1+Friction_Value[Index];
END_IF;
IF Step = 20 THEN
Fric_CMD_Output:=Friction_Value[20];
END_IF;
END_FOR;
END_FUNCTION_BLOCK