2017-02-22 161 views
1

對於我的一個程序,我需要一個梯形圖中的常閉,定時關閉(NCTC)繼電器。在Codesys中定義一個下降沿檢測

我不知道實現這樣的標準方法,所以我試圖自己構建一個。我目前的方法需要一個下降沿檢測。我在一本書的後面找到了這樣一個檢測器的代碼:「IEC 61131-3: 編程工業 系統」(第2版,第327頁)。看起來是這樣的:

FUNCTION_BLOCK  F_TRIG  (* falling edge *) 
    VAR_INPUT 
     CLK :  BOOL; 
    END_VAR 
    VAR_OUTPUT 
     Q : BOOL; 
    END_VAR 
    VAR RETAIN 
     MEM : BOOL := 1;  (* initialise edge flag *) 
    END_VAR 
    Q := NOT CLK AND NOT MEM; (* recognise falling edge *) 
    MEM := NOT CLK;    (* reset edge flag *) 
END_FUNCTION_BLOCK 

這給了我整整5錯誤(忽略構建因爲那些失敗的):POU的另一個 'ST' 的語句或結束:

錯誤4250:F_TRIG(1)預期
ERROR 4250:F_TRIG(4):POU的另一個 'ST' 的語句或結束預計
ERROR 4250:F_TRIG(7):POU的另一個 'ST' 的語句或結束預計
ERROR 4250:F_TRIG(10) :另一個'ST'聲明或POU結束預計
ERROR 4250:F_TRIG(13):POU的另一個「ST」的語句或結束預計

我正確配置POU的類型是一個功能塊和POU的是ST的語言。我懷疑我的語法是生鏽的,但我願意提供建議。特別是如果我以一種錯誤的方式解決這個問題。

它看起來對我來說沒問題。出了什麼問題?

運行Codesys 2.3。

回答

0

如果我理解正確的話,你所要的輸出是:

  • TRUE空閒時(常閉)計時器期間
  • FALSE
  • 時間到期時

這是真的與內置的TP(定時脈衝)功能塊相反。只需反轉TP輸出'Q'。

2
  1. 刪除END_FUNCTION_BLOCK
  2. 刪除RETAIN。您可以保留一個功能塊。不是功能塊中的變量
  3. QMEM底部沒有聲明爲任何東西。
  4. F_TRIG已經是碼型中的一種類型。需要聲明爲別的東西

下面是它應該看起來的一個例子。

FUNCTION_BLOCK CustomTrig  
VAR_INPUT 
    CLK :  BOOL; 
END_VAR 
VAR_OUTPUT 
    Q : BOOL; 
END_VAR 
VAR 
    MEM : BOOL := 1;  
END_VAR 

你能詳細解釋一下你想要做什麼嗎?我可能能夠幫助你開發一些東西(或者可能已經內置了一些代碼)

+0

點3,'Q'和'MEM'被聲明爲'BOOL'。看起來他們最後會有一個定義的值。 – Mast

+0

我會回來詳細說明我在做什麼以及您的建議是否有效。 – Mast

+0

我想要做的是建立一個常閉閉合定時閉合(NCTC)繼電器。 – Mast