用SCL做了3个块,分别为JOG,MDI,HOMING。比较简单,大家指点下。
由于不能发附件,所以程序贴在下面:
1 HOMING
FUNCTION FC382 : VOID
TITLE = 'The standard for servo HOMING using'
VERSION: '1.0'
AUTHOR: ZY
NAME: zy
FAMILY: ARES
VAR_INPUT
Reset: BOOL; //变频器故障复位
Strat_HOMING: BOOL; //启动 HOMING
DB_No_Control: WORD; //数据保存地址
DB_No_State: WORD; //状态字地址
Servo_No: INT; //伺服电机的序号(在DB数组中的数组号)
Limit_for_homing: BOOL; //回零限位开关
END_VAR
VAR_OUTPUT
HOMING_effect: BOOL; //回零生效
END_VAR
VAR_TEMP
ARRAY_No: INT; //数组地址号
N_Reset: BOOL; //Reset的下降沿
Last_Reset: BOOL; //Reset的上次数据
END_VAR
ARRAY_No:=(Servo_No-1)*24;
WORD_TO_BLOCK_DB(DB_No_Control).DX[(ARRAY_No+4),6]:=TRUE; //enable soft limit function
WORD_TO_BLOCK_DB(DB_No_Control).DX[(ARRAY_No+5),2]:=Limit_for_homing;
IF Reset=TRUE THEN
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+1,0]:=FALSE; //Reset fault process: 1,disenable converter; 2,reset pulse; 3,enable converter.
END_IF;
WORD_TO_BLOCK_DB(DB_No_Control).DX[(ARRAY_No+2),1]:=Reset;
N_Reset:=Last_Reset AND (NOT Reset);
Last_Reset:=Reset;
IF N_Reset=TRUE THEN
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+1,0]:=TRUE;
END_IF;
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+4,0]:=FALSE; //Select HOMING mode, =0: active mode , =1: passive mode.
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+4,1]:=TRUE; //Select HOMING direction, =0: positive direction , =1: negative direction.
WORD_TO_BLOCK_DB(DB_No_Control).DW[(ARRAY_No+8)]:=W#16#4000; //Setpoint override , 16#4000 is 100%
IF Strat_HOMING=TRUE THEN //Enable converter,enable HOMING command
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+1,0]:=TRUE;
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No,3]:=TRUE; //use Starter software set HOMING speed valve
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No,6]:=TRUE;
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No,7]:=TRUE;
HOMING_effect:= WORD_TO_BLOCK_DB(DB_No_State).DX[ARRAY_No+2,3];
ELSE WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No,3]:=FALSE;
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No,6]:=FALSE;
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No,7]:=FALSE;
END_IF;
END_FUNCTION