• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Moxa動(dòng)態(tài)庫(kù)的同步卡調(diào)試器設(shè)計(jì)

    基于Moxa動(dòng)態(tài)庫(kù)的同步卡調(diào)試器設(shè)計(jì)

    作者: 時(shí)間:2007-09-04 來源:網(wǎng)絡(luò) 收藏
    1 引 言

    項(xiàng)目中多套測(cè)量設(shè)備相距較遠(yuǎn),通訊時(shí)外接同步調(diào)制解調(diào)器。在仿真執(zhí)行時(shí)往往條件不具備,聯(lián)試時(shí)較困難。監(jiān)控軟件本文不予討論,為了在聯(lián)試中能快速分離出通訊雙方的對(duì)錯(cuò),作者設(shè)計(jì)了這款,另一個(gè)目的就是在無調(diào)制解調(diào)器時(shí)輔助開發(fā)人員快速開發(fā)出監(jiān)控軟件,該可以仿真通信任意一方。設(shè)計(jì)目標(biāo)為:可以靈活定制通訊規(guī)程,設(shè)備端口一旦初始化完成。可以自動(dòng)接收對(duì)方信息,允許十六進(jìn)制顯示原碼,可以顯示接收次數(shù)、長(zhǎng)度。己方發(fā)送時(shí)可以依字節(jié)形式或字符形式發(fā)送。如果是字節(jié)形式,允許定制任一字節(jié)內(nèi)容,允許定時(shí)發(fā)送,可以設(shè)定發(fā)送長(zhǎng)度等。

    2 具體實(shí)現(xiàn)

    根據(jù)這一需求,作者使用Delphi 7.0開發(fā)這款軟件。首先定制界面,該部分較簡(jiǎn)單,略之。關(guān)鍵部分如下:設(shè)備初始化及I/O,十六進(jìn)制顯示,十六進(jìn)制輸入。為了做到通用性,作者重新改寫了的庫(kù)函數(shù),精簡(jiǎn)為如下幾條函數(shù):

    設(shè)備打開函數(shù);設(shè)備讀函數(shù);設(shè)備寫函數(shù);設(shè)備刷新函數(shù);設(shè)備關(guān)閉函數(shù)。

    設(shè)備打開是關(guān)鍵,該函數(shù)綜合了庫(kù)中的幾個(gè)函數(shù),規(guī)格定制以參數(shù)形式提供。主要代碼如下(注意Uses部分應(yīng)包含的Syncapi.bas庫(kù)):

    HDLC通信是同步通信方式,CRC校驗(yàn)是必須的,另一方面,在實(shí)際應(yīng)用中,通信雙方都要使用外時(shí)鐘,而開發(fā)階段一般使用內(nèi)時(shí)鐘,所以本初始化函數(shù)將時(shí)鐘方向作為參數(shù)設(shè)置。

    十六進(jìn)制顯示Delphi提供了BinToHex函數(shù),但這只顯示單個(gè)數(shù)值成十六進(jìn)制形式。作者另編了一函數(shù),可以顯示一緩沖區(qū)內(nèi)容,并且以規(guī)范的形式顯示。例如:73 AB4D 5F。

    十六進(jìn)制輸入較麻煩,制作如下:在界面上定制一StringCrid組件,定制格子為2行1 024列,每個(gè)格子可以輸入2個(gè)字母大小,上一行在FormCreat()消息中填充為序號(hào)數(shù),下一行用于定制十六進(jìn)翻顯示輸入。

    (1) 定制該格子的KeyPress消息,用集合類檢查輸入該格子的是否是十六進(jìn)制字符,如果不是,給出提示。

    (2) 定制該格子的StringGridlSetEditText消息,判斷輸入字符串是否大于2,如果是,不予理睬。該方法保證輸入字符串是規(guī)范的十六進(jìn)制形式,例1A 5F 4D 3401 7E。

    3 發(fā)送機(jī)制設(shè)計(jì)

    發(fā)送設(shè)計(jì)為線程,該線程等待發(fā)送事件,該事件由用戶按鈕或定時(shí)消息觸發(fā),線程流程為:

    Do While True Begin

    判斷線程是否退出,如退出結(jié)束該線程;

    如不退出,永遠(yuǎn)等待發(fā)送事件,該事件設(shè)計(jì)為無名手工復(fù)位的簡(jiǎn)單事件,事件置位由界面發(fā)送按鈕或定時(shí)期器觸發(fā);

    如等到該事件,復(fù)位該事件,填寫發(fā)送緩沖內(nèi)容,調(diào)發(fā)送函數(shù),完成發(fā)送,發(fā)用戶消息告知前臺(tái)發(fā)送完成;

    End;

    4 接收機(jī)制設(shè)計(jì)

    接收亦設(shè)計(jì)為線程,該線程睡眠10 ms讀端口,如果讀不到或者讀錯(cuò)誤,調(diào)陷阱代碼處理,如讀到發(fā)用戶消息給前臺(tái),讀入緩沖傳給前臺(tái)緩沖供前臺(tái)顯示,顯示形式由界面決定(十六進(jìn)制或字符)。

    5 用戶消息處理

    前臺(tái)用戶消息為讀完成和寫完成消息,前臺(tái)用戶消息完成顯示或者存儲(chǔ)操作,根據(jù)界面選擇框確定顯示形式(char or byte),讀人次數(shù),讀入長(zhǎng)度,是否要求永遠(yuǎn)顯示(可以常時(shí)間監(jiān)視),是否要求存儲(chǔ)文件。

    6 其他設(shè)計(jì)部分

    (1) 設(shè)計(jì)一編輯控件,可以輸入發(fā)送長(zhǎng)度。

    (2) 設(shè)計(jì)一無線電按鈕組,用于判斷是字符形式或字節(jié)形式輸入。

    (3) 定制收、發(fā)字節(jié)長(zhǎng)度,次數(shù)顯示,定制狀態(tài)條各種提示符等。

    (4) 設(shè)計(jì)一發(fā)送按鈕,完成發(fā)送緩沖區(qū)填充,并調(diào)發(fā)送函數(shù)發(fā)送之。

    (5) 設(shè)計(jì)一Timer組件,間隔可以定制,調(diào)發(fā)送按鈕完成定時(shí)發(fā)送。

    (6) 設(shè)計(jì)該調(diào)試器的陷阱處理部分,處理可能的異常。如突發(fā)硬件異常事件、顯示、異常大數(shù)據(jù)處理等。

    (7) 設(shè)計(jì)該調(diào)試器的接收信息存儲(chǔ)部分,允許將接收信息自動(dòng)存儲(chǔ)為文件。

    7 結(jié) 語

    作者開發(fā)的這個(gè)同步卡調(diào)試器在航天工程現(xiàn)場(chǎng)已多次使用,快速幫助通信雙方分離問題。文中給出了同步卡調(diào)試器的關(guān)鍵部分,由于他支持位級(jí)的輸入編輯,發(fā)送時(shí)序也可以選擇,所有的這一類項(xiàng)目都可以調(diào)試,在現(xiàn)場(chǎng)或任務(wù)階段為項(xiàng)目相關(guān)人員提供了有力支持。通信雙方均可受益。



    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 宣汉县| 兴业县| 庆元县| 白玉县| 鄂州市| 东兰县| 新巴尔虎右旗| 平度市| 莱阳市| 灌南县| 丰顺县| 彭山县| 望都县| 新邵县| 金山区| 温州市| 门源| 黑龙江省| 深水埗区| 岐山县| 青州市| 沽源县| 宁乡县| 新泰市| 蚌埠市| 双牌县| 玛沁县| 尚志市| 乐陵市| 黄山市| 郯城县| 莱州市| 齐齐哈尔市| 囊谦县| 汉中市| 沐川县| 逊克县| 宣威市| 株洲市| 贡觉县| 顺平县|