最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

Python是很強(qiáng)大的膠水語(yǔ)言,學(xué)會(huì)了怎么用CAPL與Python交互,那CAPL就能做超級(jí)多的功能。
不要因?yàn)闆]用過Python放棄這么好的工具,因?yàn)镻ython用戶太多了,你直接百度搜索想要Python實(shí)現(xiàn)什么功能,很多時(shí)候AI都幫你把Python代碼寫好了,拿來調(diào)試下就能用,關(guān)鍵是用過一次之后,可能就會(huì)發(fā)現(xià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í)行的命令,也就是要通過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的話,因?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腳本的路徑可以直接寫全,絕對(duì)路徑:“C:\Work\Demo”
但是每個(gè)人的工程存放路徑不一致,建議還是用相對(duì)工程路徑:“./“代表py腳本和canoe工程文件.cfg文件在同一個(gè)目錄
如果你想在canoe工程文件.cfg文件目錄下再建一個(gè)文件夾專門放py腳本就可以用”./Python_Script”

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

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

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

用python尋找你電腦上插的232串口線的COM號(hào)就比較簡(jiǎn)單了,百度一搜一大堆,退一步講,你從網(wǎng)上抄的python腳本一運(yùn)行就報(bào)錯(cuò),別怕,python用戶多,你遇到的這點(diǎn)小問題,前人歷經(jīng)了N多遍,搜一下就能解決python報(bào)錯(cuò)了。
Python腳本如下:網(wǎng)上搜到的,先把電腦識(shí)別到的所有COM打印出來,看看長(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è)也沒找到就報(bào)錯(cuò)
       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)行這個(gè)腳本的最終目的就是要拿到這個(gè)‘7’,用這個(gè)7讓CAPL打開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è)也沒找到就報(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]#在的話就把‘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í)行這個(gè)命令,并不返回python運(yùn)行后的結(jié)果。
目前沒有找到更好的方法,用了繞一圈的方法:用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.通過設(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')#打開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è)也沒找到就報(bào)錯(cuò)
       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'這個(gè)字符串存在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號(hào),通過環(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í)候沒有帶輸入?yún)?shù),回有很大的不方便:
1.調(diào)一個(gè)python腳本實(shí)現(xiàn)一個(gè)功能,那一個(gè)CAPL腳本里,可能幾十上百個(gè)調(diào)python的用的地方,總不能寫幾百個(gè)python腳本吧,就比如說這次是想用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')#打開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è)也沒找到就報(bào)錯(cuò)
       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這個(gè)字符串存在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號(hào),通過環(huán)境變量給到Canoe
           
if __name__ == "__main__": 
   CMD1 = sys.argv[1]
   Get_Power_COM_Index(CMD1)

2,你想用python打開某個(gè)文件,寫入某個(gè)值,操作的文件名,寫入的數(shù)最好都是可以通過輸入?yún)?shù)傳進(jìn)去的,而不是要寫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)文章

  • Python復(fù)合賦值運(yùn)算符由淺入深實(shí)例探究

    Python復(fù)合賦值運(yùn)算符由淺入深實(shí)例探究

    這篇文章主要為大家介紹了Python復(fù)合賦值運(yùn)算符由淺入深實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python?Selenium無法打開Chrome瀏覽器處理自定義瀏覽器路徑的問題及解決方法

    Python?Selenium無法打開Chrome瀏覽器處理自定義瀏覽器路徑的問題及解決方法

    Python?Selenium控制Chrome瀏覽器的過程中,由于安裝的Chrome瀏覽器的版本找不到對(duì)應(yīng)版本的驅(qū)動(dòng)chromedriver.exe文件,下載了小幾個(gè)版本號(hào)的驅(qū)動(dòng)軟件都無法正常使用,下面通過本文介紹Python?Selenium無法打開Chrome瀏覽器處理自定義瀏覽器路徑的問題,需要的朋友可以參考下
    2024-08-08
  • Python Django 通用視圖和錯(cuò)誤視圖的使用代碼

    Python Django 通用視圖和錯(cuò)誤視圖的使用代碼

    這篇文章主要介紹了Python Django 通用視圖和錯(cuò)誤視圖的使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 一文帶你搞懂Python?FastAPI中所有核心參數(shù)的設(shè)置

    一文帶你搞懂Python?FastAPI中所有核心參數(shù)的設(shè)置

    本文帶你一次搞懂?FastAPI?中的所有核心參數(shù)類型,從簡(jiǎn)單的查詢字符串,再到處理復(fù)雜?JSON?或表單數(shù)據(jù)的請(qǐng)求體,感興趣的小伙伴可以了解下
    2025-12-12
  • python中的信號(hào)通信 blinker的使用小結(jié)

    python中的信號(hào)通信 blinker的使用小結(jié)

    信號(hào)是一種通知或者說通信的方式,信號(hào)分為發(fā)送方和接收方,信號(hào)的特點(diǎn)就是發(fā)送端通知訂閱者發(fā)生了什么,今天通過本文給大家介紹python中的信號(hào)通信 blinker的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-10-10
  • Flask框架Flask-Principal基本用法實(shí)例分析

    Flask框架Flask-Principal基本用法實(shí)例分析

    這篇文章主要介紹了Flask框架Flask-Principal基本用法,結(jié)合實(shí)例形式分析了Flask框架flask-principal擴(kuò)展的基本功能、安裝、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • python抓取多種類型的頁(yè)面方法實(shí)例

    python抓取多種類型的頁(yè)面方法實(shí)例

    在本篇文章里小編給大家整理的是關(guān)于python抓取多種類型的頁(yè)面方法實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2019-11-11
  • Python編寫一個(gè)趣味問答小游戲

    Python編寫一個(gè)趣味問答小游戲

    隨著六一兒童節(jié)的到來,我們可以為孩子們編寫一個(gè)有趣的小游戲,讓他們?cè)谟螒蛑袑W(xué)習(xí)有關(guān)六一兒童節(jié)的知識(shí)。本文將介紹如何用Python編寫一個(gè)六一兒童節(jié)問答小游戲及趣味比賽,需要的可以參考一下
    2023-06-06
  • Python Matplotlib 實(shí)現(xiàn)3D繪圖詳解

    Python Matplotlib 實(shí)現(xiàn)3D繪圖詳解

    Matplotlib在二維繪圖的基礎(chǔ)上,構(gòu)建了一部分較為實(shí)用的3D繪圖程序包。本文將為大家詳細(xì)介紹通過調(diào)用該程序包接口繪制 3D散點(diǎn)圖、3D曲面圖、3D線框圖。感興趣的同學(xué)可以了解一下
    2021-11-11
  • Matlab中plot基本用法的具體使用

    Matlab中plot基本用法的具體使用

    這篇文章主要介紹了Matlab中plot基本用法的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論

北辰区| 会泽县| 南康市| 西宁市| 通榆县| 南昌市| 靖安县| 东辽县| 同心县| 泰和县| 梁河县| 呼玛县| 洛隆县| 芜湖市| 南阳市| 茌平县| 筠连县| 高平市| 澄迈县| 施秉县| 盐池县| 宜兰县| 黄大仙区| 田林县| 会东县| 万年县| 娄底市| 修文县| 明光市| 盐源县| 宁武县| 平陆县| 班玛县| 溆浦县| 昆明市| 宜昌市| 肇东市| 城固县| 西林县| 雷波县| 出国|