
PLC_博圖系列?基本指令”TONR:時間累加器“
文章目錄
- PLC_博圖系列?基本指令”TONR:時間累加器“
- 背景介紹
- TONR: 時間累加器
- 說明
- 參數
- 脈沖時序圖
- 示例
關鍵字:
PLC
、
西門子
、
博圖
、
Siemens
、
TONR
背景介紹
這是一篇關于
PLC
編程的文章,特別是關于西門子的博圖軟件。我并不是專業的PLC
編程人員,也不懂電路,所以如果你希望從這里學習PLC
編程技術,可能會有些失望。然而,因為工作需要,我開始了解PLC
編程,特別是西門子的博圖軟件,并記錄了這些經驗。隨著我國工業4.0
的推進,相信會有更多的人從事類似的工作。如果這篇文章能對你有所幫助,歡迎點贊
和關注
我?(^_-)。
TONR: 時間累加器
說明
可以使用“時間累加器”指令來累加由參數 PT 設定的時間段內的時間值。當 IN 輸入處的邏輯運算結果 (RLO) 從“0”變為“1”(信號上升沿)時,將開始進行時間測量,已組態的時間 PT 開始計時。當 PT 正在計時時,加上在 IN 輸入的信號狀態為“1”時記錄的時間值。累加得到的時間值將寫入到輸出 ET 中,并可以在此進行查詢。當達到當前時間值 PT 時,輸出 Q的信號狀態為“1”。即使輸入 IN 的信號狀態變為“0”,輸出 Q 仍會保持置位為“1”。
無論啟動輸入的信號狀態如何,輸入 R 都將復位輸出 ET 和 Q。
“時間累加器”指令可以放置在程序段的中間或者末尾。它需要一個前導邏輯運算。
每次調用“時間累加器”指令,必須為其分配一個用于存儲實例數據的 IEC 定時器。
對于 S7-1200 CPU
IEC 定時器是一個 IEC_TIMER 或 TONR_TIME 數據類型的結構,可如下聲明:
- 聲明為一個系統數據類型為 IEC_TIMER 的數據塊(例如,“MyIEC_TIMER”)
- 聲明為塊中“Static”部分的 TONR_TIME 或 IEC_TIMER 類型的局部變量(例如,#MyIEC_TIMER)
對于 S7-1500 CPU
IEC 定時器是一個 IEC_TIMER、IEC_LTIMER、TONR_TIME 或 TONR_LTIME 數據類型的結構,可如下聲明:
- 聲明為一個系統數據類型為 IEC_TIMER 或 IEC_LTIMER 的數據塊(例如,“MyIEC_TIMER”)
- 聲明為塊中“Static”部分的 TONR_TIME、TONR_LTIME、IEC_TIMER 或 IEC_LTIMER 類型的局部變量(例如,#MyIEC_TIMER)
更新實例數據中的實際值
“時間累加器”中的實例數據根據以下規則更新:
-
IN 輸入
“時間累加器”指令將當前 RLO 與保存在實例數據 IN 參數中上次查詢的 RLO 進行比較。如果指令檢測到 RLO 從“0”變為“1”,則說明出現了一個信號上升沿并繼續進行時間測量。如果 RLO 中的指令檢測到從“1”到“0”的變化,則說明出現了一個信號下降沿并且會中斷時間測量。在“時間累加器”指令處理完畢后,IN 參數的值在實例數據中更新,并作為存儲器位用于下次查詢。
請注意,邊沿檢測將在其他功能寫入或初始化 IN 參數的實際值時中斷。
-
PT 輸入
當邊沿在 IN 輸入處改變時,PT 輸入處的值將寫入實例數據中的 PT 參數。
-
R 輸入
輸入 R 處的信號“1”將復位并阻斷時間測量。IN 輸入處的邊沿會被忽略。輸入 R 處的信號“0”將再次啟用時間測量。
-
Q 和 ET 輸出
Q 和 ET 輸出的實際值在以下情況下更新:
-
當輸出 ET 或 Q 互連時,調用該指令。
或
-
訪問 Q 或 ET。
如果輸出未互連并且還未被查詢,則不更新 Q 和 ET 輸出的當前時間值。即使在程序中跳過該指令,也不會對輸出進行更新。
“時間累加器”指令的內部參數用以計算 Q 和 ET 的時間值。請注意,時間測量將在其他功能寫入或初始化指令的實際值時中斷。
-
危險
**重新初始化實際值的危險 **
在時間測量時,重新初始化 IEC 定時器的實際值會破壞 IEC 定時器的功能。更改實際值可能會導致程序和實際過程之間不一致。這會對財產和人身造成造成嚴重損害。 以下功能可導致實際值重新初始化:
- 通過重新初始化加載塊
- 將快照加載為實際值
- 控制或強制執行實際值
- “WRIT_DBL”指令
在執行這些功能前,請采取以下預防措施:
- 在覆蓋實際值之前,應確保設備始終處于安全狀態。
- 在初始化 IEC 定時器的實際值前,請確保定時器已計時結束。
- 如果使用快照覆蓋實際值,請確保是在系統處于安全狀態時拍攝的快照。
- 確保程序在傳輸期間不讀寫受影響的數據。
參數
下表列出了“接通延時”指令的參數:
參數 | 聲明 | 數據類型 | 數據類型 | 存儲區 | 存儲區 | 說明 |
---|---|---|---|---|---|---|
S7-1200 | S7-1500 | S7-1200 | S7-1500 | |||
IN | Input | BOOL | BOOL | I、Q、M、D、L 或常量 | I、Q、M、D、L、T、C、P 或常量 | 啟動輸入 |
R | Input | BOOL | BOOL | I、Q、M、D、L 或常量 | I、Q、M、D、L、P 或常量 | 復位輸入 |
PT | Input | TIME | TIME、LTIME | I、Q、M、D、L 或常量 | I、Q、M、D、L、P 或常量 | 時間記錄的最長持續時間。 PT 參數的值必須為正數。 |
Q | Output | BOOL | BOOL | I、Q、M、D、L | I、Q、M、D、L、P | 超出時間值 PT 之后要置位的輸出。 |
脈沖時序圖
下圖為“時間累加器”指令的脈沖時序圖:
示例
以下示例說明了該指令的工作原理:
下表將通過具體的操作數值對該指令的工作原理進行說明:
參數 | 操作數 | 值 |
---|---|---|
IN | Tag_Start | 信號躍遷“0”=>“1” |
PT | Tag_PresetTime | T#10s |
Q | Tag_Status | FALSE;10 秒后變為 TRUE |
ET | Tag_ElapsedTime | 信號躍遷“0”=>“1” 時間 T#10s 超出。 5 秒后發生信號躍遷“1”=>“0”: 操作數“Tag_ElapsedTime”中的時間仍在 T#5s 中計時。 大約 2 秒后重新發生信號躍遷“1”=>“0”: 操作數“Tag_ElapsedTime”中的時間繼續在 T#5s 中計時。 |
當“Tag_Start”操作數的信號狀態從“0”變為“1”時,PT 參數預設的時間開始計時。只要操作數“Tag_Start”的信號狀態為“1”,該時間就繼續計時。當操作數“Tag_Start”的信號狀態從“1”變為“0”時,計時將停止,并記錄操作數 Tag_ElapsedTime 中的當前時間值。當操作數“Tag_Start”的信號狀態從“0”變為“1”時,將繼續從發生信號躍遷“1”到“0”時記錄的時間值開始計時。達到 PT 參數中指定的時間值時,“Tag_Status”操作數的信號狀態將置位為“1”。當前時間值存儲在“Tag_ElapsedTime”操作數中。
**注:**以上部分內容來之博圖V16幫助文檔。
