基于CODESYS平台的库CAA_BehaviourModel.library之ETrigA详解-CODESYS V3-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6490-cn中国制造,中国芯~
查看: 2112|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2017-11-20 22:07
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2023-9-22 22:06:46 | 显示全部楼层 |阅读模式
    上升沿开始动作,在动作完成或内部发生错误或外部中止之前下降沿,输出值仅变化1个周期,在动作完成或内部发生错误或外部中止之后下降沿,输出值保留到下降沿。外部中止, 动作立即停止并且输出复位到初始状态。
    1. FUNCTION_BLOCK ETrigA IMPLEMENTS IFBCommand
    2. VAR_INPUT
    3.         xInExecute: BOOL;       
    4.         xInAbort: BOOL;
    5. END_VAR
    6. VAR_OUTPUT
    7.         xOutDone: BOOL;                    //完成
    8.         xOutBusy: BOOL;                    //执行中
    9.         xOutError: BOOL;                //出错
    10.         xOutAborted : BOOL;            //被用户中止
    11. END_VAR
    12. VAR
    13.         xPreviousAbortInProgress: BOOL;        //上一周期xAbortInProgress的值
    14.         xPreviousExecute: BOOL;                        //上一周期xExecute的值
    15.         xAbortInProgress: BOOL;                        //中止处理中
    16.         iError: INT;                                        //错误代码
    17. END_VAR
    18. IF xInAbort AND xOutBusy AND NOT xAbortInProgress THEN  //在功能执行中且内部未出现中止时用户中止
    19.    xAbortInProgress:= TRUE;
    20. END_IF;
    21. IF NOT (xAbortInProgress OR xInAbort) THEN        //中止未请求
    22.    IF NOT xOutBusy THEN
    23.           IF NOT xInExecute AND xPreviousExecute THEN            //下降沿复位输出
    24.                  prvResetOutputs();
    25.           ELSIF xInExecute AND NOT xPreviousExecute THEN        //上升沿开始动作
    26.                  xOutBusy:= TRUE;
    27.                  xPreviousExecute := TRUE;
    28.                  prvStart();
    29.            END_IF;
    30.         END_IF;
    31.         IF xOutBusy THEN
    32.            prvCyclicAction();
    33.            IF xOutDone THEN
    34.                   xOutBusy:= FALSE;
    35.            END_IF;
    36.         END_IF;
    37.         IF xOutBusy THEN
    38.            IF iError <> 0 AND NOT xPreviousAbortInProgress THEN
    39.                   xAbortInProgress:= TRUE;
    40.            END_IF;
    41.         END_IF;
    42. END_IF;
    43. IF NOT xInExecute AND xInAbort AND NOT xAbortInProgress AND xOutAborted THEN        //执行中出现错误 或被用户中止
    44.    prvResetOutputs();
    45. END_IF;
    46. IF xAbortInProgress THEN
    47.    prvAbort();
    48.    IF NOT xAbortInProgress THEN        //中止完成
    49.           xOutBusy:= FALSE;
    50.           IF iError <> 0 THEN
    51.                  xOutError:= TRUE;
    52.           END_IF;
    53.           IF xInAbort THEN
    54.                  xOutAborted:= TRUE;
    55.           END_IF;
    56.    END_IF;
    57. END_IF;
    58. xPreviousAbortInProgress:= xAbortInProgress;
    复制代码
    prvAbort(),prvCyclicAction(),prvResetOutputs(),prvStart()为标准接口IFBCommand中的4个方法。
    +10
    不赞一个?
    打赏鼓励一下!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|Archiver|手机版|小黑屋|酷德论坛 ( 苏ICP备16065247号-1 )|网站地图

    GMT+8, 2026-10-7 23:57 , Processed in 0.194941 second(s), 42 queries .

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

    快速回复 返回顶部 返回列表