回复:S120 通过111报文用SCL写的基本点定位程序块

FREE_ZY

  • 帖子

    6
  • 精华

    0
  • 被关注

    0

论坛等级:新手

注册时间:2012-05-22

普通 普通 如何晋级?

发布于 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报文 说明
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SINAMICS

共有8163条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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