通過上次的學(xué)習(xí),我們應(yīng)該已經(jīng)知道可以通過修改SM存儲區(qū)(包括控制字節(jié)),然后執(zhí)行PLS指令來改變PTO或PWM波形。除了前面學(xué)習(xí)的使用步驟和一些使用要點,我們還要知道的就是PTO狀態(tài)字節(jié)的空閑位(SM66.7或SM76.7),它標(biāo)志著脈沖輸出完成。另外,在脈沖輸出完成時,我們還可以利用脈沖發(fā)送完成中斷,使程序跳轉(zhuǎn)到中斷服務(wù)程序進(jìn)行執(zhí)行。那么就補充這幾點內(nèi)容。下面我們做利用一個脈沖輸出指令做電機正反轉(zhuǎn)控制的例子。
主程序:
高速計數(shù)器子程序:
高速脈沖輸出子程序:
中斷程序:
我們首先先做一個高速計數(shù)子程序和脈沖輸出子程序,在高速計數(shù)器子程序中,首先是定義控制字節(jié),送16#F8到SMB37,定義為加計數(shù)更新當(dāng)前值,傳送0到SMD38寫入初始值,定義的是高速計數(shù)器HSC0和HSC模式12,然后激活高速計數(shù)器,還做了高速計數(shù)器中斷,PTO0完成中斷的事件為中斷事件號19,我們建立中斷程序0和中斷事件19的中斷連接,并全局允許中斷。
而在高速脈沖輸出子程序里面,我們定義一下接口,定義周期io_time為LW0,為IN類型的,定義脈沖數(shù)io_NO為LD2,也是為IN類型的,然后寫子程序。首先傳送16#85到SMB67中定義控制字節(jié),這里選擇的是PTO模式、單段、1us/周期、裝入周期和脈沖數(shù)的情況(控制字節(jié)的定義可以參考PTO/PWM控制字節(jié)表),并傳送LW0到SMW68中寫入周期值,傳送LD2到SMD72中寫入脈沖數(shù),最后執(zhí)行PLS指令。那么這樣是做了一個帶功能參數(shù)的子程序,之后在主程序中可以對這個帶功能參數(shù)的子程序進(jìn)行調(diào)用。
然后我們編寫主程序,在主程序的網(wǎng)絡(luò)一中,首先用SM0.1首次掃描驅(qū)動高速計數(shù)器子程序進(jìn)行高速計數(shù)初始化,同時對Q0.0的過程映像區(qū)清零,同時也對高速脈沖輸出進(jìn)行初始化。在網(wǎng)絡(luò)中,我們用I0.2的上升沿來驅(qū)動立即置位指令,立即置位Q0.2,同時調(diào)用高速脈沖輸出子程序,周期設(shè)為100us,脈沖為10000個,同時還要傳送16#F8到SMB37并執(zhí)行HSC指令進(jìn)行加計數(shù)并更新當(dāng)前值。那么就就是說當(dāng)我們接通I0.2時,會在I0.2的上升沿立即置位Q0.2,電機正轉(zhuǎn),100us發(fā)10000個脈沖,同時高速計數(shù)器進(jìn)行加計數(shù)。因為建立了脈沖完成中斷,那么當(dāng)脈沖發(fā)生完成時,會進(jìn)入到中斷程序進(jìn)行執(zhí)行。
那么我們就可以在中斷程序中編寫反轉(zhuǎn)的控制,因為原來是正轉(zhuǎn),那么Q0.2是接通的,那么我們就用Q0.2的常開觸點來驅(qū)動立即復(fù)位指令,立即復(fù)位Q0.2,同時調(diào)用高速脈沖輸出子程序,周期設(shè)為200us,脈沖為10000個,同時還要傳送16#B0到SMB67并執(zhí)行HSC指令進(jìn)行減計數(shù)并不更新當(dāng)前值。那么就是說進(jìn)入中斷時會立即復(fù)位Q0.2,電機反轉(zhuǎn),200us發(fā)10000個脈沖,同時高速計數(shù)器進(jìn)行減計數(shù)。
那么對于這樣一個例子,應(yīng)用到了帶參數(shù)的子程序調(diào)用、中斷和高速計數(shù)器的內(nèi)容,會不會比較難以理解呢,如果覺得有些模糊的話,可以回看一下前面中斷和高速計數(shù)器的內(nèi)容,這樣可以加深印象呢。
作者:蔡慧滎
聯(lián)系客服