能电机

干货西门子S7博途用LAD

发布时间:2022/5/30 17:31:15   
治白癜风的医院哪里好 https://wapjbk.39.net/yiyuanzaixian/bjzkbdfyy/

西门子S7-PLC控制步进电机的梯形图程序

西门子S7-PLC控制步进电机的梯形图程序,也可以用结构化编程的思路来编程。

首先,新建一个FB,编程语言选择LAD(梯形图)。

然后,在FB编程区编写程序段1~19。

程序段1,M1.2为系统存储器始终为1。手/自动开关为1时,自动模式开启;手/自动开关为0时,手动模式开启。

程序段2,M1.2为系统存储器始终为1。启动使能按钮一个上升沿在步进电机未使能时,置位轴使能;启动使能按钮一个上升沿在步进电机已使能时,复位轴使能。

▼程序段1、2

程序段3,步进电机启动使能,调用MC_Power指令程序。

程序段4,步进电机点动模式,调用MC_MoveJog指令程序。

▼程序段3、4

程序段5,在手动模式下,按复位按钮,复位指令启动。

程序段6,步进电机复位模式,调用MC_Reset指令程序。

程序段7,步进自动转换为手动模式的一个脉冲时,触发暂停模式。

▼程序段5、6、7

程序段8,步进电机暂停模式,调用MC_Halt指令程序。

程序段9,在自动模式下,按复位按钮,回原点指令启动。

▼程序段8、9

程序段10,步进电机回原点模式,调用MC_Home指令程序。

程序段11,在自动模式下,按自动启动按钮,开始执行定位运行。

▼程序段10、11

程序段12,步进电机原点OK情况下,确认原点的偏差范围为-0.5~+0.5,则认为是原点位置。确认位置1、2的定位偏差范围为-0.5~+0.5。

▼程序段12

程序段13,自动开始启动按钮按下,如在原点位置,则调用15.0的定位速度和位置1的定位位置;如在位置1处,则调用20.0的定位速度和位置2的定位位置;

▼程序段13

程序段14,定位1、2的触发,统一为定位触发。

程序段15,绝对定位模式,通过上几步的设置为步进电机进行定位。

▼程序段14、15

程序段16,自动指示灯程序。

程序段17,手动指示灯程序。

程序段18,步进电机启动使能程序

程序段19,步进电机使能异常报警程序。

▼程序段16、17、18、19

最后,我们要在主程序块下调用FB程序,直接在项目树中拖过来放开即可,这里要为FB的输入、输出分配好实参地址。

▼主程序块调用FB

好了,西门子S7-PLC控制步进电机的部分梯形图程序就介绍到这里,实际工程应用大家自行增减。

西门子S7-PLC控制步进电机的SCL语言编程

▼函数块SCL语言程序

#轴使能启动(Axis:="步进电机",

Enable:=#轴使能_1,

StartMode:=1,

StopMode:=1);

#复位启动(Axis:="步进电机",

Execute:=#手动模式_1AND#复位按钮);

"回原点启动"(Axis:="步进电机",

Execute:=#自动模式_1AND#复位按钮,

Position:=0,

Mode:=3);

#点动模式启动(Axis:="步进电机",

JogForward:=#正向点动AND#手动模式_1,

JogBackward:=#负向点动AND#手动模式_1);

#绝对定位启动(Axis:="步进电机",

Execute:=#绝对定位模式_1,

Position:=#位置,

Velocity:=#速度);

#上升沿检测(CLK:=#手动模式_1);

#暂停模式启动(Axis:="步进电机",

Execute:=#上升沿检测.Q);

//以上为指令块调用

#上升沿检测2(CLK:=#启动使能按钮);

IF#上升沿检测2.QANDNOT#轴使能启动.StatusTHEN

#轴使能_1:=1;

END_IF;

IF#上升沿检测2.QAND#轴使能启动.StatusTHEN

#轴使能_1:=0;

END_IF;

#自动模式_1:=#"自/手动切换";

#手动模式_1:=NOT#"自/手动切换";

//以上为按钮的状态

#步进启动2:=#自动模式_1AND#自动启动AND"步进电机".StatusBits.HomingDone;

//以上绝对定位方式的自动启动

IF#步进启动2THEN

CASE#程序步OF

0:

#程序步:=10;

;

10:

#位置:=#位置1设置值;

#速度:=#速度1设置值;

#绝对定位模式_1:=1;

#延时处理:=0;

IF#绝对定位启动.DoneTHEN

#绝对定位模式_1:=0;

#程序步:=15;

END_IF;

15:

#IEC_Timer_0_Instance(IN:=#延时处理,

PT:=t#0s);

#延时处理:=1;

IF#IEC_Timer_0_Instance.QTHEN

#位置:=#位置2设置值;

#速度:=#速度2设置值;

#绝对定位模式_1:=1;

END_IF;

IF#绝对定位启动.DoneTHEN

#绝对定位模式_1:=0;

#延时处理:=0;

#程序步:=20;

END_IF;

20:

#IEC_Timer_0_Instance_1(IN:=#延时处理,

PT:=t#10s);

#延时处理:=1;

IF#IEC_Timer_0_Instance_1.QTHEN

#位置:=#位置3设置值;

#速度:=#速度3设置值;

#绝对定位模式_1:=1;

END_IF;

IF#绝对定位启动.DoneTHEN

#绝对定位模式_1:=0;

#延时处理:=0;

#程序步:=10;

END_IF;

END_CASE;

ELSE

#位置:=0;

#速度:=0;

#自动模式_1:=0;

#程序步:=0;

END_IF;

//以上为三个位置的定位,预留延时功能

#自动指示灯_1:=#自动模式_1;

#手动指示灯_1:=#手动模式_1;

#报警指示灯_1:=#轴使能启动.Error;

#轴使能指示灯:=#轴使能启动.Status;

#原点指示灯_1:="步进电机".StatusBits.HomingDone;

//以上为输出指示灯

▼Main程序块调用函数块

来源:网络,版权归原作者所有,侵删

识别上方

转载请注明:http://www.aideyishus.com/lkyy/406.html

------分隔线----------------------------

热点文章

  • 没有热点文章

推荐文章

  • 没有推荐文章