使用ASAMMDF实现刻度/嵌套转换 构建含##TX与##CC块的MF4表
asammdf创建同时包含##TX块与##CC块的MF4刻度转换表方法
问题描述
我当前使用从asammdf官方GitHub仓库示例中获取的如下代码片段,创建带有值转文本映射表的MF4文件:
vals = 5 conversion = { 'val_{}'.format(i): i for i in range(vals) } conversion.update( { 'text_{}'.format(i): 'key_{}'.format(i).encode('ascii') for i in range(vals) } ) sig = Signal( np.arange(cycles, dtype=np.uint32) % 30, t, name='Channel_value_to_text', conversion=conversion, comment='Value to text channel', ) sigs.append(sig) mdf.append(sigs, comment='arrays', common_timebase=True)
请问是否有方法可以创建同时包含##TX块和##CC块的表,以模拟实现刻度转换?
解答
可以实现,你现有代码里的conversion只配置了值转文本映射,仅对应MF4标准里的##TX块,要同时生成负责数值刻度换算的##CC块,你可以使用asammdf支持的复合转换规则,把数值换算和值转文本的规则嵌套传入即可,具体实现逻辑如下:
- ##CC块 对应数值刻度转换规则,支持线性、多项式、有理函数等多种换算类型,负责将通道原始采样值转换为工程物理值
- ##TX块 对应值到文本映射规则,负责将数值映射为可读的文本标签
- 复合转换规则会按照传入顺序依次执行,先生成##CC块执行数值换算,再生成##TX块执行值转文本映射,两个块会被同步写入MF4文件
示例代码
import numpy as np from asammdf import Signal, MDF # 配置##CC块对应的线性刻度转换规则,示例为原始值 * 0.1 + 2 cc_conversion = { "conversion_type": "LINEAR", "a": 0.1, # 线性系数 "b": 2 # 偏移量 } # 配置##TX块对应的值转文本映射,注意映射值要和CC转换后的输出范围匹配 vals = 5 tx_conversion = { f"val_{i}": i + 2 for i in range(vals) } tx_conversion.update( { f"text_{i}": f"状态_{i}".encode("utf-8") for i in range(vals) } ) # 组合为复合转换规则 combined_conversion = { "conversion_type": "COMPOUND", "conversions": [cc_conversion, tx_conversion] } # 生成测试信号 cycles = 100 t = np.arange(cycles, dtype=np.float64) sig = Signal( np.arange(cycles, dtype=np.uint32) % 30, t, name="复合转换通道", conversion=combined_conversion, comment="同时包含CC刻度转换与TX值转文本映射" ) # 写入MF4文件 mdf = MDF(version="4.10") mdf.append([sig], comment="复合转换测试", common_timebase=True) mdf.save("复合转换测试.mf4", overwrite=True)
注意事项
- 复合转换的执行顺序和
conversions列表的传入顺序一致,需保证值转文本的映射值与前一步数值换算的输出范围匹配 - 如需使用除线性外的其他##CC块换算类型,只需修改
cc_conversion的conversion_type和对应参数即可 - 生成的文件可通过任意支持MF4标准的查看工具验证,通道属性里会同时显示刻度转换规则和值文本映射表
内容的提问来源于stack exchange,提问作者raresRad1
相关产品推荐
相关产品推荐

