
打開所需串口后,需要考慮串口通信的時機。在接收或發(fā)送數(shù)據(jù)過程中,可能需要監(jiān)視并響應(yīng)一些事件和錯誤,所以事件驅(qū)動是處理串行端口交互作用的一種非常有效的方法。使用OnComm事件和CommEvent屬性捕捉并檢查通信事件和錯誤的值。發(fā)生通信事件或錯誤時,將觸發(fā)OnComm事件,CommEvent屬性的值將被改變,應(yīng)用程序檢查CommEvent屬性值并作出相應(yīng)的反應(yīng)。在程序中用ClassWizard為CMSComm控件添加OnComm消息處理函數(shù):

3.2系統(tǒng)初始化
在執(zhí)行應(yīng)用程序時首先必須進行初始化,其初始化程序框圖如圖2所示。

運行程序時,視圖執(zhí)行初始化操作函數(shù)OnInitialUpdate(),該函數(shù)內(nèi)要先打開串口1,通過設(shè)置對象m_ContrCom各成員函數(shù),設(shè)置好各通信參數(shù):

然后經(jīng)過一個位置選擇對話框,通常選“保持原來的位置”,然后就發(fā)出詢問各軸的坐標值的指令。流程如圖2所示。除x軸是直接發(fā)送坐標詢問指令獲得坐標數(shù)據(jù)外,其他2個軸都是通過連續(xù)的2個定時器來詢問坐標的,定時器響應(yīng)后執(zhí)行圖3的程序。此后就進入待操作畫面。
3.3運行操作的編程
在電機運動操作區(qū)的各文本框內(nèi)輸入某一軸向的位移值、速度值,按下“運行”按鈕,則程序會把位移值轉(zhuǎn)化為字符型的實際要運行的步數(shù),通過串口送到SC3步進電機控制器,控制對應(yīng)的軸的電機運行相應(yīng)的步數(shù)。運行結(jié)束后,SC3會返回一個“OK”字符至串口,PC機接受到這個字符后,就知道電機運行結(jié)束,然后向串口發(fā)送坐標詢問指令,SC3會回送有關(guān)坐標數(shù)據(jù),PC機接到這些數(shù)據(jù)后進行處理運算并在文本框中顯示出來。這樣就結(jié)束了一個完整的運行操作。
所有主要的PC機和SC3控制器的有關(guān)數(shù)據(jù)通信程序都在MSComm控件內(nèi)。包括所有的接受、識別返回字符,各軸向坐標的運算和顯示。
當步進運動完畢后,返回到PC機的數(shù)據(jù)為步進電機已經(jīng)運行的步數(shù),根據(jù)這個步數(shù)要計算相應(yīng)的坐標,必須知道各軸的脈沖當量。步進電機每走一步,電移臺的位移等于脈沖當量,即分辨率。
坐標值=初始坐標+運行步數(shù)*脈沖當量
平移臺脈沖當量=
絲杠導(dǎo)程mm*步距角/(360*細分數(shù))
旋轉(zhuǎn)臺(x軸)的脈沖當量(度)=
步進電機步距角/(傳動比*細分數(shù))
其中細分數(shù)是由控制器后面板撥碼開關(guān)設(shè)置的。
步進電機的步距角都為1.8°,縱軸的絲杠導(dǎo)程為1 mm,橫軸為4 mm,旋轉(zhuǎn)軸傳動比為180∶1,細分數(shù)為2,則根據(jù)以上公式可得出:
縱軸(z)脈沖當量=1/100
橫軸(y)脈沖當量=1/400
旋轉(zhuǎn)軸(x)脈沖當量=1/200

4結(jié)語
在PC機和單片機之間實現(xiàn)串行通信控制是近幾年很受歡迎、較為流行的方法。本文介紹的運用MSComm控件來編制的由PC機對步進電機直接控制的應(yīng)用軟件具有友好的人機交互界面,且編程簡便、工作可靠,是一種切實有效的方法。同時,這種串行控制方法和技術(shù)還可運用于相應(yīng)的工業(yè)控制場合。
參考文獻
[1]李朝青.PC機及單片機數(shù)據(jù)通信技術(shù)M].北京:北京航空航天大學(xué)出版社,1999.
[2][美]Joe Campbell.串行通信C程序員指南[M].徐國定譯.北京:清華大學(xué)出版社,1995.
[3]Herbert Schildt,Schildt′sExpert C++[M].MCGrawHill,1998.
[4][美]Young Michael J.Visual C++6從入門到精通[M]邱仲潘,等譯.北京:電子工業(yè)出版社,1999.
[5]向世明.Visual C++數(shù)字圖像與圖形處理[M].北京:電子工業(yè)出版社,2002.





