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

    EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于ARM的LCU測試系統(tǒng)的設計

    基于ARM的LCU測試系統(tǒng)的設計

    作者: 時間:2009-02-26 來源:網絡 收藏

    隨著我國機車控制水平的不斷提高,微機控制已經成為我國機車控制的重要控制方式,而邏輯控制單元(Logic Control Unit)作為主要完成機車運行邏輯控制、電路故障記錄控制等功能的控制模塊,是關系機車安全運行的重要部件。與傳統(tǒng)觸點控制電路相比,具有可靠性高、體積小、通用性好、維護簡單方便等優(yōu)點。
      傳統(tǒng)的檢測包括人力檢測、單片機檢測和PC機通過串口控制開發(fā)板檢測[1]。但是隨著LCU生產制造水平的提高,傳統(tǒng)的檢測方法已經不能很好地完成測試任務。
      具有開發(fā)周期短、功耗低、性能優(yōu)越等特點,能夠滿足LCU檢測的要求。Linux操作系統(tǒng)開發(fā)的通用LCU檢測軟件,可以提供多層次、多場合的復用,可節(jié)省設備成本,具有巨大的市場前景和經濟效益。
    1 系統(tǒng)原理
      LCU檢測就是對LCU內部運行邏輯做出測試并進行故障診斷。通過向被測試的LCU發(fā)出初始命令,并查看其輸出結果是否與參考輸出相同,從而判斷被測試的LCU邏輯是否正確。
      本文沿用傳統(tǒng)繼電器控制中的部分概念進行軟件分析。傳統(tǒng)硬件繼電器觸點分為“常開觸點”和“常閉觸點”兩類。一條線路的運行結果會反映到另外一個線圈上,因此,繼電器控制的輸出可以用線圈表示。本文沿用硬件繼電器中的名稱進行軟件邏輯分析。在程序中以BOOL變量TRUE表示觸點開狀態(tài),F(xiàn)ALSE表示觸點閉狀態(tài)。
      線路上的信號都可以采用二進制表達,所以測試的范圍會根據(jù)線路上觸點個數(shù)呈現(xiàn)指數(shù)增長。對于要求不太嚴格的控制信號,只要求在適當?shù)臈l件下,得到開通或閉合的結果,其動作的條件為充分不必要條件。對于要求嚴格的控制信號,不僅要求在確定的條件下得到應有的結果,而且要保證這個條件是充分必要條件。因此,很大程度上測試可能會遍歷觸點的所有組合,測試的總體消耗時間就會擴充到很大的時間范圍。假設一條線路的信號流動經過時間值為ns, 則計算一條包含20個觸點的線路的全部測試時間為220ns。
      可見,測試情況的選擇十分重要。測試復雜性的主要矛盾在于:需要證明充分必要條件的線路的多少以及該線路的觸點的多少。工業(yè)標準反映在程序中的情況就是保留測試的選擇性,便于在后續(xù)工作中進行選擇和修改。此外,控制程序的算法,進行復合運算,提高測試的效率也是關鍵所在。本系統(tǒng)的硬件框圖如圖1所示。

    本文引用地址:http://www.czjhyjcfj.com/article/152632.htm

    2 操作系統(tǒng)移植
      交叉編譯器的設置是嵌入式系統(tǒng)開發(fā)的第一步。所謂交叉編譯就是在一種體系結構的機器上編譯出能夠運行于另一種體系機器上的代碼。若要開發(fā)在目標板上運行的程序,無論是操作系統(tǒng)還是應用程序,都必須是體系指令的二進制代碼[2]。但是直接在ARM目標板上開發(fā)程序,無論是程序運行速度還是調試手段,都嚴重制約了開發(fā)效率,有些程序的編寫更需要在PC機上才能完成。交叉編譯的作用,就在于在PC機上開發(fā)程序,交叉編譯后,再放置到ARM目標板上去執(zhí)行。編譯順序如圖2所示。

    搭建ARM交叉編譯器的步驟:(1)編譯安裝binutils;(2)安裝linux 的頭文件;(3)編譯安裝gcc的c 編譯器;(4)編譯安裝 glibc;(5)編譯安裝gcc的c、c++編譯器。
      Boot-loader是RAM芯片的引導程序,它的作用是加載操作系統(tǒng)。兩個著名的開源Boot-loader,其中一個是U-boot,它的形式就是一個代碼包,包中按照Linux一般的編程習慣和不同的目標板,將相應的匯編和C語言代碼羅列在對應的文件夾下,讓開發(fā)人員自行配置。
      修改U-boot的過程:(1)基本的硬件初始化;(2)跳轉到 Stage2 的 C 入口點;(3)定義函數(shù)Nand_init;(4)跳轉到Kernel。
      Linux內核就是一個可執(zhí)行的Linux操作系統(tǒng)的套件集合,簡稱內核[3]。套件的選擇,就是內核的配置。內核的配置表明了內核的可調整性。根據(jù)Linux軟件的開發(fā)規(guī)則,可到Linux內核源碼包的路徑下,在終端使用配置命令進行內核配置。在配置內核的時候,需要定義內核啟動的命令行。
    3 LCU檢測系統(tǒng)應用程序
    3.1 軟件及其要素
      軟件的應用設計,就是確定軟件的各個部分及各部分之間的相互關系,信息在其中發(fā)送、傳遞和接收,以及部分運動發(fā)展的走向和趨勢,最終得到可以預見的結果[4]。它應該遵循下面四個基本要素:名稱、問題、解決方案效果。
    面向對象的軟件開發(fā),從不同的對待問題的層次出發(fā)能得到不同問題的解決方案。其基本工作流程如圖3所示。

    3.2 定義基本的類和對象及人機界面的設計
      在需求分析的說明中,最常出現(xiàn)的三個名詞分別是觸點、測試和線圈。每個測試包含了不同的線圈,每個線圈又分別由觸點組成。所以,觸點、線圈和測試能夠分別抽象出來做成單獨的類。觸點必須有ID、常開/常閉的類型和運行中處于的值都應該在屬性中出現(xiàn)。測試的ID應該能夠區(qū)分是哪一次測試,并且記錄下所包含觸點的初始值以及標準情況下結果的預計值。線圈則以觸點和測試作為成員變量。
      首先設計用二維數(shù)組來模擬測試與觸點的關系。假設數(shù)組的橫向和縱向表示分別為測試和觸點,則某個線圈的設計如圖4所示。

    對照實際情況,可以使用二維數(shù)組進行描述。觸點的加入和刪除就是列的插入和刪除運算,測試的加入和刪除就是行的插入和刪除運算。對某線圈的實驗就是把每行遍歷一遍,結果對照預計值進行邏輯判斷。但這僅僅是表達了單個線圈的情況,多個線圈則呈現(xiàn)如圖5所示的書頁式的結構。

    直觀上看,重疊配置的線圈就像是檢查手冊的一封封頁面,測試整個系統(tǒng)的方法就是翻弄這本“書”,從頭至尾把所有的線圈遍歷一遍。
    3.3 序列化存儲類serial和鏈表類
      如果延續(xù)這樣的思路,則關于數(shù)組的操作會產生新的問題:C語言中定義數(shù)組必須先確定數(shù)組的大小才能分配合適的內存。例如,要得到一個m×n二維數(shù)組,則必須在編譯時確定m和n的大小,但實際上要求m和n是可變的。
      由于文件是內部調用的接口,應該先沿著采用文件來登記測試項目的結論進行分析。采用序列化技術能夠簡單而方便地實現(xiàn)文件存儲。序列化是指將對象實例的狀態(tài)存儲到可持久保持信息的物理設備的過程,其特點就是線性存儲。序列化技術實現(xiàn)了文件的存儲,同時它也給出了一種思路:把所有一切都統(tǒng)一對待,變成一根主線。應用到“二維結構”上就是將二維表變成一維的大表,同時用指針來保持邏輯的連接。如圖6所示。

    但序列化只提供鏈型的存儲形式,只能用一維的鏈表模擬二維數(shù)組,因為不知道二維鏈表的指針應該如何安排。
      決定采用鏈式聯(lián)系的方法:用指針來實現(xiàn)連接。但是指針的傳遞跨越了類,因此有必要把鏈式結構直接抽象成類,產生定義觸點鏈表類、測試鏈表類和線圈鏈表類,并將它們抽象出一個基本的鏈表類,實現(xiàn)鏈表基本的操作,再從它派生出上述三個鏈表類。
    3.4 計算預計值
      測試隨意地更改其所包含的觸點,隨之變動的是測試的預計值。這可以采取人工輸入來實現(xiàn),但是如果用表達式字符串來表達測試的邏輯計算,可以通過字符替換的方法讓機器來實現(xiàn)。
      表達式字符串中間必須有觸點的ID名字,常閉觸點的名字前加“~”,測試線路的“與”邏輯用字符“*”來表示,或邏輯用字符“|”來表示(也可以選擇其他的計算字符),用括號表示優(yōu)先的線路邏輯,空格是人性化的適應性定義。這樣即可以表達出線路的邏輯。
      計算預計值的算法如下:
      (1) 輸入目標字符串。
      (2) 首先去空格。
      (3) 用觸點的狀態(tài)值替換觸點ID,如果是FALSE,替換成F,如果是TRUE,替換成T。
      (4) 開始循環(huán): F*F 替換成F
           F*T 替換成F
       T*F 替換成F
       T*T 替換成T
       F|F 替換成F
       F|T 替換成T
       T|F 替換成T
       T|T 替換成T
       (T) 替換成T
       (F) 替換成F
      測量字符串長度,如果和上次相比變小,則重新開始循環(huán);如果沒有變化,則跳出循環(huán)進行下一步。
      (5) 判斷:如果字符串==T,則說明預計值是TRUE;如果字符串==F,則說明預計值是FALSE;如果字符串是其他值,說明輸入的表達式有誤,提示重新確定表達式。


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區(qū)

    關閉
    主站蜘蛛池模板: 正定县| 获嘉县| 华池县| 深州市| 张家港市| 乳山市| 苗栗市| 佛坪县| 和龙市| 咸宁市| 秀山| 富裕县| 大姚县| 太仆寺旗| 荔波县| 台东市| 山丹县| 宝兴县| 玉屏| 满城县| 咸丰县| 五莲县| 西畴县| 安阳市| 黔西| 双鸭山市| 普定县| 虎林市| 乐山市| 米脂县| 从化市| 裕民县| 吉水县| 镇坪县| 田阳县| 怀宁县| 和平区| 平武县| 黄浦区| 临颍县| 施秉县|