許 明, 劉 旭, 王 學 俊
(1.大連工業大學 機械工程與自動化學院,遼寧 大連 116034;2.大連港旅順港務有限公司 工程技術部,遼寧 大連 116052)
目前,在工業控制領域,PLC 以其強大的功能、完善的指令系統占據著大規模、大批量生產的應用場合;而在小規模生產控制場合中,單片機以其超低的成本價格被絕大多數人所認可[1]。但在較小規模自動控制應用場合中,采用PLC控制會增加控制成本,如果利用單片機控制則會帶來編程復雜、延長設計周期等問題。針對上述情況,作者研發了一種適用于較小規模自動控制場合的微型控制器。
微型控制器以單片機為控制核心,通過數字量輸入、輸出模塊與外部工業設備連接,完成簡單的開關量的邏輯運算、定時、計數、數字量的采集、輸出等功能,實現對外部工業設備控制的目的。
微型控制器主要由PC機軟件、主控模塊及數字量輸入、輸出模塊組成,其配置圖如圖1所示。

圖1 微型控制器配置圖Fig.1 Simple controller device's disposition
微型控制器執行程序的處理在PC 機軟件上完成。該軟件包括執行程序編輯模塊、編譯模塊和下載模塊三部分,軟件的3個模塊分別完成執行程序的編輯、編譯及下載工作。執行程序利用類PLC指令系統編寫,程序編寫完成后經過編譯軟件的編譯生成二進制程序代碼,最后由下載軟件通過串口發送給單片機芯片,實現執行程序在線編輯及下載功能。
微型控制器主控模塊以SST89E516RD 單片機為控制核心芯片,利用芯片所特有的IAP操作模式接收 PC 機發送的執行程序代碼。SST89E516RD 單片機FLASH 存儲器被分成兩個獨立的程序存儲塊,8K字節的二級FLASH 塊能被映射到64K字節低地址空間[2]。將IAP模式應用程序存儲在單片機的Block 1程序存儲區內,利用該應用程序將微型控制器執行程序代碼寫入Block 0程序存儲區,然后通過SFCF[1∶0]位進行存儲塊的切換,達到執行程序的執行目的[3]。
微型控制器通過數字量輸入、輸出模塊與外部工業設備連接。模塊采用可級聯的串行數據寄存器為核心芯片,方便模塊進行擴展、升級,以滿足外部開關量的數量要求。
微型控制器利用單片機的IAP 模式操作完成執行程序的在線下載。該操作包括:存儲器擦除、字節編程、字節校驗等[4]。
微型控制器IAP模式應用程序采用查詢方式接收PC機發送的命令符,根據所接收到的命令符執行相應的IAP操作。程序流程圖如圖2所示。
下載過程通常按以下步驟進行:首先進行塊擦除,其次為字節寫入,最后進行字節校驗。
PC機軟件利用VB6.0面向對象語言編制。通過PC 機軟件實現微型控制器執行程序的處理,該過程需要3個步驟,即:執行程序的編輯、編譯、下載。三者的關系如圖3所示。

圖2 微型控制器程序流程圖Fig.2 Simple controller device's flow block diagram

圖3 PC機軟件流程圖Fig.3 Flow block diagram of PC software
程序編輯模塊采用Rich TextBox控件編制,該控件可用于文本的輸入和編輯,同時為了更好地實現執行程序的編輯、修改功能,軟件設置了編輯下拉菜單,可對Rich TextBox控件內的內容進行剪切、復制、粘貼、查找和替換等操作。界面如圖4所示。

圖4 軟件編輯界面Fig.4 Edition contact surface of software
控制器采用類PLC指令系統進行編程,完成簡單的開關量的邏輯運算。該指令系統包含:LD、LDI、AND、ANDI、OR、ORI、OUT、TIM 及CON 等指令,其中TIM 與CON 分別實現定時及計數功能。執行程序編輯模塊可將程序保存為.txt格式文件,方便于執行程序的查看及修改。
由于微型控制器執行程序采用類PLC 程序指令系統編寫,不能直接被控制器應用,因此需要對執行程序進行編譯。利用編譯軟件,不僅可以檢查執行程序是否有語法錯誤,還可以將執行程序轉換為能夠被微型控制器所執行的二進制代碼。對執行程序進行編譯的過程分為以下3個步驟:
(1)對執行程序進行讀取。軟件利用VB 中自帶的Split()函數對執行程序內容進行分行讀取。Split()函數返回一個下標從零開始的一維數組,它包含指定數目的子字符串[5]。
(2)對字符串進行規格化處理。為了便于程序的編譯,并考慮到微型控制器控制指令的規范性要求,規定標準程序字段格式為“XXXX 凵XXX”,即“程序命令符+空格+繼電器編碼”。規格化處理過程包括:去除字符串中多余的空格,字符的大小寫轉換等。例如“凵凵Ld凵x00 凵凵”程序段,化為標準格式為“LD 凵X00”。
(3)對已化為規格化形式的類PLC 程序語句進行轉換,將類PLC語句轉換為單片機芯片的二進制代碼。由于微型控制器只是完成簡單開關量的邏輯運算,彼此之間僅僅是位運算,因此選擇進位標志位C來進行運算處理。類PLC 指令與匯編指令對應關系如表1所示。

表1 類PLC指令與匯編指令對應表Tab.1 The corresponding of class PLC instruction and assembly instructions
微型控制器最大可設有32個輸入繼電器、32個輸出繼電器、32個中間繼電器。繼電器的狀態均存儲在單片機中的RAM 位尋址區且與位地址一一對應。控制器將繼電器的狀態保存在其對應的位地址寄存器中,通過對位寄存器存儲內容的改變實現單片機對繼電器的操作。繼電器與單片機RAM 位地址對應關系如表2所示。

表2 繼電器與RAM 位尋址區位地址映射表Tab.2 The corresponding of relay and RAM position addressing position address
根據表1、2可以將類PLC 執行程序轉換為單片機對相應位地址的操作,再將單片機匯編程序轉換為二進制代碼實現執行程序的編譯。為了提高軟件的執行速度和方便下載軟件對程序代碼的處理,軟件中定義一個全局數組a(i)存儲執行程序編譯生成的二進制代碼。
以下列微型控制器類PLC 執行程序片段為例:

根據表2 所示,X00 繼電器對應位地址為“00H”,M01繼電器對應位地址為“21H”,Y02繼電器對應位地址為“42H”,同時查表1 可知:“LD”命令對應匯編語言指令為“MOV C,bit”,“AND”命令對應匯編語言指令為“ANL C,bit”,“OUT”命令對應匯編語言指令為“MOV bit,C”,由此可知。類PLC 程序轉換為單片機匯編語言程序為:

對應的二進制代碼為“A2 00 82 21 92 42”,將代碼依次存入a(i)中,即:

經過編譯軟件的編譯,微型控制器執行程序轉換為二進制代碼存儲在數組a(i)中,為了實現執行程序的運行,需要將數組a(i)發送給微型控制器主控模塊。
系統的PC機與主控模塊利用串口進行數據通信,通信雙方約定:波特率為4 800B/s;信息格式為8個數據位,1個停止位,無校驗位;傳送方式為PC機采用查詢方式接收與發送數據。
下載模塊利用VB6.0提供的MSComm 控件通過串口與主控模塊進行數據交換,完成PC 機與主控模塊的數據通信。該控件提供了標準的事件處理函數、過程,并通過屬性的方法提供了串行通信參數的設置,解決了串行通信的問題[6]。
MSComm 通信控件,具有功能完善的串口數據的發送和接收功能,具有兩種處理通信的方式:事件驅動方式和查詢方式。由于查詢方式占用的系統資源較多,所以采用事件驅動方式實現串行數據通信[7]。
由于需要發送的數據多達64K 字節,為了提高數據傳輸的準確性,進行分批發送。軟件每次發送64字節數據,發送完畢后等待單片機的應答信號。單片機處理完畢接收到的64字節數據后,向PC機返回應答信號“AA”,PC機根據接收的應答信號判斷是否發送下一批次數據。如果接收到的信號為“AA”,則繼續發送,否則重新發送數據。
以下為PC機與單片機串行通信的部分代碼:


本文提到的微型控制器已在儀表自動車床改造中使用,從應用結果看,機床運行穩定,控制簡單方便,達到技術要求。可得出以下結論:采用SST89E516RD 單片機為控制芯片,降低了控制器成本,并利用芯片的IAP 模式,實現微型控制器執行程序的在線編輯與下載,改善了控制器的性能。PC機軟件利用VB6.0中的Rich textbox控件及MSComm 控件編制,利用類PLC 程序指令完成微型控制器執行程序的編寫,達到簡化編程的目的,同時完成執行程序的編譯及下載功能,使其更便于用在中小型工業設備的控制中。
[1]張昆,張曉光.一個微型控制器設計中的技巧[J].計算機應用研究,1994(4):21-23.
[2]吳錦虹,黃譽,陳凱.SST89E516RD 存儲空間的組織與IAP實現[J].電子制作,2007(5):60-63.
[3]吳漢清.用SST89E516RD 自制51 單片機仿真器[J].無線電,2007(10):72-74.
[4]忠梅.單片機的應用程序設計[M].北京:北京航空航天大學出版社,1997.
[5]李天啟,成昊.Visual Basic 6.0學習捷徑[M].北京:清華大學出版社,1998.
[6]李江全,張麗.Visual Basic串口通信與測控應用技術實戰詳解[M].北京:人民郵電出版社,2007.
[7]范逸之,陳立元.Visual Basic與RS232 串行通信控制[M].北京:清華大學出版社,2002.