第三章 以Borland C++ Builder開發 視窗介面為基之I/O控制技術
內容大綱 緒論 微電腦I/O控制系統 圖形介面暨視窗為基的應用程式 Borland C++ Builder 程式開發 本書實習實作使用到的BCB VCL元件 總結
緒論 微電腦I/O控制系統到處可見 控制技術良劣,會影響操控效能 本書探討個人電腦I/O控制技術 使用PC的輸出入埠,進行控制資料的輸出入 操控介面完全仰賴控制軟體 圖形為主的視窗介面控制技術
緒論(續) 個人電腦平台下的軟體開發工具不勝枚舉 微電腦I/O控制技術和程式開發系統或語言無關 使用功能強大且容易上手的程式開發工具 MS 的Visual Studio Borland 的C++ Builder、JBuilder、Delphi SUN 的JAVA 微電腦I/O控制技術和程式開發系統或語言無關 使用功能強大且容易上手的程式開發工具 要求讀者程式實作 Borland 的 C++ Builder 讀者必須具備使用及撰寫C/C++的能力
內容大綱(我們在哪裡?) 緒論 微電腦I/O控制系統 圖形介面暨視窗為基的應用程式 Borland C++ Builder 程式開發 本書實習實作使用到的BCB VCL元件 總結
微電腦I/O控制系統 微電腦控制系統的應用到處可見 3C產品的民生消費物品 大型公共設施工業設備、或國防武器 內有獨立運作或協調運轉的電腦控制系統
微電腦I/O控制系統(續) 簡單的控制系統 作成微電腦晶片,直接控制設備 控制的動作較簡單 毋須高度複雜的運算 功能較簡單且較經濟 如:玩具內的聲光控制,簡便型計算機
微電腦I/O控制系統(續) 複雜或高彈性控制系統 採用專用的控制系統 可能採用專用的或泛用的電腦系統 控制邏輯或是控制程式是以軟體寫成 隨時可以更新和變更 提供較大的操控彈性。 如:暖氣空調設備、升降梯、火災受訊設備、門禁系統
機電控制系統控制技術類型 硬式控制法 軟式控制法 完全採用硬體設備 譬如:公寓的供水系統—兩段浮筒和抽水馬達及繼電器 使用操控軟體和微電腦 使用標準人機介面設備 滑鼠、鍵盤 譬如:無人駕駛的捷運車系統、工廠的無人搬運車控制系統、核電廠的廠區控制系統、或複雜加工機台的控制系統
機電系統硬式控制法
機電系統軟式控制法
控制系統概觀 一定會有前面章節敘述過的感測器和致動器 感測器是系統的輸入,致動器是系統輸出 二者間的關聯就是所謂的控制邏輯 硬式控制模式將控制邏輯硬生生地以線路連結 軟式控制則以邏輯程式或操控軟體,彈性地銜接二者
內容大綱(我們在哪裡?) 緒論 微電腦I/O控制系統 圖形介面暨視窗為基的應用程式 Borland C++ Builder 程式開發 本書實習實作使用到的BCB VCL元件 總結
圖形介面暨視窗為基的應用程式 視窗為基的電腦作業系統已成主流 電腦應用程式普遍採用圖形式人機交談介面 滑鼠成為個人電腦和工作站電腦的標準配備 Apple Macintosh OS Microsoft Windows 以XWindow為基的 Unix 作業系統 Sun 工作站電腦的 Solaris Linux系統上的Red Hat 電腦應用程式普遍採用圖形式人機交談介面 滑鼠成為個人電腦和工作站電腦的標準配備 典型的圖形式人機交談介面: 使用者操控滑鼠,在視窗為基的應用程式內,顯示的各種控制項(controls)上,以滑鼠或敲擊、或快擊兩次、或拖拉等動作,下達各式操作指令
圖形式人機交談方式 提供了直覺的軟體操作方式 合乎人類的習性 易讓操作者聯想或監看操控結果 本書探討的微電腦I/O控制技術需要圖形介面 採用圖形式人機交談介面 達成圖形監視和控制的效果
內容大綱(我們在哪裡?) 緒論 微電腦I/O控制系統 圖形介面暨視窗為基的應用程式 Borland C++ Builder 程式開發 本書實習實作使用到的BCB VCL元件 總結
Borland C++ Builder 程式開發 BCB提供視窗程式開發者 RAD (Rapid Application Development)的技術 採用RAD技術開發視窗為基的應用程式 以一個主視窗作為主要的系統介面 BCB 的程式開發專案(Project)便是以「表單」為主要介面 表單本身就是一個視窗,內有各式各樣的「控制項」(controls) 應用程式開發人員規劃各個表單的內容,並仔細設計分析各個表單的邏輯流程,以展現應用程式應有的功能 程式撰寫便是處理各個控制項接收訊息或事件時的處理程序
BCB 提供的IDE (Integrated Development Environment) 整合開發環境 程式編輯環境 指令或函式語法提示環境 編譯指令和執行程式 原始程式除錯和模擬執行結果 程式執行和測試環境 應用程式包裝環境 其他資料庫取用,資源編輯和構建等支援環境
BCB 程式開發IDE
BCB係提供VCL (Visual Component Library) 元件庫 繼承架構嚴謹的各式類別和元件 建立物件直接使用或擴充它 提供各式各樣的功能 各式Wizard 精靈工作的以進行的元件庫 智慧型應用程式框架開發環境
使用BCB新建一個應用程式 系統會內定為使用者撰寫一個專用的TForm1類別,繼承自VCL內的TForm 類別 附有一個表單的定義檔(Unit1.dfm) 程式開發者使用VCL內的各種元件,以類似堆積木的方式,透過IDE環境下的表單設計介面,以圖像拖拉在表單上添加各種元件 設計過程系統會幫您撰寫相關的C++程式在TForm1類別程式內
VCL內的元件 執行時可顯現於表單者 沒有視覺顯示功能者 表單中的控制項 扮演使用者和系統的交談介面 透過這些控制項內的事件處理函式(event handlers)觸動行功能。 沒有視覺顯示功能者 提供物件協助 如:AnsiString類別
表單控制項 控制項元件 僅扮演介面角色只紀錄本身的特性(attributes)和狀態(states)供使用者和程式辨視 添加於表單類別內的VCL元件均以C++物件指標(object pointer)指稱
內容大綱(我們在哪裡?) 緒論 微電腦I/O控制系統 圖形介面暨視窗為基的應用程式 Borland C++ Builder 程式開發 本書實習實作使用到的BCB VCL元件 總結
本書實習實作使用到的BCB VCL元件 僅介紹與本書目標相關的程式開發,所需的VCL元件 元件的屬性和成員函式也僅介紹與本課程相關者 其他的元件,讀者可視需要直接參閱BCB提供的線上說明資料 參閱相關說明,並透過IDE環境在程式開發環境下自行演練各種屬性變更
BCB VCL元件 表單元件 (TForm) 按鈕元件 (Tbutton) 群組框元件 (TGroupBox) 捲選盒元件 (TComboBox) 面板元件 (TPanel) 碼表元件 (TTimer) 標籤元件 (TLabel) 輸入元件 (TEdit) 升降元件 (TUpDown)
表單元件 (TForm) 不直接使用 不直接定義一個TForm類別的物件使用 自動由BCB處理 自動產生一個繼承自TForm類別的新表單類別,名為TForm1 產生一個unit1.h,unit1.cpp,及一個描述表單佈置的unit1.dfm等檔案
TForm 元件的主要屬性和內容
TForm 元件接受的主要事件和處理邏輯
按鈕元件 (Tbutton) 典型的表單控制項 常常作為使用者執行程式某項功能的介面 可動態設定能否使用的狀態(Enabled) 可動態設定藏、現(Visible)的狀態
TButton元件構建工具及示意
Tbutton 元件的主要屬性和內容
Tbutton 元件接受的主要事件和處理邏輯
Exercise 3-1 :實作一個電子琴演奏介面 在表單上佈置一個琴鍵畫面 內含一組琴鍵按鈕有八個白鍵和五個黑鍵 在類別下預先增添二個成員函式 void play_a_key( int num ) 驅動電腦喇叭發出琴音 void stop_a_key() 停止喇叭的發音
Exercise 3-1:實作一個電子琴演奏介面(續) 在琴鍵按鈕的OnMouseDown滑鼠事件處理函式中,以該琴鍵的琴音計數為參數呼叫play_a_key()函式 在表單類別的OnMouseUp 事件下添加處理函式呼叫stop_a_key() 將所有的琴鍵的OnMouseUp 事件處理函式導引到FormMouseUp()處理函式
Exercise 3-1的琴鍵表單介面
群組框元件 (TGroupBox) 將一些控制項組成一個群組 視覺上可與其他控制項區隔 框內的控制項彼此維持相對位置,以整體方式一齊佈設在表單上,有助於表單的編排設計 主要的物件屬性是顯示群組頭銜的Caption屬性
群組框元件TGroupBox構建工具及示意
捲選盒元件 (TComboBox) 常見的表單控制項元件 讓使用者設定某項資料值 資料值只能由一堆固定的值中選擇 一堆固定的值列成一個捲選清單
TComboBox元件構建工具及示意
TComboBox元件的主要屬性和內容
Exercise 3-2 :設計微電腦I/O控制的主要人機介面 使用BCB建立一個應用程式,儲存成control.bpr 將內定的TForm1表單的name屬性設為IOControlFM 自行使用資源(resources)編修工具,設計一個小圖像並將它設為本專案的圖像 將TIOControlFM表單的Caption屬性設為「微電腦I/O控制C語言實作」
Exercise 3-2 :設計微電腦I/O控制的主要人機介面(續) 加入一個群組框元件,頭銜設為「8255模式設定」 加入一個捲選盒元件 在Items屬性內新增一筆字串「0x99」 加入一個按鈕元件 Caption設成「控制模式設定」 在它的OnClick事件中添加事件處理函式 本函式將由您撰寫I/O程式,將捲選盒選定的控制資料輸出,以設定一個I/O介面卡內8255晶片的控制模式 使用者選的模式資料,以字串方式存放在捲選盒的Text屬性內
Exercise 3-2 微電腦I/O控制實習的表單介面
面板元件 (TPanel) 是一個矩形包容器元件 收納其他元件一起處理 特別用於表單佈置時,以各個面板元件為單位停駐在視窗邊緣或中間 面板元件可設定它的顏色,因此我們可使用它來代表控制系統的燈號
TPanel元件構建工具及示意
TPanel元件的主要屬性和內容
碼表元件 (TTimer) 用於須定時反覆定時執行一些運算的情形 用於每到設定的間隔時間到時,產生時間到的事件 如:執行動畫時,每1/30秒必須執行更新畫面一次(以最新的位置和方位繪出場景內各個物件) 如:微電腦I/O控制系統,必須隨時掃描輸入訊號 用於每到設定的間隔時間到時,產生時間到的事件 處理程序在時間到事件的處理函式中實作 VCL設有TTimer元件和時間到事件OnTimer 計時並設定相關的處理函式
碼表元件 (TTimer)(續) 在設定的時間間隔到時,會產生OnTimer時間到事件 應用程式可動態地變更間隔時間,以加快或減慢事件產生的頻率 應用程式可視情況隨時啟動或停止碼表 碼表元件是沒有視覺顯示功能的VCL元件 程式執行時,不會有任何圖像顯示
TTimer元件構建工具及示意
TTimer元件主要屬性和內容
TTimer元件接受的主要事件和處理邏輯
Exercise 3-3 :加入微動開關實習介面 承續範例二,在表單中加入一個群組框元件,頭銜設成「微動開關實習」 在其內加入一個方形面板元件 Color屬性設為clMaroon的暗紅色,模擬控制系統的燈號 加入一個碼表元件 Interval設為100,每秒發出十次時間到事件 狀態Enabled設為false 透過它的OnTimer事件內新增內定的處理函式
Exercise 3-3 :加入微動開關實習介面(續) 本函式在後半段課程將由您撰寫I/O程式掃描微動開關的訊號,並據以改變面板元件的顏色,模擬燈號的亮、滅 加入一個按鈕元件 Caption設成「開始偵測」 在它的OnClick事件中添加內定的事件處理函式 檢查該按鈕的名稱若是「開始偵測」,啟動碼表,並將名稱改成「停止」 相反地,若按鈕的名稱不是「開始偵測」,停止碼表並將名稱重新改回「開始偵測」
Exercise 3-3加入微動開關實習介面後的表單
Exercise 3-4 :加入光遮斷開關實習介面 承續範例三,加入一個群組框元件 頭銜設成「光遮斷開關實習」 加入一個方形面板元件 Color設為clOlive的暗黃色,模擬控制系統的燈號 加入一個碼表元件 Interval設為100 起始狀態Enabled設為false 透過它的OnTimer事件內新增內定的處理函式 本函式在後半段課程將由您撰寫I/O程式掃描光遮斷開關的遮斷與否訊號,並據以改變面板元件的顏色,模擬燈號的亮、滅
Exercise 3-4 :加入光遮斷開關實習介面(續) 加入一個按鈕元件 Caption設成「啟動開關」 在它的OnClick事件中添加內定的事件處理函式 檢查該按鈕的名稱若是「啟動開關」,將透過I/O晶片送訊號給控制系統,以啟動整個系統再將名稱改成「停止」 相反地,若按鈕的名稱不是「啟動開關」,停止系統功能 Caption設成「開始偵測」 檢查該按鈕的名稱若是「開始偵測」,啟動碼表,並將名稱改成「停止」 相反地,若按鈕的名稱不是「開始偵測」,停止碼表並將名稱改回「啟動開關」
Exercise 3-4加入光遮斷開關實習介面後的表單
Exercise 3-5:添加近接開關實習人機介面 承續範例四,加入一個群組框元件,頭銜設成「近接開關實習」 加入一個方形面板元件 Color設為clGreen的暗綠色,模擬控制系統的燈號 加入一個碼表元件 Interval設為100,起始狀態Enabled設為false 透過它的OnTimer事件,新增內定的處理函式 將由您撰寫I/O程式掃描近接開關的進接狀態,並據以改變面板元件的顏色,模擬燈號的亮、滅
Exercise 3-5 :添加近接開關實習人機介面(續) 加入一個按鈕元件 將它的Caption設成「開始偵測」 在它的OnClick事件中添加內定的事件處理函式 在該函式內撰寫程式,檢查該按鈕的名稱若是「開始偵測」,啟動碼表,並將名稱改成「停止」 相反地,若按鈕的名稱不是「開始偵測」,停止碼表並將名稱改回「開始偵測」
Exercise 3-5加入近接開關實習人機介面後的表單
Exercise 3-6 :添加七段顯示器實習人機介面 承續範例五,加入一個群組框元件,頭銜取為「七段顯示器實習」 在其內加入一個捲選盒元件 在Items內新增16筆字串:「0」,「1」, ... ,「9」,「A」,「b」, 「c」,「d」,「E」,「F」。 加入一個按鈕元件 將它的Caption設成「送出字形」 在它的OnClick事件中添加內定事件處理函式 本函式將捲選盒選定的文數字資料輸出到控制系統,點亮八段顯示器
Exercise 3-6 加入七段顯示器實習人機介面 後的表單
標籤元件(TLabel) 常置於其他輸出入控制項旁 輔助說明表單內的各控制項的內涵和功能 主要的物件屬性是Caption,內容是字串組成說明旁邊的控制項的內容內涵或功能 可在程式執行中動態變更之
TLabel元件構建工具及示意
輸入元件(TEdit) 是最常見的表單控制項之一 接受使用者輸入文字或數字等資料 輸入元件內定的資料格式是字串 屬常用的人機介面控制項 字串的資料型態是VCL內的AnsiString類別 如為數字時,必須使用公用函式StrToInt() 或 StrToFloat()進行數字轉換 也可使用AnsiString類別的ToInt(), ToFloat()成員函式轉換之
TEdit元件構建工具及示意
輸入元件TEdit的主要屬性和內容
升降元件TUpDown 提供升和降小按鈕,作為人機介面,進行它所結合的資料的增減 常結合TEdit輸入元件,透過它的小按鈕進行輸入數值之增減,毋須使用鍵盤輸入數字 內定的控制值是整數,因此有上、下限的界限值 使用者押按升和降小按鈕時,該控制值則以一定的增減量增減
TUpDown元件構建工具及示意
TUpDown元件的主要屬性和內容
Exercise 3-7 :添加步進馬達實習人機介面 承續範例六,加入一個群組框元件,頭銜取為「步進馬達實習」 在其內加入四個TLabel標籤元件,Caption分別設為:「轉速」,「個1.8度/秒」,「角度」,和「度」 加入一個輸入元件 將標籤和輸入元件依序排成:「轉速」標籤、輸入元件、「個1.8度/秒」標籤 顯現給使用者馬達轉速設定資訊 加入一個增減元件,並將它的Associate屬性設為上面的輸入元件 Position屬性設為10、Max屬性設為100、Min屬性設為1、以及Increment屬性設為1
Exercise 3-7 :添加步進馬達實習人機介面(續) 加入一個輸入元件 將「角度」和「度」標籤配合輸入元件排列妥當,以提示步進馬達的轉動角度 加入一個碼表元件 將它的Interval設為1000,起始狀態Enabled設為false 由BCB在它的OnTimer事件內新增內定處理函式 規律且持續地將控制訊號輸出,以逐步轉動步進馬達 程式必須累計執行的次數,當次數達到馬達已經轉完設定的角度時,由程式將碼表停止 碼表的Interval值,由輸入元件設定的值換算後動態設定 步進馬達的轉速會隨控制訊號輸入的快慢而改變,因此縮短碼表間隔時間,馬達轉速將加快,反之將減慢
Exercise 3-7 :添加步進馬達實習人機介面(續) 加入一個按鈕元件,將它的Caption設成「啟動馬達」 在它的OnClick事件中添加內定事件處理函式 檢查該按鈕的名稱若是「啟動馬達」,則由使用者設定的速度換算控制訊號送出的間隔時間,設定碼表的Interval 接著再啟動馬錶,按時送出控制訊號,並將名稱改成「停止」 相反地,若按鈕的名稱不是「啟動馬達」,則停止碼表並將名稱改回「啟動馬達」
Exercise 3-7 加入步進馬達實習人機介面後 的表單
Exercise 3-8 :添加直流馬達PWM實習介面 在其內加入二個標籤元件,Caption為:「基本週期」,「百分比」 在「基本週期」標籤右邊添加一個輸入元件 在「百分比」標籤右邊添加一個輸入元件 添加一個升降元件,將它的Associate設為「百分比」標籤,以便控制PWM的比例 升降元件的Position設為50、Max設為100、Min設為0、以及Increment設為1
Exercise 3-8 :添加直流馬達PWM實習介面(續) 加入一個按鈕元件,Caption設成「啟動馬達」 在它的OnClick事件中添加內定事件處理函式 檢查該按鈕的名稱若是「啟動馬達」,由使用者設定的基本週期和百分比換算成數值後,寫出控制資料,啟動直流馬達 再將名稱改為「停止」 相反地,若按鈕的名稱不是「啟動馬達」,寫出控制資料將直流馬達停止,並將名稱改回「啟動馬達」 最後再加入一個按鈕元件,Caption設成「反轉」 在它的OnClick事件中添加內定處理函式 檢查該按鈕的名稱若是「反轉」則寫出控制資料,改變直流馬達的轉向後,將名稱改成「正轉」 相反地,若按鈕的名稱不是「反轉」則寫出控制資料將直流馬達再反轉,並將名稱改回「反轉」。
Exercise 3-8加入直流馬達PWM實習介面後 的表單
內容大綱(我們在哪裡?) 緒論 微電腦I/O控制系統 圖形介面暨視窗為基的應用程式 Borland C++ Builder 程式開發 本書實習實作使用到的BCB VCL元件 總結
總結 本章介紹的BCB程式開發環境內容僅止於圖形式人機介面的構建 本章僅介紹的與本書實習相關的VCL元件 透過拖拉方式,即可將該物件或元件加入新產生的表單類別裡面 其他的類別,則須以程式撰寫方式,宣告和定義其物件,依循手冊上的說明使用該類別提供的各種成員函式,執行各種功能 目標是讓讀者熟悉視窗為基應用程式開發的步驟和實際構建方法 藉由範例的示範,預先實作本書的微電腦I/O控制實習的軟體框架部分 剩下的部分就是熟悉微電腦架構和I/O控制技術後,依實習目標實作各交互作用函式的內容即可
參考資料 C++ Builder 5 Developer's Guide (With CD-ROM) by Jarrod Hollingworth (Editor), Dan Butterfield, Bob Swart, Jamie Allsop, SAMS. Borland C++Builder How-To by John Miano, Thomas Cabanski (Contributor), Harold Howe (Contributor), The Waite Group. C++Builder 5 徹底研究,陳周造、陳燦煌,博碩文化。