劉平 徐俊蓉
摘 要: 仿真是一種有效而經(jīng)濟(jì)的教學(xué)手段,但是由于教學(xué)仿真開發(fā)技術(shù)要求高,并且耗費(fèi)大量時(shí)間和精力,所以在課程改革過程中,教學(xué)仿真的設(shè)計(jì)和開發(fā)往往是多數(shù)教師頭疼的問題。介紹利用Microsoft Visio軟件繪圖簡(jiǎn)便以及后臺(tái)編程控制相對(duì)簡(jiǎn)單、靈活等優(yōu)點(diǎn),實(shí)現(xiàn)高效開發(fā)高品質(zhì)教學(xué)仿真的幾種方案,其中將Visio與單片機(jī)編程軟件Keil聯(lián)合起來進(jìn)行教學(xué)仿真的方案為可編程控制器的仿真提供了一種全新的思路。希望能夠?yàn)殚_發(fā)教學(xué)仿真的教師(或團(tuán)隊(duì))提供參考和借鑒。
關(guān)鍵詞: Visio; 理論教學(xué); 仿真; 圖形表單; 二次開發(fā)
中圖分類號(hào):TP391.9 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2019)03-85-04
Discussion on the application of Visio in teaching simulation
Liu Ping, Xu Junrong
(Guiyang Vocational and Technical College, Guiyang, Guizhou 550008, China)
Abstract: Simulation is an effective and economical teaching method. However, the high requirements of teaching simulation development technology and the large amount of time and energy, the design and development of teaching simulation is often a headache for most teachers in the course of curriculum reform. This paper introduces several schemes to realize the efficient development of high quality teaching simulation by using the advantages of Microsoft Visio software for drawing and relatively simple and flexible background programming control, among which the scheme of combining Visio with single-chip programming software Keil for teaching simulation provides a new idea for the simulation of programmable controller. It is hoped that this paper can provide references for teachers (or teams) who develop teaching simulation.
Key words: Visio; theoretical teaching; simulation; Shapesheet; secondary development
0 引言
如何激發(fā)學(xué)生的學(xué)習(xí)興趣,提高教學(xué)效果一直是廣大職教工作者思考和探索的方向。仿真無疑是其中一種有效的手段,它具有成本低和表達(dá)直觀等優(yōu)點(diǎn)。仿真也存在一些問題,一個(gè)突出的問題就是教師使用的教學(xué)仿真軟件往往不是由自己或自己的課程團(tuán)隊(duì)開發(fā)的,所帶來的問題是仿真不能夠與課程真正實(shí)現(xiàn)對(duì)接。如果讓任課教師自己開發(fā)又困難重重。筆者經(jīng)過長(zhǎng)期的摸索和實(shí)踐發(fā)現(xiàn):微軟公司的專業(yè)繪圖軟件Visio或許能夠解決這個(gè)矛盾。作為目前最優(yōu)秀的繪圖軟件之一,Visio具有作圖便捷和繪圖效果等優(yōu)點(diǎn),特別是其科學(xué)包提供的各種專業(yè)、精美的元件圖形為教學(xué)場(chǎng)景的搭建提供了方便。不僅如此,Visio還具備強(qiáng)大的后臺(tái)編程控制能力和數(shù)據(jù)庫功能,以及對(duì)象連接與嵌入等功能,這為基于Visio的二次開發(fā)的教學(xué)仿真提供了優(yōu)質(zhì)的平臺(tái)[1]。通俗地說,即Visio上所有的圖元及其組合圖形的屬性(包括顏色、形態(tài)、位置等)都是可以在后臺(tái)通過圖形表單或程序編輯器控制的,而且編程語言可以是易學(xué)易懂的VAB語言 (Visual Basic Application),也可以是功能較強(qiáng)的C/C++,還可以是新興的.NET開發(fā)工具。筆者通過數(shù)年的實(shí)踐和探索,在機(jī)電等專業(yè)數(shù)門專業(yè)課的教學(xué)中引入了基于Visio二次開發(fā)的仿真來輔助教學(xué),有了一點(diǎn)體會(huì),借此與同仁分享。
1 基于Visio的仿真及其在教學(xué)中的運(yùn)用
筆者將基于Visio的教學(xué)仿真分為兩個(gè)層面:獨(dú)立的Visio軟件仿真和Visio與其它軟件平臺(tái)聯(lián)合進(jìn)行的仿真。
1.1 獨(dú)立的Visio軟件仿真
在Visio軟件中有兩種方式可以控制圖元的屬性,一種是通過對(duì)圖元對(duì)應(yīng)的Shapesheet(圖形表單)進(jìn)行相應(yīng)的公式編輯來實(shí)現(xiàn);另一種則是通過后臺(tái)的程序編輯器編寫用戶程序來控制。
1.1.1 通過表單來實(shí)現(xiàn)仿真
在Microsoft Visio中,每一個(gè)圖形(或圖形組合)都有其對(duì)應(yīng)的Shapesheet,其羅列了該圖形(或圖形組合)的所有可用屬性(Property)和事件(Events),這些條目在對(duì)應(yīng)的Shapesheet中都以表格的形式呈現(xiàn),而在表格中以Formula(公式)來控制對(duì)應(yīng)對(duì)象(圖形)的屬性。其中的公式中可以引用其它單元格的數(shù)據(jù),也可以使用函數(shù)和運(yùn)算符,其語法要求和規(guī)則與Microsoft Excel的非常類似[2]。對(duì)于使用過Microsoft Excel單元格公式編輯功能的人員,使用Visio的Shapesheet功能就不會(huì)有太大困難。因此,通過圖形表單開發(fā)教學(xué)仿真是一種快捷而有效的途徑。
以惠斯通電橋教學(xué)仿真為例,該設(shè)備是一種精密儀表,在教授學(xué)生使用惠斯通電橋的教學(xué)過程中,教師會(huì)反復(fù)強(qiáng)調(diào)操作步驟和錯(cuò)誤操作的結(jié)果,但是仍然屢屢出現(xiàn)由于誤操作而損壞的情況。如果設(shè)計(jì)一個(gè)具有操作步驟識(shí)別,同時(shí)功能和外形與實(shí)際電橋一致的教學(xué)仿真,先讓學(xué)生在仿真的惠斯通電橋上操作,熟悉后再到實(shí)體上操作,實(shí)現(xiàn)“虛實(shí)結(jié)合”,則問題能大為改觀。實(shí)現(xiàn)的方法如下。
首先,在Visio繪圖頁面上搭建與實(shí)體惠斯通電橋的外形及操作方式相似的場(chǎng)景,如圖1所示。這里稱“搭建”是因?yàn)槠渲械暮涟脖怼㈦娮柘?、電阻和外接電池(如果需要)在Visio的科學(xué)包中都有現(xiàn)成的模版,只要拖拽到頁面并將其組合即可。然后,在Visio的Shapesheet中描述惠斯通電橋的內(nèi)在的電學(xué)關(guān)系以及圖中各個(gè)檔位開關(guān)、按鈕以及毫安表指針之間的內(nèi)在關(guān)系。其中關(guān)鍵之一是建立圖中檔位開關(guān)的位置與對(duì)應(yīng)電阻值的關(guān)系。以電橋x10檔為例,在該擋位開關(guān)對(duì)應(yīng)的圖形表單中,新建一個(gè)保存對(duì)應(yīng)電阻值的變量,并將其以公式的形式描述如下:
ROUND(MOD(360 deg-Angle,360 deg)/36 deg,0)*10
由于一圈共分為10檔,所以上式中通過取整函數(shù)(ROUND)將360度分為10份,每一份對(duì)應(yīng)10歐姆的電阻值。需要注意的是當(dāng)檔位開關(guān)從0度順時(shí)針旋轉(zhuǎn)360度,在Visio中被解讀為(-0,-180)度和[+180,+0]度兩個(gè)階段,所以,上式中是用周角減去當(dāng)前角度,然后再對(duì)周角取余的目的正是將當(dāng)前角度轉(zhuǎn)換為[0,360)度的形式。比率擋位開關(guān)位置與對(duì)應(yīng)比率的關(guān)系描述也基本類似。關(guān)鍵之二是在Visio的Shapesheet中描述圖1中毫安表指針偏轉(zhuǎn)角度與計(jì)算出來的不平衡電流毫安值的關(guān)系。Visio中提供的電流計(jì)指針偏轉(zhuǎn)范圍是(-35,+35)度,較為常用的惠斯通電橋上電流計(jì)指針指示范圍是(-0.5,+0.5)mA,根據(jù)該線性關(guān)系就可以算出不平衡電流對(duì)應(yīng)的指針偏轉(zhuǎn)角度。為了限制虛擬的電流表的指針偏轉(zhuǎn)角度不超過±35度,需要通過Bound()函數(shù)將不平衡電流限制在-0.5mA-+0.5mA的范圍以內(nèi)。
該仿真惠斯通電橋上按鈕的操作的方式是通過鼠標(biāo)右鍵的快捷菜單實(shí)現(xiàn)。實(shí)現(xiàn)方案是:在按鈕對(duì)應(yīng)的Shapeshee中增加一個(gè)用戶定義單元,存放用來表示該按鈕的開合狀態(tài)的布爾型變量flag。然后在該按鈕Actions(動(dòng)作)欄中添加兩個(gè)條目,分別對(duì)應(yīng)該按鈕的開合狀態(tài),詳細(xì)公式填寫表1所示。
其功能是在按鈕獲得焦點(diǎn)后,單擊鼠標(biāo)右鍵出現(xiàn)閉合或打開的菜單選項(xiàng),點(diǎn)擊對(duì)應(yīng)選項(xiàng)來仿真惠斯通電橋上按鈕的操作,從而控制前面定義的變量flag的狀態(tài)。另外,惠斯通電橋的操作是有順序要求的,例如,要求電源按鈕(Kb)和測(cè)試按鈕(Kg)接通的情況下是不能調(diào)整電阻箱電阻的擋位開關(guān)。為了對(duì)該要求進(jìn)行仿真,可以在擋位開關(guān)的Shapesheet中Events(事件)欄的EventsXFMod(狀態(tài)改變將觸發(fā)對(duì)應(yīng)的腳本)條目中填寫公式,通過if()指令判斷如果Kg或Kb的結(jié)果為1,則觸發(fā)PLAYSOUND()函數(shù)播放提示音訊,提示操作者操作錯(cuò)誤。
1.1.2 通過程序編輯器和表單來實(shí)現(xiàn)仿真
對(duì)于過程較為復(fù)雜的仿真,特別是動(dòng)作與時(shí)序有關(guān)的情形下,單獨(dú)通過表單編的輯往往難以實(shí)現(xiàn)要求的功能,此時(shí)還需要用到功能更強(qiáng)更靈活的Visio Automation(自動(dòng)化技術(shù))進(jìn)行二次開發(fā)。Automation是一種方法,它使用 Microsoft Visual Basic for Application(VBA)、Microsoft Visual basic、C/C++或其它支持 Automation的語言編程。就Visio的二次開發(fā)的方式而言,可以分為創(chuàng)建Visio加載項(xiàng)(add-ons)、創(chuàng)建組件模型COM(add-ins)及通過Visio自帶的Visual Basic編輯器創(chuàng)建VBA解決方案三種方式實(shí)現(xiàn)[3]。由于Visio的Visual Basic編輯器是Visio軟件自帶的編程環(huán)境,直接打開編輯器就可以編輯程序,并且Visual Basic編程方式比較容易掌握,因此,對(duì)于非計(jì)算機(jī)專業(yè)的教師而言,采用第三種方式是比較適合。本文也主要介紹這種方式在教學(xué)仿真中的運(yùn)用。
前面已經(jīng)說過,在Visio中圖形的位置、角度以及大小等物理屬性都存儲(chǔ)在表單中。用戶程序?qū)D形對(duì)象這些屬性的讀寫是后臺(tái)編程控制前臺(tái)頁面圖形的基本方法和過程。Visio 對(duì)象的結(jié)構(gòu)模型(即對(duì)象組織形式)是一個(gè)廣義的概念,大到運(yùn)用程序、小到圖元都稱為對(duì)象。它們通過層次結(jié)構(gòu)組合在一起稱為對(duì)象模型,其模型表明了對(duì)象之間的隸屬關(guān)系,同時(shí)也是用戶程序引用圖形某屬性數(shù)據(jù)的路徑。Visio的對(duì)象模型比較繁雜,不過其中常用的對(duì)象有Documents、Pages、Shapes和Cell四種,它們及其所包含的元素的關(guān)系如圖2所示。
正是由于Visio對(duì)象存在這樣的隸屬關(guān)系,所以在程序中訪問一個(gè)圖元的某個(gè)屬性的基本過程也是按照?qǐng)D2所示的順序進(jìn)行。在默認(rèn)情況下,Document為當(dāng)前文檔,Page為活動(dòng)頁面(Actived Page)。在此以展示三相交流電機(jī)旋轉(zhuǎn)磁場(chǎng)形成的仿真實(shí)例(如圖3所示)來介紹通過用戶程序編寫和圖形表單公式編輯兩種方式結(jié)合來實(shí)現(xiàn)仿真的方式。鑒于文章篇幅所限制以及圖形編輯的方式已經(jīng)在本文1.1.1部分作了介紹,這里重點(diǎn)介紹其中在Visual Basic編程環(huán)境下實(shí)現(xiàn)的功能。
其中的DoEvents是為了實(shí)現(xiàn)控制權(quán)的轉(zhuǎn)讓,以便讓操作系統(tǒng)處理其它的事件,這樣能夠提高計(jì)算機(jī)工作效率。
由于交流電的相位角還與其頻率有關(guān),所以在該仿真中通過控制上述滑塊的位置來調(diào)節(jié)交流電的頻率(其數(shù)值與滑塊的位置的關(guān)系在對(duì)應(yīng)的圖形表單中通過公式的形式描述,這里再展開說明),為此定義一個(gè)變量f來引用當(dāng)前的設(shè)定頻率(user.f),以此為基礎(chǔ),A相交流電當(dāng)前相位角可以通過其在時(shí)間間隔中的相位角變化量累加而得到:
其中的s *360 *0.05就是交流電在0.05秒的時(shí)間間隔內(nèi)相位角的增量。另外,為了便于后續(xù)的顯示要將累加得到的相位角對(duì)360取余,從而將其轉(zhuǎn)換到[0,360)度的范圍內(nèi)。在此基礎(chǔ)上,通過對(duì)應(yīng)的圖形表單建立以下關(guān)系。
⑴ 圖3中指示交流電相位角的豎線的水平坐標(biāo)與交流電相位角的對(duì)應(yīng)關(guān)系。
⑵ 圖3中磁場(chǎng)及合成畫面上在空間相差120度的三相交流磁場(chǎng)與三相交流相位角的關(guān)系。
⑶ 三相交流磁場(chǎng)與其合成磁場(chǎng)的關(guān)系。
這樣在啟動(dòng)后臺(tái)用戶程序后,指示當(dāng)前相位角的豎線將同步于當(dāng)前A相相位角的變化而移動(dòng),同時(shí),隨著相位角的變化,三相交流電各自在空間中產(chǎn)生的磁場(chǎng)以及其合成磁場(chǎng)的狀態(tài)也將在仿真畫面中動(dòng)態(tài)的呈現(xiàn)出來。
1.2 基于多平臺(tái)聯(lián)合的Visio仿真
涉及可編程控制類軟件的課程通過理實(shí)一體化的教學(xué)當(dāng)然是最好。但是在實(shí)訓(xùn)設(shè)備不能滿足課程設(shè)計(jì)要求的情況下,用仿真代替就是一種有效的補(bǔ)充手段。通常這類可編程控制類軟件都會(huì)以某種方式向第三方軟件提供數(shù)據(jù)接口,從而實(shí)現(xiàn)信息互通。例如西門子PLC 的編程控制軟件Step7的組件S7.ocx[6],常用的單片機(jī)編程軟件Keil的頭函數(shù)文件agsi.h[7]。
下面以基于Visio展示平臺(tái)的單片機(jī)控制仿真為例簡(jiǎn)要介紹這類仿真的實(shí)現(xiàn)方法。
單片機(jī)編程軟件Keil提供了一個(gè)SDK(軟件開發(fā)工具包),該SDK包含一個(gè)名為agsi.h的頭函數(shù)文件。在C++等編程環(huán)境中利用agsi.h提供的函數(shù)和方法,能對(duì)Keil相應(yīng)寄存器數(shù)據(jù)進(jìn)行讀寫等操作。通常在用戶程序中引用該函數(shù),并將結(jié)果在用戶程序中顯示出來。但是,由于C++本身不是專業(yè)的繪圖軟件,所以仿真多是LED、數(shù)碼管等簡(jiǎn)單項(xiàng)目。如果將Visio在繪圖方面的優(yōu)勢(shì)以及其中圖元可后臺(tái)控制的特點(diǎn)利用起來就能夠彌補(bǔ)Keil仿真的缺憾。實(shí)施方案是在C++編程環(huán)境中利用agsi.h讀單片機(jī)存儲(chǔ)器的數(shù)據(jù)并保存到數(shù)據(jù)文件中,然后,讀取數(shù)據(jù)文件中的數(shù)據(jù)并寫入單片機(jī)對(duì)應(yīng)的寄存器中。然后編譯該用戶程序并生成一個(gè)DLL文件(Dynamic Link Library,稱為動(dòng)態(tài)鏈接庫文件)加載到單片機(jī)編程軟件KEIL上。它相當(dāng)于一個(gè)內(nèi)置的數(shù)據(jù)接口,在形式上獨(dú)立于Keil,但是被加載后,在邏輯上與Keil仿真軟件融為一體[8],這就構(gòu)成了一個(gè)具有開放數(shù)據(jù)的單片機(jī)控制程序運(yùn)行通用仿真平臺(tái);另一邊利用Visio搭建相應(yīng)的控制場(chǎng)景,并通過后臺(tái)編程的方式讀寫前述數(shù)據(jù)文件,進(jìn)而實(shí)現(xiàn)單片機(jī)用戶程序?qū)?chǎng)景中對(duì)象的形態(tài)、位置和顏色等屬性的讀入和控制,如圖4所示。
其優(yōu)勢(shì)在于:①該仿真數(shù)據(jù)接口是通用的,課程開發(fā)者僅僅需要根據(jù)項(xiàng)目設(shè)計(jì)單片機(jī)控制程序和控制場(chǎng)景;②由于Visio是專業(yè)的繪圖軟件,所以場(chǎng)景搭建簡(jiǎn)便而且呈現(xiàn)效果較好。相對(duì)于proteus等主要用于設(shè)計(jì)和功能測(cè)試這類功能大而全的單片機(jī)仿真軟件,這種仿真方式更具個(gè)性化。這些特征對(duì)課程開發(fā)和課堂教學(xué)而言具有很大優(yōu)勢(shì)。
2 結(jié)束語
Microsoft Visio不僅有優(yōu)秀的繪圖功能還具備強(qiáng)大的后臺(tái)編程控制功能,對(duì)其功能的深入研究并在教學(xué)仿真中適時(shí)運(yùn)用,必將對(duì)涉及到電工電子、氣動(dòng)和液壓以及單片機(jī)等知識(shí)點(diǎn)的課程教學(xué)有頗多益處。由于篇幅和筆者學(xué)習(xí)深度有限,論述或許不夠詳盡。希望本文能起到拋磚引玉的作用,讓更多的同仁共同來研究其教學(xué)運(yùn)用。
參考文獻(xiàn)(References):
[1] 崔中偉,夏麗華.Visio 2016圖形設(shè)計(jì)標(biāo)準(zhǔn)教程[M].北京大學(xué)
出版社,2017.
[2] (美)Microsoft,萊恩工作室譯.開發(fā)Microsoft Visio解決方案[M].
北京大學(xué)出版社,2002.
[3] 劉強(qiáng),劉向君.利用Visio二次開發(fā)實(shí)現(xiàn)邏輯圖自動(dòng)分析[J].軟
件導(dǎo)刊,2008.8(1):13-14
[4] 管麗娜,白海波.實(shí)用Visual Basic6 教程[M].清華大學(xué)出版
社,2001.
[5] 肖敏.使用Doevents方法解決程序中的死鎖問題[J].有色冶
金設(shè)計(jì)與研究,2011.32(Z1):126-128
[6] 王帥,胡毅,何平,安濤,張騰飛,郭安.基于OPC技術(shù)實(shí)現(xiàn)西門
子數(shù)控系統(tǒng)的數(shù)據(jù)采集[J].組合機(jī)床與自動(dòng)化加工技術(shù),2016.4:69-71
[7] 宋成森,李式巨.利用AGSI接口實(shí)現(xiàn)單片機(jī)系統(tǒng)軟件仿真[J].
工業(yè)控制計(jì)算機(jī),2005.9:48-49
[8] 王小東.Keil u V2下AGSI接口結(jié)構(gòu)及其仿真DLL的實(shí)現(xiàn)[J].
計(jì)算機(jī)運(yùn)用出版社,2008.11:33-35