• 外部模式启动程序


    FB的建立:

    (*华数III型  外部模式启动模块*)
    FUNCTION_BLOCK HS3RobotExtStart
    VAR_INPUT
        //外部控制按钮
        in_Start_NO:       BOOL;  //启动----上升沿有效
        in_Pause_NC:       BOOL;  //暂停----下降沿有效
        in_Stop_NC:        BOOL;  //停止----下降沿有效
        in_Reset_NO:       BOOL;  //复位----上升沿有效
        
        //机器人外部信号输出
        oROBOT_READY:      BOOL;  //机器人准备好
        oFAULTS:           BOOL;  //机器人报警
        oENABLE_STATE:     BOOL;  //使能状态
        oPRG_UNLOAD:       BOOL;  //卸载程序
        oPRG_READY:        BOOL;  //程序准备好
        oPRG_RUNNING:      BOOL;  //运行状态
        oPRG_ERR:          BOOL;  //程序报错
        oPRG_PAUSE:        BOOL;  //暂停状态
        oIS_MOVING:        BOOL;  //有动作,速度不为0
        oMANUAL_MODE:      BOOL;  //手动模式
        oAUTO_MODE:        BOOL;  //自动模式
        oEXT_MODE:         BOOL;  //外部模式
        oREF_0:            BOOL;  //引用0
        oREF_1:            BOOL;  //引用1
        oREF_2:            BOOL;  //引用2
    END_VAR
    VAR_OUTPUT
        //机器人外部信号输入
        iPRG_START_N:      BOOL;  //启动
        iPRG_PAUSE_N:      BOOL;  //暂停
        iPRG_STOP_N:       BOOL;  //停止
        iPRG_LOAD_P:       BOOL;  //加载程序
        iPRG_UNLOAD_N:     BOOL;  //卸载程序
        iENABLE:           BOOL;  //使能
        iCLEAR_FAULTS_P:   BOOL;  //清除报警
    END_VAR
    VAR
        iDelay:            INT;   //延时
        RUNSTATE:          INT;   //启动状态机
        block:             BOOL;  //互锁信号
        bResetSingle:      BOOL;  //复位标志位
        bEnableMid:        BOOL;  //使能中间变量
        
        //下降沿
        in_Pause_NC_F_TRIG:            F_TRIG;
        in_Stop_NC_F_TRIG:             F_TRIG;
        
        //上升沿
        in_Start_NO_R_TRIG:            R_TRIG;
        in_Reset_NO_R_TRIG:            R_TRIG;
    END_VAR
    //外部启动状态机
    CASE RUNSTATE OF
        0://初始化
            in_Start_NO_R_TRIG(CLK:= in_Start_NO, Q=> );
            iENABLE := FALSE;      //Enble
            iPRG_LOAD_P:= FALSE; //load
            iPRG_START_N := FALSE; //Start
            
            //启动运行
            IF in_Start_NO_R_TRIG.Q AND NOT oFAULTS AND in_Pause_NC AND in_Stop_NC 
            AND NOT oMANUAL_MODE AND (oAUTO_MODE OR oEXT_MODE) THEN
                RUNSTATE := 10;
            END_IF
            
            //复位复位信号
            IF NOT(oFAULTS) AND NOT(oPRG_RUNNING) AND oPRG_UNLOAD THEN
              bResetSingle:= FALSE;
              block:= FALSE;//互锁
            END_IF
           
        10://上使能
            iENABLE:= TRUE;
            IF oENABLE_STATE THEN    //使能已上
                RUNSTATE:= 20;
                iPRG_LOAD_P:= FALSE; //load
            END_IF
            IF NOT in_Stop_NC THEN
                RUNSTATE:= 0;
            END_IF
     
        20://加载程序
            iPRG_LOAD_P:= TRUE; //load
            //机器人已经准备好
            IF  oROBOT_READY THEN
                 iPRG_START_N:= TRUE; //Start
                 RUNSTATE :=30;
            END_IF
            IF NOT in_Stop_NC THEN
                RUNSTATE:= 0;
            END_IF
        
        30://运行启动
            iPRG_START_N:= FALSE; //Start
            
            //已经启动
            IF  oPRG_RUNNING THEN
              RUNSTATE :=40;
            END_IF
            IF NOT in_Stop_NC THEN
                RUNSTATE:= 0;
            END_IF
            
        40://运行中
            //停止
            in_Stop_NC_F_TRIG(CLK:= in_Stop_NC, Q=> );
            IF  in_Stop_NC_F_TRIG.Q THEN
               iPRG_STOP_N:= TRUE;  //Stop
               RUNSTATE:= 50;
            END_IF
            
            //暂停
            in_Pause_NC_F_TRIG(CLK:= in_Pause_NC, Q=> );
            IF in_Pause_NC_F_TRIG.Q THEN
               iPRG_PAUSE_N:= TRUE; //pause
               RUNSTATE:= 80;
            END_IF 
            
        50://停止程序
            iPRG_STOP_N:= FALSE; //Stop
            //已经停止,非运行状态
            IF NOT(oPRG_RUNNING) THEN
                iPRG_UNLOAD_N:= TRUE;
                RUNSTATE:= 60;
            END_IF
            
        60://卸载程序
            iPRG_UNLOAD_N:= FALSE;
            
            //程序已经卸载
            IF oPRG_UNLOAD THEN
               RUNSTATE:= 70;
            END_IF
            
        70: //掉使能
            iENABLE:= FALSE;
            
            //使能已经掉
            IF NOT(oENABLE_STATE) THEN
               RUNSTATE:= 0;
            END_IF
            
        80: //暂停程序
            iPRG_PAUSE_N:= FALSE; //pause
            
            //暂停状态(暂停后包含掉使能)
            IF oPRG_PAUSE THEN
              RUNSTATE:= 90;
            END_IF
            
        90: //暂停状态--掉使能
            iENABLE:= FALSE;
            
            //掉使能,并处于暂停状态
            IF NOT(oENABLE_STATE) AND oPRG_PAUSE THEN
                //1://启动
                in_Start_NO_R_TRIG(CLK:= in_Start_NO, Q=> );
                IF in_Start_NO_R_TRIG.Q THEN
                     bEnableMid:= TRUE;
                END_IF
                
                //暂停启动延时
                IF bEnableMid THEN
                    iDelay:= iDelay + 1;
                    IF iDelay> 5 THEN
                       bEnableMid:= FALSE;
                       iDelay:= 0;
                       RUNSTATE:= 100;
                    END_IF
                END_IF
                
                //2:停止
                in_Stop_NC_F_TRIG(CLK:= in_Stop_NC, Q=> );
                IF in_Stop_NC_F_TRIG.Q THEN
                     iPRG_STOP_N:= TRUE;  //Stop
                     RUNSTATE:= 50;
                END_IF
            END_IF
            
        100://暂停后上使能
            iENABLE:= TRUE;
            //已经使能
            IF (oENABLE_STATE) THEN
                 iPRG_START_N:= TRUE; //Start
                 RUNSTATE :=30;
            END_IF
    END_CASE
    
    //////////////---处理报错
    //处理完一次整体的报错后的流程(下载程序,掉使能)
    in_Reset_NO_R_TRIG(CLK:= in_Reset_NO, Q=> );
    IF in_Reset_NO_R_TRIG.Q AND oFAULTS THEN
        bResetSingle:= TRUE;
    END_IF
    
    IF bResetSingle THEN
         in_Reset_NO_R_TRIG(CLK:= in_Reset_NO, Q=> );
         iCLEAR_FAULTS_P:= TRUE;  //复位
         
         //无错情况下去执行
         IF NOT(oFAULTS) AND NOT(block) THEN
              block:= TRUE;//互锁
              //程序有加载
              IF NOT(oPRG_UNLOAD) THEN
                   iPRG_STOP_N:= TRUE;  //先停止程序
                   RUNSTATE:= 6;
              ELSE
                   RUNSTATE:= 8;
              END_IF
         END_IF
    ELSE
        iCLEAR_FAULTS_P:= FALSE;  //复位
    END_IF

    IO信号映射:

     定义一个全局变量GVL_EXT,具体内容如下:

    (*1、外部启动全局变量*)
    VAR_GLOBAL
    //机器人外部信号输出
        GC_oROBOT_READY:      BOOL;         //机器人准备好
        GC_oFAULTS:           BOOL;         //机器人报警
        GC_oENABLE_STATE:     BOOL;         //使能状态
        GC_oPRG_UNLOAD:       BOOL;         //卸载程序
        GC_oPRG_READY:        BOOL;         //程序准备好
        GC_oPRG_RUNNING:      BOOL;         //运行状态
        GC_oPRG_ERR:          BOOL;         //程序报错
        GC_oPRG_PAUSE:        BOOL;         //暂停状态
        GC_oIS_MOVING:        BOOL;         //有动作,速度不为0
        GC_oMANUAL_MODE:      BOOL;         //手动模式
        GC_oAUTO_MODE:        BOOL;         //自动模式
        GC_oEXT_MODE:         BOOL;         //外部模式
        GC_oREF_0:            BOOL;         //引用0
        GC_oREF_1:            BOOL;         //引用1
        GC_oREF_2:            BOOL;         //引用2
                                         
    //机器人外部信号输入                          
        GC_PRG_START_N:       BOOL;         //启动
        GC_PRG_PAUSE_N:       BOOL;         //暂停
        GC_PRG_STOP_N:        BOOL;         //停止
        GC_PRG_LOAD_P:        BOOL;         //加载程序
        GC_PRG_UNLOAD_N:      BOOL;         //卸载程序
        GC_ENABLE:            BOOL;         //使能
        GC_CLEAR_FAULTS_P:    BOOL;         //清除报警
    END_VAR

    映射程序如下:

    (*
    外部模式IO配置,默认输入输出IO从100开始
    *)
    PROGRAM EXT_StartIO_Mapping
    VAR
        bExtStart:         BOOL:= TRUE;  //启动模块
    END_VAR
    
    
    //机器人外部信号输出
    GC_oROBOT_READY      :=  DO100;        //机器人准备好
    GC_oFAULTS           :=  DO101;        //机器人报警
    GC_oENABLE_STATE     :=  DO102;        //使能状态
    GC_oPRG_UNLOAD       :=  DO103;        //卸载程序
    GC_oPRG_READY        :=  DO104;        //程序准备好
    GC_oPRG_RUNNING      :=  DO105;        //运行状态
    GC_oPRG_ERR          :=  DO106;        //程序报错
    GC_oPRG_PAUSE        :=  DO107;        //暂停状态
    GC_oIS_MOVING        :=  DO108;        //有动作,速度不为0
    GC_oMANUAL_MODE      :=  DO109;        //手动模式
    GC_oAUTO_MODE        :=  DO110;        //自动模式
    GC_oEXT_MODE         :=  DO111;        //外部模式
    GC_oREF_0            :=  DO112;        //引用0
    GC_oREF_1            :=  DO113;        //引用1
    GC_oREF_2            :=  DO114;        //引用2
                                         
    //机器人外部信号输入                          
    DI100 := GC_PRG_START_N       ;        //启动
    DI101 := GC_PRG_PAUSE_N       ;        //暂停
    DI102 := GC_PRG_STOP_N        ;        //停止
    DI103 := GC_PRG_LOAD_P        ;        //加载程序
    DI104 := GC_PRG_UNLOAD_N      ;        //卸载程序
    DI105 := GC_ENABLE            ;        //使能
    DI106 := GC_CLEAR_FAULTS_P    ;        //清除报警

    程序实例化如下:

    VAR
        //外部启动模块(需要映射示教器外部配置的输入输出IO)
        HS3ExtStart:          HS3RobotExtStart;       //外部模式启动模块实例化
    
    END_VAR

  • 相关阅读:
    转载 --ios 模型-setValuesForKeysWithDictionary
    转载 ----HTML5 ---js实现json方式提交数据到服务端
    转载 项目经理需要修炼的9件事
    转载 人生,没有那么简单
    HTML5 ---localStorage储存实例
    HTML5 ---localStorage
    HTML5 --照抄书里的代码但函数无法执行、求分析( Uncaught ReferenceError: xxx is not defined)
    html5 -js判断undefined类型
    python-打印简单公司员工信息表
    python练习程序_员工信息表_基本实例
  • 原文地址:https://www.cnblogs.com/csflyw/p/14647933.html
Copyright © 2020-2023  润新知