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

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

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

使用Python訪問CANoe COM接口實踐

北匯信息POLELINK ? 2022-07-27 16:16 ? 次閱讀

CANoe提供的COM接口使得外部腳本能夠訪問或控制CANoe軟件,從而實現(xiàn)自動化測試任務(wù),而易用且具有豐富生態(tài)的Python無疑是一個很好的選擇。本文將介紹CANoe COM基本構(gòu)成、常用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)和使用。注冊后的組件向其他軟件提供服務(wù),因此組件將作為服務(wù)端(COM Server),其他想要使用服務(wù)的作為客戶端(COM Client)。

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

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

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

pYYBAGLg7OiAX3hXAAChV76gGck623.png

COM Object Hierarchy

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

poYBAGLg8J2AKnA5AADbEoPKEKo004.png

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

Type Library

了解COM Object Hierarchy能幫助快速找到所需功能,但是不能知道實現(xiàn)所需功能對象的繼承關(guā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

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

poYBAGLg8LSAfeNaAABtffi7y-Q175.png

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

poYBAGLg8MCAbRGJAAH6itW-pwM972.png

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

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

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

COM Object

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

Application

使用Python控制CANoe,首先要獲取關(guān)聯(lián)整個CANoe進程的COM對象,也就是Application對象。通過Dispatch方法就可以獲得關(guān)聯(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)變量的值,就要獲取對應(yī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)中獲得相應(yīng)的Namespace(Variable)對象。

pYYBAGLg8QaABmkeAAI3s_TWAow842.png

pYYBAGLg8RiAPlT-AAJR-CZ3Rjs323.png

另外,在Variable對象的接口定義中,可以看到get_Value和put_Value方法,而Python將這兩種方法轉(zhuǎn)變成了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)合使用的自動化測試)直接相關(guān)的就是Test Configuration以及Test Unit,前者對應(yīng)整個測試執(zhí)行的設(shè)置,后者包含具體執(zhí)行的測試用例。在COM Object Hierarchy中可以看到,它們的層級構(gòu)成為Application->Configuration->TestConfigurations->TestConfiguration->TestUnits->TestUnit:

poYBAGLg7hGAfnVjAABRhyYSQEc178.png

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

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

pYYBAGLg7laAd20kAAJKb06Gq-k508.png

pYYBAGLg7muAZZ1eAAE6RU1_1DQ140.png

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

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

pYYBAGLg7o6AECd5AACSwL0vycw577.png

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

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

poYBAGLg7qqAdIOvAAMOlRk15uw039.png

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

poYBAGLg7rWAN2_6AABJR5xLQF0460.png

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

pYYBAGLg7r6ADYyfAACDw1OmFww375.png

下面是獲得測試結(jié)果的代碼示例:

pYYBAGLg7siAKChyAABd-KrA_vM375.png

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

poYBAGLg7tSAagUcAAEDGX2Fl1o530.png

Test demo

聯(lián)合使用上述COM對象就能夠?qū)崿F(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方法獲得的測試結(jié)果。

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

pYYBAGLg7veARhCqAAC7T15Sypk188.png

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

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

poYBAGLg7v-AYYHkAAAK7g6l-W8747.png

pYYBAGLg7xKAX6qaAACN66v6raU589.png

總結(jié)

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

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

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

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


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

    關(guān)注

    56

    文章

    4798

    瀏覽量

    84810
  • CANoe
    +關(guān)注

    關(guān)注

    4

    文章

    66

    瀏覽量

    8671
收藏 人收藏

    評論

    相關(guān)推薦

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

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

    4G模組GPIO接口實操|(zhì)精選教程

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

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

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

    想使用typec接口實現(xiàn)數(shù)據(jù)與音頻一體的功能,有推薦的芯片嗎?

    目前我們產(chǎn)品有一路音頻模擬信號,一路usb信號,現(xiàn)在想使用typec接口實現(xiàn)數(shù)據(jù)與音頻一體的功能,想問下ti有這方面的芯片嗎
    發(fā)表于 10-22 06:39

    如何幫助孩子高效學習Python:開源硬件實踐是最優(yōu)選擇

    家長們常常擔心孩子在學習Python時所面臨的挑戰(zhàn),如復雜性、興趣保持、學習進度和可用資源。對于希望有效教授孩子Python的家長而言,了解硬件的作用至關(guān)重要,因為結(jié)合硬件項目的Python學習能夠
    的頭像 發(fā)表于 09-06 09:49 ?334次閱讀

    變頻器com接口的接線方法

    變頻器是一種將工頻電源變換為任意頻率、任意電壓的交流電源,以實現(xiàn)對交流電機的調(diào)速和控制的設(shè)備。變頻器的COM接口是變頻器與外部設(shè)備進行通信的接口,通常用于與PLC、觸摸屏、計算機等設(shè)備進行通信
    的頭像 發(fā)表于 07-19 14:42 ?2307次閱讀

    opencv-python和opencv一樣嗎

    是OpenCV的一個Python語言接口,它允許開發(fā)者使用Python語言來調(diào)用OpenCV庫的功能。 雖然OpenCV和OpenCV-Python在功能上有很多相似之處,但它們之間還
    的頭像 發(fā)表于 07-16 10:38 ?1261次閱讀

    車輛動力學模型DYNA4與CANoe集成操作演示#CANoe #車輛動力學仿真

    模型CANoe
    北匯信息POLELINK
    發(fā)布于 :2024年06月20日 18:35:52

    docs.espressif.com訪問不穩(wěn)定的原因有哪些?

    最近2周,文檔服務(wù)器訪問不穩(wěn)定:偶爾可以訪問,大多數(shù)時候不能訪問。 以下是我從阿里云服務(wù)器上curl的信息: ----- # curl https://docs.espressif.com
    發(fā)表于 06-13 08:25

    鴻蒙開發(fā)接口安全:【@ohos.abilityAccessCtrl (訪問控制管理)】

    訪問控制管理:獲取訪問控制模塊對象。
    的頭像 發(fā)表于 06-05 09:16 ?617次閱讀
    鴻蒙開發(fā)<b class='flag-5'>接口</b>安全:【@ohos.abilityAccessCtrl (<b class='flag-5'>訪問</b>控制管理)】

    請問可以用FX3作為SPI的Master,通過GPIF II接口實現(xiàn)SPI通信嗎?

    GPIF II接口實現(xiàn)SPI通信嗎? 2.請問FX3的GPIF II接口輸出是什么電平標準呢?TTL or CMOS or 485 or 422? 我的外設(shè)是422電平,如果要用FX3的GPIF II接口驅(qū)動,需要電平轉(zhuǎn)換嗎?
    發(fā)表于 05-29 07:46

    CANoe中Logging模塊使用方法及妙招

    Logging是CANoe軟件中的數(shù)據(jù)記錄模塊,主要在臺架測試中使用,支持CAN/CANFD、LIN、FlexRay以及車載以太網(wǎng)總線的數(shù)據(jù)記錄。常用的數(shù)據(jù)記錄儀還有GL數(shù)據(jù)記錄儀,GL有自己單獨
    的頭像 發(fā)表于 05-23 08:25 ?1245次閱讀
    <b class='flag-5'>CANoe</b>中Logging模塊使用方法及妙招

    CANoe軟件的使用操作說明

    本文檔是CANoe軟件的使用操作說明,方便剛接觸CANoe的伙伴們快速上手使用這個軟件。
    的頭像 發(fā)表于 02-25 14:30 ?1.3w次閱讀
    <b class='flag-5'>CANoe</b>軟件的使用操作說明

    TC1728沒有LIN接口,只有UART接口,可以用UART接口實現(xiàn)LIN接口嗎?

    TC1728沒有LIN接口,只有UART接口??梢杂肬ART接口實現(xiàn)LIN接口嗎?
    發(fā)表于 02-06 06:51

    CanoE和TC3x7應(yīng)用套件之間建立通信,如何實現(xiàn)通過串行通信從CanoE收到的數(shù)據(jù)幀?

    我想在 CanoE 和 TC3x7 應(yīng)用套件之間建立通信。 我希望開發(fā)板打印它通過串行通信從 CanoE 收到的數(shù)據(jù)幀。 我該怎么做? 我是初學者,請幫忙。
    發(fā)表于 01-31 06:36