姚曉平 ,王 強
(1.江蘇聯合職業技術學院 江蘇 南京 211135;2.中科院計算所 北京 100190)
現代電子技術如智能儀表、實時控制、通信、汽車電子等等,對技術人員的要求越來越高,特別是軟硬件集成能力。以上應用經常要用到單片機和可編程器件,這些器件的應用需要除了硬件知識還要具有軟件技術。但要掌握軟件編程是非常困難的。編程技術的繁瑣、拼寫容易出錯、語法難于理解、而且不能實時反映現狀。如果要與時俱進就要不斷地在學習硬件和軟件技術,時常讓人顧此失彼。經過我們的探索,通過LinkBoy軟硬件集成的圖形化電子積木創意設計平臺,實現了學習的簡單化,設計的原創性。
眾所周知,計算機只能識別布爾量T或F,用數字表示就是1或0。所謂計算機語言即是1或0構成的特定序列,這就是程序。但是人對這些序列,常常是無法理解和記憶,使人頭痛。程序是由機器認識的語言描述的現實世界,而空間解析則是由程序代碼表示的計算機應用。由于兩者所對應問題及表達方式不同,使程序開發變的復雜。在工程中圖形化設計分析方法如流程圖、框圖、表格、文字等方式,沒有語法及語義定義,屬于非形式化方法。與具有精確語法及語義定義的編程語言很難對應。主要因為編程語言只有“一維”特性,由一系列字符組成;而圖形化設計分析,具有“二維”特性。要解決這一問題基本上有二種方法,一是將圖形化設計分析轉換成線性表示,使設計方法形式化;二是使編程語言具有“二 維”特性,簡化與設計結果之間的對應。實際上,圖形化編程語言就采用了這種編程方式。圖形化的程序代碼,包括圖標和連線,圖標是相當于文本語言中的編碼,編碼間的相互傳輸是由連線完成。圖形化程序設計像一個由圖標和連線構成的流程圖或網絡圖,而不再是一個順序指令文件,所以具有二維特征。圖形化編程軟件具有可視化界面,有封裝的可視化控件。流程圖或網絡圖描述的是系統的運行過程,并且每個部分在運行中會執行一定的操作;流程圖中的圖標可以設定參數或變量值,動態修改程序的結構和運行的流程。
設計工程師的習慣,要找到非常適合自己理解和觀察的圖形化代碼。這些圖形化代碼本身隱含著需要計算機專業知識支持的概念或一個特定的編程語言的語法。這樣就減少了程序設計的復雜性,提高了程序設計的效率。也就是說圖形代碼,將由控制和管理的計算機軟件處理,對于非計算機專業人員非常重要。圖形可以被視為一種視覺語言,可以直接對某些事物的表達。同時,因為圖像的特征更加生動和形象,因此更容易記住和理解。用戶可以自由增加不同類型的程序模塊和圖標,對其進行參數的調用,實現信息的傳遞,而這也是對象編程(OOP)的核心思想之一。用圖標代替編碼,編程者只要調用圖標,按規定連線。就可實現編程,整個過程就象把設計思路寫在紙上,在畫程序框圖,直觀、簡捷而有趣,可以立刻把你的創意變為現實。
目前,最普遍使用的編程范式還是馮諾依曼機的操作機制,對于圖形化語言編程主要還是純數據流的動態模型。由于圖形化程序具有二維特性,在執行程序時,只有當模塊的入口數據全部到達時,該模塊才被執行,不能很好地與事件驅動的操作系統協調。因此系統的響應速度和運行效率不高。LinkBoy圖形化編程平臺是一個協作式調度內核、觸發事件的面向對象模型,軟件和硬件集成環境的電子元件形成的積木模塊,利用定義的函數庫和圖形化語法,完成產品項目的調試和運行。
和其他編程語言不同,平臺中的程序不是從“main()”開始,用戶編程的過程,就是編寫各個事件的響應代碼,而每個事件都是由系統后臺自動檢測觸發的,如紅外線接收器,用家里的彩電遙控器對著它按下按鍵會觸發 “紅外線接收事件”;開關,當被人按下的時候就會觸發“打開事件”等等。在后臺有一個專用的嵌入式操作系統,既執行各個組件的底層驅動程序,又對各個組件觸發的事件進行分發。用戶只要做補全事件的處理代碼即可[1-3]。
LinkBoy創意平臺,是一個軟硬件集成的開發環境。用戶的設計界面非常簡潔如圖一所示,設計完成后程序代碼、電路連接和機械布局等全部保存在記事本文件中,直接打開記事本文件可以看到類C語言等內容;用編程軟件打開后會自動解析出圖形,并且以圖形化的方式顯示,可以看到電路模塊及電路連接關系等。只要你確定程序所要執行的任務,然后選擇所需的圖標就可以實現圖形化程序設計。圖標就象電子元件,連線板就向原理圖中的元件間的連線,同時又是程序中數據流進、流出的路徑。創意平臺具有以下特點[4]:
1)它是一個交互式的窗體。多視圖的主子程序結構,可以同時觀察主程序與子程序,使得語言具有直觀與可讀性。以事件觸發為模型的圖形化語言,經過編譯器的編譯、可以生成計算機可執行的代碼。
2)純協作式調度內核。你寫入的各個事件響應代碼,都是相互獨立的,由內部嵌入式操作系統進行調度。內置的OS是純協作式的,不需要考慮該資源是否有人訪問,不會發生沖突問題。

圖1 LinkBoy用戶設計界面Fig.1 LinkBoy User interface design
3)加入運算、數據組合、組件功能、控制結構、接口函數、模塊封裝等各方面的功能。可以完成條件轉移、循環等復雜的數學計算。
4)支持硬件驅動程序,支持在線燒錄。可以將新的程序通過串口或者USB口燒入到單片機芯片內,也可依需求自己修改各參數。與多種程序兼容。可簡單地與傳感器,各種電子元件:熱敏電阻,遙控器,伺服馬達等連接,實現你的創意。可以方便的使用鼠標、鍵盤等輸入裝置的互動。
5)對編程思想的培養和程序設計能力的提高有著極大的好處。利用創意平臺,給學習程序設計帶來了便利,不必要再面對繁瑣的程序語句。通過接入插件,可以直接生成C程序代碼,保存C程序文件,直觀生動。圖形化編程方式使得編程的可視化和交互性大大增強,達到了編程訓練的重點放在專業應用問題的程序化思維方法和編程技能的訓練的目的[5]。
LinkBoy是集軟件、電子、機械等部分為一體的平臺,整體系統結構如圖2所示。在用戶界面設計好軟件后,通過下載線將程序燒錄到控制板上,并控制外圍的電子插件,形成最終的產品。

圖2 LinkBoy系統結構Fig.2 LinkBoy The structure of the system
編譯系統主要負責將圖形化程序轉換成,能被控制器識別的圖形化指令代碼,即類C語言代碼。編譯器將圖形化程序翻譯成圖形化程序由二維空間的圖片對象組成,圖片對象之間按照一定的邏輯順序連接。一個圖片對象包括圖片屬性信息、語法屬性信息和語義屬性信息三種信息。其中圖片屬性信息定義圖片固有的屬性,如:空間位置、大小形狀等;語法屬性信息定義圖片與圖片之間的邏輯關系,例如選擇、循環等控制結構的圖片對象;語義屬性信息定義圖片對象的含義,例如獲取采樣值、設置傳輸關系等。編譯過程為選擇編譯事件;從該事件所對應程序的類C代碼中讀取字符;產生對應的目標代碼;保存、編譯完成[4,6-8]。
流程控制包括條件判斷和循環操作兩種,如下流程圖:
1)如果表達式,語句序列否則語句序列
2)反復執行(n次)(首先語句 A)(每次語句 B)(直到語句C)語句序列

圖3 圖形化流程圖Fig.3 Graphical flow chart
對于“反復執行”流程而言,在“反復執行”后邊可以有“n次”“首先”“每次”“直到”這幾個輔助詞。當計算機開始執行一個“反復執行”流程時,先執行“首先”語句,然后執行用戶自己的語句列表部分,最后執行“每次”語句;然后開始判斷“直到”語句的條件是否成立,如果成立了就會終止流程,走向C點;如果不成立再進一步判斷“n次”語句,看看是否到了指定的次數,如果到了也是終止流程,走向C點;如果次數沒到的話,會走向A點,開始一次新的循環。我們看到上邊的流程圖中有3個點:A、B和C。要想直接到達這3個點,我們可以用3個特別語句:“重做”“跳過”“終止”,這3個語句是寫在圖中的“用戶語句列表”里的,當程序在“用戶語句列表”中順序執行時,只要遇到“重做”語句,就會立刻跳轉到A點重新來;只要遇到 “跳過”語句就會跳過剩下的語句部分,直接到達B點;要是遇到“終止”語句,那就什么都不做,直接跳到C點,結束“反復執行”流程。
LinkBoy每個模塊可以看作是硬件對應的圖標,可以直接使用。每個電子模塊被放入圖形用戶界面后,系統會自動導入相應的驅動,甚至每個模塊的初始化將被系統自動執行,用戶可以直接對各模塊進行操作,可以拖動模塊,改變電路連接關系;添加、刪除模塊。各電子模塊按照功能可分為硬件模塊類、軟件模塊類、數據類3種大類,每個大類中包括一系列具體模塊,如輸入類中包括單個按鈕、雙按鈕、游戲手柄等;通信類包括串口通信組件、485通信組件、USB通信組件、無線通信組件等。使用連線將各模塊連接,系統會將連接端口自動配置生成代碼。
使用LinkBoy電子積木創意平臺編寫、執行程序的流程:
1)編寫圖形化程序,保存在記事本;
2)通過USB接口將主控制板與計算計連接;
3)清除原有程序,上傳新程序;
4)LinkBoy板按照程序工作。
下面是液晶屏計時顯示的實例。

圖4 液晶屏計時顯示項目的記事本部分內容Fig.4 LCD timer display Notepad portions of content items

圖5 液晶屏計時顯示項目的圖形化編程界面Fig.5 LCD timer display graphical programming interface project

圖液晶屏計時顯示項目實物圖形顯示界面Fig.6 LCD timer display project real graphic display interface
通過對電子積木平臺的運行機制的分析,提出了事件觸發、協作式調度內核的模型,給出了開發圖形化語言環境的一種實現方法。圖形化程序的二維特性,為保證軟件開發中分析、設計、編程各階段信息的一致性提供了極好的解決契機。除了將圖形化分析設計結果線性化、形式化外,還可將面向對象技術引入其中。通過代碼的圖形化,讓學習者進入了工程思維方式,讓編程就像拼圖一樣形象的表示出來,真正地讓工程師專心進入到設計狀態。
[1]王瑞榮.基于事件觸發并發數據流模型的可視化編程語言研究[D].杭州:浙江大學,2003.
[2]徐成.基于事件驅動的機器人圖形化編程系統研究[J].機械制造,2010(9):38-40.
[3]齊大彬.智能教育機器人圖形化編程系統原理及實現[J].計算機應用與軟件,2014,31(3):79-81.
[4]王強.LinkBoy創意展示平臺簡介[EB/OL].[2013-04-25]http://blog.sina.com.cn/s/blog_694e0ad70101acvj.html.
[5]張曉盼.引入圖形化方法改革非計算機專業程序開發教學模式[J].計算機教育,2011(7):57-62.
[6]徐小良.圖形化編程平臺的結構設計及實現[J].計算機工程與應用,2001(4):4-8.
[7]謝宣松.圖形化語言結構及運行模型 [J].吉林大學學報,2006,36(2):219-223.
[8]劉昱.一種面向圖形化編程的軟件設計方法[J].計算機科學,1997,24(1):73-76.