변환 누락 수정
This commit is contained in:
@@ -230,18 +230,66 @@ class CANBinToMDF:
|
||||
samples = np.array(values_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:
|
||||
total_time_max = max(total_time_max, timestamps[-1])
|
||||
|
||||
# Signal 객체 생성
|
||||
signal = Signal(
|
||||
signal_kwargs = dict(
|
||||
samples=samples,
|
||||
timestamps=timestamps,
|
||||
name=f"{msg_name}.{signal_name}",
|
||||
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)
|
||||
signal_count += 1
|
||||
|
||||
Reference in New Issue
Block a user