如何在高速計數器斷電或停機后實現數據保持?
答: 有兩種方法,分別使用CTRL_HSC指令和CTRL_HSC_EXT指令。
首先配置高速計數器:
1
在設備視圖>HSC_1>屬性>常規,啟用該高速計數器。

圖 01
2在設備視圖>HSC_1>屬性>功能,定義計數類型為計數。

圖 02
3在設備視圖>HSC_1>屬性>I/O地址,使用缺省地址1000作為高速計數器地址。

圖 03
方法1:使用CTRL_HSC指令
1
添加一個新的 DB 命名為 DB HSC retain,并且創建一個DINT數據元素,命名為HSC_1用于保存高速計數器的值。為了實現這個功能,HSC_1通過勾選保持項實現數據保持。

圖 04
2插入 Cyclic interrupt (循環中斷)OB201,設置中斷時間為 10 ms (也可以根據需要改變這個時間)。然后在 OB201 中將高速計數器的值 ID1000:P 送到 "DB HSC retain".HSC_1 中。這樣,高速計數器的值每10ms 送到 DB 中保存。

圖 05
3創建Startup(啟動OB)OB100,并且編程將保存的數值 "DB HSC retain".HSC_1 送到 NEW_CV,并且置位 CV 位。使得在CPU 啟動時,保存的值被設置成當前值。

圖 06
4
在 OB1 中編程 CTRL_HSC ,再將保存的值設為當前值后,復位 CV 位。

圖07
方法2:使用CTRL_HSC_EXT指令
1
添加一個新的 DB 命名為 DB HSC retain,并且創建一個DINT數據元素,命名為HSC_1用于保存高速計數器的值。為了實現這個功能,HSC_1通過勾選保持項實現數據保持。此外創建系統數據類型HSC_Count的變量Static_1用于CTRL_HSC_EXT指令。

圖 08
2
插入 Cyclic interrupt (循環中斷)OB201,設置中斷時間為 10 ms (也可以根據需要改變這個時間)。然后在 OB201 中將高速計數器的值 ID1000:P 送到 "DB HSC retain".HSC_1 中。這樣,高速計數器的值每10ms 送到 DB 中保存。

圖 10
4在 OB1 中編程 CTRL_HSC_EXT ,將保存的值設為當前值后,復位觸發位。

圖 11
斷電停機或復位后,高速計數器的值會復位到什么值?
答: CPU 斷電或重啟后,高速計數器的值會復位到初始值;如果執行了外部復位,高速計數器的值會復位為0。
不編寫 CTRL_HSC,高速計數器是否可以計數?
答: 只要在硬件配置里使能并組態了高速計數器,不編寫 CTRL_HSC,高速計數器就可以正常計數。CTRL_HSC 只是完成參數寫入的功能。
為什么高速計數器的數值不增加,總是停在一個固定的值?
答: 如果編程了 CTRL_HSC,當置位 CV 將 NEW_CV 寫入當前值后,CV位不會自動復位為0,這時程序會一直將 NEW_CV寫入當前值,導致高速計數器不繼續計數而保持在固定的 NEW_CV 值。因此必須編程復位 CV,才能避免該錯誤的發生。
如果高速計數器定義為 "運動軸" 計數,程序中是否還可以訪問 ID1000:P 的值?
答: 如果高速計數器用做內部的運動控制的計數,此時程序中不能再訪問 ID1000:P 的值,否則會造成 I/O 訪問錯誤。如果沒有編程GET_ERROR 或 GET_ERR_ID 指令,還會造成 CPU 停機。
為什么 CTRL_HSC 的 "STATUS" 會返回 "80C0" 多次訪問高速計數器錯誤?
答: 如果高速計數器用做內部的運動控制的計數,則CTRL_HSC 的 "STATUS" 就會返回 "80C0" 多次訪問高速計數器錯誤。
使用信號板 SB1221 4DI (CPU V3.0及早期版本)最多可以接入多少組高速計數器 ?
答: 最多2組,所使用的高速計數器號可以是 HSC1、HSC2、HSC5、HSC6其中2組。
為什么S7-1200 高速計數器只能檢測到低頻率的脈沖信號?
答: 在 S7-1200 CPU 和 SB 信號板的屬性中,數字量輸入通道的輸入濾波器默認設置值為 6.4 millisec,該輸入濾波時間對應的高速計數器能檢測到的最大頻率為 78Hz。
因此如果使用該默認值,且 S7-1200 CPU 或 SB 信號板接入的高速輸入脈沖超過 78Hz,則 S7-1200 CPU 或SB 信號板過濾掉該頻率的輸入脈沖。
要正確使用 S7-1200 CPU 和 SB 信號板高速計數功能,需要根據實際接入的高速輸入脈沖最大頻率,在"屬性—常規—數字量輸入通道設置"輸入濾波器時間。
V4.0 或更高版本的 S7-1200 CPU 和 SB 信號板,每個數字量輸入點都可設置輸入濾波器時間, 如下圖 12、13 所示:

圖 12. 設置 S7-1200 CPU 輸入濾波器時間

圖 13. 設置 SB 信號板輸入濾波器時間
下表 1 顯示了輸入濾波器時間和可檢測到的最大輸入頻率:
輸入濾波器時間可檢測到的最大輸入頻率0.1 microsec1MHz0.2 microsec1MHz0.4 microsec1MHz0.8 microsec625kHz1.6 microsec312kHz3.2 microsec156kHz6.4 microsec78kHz10 microsec50kHz12.8 microsec39kHz20 microsec25kHz0.05 millisec10kHz0.1 millisec5kHz0.2 millisec2.5kHz0.4 millisec1.25kHz0.8 millisec625Hz1.6 millisec312Hz3.2 millisec156Hz6.4 millisec78Hz10 millisec50Hz12.8 millisec39Hz20 millisec25Hz
表 1 輸入濾波器時間和可檢測到的最大輸入頻率
S7-1200 的高速計數器輸入通道是否固定?
答: 早期固件版本的高速計數器輸入通道是固定的。
V4.0 或更高版本的 S7-1200 的高速計數器輸入通道可以在其屬性中更改。如圖 14 所示:

圖 14. 更改高速計數器輸入通道
S7-1200 CPU 最多支持多少個高速計數器?
答: 早期固件版本的S7-1200 CPU 中,CPU 1211C 最多支持3個單相的高速計數器,CPU 1212C 最多支持 4 個單相的高速計數器,CPU1214C 和 CPU1215C最 多支持6個單相的高速計數器。
V4.0或更高版本的所有型號的S7-1200 CPU 都支持最多6個單相高速計數器。
需要注意的是V4.0或更高版本的 S7-1200 CPU 有默認的高速計數器通道地址,而 CPU 1211C 數字量輸入地址僅有 6 個,為I0.0-I0.5,CPU 1212C 數字量輸入地址僅有8個,為I0.0-I0.7。
因此如果需要使用 CPU 1211C 的 HSC4, HSC5, HSC6 或 CPU 1212C 的 HSC5, HSC6 ,則需要更改其硬件輸入地址到有效的范圍才能正常使用。以 CPU1211C 舉例,如圖 15、16、17所示:

圖 15. 更改 HSC4 的硬件輸入地址

圖 16. 更改 HSC5 的硬件輸入地址

圖 17. 更改 HSC6 的硬件輸入地址