新聞中心

        EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > 談?wù)刄P TRIG 和DOWN TRIG

        談?wù)刄P TRIG 和DOWN TRIG

        作者: 時間:2017-01-09 來源:網(wǎng)絡(luò) 收藏
        上文提到了上升沿和下降沿的問題,因為感覺非常實用,再詳細談一下.

        沿檢測在PLC中用的非常多,PLC是循環(huán)掃描的,可以看做是LABVIEW的一個WHILE循環(huán),在PLC中是這樣定義的.

        本文引用地址:http://www.104case.com/article/201701/337253.htm

        DF:當檢測到輸入觸發(fā)信號的上升沿時,僅將觸點閉合一個掃描周期。
        DFI:當檢測到輸入觸發(fā)信號的下降沿時,僅將觸點閉合一個掃描周期。
        程序示例


        示例說明
        在檢測到 X0的上升沿(OFF→ON)時,Y0僅為 ON一個掃描周期。
        在檢測到 X1的下降沿(ON→OFF)時,Y1僅為 ON一個掃描周期。


        描述
        當觸發(fā)信號狀態(tài)從 OFF 狀態(tài)到 ON狀態(tài)變化時,DF 指令才執(zhí)行并且輸出僅接通一個掃描周期。
        當觸發(fā)信號狀態(tài)從 ON狀態(tài)到 OFF 狀態(tài)變化時,DFI 指令才執(zhí)行并且輸出僅接通一個掃描周期。
        若執(zhí)行條件最初即為閉合,則 PLC接通電源,則不會產(chǎn)生輸出。


        在LV編程中經(jīng)常也會遇到類似的問題.

        比如統(tǒng)計按鈕按下的次數(shù),不采用事件結(jié)構(gòu)而是采用POLLING方式,在C語言中是這樣編程的.

        boolcount(bool button) /* UpTrig */

        {

        static int counter=0;

        static bool button_Old=FALSE;

        if(Button && !Button_Old)counter++; /*OLD=FALSE,NEW=TRUE -->UP TRIG */

        button_Old=button /*Update Old Status ,相當于LV的shift Register */

        return(Button &&!Button_Old);

        }

        如果不是沿檢測,如if(Button) counter++; 如果按鈕一直處于按下狀態(tài),將導(dǎo)致COUNTER不斷增加,這顯然不是我們希望的結(jié)果.

        再比如一個狀態(tài)機結(jié)構(gòu),可以分成N個狀態(tài),在每一個狀態(tài)中又可以分解成三個子狀態(tài),進入準備(初始化),運行,退出(清理),顯然進入準備和退出清理必須是在條件發(fā)生變化的時候執(zhí)行一次,這就需要沿的操作.

        LABVIEW本身就提供了沿判斷的VI,在逐點分析庫其它中.




        它的代碼如下圖:



        它可以根據(jù)選擇檢測FALSE-->TRUE(UP), TRUE-->FALSE(DOWN) 或者EITHER,(UP AND DOWN)

        OpenG也提供了一個類似的VI,



        這兩個VI都是利用了未初始化的SHIFT REGISTER,封裝在子VI中,這是一個非常重要的概念,稱做LV2型全局變量或者Function Global,以后會專門討論



        關(guān)鍵詞: UPTRIGDOW

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 青川县| 三亚市| 盈江县| 华池县| 浑源县| 天门市| 延边| 滁州市| 南丹县| 高邮市| 大悟县| 灵山县| 平利县| 玛多县| 北辰区| 郓城县| 贵港市| 凌云县| 尤溪县| 汝州市| 启东市| 抚顺县| 峨山| 晴隆县| 泰顺县| 江阴市| 麻阳| 郧西县| 融水| 荣成市| 玉环县| 阳原县| 红安县| 甘德县| 龙泉市| 张家界市| 和硕县| 烟台市| 尉氏县| 郁南县| 潞西市|