[西门子] 西门子S7-1200博途用LAD和SCL语言控制步进电机程序分析

[复制链接]
查看212 | 回复0 | 2024-6-15 08:32:06 | 显示全部楼层 |阅读模式
>关于启程启程自动化培训成立于2012年,培训项目主打西门子PLC编程系统集成、工业机器人编程、EPLAN电气设计、视觉等培训与技术服务的机构。推荐高薪就业,越努力越幸运
西门子S7-1200PLC控制步进电机的梯形图程序


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


首先,新建一个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-1200PLC控制步进电机的部分梯形图程序就介绍到这里,实际工程应用大家自行增减。





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


▼ 函数块SCL语言程序



#轴使能启动(Axis:="步进电机",
       Enable:=#轴使能_1,
       StartMode:=1,
       StopMode:=1);
#复位启动(Axis:="步进电机",
      Execute:=#手动模式_1 AND #复位按钮);
"回原点启动"(Axis:="步进电机",
        Execute:=#自动模式_1 AND #复位按钮,
        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.Q AND NOT #轴使能启动.Status THEN
    #轴使能_1 := 1 ;
   
END_IF;


IF #上升沿检测2.Q AND  #轴使能启动.Status THEN
    #轴使能_1 := 0 ;
   
END_IF;


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


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


//以上为按钮的状态


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


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


IF #步进启动2 THEN
    CASE #程序步 OF
        0:
            #程序步 := 10;
            ;
        10:
            #位置 := #位置1设置值;
            #速度 := #速度1设置值;
            #绝对定位模式_1 := 1;
            #延时处理 := 0;
            IF #绝对定位启动.Done THEN
                #绝对定位模式_1 := 0;
            #程序步:= 15;
             END_IF;
        
        15:
             #IEC_Timer_0_Instance(IN:=#延时处理,
                               PT:=t#0s);
         #延时处理 := 1;
            IF #IEC_Timer_0_Instance.Q THEN
                #位置 := #位置2设置值;
                #速度 :=#速度2设置值;
                #绝对定位模式_1 := 1;
            END_IF;
            IF #绝对定位启动.Done THEN
                #绝对定位模式_1 := 0;
                #延时处理 := 0;
            #程序步:= 20;
            END_IF;
            
        20:
            #IEC_Timer_0_Instance_1(IN:=#延时处理,
                                    PT:=t#10s);
            
            #延时处理 := 1;
            IF #IEC_Timer_0_Instance_1.Q THEN
                #位置 := #位置3设置值;
                #速度 := #速度3设置值;
                #绝对定位模式_1 := 1;
            END_IF;
            IF #绝对定位启动.Done THEN
                #绝对定位模式_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程序块调用函数块






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则