변환 누락 수정

This commit is contained in:
2026-03-24 19:17:24 +00:00
parent e7beaa5b41
commit 5616158cc7

View File

@@ -229,19 +229,67 @@ class CANBinToMDF:
# numpy 배열로 변환 # numpy 배열로 변환
samples = np.array(values_list) samples = np.array(values_list)
timestamps = np.array(timestamps_list) timestamps = np.array(timestamps_list)
# choices(named values) 시그널 처리:
# cantools가 NamedSignalValue 객체로 디코딩 → 정수값으로 저장하고
# TABX(ValueToText) conversion 테이블을 붙여 뷰어에서 텍스트로 표시
conversion = None
if samples.dtype == object:
try:
from cantools.database.namedsignalvalue import NamedSignalValue as NSV
from asammdf.blocks import v4_blocks as v4b, v4_constants as v4c
# 정수값 추출
int_values = [
v.value if isinstance(v, NSV) else int(v)
for v in values_list
]
samples = np.array(int_values, dtype=np.int64)
# TABX(ValueToText) conversion 생성
if signal_def.choices:
choice_keys = sorted(signal_def.choices.keys())
n = len(choice_keys)
cc_kwargs = {
'conversion_type': v4c.CONVERSION_TYPE_TABX,
'val_param_nr': n,
'ref_param_nr': n + 1,
}
for i, k in enumerate(choice_keys):
cc_kwargs[f'val_{i}'] = float(k)
cc_kwargs[f'text_{i}'] = 0
cc_kwargs['text_default'] = 0
cc = v4b.ChannelConversion(**cc_kwargs)
cc.referenced_blocks = {}
for i, k in enumerate(choice_keys):
cc.referenced_blocks[f'text_{i}'] = str(signal_def.choices[k])
cc.referenced_blocks['text_default'] = 'Unknown'
conversion = cc
except Exception:
try:
samples = np.array(values_list, dtype=np.float64)
except Exception:
print(f"⚠️ 시그널 값 변환 실패, 건너뜀 ({msg_name}.{signal_name})")
continue
# comment 설정
comment = signal_def.comment or ''
# 최대 시간 추적 # 최대 시간 추적
if len(timestamps) > 0: if len(timestamps) > 0:
total_time_max = max(total_time_max, timestamps[-1]) total_time_max = max(total_time_max, timestamps[-1])
# Signal 객체 생성 # Signal 객체 생성
signal = Signal( signal_kwargs = dict(
samples=samples, samples=samples,
timestamps=timestamps, timestamps=timestamps,
name=f"{msg_name}.{signal_name}", name=f"{msg_name}.{signal_name}",
unit=signal_def.unit or '', unit=signal_def.unit or '',
comment=signal_def.comment or '' comment=comment
) )
if conversion is not None:
signal_kwargs['conversion'] = conversion
signal = Signal(**signal_kwargs)
mdf.append(signal) mdf.append(signal)
signal_count += 1 signal_count += 1
@@ -1373,4 +1421,4 @@ def main():
if __name__ == "__main__": if __name__ == "__main__":
main() main()