发布于 2012-07-27 17:46:12
1楼
2 JOG
FUNCTION FC381 : VOID
TITLE = 'The standard for servo JOG using'
VERSION: '1.0'
AUTHOR: ZY
NAME: zy
FAMILY: ARES
VAR_INPUT
Reset: BOOL; //变频器故障复位
Strat_JOG1: BOOL; //启动 JOG1
Strat_JOG2: BOOL; //启动 JOG2
DB_No_Control: WORD; //数据保存地址
Servo_No: INT; //伺服电机的序号(在DB数组中的数组号)
END_VAR
VAR_OUTPUT
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
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+5,5]:=FALSE; //Select JOG mode, =0: speed mode , =1: position mode.
WORD_TO_BLOCK_DB(DB_No_Control).DW[(ARRAY_No+8)]:=W#16#4000; //Setpoint override , 16#4000 is 100%
IF Strat_JOG1=TRUE THEN //Enable converter,enable JOG1 command
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+1,0]:=TRUE;
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No,0]:=TRUE; //use Starter software set JOG1 is positive run ,speed is positive valve
ELSE WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No,0]:=FALSE;
END_IF;
IF Strat_JOG2=TRUE THEN //Enable converter,otherwise reset complete single.
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+1,0]:=TRUE;
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No,1]:=TRUE; //use Starter software set JOG2 is negative run ,speed is negative valve
ELSE WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No,1]:=FALSE;
END_IF;
END_FUNCTION
3 MDI
FUNCTION FC380 : VOID
TITLE = 'The standard for servo MDI using'
VERSION: '1.0'
AUTHOR: ZY
NAME: zy
FAMILY: ARES
VAR_INPUT
Reset: BOOL; //变频器故障复位
Strat_MDI: BOOL; //启动 MDI
DB_No_Control: WORD; //数据保存地址
DB_No_State: WORD; //状态字地址
Servo_No: INT; //伺服电机的序号(在DB数组中的数组号)
Fast_speed_setpoint: DWORD; //快速速度给定
Slow_speed_setpoint: DWORD; //慢速速度给定
Position_setpoint: DWORD; //位置给定
Pos_Dec_position_set: DWORD; //减速位置给定
Neg_Dec_position_set: DWORD; //减速位置给定
END_VAR
VAR_OUTPUT
Action_End: 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
IF Reset=TRUE THEN
WORD_TO_BLOCK_DB(DB_No_Control).DW[ARRAY_No]:=W#16#047E; //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).DW[ARRAY_No]:=W#16#047F;
END_IF;
WORD_TO_BLOCK_DB(DB_No_Control).DX[(ARRAY_No+2),6]:=FALSE; //select positioning mode, select absolutely positioning mode, select continuous data transmission.
WORD_TO_BLOCK_DB(DB_No_Control).DX[(ARRAY_No+2),0]:=TRUE;
WORD_TO_BLOCK_DB(DB_No_Control).DX[(ARRAY_No+2),4]:=TRUE;
IF DWORD_TO_DINT(WORD_TO_BLOCK_DB(DB_No_State).DW[(ARRAY_No+14)])>DWORD_TO_DINT(Position_setpoint) THEN
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+2,2]:=TRUE;
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+2,1]:=FALSE; //Setpoint direction of movement.
ELSE WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+2,2]:=FALSE;
WORD_TO_BLOCK_DB(DB_No_Control).DX[ARRAY_No+2,1]:=TRUE;
END_IF;
IF Strat_MDI=TRUE THEN //Enable converter,otherwise reset complete single.
WORD_TO_BLOCK_DB(DB_No_Control).DW[ARRAY_No]:=W#16#047F;
ELSE Action_End:=FALSE;
END_IF;
IF WORD_TO_BLOCK_DB(DB_No_Control).DW[ARRAY_No]=W#16#047F THEN //Whether enable is OK, it must be enable first,then start MDI run.
WORD_TO_BLOCK_DB(DB_No_Control).DX[REAL_TO_INT(ARRAY_No+2),7]:=Strat_MDI; //Start MDI running.
END_IF;
IF WORD_TO_BLOCK_DB(DB_No_Control).DX[(ARRAY_No+2),7]=TRUE THEN //Setpoint acceleration, setpoint deceleration,
WORD_TO_BLOCK_DB(DB_No_Control).DW[(ARRAY_No+8)]:=W#16#4000;
WORD_TO_BLOCK_DB(DB_No_Control).DW[(ARRAY_No+18)]:=W#16#4000;
WORD_TO_BLOCK_DB(DB_No_Control).DW[(ARRAY_No+20)]:=W#16#4000;
IF WORD_TO_BLOCK_DB(DB_No_Control).DX[REAL_TO_INT(ARRAY_No+2),1]=TRUE THEN //When run forward, and the active position more than
IF DWORD_TO_DINT(WORD_TO_BLOCK_DB(DB_No_State).DD[(ARRAY_No+14)])>DWORD_TO_DINT(Pos_Dec_position_set) THEN //positive deceleration position, slow speed setpoint.
WORD_TO_BLOCK_DB(DB_No_Control).DD[(ARRAY_No+14)]:=Slow_speed_setpoint;
ELSE WORD_TO_BLOCK_DB(DB_No_Control).DD[(ARRAY_No+14)]:=Fast_speed_setpoint;
END_IF;
END_IF;
IF WORD_TO_BLOCK_DB(DB_No_Control).DX[REAL_TO_INT(ARRAY_No+2),2]=TRUE THEN //When run backward, and the active position lass than
IF DWORD_TO_DINT(WORD_TO_BLOCK_DB(DB_No_State).DD[(ARRAY_No+14)]) WORD_TO_BLOCK_DB(DB_No_Control).DD[(ARRAY_No+14)]:=Slow_speed_setpoint;
ELSE WORD_TO_BLOCK_DB(DB_No_Control).DD[(ARRAY_No+14)]:=Fast_speed_setpoint;
END_IF;
END_IF;
WORD_TO_BLOCK_DB(DB_No_Control).DD[ARRAY_No+10]:=Position_setpoint; //setpoint position
IF (DWORD_TO_DINT(WORD_TO_BLOCK_DB(DB_No_State).DD[(ARRAY_No+14)])=DWORD_TO_DINT(Position_setpoint)) AND (WORD_TO_BLOCK_DB(DB_No_State).DX[ARRAY_No,2]=TRUE) THEN
Action_End:=TRUE;
END_IF;
END_IF;
END_FUNCTION
4 DB建立
Servo ARRAY[1..2]
"UDT_111_telegram_Control"
Servo ARRAY[1..2]
"UDT_111_telegram_state"
UDT建立参照网上 111报文 说明