用戶在用光柵尺、磁柵尺接PLC時,接收到的脈沖數總是不對,并且重復定位也不對(首先確認光柵尺沒有問題)。剛開始時一直找不到原因。濾波也設置過了。
最后經過查找,終于找到問題,是輸入設備問題,如下:
應用舉例
假設在旋轉機械上有單相增量編碼器作為反饋,接入到 S7-1200 CPU,要求在計數 25000 個脈沖時,計數器復位,置位 M0.5,并設定新預置值為 50000 個脈沖,當計滿 50000 個脈沖后復位 M0.5,并將預置值再設為 25000,周而復始執行此功能。
針對此應用,選擇 CPU 1214C,高速計數器為:HSC1。模式為:單相計數,內部方向控制,無外部復位。脈沖輸入接入 I0.0,使用 HSC1 的計數值等于參考值 1 中斷(CV=RV)功能實現此應用。
組態步驟:先在設備與組態中,選擇 CPU,單擊屬性,激活高速計數器,并設置相關參數。此步驟必須事先執行,S7-1200 的高速計數器功能必須要先在硬件組態中激活,才能進行下面的步驟。添加硬件中斷塊,關聯相對應的高速計數器所產生的預置值中斷,在中斷塊中添加高速計數器指令塊,編寫修改預置值程序,設置復位計數器等參數。將程序下載,執行功能。
如圖 1 所示,進入 CPU 的硬件視圖。
圖 1. 選中CPU
①展開 PLC,左鍵雙擊設備組態
②在 CPU 硬件視圖,左鍵選中 CPU
如圖 2 所示,啟用高速計數器。
圖 2. 選擇屬性打開組態界面
①左鍵選擇屬性
②在導航欄中選擇“高速計數器(HSC)”,在 HSC1 中選擇“常規”
③勾選“啟用該高速計數器”
如圖 3 所示,設置高速計數器基本設置。
圖 3. 激活高速計數功能
①在 HSC1 中選擇"功能"
②計數類型選擇“計數”
③工作模式選擇“單相”
④計數方向取決于選擇“用戶程序(內部方向控制)”
⑤初始計數方向選擇“加計數”
如圖 4 所示,設置計數器初始值。
圖 4. 計數器初始值
①在 HSC1 中選擇"初始值"
②初始計數器值設置“0”
③初始參考值設置“25000”
如圖 5 所示,組態事件。
圖 5. 事件組態
①在 HSC1 中選擇"事件組態"
②激活“為計數器值等于參考值這一事件生成中斷”
③左鍵點擊該按鈕在彈出頁面選擇所需的硬件中斷
④如果沒有硬件中斷或者沒有所需要的硬件中斷,則左鍵點擊按鈕“新增”,會彈出頁面,如圖 6 所示
圖 6. 添加新的硬件中斷
①選擇"Hardware interrupt"
②注意該硬件中斷的中斷 OB 編號
③左鍵點擊“確定”按鈕
如圖 7 所示,設置硬件輸入點。
圖 7. 設置輸入點
①在 HSC1 中選擇"硬件輸入"
②在時鐘發生器輸入中選擇所需的 I 點,例如例子中的“I0.0”
如 圖8 所示,查看 HSC 的計數值地址。
圖 8. 計數值地址
①在 HSC1 中選擇"I/O 地址"
②起始地址到結束地址為 HSC 實際計數器值的地址,圖中地址為 ID1000。
③組織塊和過程映像一般設置默認,可以設置計數值在 OB 更新。
如圖 9 所示,設置 I 點的輸入濾波器時間。
圖 9. 輸入濾波器
①在 CPU 或者信號板中找到使用的通道
②在輸入濾波器設置合適的濾波值,固件 V4.0 版本開始需要設置,具體可以參考頁面,為什么 S7-1200 高速計數器只能檢測到低頻率的脈沖信號。
至此硬件組態部分已經完成,下面進行程序編寫。
如圖 10 所示,展開項目樹中的 PLC 的程序塊,選擇所需的硬件中斷。
圖 10. 打開硬件中斷塊
①左鍵雙擊打開所需的硬件中斷
如圖 11 所示,在指令列表中找到工藝指令 -- 計數 -- CTRL_HSC_EXT。
圖 11. 添加高速計數器
①在圖中位置找到所需指令,將指令拖入硬件中斷的程序編輯器,會產生如圖 12 所示的調用選項,只能選擇單個實例,單擊“確定”按鈕。
圖 12. 定義指令背景數據塊
如圖 13 所示,新建 DB,新建變量,數據類型為 HSC_Count。
圖 13. 高速計數器變量
①在數據類型處手動輸入 HSC_Count,輸入完回車確認。
如圖 14 所示,在硬件中斷內編程。
圖 14. 硬件中斷編程
程序段 1: M0.5 作為標志位,在 OB1 個掃描周期置位,參考下面圖 15,該標志位為 1 時指代參考值為 25000 時,為 0 時指代參考值為 50000 時。
當進入中斷時,反轉標志位,并賦值新的參考值。
程序段 2:設置新的當前值為 0,設置新的當前值使能,設置新的參考值使能。
程序段 3:觸發高速計數器指令
①輸入高速計數器標識符,以 HSC1 為例,建議輸入符號名“Local~HSC_1”而非只是數值。
②在 CTRL 處輸入圖 13 處新建的變量。
程序段 4:取消新的當前值使能,取消新的參考值使能。
如圖 15 所示,在 OB1 中編寫程序,初始化標志位 M0.5 以及軟件門,然后將圖 14 中的程序段 3 復制到 OB1 即可。
圖 15. OB1 程序
至此程序編制部分完成,將完成的組態與程序下載到 CPU 后即可執行,當前的計數值可在"DB2".Static_1.CurrentCount 中讀出。