高速計數器指令及舉例
1. 高速計數器指令
高速計數器指令有兩條:高速計數器定義指令HDEF、高速計數器指令HSC。指令格式如表6-9所示。
(1)高速計數器定義指令HDEF。指令指定高速計數器(HSCx)的工作模式。工作模式的選擇即選擇了高速計數器的輸入脈沖、計數方向、復位和起動功能。每個高速計數器只能用一條“高速計數器定義”指令。
(2)高速計數器指令HSC。根據高速計數器控制位的狀態和按照HDEF指令指定的工作模式,控制高速計數器。參數N指定高速計數器的號碼。
表6-9 高速計數器指令格式
LAD |
|
|
STL |
HDEF HSC,MODE |
HSC N |
功能說明 |
高速計數器定義指令HDEF |
高速計數器指令HSC |
操作數 |
HSC:高速計數器的編號,為常量(0~5)數據類型:字節 MODE工作模式,為常量(0~11) 數據類型:字節 |
N:高速計數器的編號,為常量(0~5)數據類型:字 |
ENO=0的出錯條件 |
SM4.3(運行時間),0003(輸入點沖突), 0004(中斷中的非法指令),000A(HSC重復定義) |
SM4.3 (運行時間),0001(HSC在HDEF之前),0005(HSC/PLS同時操作) |
2. 高速計數器指令的使用
(1)每個高速計數器都有一個32位當前值和一個32位預置值,當前值和預設值均為帶符號的整數值。要設置高速計數器的新當前值和新預置值,必須設置控制字節(表6-7),令其第五位和第六位為1,允許更新預置值和當前值,新當前值和新預置值寫入特殊內部標志位存儲區。然后執行HSC指令,將新數值傳輸到高速計數器。當前值和預置值占用的特殊內部標志位存儲區如表6-10所示。
表6-10 HSC0-HSC5當前值和預置值占用的特殊內部標志位存儲區
要裝入的數值 |
HSC0 |
HSC1 |
HSC2 |
HSC3 |
HSC4 |
HSC5 |
新的當前值 |
SMD38 |
SMD48 |
SMD58 |
SMD138 |
SMD148 |
SMD158 |
新的預置值 |
SMD42 |
SMD52 |
SMD62 |
SMD142 |
SMD152 |
SMD162 |
除控制字節以及新預設值和當前值保持字節外,還可以使用數據類型HC(高速計數器當前值)加計數器號碼(0、1、2、3、4或5)讀取每臺高速計數器的當前值。因此,讀取操作可直接讀取當前值,但只有用上述HSC指令才能執行寫入操作。
(2)執行HDEF指令之前,必須將高速計數器控制字節的位設置成需要的狀態,否則將采用默認設置。默認設置為:復位和起動輸入高電平有效,正交計數速率選擇4×模式。執行HDEF指令后,就不能再改變計數器的設置,除非CPU進入停止模式。
(3)執行HSC指令時,CPU檢查控制字節和有關的當前值和預置值。
3. 高速計數器指令的初始化
高速計數器指令的初始化的步驟如下:
(1)用首次掃描時接通一個掃描周期的特殊內部存儲器SM0.1去調用一個子程序,完成初始化操作。因為采用了子程序,在隨后的掃描中,不必再調用這個子程序,以減少掃描時間,使程序結構更好。
(2) 在初始化的子程序中,根據希望的控制設置控制字(SMB37、SMB47、SMB137、SMB147、SMB157),如設置SMB47=16#F8,則為:允許計數,寫入新當前值,寫入新預置值,更新計數方向為加計數,若為正交計數設為4×,復位和起動設置為高電平有效。
(3)執行HDEF指令,設置HSC的編號(0-5),設置工作模式(0-11)www.tuo13886.net.cn。如HSC的編號設置為1,工作模式輸入設置為11,則為既有復位又有起動的正交計數工作模式。
(4)用新的當前值寫入32位當前值寄存器(SMD38,SMD48,SMD58 ,SMD138, SMD148, SMD158)。如寫入0,則清除當前值,用指令MOVD 0,SMD48實現。
(5)用新的預置值寫入32位預置值寄存器(SMD42 ,SMD52, SMD62, SMD142 ,SMD152, SMD162)。如執行指令MOVD 1000,SMD52,則設置預置值為1000。若寫入預置值為16#00,則高速計數器處于不工作狀態。
(6)為了捕捉當前值等于預置值的事件,將條件CV=PV中斷事件(事件13)與一個中斷程序相聯系。
(7)為了捕捉計數方向的改變,將方向改變的中斷事件(事件14)與一個中斷程序相聯系。
(8)為了捕捉外部復位,將外部復位中斷事件(事件15)與一個中斷程序相聯系。
(9)執行全局中斷允許指令(ENI)允許HSC中斷。
(10)執行HSC指令使S7-200對高速計數器進行編程。
(11)結束子程序。
【例6-4】高速計數器的應用舉例。
(1)主程序
如圖6-11所示,用首次掃描時接通一個掃描周期的特殊內部存儲器SM0.1去調用一個子程序,完成初始化操作。
(2)初始化的子程序
如圖6-12所示,定義HSC1的工作模式為模式11(兩路脈沖輸入的雙相正交計數,具有復位和起動輸入功能),設置SMB47=16#F8(允許計數,更新新當前值,更新新預置值,更新計數方向為加計數,若為正交計數設為4×,復位和起動設置為高電平有效)。HSC1的當前值SMD48清零,預置值SMD52=50,當前值 = 預設值,產生中斷(中斷事件13),中斷事件13連接中斷程序INT-0。
(3)中斷程序INT-0,如圖6-13所示。
LD SM0.0
MOVD +0 SMD48 // HSC1的當前值清0
MOVB 16#C0 SMB47 //只寫入一個新當前值,
預置值不變,計數方向不變,
HSC1允許計數
HSC 1 //執行HSC1指令