計數器
可使用計數器指令對內部程序事件和外部過程事件進行計數。
● 輸入參數 CU 的值從 0 變為 1 時,「加計數」計數器 (CTU) 就會加 1。
● 輸入參數 CD 的值從 0 變為 1 時,「減計數」計數器 (CTD) 就會減 1。
● 「加計數和減計數」計數器 (CTUD) 在加計數 (CU) 或減計數 (CD) 輸入從 0 轉換為1時加 1 或減 1。
要注意的是每個計數器都使用數據塊中存儲的結構來保存計數器數據。 對於 SCL,必須首先為各個計數器指令創建 DB 方可引用相應指令。 對於 LAD 和 FBD,STEP 7 會在插入指令時自動創建 DB。
用戶程序中可以使用的計數器數僅受 CPU 存儲器容量限制。各個計數器使用 3 個字節(表示 SInt 或 USInt)、6 個字節(表示 Int 或 UInt)或 12 個字節(表示 DInt 或UDInt)。
如上時序圖顯示了具有無符號整數計數值的 CTU 計數器的運行(其中 PV = 3)。
● 如果參數 CV(當前計數值)的值大於或等於參數 PV(預設計數值)的值,則計數器輸出參數 Q = 1。
● 如果復位參數 R 的值從 0 變為 1,則 CV 復位為 0。
如上時序圖顯示了具有無符號整數計數值的 CTD 計數器的運行(其中 PV = 3)。
● 如果參數 CV(當前計數值)的值等於或小於 0,則計數器輸出參數 Q = 1。
● 如果參數 LOAD 的值從 0 變為 1,參數 PV(預設值)的值將作為新的 CV 裝載到計
數器。
如上時序圖顯示了具有無符號整數計數值的 CTUD 計數器的運行(其中 PV = 4)。
● 如果參數 CV(當前計數值)的值等於或大於參數 PV(預設值)的值,則計數器輸出參數 QU = 1。
● 如果參數 CV 的值小於或等於零,則計數器輸出參數 QD = 1。
● 如果參數 LOAD 的值從 0 變為 1,則參數 PV 的值將作為新的 CV 裝載到計數器。
● 如果復位參數 R 的值從 0 變為 1,則 CV 復位為 0。
脈衝寬度調製 (PWM)
CTRL_PWM 指令可提供佔空比可變的固定循環時間輸出。 PWM 輸出以指定頻率(循環時間)啟動之後將連續運行。脈衝寬度會根據需要進行變化以影響所需的控制。
CTRL_PWM 指令將參數信息存儲在 DB 中。 數據塊的參數由 CTRL_PWM 指令控制。
CPU 第一次進入 RUN 模式時,脈衝寬度將設置為在設備配置中組態的初始值。根據需要將值寫入設備配置中指定的字長度輸出 (Q) 地址(「輸出地址」/「起始地址」)以更改脈衝寬度。 使用指令(例如,Move、Convert、數學運算或 PID)將指定的脈衝寬度寫入相應的字長度輸出 (Q)。 必須使用輸出值的有效範圍(百分數、千分數、萬分數或 S7 模擬格式)。
佔空比可表示為循環時間的百分數或相對量(例如,0 到 1000,或者 0 到 10000)。 脈衝寬度可從 0(無脈衝,始終關閉)到滿刻度(無脈衝,始終打開)變化。
PWM 輸出可在 0 到滿量程之間變化,因此可提供在許多方面都與模擬量輸出相同的數字量輸出。 例如,PWM輸出可用於控制電機的速度,速度範圍可以是從停止到全速;也可用於控制閥的位置,位置範圍可以是從閉合到完全打開。
高速計數器 (HSC)
使用高速計數器 (HSC, High-Speed Counter) 對發生速率快於 OB 執行速率的事件進行計數。 利用CTRL_HSC指令控制 HSC 的運行。
在 CPU 的設備配置中對每個 HSC 的參數進行組態: 計數模式、I/O 連接、中斷分配以及是作為高速計數器還設備來測量脈衝頻率。
CTRL_HSC 指令通常放置在觸發計數器硬體中斷事件時執行的硬體中斷 OB 中。 例如,如果 CV=RV 事件觸發計數器中斷,則硬體中斷 OB 代碼塊執行 CTRL_HSC 指令,並且可通過裝載 NEW_RV 值更改參考值。
在 CTRL_HSC 參數中沒有提供當前計數值。 在高速計數器硬體的組態期間分配存儲當前計數值的過程映像地址。 可以使用程序邏輯直接讀取計數值。 返回程序的值將是讀取計數器瞬間的正確計數。 計數器仍將繼續對高速事件計數。 因此,程序使用舊的計數值完成處理前,實際計數值可能會更改。
可以通過用戶程序來修改某些 HSC 參數,從而對計數過程提供程序控制:
● 將計數方向設置為 NEW_DIR 值
● 將當前計數值設置為 NEW_CV 值
● 將參考值設置為 NEW_RV 值
● 將周期值(限頻率測量模式)設置為 NEW_PERIOD 值
如果執行 CTRL_HSC 指令後以下布爾標記值被設置為 1,則相應的 NEW_xxx 值將裝載到計數器。 執行一次CTRL_HSC 指令可處理多個請求(同時設置多個標記)。
● 設置 DIR = 1 會裝載 NEW_DIR 值。
● 設置 CV = 1 會裝載 NEW_CV 值。
● 設置 RV = 1 會裝載 NEW_RV 值。
● 設置 PERIOD = 1 會裝載 NEW_PERIOD 值。
HSC 的運行
高速計數器 (HSC) 對發生速率快於 OB 執行速率的事件進行計數。 如果待計數事件的發生速率處於 OB 執行速率範圍內,可使用 CTU、CTD 或 CTUD 計數器指令。 如果事件的發生速率快於 OB 的執行速率,則應使用 HSC。CTRL_HSC 指令允許用戶程序通過程序更改一些 HSC 參數。
例如:可以將 HSC 用做增量軸編碼器的輸入。 該軸編碼器每轉提供指定數量的計數值以及一個復位脈衝。 來自軸編碼器的時鐘和復位脈衝將輸入到 HSC 中。
用戶程序將若干預設值中的第一個值裝載到 HSC 上,並且在當前計數值小於當前預設值的時段內計數器輸出一直由用戶程序保持激活。當計數器值等於參考值(或 CV =RV)、發生復位及發生方向變化時,用戶程序會對 HSC 進行組態,以提供中斷功能。
每個 CV = RV 中斷事件發生時,用戶程序都會裝載新的參考值,並設置 CV = RV 中斷OB 內的下一輸出狀態。發生復位中斷事件時,用戶程序會裝載第一個參考值,並設置復位中斷 OB 中的第一個輸出狀態,然後重複該循環。
由於中斷發生的頻率遠低於 HSC 的計數速率,因此能夠在對 CPU 掃描周期影響相對較小的情況下實現對高速操作的精確控制。 通過提供中斷,可以在獨立的中斷例程中執行每次的新預設值裝載操作以實現簡單的狀態控制。 (或者,也可在單個中斷例程中處理所有中斷事件。)
選擇 HSC 的功能
所有 HSC 在同一計數器運行模式下的工作方式都相同。 HSC 共有四種基本類型:
● 具有內部方向控制的單相計數器
● 具有外部方向控制的單相計數器
● 具有 2 個時鐘輸入的雙向計數器
● A/B 相正交計數器
用戶可選擇是否激活復位輸入來使用各種 HSC 類型。 如果激活復位輸入(存在一些限制,請參見下表),則它會清除當前值並在您禁用復位輸入之前保持清除狀態。
● 頻率功能: 有些 HSC 模式允許 HSC 被組態(計數類型)為報告頻率而非當前脈衝
計數值。 有三種可用的頻率測量周期: 0.01、0.1 或 1.0 秒。頻率測量周期決定 HSC 計算並報告新頻率值的頻率。 報告頻率是通過上一測量周期內總計數值求出的平均值。 如果該頻率在快速變化,則報告值將是介於測量周期內出現的最高頻率和最低頻率之間的一個中間值。 無論頻率測量周期的設置是什麼,總是會以赫茲為單位來報告頻率(每秒脈衝個數)。
● 計數器模式和輸入: 下表列出了用於與 HSC 相關的時鐘、方向控制和復位功能的輸入。同一輸入不可用於兩個不同的功能,但任何未被其 HSC 的當前模式使用的輸入均可用於其它用途。 例如,如果 HSC1 處於使用內置輸入但未使用外部復位 (I0.3) 的模式下,則 I0.3 可以用於沿中斷或 HSC2。
說明
在設備配置期間分配高速計數器設備使用的數字量 I/O 點。 將數字量 I/O 點的地址分配給這些設備之後,無法通過監視表格中的強制功能修改所分配的 I/O 點的地址值。組態 CPU 時,可以選擇啟用和組態每個 HSC。 CPU 會根據其組態自動為每個 HSC 分配輸入地址。 (某些 HSC 允許選擇是使用 CPU 的板載輸入還是使用 SB 的輸入。)
注意
如下表所示,不同 HSC 的可選信號的默認分配互相重疊。 例如,HSC 1 的可選外部復位使用的輸入與 HSC 2 的其中一個輸入相同。
要始終確保組態 HSC 時任何一個輸入都不會被兩個 HSC 使用。
例如,下表顯示了 CPU 1212C 的板載 I/O 和 SB 兩者的 HSC 輸入分配。 (如果 SB 只有 2 個輸入,則僅輸入4.0 和 4.1 可用。)
● 對於單相: C 為時鐘輸入,[d] 為可選方向輸入,[R] 為可選外部復位輸入。 (復位僅適用於「計數」模式。)
● 對於雙相: CU 為加時鐘輸入,CD 為減時鐘輸入,[R] 為可選外部復位輸入。 (復位僅適用於「計數」模式。)
● 對於 AB 相正交: A 為時鐘 A 輸入,B 為時鐘 B 輸入,[R] 為可選外部復位輸入。(復位僅適用於「計數」模式。)
HSC 1 和 HSC 2 可組態為使用板載輸入或 SB 輸入。HSC 5 和 HSC 6 只能使用 SB 輸入。 HSC 6 只能使用 4 輸入 SB。具有 2 個數字量輸入的 SB 只能提供輸入 4.0 和 4.1。訪問 HSC 的當前值啟用脈衝發生器作為 PTO 時,會向該 PTO 分配一個對應的 HSC。 HSC1 分配給PTO1,HSC2 分配給 PTO2。 分配的 HSC 完全屬於 PTO 通道,並且禁用 HSC 的正常輸出。 HSC 值僅用於內部功能。 生成脈衝時,不能監視當前值(例如,在 ID1000中)。CPU 允許用戶組態最多 6 個高速計數器。 用戶可編輯CPU 的「屬性」(Properties) 來組態各個 HSC 的參數。在用戶程序中使用 CTRL_HSC 指令控制 HSC 的運行。通過選擇該 HSC 的「啟用」(Enable) 選項啟用特定的HSC。
啟用 HSC 之後組態其它參數,例如計數器功能、初始值、復位選項和中斷事件。
那麼在什麼情況下使用CTU、CTD 或 CTUD 計數器指令,又在什麼情況下使用 HSC指令呢?
CU、CD 和 CTUD 指令使用軟體計數器,軟體計數器的最大計數速率會受到其所在 OB 的執行速率的限制。如果待計數事件的發生速率處於 OB 執行速率範圍內,使用 CTU、CTD 或 CTUD 計數器指令。 如果事件的發生速率快於 OB 的執行速率,則應使用 HSC。
我們了解了高速計數器指令那實際編程又是什麼樣子的呢?我們通過下面的實例看一下吧。
1. 計數器類型分為三種:Axis of motion(運動軸),Frequency(頻率測量),Counting(計數)。
2. 計數器模式分為4種:Single phase(單相),Two phase(雙相),AB Quadrature 1X(A/B相正交四倍數)。
3. 輸入源
4. 技術方向選擇,User program (internal direction control)(內部方向控制)
5. 初始計數方向。
1. 是系統指定的高速計數器硬體識別號,這裡填寫1.
2. 「1」為使能更新初值。
3. 「0」新初始值為0。
將此程序下載到CPU以後即可執行。當前值可以在ID1000中讀出。高速計數器的指令塊,若不需要修改硬體組態中的參數,可不需要調用,系統仍然可以計數。
如果感覺文章還不錯歡迎點讚關注評論轉發。