一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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)自動化測試任務,而易用且具有豐富生態(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)和使用。注冊后的組件向其他軟件提供服務,因此組件將作為服務端(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中,各個功能模塊按照一定的層級組織在一起構(gòu)成整個CANoe軟件。與這些功能模塊直接相關(guān)的COM組件同樣也是按照相應的層級組織的,這就形成了COM Object Hierarchy:

poYBAGLg8J2AKnA5AADbEoPKEKo004.png

如上圖所示,圖的最左側(cè)是Application對象,是訪問其他對象的入口;通過它可以訪問Configuration對象,而通過Configuration對象才能訪問CommunicationSetup對象;要想設(shè)置CommunicationSetup,就需要按照Application->Configuration->CommunicationSetup從左向右的層級順序,找到相應的屬性或是方法,從而實現(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)變量的值,就要獲取對應系統(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將這兩種方法轉(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,前者對應整個測試執(zhí)行的設(shè)置,后者包含具體執(zhí)行的測試用例。在COM Object Hierarchy中可以看到,它們的層級構(gòu)成為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接口)轉(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ù)值對應的結(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對象的應用、更完善的信息提示,比如對測試啟動、停止等事件的控制,對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和供應商的網(wǎng)絡(luò)設(shè)計工程師、開發(fā)工程師和測試工程師所廣泛使用。

北匯信息作為Vector中國的合作伙伴,不僅提供相應的工具和技術(shù)支持服務及培訓,還針對不同的應用提供相應的解決方案,助力中國客戶的研發(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

    文章

    4827

    瀏覽量

    86674
  • CANoe
    +關(guān)注

    關(guān)注

    4

    文章

    75

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    CANoe中ADAS功能集介紹

    )。AFS作為CANoe基礎(chǔ)功能的一部分,不需要購買額外的Option即可使用。同時,CANoe本身的強大功能和開放接口使得結(jié)合總線通信,集成第三方工具,實現(xiàn)SI
    的頭像 發(fā)表于 07-10 14:55 ?398次閱讀
    <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)設(shè)備進行交互。隨著CANoe與外部軟件、服務器或設(shè)備交互越來越多,直接使用Socket進行通信往往不能滿足
    的頭像 發(fā)表于 03-05 10:04 ?550次閱讀
    <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 ?792次閱讀
    如何將<b class='flag-5'>python</b>文件導入到ROS系統(tǒng)中

    Python Connector for InterBase連接解決方案

    適用于 InterBase 的 Python 連接器 Python Connector for InterBase 是一種可靠的連接解決方案,用于從 Python 應用程序訪問 Int
    的頭像 發(fā)表于 01-22 14:34 ?442次閱讀

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

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

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

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

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

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

    變頻器com接口的接線方法

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

    opencv-python和opencv一樣嗎

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