无心飞扬 发表于 2023-9-22 22:24:08

基于CODESYS平台的库CAA_BehaviourModel.library之ETrig详解

输入上升沿开始动作,在动作完成或内部发生错误之前输入下降沿,输出值仅变化1个周期,在动作完成或发生错误之后输入下降沿,输出值保留到输入下降沿时。
FUNCTION_BLOCK ETrig IMPLEMENTS IFBCommand
VAR_INPUT
        xInExecute: BOOL;               

END_VAR
VAR_OUTPUT
        xOutDone: BOOL;                  //完成
        xOutBusy: BOOL;                  //执行中
        xOutError: BOOL;                //出错
END_VAR
VAR
        xPreviousExecute: BOOL;                        //上一周期xExecute的值
        xPreviousAbortInProgress: BOOL;        //上一周期xAbortInProgress的值
        xAbortInProgress: BOOL;                        //中止处理中
        iError: INT;                                        //错误代码
END_VAR


IF NOT xAbortInProgress THEN        //中止未请求
        IF NOT xOutBusy THEN
                IF NOT xInExecute AND xPreviousExecute THEN          //下降沿复位输出
                   prvResetOutputs();
                ELSIF xInExecute AND NOT xPreviousExecute THEN        //上升沿开始动作
                   xOutBusy:= TRUE;
                   xPreviousExecute:= TRUE;
                   prvStart();
                END_IF;
        END_IF;

        IF xOutBusy THEN
                prvCyclicAction();
                IF xOutDone THEN
                   xOutBusy:= FALSE;
                END_IF;
        END_IF;

        IF xOutBusy THEN
           IF iError <> 0 AND NOT xPreviousAbortInProgress THEN        //执行中出现错误
                  xAbortInProgress:= TRUE;
           END_IF;
        END_IF;
END_IF;

IF xAbortInProgress THEN
        prvAbort();
        IF NOT xAbortInProgress THEN        //中止完成
                xOutBusy:= FALSE;
                IF iError <> 0 THEN
                        xOutError:= TRUE;
                END_IF;
        END_IF;
END_IF;
xPreviousAbortInProgress := xAbortInProgress;prvAbort(),prvCyclicAction(),prvResetOutputs(),prvStart()为标准接口IFBCommand中的4个方法。
页: [1]
查看完整版本: 基于CODESYS平台的库CAA_BehaviourModel.library之ETrig详解