1、 引 言
項目中多套測量設備相距較遠,通訊時外接同步調制解調器。在仿真執行時往往條件不具備,聯試時較困難。監控軟件本文不予討論,為了在聯試中能快速分離出通訊雙方的對錯,作者設計了這款調試器,另一個目的就是在無調制解調器時輔助開發人員快速開發出監控軟件,該調試器可以仿真通信任意一方。設計目標為:調試器可以靈活定制通訊規程,設備端口一旦初始化完成。可以自動接收對方信息,允許十六進制顯示原碼,可以顯示接收次數、長度。己方發送時可以依字節形式或字符形式發送。如果是字節形式,允許定制任一字節內容,允許定時發送,可以設定發送長度等。
2、 具體實現
根據這一需求,作者使用Delphi 7.0開發這款軟件。首先定制界面,該部分較簡單,略之。關鍵部分如下:設備初始化及I/O,十六進制顯示,十六進制輸入。為了做到通用性,作者重新改寫了Moxa的庫函數,精簡為如下幾條函數:
設備打開函數;設備讀函數;設備寫函數;設備刷新函數;設備關閉函數。
設備打開是關鍵,該函數綜合了Moxa庫中的幾個函數,規格定制以參數形式提供。主要代碼如下(注意Uses部分應包含Moxa的Syncapi.bas庫):
HDLC通信是同步通信方式,CRC校驗是必須的,另一方面,在實際應用中,通信雙方都要使用外時鐘,而開發階段一般使用內時鐘,所以本初始化函數將時鐘方向作為參數設置。
十六進制顯示Delphi提供了BinToHex函數,但這只顯示單個數值成十六進制形式。作者另編了一函數,可以顯示一緩沖區內容,并且以規范的形式顯示。例如:73 AB4D 5F。
十六進制輸入較麻煩,制作如下:在界面上定制一StringCrid組件,定制格子為2行1 024列,每個格子可以輸入2個字母大小,上一行在FormCreat()消息中填充為序號數,下一行用于定制十六進翻顯示輸入。
(1) 定制該格子的KeyPress消息,用集合類檢查輸入該格子的是否是十六進制字符,如果不是,給出提示。
(2) 定制該格子的StringGridlSetEditText消息,判斷輸入字符串是否大于2,如果是,不予理睬。該方法保證輸入字符串是規范的十六進制形式,例1A 5F 4D 3401 7E。
3、 發送機制設計
發送設計為線程,該線程等待發送事件,該事件由用戶按鈕或定時消息觸發,線程流程為:
Do While True Begin
判斷線程是否退出,如退出結束該線程;
如不退出,永遠等待發送事件,該事件設計為無名手工復位的簡單事件,事件置位由界面發送按鈕或定時期器觸發;
如等到該事件,復位該事件,填寫發送緩沖內容,調發送函數,完成發送,發用戶消息告知前臺發送完成;
End;
4 、接收機制設計
接收亦設計為線程,該線程睡眠10 ms讀端口,如果讀不到或者讀錯誤,調陷阱代碼處理,如讀到發用戶消息給前臺,讀入緩沖傳給前臺緩沖供前臺顯示,顯示形式由界面決定(十六進制或字符)。
5、 用戶消息處理
前臺用戶消息為讀完成和寫完成消息,前臺用戶消息完成顯示或者存儲操作,根據界面選擇框確定顯示形式(char or byte),讀人次數,讀入長度,是否要求永遠顯示(可以常時間監視),是否要求存儲文件。
6 、其他設計部分
(1) 設計一編輯控件,可以輸入發送長度。
(2) 設計一無線電按鈕組,用于判斷是字符形式或字節形式輸入。
(3) 定制收、發字節長度,次數顯示,定制狀態條各種提示符等。
(4) 設計一發送按鈕,完成發送緩沖區填充,并調發送函數發送之。
(5) 設計一Timer組件,間隔可以定制,調發送按鈕完成定時發送。
(6) 設計該調試器的陷阱處理部分,處理可能的異常。如突發硬件異常事件、顯示、異常大數據處理等。
(7) 設計該調試器的接收信息存儲部分,允許將接收信息自動存儲為文件。
7、 結 語
作者開發的這個同步卡調試器在航天工程現場已多次使用,快速幫助通信雙方分離問題。文中給出了同步卡調試器的關鍵部分,由于他支持位級的輸入編輯,發送時序也可以選擇,所有的這一類項目都可以調試,在現場或任務階段為項目相關人員提供了有力支持。通信雙方均可受益。
責任編輯:gt
-
軟件
+關注
關注
69文章
4777瀏覽量
87162 -
函數
+關注
關注
3文章
4307瀏覽量
62432 -
調試器
+關注
關注
1文章
300瀏覽量
23691
發布評論請先 登錄
相關推薦
評論