亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

使用Python訪問CANoe COM接口實踐

北匯信息POLELINK ? 2022-07-27 16:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

CANoe提供的COM接口使得外部腳本能夠訪問或控制CANoe軟件,從而實現(xiàn)自動化測試任務,而易用且具有豐富生態(tài)的Python無疑是一個很好的選擇。本文將介紹CANoe COM基本構成、常用COM對象以及Python腳本調(diào)用CANoe COM的方法,在此之前,先介紹一些基本概念。

CANoe COM Server & Python pywin32

COM全稱Component Object Model,是微軟為Windows平臺軟件提出的、實現(xiàn)軟件之間互操作的標準。它不會規(guī)定軟件的具體實現(xiàn),而是聲明一種對象模型,使得滿足這種模型的對象之間能交互,這些對象通常被稱為組件(Component)。組件會實現(xiàn)特定的功能,而這些功能以特定的方式提供——即接口(Interface),其他組件通過接口使用它們。另外,組件需要經(jīng)過注冊(Registry),才能被其他軟件發(fā)現(xiàn)和使用。注冊后的組件向其他軟件提供服務,因此組件將作為服務端(COM Server),其他想要使用服務的作為客戶端(COM Client)。

在安裝完成CANoe軟件后,CANoe已經(jīng)在Windows組件服務管理器中注冊了CANoe COM Server,如果需要重新注冊,可以在安裝目錄下(默認為C:\Program Files\Vector CANoe 14)的Exec64文件夾中找到RegisterComponents.exe,運行即手動注冊。

Python pywin32 package,它提供了許多Python擴展以調(diào)用Windows API,其中就包括COM組件,由于Python腳本將使用CANoe COM提供的服務,因此Python腳本將作為COM Client,在pywin32包中就對應win32com.client模塊,所以后續(xù)的Python腳本都要導入win32com.client模塊。

了解以上的概念后,下面就看看本文的主要內(nèi)容。

pYYBAGLg7OiAX3hXAAChV76gGck623.png

COM Object Hierarchy

在CANoe中,各個功能模塊按照一定的層級組織在一起構成整個CANoe軟件。與這些功能模塊直接相關的COM組件同樣也是按照相應的層級組織的,這就形成了COM Object Hierarchy:

poYBAGLg8J2AKnA5AADbEoPKEKo004.png

如上圖所示,圖的最左側是Application對象,是訪問其他對象的入口;通過它可以訪問Configuration對象,而通過Configuration對象才能訪問CommunicationSetup對象;要想設置CommunicationSetup,就需要按照Application->Configuration->CommunicationSetup從左向右的層級順序,找到相應的屬性或是方法,從而實現(xiàn)設置。

Type Library

了解COM Object Hierarchy能幫助快速找到所需功能,但是不能知道實現(xiàn)所需功能對象的繼承關系,為此還需要了解CANoe Type Library。在CANoe軟件安裝目錄下(默認為C:\Program Files\Vector CANoe 14)的Exec32\COMdev目錄中包含了注冊COM所用的類型庫,如下圖所示CANoe.h頭文件:

poYBAGLg7R6ACw1WAADTuWhPk9w203.png

在CANoe.h頭文件中包含所有CANoe COM對象的接口定義,比如ITestConfiguration接口:

pYYBAGLg7SiAU0cjAALZLJAolMk380.png

而如果想要設置TestConfigurationSettings對象,從COM Object Hierarchy得知需要從TestConfiguration對象訪問:

poYBAGLg8LSAfeNaAABtffi7y-Q175.png

但是在Type Library中Configuration對象有多個ITestConfiguration接口,比如:

poYBAGLg8MCAbRGJAAH6itW-pwM972.png

可以看到,ITestConfiguration2繼承自ITestConfiguration,在它的基礎上又擴充了許多方法,比如獲取TestConfigurationSettings對象的方法get_Settings就在其中。

也就是說,要通過實現(xiàn)了ITestConfiguration2接口的TestConfiguration對象的get_Settings方法,才能獲得TestConfigurationSettings對象。

為此,通過win32com.client模塊中的CastTo方法,能將TestConfiguration轉換成基于ITestConfiguration2接口的對象。

COM Object

COM Object Hierarchy中有許多COM對象,短時間內(nèi)掌握所有COM對象是不現(xiàn)實的,下面僅針對常用的、與自動化測試緊密相關的COM對象做介紹。

Application

使用Python控制CANoe,首先要獲取關聯(lián)整個CANoe進程的COM對象,也就是Application對象。通過Dispatch方法就可以獲得關聯(lián)到當前CANoe進程的COM對象,如果當前并沒有CANoe進程,則會啟動一個CANoe進程;而如果想要另外獲得一個CANoe進程,則可以使用DispatchEx方法。

下面是獲取Application對象的代碼示例:

poYBAGLg7WGAEQHSAACF_vWOyQ4383.png

在以上示例中,CANoe各部分功能封裝在CANoe類中,在CANoe類初始化時,把獲得的Application對象保存在CANoe類的App成員中,這樣在CANoe類的其他方法中,就可以通過使用App成員來訪問Application對象。

有了Application對象,才能訪問CANoe工程的各個功能模塊,比如打開CANoe工程:

poYBAGLg7WuAXl-AAABdhdMnZog652.png

而在open_canoe_config方法中,使用Application對象的Open方法打開特定的CANoe工程,具體Application對象的接口定義(這里僅展示IApplication的部分方法,其他方法以及后續(xù)擴展的方法并未展示)如下:

pYYBAGLg8NmAcLVDAAOjr83HxcE392.png

Measurement

要想控制CANoe啟動測量,就需要獲取Measurement對象,對于上面獲得的Application對象,使用self.App.Measurement獲得。

在Measurement對象的接口定義中,可以看到Start方法,使用Measurement.Start()就能啟動CANoe測量。

pYYBAGLg8O-Aet5KAAJaMzIXbCM760.png

下面是啟動CANoe測量的代碼示例:

poYBAGLg7aCAA2g9AABJHk5zdhA132.png

System Variables

系統(tǒng)變量作為CANoe中重要的部分,要想獲取任意系統(tǒng)變量的值,就要獲取對應系統(tǒng)變量的對象。

pYYBAGLg7bWAA1CnAAAdIla0OOg379.png

從COM Object Hierarchy中可以看到,系統(tǒng)變量Variable對象是按照Application->System->Namespaces->Namespace->Variables->Variable順序訪問的。

其中Namespaces和Variables分別表示Namespace和Variable對象的集合,因此可以使用Namespace名稱(Variable名稱)作為索引,從Namespaces(Variables)中獲得相應的Namespace(Variable)對象。

pYYBAGLg8QaABmkeAAI3s_TWAow842.png

pYYBAGLg8RiAPlT-AAJR-CZ3Rjs323.png

另外,在Variable對象的接口定義中,可以看到get_Value和put_Value方法,而Python將這兩種方法轉變成了Value屬性,也就是說可以直接對Variable.Value取值或賦值。

pYYBAGLg8SiAOdh8AAF_k7D6tg0115.png

下面是獲得系統(tǒng)變量值的代碼示例:

pYYBAGLg7eOAO5qmAADfvW0SyQo840.png

在以上示例中,添加了簡單的異常處理可以暫且不看,僅考察if分支中的語句。首先,使用self.App.System.Namespaces獲得Namespaces對象,將其保存在system_namespaces變量中;然后使用剛保存的變量,以ns_name作為索引獲得Namespace對象并保存在sys_namespace變量中;再通過sysvar_name索引獲得Variable對象sys_variable,最后返回sys_variable.Value屬性值。

Test Configuration & Test Unit

pYYBAGLg7fmAL1JKAAAaklYqEvA671.png

與自動化測試(這里僅介紹Test Configuration配置,即與vTESTstudio軟件聯(lián)合使用的自動化測試)直接相關的就是Test Configuration以及Test Unit,前者對應整個測試執(zhí)行的設置,后者包含具體執(zhí)行的測試用例。在COM Object Hierarchy中可以看到,它們的層級構成為Application->Configuration->TestConfigurations->TestConfiguration->TestUnits->TestUnit:

poYBAGLg7hGAfnVjAABRhyYSQEc178.png

其中,TestConfigurations與TestUnits跟前文類似,表示TestConfiguration和TestUnit的集合,同樣可以通過索引訪問。除了可以使用相應TestConfiguration(TestUnit)名稱作為索引以外,還能使用數(shù)字索引,但是切記索引起始為1。對于僅有一個TestConfiguration的情況,僅需要TestConfigurations(1)來獲得唯一的TestConfiguration對象。

當CANoe工程中還沒有TestConfiguration或者TestUnit時,就需要先添加。查看它們的接口定義:

pYYBAGLg7laAd20kAAJKb06Gq-k508.png

pYYBAGLg7muAZZ1eAAE6RU1_1DQ140.png

可以看到Add方法能添加相應的對象,對于TestConfigurations.Add()不需要其他參數(shù),即可添加并獲得新的TestConfiguration對象;而TestUnits.Add()需要提供所要添加的TestUnit的絕對路徑,同樣可以獲得對應的TestUnit對象。另外值得注意的是,TestUnits的Add方法是在ITestUnits2接口上擴展的,所以要通過前文所述的CastTo方法將TestUnits(默認為基于ITestUnits接口)轉換成基于ITestUnits2的對象。

下面請看加載測試配置的代碼示例:

pYYBAGLg7o6AECd5AACSwL0vycw577.png

在以上示例中,首先通過TestConfigurations.Add()方法新添加一個TestConfiguration對象,并把它保存為類成員self.test_config;之后使用CastTo方法將新添加的TestConfiguration中的TestUnits對象轉換成基于ITestUnits2接口的TestUnits對象(默認為ITestUnits接口);最后使用轉換后的TestUnits對象的Add方法,添加test_unit_path路徑下的測試單元(.vtuexe文件)。

加載測試配置后,還需要啟動測試執(zhí)行,查看ITestConfiguration接口定義,可以發(fā)現(xiàn)Start方法:

poYBAGLg7qqAdIOvAAMOlRk15uw039.png

下面是執(zhí)行測試的代碼示例(這里使用了之前保存的類成員self.test_config):

poYBAGLg7rWAN2_6AABJR5xLQF0460.png

執(zhí)行完測試后,需要獲得測試結果,可以通過CANoe軟件為Test Configuration創(chuàng)建的系統(tǒng)變量VerdictSummary查看:

pYYBAGLg7r6ADYyfAACDw1OmFww375.png

下面是獲得測試結果的代碼示例:

pYYBAGLg7siAKChyAABd-KrA_vM375.png

這里get_test_result方法有一個帶有默認值的參數(shù)test_config_name表示實際執(zhí)行測試的TestConfiguration名稱,它的默認值是Test_Configuration_1,如果沒有修改過就不需要提供參數(shù),否則需要提供;get_test_result返回保存在VerdictSummary中的測試結果,其數(shù)據(jù)類型是整型,需要在接口定義中查詢具體數(shù)值對應的結果:

poYBAGLg7tSAagUcAAEDGX2Fl1o530.png

Test demo

聯(lián)合使用上述COM對象就能夠實現(xiàn)自動化測試,下面展示完整的代碼示例:

pYYBAGLg7uCAaV6mAALQg54cWjk045.png

基于Canoe類,就可以通過實例化Canoe類,調(diào)用實例對象的方法來實現(xiàn)自動化測試,下面是簡單的代碼示例:

pYYBAGLg7uuAXjnJAADb4zITdKE658.png

首先,實例化Canoe類,將實例化后的對象保存在canoe變量中;之后定義了canoePrj變量表示CANoe工程的絕對路徑,然后使用open_canoe_config方法打開此工程;接著定義testPrj變量表示測試單元可執(zhí)行文件的絕對路徑,使用load_test_config方法加載測試單元;然后使用start_canoe方法啟動CANoe測量,等待2s后,使用run_test_config方法執(zhí)行測試,等待10s后測試停止;最后打印通過get_test_result方法獲得的測試結果。

這里使用了Vector CANoe 14自帶的PythonBasicEmpty.cfg demo工程作為測試工程,下面是關于此demo的介紹文檔:

pYYBAGLg7veARhCqAAC7T15Sypk188.png

這個demo中有更豐富的COM對象的應用、更完善的信息提示,比如對測試啟動、停止等事件的控制,對CANoe運行狀態(tài)的打印,在此不再贅述。

最后,運行以上腳本后,可以獲得自動化測試結果,對照前文的VerdictState,可以確定測試通過:

poYBAGLg7v-AYYHkAAAK7g6l-W8747.png

pYYBAGLg7xKAX6qaAACN66v6raU589.png

總結

本文介紹了使用Python訪問CANoe COM以實現(xiàn)自動化測試的基本方法,通過幾個常用的COM對象及方法,構建了簡單的自動化測試示例工程。對于更復雜的工程,同樣可以根據(jù)基本方法,靈活運用COM以滿足測試需求。進一步,可以將CANoe COM封裝成Python庫,利用可復用性高效地完成針對不同需求的自動化測試。

CANoe是德國Vector公司出的一款總線開發(fā)環(huán)境,是網(wǎng)絡和ECU開發(fā)、測試和分析的專業(yè)工具,支持從需求分析到系統(tǒng)實現(xiàn)的整個系統(tǒng)開發(fā)過程;其豐富的功能和配置選項被OEM和供應商的網(wǎng)絡設計工程師、開發(fā)工程師和測試工程師所廣泛使用。

北匯信息作為Vector中國的合作伙伴,不僅提供相應的工具和技術支持服務及培訓,還針對不同的應用提供相應的解決方案,助力中國客戶的研發(fā)效率提升。

注:本文部分圖片來自Vector。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • python
    +關注

    關注

    56

    文章

    4849

    瀏覽量

    89250
  • CANoe
    +關注

    關注

    4

    文章

    77

    瀏覽量

    9483
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    商品自動上架/下架接口實現(xiàn)指南

    如何設計并實現(xiàn)一個高效的自動上架/下架接口,涵蓋原理、接口設計、代碼實現(xiàn)和優(yōu)化建議。本文假設使用Python和Flask框架作為示例,但原理可應用于其他語言。 1. 需求背景與核心原理 自動上架/下架功能主要用于響應特定事件:
    的頭像 發(fā)表于 10-11 15:30 ?123次閱讀
    商品自動上架/下架<b class='flag-5'>接口實</b>現(xiàn)指南

    孔夫子舊書網(wǎng)開放平臺接口實戰(zhàn):古籍圖書檢索與商鋪數(shù)據(jù)集成

    本文詳解孔夫子舊書網(wǎng)古籍數(shù)據(jù)接口的實戰(zhàn)調(diào)用,涵蓋認證簽名、古籍檢索、商鋪集成與特色數(shù)據(jù)處理四大場景,提供可復用的Python代碼及避坑指南,助力學術研究、舊書商管理與古籍數(shù)字化落地。
    的頭像 發(fā)表于 09-23 13:59 ?258次閱讀

    termux如何搭建python游戲

    Pygame),確保已安裝`clang`編譯器:`apt install -y clang` 3. 權限問題:若需訪問手機文件,安裝`termux-setup-storage`并授權存儲訪問權限。 通過以上步驟,即可在Termux中搭建完整的
    發(fā)表于 08-29 07:06

    爆肝整理!CANoe選型不再糾結,3分鐘快速上手!#CANoe

    CANoe
    北匯信息POLELINK
    發(fā)布于 :2025年07月30日 16:36:44

    產(chǎn)品添加與上架API接口設計指南

    ? 在現(xiàn)代電商或庫存管理系統(tǒng)中,產(chǎn)品添加與上架是關鍵流程。通過API接口實現(xiàn)自動化操作,能顯著提升效率。本文將分步解析如何設計和使用“產(chǎn)品添加”與“產(chǎn)品上架”API接口,確保結構清晰、安全可靠。我們
    的頭像 發(fā)表于 07-24 14:45 ?355次閱讀
    產(chǎn)品添加與上架API<b class='flag-5'>接口</b>設計指南

    CANoe中ADAS功能集介紹

    )。AFS作為CANoe基礎功能的一部分,不需要購買額外的Option即可使用。同時,CANoe本身的強大功能和開放接口使得結合總線通信,集成第三方工具,實現(xiàn)SI
    的頭像 發(fā)表于 07-10 14:55 ?919次閱讀
    <b class='flag-5'>CANoe</b>中ADAS功能集介紹

    python入門圣經(jīng)-高清電子書(建議下載)

    和Pygal 等強大的Python 庫和工具介紹,以及列表、字典、if 語句、類、文件與異常、代碼測試等內(nèi)容; 第二部分將理論付諸實踐,講解如何開發(fā)三個項目,包括簡單的Python 2D 游戲開發(fā)如何利用數(shù)據(jù)
    發(fā)表于 04-10 16:53

    CANoe仿真HTTP節(jié)點的實戰(zhàn)秘籍大公開

    在汽車電子系統(tǒng)測試中,CANoe作為主流的仿真測試工具,常需與云端服務器、第三方軟件或物聯(lián)網(wǎng)設備進行交互。隨著CANoe與外部軟件、服務器或設備交互越來越多,直接使用Socket進行通信往往不能滿足
    的頭像 發(fā)表于 03-05 10:04 ?793次閱讀
    <b class='flag-5'>CANoe</b>仿真HTTP節(jié)點的實戰(zhàn)秘籍大公開

    CANoe系列培訓視頻,粉絲提問回答篇#CANoe

    CANoe
    北匯信息POLELINK
    發(fā)布于 :2025年03月03日 10:34:10

    DLP6500能否用Python編程進行開發(fā),是否有API接口?

    本人第一次接觸DLP的開發(fā)板,想知道DLP6500這款板子能否用Python編程進行開發(fā),是否有API接口
    發(fā)表于 02-28 06:58

    如何將python文件導入到ROS系統(tǒng)中

    本文通過使用myCobot機械臂進行QR碼視覺追蹤的實踐案例分析,介紹如何將 python 文件導入到 ROS 系統(tǒng)中。
    的頭像 發(fā)表于 02-11 11:08 ?1093次閱讀
    如何將<b class='flag-5'>python</b>文件導入到ROS系統(tǒng)中

    適用于Oracle的Python連接器:可訪問托管以及非托管的數(shù)據(jù)庫

    適用于 Oracle 的 Python 連接器 適用于 Oracle 的 Python 連接器是一種可靠的連接解決方案,用于從 Python 應用程序訪問 Oracle 數(shù)據(jù)庫服務器和
    的頭像 發(fā)表于 01-14 10:30 ?675次閱讀

    華為云 Flexus X 實例下的場景體驗——小企業(yè)使用 Python 語言——超迅速搭建簡單公網(wǎng) API 接口服務

    ? 前言 小企業(yè)為了快速搞定一些接口功能如果不使用 Python 的話相對來說復雜度還是很高的,這里我來通過【華為云 Flexus X 實例】來迅速的搭建一個 Python 的 WebApi 示例
    的頭像 發(fā)表于 12-27 13:46 ?780次閱讀
    華為云 Flexus X 實例下的場景體驗——小企業(yè)使用 <b class='flag-5'>Python</b> 語言——超迅速搭建簡單公網(wǎng) API <b class='flag-5'>接口</b>服務

    4G模組GPIO接口實操|精選教程

    今天我將把我熟悉的4G模組GPIO接口實操整理成文,以Air724UG做出精選教程分享給大家。
    的頭像 發(fā)表于 12-14 09:36 ?1709次閱讀
    4G模組GPIO<b class='flag-5'>接口實</b>操|精選教程

    通過DSP的mcbsp和i2c接口實現(xiàn)對AIC34芯片的操作,如何編程?

    通過DSP的mcbsp和i2c接口實現(xiàn)對AIC34芯片的操作如何編程,有沒有相關的例程嗎?
    發(fā)表于 11-07 08:12