2017-08-14
编辑器格式和属性
作者:admin 点击:2254
这是关于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:从菜单中打开“提取和转换文件”向导
在这篇博文中,b体育(福州)有限公司官网来看看如何使用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(),b体育(福州)有限公司官网可以找出特定编辑器格式是否支持单个属性。例如:属性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 |
一旦b体育(福州)有限公司官网实例化了转换器,大多数(但不是全部)编辑器属性可以使用 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. 在b体育(福州)有限公司官网的代码中,b体育(福州)有限公司官网通过导入canlib.kvlclib作为kvlc导入转换器包装库,这就使得这个简单的命名方案成功实施。
5. 基于执行细节,结果可以任意顺序返回。
6. 除KVLC_PROPERTY_ATTACHMENTS之外,属性KVLC_PROPERTY_SIGNAL_BASED 和KVLC_PROPERTY_SHOW_SIGNAL_SELECT 仅可用于函数 kvlcIsPropertySupported().