姚曉平 ,王 強(qiáng)
(1.江蘇聯(lián)合職業(yè)技術(shù)學(xué)院 江蘇 南京 211135;2.中科院計算所 北京 100190)
現(xiàn)代電子技術(shù)如智能儀表、實(shí)時控制、通信、汽車電子等等,對技術(shù)人員的要求越來越高,特別是軟硬件集成能力。以上應(yīng)用經(jīng)常要用到單片機(jī)和可編程器件,這些器件的應(yīng)用需要除了硬件知識還要具有軟件技術(shù)。但要掌握軟件編程是非常困難的。編程技術(shù)的繁瑣、拼寫容易出錯、語法難于理解、而且不能實(shí)時反映現(xiàn)狀。如果要與時俱進(jìn)就要不斷地在學(xué)習(xí)硬件和軟件技術(shù),時常讓人顧此失彼。經(jīng)過我們的探索,通過LinkBoy軟硬件集成的圖形化電子積木創(chuàng)意設(shè)計平臺,實(shí)現(xiàn)了學(xué)習(xí)的簡單化,設(shè)計的原創(chuàng)性。
眾所周知,計算機(jī)只能識別布爾量T或F,用數(shù)字表示就是1或0。所謂計算機(jī)語言即是1或0構(gòu)成的特定序列,這就是程序。但是人對這些序列,常常是無法理解和記憶,使人頭痛。程序是由機(jī)器認(rèn)識的語言描述的現(xiàn)實(shí)世界,而空間解析則是由程序代碼表示的計算機(jī)應(yīng)用。由于兩者所對應(yīng)問題及表達(dá)方式不同,使程序開發(fā)變的復(fù)雜。在工程中圖形化設(shè)計分析方法如流程圖、框圖、表格、文字等方式,沒有語法及語義定義,屬于非形式化方法。與具有精確語法及語義定義的編程語言很難對應(yīng)。主要因為編程語言只有“一維”特性,由一系列字符組成;而圖形化設(shè)計分析,具有“二維”特性。要解決這一問題基本上有二種方法,一是將圖形化設(shè)計分析轉(zhuǎn)換成線性表示,使設(shè)計方法形式化;二是使編程語言具有“二 維”特性,簡化與設(shè)計結(jié)果之間的對應(yīng)。實(shí)際上,圖形化編程語言就采用了這種編程方式。圖形化的程序代碼,包括圖標(biāo)和連線,圖標(biāo)是相當(dāng)于文本語言中的編碼,編碼間的相互傳輸是由連線完成。圖形化程序設(shè)計像一個由圖標(biāo)和連線構(gòu)成的流程圖或網(wǎng)絡(luò)圖,而不再是一個順序指令文件,所以具有二維特征。圖形化編程軟件具有可視化界面,有封裝的可視化控件。流程圖或網(wǎng)絡(luò)圖描述的是系統(tǒng)的運(yùn)行過程,并且每個部分在運(yùn)行中會執(zhí)行一定的操作;流程圖中的圖標(biāo)可以設(shè)定參數(shù)或變量值,動態(tài)修改程序的結(jié)構(gòu)和運(yùn)行的流程。
設(shè)計工程師的習(xí)慣,要找到非常適合自己理解和觀察的圖形化代碼。這些圖形化代碼本身隱含著需要計算機(jī)專業(yè)知識支持的概念或一個特定的編程語言的語法。這樣就減少了程序設(shè)計的復(fù)雜性,提高了程序設(shè)計的效率。也就是說圖形代碼,將由控制和管理的計算機(jī)軟件處理,對于非計算機(jī)專業(yè)人員非常重要。圖形可以被視為一種視覺語言,可以直接對某些事物的表達(dá)。同時,因為圖像的特征更加生動和形象,因此更容易記住和理解。用戶可以自由增加不同類型的程序模塊和圖標(biāo),對其進(jìn)行參數(shù)的調(diào)用,實(shí)現(xiàn)信息的傳遞,而這也是對象編程(OOP)的核心思想之一。用圖標(biāo)代替編碼,編程者只要調(diào)用圖標(biāo),按規(guī)定連線。就可實(shí)現(xiàn)編程,整個過程就象把設(shè)計思路寫在紙上,在畫程序框圖,直觀、簡捷而有趣,可以立刻把你的創(chuàng)意變?yōu)楝F(xiàn)實(shí)。
目前,最普遍使用的編程范式還是馮諾依曼機(jī)的操作機(jī)制,對于圖形化語言編程主要還是純數(shù)據(jù)流的動態(tài)模型。由于圖形化程序具有二維特性,在執(zhí)行程序時,只有當(dāng)模塊的入口數(shù)據(jù)全部到達(dá)時,該模塊才被執(zhí)行,不能很好地與事件驅(qū)動的操作系統(tǒng)協(xié)調(diào)。因此系統(tǒng)的響應(yīng)速度和運(yùn)行效率不高。LinkBoy圖形化編程平臺是一個協(xié)作式調(diào)度內(nèi)核、觸發(fā)事件的面向?qū)ο竽P?,軟件和硬件集成環(huán)境的電子元件形成的積木模塊,利用定義的函數(shù)庫和圖形化語法,完成產(chǎn)品項目的調(diào)試和運(yùn)行。
和其他編程語言不同,平臺中的程序不是從“main()”開始,用戶編程的過程,就是編寫各個事件的響應(yīng)代碼,而每個事件都是由系統(tǒng)后臺自動檢測觸發(fā)的,如紅外線接收器,用家里的彩電遙控器對著它按下按鍵會觸發(fā) “紅外線接收事件”;開關(guān),當(dāng)被人按下的時候就會觸發(fā)“打開事件”等等。在后臺有一個專用的嵌入式操作系統(tǒng),既執(zhí)行各個組件的底層驅(qū)動程序,又對各個組件觸發(fā)的事件進(jìn)行分發(fā)。用戶只要做補(bǔ)全事件的處理代碼即可[1-3]。
LinkBoy創(chuàng)意平臺,是一個軟硬件集成的開發(fā)環(huán)境。用戶的設(shè)計界面非常簡潔如圖一所示,設(shè)計完成后程序代碼、電路連接和機(jī)械布局等全部保存在記事本文件中,直接打開記事本文件可以看到類C語言等內(nèi)容;用編程軟件打開后會自動解析出圖形,并且以圖形化的方式顯示,可以看到電路模塊及電路連接關(guān)系等。只要你確定程序所要執(zhí)行的任務(wù),然后選擇所需的圖標(biāo)就可以實(shí)現(xiàn)圖形化程序設(shè)計。圖標(biāo)就象電子元件,連線板就向原理圖中的元件間的連線,同時又是程序中數(shù)據(jù)流進(jìn)、流出的路徑。創(chuàng)意平臺具有以下特點(diǎn)[4]:
1)它是一個交互式的窗體。多視圖的主子程序結(jié)構(gòu),可以同時觀察主程序與子程序,使得語言具有直觀與可讀性。以事件觸發(fā)為模型的圖形化語言,經(jīng)過編譯器的編譯、可以生成計算機(jī)可執(zhí)行的代碼。
2)純協(xié)作式調(diào)度內(nèi)核。你寫入的各個事件響應(yīng)代碼,都是相互獨(dú)立的,由內(nèi)部嵌入式操作系統(tǒng)進(jìn)行調(diào)度。內(nèi)置的OS是純協(xié)作式的,不需要考慮該資源是否有人訪問,不會發(fā)生沖突問題。
圖1 LinkBoy用戶設(shè)計界面Fig.1 LinkBoy User interface design
3)加入運(yùn)算、數(shù)據(jù)組合、組件功能、控制結(jié)構(gòu)、接口函數(shù)、模塊封裝等各方面的功能??梢酝瓿蓷l件轉(zhuǎn)移、循環(huán)等復(fù)雜的數(shù)學(xué)計算。
4)支持硬件驅(qū)動程序,支持在線燒錄??梢詫⑿碌某绦蛲ㄟ^串口或者USB口燒入到單片機(jī)芯片內(nèi),也可依需求自己修改各參數(shù)。與多種程序兼容??珊唵蔚嘏c傳感器,各種電子元件:熱敏電阻,遙控器,伺服馬達(dá)等連接,實(shí)現(xiàn)你的創(chuàng)意。可以方便的使用鼠標(biāo)、鍵盤等輸入裝置的互動。
5)對編程思想的培養(yǎng)和程序設(shè)計能力的提高有著極大的好處。利用創(chuàng)意平臺,給學(xué)習(xí)程序設(shè)計帶來了便利,不必要再面對繁瑣的程序語句。通過接入插件,可以直接生成C程序代碼,保存C程序文件,直觀生動。圖形化編程方式使得編程的可視化和交互性大大增強(qiáng),達(dá)到了編程訓(xùn)練的重點(diǎn)放在專業(yè)應(yīng)用問題的程序化思維方法和編程技能的訓(xùn)練的目的[5]。
LinkBoy是集軟件、電子、機(jī)械等部分為一體的平臺,整體系統(tǒng)結(jié)構(gòu)如圖2所示。在用戶界面設(shè)計好軟件后,通過下載線將程序燒錄到控制板上,并控制外圍的電子插件,形成最終的產(chǎn)品。
圖2 LinkBoy系統(tǒng)結(jié)構(gòu)Fig.2 LinkBoy The structure of the system
編譯系統(tǒng)主要負(fù)責(zé)將圖形化程序轉(zhuǎn)換成,能被控制器識別的圖形化指令代碼,即類C語言代碼。編譯器將圖形化程序翻譯成圖形化程序由二維空間的圖片對象組成,圖片對象之間按照一定的邏輯順序連接。一個圖片對象包括圖片屬性信息、語法屬性信息和語義屬性信息三種信息。其中圖片屬性信息定義圖片固有的屬性,如:空間位置、大小形狀等;語法屬性信息定義圖片與圖片之間的邏輯關(guān)系,例如選擇、循環(huán)等控制結(jié)構(gòu)的圖片對象;語義屬性信息定義圖片對象的含義,例如獲取采樣值、設(shè)置傳輸關(guān)系等。編譯過程為選擇編譯事件;從該事件所對應(yīng)程序的類C代碼中讀取字符;產(chǎn)生對應(yīng)的目標(biāo)代碼;保存、編譯完成[4,6-8]。
流程控制包括條件判斷和循環(huán)操作兩種,如下流程圖:
1)如果表達(dá)式,語句序列否則語句序列
2)反復(fù)執(zhí)行(n次)(首先語句 A)(每次語句 B)(直到語句C)語句序列
圖3 圖形化流程圖Fig.3 Graphical flow chart
對于“反復(fù)執(zhí)行”流程而言,在“反復(fù)執(zhí)行”后邊可以有“n次”“首先”“每次”“直到”這幾個輔助詞。當(dāng)計算機(jī)開始執(zhí)行一個“反復(fù)執(zhí)行”流程時,先執(zhí)行“首先”語句,然后執(zhí)行用戶自己的語句列表部分,最后執(zhí)行“每次”語句;然后開始判斷“直到”語句的條件是否成立,如果成立了就會終止流程,走向C點(diǎn);如果不成立再進(jìn)一步判斷“n次”語句,看看是否到了指定的次數(shù),如果到了也是終止流程,走向C點(diǎn);如果次數(shù)沒到的話,會走向A點(diǎn),開始一次新的循環(huán)。我們看到上邊的流程圖中有3個點(diǎn):A、B和C。要想直接到達(dá)這3個點(diǎn),我們可以用3個特別語句:“重做”“跳過”“終止”,這3個語句是寫在圖中的“用戶語句列表”里的,當(dāng)程序在“用戶語句列表”中順序執(zhí)行時,只要遇到“重做”語句,就會立刻跳轉(zhuǎn)到A點(diǎn)重新來;只要遇到 “跳過”語句就會跳過剩下的語句部分,直接到達(dá)B點(diǎn);要是遇到“終止”語句,那就什么都不做,直接跳到C點(diǎn),結(jié)束“反復(fù)執(zhí)行”流程。
LinkBoy每個模塊可以看作是硬件對應(yīng)的圖標(biāo),可以直接使用。每個電子模塊被放入圖形用戶界面后,系統(tǒng)會自動導(dǎo)入相應(yīng)的驅(qū)動,甚至每個模塊的初始化將被系統(tǒng)自動執(zhí)行,用戶可以直接對各模塊進(jìn)行操作,可以拖動模塊,改變電路連接關(guān)系;添加、刪除模塊。各電子模塊按照功能可分為硬件模塊類、軟件模塊類、數(shù)據(jù)類3種大類,每個大類中包括一系列具體模塊,如輸入類中包括單個按鈕、雙按鈕、游戲手柄等;通信類包括串口通信組件、485通信組件、USB通信組件、無線通信組件等。使用連線將各模塊連接,系統(tǒng)會將連接端口自動配置生成代碼。
使用LinkBoy電子積木創(chuàng)意平臺編寫、執(zhí)行程序的流程:
1)編寫圖形化程序,保存在記事本;
2)通過USB接口將主控制板與計算計連接;
3)清除原有程序,上傳新程序;
4)LinkBoy板按照程序工作。
下面是液晶屏計時顯示的實(shí)例。
圖4 液晶屏計時顯示項目的記事本部分內(nèi)容Fig.4 LCD timer display Notepad portions of content items
圖5 液晶屏計時顯示項目的圖形化編程界面Fig.5 LCD timer display graphical programming interface project
圖液晶屏計時顯示項目實(shí)物圖形顯示界面Fig.6 LCD timer display project real graphic display interface
通過對電子積木平臺的運(yùn)行機(jī)制的分析,提出了事件觸發(fā)、協(xié)作式調(diào)度內(nèi)核的模型,給出了開發(fā)圖形化語言環(huán)境的一種實(shí)現(xiàn)方法。圖形化程序的二維特性,為保證軟件開發(fā)中分析、設(shè)計、編程各階段信息的一致性提供了極好的解決契機(jī)。除了將圖形化分析設(shè)計結(jié)果線性化、形式化外,還可將面向?qū)ο蠹夹g(shù)引入其中。通過代碼的圖形化,讓學(xué)習(xí)者進(jìn)入了工程思維方式,讓編程就像拼圖一樣形象的表示出來,真正地讓工程師專心進(jìn)入到設(shè)計狀態(tài)。
[1]王瑞榮.基于事件觸發(fā)并發(fā)數(shù)據(jù)流模型的可視化編程語言研究[D].杭州:浙江大學(xué),2003.
[2]徐成.基于事件驅(qū)動的機(jī)器人圖形化編程系統(tǒng)研究[J].機(jī)械制造,2010(9):38-40.
[3]齊大彬.智能教育機(jī)器人圖形化編程系統(tǒng)原理及實(shí)現(xiàn)[J].計算機(jī)應(yīng)用與軟件,2014,31(3):79-81.
[4]王強(qiáng).LinkBoy創(chuàng)意展示平臺簡介[EB/OL].[2013-04-25]http://blog.sina.com.cn/s/blog_694e0ad70101acvj.html.
[5]張曉盼.引入圖形化方法改革非計算機(jī)專業(yè)程序開發(fā)教學(xué)模式[J].計算機(jī)教育,2011(7):57-62.
[6]徐小良.圖形化編程平臺的結(jié)構(gòu)設(shè)計及實(shí)現(xiàn)[J].計算機(jī)工程與應(yīng)用,2001(4):4-8.
[7]謝宣松.圖形化語言結(jié)構(gòu)及運(yùn)行模型 [J].吉林大學(xué)學(xué)報,2006,36(2):219-223.
[8]劉昱.一種面向圖形化編程的軟件設(shè)計方法[J].計算機(jī)科學(xué),1997,24(1):73-76.