欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

CAPL與Python交互的實(shí)現(xiàn)

 更新時間:2024年05月05日 09:27:01   作者:別再跑偏了  
CAPL能做超級多的功能,本文主要介紹了CAPL與Python交互的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

Python是很強(qiáng)大的膠水語言,學(xué)會了怎么用CAPL與Python交互,那CAPL就能做超級多的功能。
不要因?yàn)闆]用過Python放棄這么好的工具,因?yàn)镻ython用戶太多了,你直接百度搜索想要Python實(shí)現(xiàn)什么功能,很多時候AI都幫你把Python代碼寫好了,拿來調(diào)試下就能用,關(guān)鍵是用過一次之后,可能就會發(fā)現(xiàn)打開了新世界的大門。

1、CAPL怎么調(diào)Python?

1.1CAPL調(diào)Python的命令

命令:sysExecCmd

//long sysExecCmd(char cmd[], char params[], char directory[]); // 幫助手冊里可以搜到用法
sysExecCmd("python Find_Com_Index.py", "", "./");

這個命令就是調(diào)windows的CMD窗口去做操作,
第一個參數(shù):char cmd[]
要執(zhí)行的命令,也就是要通過CMD調(diào)的應(yīng)用程序,可以是bat腳本,可以是某個exe程序,當(dāng)然也可以是python了,如果是python,就可以后面接python要接的腳本Find_Com_Index.py
第二個參數(shù):char params[]
這個是最有用的,就是調(diào)python腳本或者調(diào)別的exe,bat等入口參數(shù)
第三個參數(shù)
是這個命令的絕對路徑,或者相對于工作目錄的相對路徑。如果是python的話,因?yàn)榘凑誴ython的時候,已經(jīng)給python配置好環(huán)境變量了,就是你在CMD窗口里輸入python之后,CMD就會根據(jù)環(huán)境變量里配置的路徑去找到python.exe執(zhí)行文件調(diào)用,那這個時候路徑這個參數(shù)就要填你要調(diào)用的腳本(.py)的路徑。
python腳本的路徑可以直接寫全,絕對路徑:“C:\Work\Demo”
但是每個人的工程存放路徑不一致,建議還是用相對工程路徑:“./“代表py腳本和canoe工程文件.cfg文件在同一個目錄
如果你想在canoe工程文件.cfg文件目錄下再建一個文件夾專門放py腳本就可以用”./Python_Script”

1.2CAPL調(diào)用Python實(shí)例

很多測試用例里都有Power ON/OFF或者調(diào)節(jié)電壓的需求,比較便宜的程序控制電源都支持串口通信控制電源開關(guān)和電壓。

CAPL可以調(diào)用內(nèi)置函數(shù)RS232Send命令通過COM口發(fā)送命令,但是前提是需要通過RS232Open命令打開對應(yīng)的COM口.針對自己的電腦,你的232串口插上之后可以通過設(shè)備管理器找到對應(yīng)的COM口,然后在CAPL里配置,但是別人用你的腳本測試的時候可能COM口序列號就不一樣了,每次都要重新修改,如果能用python找到COM號,那誰都能用你的腳本了。

用python尋找你電腦上插的232串口線的COM號就比較簡單了,百度一搜一大堆,退一步講,你從網(wǎng)上抄的python腳本一運(yùn)行就報(bào)錯,別怕,python用戶多,你遇到的這點(diǎn)小問題,前人歷經(jīng)了N多遍,搜一下就能解決python報(bào)錯了。
Python腳本如下:網(wǎng)上搜到的,先把電腦識別到的所有COM打印出來,看看長什么樣子,再找自己想要的

import serial
import serial.tools.list_ports

def Get_Power_COM_Index():
    ports_list = list(serial.tools.list_ports.comports())#找到所有的port口
    if len(ports_list) <= 0:#一個也沒找到就報(bào)錯
       print("there is no Serial Device")
    else:
        for comport in ports_list:
            print(list(comport)[0], list(comport)[1])#有COM口就把所有的COM口信息打印出來
           
if __name__ == "__main__": 
   Get_Power_COM_Index()

CAPL代碼:

on key 'a'
{
  sysExecCmd("python Find_Com_Index.py", "", "./");//先不用輸入?yún)?shù),只是試驗(yàn)下調(diào)Python的效果
}

效果如下,假設(shè)電源的那根RS232線是COM7,其實(shí)我們運(yùn)行這個腳本的最終目的就是要拿到這個‘7’,用這個7讓CAPL打開7這個COM口:

效果圖

那怎么拿到這個7, 我們可以用如果‘USB-to-Serial’這個字符串存在COM口信息里,就能獲取到第4行的信息, 再把第4行按照空格分隔字符串,就能得到COM7,再把COM7里的COM刪除調(diào),就能拿到‘7’
Python:

import serial
import serial.tools.list_ports

def Get_Power_COM_Index():
    ports_list = list(serial.tools.list_ports.comports())#找到所有的port口
    if len(ports_list) <= 0:#一個也沒找到就報(bào)錯
       print("there is no Serial Device")
    else:
        for comport in ports_list:
            #print(list(comport)[0], list(comport)[1])#調(diào)試的時候打印,正式用的時候可打可不打了
            if 'USB-to-Serial' in list(comport)[1]:#判斷‘USB-to-Serial'這個字符串存在COM口信息里
                COM_Channel = list(comport)[0]#在的話就把‘COM7'取出來
                COM_Channel = COM_Channel.strip('COM')#把‘COM'字符串拿掉
                Return_Value = int(COM_Channel)#把字符串7,轉(zhuǎn)換成數(shù)字7
                print("The useful USB Serial Port is :",Return_Value )  
           
if __name__ == "__main__": 
   Get_Power_COM_Index()
 這樣我們就能拿到‘7'了

在這里插入圖片描述

2、怎么把python運(yùn)行的結(jié)果返回給CAPL

2.1通過環(huán)境變量

CAPL調(diào)python的命令:sysExecCmd的返回結(jié)果只是代表有沒有成功執(zhí)行這個命令,并不返回python運(yùn)行后的結(jié)果。
目前沒有找到更好的方法,用了繞一圈的方法:用Python調(diào)用Canoe把結(jié)果賦值給Canoe的環(huán)境變量,CAPL再取環(huán)境變量拿結(jié)果。
如果大家有更好的方法,歡迎留言。

Python怎么調(diào)用Canoe,在安裝Canoe的時候,有范例,感興趣可以研究下,我只抄了用到的一部分,路徑如下(版本可能不一致):

在這里插入圖片描述

先在Canoe里新建環(huán)境變量,不知道怎么建的可以搜一下

在這里插入圖片描述

然后python里,
1.用python連接上canoe
2.獲取到想要的COM的序列號
3.通過設(shè)置環(huán)境變量,把COM序列號賦值給Canoe環(huán)境變量:

import serial
import serial.tools.list_ports
import time, os, msvcrt
from win32com.client import *
from win32com.client.connect import *

class CanoeSync(object):
    def __init__(self):
        self.app = Dispatch('CANoe.Application')#打開Canoe  
    def set_System_var(self, Namespace, system_var, Value_Set):
        if (self.app != None):
            self.app.System.Namespaces(Namespace).Variables(system_var).Value = Value_Set
            
def Get_Power_COM_Index():
    canoe = CanoeSync()#連接上Canoe,獲取句柄,有了句柄之后就可以用canoe操作CanoeSync里定義的函數(shù)
    ports_list = list(serial.tools.list_ports.comports())#找到所有的port口
    if len(ports_list) <= 0:#一個也沒找到就報(bào)錯
       print("there is no Serial Device")
    else:
        for comport in ports_list:
            #print(list(comport)[0], list(comport)[1])#有COM口就把所有的COM口信息打印出來
            if 'USB-to-Serial' in list(comport)[1]:#判斷‘USB-to-Serial'這個字符串存在COM口信息里
                COM_Channel = list(comport)[0]#在的話就把‘COM7'取出來
                COM_Channel = COM_Channel.strip('COM')#把‘COM'字符串拿掉
                Return_Value = int(COM_Channel)#把字符串7,轉(zhuǎn)換成數(shù)字7
                canoe.set_System_var("Python_Result","Result_Value",Return_Value)#把轉(zhuǎn)換后的COM號,通過環(huán)境變量給到Canoe
           
if __name__ == "__main__": 
   Get_Power_COM_Index()

在CAPL里
1.按鍵’a’調(diào)用Python腳本去讀COM序列號
2.去環(huán)境變量里拿COM序列號
3.。。。

on key 'a'
{
  sysExecCmd("python Find_Com_Index.py", "", "C:\\Work\\Demo");
}

on sysvar_update Python_Result::Result_Value
{
  write("Find Com Channel is: %d",@Python_Result::Result_Value);
}

CAPL的打印結(jié)果:

在這里插入圖片描述

3、CAPL調(diào)Python的輸入?yún)?shù)

如果調(diào)python的時候沒有帶輸入?yún)?shù),回有很大的不方便:
1.調(diào)一個python腳本實(shí)現(xiàn)一個功能,那一個CAPL腳本里,可能幾十上百個調(diào)python的用的地方,總不能寫幾百個python腳本吧,就比如說這次是想用python找USB轉(zhuǎn)串口的COM號,用的關(guān)鍵字是’USB-to-Serial’,那下一個case想找的是’Technology’的怎么辦?

把想搜索的作為輸入?yún)?shù)傳進(jìn)去:
CAPL:

on key 'b'
{
  sysExecCmd("python Find_Com_Index.py", "Technology", "./");
}

python:把輸入?yún)?shù)作為搜索條件

import serial
import serial.tools.list_ports
import time, os, msvcrt
from win32com.client import *
from win32com.client.connect import *

class CanoeSync(object):
    def __init__(self):
        self.app = Dispatch('CANoe.Application')#打開Canoe  
    def set_System_var(self, Namespace, system_var, Value_Set):
        if (self.app != None):
            self.app.System.Namespaces(Namespace).Variables(system_var).Value = Value_Set



def Get_Power_COM_Index(str):
    canoe = CanoeSync()#連接上Canoe,獲取句柄,有了句柄之后就可以用canoe操作CanoeSync里定義的函數(shù)
    ports_list = list(serial.tools.list_ports.comports())#找到所有的port口
    if len(ports_list) <= 0:#一個也沒找到就報(bào)錯
       print("there is no Serial Device")
    else:
        for comport in ports_list:
            #print(list(comport)[0], list(comport)[1])#有COM口就把所有的COM口信息打印出來
            if str in list(comport)[1]:#判斷str這個字符串存在COM口信息里
                COM_Channel = list(comport)[0]#在的話就把‘COMx'取出來
                COM_Channel = COM_Channel.strip('COM')#把‘COM'字符串拿掉
                Return_Value = int(COM_Channel)#把字符串轉(zhuǎn)換成數(shù)字
                canoe.set_System_var("Python_Result","Result_Value",Return_Value)#把轉(zhuǎn)換后的COM號,通過環(huán)境變量給到Canoe
           
if __name__ == "__main__": 
   CMD1 = sys.argv[1]
   Get_Power_COM_Index(CMD1)

2,你想用python打開某個文件,寫入某個值,操作的文件名,寫入的數(shù)最好都是可以通過輸入?yún)?shù)傳進(jìn)去的,而不是要寫n多個python。多個參數(shù)的傳入時,參數(shù)與參數(shù)之間,用空格代替。
CAPL:

on key 'c'
{
  sysExecCmd("python test.py", "a.txt 12345", "./");
}
import sys

def write_txt(filename,value):
    with open(filename,'a') as f:
         f.write(value)
    
    
if __name__ == "__main__": 
   CMD1 = sys.argv[1]
   CMD2 = sys.argv[2]
   write_txt(CMD1,CMD2)

到此這篇關(guān)于CAPL與Python交互的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)CAPL與Python交互內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于PyCharm安裝后修改路徑名稱使其可重新打開的問題

    關(guān)于PyCharm安裝后修改路徑名稱使其可重新打開的問題

    這篇文章主要介紹了關(guān)于PyCharm安裝后修改路徑名稱使其可重新打開的問題,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Python中的xmltodict模塊詳解

    Python中的xmltodict模塊詳解

    這篇文章主要介紹了Python中的xmltodict模塊詳解,xmltodict一般我們用 json、yaml 轉(zhuǎn)換成 dict 可能多一些,xml 轉(zhuǎn)到 dict 可能用得不多,不過,還是可以來看一看,需要的朋友可以參考下
    2023-07-07
  • 將python代碼和注釋分離的方法

    將python代碼和注釋分離的方法

    下面小編就為大家分享一篇將python代碼和注釋分離的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 5款非常棒的Python工具

    5款非常棒的Python工具

    這篇文章主要為大家詳細(xì)介紹了5款非常棒的Python工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Cython 三分鐘入門教程

    Cython 三分鐘入門教程

    根據(jù)一些我收到的反饋,大家似乎有點(diǎn)混淆——Cython是用來生成 C 擴(kuò)展到而不是獨(dú)立的程序的。所有的加速都是針對一個已經(jīng)存在的 Python 應(yīng)用的一個函數(shù)進(jìn)行的。
    2009-09-09
  • python類的方法屬性與方法屬性的動態(tài)綁定代碼詳解

    python類的方法屬性與方法屬性的動態(tài)綁定代碼詳解

    這篇文章主要介紹了python類的方法屬性與方法屬性的動態(tài)綁定代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • Python函數(shù)式編程指南(四):生成器詳解

    Python函數(shù)式編程指南(四):生成器詳解

    這篇文章主要介紹了Python函數(shù)式編程指南(四):生成器詳解,本文講解了生成器簡介、生成器函數(shù)、生成器函數(shù)的FAQ等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • 解決json中ensure_ascii=False的問題

    解決json中ensure_ascii=False的問題

    這篇文章主要介紹了解決json中ensure_ascii=False的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python對離散變量的one-hot編碼方法

    python對離散變量的one-hot編碼方法

    今天小編就為大家分享一篇python對離散變量的one-hot編碼方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 基于Python 裝飾器裝飾類中的方法實(shí)例

    基于Python 裝飾器裝飾類中的方法實(shí)例

    下面小編就為大家分享一篇基于Python 裝飾器裝飾類中的方法實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04

最新評論