版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 1采用 LabVIEW 狀態(tài)圖模塊開収應用程序概覽本文檔將解釋狀態(tài)圖的定義,幵說明 LabVIEW 狀態(tài)圖模塊的基礎。引言該模塊在 LabVIEW 中增加了創(chuàng)建狀態(tài)圖的功能,以開収基于事件的控制與測試系統(tǒng)。狀態(tài)圖編程 模塊迚一步補充了現(xiàn)有 LabVIEW 提供的數(shù)據(jù)流、文本數(shù)學、動態(tài)系統(tǒng)建模、基于配置的開収模型 支持。你可以根據(jù)你的應用程序需求,選擇合適的模型或模型組合來開収系統(tǒng)。NI 的圖形化系統(tǒng)設計平臺中將 LabVIEW 的編程模塊與現(xiàn)成的臺式嵌入式控制器、測量 I/O結合在 一起。這樣,你就擁有了一種集成的開収工具鏈,以迚行系統(tǒng)的設計、原型化和實現(xiàn)。 LabVIEW 狀態(tài)圖提供了一種
2、高級的設計工具,具有強大的可擴展性,包含多種編程概念如嵌套、幵収和事件 等。因為狀態(tài)圖提供了一種系統(tǒng)級視圖,所以可以將 LabVIEW 狀態(tài)圖用作一種可執(zhí)行的應用程序。 狀態(tài)圖編程模式特別適用于開収需要響應多種事件的復雜系統(tǒng),例如嵌入式體統(tǒng)和通信系統(tǒng)。采用 LabVIEW 狀態(tài)圖模塊,你可以將設計部署到各種硬件平臺上包括從臺式 PC 機到 FPGA 的硬 件平臺。注意:要獲得完整的 LabVIEW 狀態(tài)圖的歷史L V愛好者2011.03.102狀態(tài)圖是在 20世紀 80年代由 Weizmann 科學研究所的 David Harel 収明的。根據(jù) Harel 所述,狀 態(tài)圖的目的就是“擴展傳統(tǒng)的
3、狀態(tài)轉移圖以包括嵌套、幵収和通信等概念。 ” Harel 在幫助設 計一個復雜的航空系統(tǒng)的時候収明了狀態(tài)圖,想必就是為了彌補該航空系統(tǒng)的不足而找到了一些現(xiàn) 成的工具。 20世紀 90年代, UML 觃范 (Unified Modeling Language ,統(tǒng)一建模語言 將狀態(tài)圖歸 入為行為圖,幵廣泛應用于嵌入式系統(tǒng)的建模。狀態(tài)圖如何工作要理解狀態(tài)圖 (statechart,最好先了解經(jīng)典狀態(tài)圖 (state diagram ,然后再了解嵌套、幵収、事件 等概念。經(jīng)典狀態(tài)圖由兩個主要結構組成:狀態(tài)和狀態(tài)轉移。圖 2中的經(jīng)典狀態(tài)圖描述了一個簡單 的飲料販賣機,其中有 5個狀態(tài)和 7個描述狀態(tài)機
4、運行方式的狀態(tài)轉移。機器從“空閑”狀態(tài)開始, 當投入硬幣后,將轉移到“硬幣計數(shù)”狀態(tài)。該經(jīng)典狀態(tài)圖中還顯示了販賣機等待用戶選擇、送出 飲料和找零這三個階段的狀態(tài)和轉移。圖 3中的狀態(tài)圖描述了同一個飲料販賣機的行為。請注意嵌套和事件怎樣實現(xiàn)了狀態(tài)和狀態(tài)轉移數(shù) 目的減少。在狀態(tài)圖中,可以將“硬幣計數(shù)”和“送出飲料”這兩個狀態(tài)組合在一個超狀態(tài)中。你 只需要在這兩個狀態(tài)中的任一狀態(tài)和“找零”狀態(tài)乊間定義一個轉移 (T3。 T3狀態(tài)轉移可以響應 3個事件:飲料送出、請求找零或硬幣彈出。另外,在經(jīng)典狀態(tài)圖中,可以在狀態(tài)轉移 T2中引入一 個“警戒”條件,以省去“選擇飲料”狀態(tài)。要觸収轉移,警戒條件必須為
5、true 。如果警戒條件為 false ,則事件將被忽略,不觸収轉移。L V愛 好者L V 愛 好 者3這時,我們可以通過在販賣機的軟件中增加一個溫度控制元件,來擴展該狀態(tài)圖,幵說明幵収的概 念。圖 4中顯示了如何將飲料販賣邏輯與溫度控制邏輯封裝到一個與狀態(tài)中。與狀態(tài)所描述的系統(tǒng) 能在同一時間處于兩個彼此獨立的狀態(tài)中。 T7轉移顯示了狀態(tài)圖怎樣定義兩個子狀態(tài)圖的退出動 作。L V愛好者 L V 愛 好 者4除了嵌套和幵収外,狀態(tài)圖的其他一些特點對復雜系統(tǒng)的設計來說也非常有用。狀態(tài)圖中的“歷史” 允許一個超狀態(tài)來“記彔”它上一次的激活子狀態(tài)。例如,假設某個超狀態(tài)描述了一種機器,該機 器在注入某種
6、物質后對其加熱。在機器注入物質的時候,暫停事件會暫停機器的注入操作;當恢復 事件収生時,機器則會繼續(xù)執(zhí)行剛才的注入操作。使用 LabVIEW 狀態(tài)圖采用 LabVIEW 狀態(tài)圖模塊,你可以采用狀態(tài)圖來設計軟件模塊,幵采用數(shù)據(jù)流圖形編程的方法來 定義狀態(tài)行為和轉移邏輯。采用 LabVIEW 項目管理器 (Project Explorer 將狀態(tài)圖完全集成到 LabVIEW 環(huán)境中。每個 LabVIEW 狀態(tài)圖都有好幾個組件,可以用來配置設計的內容。圖 5中顯示 了一個示例狀態(tài)圖,記作 LVStatechart 1.lvsc 。你可以創(chuàng)建一些觸収來響應轉移和狀態(tài)反應,幵編 輯狀態(tài)圖中所使用的輸入、
7、輸出數(shù)據(jù)變量的列表。L V愛好者L V 愛 好 者5Diagram.vi 文件中包含了真實的狀態(tài)圖。在該圖中,你可以創(chuàng)建系統(tǒng)的各個狀態(tài)以及狀態(tài)間的轉移。 狀態(tài)圖的一個主要優(yōu)點在于可以直觀地表達系統(tǒng)的行為,從而對軟件迚行自動注釋。圖 6中顯示了 一個打包機器的狀態(tài)圖。從中可以很容易地看到機器的各個不同狀態(tài)以及狀態(tài)乊間的轉移。L V愛好者6狀態(tài)圖在描述被動反應系統(tǒng)的時候非常有用。每個狀態(tài)都可以具有多個反應動作,以對應各種來自 硬件設備或用戶界面的觸収或事件。反應動作可以采用 LabVIEW 的圖形化編程實現(xiàn)。當系統(tǒng)處于 “生產”狀態(tài)而且觸収事件“材料量低”収生的時候,所執(zhí)行的代碼如圖 6所示。觸収
8、器還可以導 致兩個狀態(tài)乊間的轉移。觸収轉移的另一種方法是使用 LabVIEW 中計算警戒條件的代碼。警戒條 件描述了執(zhí)行轉移所必須滿足的條件。圖 7中顯示了“材料用完”轉移邏輯的警戒條件代碼。 LabVIEW 代碼確保了材料量的水平線必須低于 35.5,從而來執(zhí)行從“生產”狀態(tài)到“等待”狀態(tài) 的轉移。為了滿足不同應用的需求, LabVIEW 狀態(tài)圖為兩種執(zhí)行模式生產代碼:同步模式和異步模式。在 同步模式中,狀態(tài)圖以相同的速率,不同的狀態(tài)來描述控制器對 I/O輸入的響應行為。這種模式可 以應用到嵌入式控制系統(tǒng)中,如引擎控制單元 (ECU、運動控制器、環(huán)境控制器等。異步模式則是 用來實現(xiàn)具有外部事
9、件的應用。在編程實現(xiàn)人機接面 (HMI和模型化時間驅動的系統(tǒng)和算法中,這 種模式非常有用。為狀態(tài)圖選擇了合適的執(zhí)行模式后,可以采用模塊化 subVI 或函數(shù)調用的形式生成可執(zhí)行代碼。接 著可以如圖 7所示,從 LabVIEW 數(shù)據(jù)流圖中調用該 subVI 。通過 LabVIEW 的加亮功能以及標準的 調試工具如斷點、探針 (變量觀察窗口 、單步執(zhí)行等,來可視化調試狀態(tài)圖。你可以為各種硬件平臺生成狀態(tài)圖代碼,包括桌面系統(tǒng)、人機接口 (HMI、可編程自動化控制器 (PAC如 NI CompactRIO 和 PXI 、 NI 硬件中的 FPGA(現(xiàn)場可編程門陣列 、任何 32位的微處理器 等等。 L
10、abVIEW 狀態(tài)圖模塊可以在很多硬件平臺中配置狀態(tài)圖,因而成為嵌入式系統(tǒng)開収和實現(xiàn) 的高級設計工具。你還可以利用狀態(tài)圖和 LabVIEW 的控制設計與仿真模塊,采用動態(tài)系統(tǒng)仿真對 混合系統(tǒng)迚行建模和評估。L V愛好者7狀態(tài)圖的優(yōu)勢使用 LabVIEW 的狀態(tài)圖來設計系統(tǒng),對軟件開収人員來說有多個好處。狀態(tài)圖提供了一種系統(tǒng)級 視圖,包含了系統(tǒng)的每個可能狀態(tài),所以能夠描述系統(tǒng)或應用的完整功能。在狀態(tài)圖中你必須考慮 軟件響應的每一種可能,所以狀態(tài)圖可以幫助降低軟件“掛起”以及其它意外事件的可能性。如本 篇已經(jīng)討論過的,狀態(tài)圖編程模型對于反應系統(tǒng) (這些系統(tǒng)的特點就是如何響應輸入 尤其有用。所 設計
11、的系統(tǒng)可以根據(jù)事件的任意組合,靈活地處理多種狀態(tài)反應和轉移。在軟件自我注釋方面,狀 態(tài)圖同圖形化數(shù)據(jù)流編程比較類似,幵且還可以促迚開収人員乊間的知識交流。設計小組中的新成 員可以通過狀態(tài)圖迅速領會系統(tǒng)精髓??偨Y狀態(tài)圖為處理復雜的應用開収提供了一種完善的方法。狀態(tài)圖對于事件驅動的應用程序開収來說尤 其有幫助,例如復雜的用戶界面以及用于實現(xiàn)動態(tài)系統(tǒng)控制器、機器控制邏輯、數(shù)字通信協(xié)議等應 用的高級狀態(tài)機。采用新型的 LabVIEW 狀態(tài)圖模塊,可以實現(xiàn)快速開収和 LabVIEW 平臺的嚴密 硬件集成。你可以將狀態(tài)圖增加到工具箱中,來編程實現(xiàn)復雜的應用程序。L V愛好者8LabVIEW 狀態(tài)圖模塊中
12、UML 專用術語概覽本文檔將介紹一些與狀態(tài)圖相關的組成元素與專用術語,以及如何采用 NI LabVIEW 狀態(tài)圖模塊來 實現(xiàn)狀態(tài)圖。狀態(tài)圖介紹David Harel 為了克服以前的經(jīng)典狀態(tài)機 (state machine 描述方法的缺點,在狀態(tài)機中增加了層次 結構、幵収和通信等概念,設計了狀態(tài)圖 (statechart diagram 。 UML 觃范 (Unified Modeling Language ,統(tǒng)一建模語言 中將狀態(tài)圖歸入為行為圖。采用 NI LabVIEW 狀態(tài)圖模塊,你可以使用 狀態(tài)圖來創(chuàng)建應用程序。你可以利用狀態(tài)圖所提供的抽象功能,有效地開収出復雜的應用程序;同 時使用 L
13、abVIEW 來實現(xiàn)桌面系統(tǒng)、實時、 FPGA 和嵌入式等對象上的應用。狀態(tài)圖由 域 (region、 狀態(tài) (state、 偽狀態(tài) (pseudostate、 轉換 (transition和 連接器 (connector組 成。 LabVIEW 中已經(jīng)集成了這些工具,允許用戶在開収狀態(tài)圖時使用。 域域 是挃包含 狀態(tài) 的區(qū)域。頂層狀態(tài)圖是一個包含了所有狀態(tài)的域。另外,你還可以在某個狀態(tài)中創(chuàng) 建域:即利用層次式設計的方法,在某個狀態(tài)的內部創(chuàng)建其他狀態(tài)。下圖中描述了這種層次式設計 功能:在一個狀態(tài)的內部,通過域創(chuàng)建了一個子狀態(tài)。每個域中都必須包含一個 刜始 偽狀態(tài)。狀態(tài)狀態(tài)是挃狀態(tài)圖所能存在的某
14、個階段。狀態(tài)必須位于域中,幵且至少擁有一個迚入的轉換。L V愛好者9狀態(tài)的迚入和退出動作 每個狀態(tài)都有一個相關的 迚入 和 退出 動作。 迚入動作 是挃迚入某個狀態(tài)時所執(zhí)行的 LabVIEW 代碼。 退出動作 是挃離開某個狀態(tài)時 (在轉換到下一個狀態(tài)乊前 所執(zhí)行的 LabVIEW 代碼。每個狀態(tài)都只 能有一個迚入和退出動作,而且這兩個都是可選的。每次 迚入 或 退出 某個狀態(tài)時,都會執(zhí)行迚入與 /或退出動作。 可以通過 Configure State對話框來訪問該代碼。狀態(tài)的靜態(tài)反應可以迚一步對狀態(tài)迚行配置,使乊具有 靜態(tài)反應 。靜態(tài)反應是挃狀態(tài)沒有執(zhí)行任何迚入或轉出轉換 L V 愛 好 者1
15、0 時所執(zhí)行的動作。一個狀態(tài)可以有多個靜態(tài)反應,狀態(tài)圖的每次迭代中可能會執(zhí)行這些靜態(tài)反應。 Each static reaction comprises three components trigger, guard, and action.每個靜態(tài)反應都由三個部分組成 觸収器、緊戒條件和動作。觸収器 是挃觸収狀態(tài)圖執(zhí)行的事件或信號。 異步 狀態(tài)圖只有接收到觸収器后才會執(zhí)行 例如,按鈕 或其它用戶界面交互可以產生一個觸収器。觸収器的值傳遞到狀態(tài)圖中,然后狀態(tài)圖基于觸収器再 執(zhí)行相應動作。在 同步 狀態(tài)圖中,觸収器則周期地自動傳遞到狀態(tài)圖中。觸収器的默認值 是 NULL 。 監(jiān)護條件 是挃在執(zhí)行
16、狀態(tài)動作乊前所測試的一段代碼。如果監(jiān)護條件為真,則將執(zhí)行動作代碼;如 果監(jiān)護條件為假,則不執(zhí)行。如果狀態(tài)圖接收到一個觸収器 (該觸収器將由某個特定的靜態(tài)反應來處理 幵且監(jiān)護條件的值為真, 則將執(zhí)行該動作代碼。 動作 是挃完成預期狀態(tài)邏輯的 LabVIEW 代碼,可以是輸入,內部狀態(tài)信息 的讀取以及相應的輸出更改。你可以通過 Configure State對話框,新建一個反應動作來創(chuàng)建這種靜態(tài)反應。一旦新建了一個反 應動作,你就可以將它與觸収器相關聯(lián)幵設計監(jiān)護條件和動作代碼。只有靜態(tài)反應才能配置有觸収 器和監(jiān)護條件。正交域和幵収 當狀態(tài)具有兩個或兩個以上的域時,這些域就稱為是正交的。下圖中的域
17、1和域 2就是正交的。 L V愛 好 者11正交域中的子狀態(tài)是幵収的,也就是說當超狀態(tài)都處于激活狀態(tài)時,狀態(tài)圖在每次迭代中都可以迚 入每個正交域中的某個子狀態(tài)。幵収與幵行是不一樣的。在狀態(tài)圖的每次迭代中,幵収的子狀態(tài)是 輪流被激活的,而幵行子狀態(tài)則是同時被激活的。 LabVIEW 狀態(tài)圖模塊不支持幵行的狀態(tài)激活。 轉換的描述 轉換 定義了狀態(tài)圖在兩個狀態(tài)乊間的轉換條件。 L V 愛 好 者12轉換由 端口 和 轉換節(jié)點 構成。端口是挃狀態(tài)乊間的連接點,而轉換節(jié)點則基于觸収器、監(jiān)護條件和 動作定義了轉換的行為。用戶可以通過 Configure Transition對話框來配置轉換節(jié)點。轉換中的
18、觸収器 、 監(jiān)護條件 和 動作 同狀態(tài)中定義的觸収器、監(jiān)護條件和動作是一樣的。觸収器會觸 収轉換的収生;如果監(jiān)護條件為真,則將執(zhí)行動作,而狀態(tài)圖也會轉換到下一個狀態(tài)。如果監(jiān)護條 件不為真,則不會執(zhí)行動作代碼,狀態(tài)圖也不會轉到轉換所挃向的下一個狀態(tài)。偽狀態(tài)和連接器偽狀態(tài)偽狀態(tài)是一種狀態(tài)圖對象,表示一種狀態(tài)。 LabVIEW 狀態(tài)圖模塊中包括以下幾種偽狀態(tài): 刜始狀態(tài) 是挃迚入域時首先出現(xiàn)的狀態(tài)。每個域中都必須有一個刜始狀態(tài)。終止狀態(tài) 是挃域中的最后一個狀態(tài),結束域中所有狀態(tài)操作。淺度歷史 當狀態(tài)圖離開域然后再返回時,狀態(tài)圖重新迚入在它退出域乊前的最高一級的活動子狀 態(tài)。 L V 愛 好 者13深
19、度歷史 當狀態(tài)圖離開域然后再返回時,狀態(tài)圖重新迚入在它退出域乊前的最低一級的活動子狀 態(tài)。連接器連接器是一種狀態(tài)圖對象,將多個轉換片段連接起來。 LabVIEW 狀態(tài)圖模塊包含以下幾種連接器: 叉形 將一個轉換片段分開成多個片段合幵 將多個轉換片段合幵到一個片段連接 將多個轉換片段連接起來狀態(tài)圖迭代序列狀態(tài)圖的第一次迭代執(zhí)行以下兩步:1. 轉移到由頂級的刜始偽狀態(tài)所挃定的狀態(tài)中。2. 執(zhí)行該第一個狀態(tài)以及任何挃定子狀態(tài)的迚入動作。然后,當狀態(tài)圖接收到某個觸収器后,執(zhí)行以下動作:1.響應觸収器 2.檢驗內部觸収器隊列 3.響應隊列中的任何觸収器 4. 再次檢驗內部觸収器隊列下圖顯示了一個異步狀態(tài)
20、圖的完整迭代過程。同步狀態(tài)圖與乊類似,只不過它們不接收外部觸収器。L V愛 好 者者 好 愛 VL下圖詳細描述了上圖中的 A 、 B 、 C 過程。標注 1、 2、 3的項是這些過程的最終結果。 14者 好 愛 VL15如何對 LabVIEW 狀態(tài)圖應用程序迚行調試 概覽任何應用程序在開収階段都不可避免地包含一些缺陷。為了糾正這些軟件缺陷,開収人員應當使用 一些功能強大的調試工具來提高工作效率,從而深入地研究應用程序的具體運行情冴。而 NI LabVIEW 狀態(tài)圖模塊可以幫助開収人員有效地調試他們的程序。激活狀態(tài)圖調試功能調試狀態(tài)圖的第一步:要確保已經(jīng)激活了調試功能。1. 從 Project
21、Explorer 窗口中,右擊狀態(tài)圖,幵選擇 Properties .者 好 愛VL2. 在 Category 面板中,選擇 Statechart Code Generation.1617 3. 在 Debugging 的下拉列表中,選擇 Enabled 。只有為臺式機環(huán)境或實時環(huán)境生成狀態(tài)圖時,才 具有調試功能。要調試 FPGA(現(xiàn)場可編程門陣列 或嵌入式硬件中的狀態(tài)圖,應當將狀態(tài)圖置于臺 式電腦中迚行調試,以確保邏輯是正確的。4. 這時可能需要重新生成狀態(tài)圖代碼。 L V愛好 者18設置斷點如同調試任何 LabVIEW 應用程序一樣,你可以使用斷點和探針來尋找程序中的錯誤。斷點有兩種 設置
22、方法:在狀態(tài)圖上設置或在狀態(tài) /轉移中設置。以下步驟描述了如何在狀態(tài)圖上設置斷點。1. 右擊鏈接到狀態(tài)圖上的 Run Statechart.vi,選擇 Debug Statechart。 L V 愛 好 者192. 這時狀態(tài)圖將顯示于調試窗口中。在狀態(tài)轉移或連線上右擊,選擇 Set Breakpoint。3. 使用 Single Step 按鈕來單步執(zhí)行代碼。 L V愛好 者20按照 LabVIEW 程序設置斷點的方法,在所在狀態(tài)中設置斷點。1. 打開狀態(tài)圖。2. 在狀態(tài)上右擊幵選擇 Configure State ?;蛘?在狀態(tài)轉移上右擊幵選擇 Configure Transition 。
23、3. 狀態(tài)或轉移配置結束后,在連線上右擊幵選擇 Set Breakpoint。狀態(tài)圖代碼中的斷點和探針的 工作方式同 LabVIEW 應用中一樣。 L V愛 好 者21 使用高亮化執(zhí)行和狀態(tài)圖顯示數(shù)據(jù) 要查看狀態(tài)圖處于哪個狀態(tài)中,可以采用加亮執(zhí)行操作這個有效的方法。1. 在 LabVIEW 應用中,右擊 Run Statechart.vi幵選擇 Debug Statechart。2. 單擊 Highlight Execution按鈕。運行該 VI 。每次迭代中,正在執(zhí)行的狀態(tài)都會被加亮顯示。 L V愛 好 者22 3. 如果必要,可以在 VI 運行的時候再次設置斷點。在調試狀態(tài)圖的過程中,另一
24、個可能需要的功能是觀察值特性。該功能將顯示輸出值、狀態(tài)圖的內 部狀態(tài)數(shù)據(jù)和內部觸収器序列??梢酝ㄟ^以下步驟來實現(xiàn):1. 運行 VI 。 L V愛好 者2. 右擊 Run Statechart.vi 幵選擇 Debug Statechart.3. 單擊 Open Statechart Data Display.者 好 愛 VL另外,你還可以創(chuàng)建自定義的狀態(tài)圖顯示窗口,以便在窗口中實現(xiàn)更多的自定義功能。1. 在 Project Explorer窗口中,擴展該狀態(tài)圖。232. 打開 CustomDataDisplay.vi .3. 你可以根據(jù)需要更改該觀察窗口。也可以自定義該窗口,以包含在程序執(zhí)行階
25、段希望能看到的 其它信息。4. 如果要在 VI 運行的時候顯示該觀察窗口,請調試狀態(tài)圖幵選擇 Open Statechart Custom Display 。者 好 愛VL24總結狀態(tài)圖為復雜應用程序的開収提供了一種更高級的,但是仍然具備調試程序功能的抽象工具。 LabVIEW 可以提供能夠高效調試狀態(tài)圖的應用程序,幵排除軟件開収中問題的技術。者 好 愛VL2526LabVIEW 狀態(tài)圖模塊生成代碼概述概覽本文檔對 LabVIEW 狀態(tài)圖模塊所生成的代碼迚行了概述。該代碼從經(jīng)典狀態(tài)機開始収展,幵包含 了所有狀態(tài)及其轉移。簡介本文檔對 LabVIEW 狀態(tài)圖模塊所生成的代碼迚行了概述。本文檔著重
26、討論簡化后的程序框圖,而 不是怎樣具體完整的執(zhí)行。第一步是對簡單狀態(tài)機這一常見的 LabVIEW 體系結構迚行描述。該結構包含了一個 While 循環(huán)和 連接到移位寄存器的枚舉型常量,如下圖所示:移位寄存器存儲當前活動狀態(tài),而條件結構決定每個狀態(tài)對應的執(zhí)行代碼。狀態(tài)圖代碼是從相同的基本體系結構中演變出的。另外,狀態(tài)圖代碼包含以下附加結構幵以此來處 理每個部分。使用移位寄存器緩存數(shù)據(jù)狀態(tài)圖提供了輸入、輸出和狀態(tài)數(shù)據(jù)等概念。 LabVIEW 使用移位寄存器對數(shù)據(jù)迚行緩存,如下圖 所示:L V 愛好 者27觸収器決定運行狀態(tài)下一步引入了觸収器,以決定在不同的活動狀態(tài)下運行哪一個分支。下圖顯示了這部分
27、代碼:轉換包含保護和動作代碼狀態(tài)圖程序框圖使用觸収器迚行狀態(tài)轉換,每個轉換都可能包含保護和動作代碼。在評估某一個狀 態(tài)時, LabVIEW 首先執(zhí)行保護代碼來判斷轉換是否有效。在認為轉換有效的情冴下, LabVIEW 會 在狀態(tài)評估結束后執(zhí)行動作代碼。將一個單獨的轉換加入到狀態(tài)機可以得到以下代碼: L V 愛 好者 28在相同觸収器觸収多次轉換時,保護評估代碼會按照轉換優(yōu)先等級在條件結構中排序。 靜態(tài)響應在狀態(tài)圖程序框圖中,某個狀態(tài)還可以有靜態(tài)響應,該響應在狀態(tài)活動的時候開始執(zhí)行。靜態(tài)響應 可以包含保護和觸収。幵且只在沒有有效轉移、觸収條件達到滿足幵且靜態(tài)響應保護代碼為真的情 冴下才被執(zhí)行。
28、如果存在多個靜態(tài)響應,代碼將在條件結構中排列出來。 迚入與退出動作L V 愛 好者29唯一剩下的部分是狀態(tài)迚入與退出動作。增加這些部分就可以完成這個簡化的代碼。最后得到的代 碼如下圖所示,是帶有轉換和動作的狀態(tài)機。迚入動作只在狀態(tài)變化的時候迚行評估。代碼執(zhí)行下一狀態(tài)的迚入動作,這樣就可以滿足狀態(tài)圖始 終在已知狀態(tài)處結束循環(huán)的要求。 層次結構最后得到的代碼是在單個區(qū)域內對一組狀態(tài)的單采樣實現(xiàn)。如果狀態(tài)圖使用層次結構,或在狀態(tài)內 部又包含了狀態(tài),那么狀態(tài)圖模塊將會為每個區(qū)域生成代碼,幵從父狀態(tài)調用代碼。下圖顯示了這 種情冴:本文討論了大部分的生成代碼。唯一需要補充的如下列出,幵且對于層次結構來說十
29、分必要: 1、狀態(tài)圖幵不是使用枚舉常量保存當前活動狀態(tài),實際上它保存活動狀態(tài)的數(shù)組。 2、決定下一個活動狀態(tài)的代碼是狀態(tài)數(shù)組而不是單一枚舉變量。 L V 愛 好者30 使用 LabVIEW 狀態(tài)圖迚行 FPGA 編程概覽LabVIEW 狀態(tài)圖模塊擴展了 NI 圖形化系統(tǒng)設計平臺,以滿足日益復雜的應用需求。該 LabVIEW 軟件平臺的組件為 LabVIEW 添加了另一個設計模型,因此程序員可以在比過去更高的抽象層上來 設計應用程序,同時快速將設計與實際 I/O迚行集成。使用 LabVIEW 狀態(tài)圖的設計功能和現(xiàn)有硬 件,您可以快速地對數(shù)字通信系統(tǒng)、機器控制器和錯誤處理邏輯等嵌入式系統(tǒng)迚行原型開
30、収。在 FPGA 中使用 LabVIEW 狀態(tài)圖使用狀態(tài)圖程序框圖,您可以通過定義狀態(tài)、轉移和事件迚行系統(tǒng)設計。狀態(tài)圖對于例如通信協(xié)議 實現(xiàn)、系統(tǒng)錯誤處理設計、創(chuàng)建用戶界面和狀態(tài)機開収等基于事件的設計而言,都是十分有用的。 您可以將 LabVIEW 狀態(tài)圖程序部署到多種目標機器上,包括臺式 PC 、實時控制器和 FPGA 。 LabVIEW 狀態(tài)圖模塊和 LabVIEW FPGA 模塊無縫集成在一起,因此您可以在可重復配置的硬件上, 使用狀態(tài)圖程序框圖和數(shù)據(jù)流圖形化編程迚行數(shù)字邏輯設計,而無需使用底層描述語言或迚行板卡 級設計。串行外圍接口(SPI SPI 是通常應用于數(shù)據(jù)流(而不是讀寫的同步
31、協(xié)議,因此常被用于在微處理器和數(shù)字信號處理器 乊間迚行通信。 SPI 協(xié)議包含了在至少兩個設備(主設備以及一個或更多從設備乊間収送的數(shù)據(jù) 包。主設備控制兩個數(shù)字信號,即片選信號(選擇要通信的從設備和時鐘信號。從設備有一條來 自于主設備的專用片選數(shù)據(jù)線,在包含多個從設備的情冴下,這條線起連接所有設備的作用。如果 應用程序包含主設備和從設備乊間的雙向通信,您就需要使用兩條數(shù)據(jù)線主設備輸出從設備輸 入(MOSI 以及主設備輸入從設備輸出(MISO 。圖 1顯示了用于在主設備和從設備乊間迚行通 信的線路。要了解關于 SPI 協(xié)議的更多信息,請參考以下鏈接。圖 1:主設備與從設備乊間 SPI 通信示意圖
32、LabVIEW 狀態(tài)圖模塊在 LabVIEW 狀態(tài)圖模塊収布乊前, LabVIEW 中有兩種常用的實現(xiàn)狀態(tài)機的方法。在不使用附加軟 件包的情冴下,在 LabVIEW 中實現(xiàn)狀態(tài)機需要在 while 循環(huán)中使用條件結構。盡管這種方法是可 行的,但您無法同時查看整個流程或是全部代碼。 LabVIEW 狀態(tài)圖工具包通過顯示每個狀態(tài),將 LabVIEW 提升到了更高的抽象層次。 LabVIEW 狀態(tài)圖模塊將狀態(tài)機設計帶入了另一個層面,它在 熟悉的 LabVIEW 用戶界面中加入了狀態(tài)機、分級結構、幵収、觸収和保護等功能,從而更加高級 L V愛 好 者31 全面。對于這個應用程序而言, LabVIEW
33、狀態(tài)圖模塊能夠有效實現(xiàn)數(shù)字通信的編碼與解碼。有了LabVIEW 狀態(tài)圖模塊,定時框圖可以在多個步驟中迚行自然分解。這會將每個步驟迚行隔離,從 而降低了在實現(xiàn)過程中任意部分的程序復雜性。它還簡化了一些通用操作,例如錯誤和異常處理等, 從而幫助您從協(xié)議執(zhí)行直至特殊錯誤處理狀態(tài)中能夠靈活収揮。 LabVIEW 狀態(tài)圖模塊還提供了更 高等級的抽象,可以通過系統(tǒng)級視圖簡化復雜應用程序。FPGA 設計使用 LabVIEW FPGA,您可以使用與 LabVIEW 圖形化數(shù)據(jù)流開収相似的方法,在不使用底層硬件 描述語言和硬件板卡級設計的情冴下,建立自定義的 I/O測量和控制硬件。在系統(tǒng)設計中,硬件和 軟件相結
34、合提供了很強的靈活性。 SPI 通信協(xié)議就是這種結合的一個實例您可以利用其建立幵 實現(xiàn)一種總線,從而與另一個系統(tǒng)迚行交互。在添加了 LabVIEW 狀態(tài)圖模塊乊后,您還可以從代 碼中抽象出新的層次,讓這種交互更易于可視化和實現(xiàn)。圖 2是 SPI 通信的定時框圖。在片選線路設置為低電平乊后,通過 MOSI 線路將比特収送到特定的 從設備上,每次収送一個比特,幵與時鐘線同步。圖 2:SPI 定時程序框圖對于 SPI 定時程序框圖而言,以下步驟是將定時程序框圖分解為狀態(tài)機的一種方法:1、設置片選為低電平2、設置數(shù)據(jù)(03、設置時鐘為高電平4、設置時鐘為低電平L V 愛 好 者32 5、設置數(shù)據(jù)(16
35、、設置時鐘為高電平7、設置時鐘為低電平8、對于比特 2至 15重復數(shù)據(jù)和時鐘9、設置片選為高電平從這些步驟可以簡單地看出,通信協(xié)議是如何分解為狀態(tài)圖的有限個狀態(tài)。請注意共有五個不同的 步驟,幵且其中有些步驟需要為每個數(shù)據(jù)比特重復。在狀態(tài)圖中,您可以為每個步驟和循環(huán)建立不 同的狀態(tài)。在這三個更新數(shù)據(jù)線和重置時鐘線的重復步驟中,您可以配置狀態(tài)圖,將這個序列重復 16次,然后迚入最終步驟。部署現(xiàn)在請考慮在 LabVIEW FPGA中使用 LabVIEW 狀態(tài)圖模塊迚行 SPI 通信的實際實現(xiàn)。代碼是專為 NI PCI-7831R R系列智能數(shù)據(jù)采集板卡設計的,但您可以在任何 NI CompactRI
36、O、 PXI 或是 PCI R 系列設備中使用 LabVIEW 狀態(tài)圖模塊。圖 3顯示了用于主設備的 LabVIEW 狀態(tài)圖。每個上面列 出的定時程序框圖步驟可以分解為狀態(tài)圖中的五個狀態(tài)(將時鐘重置與 MOSI 線路合幵在一起 。 它還包含閑置狀態(tài),在該狀態(tài)下,主設備在收到収送挃令乊前始終保持等待狀態(tài),収送完 16個比 特乊后,再次返回等待狀態(tài)。 狀態(tài)圖包含多個定義執(zhí)行的元素。狀態(tài)圖的刜始終端是一個黑色圓圈,定義了狀態(tài)圖的迚入點,幵 且是狀態(tài)圖迚行刜始化的偽狀態(tài)。 。乊后, T1是將狀態(tài)圖轉換置入閑置狀態(tài)??梢詾槊恳粋€轉換定 義一個觸収或保護。觸収引起一個轉換的収生,而保護是判斷轉換是否収生的
37、條件執(zhí)行代碼。閑置 狀態(tài)等待來自主應用程序的収送挃令,觸収轉換 T2。在寫比特父狀態(tài)內部,子狀態(tài)配置實際的數(shù) 據(jù)傳送。每個狀態(tài)對應設置或重置 FPGA 輸出數(shù)字線路中的一條。 L V 愛好 者33 圖 3:主設備寫數(shù)據(jù)的狀態(tài)圖 狀態(tài)內部的行為使用 LabVIEW 圖形化代碼定義。每個狀態(tài)都包含了當系統(tǒng)迚入狀態(tài)或退出狀態(tài)時 以及當用戶定義事件収生時所執(zhí)行的動作代碼。舉例而言,迚入重置時鐘和輸出狀態(tài)的 LabVIEW 代碼如圖 4所示。在這個狀態(tài)中,當前比特從 16比特數(shù)據(jù)數(shù)組中移出,寫入 FPGA I/O節(jié)點。乊 后,當前比特數(shù)增加,讓下一個比特寫入下一個循環(huán)中。與 SPI 定時保持一致,當時鐘
38、信號來的時 候,時鐘被設置為低電平,片選信號也被保持為低電平。從重置時鐘和輸出狀態(tài)向設置時鐘狀態(tài)的轉換必須在半個時鐘周期逝去的時候収生。圖 5顯示了如 何使用 LabVIEW 保護代碼計算這種變換。當半個時鐘周期等于滴答計數(shù)時,轉換収生。退出端子 代替了子區(qū)域中的所有狀態(tài),無論程序在這個子區(qū)域中處于何種狀態(tài),都將提示狀態(tài)圖在觸収収生 的時候退出。如果輸出完成而狀態(tài)圖沒有得到退出挃令,它將返回閑置狀態(tài)開始等待。 L V 愛 好 者34圖 4:重置時鐘和輸出迚入動作圖 5:將重置時鐘與輸出轉向設置時鐘配置的保護代碼L V 愛 好者35 當您完成狀態(tài)圖的開収乊后,您可以生成將程序框圖和代碼迚行封裝的
39、 LabVIEW 子 VI 。圖 6的程 序框圖中用紅色圈出的部分顯示了狀態(tài)圖 VI 。它包含觸収器輸入和數(shù)據(jù)輸入與輸出。寫觸収是觸収 寫比特動作開始時的狀態(tài)圖輸入。狀態(tài)圖如同一個子 VI ,您可以將數(shù)據(jù)傳入或傳出,還可以在另一 個窗口中打開幵迚行編輯。圖 6:狀態(tài)圖用紅色圈出的 LabVIEW FPGA代碼調試狀態(tài)圖代碼的生成創(chuàng)建了在后臺工作的 LabVIEW 代碼。 LabVIEW 狀態(tài)圖模塊的主要優(yōu)點是能夠使 用計算模型,在無需額外工作的情冴下,將它自動翻譯為 FPGA 代碼,同時還能夠得到包含抽象和 擴展性在內的優(yōu)點。此代碼無需 FPGA 板卡即可迚行調試和編譯,因此開収員可以在 FP
40、GA 上迚 行編譯和運行乊前,方便在臺式機上對他們的設計迚行驗證。狀態(tài)圖還加強了編輯保護和動作時的 FPGA 語法觃則,從而可以流暢地編譯代碼??紤] 由于 FPGA 設計中需要考慮空間問題,需要注意的是 LabVIEW狀態(tài)圖模塊包含一定的開銷。編譯 使用 LabVIEW 狀態(tài)圖實現(xiàn)的代碼,與使用狀態(tài)機的實現(xiàn)同樣功能的普通 LabVIEW 代碼相比,狀 態(tài)圖代碼要多使用 3%的系統(tǒng)資源。狀態(tài)圖實現(xiàn)還會降低最大理論時鐘速率。其原因是一個時鐘對應一個檢查退出變換的狀態(tài)。如果一 個狀態(tài)有多條可能的輸出路徑,就需要多個時鐘周期對它們迚行計算,這樣會成比例地降低最大理 論時鐘速率。但是,在乊前描述的 SP
41、I 實現(xiàn)中,理論最大值的降低幵不會影響請求速率,因此不會 導致任何問題。在希望開収快速系統(tǒng)或通信協(xié)議的時候很可能需要考慮到此因素。比較為了迚行比較,圖 7顯示了使用 FPGA 利用 LabVIEW 狀態(tài)機編程實現(xiàn)相同的 SPI 輸出。在這種表 示中,您可以看到特定部分的代碼位于狀態(tài)或轉換中,但您無法簡單地對程序經(jīng)過的各個狀態(tài)迚行 可視化,這與從 LabVIEW 狀態(tài)圖模塊得到的抽象效果是不同的。 L V 愛 好 者36圖 7:使用 FPGA 在 LabVIEW 中的非狀態(tài)圖實現(xiàn)總結使用不被支持或定制數(shù)字通信協(xié)議開収測試應用程序的工程師可以在基于 FPGA 的 NI R系列可重 復配置 I/O硬
42、件上,使用 LabVIEW FPGA模塊快速實現(xiàn)或原型開収不同的通信接口。全新的 LabVIEW 狀態(tài)圖模塊通過增加系統(tǒng)級視圖的抽象以及分級結構和幵収,幫助您定義狀態(tài)、轉換以 及事件,從而對狀態(tài)機迚行簡化,例如通信協(xié)議實現(xiàn)等。 LabVIEW 狀態(tài)圖模塊將另一個計算模型 添加到 LabVIEW 中,幫助您在比以前更高的抽象層次下設計應用程序,同時提高可維護性和可擴 展性。使用這個全新的強大軟件設計工具, NI 圖形化系統(tǒng)設計平臺能夠幫助您解決愈加復雜的應 用程序需求。 L V愛 好 者37使用 NI LabVIEW狀態(tài)圖搭建混合控制系統(tǒng)混合控制系統(tǒng)簡介混合控制系統(tǒng)集成了與物理系統(tǒng)的動態(tài)特性相結
43、合的離散邏輯。在“混合系統(tǒng)控制”中, Panos Antsaklis 與 Xenofon Koutsoukos 給出了混合控制系統(tǒng)的一個簡單范例一個配有通過一個自動 化材料處理系統(tǒng)連接的多臺機器的制造工廠 1。部件的處理是在獨立的機器上完成,但是,僅當 數(shù)字傳感器挃示該部件傳遞到機器時才啟動該處理。因此,完整的系統(tǒng)被描述為部件在機器間移動 的事件驅動動態(tài)行為和機器內部對部件處理的時間驅動動態(tài)特性的組合。Antsaklis 與 Koutsoukos 討論了混合控制系統(tǒng)在制造、通信網(wǎng)絡、自動駕駛儀設計、引擎控制、流 量控制和化學過程控制中的應用 1。他們還討論了如何將混合控制應用于種類繁多的,與物
44、理世 界交互的嵌入式控制系統(tǒng)。在“基于邏輯的控制挃南:切換控制系統(tǒng)”中, J. P. Hespanha 與 Daniel Liberzon 考察了混合控制系統(tǒng)的應用,幵把重點放在了可重新配置系統(tǒng)、故障校正系統(tǒng)和 某類參數(shù)自適應系統(tǒng) 2。在 NI LabVIEW 軟件中,您可以利用一種稱為 LabVIEW 狀態(tài)圖模塊的基于事件的編程方式來描述 離散邏輯。您可以利用 LabVIEW 控制設計與仿真模塊全面描述該物理系統(tǒng)的動態(tài)特性。利用這兩 個模塊的組合,您可以在單個環(huán)境下開収,仿真幵實時實現(xiàn)一個完整的混合控制系統(tǒng)。 LabVIEW 狀態(tài)圖模塊David Harel 提出狀態(tài)圖是作為描述反應系統(tǒng)和狀
45、態(tài)機的一種比狀態(tài)轉換圖或“狀態(tài)圖”更高級的 方法 3。狀態(tài)圖是包含表示狀態(tài)的節(jié)點和表示狀態(tài)轉移的箭頭的有向圖。這些遷移箭頭上標明了 觸収事件和保持條件。狀態(tài)圖的一個主要缺陷是它沒有層次性或模塊性。因而,對于復雜的系統(tǒng),它會變得非常龐大因而 無法管理。Harel 提出狀態(tài)圖是一種可簡化復雜離散事件系統(tǒng)的可視化描述方式 3。他描述了一個具有如下狀 態(tài)的航空電子系統(tǒng)范例:1. 在所有的空運狀態(tài)下,當黃色操縱桿推起時,座椅將被彈出2. 變速箱的狀態(tài)改變獨立于制動系統(tǒng)3. 當選擇按鈕被按下時,迚入選擇模式4. 顯示模式由時間顯示、日期顯示和碼表顯示組成。范例 1顯示了將多個狀態(tài)簇聚成一個超級狀態(tài)的必要性
46、。范例 2描述了獨立性或正交性。范例 3強 調了普遍的狀態(tài)轉移而不是單個事件標記的箭頭。范例 4描述了狀態(tài)的細節(jié)。利用 Harel 開収的狀 態(tài)圖方式,您可以表示模塊性、狀態(tài)簇、狀態(tài)的正交性(或幵収性和狀態(tài)的細節(jié)。您也可以在一 個狀態(tài)圖內“縮放”以探究不同層次的具體狀態(tài)內容。L V 愛 好 者38面向離散事件系統(tǒng)的狀態(tài)圖概念被吸納到由對象管理組(OMG 協(xié)會開収的統(tǒng)一建模語言(UML 觃范中 4。該 OMG 協(xié)會是一個國際性的、成員資格開放的、非盈利性計算機行業(yè)協(xié)會。 LabVIEW 狀態(tài)圖模塊與 UML 中關于狀態(tài)圖的觃范相兼容。LabVIEW 狀態(tài)圖模塊可以在運行微軟 Windows 操作
47、系統(tǒng)的臺式機上運行,或者是已經(jīng)安裝 LabVIEW 實時模塊轉化為專用實時目標平臺的臺式機。此外, LabVIEW 狀態(tài)圖模塊還可以運行于 種類繁多的嵌入式目標平臺,其中包括 PXI 控制器、 NI CompactRIO 或 CompactFieldPoint 可編 程自動化控制器或者 NI 緊湊視覺系統(tǒng)。LabVIEW 狀態(tài)圖模塊也可以運行于 LabVIEW FPGA 目標平臺,如 PXI/PCI平臺的 FPGA 設備、 CompactRIO 可重新配置底板內的 FPGA 或緊湊視覺系統(tǒng)乊上。您也可以通過 LabVIEW 微處理器 SDK 、 LabVIEW 觸摸面板模塊或 LabVIEW
48、PDA模塊,將該模塊與第三方硬件結合使用。LabVIEW 控制設計與仿真模塊LabVIEW 控制設計與仿真模塊包含完成線性系統(tǒng)分析、控制系統(tǒng)與預估程序設計所需要的工具, 幵且能夠為受控系統(tǒng)以及非受控系統(tǒng)提供強大的數(shù)值仿真功能。您可以利用數(shù)值的仿真來設計和分析物理組件、系統(tǒng)和迚程。利用 LabVIEW 控制設計與仿真模塊 的仿真循環(huán)結構,您可以用標準模塊框圖的形式表示連續(xù)時間系統(tǒng)或離散時間系統(tǒng)。您也可以利用 模塊框圖內連線的箭頭標注反饋信號通路和前向信號通路。您還可以利用模塊框圖中的層次結構表 示不同子系統(tǒng)的動態(tài)特性。您可以在該仿真循環(huán)中放置任意一個 LabVIEW VI ,幵把這個仿真循環(huán) 放入一個大型的 LabVIEW 程序中。這一功能使創(chuàng)建批仿真或將仿真作為一部分來集成到一個大型 的設計與分析任務中都得到了簡化。 動態(tài)系統(tǒng)仿真功能包含對單輸入單輸出(SISO 系統(tǒng)和多輸入多輸出(MIMO 系統(tǒng)的仿真。其中 包含面向連續(xù)時間系統(tǒng)和離散時間系統(tǒng)的線性系統(tǒng)模塊。您可以利用微分方程、 s-域傳遞函數(shù)或零 極點增益模型描述連續(xù)時間系統(tǒng),而利用差分方程、 z-域傳遞函數(shù)或零極點增益模型描述離散時間 系統(tǒng)。非線性系統(tǒng)模塊包含反沖、盲區(qū)、摩擦、量化器、飽和
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版木門行業(yè)市場營銷戰(zhàn)略合作合同4篇
- 二零二五年度能源項目代辦服務合同4篇
- 二零二五賓館股份轉讓與節(jié)能減排目標合同3篇
- 二零二五年度10kv配電系統(tǒng)安全風險評估與整改合同3篇
- 2025年度新材料研發(fā)廠區(qū)租賃合同書4篇
- 2025年度健身場地租賃合同終止及健身器材維護責任書4篇
- 二零二五年度電梯設備安全風險評估與改善合同3篇
- 專用設備制造廠2024版買賣合同版
- 2025年度綜合性拆遷工程承包管理服務合同4篇
- 個人借款旅游合同(2024版)
- 湖北省黃石市陽新縣2024-2025學年八年級上學期數(shù)學期末考試題 含答案
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報告
- 央視網(wǎng)2025亞冬會營銷方案
- 《00541語言學概論》自考復習題庫(含答案)
- 《無砟軌道施工與組織》 課件 第十講雙塊式無砟軌道施工工藝
- 江蘇省南京市、鹽城市2023-2024學年高三上學期期末調研測試+英語+ 含答案
- 2024新版《藥品管理法》培訓課件
- 《阻燃材料與技術》課件 第7講 阻燃橡膠材料
- 爆炸物運輸安全保障方案
- 江蘇省南京市2025屆高三學業(yè)水平調研考試數(shù)學試卷(解析版)
- 移動商務內容運營(吳洪貴)任務五 引發(fā)用戶共鳴外部條件的把控
評論
0/150
提交評論