編輯器格式和屬性

編輯器格式和屬性

這是關於CANlib SDK中使用轉換庫(kvlclib)3篇系列文章第1篇

1. 編輯器格式和屬性(1/3)

2. 轉換為純SCII碼(2/3)

3. 特殊轉換情況(3/3)

包含在Kvaser Memorator配置工具中的轉換器已發布,它是CANlib SDK v5.19中的一個名為kvlclib的單獨轉換器庫。.[1] 如果您使用Kvaser Memorator 配置工具中的「提取和轉換文件」(Extract and convert files)嚮導,則您已經訪問了轉換器庫,可查看具體功能。

圖1:從菜單中打開「提取和轉換文件」嚮導

在這篇博文中,我們來看看如何使用Python的轉換器程序庫。轉換器程序庫(kvlclib)的Python包裝器包含在CANlib SDK中,可單獨下載使用。[2] 有關如何安裝和使用Python包的簡短介紹,查看此博文。

轉換器程序庫有兩個C函數,kvlcGetFirstWriterFormat() 和 kvlcGetNextWriterFormat(),可用於列出所有支持的轉換器格式。[3] 這兩個函數被包裝在Python代碼中,為kvlc.getFirstWriterFormat() 和kvlc.getNextWriterFormat().[4]

列表1中的第一個程序使用這兩個函數來輸出所有支持的格式。

import canlib.kvlclib as kvlc

print("Supported formats:")

print(" Id Name (Extension), Description
" + 』=』 * 50)

# Ask kvlclib for the first supported writer format

id = kvlc.WriterFormat.getFirstWriterFormat()

while True:

fmt = kvlc.WriterFormat(id)

print(str(fmt)) 11

# Ask kvlclib for the next supported writer format

id = kvlc.WriterFormat.getNextWriterFormat(fmt.id_)

# If no more writer formats were supported, we get id 0.

if id == 0:

break

列表1:使用轉換器程序庫輸出支持的格式

運行列表1中的代碼生成所有支持的編輯器(即輸出)格式列表:[5]

Supported formats:

Id Name (Extension), Description

4: CSV Frame (.csv), CAN frames in CSV format

100: CSV Signal (.csv), Selected signals in CSV format

200: CSV CCP/XCP (.csv), CCP/XCP calibration in CSV format

102: Matlab (.mat), Selected signals in Matlab format for ATI Vision

1: KME 2.4 (.kme), Kvaser binary format (KME 2.4) - used for Vector CANalyzer

2: KME 2.5 (.kme25), Kvaser binary format (KME 2.5)

7: KME 4.0 (.kme40), Kvaser binary format (KME 4.0)

9: KME 5.0 (.kme50), Kvaser binary format (KME 5.0)

5: Plain text (.txt), CAN frames in plain text format

105: FAMOS (.dat), Selected signals in FAMOS format

201: FAMOS CCP/XCP (.dat), CCP/XCP calibration in FAMOS format

3: Vector ASCII (.asc), CAN frames in Vector ASCII format

8: Vector BLF (.blf), CAN frames in Vector BLF format

1000: Debug output (.dbg), RAW Debug output

101: MDF (.log), CAN frames in Vector Mdf

107: MDF v4.1 (.mf4), CAN frames in MDF v4.1 for Vector CANalyzer

106: MDF Signal (.mdf), Selected signals in MDF format for Vector CANalyzer

108: MDF v4.1 Signal (.mf4), Selected signals in MDF v4.1 for Vector CANalyzer

103: ASCII J1587 (.asc), Vector ASCII J1587

每個編輯器格式都有多個屬性,並使用函數kvlcIsPropertySupported(),我們可以找出特定編輯器格式是否支持單個屬性。例如:屬性KVLC_PROPERTY_ATTACHMENTS表示是否可以將文件附加到輸出文件。

import canlib.kvlclib as kvlc

# Set output format

fmt = kvlc.WriterFormat(kvlc.FILE_FORMAT_PLAIN_ASC)

# check if format supports KVLC_PROPERTY_ATTACHMENTS

if fmt.isPropertySupported(kvlc.PROPERTY_ATTACHMENTS): print("PROPERTY_ATTACHMENTS is supported")

else:

print("PROPERTY_ATTACHMENTS is not supported")

列表2:檢查編輯器格式屬性存在的示例代碼

運行列表2中的代碼顯示編輯器格式KVLC_FILE_FORMAT_PLAIN_ASC不支持編輯器屬性KVLC_PROPERTY_ATTACHMENTS.

PROPERTY_ATTACHMENTS is not supported

一旦我們實例化了轉換器,大多數(但不是全部)編輯器屬性可以使用 kvlcSetProperty() 和 kvlcGetProperty()進行讀寫。[6] 也可以使用kvlcGetWriterPropertyDefault()檢查單個屬性的默認值。例如:屬性KVLC_PROPERTY_CHANNEL_MASK 設置為在轉換時應該使用的通道的位掩碼。

import canlib.kvlclib as kvlc

# set output format

fmt = kvlc.WriterFormat(kvlc.FILE_FORMAT_PLAIN_ASC)

# set resulting output filename taking advantage of the extension defined in

# the format.

outfile = "myresult." + fmt.extension

# create converter

kc = kvlc.Kvlclib(outfile, fmt)

# check if converter supports KVLC_PROPERTY_CHANNEL_MASK

if kc.isPropertySupported(kvlc.PROPERTY_CHANNEL_MASK):

# print the current (default) value (in binary format)

print("Original value for CHANNEL_MASK is %s" % bin(kc.getProperty(kvlc.PROPERTY_CHANNEL_MASK)))

# set a new value

kc.setProperty(kvlc.PROPERTY_CHANNEL_MASK, 1)

# print the current value

print("New value for CHANNEL_MASK is %s" % bin(kc.getProperty(kvlc.PROPERTY_CHANNEL_MASK)))

# print default value (in binary format)

print("Default value for CHANNEL_MASK is %s" % bin(kc.getPropertyDefault(kvlc.PROPERTY_CHANNEL_MASK)))

列表3:讀取和寫入轉換器屬性的示例代碼

運行列表3的代碼輸出以下結果:

Original value for CHANNEL_MASK is 0b11

New value for CHANNEL_MASK is 0b1

Default value for CHANNEL_MASK is 0b11

腳註

1. 轉換器程序庫kvlclib,目前僅在Windows操作系統上可用。

2. CANlib SDK和Python軟體包獨立下載見www.kvaser.cn/downloads

3. 我會嘗試一直在該博文中的運行文本中編寫函數名和定義的C格式。

4. 在我們的代碼中,我們通過導入canlib.kvlclib作為kvlc導入轉換器包裝庫,這就使得這個簡單的命名方案成功實施。

5. 基於執行細節,結果可以任意順序返回。

6. 除KVLC_PROPERTY_ATTACHMENTS之外,屬性KVLC_PROPERTY_SIGNAL_BASED 和KVLC_PROPERTY_SHOW_SIGNAL_SELECT 僅可用於函數 kvlcIsPropertySupported().


推薦閱讀:

移動端內容編輯器(鍵盤)的設計參考
如何從頭打造一個Markdown編輯器(序章)
收集漂亮的 Vim 主題
Confluence 6 在編輯器中控制參數的顯示

TAG:文本編輯器 | Vim | CAN匯流排 |