亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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

命令:sysExecCmd

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

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

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

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

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

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

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:#一個(gè)也沒(méi)找到就報(bào)錯(cuò)
       print("there is no Serial Device")
    else:
        for comport in ports_list:
            print(list(comport)[0], list(comport)[1])#有COM口就把所有的COM口信息打印出來(lái)
           
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線(xiàn)是COM7,其實(shí)我們運(yùn)行這個(gè)腳本的最終目的就是要拿到這個(gè)‘7’,用這個(gè)7讓CAPL打開(kāi)7這個(gè)COM口:

效果圖

那怎么拿到這個(gè)7, 我們可以用如果‘USB-to-Serial’這個(gè)字符串存在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:#一個(gè)也沒(méi)找到就報(bào)錯(cuò)
       print("there is no Serial Device")
    else:
        for comport in ports_list:
            #print(list(comport)[0], list(comport)[1])#調(diào)試的時(shí)候打印,正式用的時(shí)候可打可不打了
            if 'USB-to-Serial' in list(comport)[1]:#判斷‘USB-to-Serial'這個(gè)字符串存在COM口信息里
                COM_Channel = list(comport)[0]#在的話(huà)就把‘COM7'取出來(lái)
                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通過(guò)環(huán)境變量

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

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

在這里插入圖片描述

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

在這里插入圖片描述

然后python里,
1.用python連接上canoe
2.獲取到想要的COM的序列號(hào)
3.通過(guò)設(shè)置環(huán)境變量,把COM序列號(hào)賦值給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')#打開(kāi)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:#一個(gè)也沒(méi)找到就報(bào)錯(cuò)
       print("there is no Serial Device")
    else:
        for comport in ports_list:
            #print(list(comport)[0], list(comport)[1])#有COM口就把所有的COM口信息打印出來(lái)
            if 'USB-to-Serial' in list(comport)[1]:#判斷‘USB-to-Serial'這個(gè)字符串存在COM口信息里
                COM_Channel = list(comport)[0]#在的話(huà)就把‘COM7'取出來(lái)
                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號(hào),通過(guò)環(huán)境變量給到Canoe
           
if __name__ == "__main__": 
   Get_Power_COM_Index()

在CAPL里
1.按鍵’a’調(diào)用Python腳本去讀COM序列號(hào)
2.去環(huán)境變量里拿COM序列號(hào)
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的時(shí)候沒(méi)有帶輸入?yún)?shù),回有很大的不方便:
1.調(diào)一個(gè)python腳本實(shí)現(xiàn)一個(gè)功能,那一個(gè)CAPL腳本里,可能幾十上百個(gè)調(diào)python的用的地方,總不能寫(xiě)幾百個(gè)python腳本吧,就比如說(shuō)這次是想用python找USB轉(zhuǎn)串口的COM號(hào),用的關(guān)鍵字是’USB-to-Serial’,那下一個(gè)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')#打開(kāi)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:#一個(gè)也沒(méi)找到就報(bào)錯(cuò)
       print("there is no Serial Device")
    else:
        for comport in ports_list:
            #print(list(comport)[0], list(comport)[1])#有COM口就把所有的COM口信息打印出來(lái)
            if str in list(comport)[1]:#判斷str這個(gè)字符串存在COM口信息里
                COM_Channel = list(comport)[0]#在的話(huà)就把‘COMx'取出來(lái)
                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號(hào),通過(guò)環(huán)境變量給到Canoe
           
if __name__ == "__main__": 
   CMD1 = sys.argv[1]
   Get_Power_COM_Index(CMD1)

2,你想用python打開(kāi)某個(gè)文件,寫(xiě)入某個(gè)值,操作的文件名,寫(xiě)入的數(shù)最好都是可以通過(guò)輸入?yún)?shù)傳進(jìn)去的,而不是要寫(xiě)n多個(gè)python。多個(gè)參數(shù)的傳入時(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

    關(guān)于PyCharm安裝后修改路徑名稱(chēng)使其可重新打開(kāi)的問(wèn)題

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

    Python中的xmltodict模塊詳解

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

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

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

    5款非常棒的Python工具

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

    Cython 三分鐘入門(mén)教程

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

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

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

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

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

    解決json中ensure_ascii=False的問(wèn)題

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

    python對(duì)離散變量的one-hot編碼方法

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

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

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

最新評(píng)論