无心飞扬 发表于 2023-9-22 22:06:46

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

上升沿开始动作,在动作完成或内部发生错误或外部中止之前下降沿,输出值仅变化1个周期,在动作完成或内部发生错误或外部中止之后下降沿,输出值保留到下降沿。外部中止, 动作立即停止并且输出复位到初始状态。
FUNCTION_BLOCK ETrigA IMPLEMENTS IFBCommand
VAR_INPUT
        xInExecute: BOOL;       
        xInAbort: BOOL;

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

IF xInAbort AND xOutBusy AND NOT xAbortInProgress THEN//在功能执行中且内部未出现中止时用户中止
   xAbortInProgress:= TRUE;
END_IF;

IF NOT (xAbortInProgress OR xInAbort) 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 NOT xInExecute AND xInAbort AND NOT xAbortInProgress AND xOutAborted THEN        //执行中出现错误 或被用户中止
   prvResetOutputs();
END_IF;

IF xAbortInProgress THEN
   prvAbort();
   IF NOT xAbortInProgress THEN        //中止完成
          xOutBusy:= FALSE;
          IF iError <> 0 THEN
               xOutError:= TRUE;
          END_IF;
          IF xInAbort THEN
               xOutAborted:= TRUE;
          END_IF;
   END_IF;
END_IF;

xPreviousAbortInProgress:= xAbortInProgress;prvAbort(),prvCyclicAction(),prvResetOutputs(),prvStart()为标准接口IFBCommand中的4个方法。
页: [1]
查看完整版本: 基于CODESYS平台的库CAA_BehaviourModel.library之ETrigA详解