From e71416cfb83a499e6883f60c68fe1462b774b93f Mon Sep 17 00:00:00 2001 From: pierreluctg Date: Fri, 16 Apr 2021 03:22:23 -0400 Subject: [PATCH] Set initial_value to physical value (#567) Currently the initial_value is incorrectly set to the signal raw value. --- src/canmatrix/formats/dbc.py | 9 +++++---- src/canmatrix/tests/test_dbc.py | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/canmatrix/formats/dbc.py b/src/canmatrix/formats/dbc.py index 9fa555ed..716c061a 100644 --- a/src/canmatrix/formats/dbc.py +++ b/src/canmatrix/formats/dbc.py @@ -233,8 +233,8 @@ def dump(in_db, f, **options): for signal in frame.signals: if signal.cycle_time != 0: signal.add_attribute("GenSigCycleTime", signal.cycle_time) - if signal.initial_value != 0: - signal.add_attribute("GenSigStartValue", signal.initial_value) + if signal.phys2raw(None) != 0: + signal.add_attribute("GenSigStartValue", signal.phys2raw(None)) name = normalized_names[signal] if compatibility: @@ -254,7 +254,7 @@ def dump(in_db, f, **options): if max([x.cycle_time for y in db.frames for x in y.signals]) > 0: db.add_signal_defines("GenSigCycleTime", 'INT 0 65535') - if max([x.initial_value for y in db.frames for x in y.signals]) > 0 or min([x.initial_value for y in db.frames for x in y.signals]) < 0: + if max([x.phys2raw(None) for y in db.frames for x in y.signals]) > 0 or min([x.phys2raw(None) for y in db.frames for x in y.signals]) < 0: db.add_signal_defines("GenSigStartValue", 'FLOAT 0 100000000000') @@ -945,7 +945,8 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None # frame.extended = 1 for signal in frame.signals: - signal.initial_value = float_factory(signal.attributes.get("GenSigStartValue", "0")) + gen_sig_start_value = float_factory(signal.attributes.get("GenSigStartValue", "0")) + signal.initial_value = (gen_sig_start_value * signal.factor) + signal.offset signal.cycle_time = int(signal.attributes.get("GenSigCycleTime", 0)) if signal.attribute("SystemSignalLongSymbol") is not None: signal.name = signal.attribute("SystemSignalLongSymbol")[1:-1] diff --git a/src/canmatrix/tests/test_dbc.py b/src/canmatrix/tests/test_dbc.py index d291a383..14a8d82e 100644 --- a/src/canmatrix/tests/test_dbc.py +++ b/src/canmatrix/tests/test_dbc.py @@ -421,6 +421,8 @@ def test_signal_inital_value(): BA_DEF_ SG_ "GenSigStartValue" FLOAT 0 100000000000; BA_ "GenSigStartValue" SG_ 17 sig1 2.7; + + SIG_VALTYPE_ 17 sig1 : 1; ''').encode('utf-8')) matrix = canmatrix.formats.dbc.load(dbc, dbcImportEncoding="utf8") assert matrix.frames[0].signal_by_name("sig1").initial_value == decimal.Decimal("2.7")