|
前面以幾個較簡單的程序案例學習了一下高速計數器的應用,那么今天就做幾個稍微復雜一些的程序案例,提高一下對高速計數器的掌握程度和熟練應用。 1、用編碼器測量電機轉速與頻率 主程序: 子程序: 中斷程序: 以上的程序中,在主程序中,用I0.7的上升沿調用高速計數器初始化子程序,然后做一個高速計數器初始化的子程序,首先是定義控制字節(jié),送16#F8到SMB37,定義為加計數更新當前值,這里沒有寫入初始值和預設值,定義的是高速計數器HSC0和HSC模式1,然后激活高速計數器,還做了高速計數器中斷,我們設置定時中斷0的時間間隔為100ms,因為SMB34的定時中斷0為中斷事件號10,我們建立中斷程序0和中斷事件10的中斷連接,并全局允許中斷。 然后再看一下中斷程序,因為是100ms的定時中斷,每100ms執(zhí)行一次中斷程序。我們就用100ms計算的脈沖個數,再乘以600化成1分鐘的脈沖個數,再除于分辨率就是等于轉速,程序中的500就是編碼器的分辨率。而對于編碼器的頻率的計算,我們有這樣一個公式,頻率/工頻50Hz=轉速/工頻下的轉速,所以頻率=(轉速/工頻下的轉速)*工頻50Hz,這里我們先把雙整數的轉速轉換成實數,再除以工頻下的轉速1488.0,再乘以工頻50.0Hz,那么就得到了編碼器的頻率了。 2、用編碼器測量機床位置,不論機床朝正方向移動或朝反方向移動,都能知道機床的當前位置,有一原點位置感應開關I0.7,當原點位置感應開關接通時,機床的當前位置為0。假設編碼器的分辨率為1024,絲桿的進給量即轉1圈移動的位置為10,計算公式是當前值除以分辨率,再乘于進給量) 主程序:
子程序:
以上的程序中,首先做一個高速計數器初始化的子程序,首先是定義控制字節(jié),送16#F8到SMB37,定義為加計數更新當前值,這里沒有寫入初始值和預設值,定義的是高速計數器HSC0和HSC模式1,然后激活高速計數器。 在主程序中,用I0.7的上升沿調用高速計數器初始化子程序。然后是做機床朝正方向移動的控制,做個起保停程序,當I0.3接通時,Q0.0接通并自鎖,在Q0.0接通的上升沿傳送16#B8到SMB37(加計數不更新當前值),同時激活高速計數器。然后是做機床朝反方向移動的控制,做個起保停程序,當I0.4接通時,Q0.1接通并自鎖,在Q0.1接通的上升沿傳送16#B0到SMB37(減計數不更新當前值),同時激活高速計數器。 后面還做了一個用SM0.1常閉觸點的上升沿來調用高速計數器初始化的子程序,并且用SM0.1的常開觸點來驅動傳送指令傳送VD1000的值到SMD38,用SM0.1的常閉觸點來驅動傳送指令傳送HC0的值到VD1000,這里是為了實現停電保持功能。PLC從STOP撥向RUN時,在第一個掃描周期之后會傳送HC0的計數值到VD1000里面進行存儲,當PLC斷電后再從STOP撥向RUN時,SM0.1接通一個掃描周期,把VD1000存儲的計數器傳到到SMB38,那么當前值就是存儲在VD1000里面的值。然后再做一個計算,把雙整數HC0的當前值轉換成實數,再進行HC0的當前值除以分辨率1024.0,再乘于進給量10.0,這樣就可以測量出機床位置。 那么以上就是一些簡單的高速計數器的應用,比較詳細的講了一下,可以理解嗎? |
|
|
來自: PLC發(fā)燒友 > 《西門子PLC技術文章》