From 7d431859430a1fe2dbc8fb47d1f61aad7cef19a5 Mon Sep 17 00:00:00 2001 From: ebroecker Date: Thu, 20 Jul 2023 15:26:39 +0200 Subject: [PATCH 01/61] requirements for read-the-docs --- requirements_docs.txt | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 requirements_docs.txt diff --git a/requirements_docs.txt b/requirements_docs.txt new file mode 100644 index 00000000..7940587d --- /dev/null +++ b/requirements_docs.txt @@ -0,0 +1,6 @@ +lxml +ldfparser +xlrd +xlwt +xlsxwriter +pyyaml \ No newline at end of file From 2eb27ec433a71ca7e563d13d344cef60821e9cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Thu, 27 Jul 2023 11:16:53 +0200 Subject: [PATCH 02/61] Iss541 - switch to openpyxl (#676) * use openpyxl to read and write xlsx-files --- requirements_docs.txt | 2 +- setup.py | 4 +- src/canmatrix/formats/xlsx.py | 272 ++++++++++++++-------------------- 3 files changed, 114 insertions(+), 164 deletions(-) diff --git a/requirements_docs.txt b/requirements_docs.txt index 7940587d..f0f5c31b 100644 --- a/requirements_docs.txt +++ b/requirements_docs.txt @@ -2,5 +2,5 @@ lxml ldfparser xlrd xlwt -xlsxwriter +openpyxl pyyaml \ No newline at end of file diff --git a/setup.py b/setup.py index 4487868e..19ffa42d 100644 --- a/setup.py +++ b/setup.py @@ -114,8 +114,8 @@ "sym": [], "test": ["pathlib2; python_version < '3.4'", "pytest"], "wireshark": [], - "xls": ["xlrd", "xlwt"], - "xlsx": ["xlsxwriter"], + "xls": ["xlrd==1.2.0", "xlwt"], + "xlsx": ["openpyxl"], "yaml": ["pyyaml"], }, diff --git a/src/canmatrix/formats/xlsx.py b/src/canmatrix/formats/xlsx.py index 7fa8d890..c3c8371e 100644 --- a/src/canmatrix/formats/xlsx.py +++ b/src/canmatrix/formats/xlsx.py @@ -29,10 +29,13 @@ import typing from builtins import * -import xlsxwriter +import openpyxl +import openpyxl.utils import canmatrix import canmatrix.formats.xls_common +from openpyxl.worksheet.dimensions import ColumnDimension +from openpyxl.styles import NamedStyle, Font, Alignment, PatternFill, Border, Side logger = logging.getLogger(__name__) @@ -80,22 +83,28 @@ def write_ecu_matrix(ecu_list, signal, frame, worksheet, row, col, first_frame): loc_style_sender = sender_green # write "s" "r" "r/s" if signal is sent, received or send and received by ECU if signal is not None and ecu in signal.receivers and ecu in frame.transmitters: - worksheet.write(row, col, "r/s", loc_style_sender) + worksheet.cell(row=row+1, column=col+1).value = "r/s" + worksheet.cell(row=row+1, column=col+1).style = loc_style_sender elif signal is not None and ecu in signal.receivers: - worksheet.write(row, col, "r", loc_style) + worksheet.cell(row=row+1, column=col+1).value = "r" + worksheet.cell(row=row+1, column=col+1).style = loc_style elif ecu in frame.transmitters: - worksheet.write(row, col, "s", loc_style_sender) + worksheet.cell(row=row+1, column=col+1).value = "s" + worksheet.cell(row=row+1, column=col+1).style = loc_style_sender else: - worksheet.write(row, col, "", loc_style) + worksheet.cell(row=row+1, column=col+1).value = "" + worksheet.cell(row=row+1, column=col+1).style = loc_style col += 1 # loop over ECUs ends here return col def write_excel_line(worksheet, row, col, row_array, style): - # type: (xlsxwriter.workbook.Worksheet, int, int, typing.Sequence[typing.Any], xlsxwriter.workbook.Format) -> int + # type: (openpyxl.workbook.Worksheet, int, int, typing.Sequence[typing.Any], xlsxwriter.workbook.Format) -> int for item in row_array: - worksheet.write(row, col, item, style) + worksheet.cell(row=row+1, column=col+1).value = item + if style != 0: + worksheet.cell(row=row + 1, column=col + 1).style = style col += 1 return col @@ -107,7 +116,6 @@ def dump(db, filename, **options): additional_signal_columns = [x for x in options.get("additionalSignalAttributes", "").split(",") if x] additional_frame_columns = [x for x in options.get("additionalFrameAttributes", "").split(",") if x] - head_top = [ 'ID', 'Frame Name', @@ -124,47 +132,59 @@ def dump(db, filename, **options): 'Byteorder'] head_tail = ['Value', 'Name / Phys. Range', 'Function / Increment Unit'] - workbook = xlsxwriter.Workbook(filename) + workbook = openpyxl.Workbook() # ws_name = os.path.basename(filename).replace('.xlsx', '') # worksheet = workbook.add_worksheet('K-Matrix ' + ws_name[0:22]) - worksheet = workbook.add_worksheet('K-Matrix ') + worksheet = workbook.active + worksheet.title = 'K-Matrix ' + global sty_header - sty_header = workbook.add_format({'bold': True, - 'rotation': 90, - 'font_name': 'Verdana', - 'font_size': 8, - 'align': 'center', - 'valign': 'center'}) - global sty_first_frame - sty_first_frame = workbook.add_format({'font_name': 'Verdana', - 'font_size': 8, - 'font_color': 'black', 'top': 1}) global sty_white - sty_white = workbook.add_format({'font_name': 'Verdana', - 'font_size': 8, - 'font_color': 'white'}) + global sty_first_frame global sty_norm - sty_norm = workbook.add_format({'font_name': 'Verdana', - 'font_size': 8, - 'font_color': 'black'}) - - # ECUMatrix-Styles global sty_green - sty_green = workbook.add_format({'pattern': 1, 'fg_color': '#CCFFCC'}) global sty_green_first_frame - sty_green_first_frame = workbook.add_format( - {'pattern': 1, 'fg_color': '#CCFFCC', 'top': 1}) global sty_sender - sty_sender = workbook.add_format({'pattern': 0x04, 'fg_color': '#C0C0C0'}) global sty_sender_first_frame - sty_sender_first_frame = workbook.add_format( - {'pattern': 0x04, 'fg_color': '#C0C0C0', 'top': 1}) global sty_sender_green - sty_sender_green = workbook.add_format( - {'pattern': 0x04, 'fg_color': '#C0C0C0', 'bg_color': '#CCFFCC'}) global sty_sender_green_first_frame - sty_sender_green_first_frame = workbook.add_format( - {'pattern': 0x04, 'fg_color': '#C0C0C0', 'bg_color': '#CCFFCC', 'top': 1}) + + sty_header = NamedStyle(name="sty_header") + sty_header.font = Font(bold=True, size=8, name='Verdana') + sty_header.alignment = Alignment(text_rotation=90, vertical='center', horizontal='center') + + sty_first_frame = NamedStyle(name="sty_first_frame") + sty_first_frame.font = Font(bold=True, size=8, name='Verdana', color='ff000000') + sty_first_frame.border = Border(top=Side(border_style='thin')) + + sty_white = NamedStyle(name="sty_white") + sty_white.font = Font(bold=True, size=8, name='Verdana', color='00ffffff') + + sty_norm = NamedStyle(name="sty_norm") + sty_norm.font = Font(bold=True, size=8, name='Verdana', color='ff000000') + + # ECUMatrix-Styles + sty_green = NamedStyle(name="sty_green") + sty_green.fill = PatternFill(patternType='solid', fgColor='CCFFCC') + # sty_green = workbook.add_format({'pattern': 1, 'fg_color': '#CCFFCC'}) + + sty_green_first_frame = NamedStyle(name="sty_green_first_frame") + sty_green_first_frame.fill = PatternFill(patternType='solid', fgColor='CCFFCC') + sty_green_first_frame.border = Border(top=Side(border_style='thin')) + + sty_sender = NamedStyle(name="sty_sender") + sty_sender.fill = PatternFill(patternType='lightGrid', fgColor='C0C0C0') + + sty_sender_first_frame = NamedStyle(name="sty_sender_first_frame") + sty_sender_first_frame.fill = PatternFill(patternType='lightGrid', fgColor='C0C0C0') + sty_sender_first_frame.border = Border(top=Side(border_style='thin')) + + sty_sender_green = NamedStyle(name="sty_sender_green") + sty_sender_green.fill = PatternFill(patternType='lightGrid', fgColor='C0C0C0', bgColor='CCFFCC') + + sty_sender_green_first_frame = NamedStyle(name="sty_sender_green_first_frame") + sty_sender_green_first_frame.fill = PatternFill(patternType='lightGrid', fgColor='C0C0C0', bgColor='CCFFCC') + sty_sender_green_first_frame.border = Border(top=Side(border_style='thin')) row_array = head_top head_start = len(row_array) @@ -174,18 +194,19 @@ def dump(db, filename, **options): row_array += ecu_list for col in range(0, len(row_array)): - worksheet.set_column(col, col, 2) + worksheet.column_dimensions[openpyxl.utils.get_column_letter(col+1)] = ColumnDimension(worksheet, customWidth=True) + worksheet.column_dimensions[openpyxl.utils.get_column_letter(col + 1)].width = 2 row_array += head_tail additional_frame_start = len(row_array) # set width of selected Cols - worksheet.set_column(0, 0, 3.57) - worksheet.set_column(1, 1, 21) - worksheet.set_column(3, 3, 12.29) - worksheet.set_column(7, 7, 21) - worksheet.set_column(8, 8, 30) + worksheet.column_dimensions[openpyxl.utils.get_column_letter(1)].width = 3.57 + worksheet.column_dimensions[openpyxl.utils.get_column_letter(2)].width = 21 + worksheet.column_dimensions[openpyxl.utils.get_column_letter(3)].width = 12.29 + worksheet.column_dimensions[openpyxl.utils.get_column_letter(4)].width = 21 + worksheet.column_dimensions[openpyxl.utils.get_column_letter(5)].width = 30 for additional_col in additional_frame_columns: row_array.append("frame." + additional_col) @@ -258,8 +279,8 @@ def dump(db, filename, **options): for val in sorted(sig.values.keys()): row_array = canmatrix.formats.xls_common.get_frame_info(db, frame) front_col = write_excel_line(worksheet, row, 0, row_array, frame_style) - if frame_style != sty_first_frame: - worksheet.set_row(row, None, None, {'level': 1}) +# if frame_style != sty_first_frame: +# worksheet.set_row(row, None, None, {'level': 1}) col = head_start col = write_ecu_matrix(ecu_list, sig, frame, worksheet, row, col, frame_style) @@ -272,7 +293,6 @@ def dump(db, filename, **options): temp = getattr(sig, item, "") back_row.append(temp) - write_excel_line(worksheet, row, col + 2, back_row, signal_style) write_excel_line(worksheet, row, col, [val, sig.values[val]], value_style) @@ -288,8 +308,8 @@ def dump(db, filename, **options): else: row_array = canmatrix.formats.xls_common.get_frame_info(db, frame) front_col = write_excel_line(worksheet, row, 0, row_array, frame_style) - if frame_style != sty_first_frame: - worksheet.set_row(row, None, None, {'level': 1}) +# if frame_style != sty_first_frame: +# worksheet.set_row(row, None, None, {'level': 1}) col = head_start col = write_ecu_matrix(ecu_list, sig, frame, worksheet, row, col, frame_style) @@ -318,96 +338,22 @@ def dump(db, filename, **options): # loop over signals ends here # loop over frames ends here - worksheet.autofilter(0, 0, row, len(head_top) + - len(head_tail) + len(db.ecus)) - worksheet.freeze_panes(1, 0) + worksheet.auto_filter.ref = worksheet.dimensions + worksheet.freeze_panes = worksheet['B2'] # save file - workbook.close() - - -def read_xlsx(file, **args): - # type: (typing.Any, **typing.Any) -> typing.Tuple[typing.Dict[typing.Any, str], typing.List[typing.Dict[str, str]]] - # from: Hooshmand zandi http://stackoverflow.com/a/16544219 - import zipfile - from xml.etree.ElementTree import iterparse - - sheet = args.get("sheet", 1) - is_header = args.get("header", False) - - rows = [] # type: typing.List[typing.Dict[str, str]] - row = {} - header = {} - z = zipfile.ZipFile(file) - - # Get shared strings - strings = [el.text for e, el - in iterparse(z.open('xl/sharedStrings.xml')) - if el.tag.endswith('}t') - ] # type: typing.List[str] - value = '' - - # Open specified worksheet - for e, el in iterparse(z.open('xl/worksheets/sheet%d.xml' % sheet)): - # get value or index to shared strings - if el.tag.endswith('}v'): # 84 - value = el.text - if el.tag.endswith( - '}c'): # 84 - # If value is a shared string, use value as an index - - if el.attrib.get('t') == 's': - value = strings[int(value)] - - # split the row/col information so that the row letter(s) can be separate - letter = el.attrib['r'] # type: str # AZ22 - while letter[-1].isdigit(): - letter = letter[:-1] - - # if it is the first row, then create a header hash for the names that COULD be used - if not rows: - header[letter] = value.strip() - else: - if value != '': - # if there is a header row, use the first row's names as the row hash index - if is_header is True and letter in header: - row[header[letter]] = value - else: - row[letter] = value - - value = '' - if el.tag.endswith('}row'): - rows.append(row) - row = {} - z.close() - return header, rows - - -def get_if_possible(row, value, default=None): - # type: (typing.Mapping[str, str], str, typing.Optional[str]) -> typing.Union[str, None] - if value in row: - return row[value].strip() - else: - return default + workbook.save(filename=filename) -def load(filename, **options): +def load(file, **options): # type: (typing.BinaryIO, **str) -> canmatrix.CanMatrix - # use xlrd excel reader if available, because its more robust - if options.get('xlsxLegacy', False) is True: - logger.error("xlsx: using legacy xlsx-reader - please get xlrd working for better results!") - else: - import canmatrix.formats.xls as xls_loader # we need alias, otherwise we hide the globally imported canmatrix - return xls_loader.load(filename, **options) + + all_ecu_names = [] # else use this hack to read xlsx motorola_bit_format = options.get("xlsMotorolaBitFormat", "msbreverse") - - sheet = read_xlsx(filename, sheet=1, header=True) + workbook = openpyxl.open(file) + sheet = workbook._sheets[0] db = canmatrix.CanMatrix() - all_letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - letter_index = list(all_letters) - letter_index += ["%s%s" % (a, b) for a in all_letters for b in all_letters] - # Defines not imported... db.add_frame_defines("GenMsgDelayTime", 'INT 0 65535') db.add_frame_defines("GenMsgCycleTimeActive", 'INT 0 65535') @@ -417,24 +363,20 @@ def load(filename, **options): db.add_signal_defines("GenSigSNA", 'STRING') ecu_start = ecu_end = 0 - if 'Byteorder' in list(sheet[0].values()): - for key in sheet[0]: - if sheet[0][key].strip() == 'Byteorder': - ecu_start = letter_index.index(key) + 1 - break + + column_heads = [sheet.cell(1,a).value for a in range(1, sheet.max_column)] + + if 'Byteorder' in column_heads: + ecu_start = column_heads.index('Byteorder') + 1 else: - for key in sheet[0]: - if sheet[0][key].strip() == 'Signal Not Available': - ecu_start = letter_index.index(key) + 1 + ecu_start = column_heads.index('Signal Not Available') + 1 - for key in sheet[0]: - if sheet[0][key].strip() == 'Value': - ecu_end = letter_index.index(key) + ecu_end = column_heads.index('Value') # ECUs: for x in range(ecu_start, ecu_end): - db.add_ecu(canmatrix.Ecu(sheet[0][letter_index[x]])) - + db.add_ecu(canmatrix.Ecu(column_heads[x])) + all_ecu_names.append(column_heads[x]) # initialize: frame_id = None signal_name = "" @@ -442,15 +384,22 @@ def load(filename, **options): new_frame = None # type: typing.Optional[canmatrix.Frame] new_signal = None # type: typing.Optional[canmatrix.Signal] - for row in sheet[1]: + def get_if_possible(my_row, my_value, default=None): + if my_value in column_heads and my_row[column_heads.index(my_value)].value is not None: + return my_row[column_heads.index(my_value)].value + else: + return default + + for row in sheet.rows: # ignore empty row - if 'ID' not in row: + if row[column_heads.index('ID')].value is None or row[column_heads.index('ID')].value == 'ID': continue - # new frame detected - if row['ID'] != frame_id: + + # new frame detected + if row[column_heads.index('ID')].value != frame_id: # new Frame - frame_id = row['ID'] - frame_name = row['Frame Name'] + frame_id = row[column_heads.index('ID')].value + frame_name = row[column_heads.index('Frame Name')].value cycle_time = get_if_possible(row, 'Cycle Time [ms]', '0') launch_type = get_if_possible(row, 'Launch Type') dlc = 8 @@ -458,8 +407,7 @@ def load(filename, **options): # launch_param = str(int(launch_param)) if frame_id.endswith("xh"): - new_frame = canmatrix.Frame(frame_name, arbitration_id=int(frame_id[:-2], 16), size=dlc) - new_frame.arbitration_id.extended = True + new_frame = canmatrix.Frame(frame_name, canmatrix.ArbitrationId(int(frame_id[:-2], 16), extended=True), size=dlc) else: new_frame = canmatrix.Frame(frame_name, arbitration_id=int(frame_id[:-1], 16), size=dlc) @@ -474,13 +422,13 @@ def load(filename, **options): new_frame.cycle_time = cycle_time # new signal detected - if 'Signal Name' in row and row['Signal Name'] != signal_name: + if get_if_possible(row, 'Signal Name') != signal_name: receiver = [] # type: typing.List[str] - start_byte = int(row["Signal Byte No."]) - start_bit = int(row['Signal Bit No.']) - signal_name = row['Signal Name'] + start_byte = int(get_if_possible(row, 'Signal Byte No.', "0")) + start_bit = int(get_if_possible(row, 'Signal Bit No.', "0")) + signal_name = get_if_possible(row, 'Signal Name') signal_comment = get_if_possible(row, 'Signal Function') - signal_length = int(row['Signal Length [Bit]']) + signal_length = int(get_if_possible(row, 'Signal Length [Bit]', 0)) # signal_default = get_if_possible(row, 'Signal Default') # signal_sna = get_if_possible(row, 'Signal Not Available') multiplex = None # type: typing.Union[str, int, None] @@ -503,8 +451,7 @@ def load(filename, **options): is_signed = False if signal_name != "-": - for x in range(ecu_start, ecu_end): - ecu_name = sheet[0][letter_index[x]].strip() + for ecu_name in all_ecu_names: ecu_sender_receiver = get_if_possible(row, ecu_name) if ecu_sender_receiver is not None: if 's' in ecu_sender_receiver: @@ -531,10 +478,13 @@ def load(filename, **options): bitNumbering=1, startLittle=True ) - new_frame.add_signal(new_signal) - new_signal.add_comment(signal_comment) + if signal_name is not None: + new_frame.add_signal(new_signal) + new_signal.add_comment(signal_comment) # function = get_if_possible(row, 'Function / Increment Unit') value = get_if_possible(row, 'Value') + if value is not None: + value = str(value) value_name = get_if_possible(row, 'Name / Phys. Range') if value_name == 0 or value_name is None: From cd442e5efa4185978e88f786c80cc1ce7ae1b687 Mon Sep 17 00:00:00 2001 From: Luis Valencia Date: Mon, 7 Aug 2023 17:54:44 -0400 Subject: [PATCH 03/61] Don't get I-SIGNAL-TO-I-PDU-MAPPING when PDU is None. (#722) --- src/canmatrix/formats/arxml.py | 82 ++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 29 deletions(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 2501d986..6864251b 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -1583,7 +1583,7 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header new_frame.add_attribute("FrameTriggeringName", ea.get_short_name(frame_triggering)) if pdu is None: - logger.error("pdu is None") + logger.error("Frame %r has no PDU", new_frame.name) else: new_frame.pdu_name = ea.get_element_name(pdu) logger.debug("PDU: " + new_frame.pdu_name) @@ -1625,35 +1625,30 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header store_frame_timings(new_frame, cyclic_timing, event_timing, minimum_delay, repeats, starting_time, time_offset, repeating_time, ea, time_period, float_factory) - if pdu is not None and "MULTIPLEXED-I-PDU" in pdu.tag: - get_frame_from_multiplexed_ipdu(pdu, new_frame, multiplex_translation, ea, float_factory) - elif pdu is not None and pdu.tag == ea.ns + "CONTAINER-I-PDU": - get_frame_from_container_ipdu(pdu, new_frame, ea, float_factory, headers_are_littleendian) - else: - pdu_sig_mapping = ea.selector(pdu, "//I-SIGNAL-TO-I-PDU-MAPPING") - if pdu_sig_mapping: - get_signals(pdu_sig_mapping, new_frame, ea, None, float_factory, signal_triggerings=isignaltriggerings_of_current_cluster) - # Seen some pdu_sig_mapping being [] and not None with some arxml 4.2 - else: # AR 4.2 - pdu_trigs = ea.follow_all_ref(frame_triggering, "PDU-TRIGGERINGS-REF") - if pdu_trigs is not None: - for pdu_trig in pdu_trigs: - trig_ref_cond = ea.get_child(pdu_trig, "PDU-TRIGGERING-REF-CONDITIONAL") - trigs = ea.follow_ref(trig_ref_cond, "PDU-TRIGGERING-REF") - ipdus = ea.follow_ref(trigs, "I-PDU-REF") - - signal_to_pdu_maps = ea.get_child(ipdus, "I-SIGNAL-TO-PDU-MAPPINGS") - if signal_to_pdu_maps is None: - signal_to_pdu_maps = ea.get_child(ipdus, "I-SIGNAL-TO-I-PDU-MAPPINGS") - - if signal_to_pdu_maps is None: - logger.debug("AR4.x PDU %s no SIGNAL-TO-PDU-MAPPINGS found - no signal extraction!", - ea.get_element_name(ipdus)) - # signal_to_pdu_map = get_children(signal_to_pdu_maps, "I-SIGNAL-TO-I-PDU-MAPPING", arDict, ns) - get_signals(signal_to_pdu_maps, new_frame, ea, None, - float_factory, signal_triggerings=isignaltriggerings_of_current_cluster) # todo BUG expects list, not item + if pdu is not None: + if "MULTIPLEXED-I-PDU" in pdu.tag: + get_frame_from_multiplexed_ipdu(pdu, new_frame, multiplex_translation, ea, float_factory) + elif pdu.tag == ea.ns + "CONTAINER-I-PDU": + get_frame_from_container_ipdu(pdu, new_frame, ea, float_factory, headers_are_littleendian) + else: + pdu_sig_mapping = ea.selector(pdu, "//I-SIGNAL-TO-I-PDU-MAPPING") + if pdu_sig_mapping: + get_signals( + pdu_sig_mapping, new_frame, ea, None, float_factory, signal_triggerings=isignaltriggerings_of_current_cluster + ) else: - logger.debug("Frame %s (assuming AR4.2) no PDU-TRIGGERINGS found", new_frame.name) + # Seen some pdu_sig_mapping being [] and not None with some arxml 4.2 + update_frame_with_pdu_triggerings( + new_frame, ea, frame_triggering, float_factory, + isignaltriggerings_of_current_cluster + ) + else: + # AR 4.2 + update_frame_with_pdu_triggerings( + new_frame, ea, frame_triggering, float_factory, + isignaltriggerings_of_current_cluster + ) + if new_frame.is_pdu_container and new_frame.cycle_time == 0: cycle_times = {pdu.cycle_time for pdu in new_frame.pdus} if len(cycle_times) > 1: @@ -1667,6 +1662,35 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header return copy.deepcopy(new_frame) +def update_frame_with_pdu_triggerings( + frame, ea, frame_triggering, float_factory, signal_triggerings=None +): + # type: (canmatrix.Frame, Earxml, _Element, typing.Callable, typing.Optional[typing.Sequence]) -> None + """Update frame with signals from PDU Triggerings.""" + signal_triggerings = signal_triggerings or [] + pdu_trigs = ea.follow_all_ref(frame_triggering, "PDU-TRIGGERINGS-REF") + if pdu_trigs is not None: + for pdu_trig in pdu_trigs: + trig_ref_cond = ea.get_child(pdu_trig, "PDU-TRIGGERING-REF-CONDITIONAL") + trigs = ea.follow_ref(trig_ref_cond, "PDU-TRIGGERING-REF") + ipdus = ea.follow_ref(trigs, "I-PDU-REF") + + signal_to_pdu_maps = ea.get_child(ipdus, "I-SIGNAL-TO-PDU-MAPPINGS") + if signal_to_pdu_maps is None: + signal_to_pdu_maps = ea.get_child(ipdus, "I-SIGNAL-TO-I-PDU-MAPPINGS") + + if signal_to_pdu_maps is None: + logger.debug( + "AR4.x PDU %s no SIGNAL-TO-PDU-MAPPINGS found - no signal extraction!", + ea.get_element_name(ipdus) + ) + + # signal_to_pdu_map = get_children(signal_to_pdu_maps, "I-SIGNAL-TO-I-PDU-MAPPING", arDict, ns) + get_signals(signal_to_pdu_maps, frame, ea, None, float_factory, signal_triggerings=signal_triggerings) # todo BUG expects list, not item + else: + logger.debug("Frame %s (assuming AR4.2) no PDU-TRIGGERINGS found", frame.name) + + def process_ecu(ecu_elem, ea): # type: (_Element, Earxml) -> canmatrix.Ecu connectors = ea.get_child(ecu_elem, "CONNECTORS") From ac1a2378f084f90f3ea9da4b3f21491f3ea05c3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Mon, 7 Aug 2023 23:55:12 +0200 Subject: [PATCH 04/61] add un/signed info from fibex files (#720) --- src/canmatrix/formats/fibex.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index e8158475..87435c38 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -200,10 +200,18 @@ def get_signals_for_pdu(fe, pdu, overall_startbit = 0): signal_name = fe.sn(signal) coding = fe.selector(signal, ">CODING-REF")[0] + is_signed = False + try: + basedatatype = fe.selector(coding, "/!CODED-TYPE")[0].attrib[fe.ans + "BASE-DATA-TYPE"] + if "UINT" in basedatatype: + is_signed = False + elif "INT" in basedatatype: + is_signed = True + except: + pass bit_length = int(fe.selector(coding, "/!BIT-LENGTH")[0].text) compu_methods = fe.selector(coding, "/!COMPU-METHOD") - sig = canmatrix.Signal(name=signal_name) - + sig = canmatrix.Signal(name=signal_name, is_signed=is_signed) for compu_method in compu_methods: category = fe.selector(compu_method, "/!CATEGORY") if len(category) > 0 and category[0].text == "LINEAR": From a5dfc9cc9374fa031c9f75797cf93ae8e24a47c4 Mon Sep 17 00:00:00 2001 From: Luis Valencia Date: Sun, 22 Oct 2023 14:51:49 -0400 Subject: [PATCH 05/61] Filter out None results in selector. (#728) --- src/canmatrix/formats/arxml.py | 2 +- src/canmatrix/tests/ARXMLSecuredPDUTest.arxml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 6864251b..29b95243 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -298,7 +298,7 @@ def selector(self, start_element, selector): filtered_results.append(tag) result_list = filtered_results - result_list = list(set(result_list)) + result_list = [result for result in set(result_list) if result is not None] last_found_token = found_token[1] + start_pos token = selector[start_pos + found_token[0]:start_pos + found_token[1]] diff --git a/src/canmatrix/tests/ARXMLSecuredPDUTest.arxml b/src/canmatrix/tests/ARXMLSecuredPDUTest.arxml index 8a00ed91..8f601cbb 100644 --- a/src/canmatrix/tests/ARXMLSecuredPDUTest.arxml +++ b/src/canmatrix/tests/ARXMLSecuredPDUTest.arxml @@ -7,7 +7,7 @@ CAN - + CAN @@ -62,7 +62,7 @@ /ISignal/Signal - + From c956871250ba06f753dd7477d3dde37932a89ed7 Mon Sep 17 00:00:00 2001 From: Luis Valencia Date: Sun, 22 Oct 2023 14:52:28 -0400 Subject: [PATCH 06/61] Ignore SecuredIPdus with no Payload. (#727) --- src/canmatrix/formats/arxml.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 29b95243..72173aca 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -1554,8 +1554,12 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header pdu = ea.follow_ref(frame_elem, "PDU-REF") # SIGNAL-I-PDU if pdu is not None and 'SECURED-I-PDU' in pdu.tag: - pdu = ea.selector(pdu, ">PAYLOAD-REF>I-PDU-REF")[0] - # logger.info("found secured pdu - no signal extraction possible: %s", get_element_name(pdu, ns)) + ipdu = ea.selector(pdu, ">PAYLOAD-REF>I-PDU-REF") + if not ipdu: + logger.error("SecuredIPdu %r is missing Payload", ea.get_short_name(pdu)) + return None + + pdu = ipdu[0] new_frame = canmatrix.Frame(ea.get_element_name(frame_elem), size=int(dlc_elem.text, 0)) comment = ea.get_element_desc(frame_elem) @@ -1800,7 +1804,17 @@ def decode_ethernet_helper(ea, float_factory): ipdu = ea.follow_ref(ipdu_triggering, "I-PDU-REF") if ipdu is not None and 'SECURED-I-PDU' in ipdu.tag: payload = ea.follow_ref(ipdu, "PAYLOAD-REF") + if payload is None: + logger.error( + "SecuredIPdu %r is missing Payload", ea.get_short_name(ipdu) + ) + continue ipdu = ea.follow_ref(payload, "I-PDU-REF") + if ipdu is None: + logger.error( + "PduTriggering %r is missing IPdu", ea.get_short_name(payload) + ) + continue ipdu_name = ea.get_element_name(ipdu) logger.info("ETH PDU " + ipdu_name + " found") From b4524e45157dc8374d9d99dab04a10f28201749f Mon Sep 17 00:00:00 2001 From: welbouri <121300065+welbouri@users.noreply.github.com> Date: Wed, 1 Nov 2023 14:58:18 +0100 Subject: [PATCH 07/61] Support default values for fibex signals (#731) (#732) Co-authored-by: Wassim EL BOURI --- src/canmatrix/formats/fibex.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index 87435c38..54f4f5ff 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -552,6 +552,7 @@ def dump(db, f, **options): signal_element = create_sub_element_fx(signals, "SIGNAL") signal_element.set("ID", "SIG_" + signal_id) create_short_name_desc(signal_element, signal.name, signal.comment) + create_sub_element_fx(signal_element, "DEFAULT-VALUE", str(signal.initial_value)) coding_ref = create_sub_element_fx(signal_element, "CODING-REF") coding_ref.set("ID-REF", "CODING_" + signal_id) From 542e9d9600bceb6bb782bb6ea101f8c2d5c57988 Mon Sep 17 00:00:00 2001 From: welbouri <121300065+welbouri@users.noreply.github.com> Date: Fri, 3 Nov 2023 14:52:08 +0100 Subject: [PATCH 08/61] Fix default values from physical to raw for fibex signals (#731) (#734) Co-authored-by: Wassim EL BOURI --- src/canmatrix/formats/fibex.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index 54f4f5ff..ddf9e7a3 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -552,7 +552,8 @@ def dump(db, f, **options): signal_element = create_sub_element_fx(signals, "SIGNAL") signal_element.set("ID", "SIG_" + signal_id) create_short_name_desc(signal_element, signal.name, signal.comment) - create_sub_element_fx(signal_element, "DEFAULT-VALUE", str(signal.initial_value)) + default_value = str(signal.phys2raw(signal.initial_value)) + create_sub_element_fx(signal_element, "DEFAULT-VALUE", default_value) coding_ref = create_sub_element_fx(signal_element, "CODING-REF") coding_ref.set("ID-REF", "CODING_" + signal_id) From 93570ce4b536264140b270fe89d515fcf5f3f107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dr=2E=20Lars=20V=C3=B6lker?= <28217814+LarsVoelker@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:17:13 +0100 Subject: [PATCH 09/61] Fibex mux support (#741) * FIBEX: Adding Multiplexer support for FIBEX dump This code adds support for writing Multiplexed PDUs to FIBEX. Thanks to welbouri for refactoring some of the code. * FIBEX: Make sure that frame names are unique FIBEX IDs are generated by frame names; therefore, it is essential for them to be unique. This patch renames, if needed. --- src/canmatrix/formats/fibex.py | 237 ++++++++++++++++++++++++++++----- 1 file changed, 204 insertions(+), 33 deletions(-) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index ddf9e7a3..d75c5cc0 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -78,6 +78,57 @@ def create_sub_element_ho(parent, element_name, element_text=None): return new +def create_signal_instance(parent, signal, signal_id): + # type: (_Element, Signal, str) -> _Element + signal_instance = create_sub_element_fx(parent, "SIGNAL-INSTANCE") + signal_instance.set("ID", "PDUINST_" + signal_id) + create_sub_element_fx(signal_instance, "BIT-POSITION", str(signal.start_bit)) + create_sub_element_fx(signal_instance, "IS-HIGH-LOW-BYTE-ORDER", "false" if signal.is_little_endian else "true") + return signal_instance + + +def create_signal_ref(parent, signal_ref_id): + # type: (_Element, str) -> _Element + signal_ref = create_sub_element_fx(parent, "SIGNAL-REF") + signal_ref.set("ID-REF", "SIG_" + signal_ref_id) + return signal_ref + + +def bits_to_byte_str(bits, name): + b = int(bits) + if b % 8 == 0: + return str(int(b/8)) + else: + ret = int(b/8) + 1 + #if name is not None: + # print(f"Warning: {name} not byte aligned! {b} bits -> {ret} bytes") + return str(ret) + + +def create_signal_id(frame, signal): + # type: (Frame, Signal) -> str + return f"{frame.name}.{signal.name}_{str(signal.mux_val)}" if signal.mux_val else f"{frame.name}.{signal.name}" + + +def get_multiplexing_parts_infos(signals, frame_name, start_pos=-1, end_pos=-1, seg_big_endian=None): + # type: (list[Signal], str, int, int, bool) -> (int, int, bool) + + for signal in signals: + if start_pos == -1 or signal.start_bit < start_pos: + start_pos = signal.start_bit + + tmp_end_pos = signal.start_bit + signal.size + if end_pos == -1 or tmp_end_pos > end_pos: + end_pos = tmp_end_pos + + if seg_big_endian is not None and seg_big_endian == signal.is_little_endian: + mux_info = f" with mux_val {signal.mux_val}" if signal.mux_val else "" + print(f"Warning: Inconsistent Byte Order for frame {frame_name} {signal.name}{mux_info}") + seg_big_endian = not signal.is_little_endian + + return start_pos, end_pos, seg_big_endian + + class Fe: def __init__(self, filename): self.tree = lxml.etree.parse(filename) @@ -345,6 +396,26 @@ def dump(db, f, **options): '{{{pre}}}schemaLocation'.format( pre=xsi)] = 'http://www.asam.net/xml/fbx ..\\..\\xml_schema\\fibex.xsd http://www.asam.net/xml/fbx/can ..\\..\\xml_schema\\fibex4can.xsd' + # + # Make sure that we can even write to FIBEX + # + + # make frame names unique by adding suffix, if needed + frame_names = dict() + for frame in db.frames: + if frame.name in frame_names: + # conflict resolution + tmp = 2 + while f"{frame.name}_{str(tmp)}" in frame_names: + tmp += 1 + + new_name = f"{frame.name}_{str(tmp)}" + print(f"Warning: Changing frame name due to conflict: {frame.name} -> {new_name}") + frame.name = new_name + + frame_names[frame.name] = frame + + # # PROJECT # @@ -445,7 +516,6 @@ def dump(db, f, **options): included_pdu.set('ID', 'input_included_pdu_' + frame.name) pdu_triggering_ref = create_sub_element_fx(included_pdu, "PDU-TRIGGERING-REF") pdu_triggering_ref.set("ID-REF", "PDU_" + frame.name) - outputs = create_sub_element_fx(connector, "OUTPUTS") for frame in db.frames: @@ -459,9 +529,8 @@ def dump(db, f, **options): included_pdu.set('ID', 'output_included_pdu_' + frame.name) pdu_triggering_ref = create_sub_element_fx(included_pdu, "PDU-TRIGGERING-REF") pdu_triggering_ref.set("ID-REF", "PDU_" + frame.name) - - - # ignore CONTROLERS/CONTROLER + + # ignore CONTROLLERS/CONTROLLER # # PDUS @@ -473,25 +542,129 @@ def dump(db, f, **options): create_short_name_desc(pdu, "PDU_" + frame.name, frame.comment) create_sub_element_fx(pdu, "BYTE-LENGTH", str(frame.size)) # DLC create_sub_element_fx(pdu, "PDU-TYPE", "APPLICATION") - signal_instances = create_sub_element_fx(pdu, "SIGNAL-INSTANCES") - for signal in frame.signals: - signal_id = frame.name + "." + signal.name - signal_instance = create_sub_element_fx( - signal_instances, "SIGNAL-INSTANCE") - signal_instance.set("ID", "PDUINST_" + signal_id) - # startBit: TODO - find out correct BYTEORDER ... - create_sub_element_fx(signal_instance, "BIT-POSITION", - str(signal.start_bit)) - if signal.is_little_endian: - create_sub_element_fx( - signal_instance, - "IS-HIGH-LOW-BYTE-ORDER", - "false") # true:big endian; false:little endian - else: - create_sub_element_fx( - signal_instance, "IS-HIGH-LOW-BYTE-ORDER", "true") - signal_ref = create_sub_element_fx(signal_instance, "SIGNAL-REF") - signal_ref.set("ID-REF", "SIG_" + signal_id) + + if frame.is_multiplexed: + mux = create_sub_element_fx(pdu, "MULTIPLEXER") + + signals_static = [] + signals_dynamic = {} + signals_switch = [] + + for signal in frame.signals: + if signal.is_multiplexer: + signals_switch.append(signal) + elif signal.multiplex is not None or signal.mux_val is not None: + if signal.multiplex != signal.mux_val: + print(f"Warning: Signal {signal.name} mux_val {signal.mux_val} != multiplex {signal.multiplex}") + sigs = signals_dynamic.setdefault(signal.mux_val, []) + sigs.append(signal) + else: + signals_static.append(signal) + + if len(signals_switch) != 1 or len(signals_dynamic) == 0: + print(f"Warning: Frame {frame.name} has an invalid multiplexer or dyn Part! " + f"Switch Signals: {len(signals_switch)} " + f"Dyn Signals: {len(signals_dynamic)} " + f"Static Signals: {len(signals_static)}") + + # SWITCH + mux_switch = create_sub_element_fx(mux, "SWITCH") + mux_switch.set("ID", "PDU_" + frame.name + "_SWITCH") + create_sub_element_ho(mux_switch, "SHORT-NAME", signals_switch[0].name) + create_sub_element_fx(mux_switch, "BIT-POSITION", str(signals_switch[0].start_bit)) + create_sub_element_fx(mux_switch, "IS-HIGH-LOW-BYTE-ORDER", + "false" if signals_switch[0].is_little_endian else "true") + create_sub_element_ho(mux_switch, "BIT-LENGTH", str(signals_switch[0].size)) + + # DYNAMIC PART + start_pos = -1 + end_pos = -1 + seg_be = None + + for sigs in signals_dynamic.values(): + start_pos, end_pos, seg_be = get_multiplexing_parts_infos(sigs, + frame.name, + start_pos=start_pos, + end_pos=end_pos, + seg_big_endian=seg_be) + + if seg_be is None: + seg_be = False + + if start_pos >= 0: + mux_dynpart = create_sub_element_fx(mux, "DYNAMIC-PART") + mux_dynpart.set("ID", "PDU_" + frame.name + "_DYN_PART") + create_sub_element_ho(mux_dynpart, "SHORT-NAME", signal.name) + + seg_positions = create_sub_element_fx(mux_dynpart, "SEGMENT-POSITIONS") + seg_position = create_sub_element_fx(seg_positions, "SEGMENT-POSITION") + create_sub_element_fx(seg_position, "BIT-POSITION", str(start_pos)) + create_sub_element_fx(seg_position, "IS-HIGH-LOW-BYTE-ORDER", "true" if seg_be else "false") + create_sub_element_ho(seg_position, "BIT-LENGTH", str(end_pos - start_pos)) + + sw_pdu_instances = create_sub_element_fx(mux_dynpart, "SWITCHED-PDU-INSTANCES") + + for mux_key in sorted(signals_dynamic.keys()): + # create PDU for these signals + mux_key_pdu = create_sub_element_fx(pdus, "PDU") + mux_key_pdu_id = f"PDU_{frame.name}_DYNPART_{str(mux_key)}" + mux_key_pdu.set("ID", mux_key_pdu_id) + create_short_name_desc(mux_key_pdu, mux_key_pdu_id, "") + create_sub_element_fx(mux_key_pdu, "BYTE-LENGTH", + bits_to_byte_str(end_pos - start_pos, mux_key_pdu_id)) + create_sub_element_fx(mux_key_pdu, "PDU-TYPE", "APPLICATION") + + signal_instances = create_sub_element_fx(mux_key_pdu, "SIGNAL-INSTANCES") + for signal in signals_dynamic[mux_key]: + signal_id = create_signal_id(frame, signal) + signal_instance = create_signal_instance(signal_instances, signal, signal_id) + create_signal_ref(signal_instance, signal_id) + + # create SWITCHED-PDU-INSTANCE that refs mux_key_pdu_id + switched_pdu_inst = create_sub_element_fx(sw_pdu_instances, "SWITCHED-PDU-INSTANCE") + switched_pdu_inst.set("ID", mux_key_pdu_id + "_SWITCHED_PDU_INSTANCE") + pdu_ref = create_sub_element_fx(switched_pdu_inst, "PDU-REF") + pdu_ref.set("ID-REF", mux_key_pdu_id) + create_sub_element_fx(switched_pdu_inst, "SWITCH-CODE", str(mux_key)) + + # STATIC PART + start_pos, end_pos, seg_be = get_multiplexing_parts_infos(signals_static, frame.name) + + if start_pos != -1 and end_pos != -1: + static_part = create_sub_element_fx(mux, "STATIC-PART") + static_part.set("ID", "PDU_" + frame.name + "_STATIC_PART") + seg_positions = create_sub_element_fx(static_part, "SEGMENT-POSITIONS") + seg_position = create_sub_element_fx(seg_positions, "SEGMENT-POSITION") + create_sub_element_fx(seg_position, "BIT-POSITION", str(start_pos)) + create_sub_element_fx(seg_position, "IS-HIGH-LOW-BYTE-ORDER", "true" if seg_be else "false") + create_sub_element_ho(seg_position, "BIT-LENGTH", str(end_pos - start_pos)) + + # create static PDU + static_pdu = create_sub_element_fx(pdus, "PDU") + static_pdu_key = f"PDU_{frame.name}_STATIC_PART_PDU" + static_pdu.set("ID", static_pdu_key) + create_short_name_desc(static_pdu, static_pdu_key, "") + create_sub_element_fx(static_pdu, "BYTE-LENGTH", bits_to_byte_str(end_pos - start_pos, frame.name)) + create_sub_element_fx(static_pdu, "PDU-TYPE", "APPLICATION") + signal_instances = create_sub_element_fx(static_pdu, "SIGNAL-INSTANCES") + for signal in signals_static: + signal_id = f"{frame.name}.{signal.name}_STATIC_PART" + signal_instance = create_signal_instance(signal_instances, signal, signal_id) + create_signal_ref(signal_instance, signal_id) + + # create STATIC-PDU-INSTANCE that refs static_pdu_key + static_pdu_inst = create_sub_element_fx(static_part, "STATIC-PDU-INSTANCE") + static_pdu_inst.set("ID", static_pdu_key + "_SWITCHED-PDU-INSTANCE") + pdu_ref = create_sub_element_fx(static_pdu_inst, "PDU-REF") + pdu_ref.set("ID-REF", static_pdu_key) + + else: + # PDU without Multiplexing + signal_instances = create_sub_element_fx(pdu, "SIGNAL-INSTANCES") + for signal in frame.signals: + signal_id = create_signal_id(frame, signal) + signal_instance = create_signal_instance(signal_instances, signal, signal_id) + create_signal_ref(signal_instance, signal_id) # FRAMES # @@ -521,26 +694,24 @@ def dump(db, f, **options): input_ports = create_sub_element_fx(function, "INPUT-PORTS") for frame in db.frames: for signal in frame.signals: - signal_id = frame.name + "." + signal.name + signal_id = create_signal_id(frame, signal) if bu.name in signal.receivers: input_port = create_sub_element_fx(input_ports, "INPUT-PORT") input_port.set("ID", "INP_" + signal_id) desc = lxml.etree.SubElement(input_port, ns_ho + "DESC") desc.text = signal.comment - signal_ref = create_sub_element_fx(input_port, "SIGNAL-REF") - signal_ref.set("ID-REF", "SIG_" + signal_id) + create_signal_ref(input_port, signal_id) output_ports = create_sub_element_fx(function, "OUTPUT-PORTS") for frame in db.frames: if bu.name in frame.transmitters: for signal in frame.signals: - signal_id = frame.name + "." + signal.name + signal_id = create_signal_id(frame, signal) output_port = create_sub_element_fx(output_ports, "OUTPUT-PORT") output_port.set("ID", "OUTP_" + signal_id) desc = lxml.etree.SubElement(output_port, ns_ho + "DESC") desc.text = "signalcomment" - signal_ref = create_sub_element_fx(output_port, "SIGNAL-REF") - signal_ref.set("ID-REF", "SIG_" + frame.name + "_" + signal_id) + create_signal_ref(output_port, frame.name + "_" + signal_id) # # SIGNALS @@ -548,11 +719,11 @@ def dump(db, f, **options): signals = create_sub_element_fx(elements, "SIGNALS") for frame in db.frames: for signal in frame.signals: - signal_id = frame.name + "." + signal.name + signal_id = create_signal_id(frame, signal) signal_element = create_sub_element_fx(signals, "SIGNAL") signal_element.set("ID", "SIG_" + signal_id) create_short_name_desc(signal_element, signal.name, signal.comment) - default_value = str(signal.phys2raw(signal.initial_value)) + default_value = str(signal.phys2raw(signal.initial_value)) create_sub_element_fx(signal_element, "DEFAULT-VALUE", default_value) coding_ref = create_sub_element_fx(signal_element, "CODING-REF") coding_ref.set("ID-REF", "CODING_" + signal_id) @@ -564,7 +735,7 @@ def dump(db, f, **options): unit_spec = create_sub_element_ho(proc_info, "UNIT-SPEC") for frame in db.frames: for signal in frame.signals: - signal_id = frame.name + "." + signal.name + signal_id = create_signal_id(frame, signal) unit = create_sub_element_ho(unit_spec, "UNIT") unit.set("ID", "UNIT_" + signal_id) create_sub_element_ho(unit, "SHORT-NAME", signal.name) @@ -573,7 +744,7 @@ def dump(db, f, **options): codings = create_sub_element_fx(proc_info, "CODINGS") for frame in db.frames: for signal in frame.signals: - signal_id = frame.name + "." + signal.name + signal_id = create_signal_id(frame, signal) coding = create_sub_element_fx(codings, "CODING") coding.set("ID", "CODING_" + signal_id) create_short_name_desc( From e298c95e09b1215a2164d5db09f37a265cf0d1d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Wed, 13 Dec 2023 09:59:34 +0100 Subject: [PATCH 10/61] #742 : fix config_parser (#745) --- versioneer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/versioneer.py b/versioneer.py index 9da01c2b..a7638bea 100644 --- a/versioneer.py +++ b/versioneer.py @@ -336,9 +336,9 @@ def get_config_from_root(root): # configparser.NoOptionError (if it lacks "VCS="). See the docstring at # the top of versioneer.py for instructions on writing your setup.cfg . setup_cfg = os.path.join(root, "setup.cfg") - parser = configparser.SafeConfigParser() + parser = configparser.ConfigParser() with open(setup_cfg, "r") as f: - parser.readfp(f) + parser.read_file(f) VCS = parser.get("versioneer", "VCS") # mandatory def get(parser, name): From bfa3da0b57f826ef310fe96fb8e7af77804494c8 Mon Sep 17 00:00:00 2001 From: welbouri <121300065+welbouri@users.noreply.github.com> Date: Wed, 13 Dec 2023 10:00:08 +0100 Subject: [PATCH 11/61] add missing shortname for static_part (#747) Co-authored-by: Wassim EL BOURI --- src/canmatrix/formats/fibex.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index d75c5cc0..346afb75 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -633,6 +633,7 @@ def dump(db, f, **options): if start_pos != -1 and end_pos != -1: static_part = create_sub_element_fx(mux, "STATIC-PART") static_part.set("ID", "PDU_" + frame.name + "_STATIC_PART") + create_sub_element_ho(static_part, "SHORT-NAME", signal.name) seg_positions = create_sub_element_fx(static_part, "SEGMENT-POSITIONS") seg_position = create_sub_element_fx(seg_positions, "SEGMENT-POSITION") create_sub_element_fx(seg_position, "BIT-POSITION", str(start_pos)) From b25ddd09eb24a530b720b8f68b446e7525273e40 Mon Sep 17 00:00:00 2001 From: welbouri <121300065+welbouri@users.noreply.github.com> Date: Fri, 15 Dec 2023 13:12:34 +0100 Subject: [PATCH 12/61] fix wrong signal id for static signals (#749) Co-authored-by: Wassim EL BOURI --- src/canmatrix/formats/fibex.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index 346afb75..20261795 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -649,7 +649,7 @@ def dump(db, f, **options): create_sub_element_fx(static_pdu, "PDU-TYPE", "APPLICATION") signal_instances = create_sub_element_fx(static_pdu, "SIGNAL-INSTANCES") for signal in signals_static: - signal_id = f"{frame.name}.{signal.name}_STATIC_PART" + signal_id = create_signal_id(frame, signal) signal_instance = create_signal_instance(signal_instances, signal, signal_id) create_signal_ref(signal_instance, signal_id) From 29e682979740a1f855b9043bde891dafc24b76b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Fri, 15 Dec 2023 13:13:15 +0100 Subject: [PATCH 13/61] possibly fix issue #736 (#743) --- src/canmatrix/formats/arxml.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 72173aca..1b1cdbce 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -1330,8 +1330,8 @@ def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset if base_type is not None: temp = ea.get_child(base_type, "SHORT-NAME") if temp is not None and "boolean" == temp.text: - new_signal.add_values(1, "TRUE") - new_signal.add_values(0, "FALSE") + new_signal.add_values(1, "true") + new_signal.add_values(0, "false") if initvalue is not None and initvalue.text is not None: initvalue.text = canmatrix.utils.guess_value(initvalue.text) @@ -1606,7 +1606,7 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header if (frame_rx_behaviour_elem is not None and frame_rx_behaviour_elem.text == 'CAN-FD') or \ (frame_tx_behaviour_elem is not None and frame_tx_behaviour_elem.text == 'CAN-FD') or \ - (is_fd_elem is not None and is_fd_elem.text == 'TRUE'): + (is_fd_elem is not None and is_fd_elem.text.lower() == 'true'): new_frame.is_fd = True else: new_frame.is_fd = False From d9902ace093fc1bb31af02599243847b529b0b44 Mon Sep 17 00:00:00 2001 From: Mattias Josefsson Date: Fri, 15 Dec 2023 13:13:35 +0100 Subject: [PATCH 14/61] Log unsupported formats as debug instead of warning. (#748) --- src/canmatrix/formats/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/canmatrix/formats/__init__.py b/src/canmatrix/formats/__init__.py index 097c164c..6923d3cc 100644 --- a/src/canmatrix/formats/__init__.py +++ b/src/canmatrix/formats/__init__.py @@ -25,7 +25,7 @@ importlib.import_module("canmatrix.formats." + module) loadedFormats.append(module) except ImportError: - logger.warning("%s is not supported", module) + logger.debug("%s is not supported", module) for loadedModule in loadedFormats: supportedFormats[loadedModule] = [] From 73b59f11246a74f52021720afc1c78fba07bdab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Mon, 18 Dec 2023 08:41:55 +0100 Subject: [PATCH 15/61] basic EDS import support #488 (#719) * basic EDS import support #488 * EDS add canopen requirement to setup.py #488 --- setup.py | 1 + src/canmatrix/cli/convert.py | 3 + src/canmatrix/formats/__init__.py | 2 +- src/canmatrix/formats/eds.py | 161 ++++++++++++++++++++++++++++++ 4 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 src/canmatrix/formats/eds.py diff --git a/setup.py b/setup.py index 19ffa42d..56d96934 100644 --- a/setup.py +++ b/setup.py @@ -117,6 +117,7 @@ "xls": ["xlrd==1.2.0", "xlwt"], "xlsx": ["openpyxl"], "yaml": ["pyyaml"], + "eds": ["canopen"] }, packages = find_packages("src"), diff --git a/src/canmatrix/cli/convert.py b/src/canmatrix/cli/convert.py index e8caa851..f1eff066 100644 --- a/src/canmatrix/cli/convert.py +++ b/src/canmatrix/cli/convert.py @@ -126,6 +126,9 @@ def get_formats(): @click.option('--jsonNativeTypes/--no-jsonNativeTypes', 'jsonNativeTypes', default=False, help="Uses native json representation for decimals instead of string.") #sym switches @click.option('--symExportEncoding', 'symExportEncoding', default="iso-8859-1", help="Export charset of sym format, maybe utf-8\ndefault iso-8859-1") +#eds switches +@click.option('--edsImportEncoding', 'edsImportEncoding', default="iso-8859-1", help="Import charset of EDS format\ndefault iso-8859-1") +@click.option('--edsNode', 'eds_node_id', default=1, help="Node-Id for EDS format\ndefault 1") # in and out file @click.argument('infile', required=True) @click.argument('outfile', required=True) diff --git a/src/canmatrix/formats/__init__.py b/src/canmatrix/formats/__init__.py index 6923d3cc..d3d3b979 100644 --- a/src/canmatrix/formats/__init__.py +++ b/src/canmatrix/formats/__init__.py @@ -14,7 +14,7 @@ logger = logging.getLogger(__name__) moduleList = ["arxml", "csv", "dbc", "dbf", "json", "ldf", - "kcd", "fibex", "sym", "xls", "xlsx", "yaml", "scapy", "wireshark", "odx"] + "kcd", "fibex", "sym", "xls", "xlsx", "yaml", "scapy", "wireshark", "odx", "eds"] loadedFormats = [] supportedFormats = {} # type: typing.MutableMapping[str, typing.MutableSequence[str]] diff --git a/src/canmatrix/formats/eds.py b/src/canmatrix/formats/eds.py new file mode 100644 index 00000000..7c5c7e6f --- /dev/null +++ b/src/canmatrix/formats/eds.py @@ -0,0 +1,161 @@ +import logging +import canmatrix +import typing +import canopen.objectdictionary.eds +import canopen.objectdictionary.datatypes +import codecs + + +logger = logging.getLogger(__name__) + + +datatype_mapping = {0x1: ["boolean", 1], + 0x2: ["INTEGER8", 0x2], + 0x3 : ["INTEGER16", 16], + 0x4 : ["INTEGER32", 32], + 0x5: ["UNSIGNED8" , 8], + 0x6: ["UNSIGNED16" , 16], + 0x7: ["UNSIGNED32" , 32], + 0x8: ["REAL32" , 32], + 0x9: ["VISIBLE_STRING", 0], + 0xA: ["OCTET_STRING" , 0], + 0xB: ["UNICODE_STRING" , 0], + 0xF: ["DOMAIN" , 0], + 0x11: ["REAL64" , 64], + 0x15: ["INTEGER64" , 64], + 0x1B: ["UNSIGNED64", 64], + } + +cmd_values = { 1: 'switch to state "Operational"', + 2 : 'switch to state "Stop"', + 0x80 : 'switch to state "Pre-Operational"', + 0x81 : 'Reset Node', + 0x82: 'Reset Communication'} + + +def get_signals(parent_object, signal_receiver): + signals = [] + position = 0 + for sub in range(1, len(parent_object)): + name = parent_object[sub].name + size = datatype_mapping[parent_object[sub].data_type][1] + unsigned = "UNSIGNED" in datatype_mapping[parent_object[sub].data_type][0] + signal = canmatrix.Signal(name = name, receivers=[signal_receiver], size=size, start_bit = position, is_signed = not unsigned) + position += size + signals.append(signal) + return signals + + +def load(f, **options): # type: (typing.IO, **typing.Any) -> canmatrix.CanMatrix + eds_import_encoding = options.get("edsImportEncoding", 'iso-8859-1') + node_id = options.get("eds_node_id", 1) + fp = codecs.getreader(eds_import_encoding)(f) + od = canopen.objectdictionary.eds.import_eds(fp, node_id) + db = canmatrix.CanMatrix() + + node_name = od.device_information.product_name + plc_name = "PLC" + + nm_out = canmatrix.canmatrix.Frame(name="NMT_Out_Request", size=2, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0), transmitters=[plc_name]) + sig_cmd = canmatrix.canmatrix.Signal(name="nmt_CMD", size=8, start_bit = 0, receivers=[node_name]) + for val, val_name in cmd_values.items(): + sig_cmd.add_values(val, val_name) + nm_out.add_signal(sig_cmd) + nm_out.add_signal(canmatrix.canmatrix.Signal(name="Node_ID", size=8, start_bit = 8, receivers=[node_name])) + db.add_frame(nm_out) + + nm_responde = canmatrix.canmatrix.Frame(name="NMT_Response_Frame_In", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x700+node_id), transmitters=[node_name]) + response_sig1 = canmatrix.canmatrix.Signal(name="NMT_Response_1", size=32, start_bit = 0, receivers=[plc_name]) + nm_responde.add_signal(response_sig1) + response_sig2 = canmatrix.canmatrix.Signal(name="NMT_Response_1", size=32, start_bit = 32, receivers=[plc_name]) + nm_responde.add_signal(response_sig2) + db.add_frame(nm_responde) + + sync = canmatrix.canmatrix.Frame(name="SYNC", size=0, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x80), transmitters=[plc_name]) + db.add_frame(sync) + + emcy = canmatrix.canmatrix.Frame(name="EMCY", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x80+node_id), transmitters=[node_name]) + emcy.add_signal(canmatrix.canmatrix.Signal(name="EMCY_Error_Code", size=16, start_bit=0, receivers=[plc_name])) + emcy.add_signal(canmatrix.canmatrix.Signal(name="E_Reg", size=8, start_bit=16, receivers=[plc_name])) + emcy.add_signal(canmatrix.canmatrix.Signal(name="E_Number", size=8, start_bit=24, receivers=[plc_name])) + db.add_frame(emcy) + + sdo_down = canmatrix.canmatrix.Frame(name="SDO_download", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x600+node_id), transmitters=[node_name]) + sig_cmd = canmatrix.canmatrix.Signal(name="sdo_down_CMD", size=8, start_bit=0, receivers=[plc_name]) + sig_cmd.is_multiplexer = True + sig_cmd.multiplex = "Multiplexor" + sdo_down.add_signal(sig_cmd) + sdo_down.add_signal(canmatrix.canmatrix.Signal(name="sdo_down_IDX", size=16, start_bit=8, receivers=[plc_name])) + sdo_down.add_signal(canmatrix.canmatrix.Signal(name="sdo_down_SUBIDX", size=8, start_bit=24, receivers=[plc_name])) + sdo_down.add_signal(canmatrix.canmatrix.Signal(name="data8", size=8, start_bit=32, receivers=[plc_name], multiplex=0x2f)) + sig_cmd.add_values(0x2f, "8_bytes") + sdo_down.add_signal(canmatrix.canmatrix.Signal(name="data16", size=16, start_bit=32, receivers=[plc_name], multiplex=0x2b)) + sig_cmd.add_values(0x2b, "16_bytes") + sdo_down.add_signal(canmatrix.canmatrix.Signal(name="data24", size=24, start_bit=32, receivers=[plc_name], multiplex=0x27)) + sig_cmd.add_values(0x27, "3_bytes") + sdo_down.add_signal(canmatrix.canmatrix.Signal(name="data32", size=32, start_bit=32, receivers=[plc_name], multiplex=0x23)) + sig_cmd.add_values(0x23, "4_bytes") + sig_cmd.add_values(0x40, "upload_request") + db.add_frame(sdo_down) + + sdo_up = canmatrix.canmatrix.Frame(name="SDO_upload", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x580+node_id), transmitters=[plc_name]) + sig_cmd = canmatrix.canmatrix.Signal(name="sdo_state", size=8, start_bit=0, receivers=[node_name]) + sig_cmd.is_multiplexer = True + sig_cmd.multiplex = "Multiplexor" + sdo_up.add_signal(sig_cmd) + sdo_up.add_signal(canmatrix.canmatrix.Signal(name="sdo_uo_IDX", size=16, start_bit=8, receivers=[node_name])) + sdo_up.add_signal(canmatrix.canmatrix.Signal(name="sdo_up_SUBIDX", size=8, start_bit=24, receivers=[node_name])) + sdo_up.add_signal(canmatrix.canmatrix.Signal(name="error_code", size=32, start_bit=32, receivers=[node_name], multiplex=0x80)) + sig_cmd.add_values(0x80, "upload_error") + + sdo_up.add_signal(canmatrix.canmatrix.Signal(name="data8", size=8, start_bit=32, receivers=[plc_name], multiplex=0x4f)) + sig_cmd.add_values(0x2f, "8_bytes") + sdo_up.add_signal(canmatrix.canmatrix.Signal(name="data16", size=16, start_bit=32, receivers=[plc_name], multiplex=0x4b)) + sig_cmd.add_values(0x2b, "16_bytes") + sdo_up.add_signal(canmatrix.canmatrix.Signal(name="data24", size=24, start_bit=32, receivers=[plc_name], multiplex=0x47)) + sig_cmd.add_values(0x27, "3_bytes") + sdo_down.add_signal(canmatrix.canmatrix.Signal(name="data32", size=32, start_bit=32, receivers=[plc_name], multiplex=0x43)) + sig_cmd.add_values(0x23, "4_bytes") + db.add_frame(sdo_up) + + + # RX Can-Ids ... + for index in range(0x1400, 0x1408): + if index in od: + # store canid in object... + od[index+0x200].canid = od[index][1].default + + ##RX PDOs + for index in range(0x1600, 0x1608): + if index in od: + pdo_name = od[index].name.replace(" ", "_") + frame = canmatrix.canmatrix.Frame(name=pdo_name, transmitters=[plc_name]) + db.add_frame(frame) + frame_id = od[index].canid + frame.arbitration_id = canmatrix.ArbitrationId(id=frame_id) + frame.size = 8 + signals = get_signals(od[index], node_name) + for sig in signals: + frame.add_signal(sig) + + # RT Can-Ids ... + for index in range(0x1800, 0x1808): + if index in od: + # store canid in object... + od[index+0x200].canid = od[index][1].default - 0x40000000 + + #TX + for index in range(0x1A00, 0x1A08): + if index in od: + frame = canmatrix.canmatrix.Frame(name=pdo_name, transmitters=[node_name]) + db.add_frame(frame) + pdo_name = od[index].name.replace(" ", "_") + frame_id = od[index].canid + frame.arbitration_id = canmatrix.ArbitrationId(id=frame_id) + frame.size = 8 + signals = get_signals(od[index], plc_name) + for sig in signals: + frame.add_signal(sig) + + db.update_ecu_list() + return db From 0804d9b0eb363d91333ba8d10e01d475772b9375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Mon, 18 Dec 2023 08:42:18 +0100 Subject: [PATCH 16/61] #742 drop future (#744) --- mypy.ini | 2 +- setup.py | 1 - src/canmatrix/canmatrix.py | 3 +-- src/canmatrix/formats/sym.py | 6 +----- src/canmatrix/formats/xls.py | 3 +-- src/canmatrix/formats/yaml.py | 5 +---- 6 files changed, 5 insertions(+), 15 deletions(-) diff --git a/mypy.ini b/mypy.ini index d65d4e93..fab3a872 100644 --- a/mypy.ini +++ b/mypy.ini @@ -34,5 +34,5 @@ ignore_errors = True ignore_errors = True # other settings: -[mypy-xlsxwriter,past,past.builtins,pathlib2] +[mypy-xlsxwriter,pathlib2] ignore_missing_imports = True diff --git a/setup.py b/setup.py index 56d96934..b8d1a3f4 100644 --- a/setup.py +++ b/setup.py @@ -95,7 +95,6 @@ "attrs>=19.2.0", "click", "enum34; python_version < '3.4'", - "future", "importlib-metadata; python_version < '3.8'", "six", "typing; python_version < '3.5'", diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index ac80a9f4..98d5f2aa 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -40,7 +40,6 @@ from builtins import * import attr -from past.builtins import basestring from six.moves import zip_longest import canmatrix.copy @@ -432,7 +431,7 @@ def phys2raw(self, value=None): if not (self.min <= value <= self.max): value = self.min - if isinstance(value, basestring): + if isinstance(value, str): for value_key, value_string in self.values.items(): if value_string == value: value = value_key diff --git a/src/canmatrix/formats/sym.py b/src/canmatrix/formats/sym.py index e7b669f6..60baa48d 100644 --- a/src/canmatrix/formats/sym.py +++ b/src/canmatrix/formats/sym.py @@ -100,11 +100,7 @@ def format_float(f): # type: (typing.Any) -> str def create_signal(db, signal): # type: (canmatrix.CanMatrix, canmatrix.Signal) -> str output = "" - if sys.version_info > (3, 0): - quote_name = not signal.name.isidentifier() - else: - from future.utils import isidentifier - quote_name = not isidentifier(signal.name) + quote_name = not signal.name.isidentifier() if quote_name: output += 'Var="%s" ' % signal.name else: diff --git a/src/canmatrix/formats/xls.py b/src/canmatrix/formats/xls.py index 011fbe00..e9a7612f 100644 --- a/src/canmatrix/formats/xls.py +++ b/src/canmatrix/formats/xls.py @@ -30,7 +30,6 @@ import typing from builtins import * -import past.builtins import xlrd import xlwt @@ -540,7 +539,7 @@ def load(file, **options): unit = "" factor = sh.cell(row_num, index['function']).value - if isinstance(factor, past.builtins.basestring): + if isinstance(factor, str): factor = factor.strip() if " " in factor and factor[0].isdigit(): (factor, unit) = factor.strip().split(" ", 1) diff --git a/src/canmatrix/formats/yaml.py b/src/canmatrix/formats/yaml.py index 972c7f6a..0cb656b2 100644 --- a/src/canmatrix/formats/yaml.py +++ b/src/canmatrix/formats/yaml.py @@ -30,7 +30,6 @@ from builtins import * import yaml -from past.builtins import long, unicode import canmatrix @@ -43,8 +42,6 @@ representers = False try: yaml.add_representer(int, SafeRepresenter.represent_int) - yaml.add_representer(long, SafeRepresenter.represent_long) - yaml.add_representer(unicode, SafeRepresenter.represent_unicode) yaml.add_representer(str, SafeRepresenter.represent_unicode) yaml.add_representer(list, SafeRepresenter.represent_list) representers = True @@ -67,7 +64,7 @@ def dump(db, f, **options): # type: (canmatrix.CanMatrix, typing.IO, **typing.A # f = open(filename, "w") if representers: - f.write(unicode(yaml.dump(new_db))) + f.write(yaml.dump(new_db)) else: f.write(yaml.dump(new_db).encode('utf8')) From b98786e77433879aac2be4aaa006e57154069fcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Mon, 18 Dec 2023 08:42:33 +0100 Subject: [PATCH 17/61] replace \w with \s in all regex (#746) --- src/canmatrix/formats/dbc.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/canmatrix/formats/dbc.py b/src/canmatrix/formats/dbc.py index 3aa1c157..6f67fd3b 100644 --- a/src/canmatrix/formats/dbc.py +++ b/src/canmatrix/formats/dbc.py @@ -558,7 +558,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None if decoded.strip().endswith(r'"'): decoded += r" Vector__XXX" original_line += b" Vector__XXX" - pattern = r"^SG_ +(\w+) *: *(\d+)\|(\d+)@(\d+)([\+|\-]) *\(([0-9.+\-eE]+), *([0-9.+\-eE]+)\) *\[([0-9.+\-eE]+)\|([0-9.+\-eE]+)\] +\"(.*)\" +(.*)" + pattern = r"^SG_ +(\S+) *: *(\d+)\|(\d+)@(\d+)([\+|\-]) *\(([0-9.+\-eE]+), *([0-9.+\-eE]+)\) *\[([0-9.+\-eE]+)\|([0-9.+\-eE]+)\] +\"(.*)\" +(.*)" regexp = re.compile(pattern) temp = regexp.match(decoded) regexp_raw = re.compile(pattern.encode(dbc_import_encoding)) @@ -651,7 +651,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None for ecu_name in temp.group(2).split(','): frame.add_transmitter(ecu_name) elif decoded.startswith("CM_ SG_ "): - pattern = r"^CM_ +SG_ +(\w+) +(\w+) +\"(.*)\" *;" + pattern = r"^CM_ +SG_ +(\S+) +(\S+) +\"(.*)\" *;" regexp = re.compile(pattern) regexp_raw = re.compile(pattern.encode(dbc_import_encoding)) temp = regexp.match(decoded) @@ -668,7 +668,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None "Error decoding line: %d (%s)" % (i, line)) else: - pattern = r"^CM_ +SG_ +(\w+) +(\w+) +\"(.*)" + pattern = r"^CM_ +SG_ +(\S+) +(\S+) +\"(.*)" regexp = re.compile(pattern) regexp_raw = re.compile(pattern.encode(dbc_import_encoding)) temp = regexp.match(decoded) @@ -686,7 +686,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None follow_up = _FollowUps.SIGNAL_COMMENT elif decoded.startswith("CM_ BO_ "): - pattern = r"^CM_ +BO_ +(\w+) +\"(.*)\" *;" + pattern = r"^CM_ +BO_ +(\S+) +\"(.*)\" *;" regexp = re.compile(pattern) regexp_raw = re.compile(pattern.encode(dbc_import_encoding)) temp = regexp.match(decoded) @@ -702,7 +702,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None "Error decoding line: %d (%s)" % (i, line)) else: - pattern = r"^CM_ +BO_ +(\w+) +\"(.*)" + pattern = r"^CM_ +BO_ +(\S+) +\"(.*)" regexp = re.compile(pattern) regexp_raw = re.compile(pattern.encode(dbc_import_encoding)) temp = regexp.match(decoded) @@ -718,7 +718,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None (i, line)) follow_up = _FollowUps.FRAME_COMMENT elif decoded.startswith("CM_ BU_ "): - pattern = r"^CM_ +BU_ +(\w+) +\"(.*)\" *;" + pattern = r"^CM_ +BU_ +(\S+) +\"(.*)\" *;" regexp = re.compile(pattern) regexp_raw = re.compile(pattern.encode(dbc_import_encoding)) temp = regexp.match(decoded) @@ -732,7 +732,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None except: logger.error("Error decoding line: %d (%s)" % (i, line)) else: - pattern = r"^CM_ +BU_ +(\w+) +\"(.*)" + pattern = r"^CM_ +BU_ +(\S+) +\"(.*)" regexp = re.compile(pattern) regexp_raw = re.compile(pattern.encode(dbc_import_encoding)) temp = regexp.match(decoded) @@ -760,7 +760,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None db.ecus.append(canmatrix.Ecu(ele)) elif decoded.startswith("VAL_ "): - regexp = re.compile(r"^VAL_ +(\w+) +(\w+) +(.*) *;") + regexp = re.compile(r"^VAL_ +(\S+) +(\S+) +(.*) *;") temp = regexp.match(decoded) if temp: frame_id = temp.group(1) @@ -782,7 +782,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None logger.info("Warning: environment variables currently not supported") elif decoded.startswith("VAL_TABLE_ "): - regexp = re.compile(r"^VAL_TABLE_ +(\w+) +(.*) *;") + regexp = re.compile(r"^VAL_TABLE_ +(\S+) +(.*) *;") temp = regexp.match(decoded) if temp: table_name = temp.group(1) @@ -838,18 +838,18 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None get_frame_by_id(canmatrix.ArbitrationId.from_compound_integer(int(temp.group(2)))).add_attribute( temp.group(1), temp.group(3)) elif tempba.group(1).strip().startswith("SG_ "): - regexp = re.compile(r"^BA_ +\"(.+?)\" +SG_ +(\d+) +(\w+) +(.+) *; *") + regexp = re.compile(r"^BA_ +\"(.+?)\" +SG_ +(\d+) +(\S+) +(.+) *; *") temp = regexp.match(decoded) if temp is not None: get_frame_by_id(canmatrix.ArbitrationId.from_compound_integer(int(temp.group(2)))).signal_by_name( temp.group(3)).add_attribute(temp.group(1), temp.group(4)) elif tempba.group(1).strip().startswith("EV_ "): - regexp = re.compile(r"^BA_ +\"(.+?)\" +EV_ +(\w+) +(.*) *; *") + regexp = re.compile(r"^BA_ +\"(.+?)\" +EV_ +(\S+) +(.*) *; *") temp = regexp.match(decoded) if temp is not None: db.add_env_attribute(temp.group(2), temp.group(1), temp.group(3)) elif tempba.group(1).strip().startswith("BU_ "): - regexp = re.compile(r"^BA_ +\"(.*?)\" +BU_ +(\w+) +(.+) *; *") + regexp = re.compile(r"^BA_ +\"(.*?)\" +BU_ +(\S+) +(.+) *; *") temp = regexp.match(decoded) db.ecu_by_name( temp.group(2)).add_attribute( @@ -857,13 +857,13 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None temp.group(3)) else: regexp = re.compile( - r"^BA_ +\"([A-Za-z0-9\-_]+)\" +([\"\w\-\.]+) *; *") + r"^BA_ +\"([A-Za-z0-9\-_]+)\" +([\"\S\-\.]+) *; *") temp = regexp.match(decoded) if temp: db.add_attribute(temp.group(1), temp.group(2)) elif decoded.startswith("SIG_GROUP_ "): - regexp = re.compile(r"^SIG_GROUP_ +(\w+) +(\w+) +(\w+) +\:(.*) *; *") + regexp = re.compile(r"^SIG_GROUP_ +(\S+) +(\S+) +(\S+) +\:(.*) *; *") temp = regexp.match(decoded) frame = get_frame_by_id(canmatrix.ArbitrationId.from_compound_integer(int(temp.group(1)))) if frame is not None: @@ -871,7 +871,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None frame.add_signal_group(temp.group(2), temp.group(3), signal_array) # todo wrong annotation in canmatrix? Id is a string? elif decoded.startswith("SIG_VALTYPE_ "): - regexp = re.compile(r"^SIG_VALTYPE_ +(\w+) +(\w+)\s*\:(.*) *; *") + regexp = re.compile(r"^SIG_VALTYPE_ +(\S+) +(\S+)\s*\:(.*) *; *") temp = regexp.match(decoded) frame = get_frame_by_id(canmatrix.ArbitrationId.from_compound_integer(int(temp.group(1)))) if frame: @@ -889,7 +889,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None db.add_define_default(temp.group(1), temp_raw.group(2).decode(dbc_import_encoding)) elif decoded.startswith("SG_MUL_VAL_ "): - pattern = r"^SG_MUL_VAL_ +([0-9]+) +([\w\-]+) +([\w\-]+) +(.*) *; *" + pattern = r"^SG_MUL_VAL_ +([0-9]+) +([\S\-]+) +([\S\-]+) +(.*) *; *" regexp = re.compile(pattern) temp = regexp.match(decoded) if temp: @@ -908,7 +908,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None mux_val_max_number = int(mux_val_max) signal.mux_val_grp.append([mux_val_min_number, mux_val_max_number]) elif decoded.startswith("EV_ "): - pattern = r"^EV_ +([\w\-\_]+?) *\: +([0-9]+) +\[([0-9.+\-eE]+)\|([0-9.+\-eE]+)\] +\"(.*?)\" +([0-9.+\-eE]+) +([0-9.+\-eE]+) +([\w\-]+?) +(.*); *" + pattern = r"^EV_ +([\S\-\_]+?) *\: +([0-9]+) +\[([0-9.+\-eE]+)\|([0-9.+\-eE]+)\] +\"(.*?)\" +([0-9.+\-eE]+) +([0-9.+\-eE]+) +([\S\-]+?) +(.*); *" regexp = re.compile(pattern) temp = regexp.match(decoded) From adcd8955d162d4119b8359bccd542a5db8baa3a6 Mon Sep 17 00:00:00 2001 From: pempem98 <64413735+pempem98@users.noreply.github.com> Date: Thu, 28 Dec 2023 22:55:30 +0700 Subject: [PATCH 18/61] Support to decode infinity value (#754) Support to decode infinity value in utils Co-authored-by: lucasdo --- src/canmatrix/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/canmatrix/utils.py b/src/canmatrix/utils.py index ea703dae..edf69966 100644 --- a/src/canmatrix/utils.py +++ b/src/canmatrix/utils.py @@ -125,7 +125,7 @@ def decode_number(value, float_factory): # type(string) -> (int) return 0 value = value.strip() - if '.' in value: + if ('.' in value) or (value.lower() in ["inf", "+inf", "-inf"]): return float_factory(value) base = 10 From 8fcc28293c2d52ce93c48f799c9c32283d33bfa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Sat, 30 Dec 2023 20:02:23 +0100 Subject: [PATCH 19/61] ARXML parsing speed issue #750 (#751) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * may fix #750 * remove not longer needed list of signal_triggerings * arxml: fix some type hints --------- Co-authored-by: Eduard Bröcker --- aa.dbc | 78 ++++++++++++++++++++++++++++++++++ examples/j1939_test.py | 11 +++++ src/canmatrix/formats/arxml.py | 46 ++++++++------------ src/canmatrix/tests/tmp.dbc | 22 ++++++++++ src/canmatrix/tests/tmp.tmp | 63 +++++++++++++++++++++++++++ src/canmatrix/tests/tmpa.dbc | 22 ++++++++++ src/canmatrix/tests/tmpb.dbc | 29 +++++++++++++ 7 files changed, 242 insertions(+), 29 deletions(-) create mode 100644 aa.dbc create mode 100644 examples/j1939_test.py create mode 100644 src/canmatrix/tests/tmp.dbc create mode 100644 src/canmatrix/tests/tmp.tmp create mode 100644 src/canmatrix/tests/tmpa.dbc create mode 100644 src/canmatrix/tests/tmpb.dbc diff --git a/aa.dbc b/aa.dbc new file mode 100644 index 00000000..d2e06fe3 --- /dev/null +++ b/aa.dbc @@ -0,0 +1,78 @@ +VERSION "created by canmatrix" + + +NS_ : + +BS_: + +BU_: PLC MotorValve + + +BO_ 0 NMT_Out_Request: 2 PLC + SG_ nmt_CMD : 0|8@1- (1,0) [-128|127] "" MotorValve + SG_ Node_ID : 8|8@1- (1,0) [-128|127] "" MotorValve + +BO_ 1793 NMT_Response_Frame_In: 8 MotorValve + SG_ NMT_Response_10 : 0|32@1- (1,0) [-2147483648|2147483647] "" PLC + SG_ NMT_Response_11 : 32|32@1- (1,0) [-2147483648|2147483647] "" PLC + +BO_ 128 SYNC: 0 PLC + +BO_ 129 EMCY: 8 MotorValve + SG_ EMCY_Error_Code : 0|16@1- (1,0) [-32768|32767] "" PLC + SG_ E_Reg : 16|8@1- (1,0) [-128|127] "" PLC + SG_ E_Number : 24|8@1- (1,0) [-128|127] "" PLC + +BO_ 1537 SDO_download: 8 MotorValve + SG_ sdo_down_CMD M : 0|8@1- (1,0) [-128|127] "" PLC + SG_ sdo_down_IDX : 8|16@1- (1,0) [-32768|32767] "" PLC + SG_ sdo_down_SUBIDX : 24|8@1- (1,0) [-128|127] "" PLC + SG_ data8 m47 : 32|8@1- (1,0) [-128|127] "" PLC + SG_ data16 m43 : 32|16@1- (1,0) [-32768|32767] "" PLC + SG_ data24 m39 : 32|24@1- (1,0) [-8388608|8388607] "" PLC + SG_ data320 m35 : 32|32@1- (1,0) [-2147483648|2147483647] "" PLC + SG_ data321 m67 : 32|32@1- (1,0) [-2147483648|2147483647] "" PLC + +BO_ 1409 SDO_upload: 8 PLC + SG_ sdo_state M : 0|8@1- (1,0) [-128|127] "" MotorValve + SG_ sdo_uo_IDX : 8|16@1- (1,0) [-32768|32767] "" MotorValve + SG_ sdo_up_SUBIDX : 24|8@1- (1,0) [-128|127] "" MotorValve + SG_ error_code m128 : 32|32@1- (1,0) [-2147483648|2147483647] "" MotorValve + SG_ data8 m79 : 32|8@1- (1,0) [-128|127] "" PLC + SG_ data16 m75 : 32|16@1- (1,0) [-32768|32767] "" PLC + SG_ data24 m71 : 32|24@1- (1,0) [-8388608|8388607] "" PLC + +BO_ 513 Receive_PDO_Mapping_Parameter_0: 8 PLC + SG_ CMDDigital : 0|32@1+ (1,0) [0|4294967295] "" MotorValve + SG_ PVDigital : 32|32@1+ (1,0) [0|4294967295] "" MotorValve + +BO_ 769 Receive_PDO_Mapping_Parameter_1: 8 PLC + SG_ SPDigital : 0|32@1+ (1,0) [0|4294967295] "" MotorValve + +BO_ 385 Receive_PDO_Mapping_Parameter_1: 8 MotorValve + SG_ CMD_Raw : 0|32@1+ (1,0) [0|4294967295] "" PLC + SG_ CMD_Display : 32|32@1+ (1,0) [0|4294967295] "" PLC + +BO_ 641 Transmit_PDO_Mapping_Parameter_0: 8 MotorValve + SG_ POS_Measured : 0|32@1+ (1,0) [0|4294967295] "" PLC + SG_ NamurStatus : 32|32@1+ (1,0) [0|4294967295] "" PLC + +BO_ 897 Transmit_PDO_Mapping_Parameter_1: 8 MotorValve + SG_ SP : 0|32@1+ (1,0) [0|4294967295] "" PLC + SG_ PV : 32|32@1+ (1,0) [0|4294967295] "" PLC + +BO_ 1153 Transmit_PDO_Mapping_Parameter_2: 8 MotorValve + SG_ PDO_Mapping_Entry : 0|32@1+ (1,0) [0|4294967295] "" PLC + SG_ PDO_Mapping_Entry_2 : 32|32@1+ (1,0) [0|4294967295] "" PLC + + + + + + + + + +VAL_ 0 nmt_CMD 1 "switch to state \"Operational\"" 2 "switch to state \"Stop\"" 128 "switch to state \"Pre-Operational\"" 129 "Reset Node" 130 "Reset Communication"; +VAL_ 1537 sdo_down_CMD 35 "4_bytes" 39 "3_bytes" 43 "16_bytes" 47 "8_bytes" 64 "upload_request"; +VAL_ 1409 sdo_state 35 "4_bytes" 39 "3_bytes" 43 "16_bytes" 47 "8_bytes" 128 "upload_error"; diff --git a/examples/j1939_test.py b/examples/j1939_test.py new file mode 100644 index 00000000..7dc0ab06 --- /dev/null +++ b/examples/j1939_test.py @@ -0,0 +1,11 @@ +import canmatrix.formats + +my_matrix = canmatrix.formats.loadp_flat(r"C:\Users\edu\Downloads\obd2-test\CSS-Electronics-OBD2-incl-extended-v2.0.dbc") + +for num, frame in enumerate(my_matrix.frames): + print(f"Frame {num}: {frame}") + print(f" is j1939: {frame.is_j1939}") + print(f" id: {frame.arbitration_id}") + print(f' Format: {frame.attributes["VFrameFormat"]}') + if frame.is_j1939: + print(f" pgn: {hex(frame.arbitration_id.pgn)}") diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 1b1cdbce..fce2b936 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -184,7 +184,7 @@ def get_sub_by_name(self, start_element, name): return self.find(name, start_element) def find_children_by_path(self, from_element, path): - # type: (_Element, str, _DocRoot, str) -> typing.Sequence[_Element] + # type: (_Element, _Element, str) -> typing.Sequence[_Element] path_elements = path.split('/') element = from_element for element_name in path_elements[:-1]: @@ -201,7 +201,7 @@ def get_element_name(self, parent): return "" def get_child(self, parent, tag_name): - # type: (_Element, str, _DocRoot, str) -> typing.Optional[_Element] + # type: (_Element, _Element, str) -> typing.Optional[_Element] """Get first sub-child or referenced sub-child with given name.""" # logger.debug("get_child: " + tag_name) if parent is None: @@ -215,7 +215,7 @@ def get_child(self, parent, tag_name): return ret def get_children(self, parent, tag_name): - # type: (_Element, str, _DocRoot, str) -> typing.Sequence[_Element] + # type: (_Element, str, str) -> typing.Sequence[_Element] if parent is None: return [] ret = self.findall(tag_name, parent) @@ -227,7 +227,7 @@ def get_children(self, parent, tag_name): return ret def get_element_desc(self, element): - # type: (_Element, _DocRoot, str) -> str + # type: (_Element, _DocRoot) -> str """Get element description from XML.""" desc = self.get_child(element, "DESC") txt = self.get_child(desc, 'L-2[@L="DE"]') @@ -307,7 +307,7 @@ def selector(self, start_element, selector): def create_sub_element(parent, element_name, text=None, dest=None): - # type: (_Element, str, typing.Optional[str]) -> _Element + # type: (_Element, str, typing.Optional[str], typing.Optional[str]) -> _Element sn = lxml.etree.SubElement(parent, element_name) if text is not None: sn.text = str(text) @@ -1007,7 +1007,7 @@ def get_signalgrp_and_signals(sys_signal, sys_signal_array, frame, group_id, ea) def decode_compu_method(compu_method, ea, float_factory): - # type: (_Element, _DocRoot, str, _FloatFactory) -> typing.Tuple + # type: (_Element, Earxml, _FloatFactory) -> typing.Tuple values = {} factor = float_factory(1.0) offset = float_factory(0) @@ -1100,7 +1100,7 @@ def ar_byteorder_is_little(in_string): return False -def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset=0, signal_triggerings=[]): +def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset=0): # type: (typing.Sequence[_Element], typing.Union[canmatrix.Frame, canmatrix.Pdu], Earxml, int, typing.Callable, int) -> None """Add signals from xml to the Frame.""" @@ -1132,11 +1132,10 @@ def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset receiver = [] # type: typing.List[str] - for triggering in signal_triggerings: + for triggering in ea.selector(isignal, "<I-SIGNAL-REF")[0] == isignal: - reciving_ecu_instances = ea.selector(triggering, ">>I-SIGNAL-PORT-REF//COMMUNICATION-DIRECTION:IN/../../..") - receiver = [ea.get_short_name(a) for a in reciving_ecu_instances] + reciving_ecu_instances = ea.selector(triggering, ">>I-SIGNAL-PORT-REF//COMMUNICATION-DIRECTION:IN/../../..") + receiver = [ea.get_short_name(a) for a in reciving_ecu_instances] except IndexError: pass @@ -1531,7 +1530,7 @@ def store_frame_timings(target_frame, cyclic_timing, event_timing, minimum_delay def get_frame(frame_triggering, ea, multiplex_translation, float_factory, headers_are_littleendian): - # type: (_Element, _DocRoot, dict, typing.Callable, bool) -> typing.Union[canmatrix.Frame, None] + # type: (_Element, Earxml, dict, typing.Callable, bool) -> typing.Union[canmatrix.Frame, None] global frames_cache arb_id = ea.get_child(frame_triggering, "IDENTIFIER") @@ -1542,7 +1541,6 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header logger.info("found Frame-Trigger %s without arbitration id", frame_trig_name_elem.text) return None arbitration_id = int(arb_id.text, 0) - isignaltriggerings_of_current_cluster = ea.selector(frame_triggering, "/..//I-SIGNAL-TRIGGERING") if frame_elem is not None: logger.debug("Frame: %s", ea.get_element_name(frame_elem)) @@ -1637,21 +1635,14 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header else: pdu_sig_mapping = ea.selector(pdu, "//I-SIGNAL-TO-I-PDU-MAPPING") if pdu_sig_mapping: - get_signals( - pdu_sig_mapping, new_frame, ea, None, float_factory, signal_triggerings=isignaltriggerings_of_current_cluster - ) + get_signals(pdu_sig_mapping, new_frame, ea, None, float_factory) else: # Seen some pdu_sig_mapping being [] and not None with some arxml 4.2 - update_frame_with_pdu_triggerings( - new_frame, ea, frame_triggering, float_factory, - isignaltriggerings_of_current_cluster - ) + update_frame_with_pdu_triggerings(new_frame, ea, frame_triggering, float_factory) else: # AR 4.2 update_frame_with_pdu_triggerings( - new_frame, ea, frame_triggering, float_factory, - isignaltriggerings_of_current_cluster - ) + new_frame, ea, frame_triggering, float_factory) if new_frame.is_pdu_container and new_frame.cycle_time == 0: cycle_times = {pdu.cycle_time for pdu in new_frame.pdus} @@ -1666,12 +1657,9 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header return copy.deepcopy(new_frame) -def update_frame_with_pdu_triggerings( - frame, ea, frame_triggering, float_factory, signal_triggerings=None -): - # type: (canmatrix.Frame, Earxml, _Element, typing.Callable, typing.Optional[typing.Sequence]) -> None +def update_frame_with_pdu_triggerings(frame, ea, frame_triggering, float_factory): + # type: (canmatrix.Frame, Earxml, _Element, typing.Callable) -> None """Update frame with signals from PDU Triggerings.""" - signal_triggerings = signal_triggerings or [] pdu_trigs = ea.follow_all_ref(frame_triggering, "PDU-TRIGGERINGS-REF") if pdu_trigs is not None: for pdu_trig in pdu_trigs: @@ -1690,7 +1678,7 @@ def update_frame_with_pdu_triggerings( ) # signal_to_pdu_map = get_children(signal_to_pdu_maps, "I-SIGNAL-TO-I-PDU-MAPPING", arDict, ns) - get_signals(signal_to_pdu_maps, frame, ea, None, float_factory, signal_triggerings=signal_triggerings) # todo BUG expects list, not item + get_signals(signal_to_pdu_maps, frame, ea, None, float_factory) # todo BUG expects list, not item else: logger.debug("Frame %s (assuming AR4.2) no PDU-TRIGGERINGS found", frame.name) diff --git a/src/canmatrix/tests/tmp.dbc b/src/canmatrix/tests/tmp.dbc new file mode 100644 index 00000000..c62b60ca --- /dev/null +++ b/src/canmatrix/tests/tmp.dbc @@ -0,0 +1,22 @@ +VERSION "created by canmatrix" + + +NS_ : + +BS_: + +BU_: + + +BO_ 291 testFrame1: 8 testBU + SG_ someTestSignal : 7|11@0+ (5,1) [0|500] "specialCharUnit°$" recBU + + + + + +BA_DEF_ BO_ "SomeUnneededDefine" INT 0 65535; + + + + diff --git a/src/canmatrix/tests/tmp.tmp b/src/canmatrix/tests/tmp.tmp new file mode 100644 index 00000000..8621d88a --- /dev/null +++ b/src/canmatrix/tests/tmp.tmp @@ -0,0 +1,63 @@ +VERSION "created by canmatrix" + + +NS_ : + +BS_: + +BU_: CCL_TEST TEST_ECU + + +BO_ 4 muxTestFrame: 7 TEST_ECU + SG_ myMuxer M : 53|3@1+ (1,0) [0|0] "" CCL_TEST + SG_ muxSig4 m0 : 25|7@1- (1,0) [0|0] "" CCL_TEST + SG_ muxSig3 m0 : 16|9@1+ (1,0) [0|0] "" CCL_TEST + SG_ muxSig2 m0 : 15|8@0- (1,0) [0|0] "" CCL_TEST + SG_ muxSig1 m0 : 0|8@1- (1,0) [0|0] "" CCL_TEST + SG_ muxSig5 m1 : 22|7@1- (1,0) [0|0] "" CCL_TEST + SG_ muxSig6 m1 : 32|9@1+ (1,0) [0|0] "" CCL_TEST + SG_ muxSig7 m1 : 2|8@0- (1,0) [0|0] "" CCL_TEST + SG_ muxSig8 m1 : 0|6@1- (1,0) [0|0] "" CCL_TEST + SG_ muxSig9 : 40|8@1- (1,0) [0|0] "" CCL_TEST + +BO_ 3 testFrameFloat: 8 TEST_ECU + SG_ floatSignal2 : 32|32@1- (1,0) [0|0] "" CCL_TEST + SG_ floatSignal1 : 7|32@0- (1,0) [0|0] "" CCL_TEST + +BO_ 1 testFrame1: 8 TEST_ECU + SG_ sig0 : 1|2@0+ (1,0) [0|0] "" CCL_TEST + SG_ sig1 : 7|6@0+ (1,0) [0|0] "" CCL_TEST + SG_ sig2 : 15|11@0+ (1,0) [0|0] "" CCL_TEST + SG_ sig3 : 20|12@0+ (1,0) [0|0] "" CCL_TEST + SG_ sig4 : 24|9@0+ (1,0) [0|0] "" CCL_TEST + SG_ sig5 : 50|3@0+ (1,0) [0|0] "" CCL_TEST + SG_ sig6 : 53|3@0+ (1,0) [0|0] "" CCL_TEST + SG_ sig7 : 47|10@0+ (1,0) [0|0] "" CCL_TEST + SG_ sig8 : 58|3@0+ (1,0) [0|0] "" CCL_TEST + SG_ sig9 : 61|3@0+ (1,0) [0|0] "" CCL_TEST + SG_ sig10 : 63|2@0+ (1,0) [0|0] "" CCL_TEST + +BO_ 2 testFrame2: 8 TEST_ECU + SG_ secSig1 : 60|2@1+ (1,0) [0|0] "" CCL_TEST + SG_ secSig2 : 55|1@1+ (1,0) [0|0] "" CCL_TEST + SG_ secSig3 : 20|4@1+ (1,0) [0|0] "" CCL_TEST + SG_ secSig4 : 62|2@1+ (1,0) [0|0] "" CCL_TEST + SG_ secSig5 : 34|3@1+ (1,0) [0|0] "" CCL_TEST + SG_ secSig6 : 37|3@1+ (1,0) [0|0] "" CCL_TEST + SG_ secSig7 : 59|1@1- (1,0) [0|0] "" CCL_TEST + SG_ secSig8 : 56|3@1+ (1,0) [0|0] "" CCL_TEST + SG_ secSig9 : 52|3@1+ (1,0) [0|0] "" CCL_TEST + SG_ secSig10 : 8|12@1+ (1,0) [0|0] "" CCL_TEST + SG_ secSig11 : 24|10@1- (1,0) [0|0] "" CCL_TEST + SG_ secSig12 : 0|8@1+ (1,0) [0|0] "" CCL_TEST + + + + + + + + + +SIG_VALTYPE_ 3 floatSignal2 : 1; +SIG_VALTYPE_ 3 floatSignal1 : 1; diff --git a/src/canmatrix/tests/tmpa.dbc b/src/canmatrix/tests/tmpa.dbc new file mode 100644 index 00000000..dcff1fd7 --- /dev/null +++ b/src/canmatrix/tests/tmpa.dbc @@ -0,0 +1,22 @@ +VERSION "created by canmatrix" + + +NS_ : + +BS_: + +BU_: + + +BO_ 292 testFrame3: 8 testBU + SG_ someTestSignal : 7|11@0+ (5,1) [0|500] "" recBU + + + + + + + + + +VAL_ 292 someTestSignal 1 "one"; diff --git a/src/canmatrix/tests/tmpb.dbc b/src/canmatrix/tests/tmpb.dbc new file mode 100644 index 00000000..c3b1b07c --- /dev/null +++ b/src/canmatrix/tests/tmpb.dbc @@ -0,0 +1,29 @@ +VERSION "created by canmatrix" + + +NS_ : + +BS_: + +BU_: + + +BO_ 292 testFrame3: 8 testBU + SG_ someTestSignal : 7|11@0+ (5,1) [0|500] "" recBU + +BO_ 293 testFrame2: 8 testBU2 + SG_ someTestSignal2 : 8|11@0+ (5,1) [0|500] "" recBU2 + SG_ zeroSignal : 19|0@0+ (5,1) [0|500] "" recBU2 + + + + + +BA_DEF_ BO_ "myAttribute" INT -5 10; +BA_DEF_ SG_ "mySignalAttribute" INT 0 65535; + + +BA_ "myAttribute" BO_ 293 42; + +BA_ "mySignalAttribute" SG_ 293 zeroSignal 7; + From ef38e9403598c6a667cbb39f980b92e6258eac6d Mon Sep 17 00:00:00 2001 From: xRowe <33739292+xRowe@users.noreply.github.com> Date: Mon, 8 Jan 2024 03:14:33 +0800 Subject: [PATCH 20/61] Improve arxml Ethernet Parameter reading (#752) Read Arxml Ethernet, Size, Frame.Recivers, Frame.Transimitters, db.vlan. endpoints(server/client, ipv4, port) --- src/canmatrix/canmatrix.py | 29 ++++++- src/canmatrix/formats/arxml.py | 138 ++++++++++++++++++++++++--------- 2 files changed, 130 insertions(+), 37 deletions(-) diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index 98d5f2aa..8c5bd5e3 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -777,6 +777,17 @@ def __eq__(self, other): ) +@attr.s(eq=False) +class Endpoint(object): + """ + Represents a Endpoint. + + AUTOSAR Ethernet Frames Endpoints + """ + ip = attr.ib(default="") # type: str + port = attr.ib(default=0) # type: int + + @attr.s(eq=False) class Pdu(object): """ @@ -892,8 +903,10 @@ class Frame(object): pdus = attr.ib(factory=list) # type: typing.MutableSequence[Pdu] header_id = attr.ib(default=None) #type: int - # header_id + pdu_name = attr.ib(default="") # type: str + + endpoints = attr.ib(factory=dict) @property def is_multiplexed(self): # type: () -> bool @@ -1723,6 +1736,8 @@ class CanMatrix(object): baudrate = attr.ib(default=0) # type:int fd_baudrate = attr.ib(default=0) # type:int + vlan = attr.ib(default=None) # type:int + load_errors = attr.ib(factory=list) # type: typing.MutableSequence[Exception] def __iter__(self): # type: () -> typing.Iterator[Frame] @@ -1909,6 +1924,17 @@ def frame_by_id(self, arbitration_id): # type: (ArbitrationId) -> typing.Union[ return test return None + def frame_by_header_id(self, header_id): # type: (HeaderId) -> typing.Union[Frame, None] + """Get Frame by its Header id. + :param HeaderId header_id: Header id as canmatrix.header_id + :rtype: Frame or None + """ + for test in self.frames: + if test.header_id == header_id: + # found ID while ignoring extended or standard + return test + return None + def frame_by_pgn(self, pgn): # type: (int) -> typing.Union[Frame, None] """Get Frame by pgn (j1939). @@ -1923,7 +1949,6 @@ def frame_by_pgn(self, pgn): # type: (int) -> typing.Union[Frame, None] return test return None - def frame_by_name(self, name): # type: (str) -> typing.Union[Frame, None] """Get Frame by name. diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index fce2b936..d35f865a 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -1551,6 +1551,9 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header # pdu = ea.follow_ref(pdu_mapping, "PDU-REF") # SIGNAL-I-PDU pdu = ea.follow_ref(frame_elem, "PDU-REF") # SIGNAL-I-PDU + # pdu_name = ea.get_element_name(pdu) + # target_pdu = canmatrix.Pdu(name=pdu_name) + if pdu is not None and 'SECURED-I-PDU' in pdu.tag: ipdu = ea.selector(pdu, ">PAYLOAD-REF>I-PDU-REF") if not ipdu: @@ -1560,6 +1563,8 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header pdu = ipdu[0] new_frame = canmatrix.Frame(ea.get_element_name(frame_elem), size=int(dlc_elem.text, 0)) + # new_frame.add_pdu(target_pdu) + comment = ea.get_element_desc(frame_elem) if pdu is not None: new_frame.add_attribute("PduName", ea.get_short_name(pdu)) @@ -1760,6 +1765,7 @@ def extract_cm_from_ecuc(com_module, ea): def decode_ethernet_helper(ea, float_factory): found_matrixes = {} + nodes = {} # type: typing.Dict[_Element, canmatrix.Ecu] socket_connetions = ea.findall("SOCKET-CONNECTION-IPDU-IDENTIFIER") pdu_triggering_header_id_map = {} @@ -1776,50 +1782,112 @@ def decode_ethernet_helper(ea, float_factory): for ec in ecs: baudrate_elem = ea.find("BAUDRATE", ec) physical_channels = ea.findall("ETHERNET-PHYSICAL-CHANNEL", ec) + for pc in physical_channels: - db = canmatrix.CanMatrix(type=canmatrix.matrix_class.SOMEIP) - db.baudrate = baudrate_elem.text if baudrate_elem is not None else 0 - db.add_signal_defines("LongName", 'STRING') + db.baudrate = int(baudrate_elem.text, 0) if baudrate_elem is not None else 0 + # db.add_signal_defines("LongName", 'STRING') channel_name = ea.get_element_name(pc) + + vlan = ea.get_child(pc, "VLAN") + vlan_tag = ea.get_child(vlan, "VLAN-IDENTIFIER") + db.vlan = int(vlan_tag.text, 0) + found_matrixes[channel_name] = db - for socket_connetion in ea.findall("SOCKET-CONNECTION-IPDU-IDENTIFIER", pc): - header_id = ea.get_child(socket_connetion, "HEADER-ID") - ipdu_triggering = ea.follow_ref(socket_connetion, "PDU-TRIGGERING-REF") - # for ipdu_triggering in ea.findall("PDU-TRIGGERING", pc): - ipdu = ea.follow_ref(ipdu_triggering, "I-PDU-REF") - if ipdu is not None and 'SECURED-I-PDU' in ipdu.tag: - payload = ea.follow_ref(ipdu, "PAYLOAD-REF") - if payload is None: - logger.error( - "SecuredIPdu %r is missing Payload", ea.get_short_name(ipdu) - ) - continue - ipdu = ea.follow_ref(payload, "I-PDU-REF") - if ipdu is None: - logger.error( - "PduTriggering %r is missing IPdu", ea.get_short_name(payload) - ) - continue - - ipdu_name = ea.get_element_name(ipdu) - logger.info("ETH PDU " + ipdu_name + " found") - target_frame = canmatrix.Frame(name=ipdu_name) - try: - target_frame.header_id = int(header_id.text, 0) - except: + for socket_connection_bundle in ea.findall("SOCKET-CONNECTION-BUNDLE", pc): + # Get Server Endpoint Info + server_port_ref = ea.follow_ref(socket_connection_bundle, "SERVER-PORT-REF") + server_port = ea.find("PORT-NUMBER", server_port_ref) + + server_app_endpoint = ea.get_child(server_port_ref, "APPLICATION-ENDPOINT") + server_endpoint_ref = ea.follow_ref(server_app_endpoint, "NETWORK-ENDPOINT-REF") + server_ipv4 = ea.find("IPV-4-ADDRESS", server_endpoint_ref) + + # Get Client Endpoint Info + socket_connection = ea.get_child(socket_connection_bundle, "SOCKET-CONNECTION") + client_port_ref = ea.follow_ref(socket_connection, "CLIENT-PORT-REF") + client_port = ea.find("PORT-NUMBER", client_port_ref) + + client_app_endpoint = ea.get_child(client_port_ref, "APPLICATION-ENDPOINT") + client_endpoint_ref = ea.follow_ref(client_app_endpoint, "NETWORK-ENDPOINT-REF") + client_ipv4 = ea.find("IPV-4-ADDRESS", client_endpoint_ref) + + server = canmatrix.Endpoint(server_ipv4.text, int(server_port.text, 0)) + client = canmatrix.Endpoint(client_ipv4.text, int(client_port.text, 0)) + + for scii in ea.findall("SOCKET-CONNECTION-IPDU-IDENTIFIER", socket_connection): + header_id = ea.get_child(scii, "HEADER-ID") + ipdu_triggering = ea.follow_ref(scii, "PDU-TRIGGERING-REF") + + # Maybe Here can use a more efficent way + ipdu_receivers_ref = ea.get_child(ipdu_triggering, "I-PDU-PORT-REFS") + ipdu_receivers = [ea.follow_ref(ipdu_receivers_ref, "I-PDU-PORT-REF")] + for receiver in ipdu_receivers: + comm_direction = ea.get_child(receiver, "COMMUNICATION-DIRECTION") + ecu_elem = ea.get_ecu_instance(element=comm_direction) + if ecu_elem is not None: + if ecu_elem in nodes: + ecu = nodes[ecu_elem] + else: + ecu = process_ecu(ecu_elem, ea) + nodes[ecu_elem] = ecu + # db.add_ecu(ecu) + + ipdu = ea.follow_ref(ipdu_triggering, "I-PDU-REF") + + # Size + ipdu_length = int(ea.get_child(ipdu, "LENGTH").text, 0) + + # Cycle-Time + timing_spec = ea.get_child(ipdu, "I-PDU-TIMING-SPECIFICATION") + if timing_spec is None: + timing_spec = ea.get_child(ipdu, "I-PDU-TIMING-SPECIFICATIONS") + cyclic_timing = ea.get_child(timing_spec, "CYCLIC-TIMING") + time_period = ea.get_child(cyclic_timing, "TIME-PERIOD") + value = ea.get_child(time_period, "VALUE") + if value is not None: + cycle_time = int(float_factory(value.text) * 1000) + else: + cycle_time = 0 + + if ipdu is not None and 'SECURED-I-PDU' in ipdu.tag: + payload = ea.follow_ref(ipdu, "PAYLOAD-REF") + if payload is None: + logger.error( + "SecuredIPdu %r is missing Payload", ea.get_short_name(ipdu) + ) + continue + ipdu = ea.follow_ref(payload, "I-PDU-REF") + if ipdu is None: + logger.error( + "PduTriggering %r is missing IPdu", ea.get_short_name(payload) + ) + continue + + ipdu_name = ea.get_element_name(ipdu) + logger.info("ETH PDU " + ipdu_name + " found") + target_frame = canmatrix.Frame(name=ipdu_name,cycle_time=cycle_time,size=ipdu_length,endpoints={"server": server, "client": client}) try: - target_frame.header_id = int(pdu_triggering_header_id_map[ipdu_triggering], 0) + target_frame.header_id = int(header_id.text, 0) except: - target_frame.header_id = 0 - # continue - pdu_sig_mapping = ea.findall("I-SIGNAL-TO-I-PDU-MAPPING", ipdu) + try: + target_frame.header_id = int(pdu_triggering_header_id_map[ipdu_triggering], 0) + except: + target_frame.header_id = 0 + # continue + + if comm_direction.text == "OUT": + target_frame.add_transmitter(ecu.name) + else: + target_frame.add_receiver(ecu.name) + + pdu_sig_mapping = ea.findall("I-SIGNAL-TO-I-PDU-MAPPING", ipdu) - get_signals(pdu_sig_mapping, target_frame, ea, None, float_factory) - target_frame.update_receiver() - db.add_frame(target_frame) + get_signals(pdu_sig_mapping, target_frame, ea, None, float_factory) + target_frame.update_receiver() + db.add_frame(target_frame) return found_matrixes From f59c4a51bd4aa9227348a3da07920cc906705c95 Mon Sep 17 00:00:00 2001 From: Luis Valencia Date: Wed, 31 Jan 2024 03:01:15 -0500 Subject: [PATCH 21/61] Add data length to signal group's E2E transformer configuration. (#764) --- src/canmatrix/formats/arxml.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index d35f865a..de9413ba 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -999,10 +999,17 @@ def get_signalgrp_and_signals(sys_signal, sys_signal_array, frame, group_id, ea) e2e_transform = { 'profile': ea.get_child(transform_ele, "PROFILE-NAME").text, } - data_id_elems = ea.get_children(ea.get_child(sys_signal, "TRANSFORMATION-I-SIGNAL-PROPSS"), "DATA-ID") + trans_isignal_propss_elem = ea.get_child( + sys_signal, "TRANSFORMATION-I-SIGNAL-PROPSS" + ) + data_id_elems = ea.get_children(trans_isignal_propss_elem, "DATA-ID") if data_id_elems is not None: e2e_transform['data_ids'] = [int(x.text, 0) for x in data_id_elems] + data_len_elem = ea.get_child(trans_isignal_propss_elem, "DATA-LENGTH") + if data_len_elem is not None: + e2e_transform["data_length"] = int(data_len_elem.text, 0) + frame.add_signal_group(ea.get_element_name(sys_signal), group_id, members, e2e_transform) From 8aca284d917d70e99af2206ea6f1503f2f1f86f0 Mon Sep 17 00:00:00 2001 From: xRowe <33739292+xRowe@users.noreply.github.com> Date: Wed, 31 Jan 2024 16:15:56 +0800 Subject: [PATCH 22/61] Add ARXML Reading Singal update bit or group update bit as a standard signal (#763) * Add Reading Singal update bit or group update bit as a standard signal --- src/canmatrix/formats/arxml.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index de9413ba..dfe1bd20 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -1119,6 +1119,9 @@ def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset motorola = ea.get_child(signal, "PACKING-BYTE-ORDER") start_bit = ea.get_child(signal, "START-POSITION") + # To Get Update Bit + ub_start_bit = ea.get_child(signal, "UPDATE-INDICATION-BIT-POSITION") + isignal = ea.follow_ref(signal, "SIGNAL-REF") if isignal is None: isignal = ea.follow_ref(signal, "I-SIGNAL-REF") # AR4 @@ -1126,9 +1129,16 @@ def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset if isignal is None: isignal = ea.follow_ref(signal, "I-SIGNAL-GROUP-REF") if isignal is not None: - logger.debug("get_signals: found I-SIGNAL-GROUP ") + logger.debug("get_signals: found I-SIGNAL-GROUP") isignal_array = ea.follow_all_ref(isignal, "I-SIGNAL-REF") get_signalgrp_and_signals(isignal, isignal_array, frame, group_id, ea) + if ub_start_bit is not None: + ub_name = ea.get_element_name(isignal) + "_UB" + isignal_ub = canmatrix.Signal(ub_name, + start_bit=int(ub_start_bit.text, 0), + size = 1, + is_signed = False) + frame.add_signal(isignal_ub) group_id = group_id + 1 continue @@ -1360,7 +1370,14 @@ def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset existing_signal = frame.signal_by_name(new_signal.name) if existing_signal is None: frame.add_signal(new_signal) - + + if ub_start_bit is not None: + ub_name = name + "_UB" + new_signal_ub = canmatrix.Signal(ub_name, + start_bit=int(ub_start_bit.text, 0), + size = 1, + is_signed = False) + frame.add_signal(new_signal_ub) def get_frame_from_multiplexed_ipdu(pdu, target_frame, multiplex_translation, ea, float_factory): selector_byte_order = ea.get_child(pdu, "SELECTOR-FIELD-BYTE-ORDER") From 0d317f83cec12c95cb691e3b805c94d7e558528e Mon Sep 17 00:00:00 2001 From: Luis Valencia Date: Mon, 19 Feb 2024 11:56:40 -0500 Subject: [PATCH 23/61] Filter out None results in selector more efficiently (#769) --- src/canmatrix/formats/arxml.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index dfe1bd20..8bb4872f 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -298,7 +298,9 @@ def selector(self, start_element, selector): filtered_results.append(tag) result_list = filtered_results - result_list = [result for result in set(result_list) if result is not None] + result_list = list(set(result_list)) + if None in result_list: + result_list.remove(None) last_found_token = found_token[1] + start_pos token = selector[start_pos + found_token[0]:start_pos + found_token[1]] From 1143e8969e68bfff09f1fb667641029962eea6b5 Mon Sep 17 00:00:00 2001 From: welbouri <121300065+welbouri@users.noreply.github.com> Date: Tue, 20 Feb 2024 22:18:33 +0100 Subject: [PATCH 24/61] add a suffix containing file name in cluster name (#770) Co-authored-by: Wassim ELBouri --- src/canmatrix/formats/fibex.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index 20261795..e6f46c83 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -434,7 +434,9 @@ def dump(db, f, **options): clusters = create_sub_element_fx(elements, "CLUSTERS") cluster = lxml.etree.SubElement(clusters, ns_fx + "CLUSTER") cluster.set('ID', 'canCluster1') - create_short_name_desc(cluster, "clusterShort", "clusterDesc") + # add the file name as a suffix in the cluster name + cluster_name = f"cluster_{f.name.split('.')[0]}" + create_short_name_desc(cluster, cluster_name, "clusterDesc") create_sub_element_fx(cluster, "SPEED", "500") create_sub_element_fx(cluster, "IS-HIGH-LOW-BIT-ORDER", "true") create_sub_element_fx(cluster, "BIT-COUNTING-POLICY", "MONOTONE") From 515eb89147a08697a824e1d37ede07efc8f67cf9 Mon Sep 17 00:00:00 2001 From: welbouri <121300065+welbouri@users.noreply.github.com> Date: Thu, 22 Feb 2024 17:33:34 +0100 Subject: [PATCH 25/61] fix getting file name (#771) Co-authored-by: Wassim ELBouri --- src/canmatrix/formats/fibex.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index e6f46c83..1f224332 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -27,6 +27,7 @@ from __future__ import absolute_import, division, print_function +import os import typing from builtins import * import lxml.etree @@ -435,7 +436,7 @@ def dump(db, f, **options): cluster = lxml.etree.SubElement(clusters, ns_fx + "CLUSTER") cluster.set('ID', 'canCluster1') # add the file name as a suffix in the cluster name - cluster_name = f"cluster_{f.name.split('.')[0]}" + cluster_name = f"cluster_{os.path.basename(f.name).split('.')[0]}" create_short_name_desc(cluster, cluster_name, "clusterDesc") create_sub_element_fx(cluster, "SPEED", "500") create_sub_element_fx(cluster, "IS-HIGH-LOW-BIT-ORDER", "true") From 3d059da1ff3e4fb60ef8cbf4aebe85b2f5c970c1 Mon Sep 17 00:00:00 2001 From: pempem98 <64413735+pempem98@users.noreply.github.com> Date: Sat, 16 Mar 2024 04:00:47 +0700 Subject: [PATCH 26/61] canmatrix: fix the factor could be zero (#776) The factor of the signal could be zero and it makes an other error with dividing by zero so when the factor equals zero, we should set it to default value (factor=1) Co-authored-by: pempem98 --- src/canmatrix/canmatrix.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index 8c5bd5e3..4ac5c98b 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -162,7 +162,14 @@ class Signal(object): is_little_endian = attr.ib(default=True) # type: bool is_signed = attr.ib(default=True) # type: bool offset = attr.ib(converter=float_factory, default=float_factory(0.0)) # type: canmatrix.types.PhysicalValue - factor = attr.ib(converter=float_factory, default=float_factory(1.0)) # type: canmatrix.types.PhysicalValue + factor = attr.ib( + converter=lambda value, float_factory=float_factory: ( + float_factory(value) + if float(value) != 0 + else float_factory(1.0) + ), + default=float_factory(1.0) + ) # type: canmatrix.types.PhysicalValue unit = attr.ib(default="") # type: str receivers = attr.ib(factory=list) # type: typing.MutableSequence[str] From 33db76c75988a84f899650d985cefccf3c4f0291 Mon Sep 17 00:00:00 2001 From: Eduard Date: Tue, 26 Mar 2024 17:15:08 +0100 Subject: [PATCH 27/61] arxml: issue #772: very basic j1939-support --- src/canmatrix/formats/arxml.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 8bb4872f..ccac96ba 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -1967,7 +1967,7 @@ def decode_can_helper(ea, float_factory, ignore_cluster_info): if ignore_cluster_info is True: ccs = [lxml.etree.Element("ignoreClusterInfo")] # type: typing.Sequence[_Element] else: - ccs = ea.findall('CAN-CLUSTER') + ccs = ea.findall('CAN-CLUSTER') + ea.findall('J-1939-CLUSTER') headers_are_littleendian = containters_are_little_endian(ea) nodes = {} # type: typing.Dict[_Element, canmatrix.Ecu] @@ -2017,6 +2017,7 @@ def decode_can_helper(ea, float_factory, ignore_cluster_info): multiplex_translation = {} # type: typing.Dict[str, str] for frameTrig in can_frame_trig: # type: _Element frame = get_frame(frameTrig, ea, multiplex_translation, float_factory, headers_are_littleendian) + frame.is_j1939 = "J-1939" in cc.tag if frame is not None: comm_directions = ea.selector(frameTrig, ">>FRAME-PORT-REF/COMMUNICATION-DIRECTION") for comm_direction in comm_directions: From 561eccc9c8465bddda0686750fd0af76ec4c8f6f Mon Sep 17 00:00:00 2001 From: Lucas Do <64413735+pempem98@users.noreply.github.com> Date: Thu, 11 Apr 2024 20:19:49 +0700 Subject: [PATCH 28/61] arxml: Only get min/max of the INTERNAL-CONSTR (#779) Under the tag DATA-CONSTR could have PHYS-CONSTRS and INTERNAL-CONSTRS in one DATA-CONSTR-RULE and could be have more than one tag DATA-CONSTR-RULE, with current logic, we only use the LOWER-LIMIT and UPPER-LIMIT of the tag INTERNAL-CONSTRS so I modify a little to make it get the lowest internal constr value and biggest internal constr value to lower/upper variables Co-authored-by: pempem98 --- src/canmatrix/formats/arxml.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index ccac96ba..041928a5 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -1208,8 +1208,23 @@ def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset if base_type is None: base_type = ea.follow_ref(test_signal, "BASE-TYPE-REF") - lower = ea.get_child(data_constr, "LOWER-LIMIT") - upper = ea.get_child(data_constr, "UPPER-LIMIT") + # Only get min/max values of the internal + lowers = ea.get_children(data_constr, "INTERNAL-CONSTRS/LOWER-LIMIT") + if not lowers: + lower = None + else: + lower = lowers[0] + for elem in lowers: + if decimal.Decimal(lower.text) > decimal.Decimal(elem.text): + lower = elem + uppers = ea.get_children(data_constr, "INTERNAL-CONSTRS/UPPER-LIMIT") + if not uppers: + upper = None + else: + upper = uppers[0] + for elem in uppers: + if decimal.Decimal(upper.text) < decimal.Decimal(elem.text): + upper = elem else: lower = ea.get_child(datatype, "LOWER-LIMIT") upper = ea.get_child(datatype, "UPPER-LIMIT") From e0871b086b049e4f83f89e3bcc514a679f8ec211 Mon Sep 17 00:00:00 2001 From: Alexandre Detiste Date: Thu, 2 May 2024 08:29:25 +0200 Subject: [PATCH 29/61] remove six usage (#784) --- setup.py | 3 --- src/canmatrix/canmatrix.py | 4 +--- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/setup.py b/setup.py index b8d1a3f4..0e7cfee0 100644 --- a/setup.py +++ b/setup.py @@ -61,7 +61,6 @@ License :: OSI Approved :: BSD License Topic :: Scientific/Engineering Programming Language :: Python -Programming Language :: Python :: 2.7 Programming Language :: Python :: 3.4 Programming Language :: Python :: 3.5 Programming Language :: Python :: 3.6 @@ -94,9 +93,7 @@ install_requires = [ "attrs>=19.2.0", "click", - "enum34; python_version < '3.4'", "importlib-metadata; python_version < '3.8'", - "six", "typing; python_version < '3.5'", ], extras_require = { diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index 4ac5c98b..f0fed0a4 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -26,8 +26,6 @@ # TODO: Definitions should be disassembled -from __future__ import absolute_import, division, print_function - import decimal import fnmatch import itertools @@ -40,7 +38,7 @@ from builtins import * import attr -from six.moves import zip_longest +from itertools import zip_longest import canmatrix.copy import canmatrix.types From 5fd23796e006fc1df323fbfc03b1644b17775ef6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Thu, 2 May 2024 08:29:39 +0200 Subject: [PATCH 30/61] implement folding excel again (#782) fixes #780 --- src/canmatrix/formats/xlsx.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/canmatrix/formats/xlsx.py b/src/canmatrix/formats/xlsx.py index c3c8371e..81d6c54b 100644 --- a/src/canmatrix/formats/xlsx.py +++ b/src/canmatrix/formats/xlsx.py @@ -137,6 +137,7 @@ def dump(db, filename, **options): # worksheet = workbook.add_worksheet('K-Matrix ' + ws_name[0:22]) worksheet = workbook.active worksheet.title = 'K-Matrix ' + worksheet.sheet_properties.outlinePr.summaryBelow = False global sty_header global sty_white @@ -264,6 +265,7 @@ def dump(db, filename, **options): write_excel_line(worksheet, row, temp_col, row_array, frame_style) row += 1 + first_fold_row = row+1 # iterate over signals for sig_idx in sorted(sig_hash.keys()): sig = sig_hash[sig_idx] @@ -279,8 +281,9 @@ def dump(db, filename, **options): for val in sorted(sig.values.keys()): row_array = canmatrix.formats.xls_common.get_frame_info(db, frame) front_col = write_excel_line(worksheet, row, 0, row_array, frame_style) -# if frame_style != sty_first_frame: -# worksheet.set_row(row, None, None, {'level': 1}) + + if row >= first_fold_row: + worksheet.row_dimensions[row+1].outline_level = 1 col = head_start col = write_ecu_matrix(ecu_list, sig, frame, worksheet, row, col, frame_style) @@ -304,12 +307,13 @@ def dump(db, filename, **options): frame_style = sty_white value_style = sty_norm # loop over values ends here + # no valuetable available else: row_array = canmatrix.formats.xls_common.get_frame_info(db, frame) front_col = write_excel_line(worksheet, row, 0, row_array, frame_style) -# if frame_style != sty_first_frame: -# worksheet.set_row(row, None, None, {'level': 1}) + if row >= first_fold_row: + worksheet.row_dimensions[row+1].outline_level = 1 col = head_start col = write_ecu_matrix(ecu_list, sig, frame, worksheet, row, col, frame_style) From 8ca6d787e5c3faceac273fb00f35204fd6ad300f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Thu, 2 May 2024 08:30:10 +0200 Subject: [PATCH 31/61] potential fix for #778 (#783) --- src/canmatrix/canmatrix.py | 6 +++--- src/canmatrix/tests/test_canmatrix.py | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index f0fed0a4..6e92bd1e 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -2337,20 +2337,20 @@ def enum_attribs_to_values(self): # type: () -> None if self.ecu_defines[define].type == "ENUM": for bu in self.ecus: if define in bu.attributes: - bu.attributes[define] = self.ecu_defines[define].values[int(bu.attributes[define])] + bu.attributes[define] = self.ecu_defines[define].values[int(float(bu.attributes[define]))] for define in self.frame_defines: if self.frame_defines[define].type == "ENUM": for frame in self.frames: if define in frame.attributes: - frame.attributes[define] = self.frame_defines[define].values[int(frame.attributes[define])] + frame.attributes[define] = self.frame_defines[define].values[int(float(frame.attributes[define]))] for define in self.signal_defines: if self.signal_defines[define].type == "ENUM": for frame in self.frames: for signal in frame.signals: if define in signal.attributes: - signal.attributes[define] = self.signal_defines[define].values[int(signal.attributes[define])] + signal.attributes[define] = self.signal_defines[define].values[int(float(signal.attributes[define]))] def enum_attribs_to_keys(self): # type: () -> None for define in self.ecu_defines: diff --git a/src/canmatrix/tests/test_canmatrix.py b/src/canmatrix/tests/test_canmatrix.py index 3c1e6330..91b87284 100644 --- a/src/canmatrix/tests/test_canmatrix.py +++ b/src/canmatrix/tests/test_canmatrix.py @@ -17,6 +17,17 @@ def test_signal_defaults_to_decimal(): assert isinstance(signal.factor, decimal.Decimal) +def test_enum_defines_from_decimal(): + db = canmatrix.CanMatrix() + db.add_frame_defines("test_enum", 'ENUM "eins","zwei","drei","vier"') + s1 = canmatrix.canmatrix.Signal('signal', size=32, is_float=True) + f1 = canmatrix.canmatrix.Frame('frame', arbitration_id=1, size=4) + f1.add_signal(s1) + f1.add_attribute("test_enum", "2.00001") + db.add_frame(f1) + db.enum_attribs_to_values() + + def test_encode_signal(): s1 = canmatrix.canmatrix.Signal('signal', size=8) assert s1.phys2raw() == 0 From 89c1a7624173576ff3cbcfdb2050c750cd80f119 Mon Sep 17 00:00:00 2001 From: xRowe <33739292+xRowe@users.noreply.github.com> Date: Thu, 23 May 2024 19:43:40 +0800 Subject: [PATCH 32/61] Add support more ARXML AUTOSAR (#788) Change E2E dict into a AutoSarE2E Class Add AutoSar SecOC Properties Improve eth reading frames change e2e dict into autosarE2E class add autosar SecOC properties v4.2.2 --- src/canmatrix/canmatrix.py | 137 ++++++++++++++----- src/canmatrix/formats/arxml.py | 242 +++++++++++++++++++-------------- 2 files changed, 247 insertions(+), 132 deletions(-) diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index 6e92bd1e..4fb44ed0 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -467,6 +467,7 @@ def raw2phys(self, value, decode_to_str=False): """ if self.is_float: value = self.float_factory(value) + if decode_to_str: for value_key, value_string in self.values.items(): if value_key == value: @@ -489,7 +490,8 @@ class SignalGroup(object): name = attr.ib() # type: str id = attr.ib() # type: int signals = attr.ib(factory=list, repr=False) # type: typing.MutableSequence[Signal] - e2e_trans = attr.ib(default=None) + e2e_properties = attr.ib(default=None) # type: Optional[AutosarE2EProperties] + secOC_properties= attr.ib(default=None) # type: Optional[AutosarSecOCProperties] def add_signal(self, signal): # type: (Signal) -> None """Add a Signal to SignalGroup. @@ -676,8 +678,6 @@ def pgn(self, value): # type: (int) -> None self.id &= 0xfc0000ff self.id |= (_pgn << 8 & 0x3FFFF00) # default pgn is None -> mypy reports error - - @property def j1939_tuple(self): # type: () -> typing.Tuple[int, int, int] """Get tuple (destination, PGN, source) @@ -788,11 +788,29 @@ class Endpoint(object): Represents a Endpoint. AUTOSAR Ethernet Frames Endpoints - """ - ip = attr.ib(default="") # type: str - port = attr.ib(default=0) # type: int + """ + server_ip = attr.ib(default="") # type: str + server_port = attr.ib(default=0) # type: int + client_ip = attr.ib(default="") # type: str + client_port = attr.ib(default=0) # type: int + + +@attr.s(eq=False) +class AutosarE2EProperties(object): + profile = attr.ib(default=None) # type: str + data_ids = attr.ib(default=None) # type: List[int] + data_length = attr.ib(default=None) # type: int +@attr.s(eq=False) +class AutosarSecOCProperties(object): + auth_algorithm = attr.ib(default="") # type: str + payload_length = attr.ib(default=0) # type: int + auth_tx_length = attr.ib(default=0) # type: int + data_id = attr.ib(default=0) # type: int + freshness_length = attr.ib(default=0) # type: int + freshness_tx_length = attr.ib(default=0) # type: int + @attr.s(eq=False) class Pdu(object): """ @@ -825,15 +843,18 @@ def add_signal(self, signal): self.signals.append(signal) return self.signals[len(self.signals) - 1] - def add_signal_group(self, Name, Id, signalNames, e2e_trans=None): - # type: (str, int, typing.Sequence[str]) -> None + def add_signal_group(self, + Name: str, + Id: int, + signalNames: typing.Sequence[str], + e2e_properties: Optional[AutosarE2EProperties] = None) -> None: """Add new SignalGroup to the Frame. Add given signals to the group. :param str Name: Group name :param int Id: Group id :param list of str signalNames: list of Signal names to add. Non existing names are ignored. """ - newGroup = SignalGroup(Name, Id, e2e_trans=e2e_trans) + newGroup = SignalGroup(Name, Id, e2e_properties=e2e_properties) self.signalGroups.append(newGroup) for signal in signalNames: signal = signal.strip() @@ -869,7 +890,7 @@ class Frame(object): """ Represents CAN Frame. - The Frame has following mandatory attributes + The Frame has following mandatory attributes * arbitration_id, * name, @@ -899,7 +920,7 @@ class Frame(object): attributes = attr.ib(factory=dict) # type: typing.MutableMapping[str, typing.Any] receivers = attr.ib(factory=list) # type: typing.MutableSequence[str] signalGroups = attr.ib(factory=list) # type: typing.MutableSequence[SignalGroup] - + cycle_time = attr.ib(default=0) # type: int is_j1939 = attr.ib(default=False) # type: bool @@ -907,11 +928,12 @@ class Frame(object): # ('sendType', '_sendType', str, None), pdus = attr.ib(factory=list) # type: typing.MutableSequence[Pdu] - header_id = attr.ib(default=None) #type: int - pdu_name = attr.ib(default="") # type: str + + header_id = attr.ib(default=None) # type: int + endpoints = attr.ib(default=None) # type: typing.MutableSequence[Endpoint] - endpoints = attr.ib(factory=dict) + secOC_properties = attr.ib(default=None) # type: Optional[AutosarSecOCProperties] @property def is_multiplexed(self): # type: () -> bool @@ -1036,15 +1058,18 @@ def __iter__(self): # type: () -> typing.Iterator[Signal] return iter(self.signals) - def add_signal_group(self, Name, Id, signalNames, e2e_trans=None): - # type: (str, int, typing.Sequence[str]) -> None + def add_signal_group(self, + Name: str, + Id: int, + signalNames: typing.Sequence[str], + e2e_properties: Optional[AutosarE2EProperties] = None) -> None: """Add new SignalGroup to the Frame. Add given signals to the group. :param str Name: Group name :param int Id: Group id :param list of str signalNames: list of Signal names to add. Non existing names are ignored. """ - newGroup = SignalGroup(Name, Id, e2e_trans=e2e_trans) + newGroup = SignalGroup(Name, Id, e2e_properties=e2e_properties) self.signalGroups.append(newGroup) for signal in signalNames: signal = signal.strip() @@ -1409,12 +1434,15 @@ def bitstring_to_signal_list(signals, big, little, size): least = most + signal.size bits = big[most:least] + unpacked.append(unpack_bitstring(signal.size, signal.is_float, signal.is_signed, bits)) return unpacked - def unpack(self, data, report_error=True): - # type: (bytes, bool) -> typing.Mapping[str, DecodedSignal] + def unpack(self, data: bytes, + allow_truncated: bool = False, + allow_exceeded: bool = False, + ) -> typing.Mapping[str, DecodedSignal]: """Return OrderedDictionary with Signal Name: object decodedSignal (flat / without support for multiplexed frames) decodes every signal in signal-list. @@ -1425,12 +1453,26 @@ def unpack(self, data, report_error=True): """ rx_length = len(data) - if rx_length != self.size and report_error: - raise DecodingFrameLength( - 'Received message 0x{self.arbitration_id.id:08X} ' - 'with length {rx_length}, expected {self.size}'.format(**locals()) - ) - elif self.is_pdu_container: + if rx_length != self.size: + msg_id = self.arbitration_id.id if self.arbitration_id.id != 0 else self.header_id + + logging.warning(f"Received message 0x{msg_id:08X} with length {rx_length}, expected {self.size}") + + if allow_truncated: + # pad the data with 0xff to prevent the codec from + # raising an exception. + data = data.ljust(self.size, b"\xFF") + + if allow_exceeded: + # trim the payload data to match the expected size + data = data[:self.size] + + if len(data) != self.size: + # return None + raise DecodingFrameLength( + f"Received message 0x{msg_id:04X} with wrong data size: {rx_length} instead of {self.size}") + + if self.is_pdu_container: header_id_signal = self.signal_by_name("Header_ID") header_dlc_signal = self.signal_by_name("Header_DLC") if header_id_signal is None or header_dlc_signal is None: @@ -1729,6 +1771,9 @@ class CanMatrix(object): ecus = attr.ib(factory=list) # type: typing.MutableSequence[Ecu] frames = attr.ib(factory=list) # type: typing.MutableSequence[Frame] + frames_dict_name = attr.ib(factory=dict) # type: typing.MutableSequence[Frame] + frames_dict_id = attr.ib(factory=dict) # type: typing.MutableSequence[Frame] + signal_defines = attr.ib(factory=dict) # type: typing.MutableMapping[str, Define] frame_defines = attr.ib(factory=dict) # type: typing.MutableMapping[str, Define] global_defines = attr.ib(factory=dict) # type: typing.MutableMapping[str, Define] @@ -1737,12 +1782,9 @@ class CanMatrix(object): value_tables = attr.ib(factory=dict) # type: typing.MutableMapping[str, typing.MutableMapping] env_vars = attr.ib(factory=dict) # type: typing.MutableMapping[str, typing.MutableMapping] signals = attr.ib(factory=list) # type: typing.MutableSequence[Signal] - baudrate = attr.ib(default=0) # type:int fd_baudrate = attr.ib(default=0) # type:int - vlan = attr.ib(default=None) # type:int - load_errors = attr.ib(factory=list) # type: typing.MutableSequence[Exception] def __iter__(self): # type: () -> typing.Iterator[Frame] @@ -1928,17 +1970,27 @@ def frame_by_id(self, arbitration_id): # type: (ArbitrationId) -> typing.Union[ # found ID while ignoring extended or standard return test return None - + def frame_by_header_id(self, header_id): # type: (HeaderId) -> typing.Union[Frame, None] """Get Frame by its Header id. + :param HeaderId header_id: Header id as canmatrix.header_id :rtype: Frame or None """ for test in self.frames: if test.header_id == header_id: - # found ID while ignoring extended or standard return test - return None + return None + + def get_frame_by_id(self, id: int + ) -> typing.Union[Frame, None]: + """Get Frame by id. + + :param str name: Frame id to search for + :rtype: Frame or None + """ + + return self.frames_dict_id[id] def frame_by_pgn(self, pgn): # type: (int) -> typing.Union[Frame, None] """Get Frame by pgn (j1939). @@ -1964,6 +2016,15 @@ def frame_by_name(self, name): # type: (str) -> typing.Union[Frame, None] if test.name == name: return test return None + + def get_frame_by_name(self, name): # type: (str) -> typing.Union[Frame, None] + """Get Frame by name. + + :param str name: Frame name to search for + :rtype: Frame or None + """ + + return self.frames_dict_name[name] def glob_frames(self, globStr): # type: (str) -> typing.List[Frame] """Find Frames by given glob pattern. @@ -2009,6 +2070,13 @@ def add_frame(self, frame): # type: (Frame) -> Frame :return: the inserted Frame """ self.frames.append(frame) + + self.frames_dict_name[frame.name] = frame + if frame.header_id: + self.frames_dict_id[frame.header_id] = frame + elif frame.arbitration_id.id: + self.frames_dict_id[frame.arbitration_id.id] = frame + return self.frames[len(self.frames) - 1] def remove_frame(self, frame): # type: (Frame) -> None @@ -2282,7 +2350,7 @@ def merge(self, mergeArray): # type: (typing.Sequence[CanMatrix]) -> None logger.error( "Name Conflict, could not copy/merge EnvVar " + envVar) - def set_fd_type(self): # type: () -> None + def set_fd_type(self) -> None: """Try to guess and set the CAN type for every frame. If a Frame is longer than 8 bytes, it must be Flexible Data Rate frame (CAN-FD). @@ -2292,7 +2360,10 @@ def set_fd_type(self): # type: () -> None if frame.size > 8: frame.is_fd = True - def encode(self, frame_id, data): # type: (ArbitrationId, typing.Mapping[str, typing.Any]) -> bytes + def encode(self, + frame_id: ArbitrationId, + data: typing.Mapping[str, typing.Any] + ) -> bytes: """Return a byte string containing the values from data packed according to the frame format. diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 041928a5..54c09be1 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -23,12 +23,14 @@ # this script exports arxml-files from a canmatrix-object # arxml-files are the can-matrix-definitions and a lot more in AUTOSAR-Context # currently Support for Autosar 3.2 and 4.0-4.3 is planned +# AUTOSAR 4.2.2 is partial support -> 2024/05/20 from __future__ import absolute_import, division, print_function -import decimal import copy +import decimal import logging +import re import typing from builtins import * @@ -38,7 +40,6 @@ import canmatrix.cancluster import canmatrix.types import canmatrix.utils -import re logger = logging.getLogger(__name__) default_float_factory = decimal.Decimal @@ -995,24 +996,24 @@ def get_signalgrp_and_signals(sys_signal, sys_signal_array, frame, group_id, ea) members = [ea.get_element_name(signal) for signal in sys_signal_array] # get data related to E2E-Protection - transform_ele = ea.follow_ref(sys_signal, "TRANSFORMER-REF") - e2e_transform = None - if transform_ele is not None: - e2e_transform = { - 'profile': ea.get_child(transform_ele, "PROFILE-NAME").text, - } - trans_isignal_propss_elem = ea.get_child( - sys_signal, "TRANSFORMATION-I-SIGNAL-PROPSS" - ) + transformer_ele = ea.follow_ref(sys_signal, "TRANSFORMER-REF") + e2e_properties = None + if transformer_ele is not None: + e2e_profile = ea.get_child(transformer_ele, "PROFILE-NAME").text + + trans_isignal_propss_elem = ea.get_child(sys_signal, "TRANSFORMATION-I-SIGNAL-PROPSS") + data_id_elems = ea.get_children(trans_isignal_propss_elem, "DATA-ID") if data_id_elems is not None: - e2e_transform['data_ids'] = [int(x.text, 0) for x in data_id_elems] + e2e_data_ids = [int(x.text, 0) for x in data_id_elems] data_len_elem = ea.get_child(trans_isignal_propss_elem, "DATA-LENGTH") if data_len_elem is not None: - e2e_transform["data_length"] = int(data_len_elem.text, 0) + e2e_data_length = int(data_len_elem.text, 0) - frame.add_signal_group(ea.get_element_name(sys_signal), group_id, members, e2e_transform) + e2e_properties = canmatrix.AutosarE2EProperties(e2e_profile, e2e_data_ids, e2e_data_length) + + frame.add_signal_group(ea.get_element_name(sys_signal), group_id, members, e2e_properties) def decode_compu_method(compu_method, ea, float_factory): @@ -1384,18 +1385,20 @@ def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset new_signal.add_attribute("ISignalName", isignal_name) if system_signal_name is not None and system_signal_name: new_signal.add_attribute("SysSignalName", system_signal_name) + existing_signal = frame.signal_by_name(new_signal.name) if existing_signal is None: frame.add_signal(new_signal) - + if ub_start_bit is not None: ub_name = name + "_UB" new_signal_ub = canmatrix.Signal(ub_name, - start_bit=int(ub_start_bit.text, 0), + start_bit = int(ub_start_bit.text, 0), size = 1, is_signed = False) frame.add_signal(new_signal_ub) + def get_frame_from_multiplexed_ipdu(pdu, target_frame, multiplex_translation, ea, float_factory): selector_byte_order = ea.get_child(pdu, "SELECTOR-FIELD-BYTE-ORDER") selector_len = ea.get_child(pdu, "SELECTOR-FIELD-LENGTH") @@ -1594,8 +1597,27 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header # pdu_name = ea.get_element_name(pdu) # target_pdu = canmatrix.Pdu(name=pdu_name) - + + secOC_properties = None if pdu is not None and 'SECURED-I-PDU' in pdu.tag: + payload_length = ea.get_child(pdu, "LENGTH").text + + secured_ipdu_SecoC = ea.get_child(pdu, "SECURE-COMMUNICATION-PROPS") + + auth_algorithm = ea.get_child(secured_ipdu_SecoC, "AUTH-ALGORITHM").text + auth_tx_length = ea.get_child(secured_ipdu_SecoC, "AUTH-INFO-TX-LENGTH").text + data_id = ea.get_child(secured_ipdu_SecoC, "DATA-ID").text + freshness_bit_length = ea.get_child(secured_ipdu_SecoC, "FRESHNESS-VALUE-LENGTH").text + freshness_tx_length = ea.get_child(secured_ipdu_SecoC, "FRESHNESS-VALUE-TX-LENGTH").text + + secOC_properties = canmatrix.AutosarSecOCProperties(auth_algorithm, + int(payload_length, 0), + int(auth_tx_length, 0), + int(data_id, 0), + int(freshness_bit_length, 0), + int(freshness_tx_length, 0) + ) + ipdu = ea.selector(pdu, ">PAYLOAD-REF>I-PDU-REF") if not ipdu: logger.error("SecuredIPdu %r is missing Payload", ea.get_short_name(pdu)) @@ -1603,8 +1625,29 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header pdu = ipdu[0] - new_frame = canmatrix.Frame(ea.get_element_name(frame_elem), size=int(dlc_elem.text, 0)) + ipdu_length = ea.get_child(pdu, "LENGTH").text + + new_frame = canmatrix.Frame(ea.get_element_name(frame_elem), size=int(dlc_elem.text, 0), secOC_properties=secOC_properties) # new_frame.add_pdu(target_pdu) + + if secOC_properties is not None: + if freshness_tx_length is not None and int(freshness_tx_length, 0) > 0: + freshness_name = f"{ea.get_element_name(frame_elem)}_Freshness" + signal_freshness = canmatrix.Signal(freshness_name, + start_bit = int(ipdu_length, 0)*8 + int(freshness_tx_length, 0) - 8, + size = int(freshness_tx_length, 0), + is_signed = False, + is_little_endian = False) + new_frame.add_signal(signal_freshness) + + if auth_tx_length is not None and int(auth_tx_length, 0) > 0: + authinfo_name = f"{ea.get_element_name(frame_elem)}_AuthInfo" + signal_authinfo = canmatrix.Signal(authinfo_name, + start_bit = int(ipdu_length, 0)*8 + int(freshness_tx_length, 0) + int(auth_tx_length, 0) - 8, + size = int(auth_tx_length, 0), + is_signed = False, + is_little_endian = False) + new_frame.add_signal(signal_authinfo) comment = ea.get_element_desc(frame_elem) if pdu is not None: @@ -1810,7 +1853,7 @@ def decode_ethernet_helper(ea, float_factory): socket_connetions = ea.findall("SOCKET-CONNECTION-IPDU-IDENTIFIER") pdu_triggering_header_id_map = {} - # network_endpoints = pc.findall('.//' + ns + "NETWORK-ENDPOINT") + for socket_connetion in socket_connetions: header_id = ea.get_child(socket_connetion, "HEADER-ID") ipdu_triggering = ea.follow_ref(socket_connetion, "PDU-TRIGGERING-REF") @@ -1828,7 +1871,7 @@ def decode_ethernet_helper(ea, float_factory): db = canmatrix.CanMatrix(type=canmatrix.matrix_class.SOMEIP) db.baudrate = int(baudrate_elem.text, 0) if baudrate_elem is not None else 0 - # db.add_signal_defines("LongName", 'STRING') + channel_name = ea.get_element_name(pc) vlan = ea.get_child(pc, "VLAN") @@ -1847,88 +1890,89 @@ def decode_ethernet_helper(ea, float_factory): server_ipv4 = ea.find("IPV-4-ADDRESS", server_endpoint_ref) # Get Client Endpoint Info - socket_connection = ea.get_child(socket_connection_bundle, "SOCKET-CONNECTION") - client_port_ref = ea.follow_ref(socket_connection, "CLIENT-PORT-REF") - client_port = ea.find("PORT-NUMBER", client_port_ref) - - client_app_endpoint = ea.get_child(client_port_ref, "APPLICATION-ENDPOINT") - client_endpoint_ref = ea.follow_ref(client_app_endpoint, "NETWORK-ENDPOINT-REF") - client_ipv4 = ea.find("IPV-4-ADDRESS", client_endpoint_ref) - - server = canmatrix.Endpoint(server_ipv4.text, int(server_port.text, 0)) - client = canmatrix.Endpoint(client_ipv4.text, int(client_port.text, 0)) - - for scii in ea.findall("SOCKET-CONNECTION-IPDU-IDENTIFIER", socket_connection): - header_id = ea.get_child(scii, "HEADER-ID") - ipdu_triggering = ea.follow_ref(scii, "PDU-TRIGGERING-REF") - - # Maybe Here can use a more efficent way - ipdu_receivers_ref = ea.get_child(ipdu_triggering, "I-PDU-PORT-REFS") - ipdu_receivers = [ea.follow_ref(ipdu_receivers_ref, "I-PDU-PORT-REF")] - for receiver in ipdu_receivers: - comm_direction = ea.get_child(receiver, "COMMUNICATION-DIRECTION") - ecu_elem = ea.get_ecu_instance(element=comm_direction) - if ecu_elem is not None: - if ecu_elem in nodes: - ecu = nodes[ecu_elem] - else: - ecu = process_ecu(ecu_elem, ea) - nodes[ecu_elem] = ecu - # db.add_ecu(ecu) - - ipdu = ea.follow_ref(ipdu_triggering, "I-PDU-REF") - - # Size - ipdu_length = int(ea.get_child(ipdu, "LENGTH").text, 0) - - # Cycle-Time - timing_spec = ea.get_child(ipdu, "I-PDU-TIMING-SPECIFICATION") - if timing_spec is None: - timing_spec = ea.get_child(ipdu, "I-PDU-TIMING-SPECIFICATIONS") - cyclic_timing = ea.get_child(timing_spec, "CYCLIC-TIMING") - time_period = ea.get_child(cyclic_timing, "TIME-PERIOD") - value = ea.get_child(time_period, "VALUE") - if value is not None: - cycle_time = int(float_factory(value.text) * 1000) - else: + socket_connections = ea.get_children(socket_connection_bundle, "SOCKET-CONNECTION") + for socket_connection in socket_connections: + client_port_ref = ea.follow_ref(socket_connection, "CLIENT-PORT-REF") + client_port = ea.find("PORT-NUMBER", client_port_ref) + + client_app_endpoint = ea.get_child(client_port_ref, "APPLICATION-ENDPOINT") + client_endpoint_ref = ea.follow_ref(client_app_endpoint, "NETWORK-ENDPOINT-REF") + client_ipv4 = ea.find("IPV-4-ADDRESS", client_endpoint_ref) + + endpoint = canmatrix.Endpoint(server_ipv4.text, int(server_port.text, 0), + client_ipv4.text, int(client_port.text, 0)) + + for scii in ea.findall("SOCKET-CONNECTION-IPDU-IDENTIFIER", socket_connection): + + header_id = ea.get_child(scii, "HEADER-ID") + ipdu_triggering = ea.follow_ref(scii, "PDU-TRIGGERING-REF") + + # Maybe Here can use a more efficent way + ipdu_receivers_refs = ea.get_children(ipdu_triggering, "I-PDU-PORT-REFS") + ipdu_receivers = [ea.follow_ref(receiver, "I-PDU-PORT-REF") for receiver in ipdu_receivers_refs] + for receiver in ipdu_receivers: + comm_direction = ea.get_child(receiver, "COMMUNICATION-DIRECTION") + ecu_elem = ea.get_ecu_instance(element=comm_direction) + if ecu_elem is not None: + if ecu_elem in nodes: + ecu = nodes[ecu_elem] + else: + ecu = process_ecu(ecu_elem, ea) + nodes[ecu_elem] = ecu + # db.add_ecu(ecu) + + ipdu = ea.follow_ref(ipdu_triggering, "I-PDU-REF") + + # Size + ipdu_length = int(ea.get_child(ipdu, "LENGTH").text, 0) + + # Cycle-Time + timing_spec = ea.get_child(ipdu, "I-PDU-TIMING-SPECIFICATION") + if timing_spec is None: + timing_spec = ea.get_child(ipdu, "I-PDU-TIMING-SPECIFICATIONS") + cyclic_timing = ea.get_child(timing_spec, "CYCLIC-TIMING") + time_period = ea.get_child(cyclic_timing, "TIME-PERIOD") + value = ea.get_child(time_period, "VALUE") cycle_time = 0 - - if ipdu is not None and 'SECURED-I-PDU' in ipdu.tag: - payload = ea.follow_ref(ipdu, "PAYLOAD-REF") - if payload is None: - logger.error( - "SecuredIPdu %r is missing Payload", ea.get_short_name(ipdu) - ) - continue - ipdu = ea.follow_ref(payload, "I-PDU-REF") - if ipdu is None: - logger.error( - "PduTriggering %r is missing IPdu", ea.get_short_name(payload) - ) - continue + if value is not None: + cycle_time = int(float_factory(value.text) * 1000) + + # print(ipdu.tag) + # if ipdu is not None and 'SECURED-I-PDU' in ipdu.tag: + # print("get IN?") + # payload = ea.follow_ref(ipdu, "PAYLOAD-REF") + # if payload is None: + # logger.error("SecuredIPdu %r is missing Payload", ea.get_short_name(ipdu)) + # continue + # ipdu = ea.follow_ref(payload, "I-PDU-REF") + # if ipdu is None: + # logger.error("PduTriggering %r is missing IPdu", ea.get_short_name(payload)) + # continue + + ipdu_name = ea.get_element_name(ipdu) + logger.info("ETH PDU " + ipdu_name + " found") + target_frame = canmatrix.Frame(name=ipdu_name, cycle_time=cycle_time, size=ipdu_length, endpoints=endpoint) - ipdu_name = ea.get_element_name(ipdu) - logger.info("ETH PDU " + ipdu_name + " found") - target_frame = canmatrix.Frame(name=ipdu_name,cycle_time=cycle_time,size=ipdu_length,endpoints={"server": server, "client": client}) - try: - target_frame.header_id = int(header_id.text, 0) - except: try: - target_frame.header_id = int(pdu_triggering_header_id_map[ipdu_triggering], 0) + target_frame.header_id = int(header_id.text, 0) except: - target_frame.header_id = 0 - # continue - - if comm_direction.text == "OUT": - target_frame.add_transmitter(ecu.name) - else: - target_frame.add_receiver(ecu.name) - - pdu_sig_mapping = ea.findall("I-SIGNAL-TO-I-PDU-MAPPING", ipdu) - - get_signals(pdu_sig_mapping, target_frame, ea, None, float_factory) - target_frame.update_receiver() - db.add_frame(target_frame) + try: + target_frame.header_id = int(pdu_triggering_header_id_map[ipdu_triggering], 0) + except: + target_frame.header_id = 0 + # continue + + if comm_direction.text == "OUT": + target_frame.add_transmitter(ecu.name) + else: + target_frame.add_receiver(ecu.name) + + pdu_sig_mapping = ea.findall("I-SIGNAL-TO-I-PDU-MAPPING", ipdu) + + get_signals(pdu_sig_mapping, target_frame, ea, None, float_factory) + target_frame.update_receiver() + db.add_frame(target_frame) + return found_matrixes @@ -1982,7 +2026,7 @@ def decode_can_helper(ea, float_factory, ignore_cluster_info): if ignore_cluster_info is True: ccs = [lxml.etree.Element("ignoreClusterInfo")] # type: typing.Sequence[_Element] else: - ccs = ea.findall('CAN-CLUSTER') + ea.findall('J-1939-CLUSTER') + ccs = ea.findall('CAN-CLUSTER') + ea.findall('J-1939-CLUSTER') headers_are_littleendian = containters_are_little_endian(ea) nodes = {} # type: typing.Dict[_Element, canmatrix.Ecu] From e8e40ca5260a80e3f6c22f05361fa7d719e92223 Mon Sep 17 00:00:00 2001 From: SabrineBH Date: Fri, 31 May 2024 22:56:03 +0100 Subject: [PATCH 33/61] Add Base-Data-Type and Category attributes for 32 bit length signals (#794) * Update fibex.py --- src/canmatrix/formats/fibex.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index 1f224332..cd643426 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -129,6 +129,36 @@ def get_multiplexing_parts_infos(signals, frame_name, start_pos=-1, end_pos=-1, return start_pos, end_pos, seg_big_endian +def get_base_data_type(bit_length, is_signed=False): + # type: (int, bool) -> str + if bit_length == 8: + if is_signed: + return "A_INT8" + + elif not is_signed: + return "A_UINT8" + + elif bit_length == 16: + if is_signed: + return "A_INT16" + + elif not is_signed: + return "A_UINT16" + + elif bit_length == 32: + if is_signed: + return "A_INT32" + + elif not is_signed: + return "A_UINT32" + + elif bit_length == 64: + if is_signed: + return "A_INT64" + + elif not is_signed: + return "A_UINT64" + class Fe: def __init__(self, filename): @@ -759,6 +789,10 @@ def dump(db, f, **options): signal_id) coded = create_sub_element_ho(coding, "CODED-TYPE") + base_data_type = get_base_data_type(signal.size, signal.is_signed) + if base_data_type is not None: + coded.set(ns_ho + "BASE-DATA-TYPE", base_data_type) + coded.set("CATEGORY", "STANDARD-LENGTH-TYPE") create_sub_element_ho(coded, "BIT-LENGTH", str(signal.size)) compu_methods = create_sub_element_ho(coding, "COMPU-METHODS") From c1a7eb5feb91315a1e045ad5fa38475a7b355d97 Mon Sep 17 00:00:00 2001 From: xRowe <33739292+xRowe@users.noreply.github.com> Date: Sat, 1 Jun 2024 05:57:41 +0800 Subject: [PATCH 34/61] Fix #789 (#791) --- src/canmatrix/canmatrix.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index 4fb44ed0..4fa95065 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -847,7 +847,7 @@ def add_signal_group(self, Name: str, Id: int, signalNames: typing.Sequence[str], - e2e_properties: Optional[AutosarE2EProperties] = None) -> None: + e2e_properties: typing.Optional[AutosarE2EProperties] = None) -> None: """Add new SignalGroup to the Frame. Add given signals to the group. :param str Name: Group name @@ -1062,7 +1062,7 @@ def add_signal_group(self, Name: str, Id: int, signalNames: typing.Sequence[str], - e2e_properties: Optional[AutosarE2EProperties] = None) -> None: + e2e_properties: typing.Optional[AutosarE2EProperties] = None) -> None: """Add new SignalGroup to the Frame. Add given signals to the group. :param str Name: Group name From db8298db50c06e73e8052ffa4ae8a26f2f49fcee Mon Sep 17 00:00:00 2001 From: Jerry Mailloux Date: Wed, 5 Jun 2024 04:51:09 -0400 Subject: [PATCH 35/61] Don't use the db's GenSigStartValue to set (#795) individual signal's start values. That could make them be set outside of the min / max values they have. --- src/canmatrix/canmatrix.py | 24 ++++++++++++------------ src/canmatrix/formats/dbc.py | 13 ++----------- 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index 4fa95065..abcb695c 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -467,7 +467,7 @@ def raw2phys(self, value, decode_to_str=False): """ if self.is_float: value = self.float_factory(value) - + if decode_to_str: for value_key, value_string in self.values.items(): if value_key == value: @@ -920,7 +920,7 @@ class Frame(object): attributes = attr.ib(factory=dict) # type: typing.MutableMapping[str, typing.Any] receivers = attr.ib(factory=list) # type: typing.MutableSequence[str] signalGroups = attr.ib(factory=list) # type: typing.MutableSequence[SignalGroup] - + cycle_time = attr.ib(default=0) # type: int is_j1939 = attr.ib(default=False) # type: bool @@ -932,7 +932,7 @@ class Frame(object): header_id = attr.ib(default=None) # type: int endpoints = attr.ib(default=None) # type: typing.MutableSequence[Endpoint] - + secOC_properties = attr.ib(default=None) # type: Optional[AutosarSecOCProperties] @property @@ -1439,7 +1439,7 @@ def bitstring_to_signal_list(signals, big, little, size): return unpacked - def unpack(self, data: bytes, + def unpack(self, data: bytes, allow_truncated: bool = False, allow_exceeded: bool = False, ) -> typing.Mapping[str, DecodedSignal]: @@ -1466,7 +1466,7 @@ def unpack(self, data: bytes, if allow_exceeded: # trim the payload data to match the expected size data = data[:self.size] - + if len(data) != self.size: # return None raise DecodingFrameLength( @@ -1614,7 +1614,7 @@ def decode(self, data): else: return decoded - + def _compress_little(self): for signal in self.signals: if not signal.is_little_endian: @@ -1635,7 +1635,7 @@ def _compress_little(self): gap_len += 1 else: if gap_len is not None: - signal = layout[bit_nr][0] + signal = layout[bit_nr][0] signal.start_bit -= gap_len gap_found = True break @@ -1657,7 +1657,7 @@ def compress(self): free_start = bit_nr else: if free_start is not None: - signal = layout[bit_nr][0] + signal = layout[bit_nr][0] signal.start_bit = free_start gap_found = True break @@ -1970,7 +1970,7 @@ def frame_by_id(self, arbitration_id): # type: (ArbitrationId) -> typing.Union[ # found ID while ignoring extended or standard return test return None - + def frame_by_header_id(self, header_id): # type: (HeaderId) -> typing.Union[Frame, None] """Get Frame by its Header id. @@ -2016,7 +2016,7 @@ def frame_by_name(self, name): # type: (str) -> typing.Union[Frame, None] if test.name == name: return test return None - + def get_frame_by_name(self, name): # type: (str) -> typing.Union[Frame, None] """Get Frame by name. @@ -2360,8 +2360,8 @@ def set_fd_type(self) -> None: if frame.size > 8: frame.is_fd = True - def encode(self, - frame_id: ArbitrationId, + def encode(self, + frame_id: ArbitrationId, data: typing.Mapping[str, typing.Any] ) -> bytes: """Return a byte string containing the values from data packed diff --git a/src/canmatrix/formats/dbc.py b/src/canmatrix/formats/dbc.py index 6f67fd3b..ffe3ffa9 100644 --- a/src/canmatrix/formats/dbc.py +++ b/src/canmatrix/formats/dbc.py @@ -238,12 +238,7 @@ def dump(in_db, f, **options): if signal.cycle_time != 0: signal.add_attribute("GenSigCycleTime", signal.cycle_time) if "GenSigStartValue" in db.signal_defines: - if signal.phys2raw(None) != 0: - if db.signal_defines["GenSigStartValue"].defaultValue is not None and \ - float(signal.initial_value) != float(db.signal_defines["GenSigStartValue"].defaultValue): - signal.add_attribute("GenSigStartValue", signal.phys2raw(float(db.signal_defines["GenSigStartValue"].defaultValue))) - elif db.signal_defines["GenSigStartValue"].defaultValue is None: - signal.add_attribute("GenSigStartValue", signal.phys2raw(None)) + signal.add_attribute("GenSigStartValue", signal.phys2raw(None)) name = normalized_names[signal] if compatibility: @@ -955,11 +950,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None # frame.extended = 1 for signal in frame.signals: - if "GenSigStartValue" in db.signal_defines \ - and db.signal_defines["GenSigStartValue"].defaultValue is not None: - default_value = signal.phys2raw(float_factory(db.signal_defines["GenSigStartValue"].defaultValue)) - else: - default_value = signal.phys2raw(None) + default_value = signal.phys2raw(None) gen_sig_start_value = float_factory(signal.attributes.get("GenSigStartValue", default_value)) signal.initial_value = (gen_sig_start_value * signal.factor) + signal.offset signal.cycle_time = int(signal.attributes.get("GenSigCycleTime", 0)) From 8b751faab12d590de316cc5f7b43b2f43680c506 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Thu, 20 Jun 2024 14:32:35 +0200 Subject: [PATCH 36/61] fix reading additionalFrameAttributes and additionalSignalAttributes (#800) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Eduard Bröcker --- src/canmatrix/formats/xlsx.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/formats/xlsx.py b/src/canmatrix/formats/xlsx.py index 81d6c54b..5f24348a 100644 --- a/src/canmatrix/formats/xlsx.py +++ b/src/canmatrix/formats/xlsx.py @@ -368,7 +368,7 @@ def load(file, **options): ecu_start = ecu_end = 0 - column_heads = [sheet.cell(1,a).value for a in range(1, sheet.max_column)] + column_heads = [sheet.cell(1,a).value for a in range(1, sheet.max_column+1)] if 'Byteorder' in column_heads: ecu_start = column_heads.index('Byteorder') + 1 @@ -407,6 +407,7 @@ def get_if_possible(my_row, my_value, default=None): cycle_time = get_if_possible(row, 'Cycle Time [ms]', '0') launch_type = get_if_possible(row, 'Launch Type') dlc = 8 + # launch_param = get_if_possible(row, 'Launch Parameter', '0') # launch_param = str(int(launch_param)) @@ -415,6 +416,12 @@ def get_if_possible(my_row, my_value, default=None): else: new_frame = canmatrix.Frame(frame_name, arbitration_id=int(frame_id[:-1], 16), size=dlc) + for col_head in column_heads: + if col_head.startswith("frame."): + command_str = col_head.replace("frame", "new_frame") + command_str += "=" + str(row[column_heads.index(col_head)].value) + exec(command_str) + db.add_frame(new_frame) # eval launch_type @@ -482,6 +489,7 @@ def get_if_possible(my_row, my_value, default=None): bitNumbering=1, startLittle=True ) + if signal_name is not None: new_frame.add_signal(new_signal) new_signal.add_comment(signal_comment) @@ -534,6 +542,14 @@ def get_if_possible(my_row, my_value, default=None): new_signal.min = None new_signal.max = None + for col_head in column_heads: # todo explain this possibly dangerous code with eval + if col_head.startswith("signal."): + command_str = col_head.replace("signal", "new_signal") + command_str += "=" + str(row[column_heads.index(col_head)].value) + exec(command_str) + + + # dlc-estimation / dlc is not in xls, thus calculate a minimum-dlc: for frame in db.frames: frame.update_receiver() From a590f389836de543f473bcdf3726dd596c3925ef Mon Sep 17 00:00:00 2001 From: xRowe <33739292+xRowe@users.noreply.github.com> Date: Fri, 21 Jun 2024 15:35:22 +0800 Subject: [PATCH 37/61] Add Support for Github Actions workflows (#798) * Move all tests file tests folder in root path * Update tox.ini * Create ci.yml * Update test file to support workflows * Move all tests file tests folder in root path * Adapted arxml.py to satisefied Test File * Update Test & be able to Encode with phys data * Update ci.yml * Update setup.py to satify workflows * revert some change & Correct phys2raw & Revert to use Pathlib in cli.compare cli.convert * Update Arxml Ethernet Endpoints -Add TTL --- .github/workflows/ci.yml | 152 ++++ cmTemplate.xlsx | Bin 10675 -> 0 bytes setup.py | 1 + src/canmatrix/canmatrix.py | 22 +- src/canmatrix/cli/compare.py | 2 +- src/canmatrix/cli/convert.py | 4 +- src/canmatrix/convert.py | 15 +- src/canmatrix/copy.py | 2 +- src/canmatrix/formats/arxml.py | 49 +- src/canmatrix/formats/odx.py | 4 +- src/canmatrix/log.py | 4 +- src/canmatrix/tests/tmp.dbc | 22 - src/canmatrix/tests/tmp.tmp | 63 -- src/canmatrix/tests/tmpa.dbc | 22 - src/canmatrix/tests/tmpb.dbc | 29 - test/test_codec.py | 110 --- {test => tests}/README | 0 {src/canmatrix/tests => tests}/__init__.py | 0 {test => tests}/createTestFdMatrix.py | 0 {test => tests}/createTestMatrix.py | 0 .../files/arxml}/ARXMLCompuMethod1.arxml | 0 .../files/arxml}/ARXMLContainerTest.arxml | 0 .../files/arxml}/ARXMLSecuredPDUTest.arxml | 0 .../files/arxml}/ARXML_min_max.arxml | 0 .../files/arxml}/MyECU.ecuc.arxml | 0 {test => tests/files/arxml}/test.arxml | 0 aa.dbc => tests/files/dbc/aa.dbc | 0 {test => tests/files/dbc}/test.dbc | 0 .../files/dbc}/test_frame_decoding.dbc | 0 {test => tests/files/dbf}/test.dbf | 178 ++-- {test => tests/files/json}/test.json | 0 {test => tests/files/kcd}/test.kcd | 0 {test => tests/files/sym}/test.sym | 838 +++++++++--------- .../from_sym => tests/files/xlsx}/test.xls | Bin {test => tests/files/xlsx}/test.xlsx | Bin {test => tests}/reference/from_arxml/test.kcd | 0 .../reference/from_arxml/test_CAN.csv | 782 ++++++++-------- .../reference/from_arxml/test_CAN.dbc | 0 .../reference/from_arxml/test_CAN.dbf | 0 .../reference/from_arxml/test_CAN.json | 0 .../reference/from_arxml/test_CAN.sym | 0 .../reference/from_arxml/test_CAN.xls | Bin .../reference/from_arxml/test_CAN.xlsx | Bin .../reference/from_arxml/test_CAN.xml | 0 .../reference/from_arxml/test_CAN.yaml | 0 {test => tests}/reference/from_dbc/test.arxml | 0 {test => tests}/reference/from_dbc/test.csv | 10 +- {test => tests}/reference/from_dbc/test.dbf | 0 {test => tests}/reference/from_dbc/test.json | 0 {test => tests}/reference/from_dbc/test.kcd | 0 {test => tests}/reference/from_dbc/test.sym | 0 {test => tests}/reference/from_dbc/test.xls | Bin {test => tests}/reference/from_dbc/test.xlsx | Bin {test => tests}/reference/from_dbc/test.xml | 0 {test => tests}/reference/from_dbc/test.yaml | 0 {test => tests}/reference/from_dbf/test.arxml | 0 {test => tests}/reference/from_dbf/test.csv | 10 +- {test => tests}/reference/from_dbf/test.dbc | 0 {test => tests}/reference/from_dbf/test.json | 0 {test => tests}/reference/from_dbf/test.kcd | 0 {test => tests}/reference/from_dbf/test.sym | 0 {test => tests}/reference/from_dbf/test.xls | Bin {test => tests}/reference/from_dbf/test.xlsx | Bin {test => tests}/reference/from_dbf/test.xml | 0 {test => tests}/reference/from_dbf/test.yaml | 0 .../reference/from_json/test.arxml | 0 {test => tests}/reference/from_json/test.csv | 6 +- {test => tests}/reference/from_json/test.dbc | 0 {test => tests}/reference/from_json/test.dbf | 0 {test => tests}/reference/from_json/test.kcd | 0 {test => tests}/reference/from_json/test.sym | 0 {test => tests}/reference/from_json/test.xls | Bin {test => tests}/reference/from_json/test.xlsx | Bin {test => tests}/reference/from_json/test.xml | 0 {test => tests}/reference/from_json/test.yaml | 0 {test => tests}/reference/from_kcd/test.arxml | 0 .../reference/from_kcd/test_test.kcd.csv | 780 ++++++++-------- .../reference/from_kcd/test_test.kcd.dbc | 0 .../reference/from_kcd/test_test.kcd.dbf | 0 .../reference/from_kcd/test_test.kcd.json | 0 .../reference/from_kcd/test_test.kcd.sym | 0 .../reference/from_kcd/test_test.kcd.xls | Bin .../reference/from_kcd/test_test.kcd.xlsx | Bin .../reference/from_kcd/test_test.kcd.xml | 0 .../reference/from_kcd/test_test.kcd.yaml | 0 {test => tests}/reference/from_sym/test.arxml | 0 {test => tests}/reference/from_sym/test.csv | 782 ++++++++-------- {test => tests}/reference/from_sym/test.dbc | 0 {test => tests}/reference/from_sym/test.dbf | 0 {test => tests}/reference/from_sym/test.json | 0 {test => tests}/reference/from_sym/test.kcd | 0 {test => tests/reference/from_sym}/test.xls | Bin {test => tests}/reference/from_sym/test.xlsx | Bin {test => tests}/reference/from_sym/test.xml | 0 {test => tests}/reference/from_sym/test.yaml | 0 {test => tests}/reference/from_xls/test.arxml | 0 {test => tests}/reference/from_xls/test.csv | 780 ++++++++-------- {test => tests}/reference/from_xls/test.dbc | 0 {test => tests}/reference/from_xls/test.dbf | 0 {test => tests}/reference/from_xls/test.json | 0 {test => tests}/reference/from_xls/test.kcd | 0 {test => tests}/reference/from_xls/test.sym | 0 {test => tests}/reference/from_xls/test.xlsx | Bin {test => tests}/reference/from_xls/test.xml | 0 {test => tests}/reference/from_xls/test.yaml | 0 .../reference/from_xlsx/test.arxml | 0 {test => tests}/reference/from_xlsx/test.csv | 780 ++++++++-------- {test => tests}/reference/from_xlsx/test.dbc | 0 {test => tests}/reference/from_xlsx/test.dbf | 0 {test => tests}/reference/from_xlsx/test.json | 0 {test => tests}/reference/from_xlsx/test.kcd | 0 {test => tests}/reference/from_xlsx/test.sym | 0 {test => tests}/reference/from_xlsx/test.xls | Bin {test => tests}/reference/from_xlsx/test.xml | 0 {test => tests}/reference/from_xlsx/test.yaml | 0 {test => tests}/test.py | 0 {src/canmatrix/tests => tests}/test_arxml.py | 23 +- .../tests => tests}/test_arxml_gw.py | 0 .../tests => tests}/test_canmatrix.py | 4 +- .../tests => tests}/test_cli_compare.py | 40 +- .../tests => tests}/test_cli_convert.py | 143 +-- tests/test_codec.py | 117 +++ {src/canmatrix/tests => tests}/test_copy.py | 1 + {src/canmatrix/tests => tests}/test_dbc.py | 1 - {src/canmatrix/tests => tests}/test_dbf.py | 0 .../canmatrix/tests => tests}/test_formats.py | 0 .../tests => tests}/test_frame_decoding.py | 4 +- .../tests => tests}/test_frame_encoding.py | 6 +- .../tests => tests}/test_j1939_decoder.py | 0 {src/canmatrix/tests => tests}/test_json.py | 0 {src/canmatrix/tests => tests}/test_scapy.py | 11 +- {src/canmatrix/tests => tests}/test_sym.py | 0 {src/canmatrix/tests => tests}/test_utils.py | 0 .../tests => tests}/test_wireshark.py | 6 +- {src/canmatrix/tests => tests}/test_xls.py | 0 tox.ini | 88 +- 136 files changed, 2981 insertions(+), 2910 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 cmTemplate.xlsx delete mode 100644 src/canmatrix/tests/tmp.dbc delete mode 100644 src/canmatrix/tests/tmp.tmp delete mode 100644 src/canmatrix/tests/tmpa.dbc delete mode 100644 src/canmatrix/tests/tmpb.dbc delete mode 100755 test/test_codec.py rename {test => tests}/README (100%) rename {src/canmatrix/tests => tests}/__init__.py (100%) rename {test => tests}/createTestFdMatrix.py (100%) mode change 100755 => 100644 rename {test => tests}/createTestMatrix.py (100%) mode change 100755 => 100644 rename {src/canmatrix/tests => tests/files/arxml}/ARXMLCompuMethod1.arxml (100%) rename {src/canmatrix/tests => tests/files/arxml}/ARXMLContainerTest.arxml (100%) rename {src/canmatrix/tests => tests/files/arxml}/ARXMLSecuredPDUTest.arxml (100%) rename {src/canmatrix/tests => tests/files/arxml}/ARXML_min_max.arxml (100%) rename {src/canmatrix/tests => tests/files/arxml}/MyECU.ecuc.arxml (100%) rename {test => tests/files/arxml}/test.arxml (100%) rename aa.dbc => tests/files/dbc/aa.dbc (100%) rename {test => tests/files/dbc}/test.dbc (100%) rename {src/canmatrix/tests => tests/files/dbc}/test_frame_decoding.dbc (100%) rename {test => tests/files/dbf}/test.dbf (94%) rename {test => tests/files/json}/test.json (100%) rename {test => tests/files/kcd}/test.kcd (100%) rename {test => tests/files/sym}/test.sym (98%) rename {test/reference/from_sym => tests/files/xlsx}/test.xls (100%) rename {test => tests/files/xlsx}/test.xlsx (100%) rename {test => tests}/reference/from_arxml/test.kcd (100%) rename {test => tests}/reference/from_arxml/test_CAN.csv (99%) rename {test => tests}/reference/from_arxml/test_CAN.dbc (100%) rename {test => tests}/reference/from_arxml/test_CAN.dbf (100%) rename {test => tests}/reference/from_arxml/test_CAN.json (100%) rename {test => tests}/reference/from_arxml/test_CAN.sym (100%) rename {test => tests}/reference/from_arxml/test_CAN.xls (100%) rename {test => tests}/reference/from_arxml/test_CAN.xlsx (100%) rename {test => tests}/reference/from_arxml/test_CAN.xml (100%) rename {test => tests}/reference/from_arxml/test_CAN.yaml (100%) rename {test => tests}/reference/from_dbc/test.arxml (100%) rename {test => tests}/reference/from_dbc/test.csv (99%) rename {test => tests}/reference/from_dbc/test.dbf (100%) rename {test => tests}/reference/from_dbc/test.json (100%) rename {test => tests}/reference/from_dbc/test.kcd (100%) rename {test => tests}/reference/from_dbc/test.sym (100%) rename {test => tests}/reference/from_dbc/test.xls (100%) rename {test => tests}/reference/from_dbc/test.xlsx (100%) rename {test => tests}/reference/from_dbc/test.xml (100%) rename {test => tests}/reference/from_dbc/test.yaml (100%) rename {test => tests}/reference/from_dbf/test.arxml (100%) rename {test => tests}/reference/from_dbf/test.csv (99%) rename {test => tests}/reference/from_dbf/test.dbc (100%) rename {test => tests}/reference/from_dbf/test.json (100%) rename {test => tests}/reference/from_dbf/test.kcd (100%) rename {test => tests}/reference/from_dbf/test.sym (100%) rename {test => tests}/reference/from_dbf/test.xls (100%) rename {test => tests}/reference/from_dbf/test.xlsx (100%) rename {test => tests}/reference/from_dbf/test.xml (100%) rename {test => tests}/reference/from_dbf/test.yaml (100%) rename {test => tests}/reference/from_json/test.arxml (100%) rename {test => tests}/reference/from_json/test.csv (99%) rename {test => tests}/reference/from_json/test.dbc (100%) rename {test => tests}/reference/from_json/test.dbf (100%) rename {test => tests}/reference/from_json/test.kcd (100%) rename {test => tests}/reference/from_json/test.sym (100%) rename {test => tests}/reference/from_json/test.xls (100%) rename {test => tests}/reference/from_json/test.xlsx (100%) rename {test => tests}/reference/from_json/test.xml (100%) rename {test => tests}/reference/from_json/test.yaml (100%) rename {test => tests}/reference/from_kcd/test.arxml (100%) rename {test => tests}/reference/from_kcd/test_test.kcd.csv (99%) rename {test => tests}/reference/from_kcd/test_test.kcd.dbc (100%) rename {test => tests}/reference/from_kcd/test_test.kcd.dbf (100%) rename {test => tests}/reference/from_kcd/test_test.kcd.json (100%) rename {test => tests}/reference/from_kcd/test_test.kcd.sym (100%) rename {test => tests}/reference/from_kcd/test_test.kcd.xls (100%) rename {test => tests}/reference/from_kcd/test_test.kcd.xlsx (100%) rename {test => tests}/reference/from_kcd/test_test.kcd.xml (100%) rename {test => tests}/reference/from_kcd/test_test.kcd.yaml (100%) rename {test => tests}/reference/from_sym/test.arxml (100%) rename {test => tests}/reference/from_sym/test.csv (99%) rename {test => tests}/reference/from_sym/test.dbc (100%) rename {test => tests}/reference/from_sym/test.dbf (100%) rename {test => tests}/reference/from_sym/test.json (100%) rename {test => tests}/reference/from_sym/test.kcd (100%) rename {test => tests/reference/from_sym}/test.xls (100%) rename {test => tests}/reference/from_sym/test.xlsx (100%) rename {test => tests}/reference/from_sym/test.xml (100%) rename {test => tests}/reference/from_sym/test.yaml (100%) rename {test => tests}/reference/from_xls/test.arxml (100%) rename {test => tests}/reference/from_xls/test.csv (98%) rename {test => tests}/reference/from_xls/test.dbc (100%) rename {test => tests}/reference/from_xls/test.dbf (100%) rename {test => tests}/reference/from_xls/test.json (100%) rename {test => tests}/reference/from_xls/test.kcd (100%) rename {test => tests}/reference/from_xls/test.sym (100%) rename {test => tests}/reference/from_xls/test.xlsx (100%) rename {test => tests}/reference/from_xls/test.xml (100%) rename {test => tests}/reference/from_xls/test.yaml (100%) rename {test => tests}/reference/from_xlsx/test.arxml (100%) rename {test => tests}/reference/from_xlsx/test.csv (98%) rename {test => tests}/reference/from_xlsx/test.dbc (100%) rename {test => tests}/reference/from_xlsx/test.dbf (100%) rename {test => tests}/reference/from_xlsx/test.json (100%) rename {test => tests}/reference/from_xlsx/test.kcd (100%) rename {test => tests}/reference/from_xlsx/test.sym (100%) rename {test => tests}/reference/from_xlsx/test.xls (100%) rename {test => tests}/reference/from_xlsx/test.xml (100%) rename {test => tests}/reference/from_xlsx/test.yaml (100%) rename {test => tests}/test.py (100%) mode change 100755 => 100644 rename {src/canmatrix/tests => tests}/test_arxml.py (71%) rename {src/canmatrix/tests => tests}/test_arxml_gw.py (100%) rename {src/canmatrix/tests => tests}/test_canmatrix.py (99%) rename {src/canmatrix/tests => tests}/test_cli_compare.py (68%) rename {src/canmatrix/tests => tests}/test_cli_convert.py (70%) create mode 100644 tests/test_codec.py rename {src/canmatrix/tests => tests}/test_copy.py (99%) rename {src/canmatrix/tests => tests}/test_dbc.py (99%) rename {src/canmatrix/tests => tests}/test_dbf.py (100%) rename {src/canmatrix/tests => tests}/test_formats.py (100%) rename {src/canmatrix/tests => tests}/test_frame_decoding.py (98%) rename {src/canmatrix/tests => tests}/test_frame_encoding.py (97%) rename {src/canmatrix/tests => tests}/test_j1939_decoder.py (100%) rename {src/canmatrix/tests => tests}/test_json.py (100%) rename {src/canmatrix/tests => tests}/test_scapy.py (91%) rename {src/canmatrix/tests => tests}/test_sym.py (100%) rename {src/canmatrix/tests => tests}/test_utils.py (100%) rename {src/canmatrix/tests => tests}/test_wireshark.py (89%) rename {src/canmatrix/tests => tests}/test_xls.py (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..69499140 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,152 @@ +name: Tests + +on: + release: + types: [ published ] + pull_request: + push: + +env: + PY_COLORS: "1" + +jobs: + test: + runs-on: ${{ matrix.os }} + continue-on-error: ${{ matrix.experimental }} # See: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idcontinue-on-error + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + # os: [ubuntu-latest] + experimental: [false] + # python-version: ["2.7","3.4","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.12"] + python-version: ["3.7","3.8","3.9","3.10","3.11","3.12"] + fail-fast: false + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install tox + - name: Test with pytest via tox + run: | + tox -e gh + - name: Coveralls + uses: coverallsapp/github-action@v2.3.0 + with: + github-token: ${{ secrets.github_token }} + flag-name: Test_${{ matrix.os }}_${{ matrix.python-version }} + parallel: true + path-to-lcov: ./coverage.lcov + + coveralls: + needs: test + runs-on: ubuntu-latest + steps: + - name: Coveralls Finished + uses: coverallsapp/github-action@v2.3.0 + with: + github-token: ${{ secrets.github_token }} + parallel-finished: true + + # static-code-analysis: + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v3 + # - name: Set up Python + # uses: actions/setup-python@v4 + # with: + # python-version: "3.10" + # - name: Install dependencies + # run: | + # python -m pip install --upgrade pip + # pip install -e .[lint] + # - name: ruff + # run: | + # ruff check can + # - name: pylint + # run: | + # pylint \ + # src/**.py \ + # can/io \ + # doc/conf.py \ + # examples/**.py \ + + # format: + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v3 + # - name: Set up Python + # uses: actions/setup-python@v4 + # with: + # python-version: "3.10" + # - name: Install dependencies + # run: | + # python -m pip install --upgrade pip + # pip install -e .[lint] + # - name: Code Format Check with Black + # run: | + # black --check --verbose . + + # docs: + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v3 + # - name: Set up Python + # uses: actions/setup-python@v4 + # with: + # python-version: "3.10" + # - name: Install dependencies + # run: | + # python -m pip install --upgrade pip + # pip install -e .[canalystii,gs_usb,mf4] + # pip install -r doc/doc-requirements.txt + # - name: Build documentation + # run: | + # python -m sphinx -Wan --keep-going doc build + # - name: Run doctest + # run: | + # python -m sphinx -b doctest -W --keep-going doc build + # - uses: actions/upload-artifact@v3 + # with: + # name: sphinx-out + # path: ./build/ + # retention-days: 5 + + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + - name: Build wheel and sdist + run: pipx run build + - name: Check build artifacts + run: pipx run twine check --strict dist/* + - name: Save artifacts + uses: actions/upload-artifact@v3 + with: + name: python-can-dist + path: ./dist + + upload_pypi: + needs: [build] + runs-on: ubuntu-latest + + # upload to PyPI only on release + if: github.event.release && github.event.action == 'published' + steps: + - uses: actions/download-artifact@v3 + with: + name: python-can-dist + path: dist + + - uses: pypa/gh-action-pypi-publish@v1.4.2 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/cmTemplate.xlsx b/cmTemplate.xlsx deleted file mode 100644 index 5b5bacaf5f34fd3d6f37109fe13bde3b42347c42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10675 zcmeHtg;!kJ@^$0TxVt83a7!S#OK@!4H zO(rwnU-0Iv)wjD>_uhA%b9dFLQ&r0HaPW8lL;x}X0H6jGqaAqJzyJW~2mk;s02x+S z+`-<}%-+>N-OJI;Ww*p#H?z4eGf3e}&I@Uf_>&q(3fq-ZJxln3 zd3K2Ya9Ao_7bO}+vujGXs$wM~DOf)jM_zpKfZzW(6P|sz7Q$L%mi)@op&kz}>pWQl zDalu!!Pq>yN5`iXg^k5+A4AZUOiv>CGXh?t%IPFIGLK2U}f z&U0tRJ+FAU0XbKQv45nwHK=Q8$hW^U4H3ejs2q4vUPJnp_vN(;GOX1CrmR8TQIyl| z1QLbo%leB-k*v`a`KR-GZ%$0THw0drZyP}6_4o(}Q2vXJ;_7#rAwX?(9cqH8P#ZOH zHnVkMWBu*=uWkMh8{|(@uSoc$*!P=l%Cw6o-R;{`g-%YtrYl&*V!|}Uxdtx{sw9YB zU%@|xPnK$f8(PQ_e!OQ~UVU-773*uc$ka07%s6b#TUnXx%Sfqptr{9RXZR^4NkApO zZR^(h?v>ymH(vT2!dpFC<=UtzK>+;fWFWPPG_M=e72M$ECC`gl@;UenfiAemWpM&r zB`0>d+mM#Gc>*ob^yD2 zDK)g2^hiqIJby*-8Uslef;fJCQ}vIj(~gYl|M$W2=zqfKsPw3 zh5c_2sEFkH*|7#sf={r%+Rs$c&}1A-hIUx{1;)S1sI|l4+|KFjc%Qc%X4Y|ub7MYy z{ev^@=-7s=ABk>1L`xZ;7WtBHVa)@$mJZ24!s=hr6@&)^>7Fipp4VC?B;$t2f4P;R zY4cRwNZrm)G9`;kkH(sUD3VT>@Qu!nl#GjdFg!Q&Vw;(U+s9S<&;*=bTMM=_~I;sXPXa<0N$%hx&Xa4E}1jELE96- zcnc;ApiOXr(2T97vwv|FyZgvky?m~lva>!ioETf)1%29o_q3Dc>UwBUy|}>v0GLoQ zKsEETTHdIsI4rSa`RCL>Zh&O`fYdOYBB9Z+Q)O;5>aABFI7h;?U$~oQ;BX&xU1u_r zf7ZV;%{jSWz4jCORDGZtPdFL=jCdwjI2YcujFa`6@E!~H%FNjnF&gjk~=!m}@G91EvJeZuScEk&xx|1`bc5}rN78GzwE5%*H zZKi?DKZ!{E9&;$B+GNHddHsp-PR->m%A!#u)bd4-ug?|2O=k^97W_;k&ZztK1ng6x zv{tDH$>KrB!-Wb7UVGnfogC#}3a3u1J}Y@&191emo2QyUeRC)Fd9JL~E>biTl9xzF zEd;fP!t{FDlQ!YDsW1?SkNu4yl#>IWb(hPPI?UKozcqGP9vc8?E@F@~sKuhcwhcH* z{J8N=2Wf}YpvgM4zr{ss=-_Guji_9tKHQRpOtoptu8li#UnM9c1YnQsufeER0e2=2lHF| zUz-qALuK)I;Yj3}?e9S)wEzzQ;Qb*S7fT~&GgCEJXDfRPm*0GiuexsZGCST6OjAs; zOAlN6qgV2d0^G!~aC_|avH{_$>O1@dyPNy^7U@66U|Yl8O_CFnf|D+Xa(yQJvYwQ; z|1jcS4wBwEOaj*ibJa}SC9Nuc_ikwR9wJVtA$^|}#<&i5zHI%10Xr&8FGg(*t07T9 zdNB|?wS~Y|#2ONt>v*|Lri*DDf({_g0>^C8Jr@H_6dW)sd|#eytlRfNx-i*L=qbn1 z&`@;?(E6&L>=nQ-MW9b)h`EXT8xN z>%A$LGF;W&>j|W7Y-C!iD)VXL3^O=T5Wu8B8`XRL;t{UL3 zN(0dkEOo8E9#s$#hGMUr1qPRJ`9^y4{u=^vg@u!M4BvwVvCBD~0NWzY1~JTStkJ3N z<3x>A$&(jSH~Lcs!Uh8crjJuEiZZpt2I^0Z``_!2x+t!#^uO|Umn}JqS3i98qJ31k zIOWs`_(y3Jx=Q=TBLV=0q`#f8e)lP^mS%QlY`cuxZiHHt;2s?w0{yCJK?tig@(8$g)#mn9$3m*HGkmd^DQ$Q#&8`;qmo%NJ@!GWBXNp3@X#d9y=kt3N6$CtK}YthX7P+w zqbi751+Eqxi{qc)xVE70c8X|vHjdLdwRr44Pu>m#y7xv|@0!zbX!e8y62}(P*1KDF z<*0t5#+`6~wn++DFDX1l0OnC+vW*+}nlx}P(D>%W2vKn-7)hEGd__q!q!eq8$$y)x z?b4kAPiTG^&n7RPPMpx08)fZtLQgbpBzp4s;zVCCAR78|K0jR?>7!Jl5ajo|2`SuR zUKwyw*1I{+P@`UxXjbT>9D!+ zxqPm@x#-?PCn=8f7+knX7#t36*dJWE5qjWieo2T`p=`M87x-!8 zDc0C-whN}Lp3iZ1S0{NG78*Jy@lOa*P=Y{Vr{cY2Tx?~ZV58|QN?@8T1p&_w`5S?lHUhz7an)YM{OV1q4toIyr5x$mH0F!5r*%8bKHMo zI6;@1$^^%=S~`mz`&een1$0|>_S9`$UgNbj))=YtDbr@_`++KdiIF{k1Yet%S>f>P zav6B^1M=*$Rr ze|Q=yo%ON1rw0KxgGa{k8@0wJRX+;%v6~Vuim4obJi{iA;v4hkgvLSfi|RwKx>6;Y zMpv1NtM3aK)q9(V-ER{)R1v;vXK?7uz)y_Y9_h&8x%!ZsyRpo+w0w@WEMnqcaZYZC z8lNJ2m0gY)(!%q;L39!;D0zN!vKrJEgv7-;=iVgramBdZF^x5Wnj&#lTIZw|ygw)l zsz}0{@?J2UEFR*j(A=1tHeC-~_R3T@o!9PVy;#feWQ^Gedl$I0=W6Q2!3TO1x2#{@ zvUC{_PHcQ0RL3bGh2r^o-yWw9V4vYjYrBw>Hbyr}xMph>-6E?TaffMhozSaDE)%N$ zQahZNdrX}KmU%9-;=Wvg{lJV-StWLYeqad^zE7AAVPVRRCGAyYb@T-58_VUz`TC^u zG#X>9IPg^Dct17b^?@>i-=KPLazrWeEduLqeZzQ?ZsttEGyNFiO!6US6ek^fw`lV; z+sz`X9nRFIV9#9L!b7Q+m~vy)hXi%T@UzEP_#HXj1!AJZFiEtyeim5e z#Xj$7M^we=@_<_(`=bSEq(jl&(Dmkh+9Je|-P9DOISn0)w?FwQaarQ+(iNvVDAJBz z>u10PctA`NiIbcUYOE|d?;tc^k9v%?8V<(KZBJO3^5_ZdG@pzD4K){lI#x?vMaYCJ z)^-C-R_#k;p>S*|JmEd<)N&hiD0{*+k1Cs7#=Y7OCF1_b4fs8TXbNb(ho%a_NS_U=3JtOhI-pz=#81dZBIrH1z#@ zY-7R4Zlwr~Yl5K>G5UXE8&@w|v)_Z7b}bd~7B7~6_3R_oPL={yTT*VQ+6e2ktXAp1 zeR*ekKguGXqEBPNm9g}Y_aF& zCE?>{2;BcL<4F$_EsiQdei!_8Gst~2VgM{`nkD3T+g_-S1fXseSg~H6$S--;R8PH{ zWm^hRV9^lgZZA`qZHP`N6VDHqPJEFqg>FPsk9<+&izy>M3wiyL$!rE^eC`dGAG@~E zWYPtglo}u8lG{qTo>)7?%cgaT{w(>>wDJVNn&37r=RM9DJB=Jq0AdL{4pu!5o#=zl zo$9-J}ev5vqGt!pr5sF3Zu z>4~Nv^psae@@n*Ch>DNesT-c7+U*!0yV0F^$StD@-dG4YI1F$!4L%4Y*}i99)~p#e zoa50jMp)Xoxp%fS>O{aRQNSp%k6UAKCQ_nUbC{H!V9H!maLQh%@zcR)?5$wK8vwF~ z1V|A>CMLO_M>?};AdFU5m!WvpCgngTvf3j#5#S?=S=nr?li}2!I(uGC;T^&WF$lyWs3kQ_NSyhnK=Vhms`w)#=Uy5UJ&jF^qA-7Ojv(CtH+5HmZCH|50S2NUr8 zDi+>XrNA#J@Gjc>nIdzX$$8LRDUE%9RLlc6{z>!_1m%l^S^f1aAw$v^&}x9%H}M~c z%~_DmI;(eO{4Oy^M=MMw(V5Wmfb#Cr+=?UQis(#ePo;6!+9`QR` zTpj_PmZ@wE1UhAYvKZ&knp!!_rIW4N z?%{VG3UT%jm>V2Gw_B;$ULXX2Zr=J}S>;(VIEefDGQZ?R?ez6oX~+}Im5?lBubcUq z^Ww`hD<0zUtsPs}oXH54+Ztao!4<;Mp&<uS$(ocFEIkX#sewsw(q=# zHX}>o#=kGv<|uLQJ`@u!+dHMxiQ_*{_sT5VqjEBvI%`ca(eIwD>If#obI`UW9#>sUX6UFPG{LIS=8dy@oeTfU%;O=rDQ{YZJ zd>WZ|qGM{jHNx6Pj{0x)^U7bGFgLN2>Swx=R7dU7VR*5njO0+r&miP zmF3fjFOu?{7tYp@tr<(;t$!f`Op(TfFsQ7koQ`TVo@3dOxB!j+(&+TDOuadjKdWr= zD-VI7YHQlg91X()E%-4e#h3-PwvtvCAwzq1(7$+Hc)#Vxn$eE$)-owUM}?UiQWo6u z7AdwgBWc}pf)F+Q%9JzH?;NI*$i~4FuCrre6n)$qGje&gQ?jR3QnsTYGI!tggWD<( z2Gmj!%M92}A0+P%0sxCLz&C&rg|0&6W-X{{S}GaHq#;rb+nI`MYk<((ET(UW|3J7|L(#-K z{Ea_bRl1I(x~vFwG}36*zLK_dN);$q+9v{UQOvilr{+8WVfYHuQxsW0fzc@77^C;Tqz8-pC3C_!3QolG5$MC5gD5tG~~S_ zvUoW&R;vS-QIN+hjGGotL|ZDIQ!`ID!M*0T^Fnv{C#E*(x$WM-_;1Y;635t{kqz^{ zk!$=B288b$m+)zvM@KuJi-kll#CfbSomN?D>7x0bI6C-yli5|p(o8KkGuhm4Lmp!eLbpzHarO?`YB zF7_+`2t@HJpUcl@+-}Fxbo_axbrPK##T1fi^fa}2s@G3$_f>sqj_IK+D8uvnwtQX6 z^hq~J`$_rNB{PA_ZZyW4^xi5|TC?n8A)*}f3X~f3wR}5dLrcl)vZ_FR6c86Xqc9HAkxN76#d;S zdqMa!Ya*3C9-bBDJ{F!8l|Dh9H>E~m=xWxUx#7e-0;+wuJY%Hc=WjJA#*^6EL8rZR zq7OKQVfcO6@dC6#&%d<`=&8&HTYLn{gDCJft9i(-Ic^|r%Y3e@{?}NK7;)4)(S4vf zLPhPDX&w{(bRjN(rjC`NdAd77O=;8Ci zv51DCX|pkCz7-3aqc?RhQFeB4bYU}cbo?zb0xfU-o0*5MT!ET`!!kQs2j)V+sqY@+ z+ZlvDtYN0x4|(01%pxoLs8U6^?`utED&8JmALbl_ljGj@FNTx1l8#6V3JR&58>=lB z3}D52c<~ckSOqKIO*d;~3*j~8f3m_s(LS#3A)o*jY+}zd&Dj7iqLAN{IkJ>cO>Ld7tD809mRL$n5D;q*pG-USUQsHFI#5_ zDP!#Vf|HqR?3uBc7~_mKQEZK@)rsF>Mz!0L*l=U%<{igk2;D{}u#v`UMpH9*B_Zs; zGqhZGLQ`v*G(1b!C;{3^FvcNxMNIMuAmQdEu#D@>ei6qR$Gq}Pr<0Fdu=+GZ5DX(N zAU;1w-?qT}HnHB1MR_9u#{{H-wpfY=gDZ`oJ$3+;SyHi&iW?lC_ zo6VGs>q*&jua45v?L?-_kPoFAKuC0n$`yA!UBz?7)xaqBz_abLXA?Zb9DAxgQr z149okWh1Vceq)}ah&+sO>&hMfc&;)Ciusre6+bdm{MbK>-^9V$>|gamW&fYyn=qx= zM}-%DqTq|v+dwV}u}!a{Q!6G+Pu0#p!`OT=C5FNd!O0mVJRK--E!X9y)9dCFri9!_ zY~8&6yo+9u7)xQoFT(*lPD=gF_KiciRf5qMftldXvEdy0!F@wJ$BI1)6Qro~jU0v@ z@DZ@GZJ8My{#R>XLSHO~L4@Aru z#>DUa<&LXa9gNGPW-GPG96`w0K6^F{sONR)FP{ha!W_3b1|Xx@2Ynw*!M*!7V$gH^ zo{PgmGZ&LPP4Ss)6$KlO4U26K)<$#kV8otVf2ByO%6MiMaN9S5if+{4H28k5KEL6V zZkbIbE-z0w{CR%N>jo<2Q`!?fJ&R)uMa6PP)@wEIqylLaa!u~>K7IjT%Y*gS_1js5 z*|OosC{Thq3b}?=3T6b~IB%qlNPVZdH!mh-1zvn+w&e1y@}cG3Ny<9(`TRXyFuX3e zqym+7J5<)tj-o$(x`~^MtApLY!v3$Up-VKQ;1JACgmikB;DV@cu_WmBO?Qj#EVB7fHBpx%?x0?AzRn zyQdH@$h3lIh`7~5yv}d1IvA)+Ip0_hNjZ{-OcU{iC?_V&X=5JpHoXi}=HYcO!%)UU zc*2eQMO)227d%Onkk6avzQcpz>Q$Hc-NuwvMmKBCfz)bLAy3|O8?V903r(nwYP=SJ zP}K!gn-^c3MvvI+msAVAFU+ax8`wvEQ7d=|7qPvh??=7UX_FKykOrb%Z%~PPPLfM4 zhJ6o;He`F4p}1;1S`1IfH!j+9Cln4XM z0xiJ(b9dXH3;)Nbf9Q2nmj5fkUt4c}CMba3@~1|eUx9z^KKL291g!=A|9cUB<@vQD z{U;L!%HQhKzk+|QO8yC!M*SW9w;JWI48Iny{$wzQrUIeU__dVvE5WbH!#@e0KcFV_)`D?zXqJYqW`)_|BUvb{t5lx o9s5`KUwz@vaMh6!8a1rY{r2tu0mZRLvH$=8 diff --git a/setup.py b/setup.py index 0e7cfee0..bc7ffd1c 100644 --- a/setup.py +++ b/setup.py @@ -81,6 +81,7 @@ name = "canmatrix", version = versioneer.get_version(), cmdclass = versioneer.get_cmdclass(), + long_description_content_type='text/x-rst', maintainer = "Eduard Broecker", maintainer_email = "eduard@gmx.de", url = "http://github.com/ebroecker/canmatrix", diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index abcb695c..594c3707 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -436,18 +436,20 @@ def phys2raw(self, value=None): if not (self.min <= value <= self.max): value = self.min - if isinstance(value, str): + if isinstance(value, str) and self.values: for value_key, value_string in self.values.items(): if value_string == value: value = value_key return value - else: - raise ValueError( - "{} is invalid value choice for {}".format(value, self) - ) + try: + value = decimal.Decimal(value) + except Exception as e: + raise e + + # if not (0 <= value <= 10): if not (self.min <= value <= self.max): - logger.info( + logger.warning( "Value {} is not valid for {}. Min={} and Max={}".format( value, self, self.min, self.max) ) @@ -455,6 +457,7 @@ def phys2raw(self, value=None): if not self.is_float: raw_value = int(round(raw_value)) + return raw_value def raw2phys(self, value, decode_to_str=False): @@ -793,6 +796,7 @@ class Endpoint(object): server_port = attr.ib(default=0) # type: int client_ip = attr.ib(default="") # type: str client_port = attr.ib(default=0) # type: int + ttl = attr.ib(default=0) # type: int @attr.s(eq=False) @@ -1335,6 +1339,11 @@ def signals_to_bytes(self, data): for signal in self.signals: if signal.name in data: value = data.get(signal.name) + if isinstance(value, str): + value = signal.phys2raw(value) + if value is None: + # TODO Error Handling + value = 0 bits = pack_bitstring(signal.size, signal.is_float, value, signal.is_signed) if signal.is_little_endian: @@ -1369,7 +1378,6 @@ def encode(self, data=None): """ data = dict() if data is None else data - if self.is_complex_multiplexed: raise EncodingComplexMultiplexed elif self.is_pdu_container: diff --git a/src/canmatrix/cli/compare.py b/src/canmatrix/cli/compare.py index 2718b8a3..26a8788a 100644 --- a/src/canmatrix/cli/compare.py +++ b/src/canmatrix/cli/compare.py @@ -105,4 +105,4 @@ def cli_compare(matrix1, matrix2, verbosity, silent, check_comments, check_attri # to be run as module `python -m canmatrix.compare`, NOT as script with argument `canmatrix/compare.py` if __name__ == '__main__': - sys.exit(cli_compare()) + sys.exit(cli_compare()) \ No newline at end of file diff --git a/src/canmatrix/cli/convert.py b/src/canmatrix/cli/convert.py index f1eff066..60595bd9 100644 --- a/src/canmatrix/cli/convert.py +++ b/src/canmatrix/cli/convert.py @@ -140,7 +140,7 @@ def cli_convert(infile, outfile, silent, verbosity, **options): import-file: *.dbc|*.dbf|*.kcd|*.arxml|*.json|*.xls(x)|*.sym export-file: *.dbc|*.dbf|*.kcd|*.arxml|*.json|*.xls(x)|*.sym|*.py - \n""" + """ root_logger = canmatrix.log.setup_logger() @@ -160,4 +160,4 @@ def cli_convert(infile, outfile, silent, verbosity, **options): if __name__ == '__main__': - sys.exit(cli_convert()) + sys.exit(cli_convert()) \ No newline at end of file diff --git a/src/canmatrix/convert.py b/src/canmatrix/convert.py index 7e329b87..ddc3ea54 100644 --- a/src/canmatrix/convert.py +++ b/src/canmatrix/convert.py @@ -64,12 +64,11 @@ def convert_pdu_container_to_multiplexed(frame): # type: (canmatrix.Frame) -> c def convert(infile, out_file_name, **options): # type: (str, str, **str) -> None - logger.info("Importing " + infile + " ... ") + logger.info(f"Importing " + infile + " ...") dbs = canmatrix.formats.loadp(infile, **options) - logger.info("done\n") - - logger.info("Exporting " + out_file_name + " ... ") + logger.info("Import Done") + logger.info("Exporting " + out_file_name + " ...") out_dbs = {} # type: typing.Dict[str, canmatrix.CanMatrix] for name in dbs: db = None @@ -104,7 +103,7 @@ def convert(infile, out_file_name, **options): # type: (str, str, **str) -> Non db_temp_list = canmatrix.formats.loadp(merge_string[0]) for dbTemp in db_temp_list: if merge_string.__len__() == 1: - print("merge complete: " + merge_string[0]) + # logger.debug("merge complete: " + merge_string[0]) db.merge([db_temp_list[dbTemp]]) # for frame in db_temp_list[dbTemp].frames: # copyResult = canmatrix.copy.copy_frame(frame.id, db_temp_list[dbTemp], db) @@ -337,9 +336,7 @@ def convert(infile, out_file_name, **options): # type: (str, str, **str) -> Non frame.is_j1939=True db.add_attribute("ProtocolType", "J1939") - - - logger.info(name) + logger.debug(f"{name}") logger.info("%d Frames found" % (db.frames.__len__())) out_dbs[name] = db @@ -349,4 +346,4 @@ def convert(infile, out_file_name, **options): # type: (str, str, **str) -> Non 'force_output'], **options) else: canmatrix.formats.dumpp(out_dbs, out_file_name, **options) - logger.info("done") + logger.info("Export Done") diff --git a/src/canmatrix/copy.py b/src/canmatrix/copy.py index 15b44bf4..6ceeca4a 100644 --- a/src/canmatrix/copy.py +++ b/src/canmatrix/copy.py @@ -70,7 +70,7 @@ def copy_ecu(ecu_or_glob, source_db, target_db): def copy_ecu_with_frames(ecu_or_glob, source_db, target_db, rx=True, tx=True, direct_ecu_only=True): - # type: (typing.Union[canmatrix.Ecu, str], canmatrix.CanMatrix, canmatrix.CanMatrix) -> None + # type: (typing.Union[canmatrix.Ecu, str], canmatrix.CanMatrix, canmatrix.CanMatrix, bool, bool, bool) -> None """ Copy ECU(s) identified by Name or as Object from source CAN matrix to target CAN matrix. This function additionally copy all relevant Frames and Defines. diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 54c09be1..43b8a888 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -1048,9 +1048,8 @@ def decode_compu_method(compu_method, ea, float_factory): rational = ea.get_child(compu_scale, "COMPU-RATIONAL-COEFFS") - if rational is None and ll is not None and desc is not None and canmatrix.utils.decode_number(ul.text, - float_factory) == canmatrix.utils.decode_number( - ll.text, float_factory): + if rational is None and ll is not None and desc is not None and \ + canmatrix.utils.decode_number(ul.text,float_factory) == canmatrix.utils.decode_number(ll.text, float_factory): ##################################################################################################### ##################################################################################################### values[ll.text] = desc @@ -1600,23 +1599,26 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header secOC_properties = None if pdu is not None and 'SECURED-I-PDU' in pdu.tag: - payload_length = ea.get_child(pdu, "LENGTH").text + try: + payload_length = ea.get_child(pdu, "LENGTH").text - secured_ipdu_SecoC = ea.get_child(pdu, "SECURE-COMMUNICATION-PROPS") + secured_ipdu_SecoC = ea.get_child(pdu, "SECURE-COMMUNICATION-PROPS") - auth_algorithm = ea.get_child(secured_ipdu_SecoC, "AUTH-ALGORITHM").text - auth_tx_length = ea.get_child(secured_ipdu_SecoC, "AUTH-INFO-TX-LENGTH").text - data_id = ea.get_child(secured_ipdu_SecoC, "DATA-ID").text - freshness_bit_length = ea.get_child(secured_ipdu_SecoC, "FRESHNESS-VALUE-LENGTH").text - freshness_tx_length = ea.get_child(secured_ipdu_SecoC, "FRESHNESS-VALUE-TX-LENGTH").text - - secOC_properties = canmatrix.AutosarSecOCProperties(auth_algorithm, - int(payload_length, 0), - int(auth_tx_length, 0), - int(data_id, 0), - int(freshness_bit_length, 0), - int(freshness_tx_length, 0) - ) + auth_algorithm = ea.get_child(secured_ipdu_SecoC, "AUTH-ALGORITHM").text + auth_tx_length = ea.get_child(secured_ipdu_SecoC, "AUTH-INFO-TX-LENGTH").text + data_id = ea.get_child(secured_ipdu_SecoC, "DATA-ID").text + freshness_bit_length = ea.get_child(secured_ipdu_SecoC, "FRESHNESS-VALUE-LENGTH").text + freshness_tx_length = ea.get_child(secured_ipdu_SecoC, "FRESHNESS-VALUE-TX-LENGTH").text + + secOC_properties = canmatrix.AutosarSecOCProperties(auth_algorithm, + int(payload_length, 0), + int(auth_tx_length, 0), + int(data_id, 0), + int(freshness_bit_length, 0), + int(freshness_tx_length, 0) + ) + except Exception as e: + logger.warning(f"{e}") ipdu = ea.selector(pdu, ">PAYLOAD-REF>I-PDU-REF") if not ipdu: @@ -1898,9 +1900,13 @@ def decode_ethernet_helper(ea, float_factory): client_app_endpoint = ea.get_child(client_port_ref, "APPLICATION-ENDPOINT") client_endpoint_ref = ea.follow_ref(client_app_endpoint, "NETWORK-ENDPOINT-REF") client_ipv4 = ea.find("IPV-4-ADDRESS", client_endpoint_ref) + ttl = ea.find("TTL", client_endpoint_ref) - endpoint = canmatrix.Endpoint(server_ipv4.text, int(server_port.text, 0), - client_ipv4.text, int(client_port.text, 0)) + endpoint = canmatrix.Endpoint(server_ipv4.text, + int(server_port.text, 0), + client_ipv4.text, + int(client_port.text, 0), + ttl) for scii in ea.findall("SOCKET-CONNECTION-IPDU-IDENTIFIER", socket_connection): @@ -2076,8 +2082,9 @@ def decode_can_helper(ea, float_factory, ignore_cluster_info): multiplex_translation = {} # type: typing.Dict[str, str] for frameTrig in can_frame_trig: # type: _Element frame = get_frame(frameTrig, ea, multiplex_translation, float_factory, headers_are_littleendian) - frame.is_j1939 = "J-1939" in cc.tag if frame is not None: + frame.is_j1939 = "J-1939" in cc.tag + comm_directions = ea.selector(frameTrig, ">>FRAME-PORT-REF/COMMUNICATION-DIRECTION") for comm_direction in comm_directions: ecu_elem = ea.get_ecu_instance(element=comm_direction) diff --git a/src/canmatrix/formats/odx.py b/src/canmatrix/formats/odx.py index 399bd53c..763bcdba 100644 --- a/src/canmatrix/formats/odx.py +++ b/src/canmatrix/formats/odx.py @@ -168,7 +168,7 @@ def get_odx_info(eo, element_type): for request in eo.findall(element_type): short_name = eo.get_short_name(request) service_id_param = find_param(eo, request, "SERVICE-ID") - if service_id_param == None: + if service_id_param is None: continue service_id_value = eo.find("CODED-VALUE", service_id_param) @@ -178,7 +178,7 @@ def get_odx_info(eo, element_type): continue id_param = find_param(eo, request, "ID") - if id_param == None: + if id_param is None: continue did_value = eo.find("CODED-VALUE", id_param) did = int(did_value.text) diff --git a/src/canmatrix/log.py b/src/canmatrix/log.py index bbecd5d7..3a38e0f1 100644 --- a/src/canmatrix/log.py +++ b/src/canmatrix/log.py @@ -43,12 +43,11 @@ def setup_logger(): # type: () -> logging.Logger logger.addHandler(handler) return logger - def set_log_level(logger, level): # type: (logging.Logger, int) -> None """Dynamic reconfiguration of the log level""" if level > 2: level = 2 - if level < -1: + elif level < -1: level = -1 levels = { @@ -57,4 +56,5 @@ def set_log_level(logger, level): # type: (logging.Logger, int) -> None 1: logging.INFO, 2: logging.DEBUG } + logger.setLevel(levels[level]) diff --git a/src/canmatrix/tests/tmp.dbc b/src/canmatrix/tests/tmp.dbc deleted file mode 100644 index c62b60ca..00000000 --- a/src/canmatrix/tests/tmp.dbc +++ /dev/null @@ -1,22 +0,0 @@ -VERSION "created by canmatrix" - - -NS_ : - -BS_: - -BU_: - - -BO_ 291 testFrame1: 8 testBU - SG_ someTestSignal : 7|11@0+ (5,1) [0|500] "specialCharUnit°$" recBU - - - - - -BA_DEF_ BO_ "SomeUnneededDefine" INT 0 65535; - - - - diff --git a/src/canmatrix/tests/tmp.tmp b/src/canmatrix/tests/tmp.tmp deleted file mode 100644 index 8621d88a..00000000 --- a/src/canmatrix/tests/tmp.tmp +++ /dev/null @@ -1,63 +0,0 @@ -VERSION "created by canmatrix" - - -NS_ : - -BS_: - -BU_: CCL_TEST TEST_ECU - - -BO_ 4 muxTestFrame: 7 TEST_ECU - SG_ myMuxer M : 53|3@1+ (1,0) [0|0] "" CCL_TEST - SG_ muxSig4 m0 : 25|7@1- (1,0) [0|0] "" CCL_TEST - SG_ muxSig3 m0 : 16|9@1+ (1,0) [0|0] "" CCL_TEST - SG_ muxSig2 m0 : 15|8@0- (1,0) [0|0] "" CCL_TEST - SG_ muxSig1 m0 : 0|8@1- (1,0) [0|0] "" CCL_TEST - SG_ muxSig5 m1 : 22|7@1- (1,0) [0|0] "" CCL_TEST - SG_ muxSig6 m1 : 32|9@1+ (1,0) [0|0] "" CCL_TEST - SG_ muxSig7 m1 : 2|8@0- (1,0) [0|0] "" CCL_TEST - SG_ muxSig8 m1 : 0|6@1- (1,0) [0|0] "" CCL_TEST - SG_ muxSig9 : 40|8@1- (1,0) [0|0] "" CCL_TEST - -BO_ 3 testFrameFloat: 8 TEST_ECU - SG_ floatSignal2 : 32|32@1- (1,0) [0|0] "" CCL_TEST - SG_ floatSignal1 : 7|32@0- (1,0) [0|0] "" CCL_TEST - -BO_ 1 testFrame1: 8 TEST_ECU - SG_ sig0 : 1|2@0+ (1,0) [0|0] "" CCL_TEST - SG_ sig1 : 7|6@0+ (1,0) [0|0] "" CCL_TEST - SG_ sig2 : 15|11@0+ (1,0) [0|0] "" CCL_TEST - SG_ sig3 : 20|12@0+ (1,0) [0|0] "" CCL_TEST - SG_ sig4 : 24|9@0+ (1,0) [0|0] "" CCL_TEST - SG_ sig5 : 50|3@0+ (1,0) [0|0] "" CCL_TEST - SG_ sig6 : 53|3@0+ (1,0) [0|0] "" CCL_TEST - SG_ sig7 : 47|10@0+ (1,0) [0|0] "" CCL_TEST - SG_ sig8 : 58|3@0+ (1,0) [0|0] "" CCL_TEST - SG_ sig9 : 61|3@0+ (1,0) [0|0] "" CCL_TEST - SG_ sig10 : 63|2@0+ (1,0) [0|0] "" CCL_TEST - -BO_ 2 testFrame2: 8 TEST_ECU - SG_ secSig1 : 60|2@1+ (1,0) [0|0] "" CCL_TEST - SG_ secSig2 : 55|1@1+ (1,0) [0|0] "" CCL_TEST - SG_ secSig3 : 20|4@1+ (1,0) [0|0] "" CCL_TEST - SG_ secSig4 : 62|2@1+ (1,0) [0|0] "" CCL_TEST - SG_ secSig5 : 34|3@1+ (1,0) [0|0] "" CCL_TEST - SG_ secSig6 : 37|3@1+ (1,0) [0|0] "" CCL_TEST - SG_ secSig7 : 59|1@1- (1,0) [0|0] "" CCL_TEST - SG_ secSig8 : 56|3@1+ (1,0) [0|0] "" CCL_TEST - SG_ secSig9 : 52|3@1+ (1,0) [0|0] "" CCL_TEST - SG_ secSig10 : 8|12@1+ (1,0) [0|0] "" CCL_TEST - SG_ secSig11 : 24|10@1- (1,0) [0|0] "" CCL_TEST - SG_ secSig12 : 0|8@1+ (1,0) [0|0] "" CCL_TEST - - - - - - - - - -SIG_VALTYPE_ 3 floatSignal2 : 1; -SIG_VALTYPE_ 3 floatSignal1 : 1; diff --git a/src/canmatrix/tests/tmpa.dbc b/src/canmatrix/tests/tmpa.dbc deleted file mode 100644 index dcff1fd7..00000000 --- a/src/canmatrix/tests/tmpa.dbc +++ /dev/null @@ -1,22 +0,0 @@ -VERSION "created by canmatrix" - - -NS_ : - -BS_: - -BU_: - - -BO_ 292 testFrame3: 8 testBU - SG_ someTestSignal : 7|11@0+ (5,1) [0|500] "" recBU - - - - - - - - - -VAL_ 292 someTestSignal 1 "one"; diff --git a/src/canmatrix/tests/tmpb.dbc b/src/canmatrix/tests/tmpb.dbc deleted file mode 100644 index c3b1b07c..00000000 --- a/src/canmatrix/tests/tmpb.dbc +++ /dev/null @@ -1,29 +0,0 @@ -VERSION "created by canmatrix" - - -NS_ : - -BS_: - -BU_: - - -BO_ 292 testFrame3: 8 testBU - SG_ someTestSignal : 7|11@0+ (5,1) [0|500] "" recBU - -BO_ 293 testFrame2: 8 testBU2 - SG_ someTestSignal2 : 8|11@0+ (5,1) [0|500] "" recBU2 - SG_ zeroSignal : 19|0@0+ (5,1) [0|500] "" recBU2 - - - - - -BA_DEF_ BO_ "myAttribute" INT -5 10; -BA_DEF_ SG_ "mySignalAttribute" INT 0 65535; - - -BA_ "myAttribute" BO_ 293 42; - -BA_ "mySignalAttribute" SG_ 293 zeroSignal 7; - diff --git a/test/test_codec.py b/test/test_codec.py deleted file mode 100755 index 53aadbba..00000000 --- a/test/test_codec.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -"""Tests for `canmatrix` package.""" -import unittest -import tempfile -import os - -from canmatrix import formats -from canmatrix.canmatrix import Signal - - -class TestCanmatrixCodec(unittest.TestCase): - """Tests for `canmatrix` package.""" - - def setUp(self): - """Set up test fixtures, if any.""" - - def tearDown(self): - """Tear down test fixtures, if any.""" - - def test_bitstruct_format(self): - """""" - s1 = Signal('signal') - self.assertEqual(s1.bitstruct_format(), 's8') - - def test_encode_canmatrix(self): - db_path = os.path.join( - os.path.dirname(__file__), "..", "test", "test.dbc") - for bus in formats.loadp(db_path).values(): - test_frame1 = 0x123 - data = { - 'Signal': 2, - 'someTestSignal': 101, - } - data_bytes = tuple(bytearray(bus.encode(test_frame1, data))) - assert data_bytes == (0, 0x28, 0x04, 0, 0, 0, 0, 0) - - def test_encode_decode_signal_value(self): - db_path = os.path.join( - os.path.dirname(__file__), "..", "test", "test.dbc") - for bus in formats.loadp(db_path).values(): - test_frame1 = 0x123 - - data = { - 'Signal': 2, - 'someTestSignal': 101, - } - data_bytes = tuple(bytearray(bus.encode(test_frame1, data))) - decoded = bus.decode(test_frame1, data_bytes, False) - - for k, v in data.items(): - assert decoded[k] == v - - def test_encode_decode_signal_value_choice_unicode(self): - db_path = os.path.join( - os.path.dirname(__file__), "..", "test", "test.dbc") - for bus in formats.loadp(db_path).values(): - test_frame1 = 0x123 - - data = { - 'Signal': u'two' - } - data_bytes = tuple(bytearray(bus.encode(test_frame1, data))) - - decoded = bus.decode(test_frame1, data_bytes, True) - - for k, v in data.items(): - assert str(decoded[k]) == v - - def test_encode_decode_signal_value_choice_str(self): - db_path = os.path.join( - os.path.dirname(__file__), "..", "test", "test.dbc") - for bus in formats.loadp(db_path).values(): - test_frame1 = 0x123 - - data = { - 'Signal': 'two' - } - data_bytes = tuple(bytearray(bus.encode(test_frame1, data))) - - decoded = bus.decode(test_frame1, data_bytes, True) - - for k, v in data.items(): - assert str(decoded[k]) == v - - def test_import_export_additional_frame_info(self): - db_path = os.path.join( - os.path.dirname(__file__), "..", "test", "test.dbc") - dbs = formats.loadp(db_path) - tmp_dir = tempfile.mkdtemp() - for extension in ['csv', 'json']: - out_file_name = tmp_dir + "/output." + extension - formats.dumpp(dbs, out_file_name, additionalFrameAttributes="UserFrameAttr") - with open(out_file_name, "r") as file: - data = file.read() - self.assertIn("UserFrameAttr", data) - - -if __name__ == "__main__": - unittest.main() diff --git a/test/README b/tests/README similarity index 100% rename from test/README rename to tests/README diff --git a/src/canmatrix/tests/__init__.py b/tests/__init__.py similarity index 100% rename from src/canmatrix/tests/__init__.py rename to tests/__init__.py diff --git a/test/createTestFdMatrix.py b/tests/createTestFdMatrix.py old mode 100755 new mode 100644 similarity index 100% rename from test/createTestFdMatrix.py rename to tests/createTestFdMatrix.py diff --git a/test/createTestMatrix.py b/tests/createTestMatrix.py old mode 100755 new mode 100644 similarity index 100% rename from test/createTestMatrix.py rename to tests/createTestMatrix.py diff --git a/src/canmatrix/tests/ARXMLCompuMethod1.arxml b/tests/files/arxml/ARXMLCompuMethod1.arxml similarity index 100% rename from src/canmatrix/tests/ARXMLCompuMethod1.arxml rename to tests/files/arxml/ARXMLCompuMethod1.arxml diff --git a/src/canmatrix/tests/ARXMLContainerTest.arxml b/tests/files/arxml/ARXMLContainerTest.arxml similarity index 100% rename from src/canmatrix/tests/ARXMLContainerTest.arxml rename to tests/files/arxml/ARXMLContainerTest.arxml diff --git a/src/canmatrix/tests/ARXMLSecuredPDUTest.arxml b/tests/files/arxml/ARXMLSecuredPDUTest.arxml similarity index 100% rename from src/canmatrix/tests/ARXMLSecuredPDUTest.arxml rename to tests/files/arxml/ARXMLSecuredPDUTest.arxml diff --git a/src/canmatrix/tests/ARXML_min_max.arxml b/tests/files/arxml/ARXML_min_max.arxml similarity index 100% rename from src/canmatrix/tests/ARXML_min_max.arxml rename to tests/files/arxml/ARXML_min_max.arxml diff --git a/src/canmatrix/tests/MyECU.ecuc.arxml b/tests/files/arxml/MyECU.ecuc.arxml similarity index 100% rename from src/canmatrix/tests/MyECU.ecuc.arxml rename to tests/files/arxml/MyECU.ecuc.arxml diff --git a/test/test.arxml b/tests/files/arxml/test.arxml similarity index 100% rename from test/test.arxml rename to tests/files/arxml/test.arxml diff --git a/aa.dbc b/tests/files/dbc/aa.dbc similarity index 100% rename from aa.dbc rename to tests/files/dbc/aa.dbc diff --git a/test/test.dbc b/tests/files/dbc/test.dbc similarity index 100% rename from test/test.dbc rename to tests/files/dbc/test.dbc diff --git a/src/canmatrix/tests/test_frame_decoding.dbc b/tests/files/dbc/test_frame_decoding.dbc similarity index 100% rename from src/canmatrix/tests/test_frame_decoding.dbc rename to tests/files/dbc/test_frame_decoding.dbc diff --git a/test/test.dbf b/tests/files/dbf/test.dbf similarity index 94% rename from test/test.dbf rename to tests/files/dbf/test.dbf index 1a9feaab..a4c7d1a2 100644 --- a/test/test.dbf +++ b/tests/files/dbf/test.dbf @@ -1,89 +1,89 @@ -//******************************BUSMASTER Messages and signals Database ******************************// - -[DATABASE_VERSION] 1.3 - -[PROTOCOL] CAN - -[BUSMASTER_VERSION] [2.6.0] -[NUMBER_OF_MESSAGES] 2 -[START_MSG] testFrame1,291,8,2,1,S,testBU -[START_SIGNALS] someTestSignal,11,2,1,U,100,0,0,1,5,specialCharUnit°$,,recBU -[START_SIGNALS] Signal,3,3,4,U,6,0,1,0,1,someUnit,,recBU -[VALUE_DESCRIPTION] "one",1 -[VALUE_DESCRIPTION] "two",2 -[VALUE_DESCRIPTION] "three",3 -[END_MSG] - -[START_MSG] extendedFrame,18,8,0,1,X,testBU -[END_MSG] - -[START_VALUE_TABLE] -[END_VALUE_TABLE] - -[NODE] testBU,recBU - -[START_DESC] -[START_DESC_NET] -[END_DESC_NET] - -[START_DESC_NODE] -testBU "sender ECU"; -recBU "receiver ECU"; -[END_DESC_NODE] - -[START_DESC_MSG] -291 S "Multi Line Frame comment"; -[END_DESC_MSG] - -[START_DESC_SIG] -291 S someTestSignal "Multi Line Signal comment with a-umlaut: ä"; -[END_DESC_SIG] -[END_DESC] - -[START_PARAM] -[START_PARAM_NET] -[END_PARAM_NET] - -[START_PARAM_NODE] -"NetworkNode",INT,0,0,65535 -[END_PARAM_NODE] - -[START_PARAM_MSG] -"GenMsgCycleTime",INT,0,0,65535 -[END_PARAM_MSG] - -[START_PARAM_SIG] -[END_PARAM_SIG] - -[START_PARAM_NODE_RX_SIG] -[END_PARAM_NODE_RX_SIG] - -[START_PARAM_NODE_TX_MSG] -[END_PARAM_NODE_TX_MSG] -[END_PARAM] - -[START_PARAM_VAL] -[START_PARAM_NET_VAL] -[END_PARAM_NET_VAL] - -[START_PARAM_NODE_VAL] -testBU,"NetworkNode",273 -[END_PARAM_NODE_VAL] - -[START_PARAM_MSG_VAL] -291,S,"GenMsgCycleTime",100 -[END_PARAM_MSG_VAL] - -[START_PARAM_SIG_VAL] -[END_PARAM_SIG_VAL] - -[END_PARAM_VAL] - - -[START_NOT_SUPPORTED] -[END_NOT_SUPPORTED] - -[START_NOT_PROCESSED] -OF_: - -[END_NOT_PROCESSED] +//******************************BUSMASTER Messages and signals Database ******************************// + +[DATABASE_VERSION] 1.3 + +[PROTOCOL] CAN + +[BUSMASTER_VERSION] [2.6.0] +[NUMBER_OF_MESSAGES] 2 +[START_MSG] testFrame1,291,8,2,1,S,testBU +[START_SIGNALS] someTestSignal,11,2,1,U,100,0,0,1,5,specialCharUnit°$,,recBU +[START_SIGNALS] Signal,3,3,4,U,6,0,1,0,1,someUnit,,recBU +[VALUE_DESCRIPTION] "one",1 +[VALUE_DESCRIPTION] "two",2 +[VALUE_DESCRIPTION] "three",3 +[END_MSG] + +[START_MSG] extendedFrame,18,8,0,1,X,testBU +[END_MSG] + +[START_VALUE_TABLE] +[END_VALUE_TABLE] + +[NODE] testBU,recBU + +[START_DESC] +[START_DESC_NET] +[END_DESC_NET] + +[START_DESC_NODE] +testBU "sender ECU"; +recBU "receiver ECU"; +[END_DESC_NODE] + +[START_DESC_MSG] +291 S "Multi Line Frame comment"; +[END_DESC_MSG] + +[START_DESC_SIG] +291 S someTestSignal "Multi Line Signal comment with a-umlaut: ä"; +[END_DESC_SIG] +[END_DESC] + +[START_PARAM] +[START_PARAM_NET] +[END_PARAM_NET] + +[START_PARAM_NODE] +"NetworkNode",INT,0,0,65535 +[END_PARAM_NODE] + +[START_PARAM_MSG] +"GenMsgCycleTime",INT,0,0,65535 +[END_PARAM_MSG] + +[START_PARAM_SIG] +[END_PARAM_SIG] + +[START_PARAM_NODE_RX_SIG] +[END_PARAM_NODE_RX_SIG] + +[START_PARAM_NODE_TX_MSG] +[END_PARAM_NODE_TX_MSG] +[END_PARAM] + +[START_PARAM_VAL] +[START_PARAM_NET_VAL] +[END_PARAM_NET_VAL] + +[START_PARAM_NODE_VAL] +testBU,"NetworkNode",273 +[END_PARAM_NODE_VAL] + +[START_PARAM_MSG_VAL] +291,S,"GenMsgCycleTime",100 +[END_PARAM_MSG_VAL] + +[START_PARAM_SIG_VAL] +[END_PARAM_SIG_VAL] + +[END_PARAM_VAL] + + +[START_NOT_SUPPORTED] +[END_NOT_SUPPORTED] + +[START_NOT_PROCESSED] +OF_: + +[END_NOT_PROCESSED] diff --git a/test/test.json b/tests/files/json/test.json similarity index 100% rename from test/test.json rename to tests/files/json/test.json diff --git a/test/test.kcd b/tests/files/kcd/test.kcd similarity index 100% rename from test/test.kcd rename to tests/files/kcd/test.kcd diff --git a/test/test.sym b/tests/files/sym/test.sym similarity index 98% rename from test/test.sym rename to tests/files/sym/test.sym index 22710880..7701b0ed 100644 --- a/test/test.sym +++ b/tests/files/sym/test.sym @@ -1,419 +1,419 @@ -FormatVersion=5.0 // Do not edit this line! -Title="AFE_CAN_ID0" - -{ENUMS} -enum State(0="Power On Reset, and a quoted comma", 1="Ready", 2="Following", 3="Fault", - 4="Forming", 5="N/A", 6="N/A", 7="N/A", 8="N/A", 9="N/A", 10="N/A", 11="N/A", - 12="N/A", 13="N/A", 14="N/A", 15="N/A") -enum Relay(0="Open", 1="Closed", 2="Error", 3="N/A") -enum PowerAvail(0="None", 1="Available", 2="Error", 3="N/A") -enum IGBTsEnabled(0="Disabled", 1="Enabled", 2="Error", 3="N/A") -enum WakeUpSignal(0="Not Active", 1="Active", 2="Error", 3="N/A") -enum Enable(0="Disable", 1="Enable", 2="Error", 3="N/A") -enum MessageValid(0="Invalid", 1="Valid", 2="Error", 3="N/A") -enum FaultClear(0="Normal", 1="Clear Faults", 2="Error", 3="N/A") -enum BridgeFlt(0="Normal", 1="FLT_A", 2="N/A", 3="FLT_C", 4="OverVoltage", - 5="FLT_B", 6="Overcurrent", 7="5V") -enum Fault(0="Normal", 1="Fault Active", 2="Error", 3="N/A") -enum CANStatus(0="Normal", 1="Warning", 3="ErrorPassive", 4="N/A") -enum InvertHwEnable(0="No invert", 1="Invert", 2="Error", 3="N/A") -enum EnableUPSMode(0="Disable", 1="Enable", 2="Error", 3="N/A") -enum EnableSplitPhase(0="Normal - Three Phase Mode", - 1="Enable Split Phase Mode", 2="Error", 3="N/A") -enum RelayCommand(0="Normal", 1="Force On", 2="Error", 3="N/A") -enum PhaseRotation(0="Negative", 1="Positive", 2="Error", 3="N/A") -enum LineVoltagePresent(0="No_Voltage", 1="Voltage_Detected", 2="Error", - 3="N/A") -enum Baudrate(0="125K", 1="250K", 2="500K", 3="1M") -enum FaultConfig(0="Warning", 1="Fault", 2="Error", 3="N/A") -enum MasterFollower(0="Master", // Master or standalone mode - 1="Follower", 2="Error", 3="N/A") - -{SEND} - -[CommandModeControl] -ID=00FFAB41h // Operational commands are received by the module via control bits within this message. -Type=Extended -DLC=8 -Var=Enable_command unsigned 6,2 -m /max:1 /e:Enable // Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state. -Var=FaultClear_command unsigned 4,2 -m /max:1 /e:FaultClear // Clears the latched fault message. -Var=InvertHwEnable_command unsigned 62,2 -m /max:1 /e:InvertHwEnable // Inverts the logic of the Hardware Enable input. -Var=EnableUPSMode_command unsigned 60,2 -m /max:1 /e:EnableUPSMode // Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power. -Var=EnableSplitPhase_command unsigned 58,2 -m /max:1 /e:EnableSplitPhase // Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system. -Var=ForceRelayMX1_command unsigned 38,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. -Var=ForceRelayMX2_command unsigned 36,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. -Var=ForceRelayK1_Precharge_command unsigned 34,2 -m /max:1 /p:0 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. -Var=ForceRelayRelayK2_DCRun_comand unsigned 32,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. -Var=PhaseRotation_command unsigned 56,2 -m /max:1 /e:PhaseRotation // Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING. -Var=MasterFollowerMode_command unsigned 22,2 -m /max:1 /e:MasterFollower // Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used. - -[CommandPower] -ID=0CFFAC41h // Sets the desired real (P) and reactive (Q) power levels for the module to follow while in the GRID FOLLOWING mode. -Type=Extended -DLC=8 -Var="RealPower command" signed 0,32 -m /u:W /min:-90000 /max:90000 // Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network. -Var=ReactivePower_command signed 32,32 -m /u:VA /min:-90000 /max:90000 // Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor. - -[CommandVF] -ID=0CFFAE41h // Sets the desired voltage and frequency for the module to produce while in the GRID FORMING mode. In addition, while in the READY and GRID FOLLOWING modes, this message is used to set the nominal voltage levels for detection of acceptable AC line voltage. -Type=Extended -DLC=8 -Var=Voltage_command unsigned 0,16 -m /u:Vrms /f:0.1 /min:10 /max:500 /d:240 // Desired output voltage while in grid forming mode. -Var=Frequency_command unsigned 16,16 -m /u:Hz /f:0.1 /min:45 /max:65 /d:50 // Desired output frequency while in grid forming mode. - -[MasterMeasuredPower] -ID=0CFFCAF6h // Returns the actual measured power. -Type=Extended -DLC=8 -Var=RealPower_measured signed 0,32 -m /u:W // Measured real power of master unit. -Var=ReactivePower_measured signed 32,32 -m /u:VA // Measured reactive power of master unit. - -[CommandFactoryControl] -ID=0CFFAF41h -Type=Extended -DLC=8 -Var=WriteSerialNumber unsigned 6,2 -m /e:Enable -Var=SerialNumber unsigned 32,32 -m -Var=FactoryAccess unsigned 16,16 -m - -[CommandSetNVParam] -ID=0CFFAA41h // Provides access to configure non-volatile parameters. Note that these parameters can only be set when the inverter's power stage is disabled (PowerCircuitEnabled_status in StatusBits message is 'Disabled.') -Type=Extended -DLC=8 -Mux=Param0 0,16 0 -m -Var=Dummy unsigned 16,16 -m - -[CommandSetNVParam] -DLC=8 -Mux=LVM_ClearingTimes1 0,16 1 -m // Line Voltage Monitor fault times. -Var=VUnder50pct unsigned 16,16 -m /u:ms /min:1 /max:30000 /d:160 // Determines the fault trip time when Line-to-line rms voltage for a phase remains under 50 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode. -Var=V50to88pct unsigned 32,16 -m /u:ms /min:1 /max:30000 /d:2000 // Determines the fault trip time when Line-to-line rms voltage for a phase remains between 50 and 88 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode. -Var=V110to120pct unsigned 48,16 -m /u:ms /min:1 /max:30000 /d:1000 // Determines the fault trip time when Line-to-line rms voltage for a phase remains between 110 and 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode. - -[CommandSetNVParam] -DLC=8 -Mux=LVM_ClearingTimes2 0,16 2 -m // Line Voltage Monitor fault times. -Var=VOver120 unsigned 16,16 -m /min:1 /max:30000 /d:160 // Determines the fault trip time when Line-to-line rms voltage for a phase remains Over 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode. - -[CommandSetNVParam] -DLC=8 -Mux=LFM_Limits 0,16 3 -m // Line Frequency Monitor limits. -Var=FreqHi unsigned 16,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:60.5 // Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux. -Var=FreqLo unsigned 32,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:59.8 // Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux. -Var=FreqVeryLo unsigned 48,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:57 // Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux. - -[CommandSetNVParam] -DLC=8 -Mux=LFM_ClearingTimes 0,16 4 -m // Line Frequency Monitor Trip times -Var=FreqVeryLo unsigned 16,16 -m /u:ms /min:160 /max:160 /d:160 // Determines the time it will take for a fault trip to occur when line frequency remains below the value specified in FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode. -Var=FreqLo unsigned 32,16 -m /u:ms /min:1 /max:30000 /d:160 // Determines the time it will take for a fault trip to occur when line frequency remains between the value specified in FreqLo and FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode. -Var=FreqHi unsigned 48,16 -m /u:ms /min:160 /max:160 /d:160 // Determines the time it will take for a fault trip to occur when line frequency remains above the value specified in FreqHi of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode. - -[CommandSetNVParam] -DLC=8 -Mux=J1939_Interface 0,16 5 -m // J1939 interface parameters -Var=NodeID unsigned 16,8 -m /max:247 /d:247 // J1939 Source Address node for the module. -Var=SA_Mask unsigned 24,8 -m /d:65 // Not presently used. -Var=Baudrate unsigned 32,4 -m /max:3 /e:Baudrate /d:2 // CAN baudrate - -[CommandSetNVParam] -DLC=8 -Mux=Fault_Config 0,16 6 -m // Allows configuration of various fault conditions to either trip the drive, or provide a warning status via CAN -Var=ThermalOverload unsigned 22,2 -m /max:1 /e:FaultConfig // Configures action to take when thermal overload input is active. - -[CommandSetNVParam] -DLC=8 -Mux=ContactorDelays1 0,16 7 -m // Sets the time the controller assumes it will take for contactors to open/close. -Var=MX1Open unsigned 16,16 -m /u:ms /max:5000 /d:100 // Maximum time required for the MX1 contactor to open. -Var=MX1Close unsigned 32,16 -m /u:ms /max:2000 /d:100 // Maximum time required for the MX1 contactor to close. -Var=MX2Open unsigned 48,16 -m /u:ms /max:1 // Maximum time required for the MX2 contactor to open. - -[CommandSetNVParam] -DLC=8 -Mux=ContactorDelays2 0,16 8 -m // Sets the time the controller assumes it will take for contactors to open/close. -Var=MX2Close unsigned 16,16 -m /u:ms /max:2000 // Maximum time required for the MX2 contactor to open. -Var=K1Open unsigned 32,16 -m /u:ms /max:2000 // Maximum time required for the K1 contactor to open. -Var=K1Close unsigned 48,16 -m /u:ms /max:2000 // Maximum time required for the K1 contactor to close. - -[CommandSetNVParam] -DLC=8 -Mux=ContactorDelays3 0,16 Ah -m // Sets the time the controller assumes it will take for contactors to open/close. -Var=K2Open unsigned 16,16 -m /u:ms /max:2000 // Maximum time required for the K2 contactor to open. -Var=K2Close unsigned 32,16 -m /u:ms /max:2000 // Maximum time required for the K2 contactor to close. - -[CommandModeControlAPU2] -ID=00FF9B41h // Operational commands are received by the module via control bits within this message. -Type=Extended -DLC=8 -Var=Enable_command unsigned 6,2 -m /max:1 /e:Enable // Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state. -Var=FaultClear_command unsigned 4,2 -m /max:1 /e:FaultClear // Clears the latched fault message. -Var=InvertHwEnable_command unsigned 62,2 -m /max:1 /e:InvertHwEnable // Inverts the logic of the Hardware Enable input. -Var=EnableUPSMode_command unsigned 60,2 -m /max:1 /e:EnableUPSMode // Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power. -Var=EnableSplitPhase_command unsigned 58,2 -m /max:1 /e:EnableSplitPhase // Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system. -Var=ForceRelayMX1_command unsigned 38,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. -Var=ForceRelayMX2_command unsigned 36,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. -Var=ForceRelayK1_Precharge_command unsigned 34,2 -m /max:1 /p:0 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. -Var=ForceRelayRelayK2_DCRun_comand unsigned 32,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. -Var=PhaseRotation_command unsigned 56,2 -m /max:1 /e:PhaseRotation // Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING -Var=MasterFollowerMode_command unsigned 22,2 -m /max:1 /e:MasterFollower // Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used. - -[CommandPowerAPU2] -ID=0CFF9C41h // Sets the desired real (P) and reactive (Q) power levels for the module to follow while in the GRID FOLLOWING mode. -Type=Extended -DLC=8 -Var=RealPower_command signed 0,32 -m /u:W /min:-90000 /max:90000 // Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network. -Var=ReactivePower_command signed 32,32 -m /u:VA /min:-90000 /max:90000 // Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor. - -[CommandVFAPU2] -ID=0CFF9E41h // Sets the desired voltage and frequency for the module to produce while in the GRID FORMING mode. In addition, while in the READY and GRID FOLLOWING modes, this message is used to set the nominal voltage levels for detection of acceptable AC line voltage. -Type=Extended -DLC=8 -Var=Voltage_command unsigned 0,16 -m /u:Vrms /f:0.1 /min:10 /max:500 /d:240 // Desired output voltage while in grid forming mode. -Var=Frequency_command unsigned 16,16 -m /u:Hz /f:0.1 /min:45 /max:65 /d:50 // Desired output frequency while in grid forming mode. - -[MasterMeasuredPowerAPU2] -ID=0CFFCAF7h // Returns the actual measured power. -Type=Extended -DLC=8 -Var=RealPower_measured signed 0,32 -m /u:W // Measured real power of master unit. -Var=ReactivePower_measured signed 32,32 -m /u:VA // Measured reactive power of master unit. - -{SENDRECEIVE} - -[justString] -ID=1CFFACC0h -Type=Extended -DLC=8 -Var=rev string 0,64 -m /d:"ICUx-03i" - -[stringAndOther] -ID=1CFFABC0h -Type=Extended -DLC=8 -Var=rev string 0,64 -m /d:"ICUx-03i" -Var=RealPower_measured signed 0,32 -m /u:W // Measured real power. - -[StatusMeasuredPower] -ID=0CFFCAF7h // Returns the actual measured power. -Type=Extended -DLC=8 -CycleTime=100 -Var=RealPower_measured signed 0,32 -m /u:W // Measured real power. -Var=ReactivePower_measured signed 32,32 -m /u:VA // Measured reactive power. - -[StatusCommandedPower] -ID=18FFC4F7h // Echoes the commanded power (P&Q) as received in CommandPQ. -Type=Extended -DLC=8 -CycleTime=100 -Var=RealPower_echo signed 0,32 -m /u:W // Echoed real power command. -Var=ReactivePower_echo signed 32,32 -m /u:VA // Echoed reactive power command. - -[StatusBits] -ID=0CFFC3F7h // Bits representing the status of the power module. -Type=Extended -DLC=8 -CycleTime=100 -Var=State_status unsigned 4,4 -m /max:7 /e:State // Active control mode. -Var=MX2Permissive_status unsigned 20,2 -m /e:Relay // MX2 relay status -Var=PowerAvailAC_status unsigned 12,2 -m /e:PowerAvail // Indicates that AC power is connected and that voltage and frequency are within nominal ranges. -Var=PowerAvailDC_status unsigned 10,2 -m /e:PowerAvail // Indicates that DC bus voltage is within operating range. -Var=PowerCircuitEnabled_status unsigned 8,2 -m /e:IGBTsEnabled // Indicates whether the switching devices are active. -Var=HardwareEnable_status unsigned 14,2 -m /e:WakeUpSignal // Status of the hardware enable. -Var=Enable_echo unsigned 2,2 -m /e:Enable // Echos the state of the Enable command withing the CommandModeControl message. -Var=FaultClr_echo unsigned 0,2 -m /e:FaultClear // Echos the state of the FaultClear command withing the CommandModeControl message. -Var=MessageValidModeControl_status unsigned 30,2 -m /e:MessageValid // Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid. -Var=MX1Permissive_status unsigned 22,2 -m /e:Relay // MX1 relay status -Var=K2DCRunPermissive_status unsigned 16,2 -m /e:Relay // K2 DC Run relay status. -Var=K1PrechargePermissive_status unsigned 18,2 -m /e:Relay // K1 precharge relay status. -Var=MessageValidPowerCMD_status unsigned 28,2 -m /e:MessageValid // Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid. -Var=MessageValidVF_status unsigned 26,2 -m /e:MessageValid // Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid. -Var=CANbus_status unsigned 24,2 -m /e:CANStatus // Operational status of the CAN bus driver. -Var=EnableUPSMode_echo unsigned 38,2 -m /e:EnableUPSMode // Echos the state of the EnableUPSMode command withing the CommandModeControl message. -Var=EnableSplitPhase_echo unsigned 36,2 -m /e:EnableSplitPhase // Echos the state of the EnableSplitPhase command withing the CommandModeControl message. -Var=PhaseRotation_status unsigned 34,2 -m /max:1 /e:PhaseRotation // Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive. -Var=LineVoltageDetected_status unsigned 32,2 -m /max:1 /e:LineVoltagePresent // Flag indicating if voltage is detected on L1, L2 or L3. -Var=PhaseRotation_echo unsigned 46,2 -m /max:1 /e:PhaseRotation // Echos the state of PhaseRotation_command withing the CommandModeControl message. - -[StatusControlVoltage] -ID=1CFFC5F7h // Lists present voltage of each power supply on the control board (24V, 15V, 5V, and 3.3V.) -Type=Extended -DLC=8 -CycleTime=100 -Var=v5p0_Supply signed 0,16 -m /u:V /f:0.01 // Present voltage of the control board 5V power suppy. -Var=v3p3_Supply signed 16,16 -m /u:V /f:0.01 // Present voltage of the control board 3.3V power supply. -Var=v24_Supply signed 32,16 -m /u:V /f:0.01 // Present voltage of the control board 24V power supply. -Var=v15_Supply signed 48,16 -m /u:V /f:0.01 // Present voltage of the control board 15V power supply. - -[StatusTemps] -ID=18FFCBF7h // Returns the inlet water temperature to the module as well as module internal ambient temperature. -Type=Extended -DLC=8 -CycleTime=100 -Var=TempInlet_measured signed 0,16 -m /u:C /f:0.1 // Coolant inlet temperature -Var=TempInternal_measured signed 16,16 -m /u:C /f:0.1 // Internal ambient temperature -Var=ConverterLosses unsigned 32,16 -m /u:W /max:1 // Power converter thermal loss - -[StatusFaults] -ID=0CFFC8F7h // Fault bits. -Type=Extended -DLC=8 -CycleTime=100 -Var=BridgeAVoltageOk_status unsigned 60,1 -m /e:Fault // Indicates whether a hardware trip has been activated. -Var=OvercurrentAC_status unsigned 4,2 -m /e:Fault // Set immediately upon the software detection of AC current exceeding the threshold value. -Var=BridgeBVoltageOk_status unsigned 44,1 -m /e:Fault // Indicates whether a hardware trip has been activated. -Var=OvervoltageDC_status unsigned 14,2 -m /e:Fault // Set immediately upon the software detection of DC voltage exceeding the threshold value. -Var=OvertempPowerDevice_status unsigned 8,2 -m /e:Fault // Set immediately upon the software detection of an IGBT temperature exceeding the threshold value. -Var=OvertempInternal_status unsigned 10,2 -m /e:Fault // Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value. -Var=LossValidControlMessage_status unsigned 16,4 -m /e:Fault // Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period. -Var=UndervoltageDC_status unsigned 12,2 -m /e:Fault // Indicates loss of DC source voltage. -Var=ControlHardwareFail_status unsigned 20,4 -m /e:Fault // Set upon the failure of control hardware to return expected response. -Var=OvercurrentDC_status unsigned 0,2 -m /e:Fault // Set immediately upon the software detection of DC current exceeding the threshold value. -Var=GeneralFault_status unsigned 6,2 -m /e:Fault // Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor. -Var=LossOfAC_status unsigned 2,2 -m /e:Fault // In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message. -Var=EStopShutdown_status unsigned 30,2 -m /e:Fault // Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active. -Var=BridgeAFault_status unsigned 61,3 -m /e:BridgeFlt // Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active. -Var=BridgeBFault_status unsigned 45,3 -m /e:BridgeFlt // Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active. -Var=IllegalTransition_status unsigned 28,2 -m /max:1 /e:Fault // Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available. -Var=InvalidEEHeader_status unsigned 26,2 -m /max:1 /e:Fault // Indicates that reading of non-volatile parameters at power-up failed. -Var=InvalidEESection_status unsigned 24,2 -m /max:1 /e:Fault // Indicates that reading or writing of an non-volatile parameter section failed. -Var=ThermalOverload unsigned 38,2 -m /max:1 /e:Fault - -[StatusACParameters] -ID=0CFFC2F7h // RMS AC Voltage, current, and frequency measured by line A, B and C feedbacks. -Type=Extended -DLC=8 -CycleTime=100 -Var=VoltageAC_measured signed 0,16 -m /u:V /f:0.1 // Measured RMS AC voltage. -Var=CurrentAC_measured signed 16,16 -m /u:A // Measured RMS AC current. -Var=Frequency_measured signed 32,16 -m /u:Hz /f:0.1 // Measured frequency. - -[StatusDCParameters] -ID=1CFFC7F7h // Measured (boosted) DC Bus voltage, DC Current, and estimated DC Input voltage. -Type=Extended -DLC=8 -CycleTime=100 -Var=VoltageDCBus signed 16,16 -m /u:V // Measured DC bus voltage. -Var=CurrentDC_measured signed 32,16 -m /u:A // Measured DC current. -Var=VoltageDCInput_measured signed 0,16 -m /u:V // Estimated DC input voltage. - -[StatusControlVolts2] -ID=1CFFC6F7h // Present voltage of the -15V power supply on the control board. -Type=Extended -DLC=8 -CycleTime=100 -Var=n15V_Supply signed 0,16 -m /u:V /f:0.01 // Present voltage of the control board -15V power supply. -Var=DiodeTemperature unsigned 32,16 -m /u:C /max:1 // Hottest diode -Var=IGBTTemperature unsigned 48,16 -m /u:C /max:1 // Hottest IGBT - -[softwareRev] -ID=1CFFC1F7h // Software revision. -Type=Extended -DLC=8 -Var=InterfaceRev unsigned 16,16 -m /f:0.01 /p:2 // Software revision of the CAN communication interface. -Var=ControlSwRev unsigned 0,16 -m /f:0.01 /p:2 // Software revision of the control firmware. -Var=BuildTime unsigned 32,32 -m // Build timestamp. - -[StatusCommandVF] -ID=18FFC9F7h // Echoes the voltage and frequency commands from commandVF. -Type=Extended -DLC=8 -CycleTime=100 -Var=Voltage_echo unsigned 0,16 -m /u:Vrms /f:0.1 // Echoed voltage command -Var=Frequency_echo unsigned 16,16 -m /u:Hz /f:0.1 // Echoed frequency command. - -[serialNumber] -ID=1CFFCCF7h // Serial number of the power module. -Type=Extended -DLC=8 -Var=SerialNumber unsigned 0,32 -m // Serial number of the power module. - -[softwareRevHash] -ID=1CFFCDF7h // Unique software revision identification hashcode. -Type=Extended -DLC=8 -Var=Hash unsigned 0,28 -h -m // Unique revision identification hashcode. - -[StatusNVParam] -ID=1CFFA9F7h // Echos back parameter values. -Type=Extended -DLC=8 -Mux=ActParam0 0,16 0 -m -Var=Dummy unsigned 16,16 -m /min:5 /max:10 - -[StatusNVParam] -DLC=8 -Mux=ActLVM_ClearingTimes1 0,16 1 -m -Var=VUnder50pct unsigned 16,16 -m /u:ms /min:1 /max:30000 /d:160 -Var=V50to88pct unsigned 32,16 -m /u:ms /min:1 /max:30000 /d:2000 -Var=V110to120pct unsigned 48,16 -m /u:ms /min:1 /max:30000 /d:1000 - -[StatusNVParam] -DLC=8 -Mux=ActLVM_ClearingTimes2 0,16 2 -m -Var=VOver120 unsigned 16,16 -m /min:1 /max:30000 /d:160 - -[StatusNVParam] -DLC=8 -Mux=ActLFM_Limits 0,16 3 -m -Var=FreqHi unsigned 16,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:60.5 -Var=FreqLo unsigned 32,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:59.8 -Var=FreqVeryLo unsigned 48,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:57 - -[StatusNVParam] -DLC=8 -Mux=ActLFM_ClearingTimes 0,16 4 -m -Var=FreqVeryLo unsigned 16,16 -m /u:ms /min:160 /max:160 /d:160 -Var=FreqLo unsigned 32,16 -m /u:ms /min:1 /max:30000 /d:160 -Var=FreqHi unsigned 48,16 -m /u:ms /min:160 /max:160 /d:160 - -[StatusNVParam] -DLC=8 -Mux=StatusJ1939_Interface 0,16 5 -m // J1939 interface parameters -Var=StatusNodeID unsigned 16,8 -m /max:247 /d:247 // J1939 Source Address node for the module -Var=StatusSA_Mask unsigned 24,8 -m /d:65 // Mask used to configure from which master source addresses to accept commands. -Var=StatusBaudrate unsigned 32,4 -m /max:3 /e:Baudrate /d:2 - -[StatusNVParam] -DLC=8 -Mux=StatusFault_Config 0,16 6 -m // configuration of various fault conditions to either trip the drive, or provide a warning status via CAN -Var=StatusThermalOverload unsigned 22,2 -m /max:1 /e:FaultConfig // Configured action to take when thermal overload input is active. - -[StatusNVParam] -DLC=8 -Mux=StatusContactorDelays1 0,16 7 -m // Sets the time the controller assumes it will take for contactors to open/close. -Var=StatusMX1Open unsigned 16,16 -m /u:ms /max:5000 /d:100 // Maximum time required for the MX1 contactor to open. -Var=StatusMX1Close unsigned 32,16 -m /u:ms /max:2000 /d:100 // Maximum time required for the MX1 contactor to close. -Var=StatusMX2Open unsigned 48,16 -m /u:ms /max:1 // Maximum time required for the MX2 contactor to open. - -[StatusNVParam] -DLC=8 -Mux=StatusContactorDelays2 0,16 8 -m // Sets the time the controller assumes it will take for contactors to open/close. -Var=StatusMX2Close unsigned 16,16 -m /u:ms /max:2000 // Maximum time required for the MX2 contactor to open. -Var=StatusK1Open unsigned 32,16 -m /u:ms /max:2000 // Maximum time required for the K1 contactor to open. -Var=StatusK1Close unsigned 48,16 -m /u:ms /max:2000 // Maximum time required for the K1 contactor to close. - -[StatusNVParam] -DLC=8 -Mux=StatusContactorDelays3 0,16 9 -m // Sets the time the controller assumes it will take for contactors to open/close. -Var=StatusK2Open unsigned 16,16 -m /u:ms /max:2000 // Maximum time required for the K2 contactor to open. -Var=StatusK2Close unsigned 32,16 -m /u:ms /max:2000 // Maximum time required for the K2 contactor to close. - -[StatusLineCurrents] -ID=18FFD0F7h // Measured RMS line currents. -Type=Extended -DLC=8 -CycleTime=100 -Var=L1Current_measured unsigned 0,16 -m /u:A /max:1 // Measured L1 RMS line current. -Var=L2Current_measured unsigned 16,16 -m /u:A /max:1 // Measured L2 RMS line current. -Var=L3Current_measured unsigned 32,16 -m /u:A /max:1 // Measured L3 RMS line current. - -[StatusLineVoltages] -ID=18FFD1F7h // Measured RMS line voltages. -Type=Extended -DLC=8 -CycleTime=100 -Var=L1Voltage_measured unsigned 0,16 -m /u:Vrms /f:0.1 /max:1 // Measured L1 RMS line-neutral voltage -Var=L2Voltage_measured unsigned 16,16 -m /u:Vrms /f:0.1 /max:1 // Measured L2 RMS line-neutral voltage -Var=L3Voltage_measured unsigned 32,16 -m /u:Vrms /f:0.1 /max:1 // Measured L3 RMS line-neutral voltage - +FormatVersion=5.0 // Do not edit this line! +Title="AFE_CAN_ID0" + +{ENUMS} +enum State(0="Power On Reset, and a quoted comma", 1="Ready", 2="Following", 3="Fault", + 4="Forming", 5="N/A", 6="N/A", 7="N/A", 8="N/A", 9="N/A", 10="N/A", 11="N/A", + 12="N/A", 13="N/A", 14="N/A", 15="N/A") +enum Relay(0="Open", 1="Closed", 2="Error", 3="N/A") +enum PowerAvail(0="None", 1="Available", 2="Error", 3="N/A") +enum IGBTsEnabled(0="Disabled", 1="Enabled", 2="Error", 3="N/A") +enum WakeUpSignal(0="Not Active", 1="Active", 2="Error", 3="N/A") +enum Enable(0="Disable", 1="Enable", 2="Error", 3="N/A") +enum MessageValid(0="Invalid", 1="Valid", 2="Error", 3="N/A") +enum FaultClear(0="Normal", 1="Clear Faults", 2="Error", 3="N/A") +enum BridgeFlt(0="Normal", 1="FLT_A", 2="N/A", 3="FLT_C", 4="OverVoltage", + 5="FLT_B", 6="Overcurrent", 7="5V") +enum Fault(0="Normal", 1="Fault Active", 2="Error", 3="N/A") +enum CANStatus(0="Normal", 1="Warning", 3="ErrorPassive", 4="N/A") +enum InvertHwEnable(0="No invert", 1="Invert", 2="Error", 3="N/A") +enum EnableUPSMode(0="Disable", 1="Enable", 2="Error", 3="N/A") +enum EnableSplitPhase(0="Normal - Three Phase Mode", + 1="Enable Split Phase Mode", 2="Error", 3="N/A") +enum RelayCommand(0="Normal", 1="Force On", 2="Error", 3="N/A") +enum PhaseRotation(0="Negative", 1="Positive", 2="Error", 3="N/A") +enum LineVoltagePresent(0="No_Voltage", 1="Voltage_Detected", 2="Error", + 3="N/A") +enum Baudrate(0="125K", 1="250K", 2="500K", 3="1M") +enum FaultConfig(0="Warning", 1="Fault", 2="Error", 3="N/A") +enum MasterFollower(0="Master", // Master or standalone mode + 1="Follower", 2="Error", 3="N/A") + +{SEND} + +[CommandModeControl] +ID=00FFAB41h // Operational commands are received by the module via control bits within this message. +Type=Extended +DLC=8 +Var=Enable_command unsigned 6,2 -m /max:1 /e:Enable // Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state. +Var=FaultClear_command unsigned 4,2 -m /max:1 /e:FaultClear // Clears the latched fault message. +Var=InvertHwEnable_command unsigned 62,2 -m /max:1 /e:InvertHwEnable // Inverts the logic of the Hardware Enable input. +Var=EnableUPSMode_command unsigned 60,2 -m /max:1 /e:EnableUPSMode // Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power. +Var=EnableSplitPhase_command unsigned 58,2 -m /max:1 /e:EnableSplitPhase // Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system. +Var=ForceRelayMX1_command unsigned 38,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. +Var=ForceRelayMX2_command unsigned 36,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. +Var=ForceRelayK1_Precharge_command unsigned 34,2 -m /max:1 /p:0 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. +Var=ForceRelayRelayK2_DCRun_comand unsigned 32,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. +Var=PhaseRotation_command unsigned 56,2 -m /max:1 /e:PhaseRotation // Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING. +Var=MasterFollowerMode_command unsigned 22,2 -m /max:1 /e:MasterFollower // Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used. + +[CommandPower] +ID=0CFFAC41h // Sets the desired real (P) and reactive (Q) power levels for the module to follow while in the GRID FOLLOWING mode. +Type=Extended +DLC=8 +Var="RealPower command" signed 0,32 -m /u:W /min:-90000 /max:90000 // Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network. +Var=ReactivePower_command signed 32,32 -m /u:VA /min:-90000 /max:90000 // Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor. + +[CommandVF] +ID=0CFFAE41h // Sets the desired voltage and frequency for the module to produce while in the GRID FORMING mode. In addition, while in the READY and GRID FOLLOWING modes, this message is used to set the nominal voltage levels for detection of acceptable AC line voltage. +Type=Extended +DLC=8 +Var=Voltage_command unsigned 0,16 -m /u:Vrms /f:0.1 /min:10 /max:500 /d:240 // Desired output voltage while in grid forming mode. +Var=Frequency_command unsigned 16,16 -m /u:Hz /f:0.1 /min:45 /max:65 /d:50 // Desired output frequency while in grid forming mode. + +[MasterMeasuredPower] +ID=0CFFCAF6h // Returns the actual measured power. +Type=Extended +DLC=8 +Var=RealPower_measured signed 0,32 -m /u:W // Measured real power of master unit. +Var=ReactivePower_measured signed 32,32 -m /u:VA // Measured reactive power of master unit. + +[CommandFactoryControl] +ID=0CFFAF41h +Type=Extended +DLC=8 +Var=WriteSerialNumber unsigned 6,2 -m /e:Enable +Var=SerialNumber unsigned 32,32 -m +Var=FactoryAccess unsigned 16,16 -m + +[CommandSetNVParam] +ID=0CFFAA41h // Provides access to configure non-volatile parameters. Note that these parameters can only be set when the inverter's power stage is disabled (PowerCircuitEnabled_status in StatusBits message is 'Disabled.') +Type=Extended +DLC=8 +Mux=Param0 0,16 0 -m +Var=Dummy unsigned 16,16 -m + +[CommandSetNVParam] +DLC=8 +Mux=LVM_ClearingTimes1 0,16 1 -m // Line Voltage Monitor fault times. +Var=VUnder50pct unsigned 16,16 -m /u:ms /min:1 /max:30000 /d:160 // Determines the fault trip time when Line-to-line rms voltage for a phase remains under 50 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode. +Var=V50to88pct unsigned 32,16 -m /u:ms /min:1 /max:30000 /d:2000 // Determines the fault trip time when Line-to-line rms voltage for a phase remains between 50 and 88 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode. +Var=V110to120pct unsigned 48,16 -m /u:ms /min:1 /max:30000 /d:1000 // Determines the fault trip time when Line-to-line rms voltage for a phase remains between 110 and 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode. + +[CommandSetNVParam] +DLC=8 +Mux=LVM_ClearingTimes2 0,16 2 -m // Line Voltage Monitor fault times. +Var=VOver120 unsigned 16,16 -m /min:1 /max:30000 /d:160 // Determines the fault trip time when Line-to-line rms voltage for a phase remains Over 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode. + +[CommandSetNVParam] +DLC=8 +Mux=LFM_Limits 0,16 3 -m // Line Frequency Monitor limits. +Var=FreqHi unsigned 16,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:60.5 // Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux. +Var=FreqLo unsigned 32,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:59.8 // Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux. +Var=FreqVeryLo unsigned 48,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:57 // Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux. + +[CommandSetNVParam] +DLC=8 +Mux=LFM_ClearingTimes 0,16 4 -m // Line Frequency Monitor Trip times +Var=FreqVeryLo unsigned 16,16 -m /u:ms /min:160 /max:160 /d:160 // Determines the time it will take for a fault trip to occur when line frequency remains below the value specified in FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode. +Var=FreqLo unsigned 32,16 -m /u:ms /min:1 /max:30000 /d:160 // Determines the time it will take for a fault trip to occur when line frequency remains between the value specified in FreqLo and FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode. +Var=FreqHi unsigned 48,16 -m /u:ms /min:160 /max:160 /d:160 // Determines the time it will take for a fault trip to occur when line frequency remains above the value specified in FreqHi of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode. + +[CommandSetNVParam] +DLC=8 +Mux=J1939_Interface 0,16 5 -m // J1939 interface parameters +Var=NodeID unsigned 16,8 -m /max:247 /d:247 // J1939 Source Address node for the module. +Var=SA_Mask unsigned 24,8 -m /d:65 // Not presently used. +Var=Baudrate unsigned 32,4 -m /max:3 /e:Baudrate /d:2 // CAN baudrate + +[CommandSetNVParam] +DLC=8 +Mux=Fault_Config 0,16 6 -m // Allows configuration of various fault conditions to either trip the drive, or provide a warning status via CAN +Var=ThermalOverload unsigned 22,2 -m /max:1 /e:FaultConfig // Configures action to take when thermal overload input is active. + +[CommandSetNVParam] +DLC=8 +Mux=ContactorDelays1 0,16 7 -m // Sets the time the controller assumes it will take for contactors to open/close. +Var=MX1Open unsigned 16,16 -m /u:ms /max:5000 /d:100 // Maximum time required for the MX1 contactor to open. +Var=MX1Close unsigned 32,16 -m /u:ms /max:2000 /d:100 // Maximum time required for the MX1 contactor to close. +Var=MX2Open unsigned 48,16 -m /u:ms /max:1 // Maximum time required for the MX2 contactor to open. + +[CommandSetNVParam] +DLC=8 +Mux=ContactorDelays2 0,16 8 -m // Sets the time the controller assumes it will take for contactors to open/close. +Var=MX2Close unsigned 16,16 -m /u:ms /max:2000 // Maximum time required for the MX2 contactor to open. +Var=K1Open unsigned 32,16 -m /u:ms /max:2000 // Maximum time required for the K1 contactor to open. +Var=K1Close unsigned 48,16 -m /u:ms /max:2000 // Maximum time required for the K1 contactor to close. + +[CommandSetNVParam] +DLC=8 +Mux=ContactorDelays3 0,16 Ah -m // Sets the time the controller assumes it will take for contactors to open/close. +Var=K2Open unsigned 16,16 -m /u:ms /max:2000 // Maximum time required for the K2 contactor to open. +Var=K2Close unsigned 32,16 -m /u:ms /max:2000 // Maximum time required for the K2 contactor to close. + +[CommandModeControlAPU2] +ID=00FF9B41h // Operational commands are received by the module via control bits within this message. +Type=Extended +DLC=8 +Var=Enable_command unsigned 6,2 -m /max:1 /e:Enable // Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state. +Var=FaultClear_command unsigned 4,2 -m /max:1 /e:FaultClear // Clears the latched fault message. +Var=InvertHwEnable_command unsigned 62,2 -m /max:1 /e:InvertHwEnable // Inverts the logic of the Hardware Enable input. +Var=EnableUPSMode_command unsigned 60,2 -m /max:1 /e:EnableUPSMode // Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power. +Var=EnableSplitPhase_command unsigned 58,2 -m /max:1 /e:EnableSplitPhase // Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system. +Var=ForceRelayMX1_command unsigned 38,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. +Var=ForceRelayMX2_command unsigned 36,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. +Var=ForceRelayK1_Precharge_command unsigned 34,2 -m /max:1 /p:0 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. +Var=ForceRelayRelayK2_DCRun_comand unsigned 32,2 -m /max:1 /e:RelayCommand // If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only. +Var=PhaseRotation_command unsigned 56,2 -m /max:1 /e:PhaseRotation // Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING +Var=MasterFollowerMode_command unsigned 22,2 -m /max:1 /e:MasterFollower // Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used. + +[CommandPowerAPU2] +ID=0CFF9C41h // Sets the desired real (P) and reactive (Q) power levels for the module to follow while in the GRID FOLLOWING mode. +Type=Extended +DLC=8 +Var=RealPower_command signed 0,32 -m /u:W /min:-90000 /max:90000 // Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network. +Var=ReactivePower_command signed 32,32 -m /u:VA /min:-90000 /max:90000 // Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor. + +[CommandVFAPU2] +ID=0CFF9E41h // Sets the desired voltage and frequency for the module to produce while in the GRID FORMING mode. In addition, while in the READY and GRID FOLLOWING modes, this message is used to set the nominal voltage levels for detection of acceptable AC line voltage. +Type=Extended +DLC=8 +Var=Voltage_command unsigned 0,16 -m /u:Vrms /f:0.1 /min:10 /max:500 /d:240 // Desired output voltage while in grid forming mode. +Var=Frequency_command unsigned 16,16 -m /u:Hz /f:0.1 /min:45 /max:65 /d:50 // Desired output frequency while in grid forming mode. + +[MasterMeasuredPowerAPU2] +ID=0CFFCAF7h // Returns the actual measured power. +Type=Extended +DLC=8 +Var=RealPower_measured signed 0,32 -m /u:W // Measured real power of master unit. +Var=ReactivePower_measured signed 32,32 -m /u:VA // Measured reactive power of master unit. + +{SENDRECEIVE} + +[justString] +ID=1CFFACC0h +Type=Extended +DLC=8 +Var=rev string 0,64 -m /d:"ICUx-03i" + +[stringAndOther] +ID=1CFFABC0h +Type=Extended +DLC=8 +Var=rev string 0,64 -m /d:"ICUx-03i" +Var=RealPower_measured signed 0,32 -m /u:W // Measured real power. + +[StatusMeasuredPower] +ID=0CFFCAF7h // Returns the actual measured power. +Type=Extended +DLC=8 +CycleTime=100 +Var=RealPower_measured signed 0,32 -m /u:W // Measured real power. +Var=ReactivePower_measured signed 32,32 -m /u:VA // Measured reactive power. + +[StatusCommandedPower] +ID=18FFC4F7h // Echoes the commanded power (P&Q) as received in CommandPQ. +Type=Extended +DLC=8 +CycleTime=100 +Var=RealPower_echo signed 0,32 -m /u:W // Echoed real power command. +Var=ReactivePower_echo signed 32,32 -m /u:VA // Echoed reactive power command. + +[StatusBits] +ID=0CFFC3F7h // Bits representing the status of the power module. +Type=Extended +DLC=8 +CycleTime=100 +Var=State_status unsigned 4,4 -m /max:7 /e:State // Active control mode. +Var=MX2Permissive_status unsigned 20,2 -m /e:Relay // MX2 relay status +Var=PowerAvailAC_status unsigned 12,2 -m /e:PowerAvail // Indicates that AC power is connected and that voltage and frequency are within nominal ranges. +Var=PowerAvailDC_status unsigned 10,2 -m /e:PowerAvail // Indicates that DC bus voltage is within operating range. +Var=PowerCircuitEnabled_status unsigned 8,2 -m /e:IGBTsEnabled // Indicates whether the switching devices are active. +Var=HardwareEnable_status unsigned 14,2 -m /e:WakeUpSignal // Status of the hardware enable. +Var=Enable_echo unsigned 2,2 -m /e:Enable // Echos the state of the Enable command withing the CommandModeControl message. +Var=FaultClr_echo unsigned 0,2 -m /e:FaultClear // Echos the state of the FaultClear command withing the CommandModeControl message. +Var=MessageValidModeControl_status unsigned 30,2 -m /e:MessageValid // Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid. +Var=MX1Permissive_status unsigned 22,2 -m /e:Relay // MX1 relay status +Var=K2DCRunPermissive_status unsigned 16,2 -m /e:Relay // K2 DC Run relay status. +Var=K1PrechargePermissive_status unsigned 18,2 -m /e:Relay // K1 precharge relay status. +Var=MessageValidPowerCMD_status unsigned 28,2 -m /e:MessageValid // Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid. +Var=MessageValidVF_status unsigned 26,2 -m /e:MessageValid // Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid. +Var=CANbus_status unsigned 24,2 -m /e:CANStatus // Operational status of the CAN bus driver. +Var=EnableUPSMode_echo unsigned 38,2 -m /e:EnableUPSMode // Echos the state of the EnableUPSMode command withing the CommandModeControl message. +Var=EnableSplitPhase_echo unsigned 36,2 -m /e:EnableSplitPhase // Echos the state of the EnableSplitPhase command withing the CommandModeControl message. +Var=PhaseRotation_status unsigned 34,2 -m /max:1 /e:PhaseRotation // Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive. +Var=LineVoltageDetected_status unsigned 32,2 -m /max:1 /e:LineVoltagePresent // Flag indicating if voltage is detected on L1, L2 or L3. +Var=PhaseRotation_echo unsigned 46,2 -m /max:1 /e:PhaseRotation // Echos the state of PhaseRotation_command withing the CommandModeControl message. + +[StatusControlVoltage] +ID=1CFFC5F7h // Lists present voltage of each power supply on the control board (24V, 15V, 5V, and 3.3V.) +Type=Extended +DLC=8 +CycleTime=100 +Var=v5p0_Supply signed 0,16 -m /u:V /f:0.01 // Present voltage of the control board 5V power suppy. +Var=v3p3_Supply signed 16,16 -m /u:V /f:0.01 // Present voltage of the control board 3.3V power supply. +Var=v24_Supply signed 32,16 -m /u:V /f:0.01 // Present voltage of the control board 24V power supply. +Var=v15_Supply signed 48,16 -m /u:V /f:0.01 // Present voltage of the control board 15V power supply. + +[StatusTemps] +ID=18FFCBF7h // Returns the inlet water temperature to the module as well as module internal ambient temperature. +Type=Extended +DLC=8 +CycleTime=100 +Var=TempInlet_measured signed 0,16 -m /u:C /f:0.1 // Coolant inlet temperature +Var=TempInternal_measured signed 16,16 -m /u:C /f:0.1 // Internal ambient temperature +Var=ConverterLosses unsigned 32,16 -m /u:W /max:1 // Power converter thermal loss + +[StatusFaults] +ID=0CFFC8F7h // Fault bits. +Type=Extended +DLC=8 +CycleTime=100 +Var=BridgeAVoltageOk_status unsigned 60,1 -m /e:Fault // Indicates whether a hardware trip has been activated. +Var=OvercurrentAC_status unsigned 4,2 -m /e:Fault // Set immediately upon the software detection of AC current exceeding the threshold value. +Var=BridgeBVoltageOk_status unsigned 44,1 -m /e:Fault // Indicates whether a hardware trip has been activated. +Var=OvervoltageDC_status unsigned 14,2 -m /e:Fault // Set immediately upon the software detection of DC voltage exceeding the threshold value. +Var=OvertempPowerDevice_status unsigned 8,2 -m /e:Fault // Set immediately upon the software detection of an IGBT temperature exceeding the threshold value. +Var=OvertempInternal_status unsigned 10,2 -m /e:Fault // Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value. +Var=LossValidControlMessage_status unsigned 16,4 -m /e:Fault // Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period. +Var=UndervoltageDC_status unsigned 12,2 -m /e:Fault // Indicates loss of DC source voltage. +Var=ControlHardwareFail_status unsigned 20,4 -m /e:Fault // Set upon the failure of control hardware to return expected response. +Var=OvercurrentDC_status unsigned 0,2 -m /e:Fault // Set immediately upon the software detection of DC current exceeding the threshold value. +Var=GeneralFault_status unsigned 6,2 -m /e:Fault // Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor. +Var=LossOfAC_status unsigned 2,2 -m /e:Fault // In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message. +Var=EStopShutdown_status unsigned 30,2 -m /e:Fault // Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active. +Var=BridgeAFault_status unsigned 61,3 -m /e:BridgeFlt // Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active. +Var=BridgeBFault_status unsigned 45,3 -m /e:BridgeFlt // Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active. +Var=IllegalTransition_status unsigned 28,2 -m /max:1 /e:Fault // Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available. +Var=InvalidEEHeader_status unsigned 26,2 -m /max:1 /e:Fault // Indicates that reading of non-volatile parameters at power-up failed. +Var=InvalidEESection_status unsigned 24,2 -m /max:1 /e:Fault // Indicates that reading or writing of an non-volatile parameter section failed. +Var=ThermalOverload unsigned 38,2 -m /max:1 /e:Fault + +[StatusACParameters] +ID=0CFFC2F7h // RMS AC Voltage, current, and frequency measured by line A, B and C feedbacks. +Type=Extended +DLC=8 +CycleTime=100 +Var=VoltageAC_measured signed 0,16 -m /u:V /f:0.1 // Measured RMS AC voltage. +Var=CurrentAC_measured signed 16,16 -m /u:A // Measured RMS AC current. +Var=Frequency_measured signed 32,16 -m /u:Hz /f:0.1 // Measured frequency. + +[StatusDCParameters] +ID=1CFFC7F7h // Measured (boosted) DC Bus voltage, DC Current, and estimated DC Input voltage. +Type=Extended +DLC=8 +CycleTime=100 +Var=VoltageDCBus signed 16,16 -m /u:V // Measured DC bus voltage. +Var=CurrentDC_measured signed 32,16 -m /u:A // Measured DC current. +Var=VoltageDCInput_measured signed 0,16 -m /u:V // Estimated DC input voltage. + +[StatusControlVolts2] +ID=1CFFC6F7h // Present voltage of the -15V power supply on the control board. +Type=Extended +DLC=8 +CycleTime=100 +Var=n15V_Supply signed 0,16 -m /u:V /f:0.01 // Present voltage of the control board -15V power supply. +Var=DiodeTemperature unsigned 32,16 -m /u:C /max:1 // Hottest diode +Var=IGBTTemperature unsigned 48,16 -m /u:C /max:1 // Hottest IGBT + +[softwareRev] +ID=1CFFC1F7h // Software revision. +Type=Extended +DLC=8 +Var=InterfaceRev unsigned 16,16 -m /f:0.01 /p:2 // Software revision of the CAN communication interface. +Var=ControlSwRev unsigned 0,16 -m /f:0.01 /p:2 // Software revision of the control firmware. +Var=BuildTime unsigned 32,32 -m // Build timestamp. + +[StatusCommandVF] +ID=18FFC9F7h // Echoes the voltage and frequency commands from commandVF. +Type=Extended +DLC=8 +CycleTime=100 +Var=Voltage_echo unsigned 0,16 -m /u:Vrms /f:0.1 // Echoed voltage command +Var=Frequency_echo unsigned 16,16 -m /u:Hz /f:0.1 // Echoed frequency command. + +[serialNumber] +ID=1CFFCCF7h // Serial number of the power module. +Type=Extended +DLC=8 +Var=SerialNumber unsigned 0,32 -m // Serial number of the power module. + +[softwareRevHash] +ID=1CFFCDF7h // Unique software revision identification hashcode. +Type=Extended +DLC=8 +Var=Hash unsigned 0,28 -h -m // Unique revision identification hashcode. + +[StatusNVParam] +ID=1CFFA9F7h // Echos back parameter values. +Type=Extended +DLC=8 +Mux=ActParam0 0,16 0 -m +Var=Dummy unsigned 16,16 -m /min:5 /max:10 + +[StatusNVParam] +DLC=8 +Mux=ActLVM_ClearingTimes1 0,16 1 -m +Var=VUnder50pct unsigned 16,16 -m /u:ms /min:1 /max:30000 /d:160 +Var=V50to88pct unsigned 32,16 -m /u:ms /min:1 /max:30000 /d:2000 +Var=V110to120pct unsigned 48,16 -m /u:ms /min:1 /max:30000 /d:1000 + +[StatusNVParam] +DLC=8 +Mux=ActLVM_ClearingTimes2 0,16 2 -m +Var=VOver120 unsigned 16,16 -m /min:1 /max:30000 /d:160 + +[StatusNVParam] +DLC=8 +Mux=ActLFM_Limits 0,16 3 -m +Var=FreqHi unsigned 16,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:60.5 +Var=FreqLo unsigned 32,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:59.8 +Var=FreqVeryLo unsigned 48,16 -m /u:Hz /f:0.1 /min:40 /max:70 /d:57 + +[StatusNVParam] +DLC=8 +Mux=ActLFM_ClearingTimes 0,16 4 -m +Var=FreqVeryLo unsigned 16,16 -m /u:ms /min:160 /max:160 /d:160 +Var=FreqLo unsigned 32,16 -m /u:ms /min:1 /max:30000 /d:160 +Var=FreqHi unsigned 48,16 -m /u:ms /min:160 /max:160 /d:160 + +[StatusNVParam] +DLC=8 +Mux=StatusJ1939_Interface 0,16 5 -m // J1939 interface parameters +Var=StatusNodeID unsigned 16,8 -m /max:247 /d:247 // J1939 Source Address node for the module +Var=StatusSA_Mask unsigned 24,8 -m /d:65 // Mask used to configure from which master source addresses to accept commands. +Var=StatusBaudrate unsigned 32,4 -m /max:3 /e:Baudrate /d:2 + +[StatusNVParam] +DLC=8 +Mux=StatusFault_Config 0,16 6 -m // configuration of various fault conditions to either trip the drive, or provide a warning status via CAN +Var=StatusThermalOverload unsigned 22,2 -m /max:1 /e:FaultConfig // Configured action to take when thermal overload input is active. + +[StatusNVParam] +DLC=8 +Mux=StatusContactorDelays1 0,16 7 -m // Sets the time the controller assumes it will take for contactors to open/close. +Var=StatusMX1Open unsigned 16,16 -m /u:ms /max:5000 /d:100 // Maximum time required for the MX1 contactor to open. +Var=StatusMX1Close unsigned 32,16 -m /u:ms /max:2000 /d:100 // Maximum time required for the MX1 contactor to close. +Var=StatusMX2Open unsigned 48,16 -m /u:ms /max:1 // Maximum time required for the MX2 contactor to open. + +[StatusNVParam] +DLC=8 +Mux=StatusContactorDelays2 0,16 8 -m // Sets the time the controller assumes it will take for contactors to open/close. +Var=StatusMX2Close unsigned 16,16 -m /u:ms /max:2000 // Maximum time required for the MX2 contactor to open. +Var=StatusK1Open unsigned 32,16 -m /u:ms /max:2000 // Maximum time required for the K1 contactor to open. +Var=StatusK1Close unsigned 48,16 -m /u:ms /max:2000 // Maximum time required for the K1 contactor to close. + +[StatusNVParam] +DLC=8 +Mux=StatusContactorDelays3 0,16 9 -m // Sets the time the controller assumes it will take for contactors to open/close. +Var=StatusK2Open unsigned 16,16 -m /u:ms /max:2000 // Maximum time required for the K2 contactor to open. +Var=StatusK2Close unsigned 32,16 -m /u:ms /max:2000 // Maximum time required for the K2 contactor to close. + +[StatusLineCurrents] +ID=18FFD0F7h // Measured RMS line currents. +Type=Extended +DLC=8 +CycleTime=100 +Var=L1Current_measured unsigned 0,16 -m /u:A /max:1 // Measured L1 RMS line current. +Var=L2Current_measured unsigned 16,16 -m /u:A /max:1 // Measured L2 RMS line current. +Var=L3Current_measured unsigned 32,16 -m /u:A /max:1 // Measured L3 RMS line current. + +[StatusLineVoltages] +ID=18FFD1F7h // Measured RMS line voltages. +Type=Extended +DLC=8 +CycleTime=100 +Var=L1Voltage_measured unsigned 0,16 -m /u:Vrms /f:0.1 /max:1 // Measured L1 RMS line-neutral voltage +Var=L2Voltage_measured unsigned 16,16 -m /u:Vrms /f:0.1 /max:1 // Measured L2 RMS line-neutral voltage +Var=L3Voltage_measured unsigned 32,16 -m /u:Vrms /f:0.1 /max:1 // Measured L3 RMS line-neutral voltage + diff --git a/test/reference/from_sym/test.xls b/tests/files/xlsx/test.xls similarity index 100% rename from test/reference/from_sym/test.xls rename to tests/files/xlsx/test.xls diff --git a/test/test.xlsx b/tests/files/xlsx/test.xlsx similarity index 100% rename from test/test.xlsx rename to tests/files/xlsx/test.xlsx diff --git a/test/reference/from_arxml/test.kcd b/tests/reference/from_arxml/test.kcd similarity index 100% rename from test/reference/from_arxml/test.kcd rename to tests/reference/from_arxml/test.kcd diff --git a/test/reference/from_arxml/test_CAN.csv b/tests/reference/from_arxml/test_CAN.csv similarity index 99% rename from test/reference/from_arxml/test_CAN.csv rename to tests/reference/from_arxml/test_CAN.csv index f5713f5e..46bd0a3b 100644 --- a/test/reference/from_arxml/test_CAN.csv +++ b/tests/reference/from_arxml/test_CAN.csv @@ -1,391 +1,391 @@ -ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,0,Normal -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,1,Clear Faults -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,3,N/A -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,0,Disable -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,1,Enable -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,3,N/A -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,0,Master -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,1,Follower -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,3,N/A -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,0,Negative -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,1,Positive -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,3,N/A -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,0,Normal - Three Phase Mode -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,1,Enable Split Phase Mode -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,3,N/A -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,0,Disable -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,1,Enable -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,3,N/A -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,0,No invert -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,1,Invert -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,2,Error -FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,0,Normal -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,1,Clear Faults -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,0,Disable -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,1,Enable -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,0,Master -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,1,Follower -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,0,Negative -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,1,Positive -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,0,Normal - Three Phase Mode -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,1,Enable Split Phase Mode -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,0,Disable -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,1,Enable -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,3,N/A -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,0,No invert -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,1,Invert -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,2,Error -FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,3,N/A -CFF9C41xh,FRAME_CommandPowerAPU2,None,spontanX,None,1,0,RealPower_command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,m,s,,-2147483648.0..2147483647.0 -CFF9C41xh,FRAME_CommandPowerAPU2,None,spontanX,None,5,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,m,s,,-2147483648.0..2147483647.0 -CFF9E41xh,FRAME_CommandVFAPU2,None,spontanX,None,1,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFF9E41xh,FRAME_CommandVFAPU2,None,spontanX,None,3,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,0,Param0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,1,LVM_ClearingTimes1 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,2,LVM_ClearingTimes2 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,3,LFM_Limits -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,4,LFM_ClearingTimes -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,5,J1939_Interface -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,6,Fault_Config -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,7,ContactorDelays1 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,8,ContactorDelays2 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,10,ContactorDelays3 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,Dummy,,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,FreqHi,"Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,FreqVeryLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,K2Open,Maximum time required for the K2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,MX1Open,Maximum time required for the MX1 contactor to open.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,MX2Close,Maximum time required for the MX2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,NodeID,J1939 Source Address node for the module.,8, , ,m,s,,-128.0..127.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,VOver120,Determines the fault trip time when Line-to-line rms voltage for a phase remains Over 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,VUnder50pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains under 50 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,0,Warning -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,1,Fault -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,2,Error -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,3,N/A -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,4,0,SA_Mask,Not presently used.,8, , ,m,s,,-128.0..127.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,Baudrate,CAN baudrate,4, , ,m,s,,0,125K -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,Baudrate,CAN baudrate,4, , ,m,s,,1,250K -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,Baudrate,CAN baudrate,4, , ,m,s,,2,500K -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,Baudrate,CAN baudrate,4, , ,m,s,,3,1M -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,FreqLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,K1Open,Maximum time required for the K1 contactor to open.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,K2Close,Maximum time required for the K2 contactor to close.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,MX1Close,Maximum time required for the MX1 contactor to close.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,V50to88pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains between 50 and 88 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,7,0,FreqHi,"Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,7,0,FreqVeryLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,7,0,K1Close,Maximum time required for the K1 contactor to close.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,7,0,MX2Open,Maximum time required for the MX2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 -CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,7,0,V110to120pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains between 110 and 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 -CFFAC41xh,FRAME_CommandPower,None,spontanX,None,1,0,RealPower command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,m,s,,-2147483648.0..2147483647.0 -CFFAC41xh,FRAME_CommandPower,None,spontanX,None,5,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,m,s,,-2147483648.0..2147483647.0 -CFFAE41xh,FRAME_CommandVF,None,spontanX,None,1,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFFAE41xh,FRAME_CommandVF,None,spontanX,None,3,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,1,6,WriteSerialNumber,,2, , ,m,s,,0,Disable -CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,1,6,WriteSerialNumber,,2, , ,m,s,,1,Enable -CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,1,6,WriteSerialNumber,,2, , ,m,s,,2,Error -CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,1,6,WriteSerialNumber,,2, , ,m,s,,3,N/A -CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,3,0,FactoryAccess,,16, , ,m,s,,-32768.0..32767.0 -CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,5,0,SerialNumber,,32, , ,m,s,,-2147483648.0..2147483647.0 -CFFC2F7xh,FRAME_StatusACParameters,None,spontanX,None,1,0,VoltageAC_measured,Measured RMS AC voltage.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFFC2F7xh,FRAME_StatusACParameters,None,spontanX,None,3,0,CurrentAC_measured,Measured RMS AC current.,16, , ,m,s,,-32768.0..32767.0 -CFFC2F7xh,FRAME_StatusACParameters,None,spontanX,None,5,0,Frequency_measured,Measured frequency.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,s,,0,Normal -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,s,,1,Clear Faults -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,s,,0,Disable -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,s,,1,Enable -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,0,"Power On Reset, and a quoted comma" -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,1,Ready -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,2,Following -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,3,Fault -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,4,Forming -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,5,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,6,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,7,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,8,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,9,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,10,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,11,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,12,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,13,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,14,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,15,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,s,,0,Disabled -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,s,,1,Enabled -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,s,,0,None -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,s,,1,Available -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,s,,0,None -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,s,,1,Available -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,s,,0,Not Active -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,s,,1,Active -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,s,,0,Open -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,s,,1,Closed -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,s,,0,Open -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,s,,1,Closed -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,s,,0,Open -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,s,,1,Closed -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,s,,0,Open -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,s,,1,Closed -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,s,,0,Normal -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,s,,1,Warning -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,s,,3,ErrorPassive -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,s,,4,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,0,Invalid -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,1,Valid -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,0,Invalid -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,1,Valid -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,0,Invalid -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,1,Valid -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,s,,0,No_Voltage -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,s,,1,Voltage_Detected -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,s,,0,Negative -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,s,,1,Positive -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,s,,0,Normal - Three Phase Mode -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,s,,1,Enable Split Phase Mode -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,s,,0,Disable -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,s,,1,Enable -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,s,,3,N/A -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,s,,0,Negative -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,s,,1,Positive -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,s,,2,Error -CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,5,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,0,Warning -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,5,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,1,Fault -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,5,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,5,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,1,FLT_A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,2,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,3,FLT_C -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,4,OverVoltage -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,5,FLT_B -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,6,Overcurrent -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,7,5V -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,1,Fault Active -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,2,Error -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,3,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,0,Normal -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,1,FLT_A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,2,N/A -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,3,FLT_C -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,4,OverVoltage -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,5,FLT_B -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,6,Overcurrent -CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,7,5V -CFFCAF6xh,FRAME_MasterMeasuredPower,None,spontanX,None,1,0,RealPower_measured,Measured real power of master unit.,32, , ,m,s,,-2147483648.0..2147483647.0 -CFFCAF6xh,FRAME_MasterMeasuredPower,None,spontanX,None,5,0,ReactivePower_measured,Measured reactive power of master unit.,32, , ,m,s,,-2147483648.0..2147483647.0 -CFFCAF7xh,FRAME_StatusMeasuredPower,None,spontanX,None,1,0,RealPower_measured,Measured real power of master unit.,32, , ,m,s,,-2147483648.0..2147483647.0 -CFFCAF7xh,FRAME_StatusMeasuredPower,None,spontanX,None,5,0,ReactivePower_measured,Measured reactive power of master unit.,32, , ,m,s,,-2147483648.0..2147483647.0 -18FFC4F7xh,FRAME_StatusCommandedPower,None,spontanX,None,1,0,RealPower_echo,Echoed real power command.,32, , ,m,s,,-2147483648.0..2147483647.0 -18FFC4F7xh,FRAME_StatusCommandedPower,None,spontanX,None,5,0,ReactivePower_echo,Echoed reactive power command.,32, , ,m,s,,-2147483648.0..2147483647.0 -18FFC9F7xh,FRAME_StatusCommandVF,None,spontanX,None,1,0,Voltage_echo,Echoed voltage command,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -18FFC9F7xh,FRAME_StatusCommandVF,None,spontanX,None,3,0,Frequency_echo,Echoed frequency command.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -18FFCBF7xh,FRAME_StatusTemps,None,spontanX,None,1,0,TempInlet_measured,Coolant inlet temperature,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -18FFCBF7xh,FRAME_StatusTemps,None,spontanX,None,3,0,TempInternal_measured,Internal ambient temperature,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -18FFCBF7xh,FRAME_StatusTemps,None,spontanX,None,5,0,ConverterLosses,Power converter thermal loss,16, , ,m,s,,-32768.0..32767.0 -18FFD0F7xh,FRAME_StatusLineCurrents,None,spontanX,None,1,0,L1Current_measured,Measured L1 RMS line current.,16, , ,m,s,,-32768.0..32767.0 -18FFD0F7xh,FRAME_StatusLineCurrents,None,spontanX,None,3,0,L2Current_measured,Measured L2 RMS line current.,16, , ,m,s,,-32768.0..32767.0 -18FFD0F7xh,FRAME_StatusLineCurrents,None,spontanX,None,5,0,L3Current_measured,Measured L3 RMS line current.,16, , ,m,s,,-32768.0..32767.0 -18FFD1F7xh,FRAME_StatusLineVoltages,None,spontanX,None,1,0,L1Voltage_measured,Measured L1 RMS line-neutral voltage,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -18FFD1F7xh,FRAME_StatusLineVoltages,None,spontanX,None,3,0,L2Voltage_measured,Measured L2 RMS line-neutral voltage,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -18FFD1F7xh,FRAME_StatusLineVoltages,None,spontanX,None,5,0,L3Voltage_measured,Measured L3 RMS line-neutral voltage,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,0,ActParam0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,1,ActLVM_ClearingTimes1 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,2,ActLVM_ClearingTimes2 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,3,ActLFM_Limits -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,4,ActLFM_ClearingTimes -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,5,StatusJ1939_Interface -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,6,StatusFault_Config -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,7,StatusContactorDelays1 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,8,StatusContactorDelays2 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,9,StatusContactorDelays3 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,Dummy,,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,FreqHi,"Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,FreqVeryLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,StatusK2Open,Maximum time required for the K2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,StatusMX1Open,Maximum time required for the MX1 contactor to open.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,StatusMX2Close,Maximum time required for the MX2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,StatusNodeID,J1939 Source Address node for the module,8, , ,m,s,,-128.0..127.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,VOver120,Determines the fault trip time when Line-to-line rms voltage for a phase remains Over 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,VUnder50pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains under 50 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,6,StatusThermalOverload,Configured action to take when thermal overload input is active.,2, , ,m,s,,0,Warning -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,6,StatusThermalOverload,Configured action to take when thermal overload input is active.,2, , ,m,s,,1,Fault -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,6,StatusThermalOverload,Configured action to take when thermal overload input is active.,2, , ,m,s,,2,Error -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,6,StatusThermalOverload,Configured action to take when thermal overload input is active.,2, , ,m,s,,3,N/A -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,4,0,StatusSA_Mask,Mask used to configure from which master source addresses to accept commands.,8, , ,m,s,,-128.0..127.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,FreqLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusBaudrate,,4, , ,m,s,,0,125K -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusBaudrate,,4, , ,m,s,,1,250K -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusBaudrate,,4, , ,m,s,,2,500K -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusBaudrate,,4, , ,m,s,,3,1M -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusK1Open,Maximum time required for the K1 contactor to open.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusK2Close,Maximum time required for the K2 contactor to close.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusMX1Close,Maximum time required for the MX1 contactor to close.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,V50to88pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains between 50 and 88 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,7,0,FreqHi,"Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,7,0,FreqVeryLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,7,0,StatusK1Close,Maximum time required for the K1 contactor to close.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,7,0,StatusMX2Open,Maximum time required for the MX2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 -1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,7,0,V110to120pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains between 110 and 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 -1CFFABC0xh,FRAME_stringAndOther,None,spontanX,None,1,0,RealPower_measured,Measured real power of master unit.,32, , ,m,s,,-2147483648.0..2147483647.0 -1CFFC1F7xh,FRAME_softwareRev,None,spontanX,None,1,0,ControlSwRev,Software revision of the control firmware.,16, , ,m,s,0.01 -,-327.68..327.67 -1CFFC1F7xh,FRAME_softwareRev,None,spontanX,None,3,0,InterfaceRev,Software revision of the CAN communication interface.,16, , ,m,s,0.01 -,-327.68..327.67 -1CFFC1F7xh,FRAME_softwareRev,None,spontanX,None,5,0,BuildTime,Build timestamp.,32, , ,m,s,,-2147483648.0..2147483647.0 -1CFFC5F7xh,FRAME_StatusControlVoltage,None,spontanX,None,1,0,v5p0_Supply,Present voltage of the control board 5V power suppy.,16, , ,m,s,0.01 -,-327.68..327.67 -1CFFC5F7xh,FRAME_StatusControlVoltage,None,spontanX,None,3,0,v3p3_Supply,Present voltage of the control board 3.3V power supply.,16, , ,m,s,0.01 -,-327.68..327.67 -1CFFC5F7xh,FRAME_StatusControlVoltage,None,spontanX,None,5,0,v24_Supply,Present voltage of the control board 24V power supply.,16, , ,m,s,0.01 -,-327.68..327.67 -1CFFC5F7xh,FRAME_StatusControlVoltage,None,spontanX,None,7,0,v15_Supply,Present voltage of the control board 15V power supply.,16, , ,m,s,0.01 -,-327.68..327.67 -1CFFC6F7xh,FRAME_StatusControlVolts2,None,spontanX,None,1,0,n15V_Supply,Present voltage of the control board -15V power supply.,16, , ,m,s,0.01 -,-327.68..327.67 -1CFFC6F7xh,FRAME_StatusControlVolts2,None,spontanX,None,5,0,DiodeTemperature,Hottest diode,16, , ,m,s,,-32768.0..32767.0 -1CFFC6F7xh,FRAME_StatusControlVolts2,None,spontanX,None,7,0,IGBTTemperature,Hottest IGBT,16, , ,m,s,,-32768.0..32767.0 -1CFFC7F7xh,FRAME_StatusDCParameters,None,spontanX,None,1,0,VoltageDCInput_measured,Estimated DC input voltage.,16, , ,m,s,,-32768.0..32767.0 -1CFFC7F7xh,FRAME_StatusDCParameters,None,spontanX,None,3,0,VoltageDCBus,Measured DC bus voltage.,16, , ,m,s,,-32768.0..32767.0 -1CFFC7F7xh,FRAME_StatusDCParameters,None,spontanX,None,5,0,CurrentDC_measured,Measured DC current.,16, , ,m,s,,-32768.0..32767.0 -1CFFCCF7xh,FRAME_serialNumber,None,spontanX,None,1,0,SerialNumber,,32, , ,m,s,,-2147483648.0..2147483647.0 -1CFFCDF7xh,FRAME_softwareRevHash,None,spontanX,None,1,0,Hash,Unique revision identification hashcode.,28, , ,m,s,,-134217728.0..134217727.0 +ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,0,Normal +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,1,Clear Faults +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,3,N/A +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,0,Disable +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,1,Enable +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,3,N/A +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,0,Master +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,1,Follower +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,3,N/A +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,0,Negative +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,1,Positive +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,3,N/A +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,0,Normal - Three Phase Mode +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,1,Enable Split Phase Mode +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,3,N/A +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,0,Disable +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,1,Enable +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,3,N/A +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,0,No invert +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,1,Invert +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,2,Error +FF9B41xh,FRAME_CommandModeControlAPU2,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,0,Normal +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,1,Clear Faults +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,0,Disable +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,1,Enable +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,0,Master +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,1,Follower +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,0,Normal +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,1,Force On +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,0,Negative +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,1,Positive +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,0,Normal - Three Phase Mode +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,1,Enable Split Phase Mode +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,0,Disable +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,1,Enable +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,s,,3,N/A +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,0,No invert +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,1,Invert +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,2,Error +FFAB41xh,FRAME_CommandModeControl,None,spontanX,None,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,s,,3,N/A +CFF9C41xh,FRAME_CommandPowerAPU2,None,spontanX,None,1,0,RealPower_command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,m,s,,-2147483648.0..2147483647.0 +CFF9C41xh,FRAME_CommandPowerAPU2,None,spontanX,None,5,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,m,s,,-2147483648.0..2147483647.0 +CFF9E41xh,FRAME_CommandVFAPU2,None,spontanX,None,1,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFF9E41xh,FRAME_CommandVFAPU2,None,spontanX,None,3,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,0,Param0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,1,LVM_ClearingTimes1 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,2,LVM_ClearingTimes2 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,3,LFM_Limits +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,4,LFM_ClearingTimes +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,5,J1939_Interface +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,6,Fault_Config +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,7,ContactorDelays1 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,8,ContactorDelays2 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,1,0,CommandSetNVParam_MUX,,16, , ,m,s,,10,ContactorDelays3 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,Dummy,,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,FreqHi,"Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,FreqVeryLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,K2Open,Maximum time required for the K2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,MX1Open,Maximum time required for the MX1 contactor to open.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,MX2Close,Maximum time required for the MX2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,NodeID,J1939 Source Address node for the module.,8, , ,m,s,,-128.0..127.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,VOver120,Determines the fault trip time when Line-to-line rms voltage for a phase remains Over 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,0,VUnder50pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains under 50 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,0,Warning +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,1,Fault +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,2,Error +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,3,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,3,N/A +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,4,0,SA_Mask,Not presently used.,8, , ,m,s,,-128.0..127.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,Baudrate,CAN baudrate,4, , ,m,s,,0,125K +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,Baudrate,CAN baudrate,4, , ,m,s,,1,250K +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,Baudrate,CAN baudrate,4, , ,m,s,,2,500K +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,Baudrate,CAN baudrate,4, , ,m,s,,3,1M +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,FreqLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,K1Open,Maximum time required for the K1 contactor to open.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,K2Close,Maximum time required for the K2 contactor to close.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,MX1Close,Maximum time required for the MX1 contactor to close.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,5,0,V50to88pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains between 50 and 88 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,7,0,FreqHi,"Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,7,0,FreqVeryLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,7,0,K1Close,Maximum time required for the K1 contactor to close.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,7,0,MX2Open,Maximum time required for the MX2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 +CFFAA41xh,FRAME_CommandSetNVParam,None,spontanX,None,7,0,V110to120pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains between 110 and 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 +CFFAC41xh,FRAME_CommandPower,None,spontanX,None,1,0,RealPower command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,m,s,,-2147483648.0..2147483647.0 +CFFAC41xh,FRAME_CommandPower,None,spontanX,None,5,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,m,s,,-2147483648.0..2147483647.0 +CFFAE41xh,FRAME_CommandVF,None,spontanX,None,1,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFFAE41xh,FRAME_CommandVF,None,spontanX,None,3,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,1,6,WriteSerialNumber,,2, , ,m,s,,0,Disable +CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,1,6,WriteSerialNumber,,2, , ,m,s,,1,Enable +CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,1,6,WriteSerialNumber,,2, , ,m,s,,2,Error +CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,1,6,WriteSerialNumber,,2, , ,m,s,,3,N/A +CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,3,0,FactoryAccess,,16, , ,m,s,,-32768.0..32767.0 +CFFAF41xh,FRAME_CommandFactoryControl,None,spontanX,None,5,0,SerialNumber,,32, , ,m,s,,-2147483648.0..2147483647.0 +CFFC2F7xh,FRAME_StatusACParameters,None,spontanX,None,1,0,VoltageAC_measured,Measured RMS AC voltage.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFFC2F7xh,FRAME_StatusACParameters,None,spontanX,None,3,0,CurrentAC_measured,Measured RMS AC current.,16, , ,m,s,,-32768.0..32767.0 +CFFC2F7xh,FRAME_StatusACParameters,None,spontanX,None,5,0,Frequency_measured,Measured frequency.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,s,,0,Normal +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,s,,1,Clear Faults +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,s,,0,Disable +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,s,,1,Enable +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,0,"Power On Reset, and a quoted comma" +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,1,Ready +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,2,Following +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,3,Fault +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,4,Forming +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,5,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,6,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,7,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,8,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,9,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,10,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,11,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,12,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,13,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,14,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,1,4,State_status,Active control mode.,4, , ,m,s,,15,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,s,,0,Disabled +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,s,,1,Enabled +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,s,,0,None +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,s,,1,Available +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,s,,0,None +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,s,,1,Available +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,s,,0,Not Active +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,s,,1,Active +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,s,,0,Open +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,s,,1,Closed +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,s,,0,Open +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,s,,1,Closed +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,s,,0,Open +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,s,,1,Closed +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,s,,0,Open +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,s,,1,Closed +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,s,,0,Normal +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,s,,1,Warning +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,s,,3,ErrorPassive +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,s,,4,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,0,Invalid +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,1,Valid +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,0,Invalid +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,1,Valid +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,0,Invalid +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,1,Valid +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,s,,0,No_Voltage +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,s,,1,Voltage_Detected +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,s,,0,Negative +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,s,,1,Positive +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,s,,0,Normal - Three Phase Mode +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,s,,1,Enable Split Phase Mode +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,s,,0,Disable +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,s,,1,Enable +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,s,,3,N/A +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,s,,0,Negative +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,s,,1,Positive +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,s,,2,Error +CFFC3F7xh,FRAME_StatusBits,None,spontanX,None,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,5,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,0,Warning +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,5,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,1,Fault +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,5,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,5,6,ThermalOverload,Configures action to take when thermal overload input is active.,2, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,1,FLT_A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,2,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,3,FLT_C +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,4,OverVoltage +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,5,FLT_B +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,6,Overcurrent +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,7,5V +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,1,Fault Active +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,2,Error +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,s,,3,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,0,Normal +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,1,FLT_A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,2,N/A +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,3,FLT_C +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,4,OverVoltage +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,5,FLT_B +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,6,Overcurrent +CFFC8F7xh,FRAME_StatusFaults,None,spontanX,None,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,s,,7,5V +CFFCAF6xh,FRAME_MasterMeasuredPower,None,spontanX,None,1,0,RealPower_measured,Measured real power of master unit.,32, , ,m,s,,-2147483648.0..2147483647.0 +CFFCAF6xh,FRAME_MasterMeasuredPower,None,spontanX,None,5,0,ReactivePower_measured,Measured reactive power of master unit.,32, , ,m,s,,-2147483648.0..2147483647.0 +CFFCAF7xh,FRAME_StatusMeasuredPower,None,spontanX,None,1,0,RealPower_measured,Measured real power of master unit.,32, , ,m,s,,-2147483648.0..2147483647.0 +CFFCAF7xh,FRAME_StatusMeasuredPower,None,spontanX,None,5,0,ReactivePower_measured,Measured reactive power of master unit.,32, , ,m,s,,-2147483648.0..2147483647.0 +18FFC4F7xh,FRAME_StatusCommandedPower,None,spontanX,None,1,0,RealPower_echo,Echoed real power command.,32, , ,m,s,,-2147483648.0..2147483647.0 +18FFC4F7xh,FRAME_StatusCommandedPower,None,spontanX,None,5,0,ReactivePower_echo,Echoed reactive power command.,32, , ,m,s,,-2147483648.0..2147483647.0 +18FFC9F7xh,FRAME_StatusCommandVF,None,spontanX,None,1,0,Voltage_echo,Echoed voltage command,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +18FFC9F7xh,FRAME_StatusCommandVF,None,spontanX,None,3,0,Frequency_echo,Echoed frequency command.,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +18FFCBF7xh,FRAME_StatusTemps,None,spontanX,None,1,0,TempInlet_measured,Coolant inlet temperature,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +18FFCBF7xh,FRAME_StatusTemps,None,spontanX,None,3,0,TempInternal_measured,Internal ambient temperature,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +18FFCBF7xh,FRAME_StatusTemps,None,spontanX,None,5,0,ConverterLosses,Power converter thermal loss,16, , ,m,s,,-32768.0..32767.0 +18FFD0F7xh,FRAME_StatusLineCurrents,None,spontanX,None,1,0,L1Current_measured,Measured L1 RMS line current.,16, , ,m,s,,-32768.0..32767.0 +18FFD0F7xh,FRAME_StatusLineCurrents,None,spontanX,None,3,0,L2Current_measured,Measured L2 RMS line current.,16, , ,m,s,,-32768.0..32767.0 +18FFD0F7xh,FRAME_StatusLineCurrents,None,spontanX,None,5,0,L3Current_measured,Measured L3 RMS line current.,16, , ,m,s,,-32768.0..32767.0 +18FFD1F7xh,FRAME_StatusLineVoltages,None,spontanX,None,1,0,L1Voltage_measured,Measured L1 RMS line-neutral voltage,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +18FFD1F7xh,FRAME_StatusLineVoltages,None,spontanX,None,3,0,L2Voltage_measured,Measured L2 RMS line-neutral voltage,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +18FFD1F7xh,FRAME_StatusLineVoltages,None,spontanX,None,5,0,L3Voltage_measured,Measured L3 RMS line-neutral voltage,16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,0,ActParam0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,1,ActLVM_ClearingTimes1 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,2,ActLVM_ClearingTimes2 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,3,ActLFM_Limits +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,4,ActLFM_ClearingTimes +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,5,StatusJ1939_Interface +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,6,StatusFault_Config +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,7,StatusContactorDelays1 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,8,StatusContactorDelays2 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,1,0,StatusNVParam_MUX,,16, , ,m,s,,9,StatusContactorDelays3 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,Dummy,,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,FreqHi,"Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,FreqVeryLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,StatusK2Open,Maximum time required for the K2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,StatusMX1Open,Maximum time required for the MX1 contactor to open.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,StatusMX2Close,Maximum time required for the MX2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,StatusNodeID,J1939 Source Address node for the module,8, , ,m,s,,-128.0..127.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,VOver120,Determines the fault trip time when Line-to-line rms voltage for a phase remains Over 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,0,VUnder50pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains under 50 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,6,StatusThermalOverload,Configured action to take when thermal overload input is active.,2, , ,m,s,,0,Warning +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,6,StatusThermalOverload,Configured action to take when thermal overload input is active.,2, , ,m,s,,1,Fault +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,6,StatusThermalOverload,Configured action to take when thermal overload input is active.,2, , ,m,s,,2,Error +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,3,6,StatusThermalOverload,Configured action to take when thermal overload input is active.,2, , ,m,s,,3,N/A +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,4,0,StatusSA_Mask,Mask used to configure from which master source addresses to accept commands.,8, , ,m,s,,-128.0..127.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,FreqLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusBaudrate,,4, , ,m,s,,0,125K +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusBaudrate,,4, , ,m,s,,1,250K +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusBaudrate,,4, , ,m,s,,2,500K +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusBaudrate,,4, , ,m,s,,3,1M +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusK1Open,Maximum time required for the K1 contactor to open.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusK2Close,Maximum time required for the K2 contactor to close.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,StatusMX1Close,Maximum time required for the MX1 contactor to close.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,5,0,V50to88pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains between 50 and 88 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,7,0,FreqHi,"Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,7,0,FreqVeryLo,"Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,s,0.1 -,-3276.8..3276.7000000000003 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,7,0,StatusK1Close,Maximum time required for the K1 contactor to close.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,7,0,StatusMX2Open,Maximum time required for the MX2 contactor to open.,16, , ,m,s,,-32768.0..32767.0 +1CFFA9F7xh,FRAME_StatusNVParam,None,spontanX,None,7,0,V110to120pct,Determines the fault trip time when Line-to-line rms voltage for a phase remains between 110 and 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,s,,-32768.0..32767.0 +1CFFABC0xh,FRAME_stringAndOther,None,spontanX,None,1,0,RealPower_measured,Measured real power of master unit.,32, , ,m,s,,-2147483648.0..2147483647.0 +1CFFC1F7xh,FRAME_softwareRev,None,spontanX,None,1,0,ControlSwRev,Software revision of the control firmware.,16, , ,m,s,0.01 -,-327.68..327.67 +1CFFC1F7xh,FRAME_softwareRev,None,spontanX,None,3,0,InterfaceRev,Software revision of the CAN communication interface.,16, , ,m,s,0.01 -,-327.68..327.67 +1CFFC1F7xh,FRAME_softwareRev,None,spontanX,None,5,0,BuildTime,Build timestamp.,32, , ,m,s,,-2147483648.0..2147483647.0 +1CFFC5F7xh,FRAME_StatusControlVoltage,None,spontanX,None,1,0,v5p0_Supply,Present voltage of the control board 5V power suppy.,16, , ,m,s,0.01 -,-327.68..327.67 +1CFFC5F7xh,FRAME_StatusControlVoltage,None,spontanX,None,3,0,v3p3_Supply,Present voltage of the control board 3.3V power supply.,16, , ,m,s,0.01 -,-327.68..327.67 +1CFFC5F7xh,FRAME_StatusControlVoltage,None,spontanX,None,5,0,v24_Supply,Present voltage of the control board 24V power supply.,16, , ,m,s,0.01 -,-327.68..327.67 +1CFFC5F7xh,FRAME_StatusControlVoltage,None,spontanX,None,7,0,v15_Supply,Present voltage of the control board 15V power supply.,16, , ,m,s,0.01 -,-327.68..327.67 +1CFFC6F7xh,FRAME_StatusControlVolts2,None,spontanX,None,1,0,n15V_Supply,Present voltage of the control board -15V power supply.,16, , ,m,s,0.01 -,-327.68..327.67 +1CFFC6F7xh,FRAME_StatusControlVolts2,None,spontanX,None,5,0,DiodeTemperature,Hottest diode,16, , ,m,s,,-32768.0..32767.0 +1CFFC6F7xh,FRAME_StatusControlVolts2,None,spontanX,None,7,0,IGBTTemperature,Hottest IGBT,16, , ,m,s,,-32768.0..32767.0 +1CFFC7F7xh,FRAME_StatusDCParameters,None,spontanX,None,1,0,VoltageDCInput_measured,Estimated DC input voltage.,16, , ,m,s,,-32768.0..32767.0 +1CFFC7F7xh,FRAME_StatusDCParameters,None,spontanX,None,3,0,VoltageDCBus,Measured DC bus voltage.,16, , ,m,s,,-32768.0..32767.0 +1CFFC7F7xh,FRAME_StatusDCParameters,None,spontanX,None,5,0,CurrentDC_measured,Measured DC current.,16, , ,m,s,,-32768.0..32767.0 +1CFFCCF7xh,FRAME_serialNumber,None,spontanX,None,1,0,SerialNumber,,32, , ,m,s,,-2147483648.0..2147483647.0 +1CFFCDF7xh,FRAME_softwareRevHash,None,spontanX,None,1,0,Hash,Unique revision identification hashcode.,28, , ,m,s,,-134217728.0..134217727.0 diff --git a/test/reference/from_arxml/test_CAN.dbc b/tests/reference/from_arxml/test_CAN.dbc similarity index 100% rename from test/reference/from_arxml/test_CAN.dbc rename to tests/reference/from_arxml/test_CAN.dbc diff --git a/test/reference/from_arxml/test_CAN.dbf b/tests/reference/from_arxml/test_CAN.dbf similarity index 100% rename from test/reference/from_arxml/test_CAN.dbf rename to tests/reference/from_arxml/test_CAN.dbf diff --git a/test/reference/from_arxml/test_CAN.json b/tests/reference/from_arxml/test_CAN.json similarity index 100% rename from test/reference/from_arxml/test_CAN.json rename to tests/reference/from_arxml/test_CAN.json diff --git a/test/reference/from_arxml/test_CAN.sym b/tests/reference/from_arxml/test_CAN.sym similarity index 100% rename from test/reference/from_arxml/test_CAN.sym rename to tests/reference/from_arxml/test_CAN.sym diff --git a/test/reference/from_arxml/test_CAN.xls b/tests/reference/from_arxml/test_CAN.xls similarity index 100% rename from test/reference/from_arxml/test_CAN.xls rename to tests/reference/from_arxml/test_CAN.xls diff --git a/test/reference/from_arxml/test_CAN.xlsx b/tests/reference/from_arxml/test_CAN.xlsx similarity index 100% rename from test/reference/from_arxml/test_CAN.xlsx rename to tests/reference/from_arxml/test_CAN.xlsx diff --git a/test/reference/from_arxml/test_CAN.xml b/tests/reference/from_arxml/test_CAN.xml similarity index 100% rename from test/reference/from_arxml/test_CAN.xml rename to tests/reference/from_arxml/test_CAN.xml diff --git a/test/reference/from_arxml/test_CAN.yaml b/tests/reference/from_arxml/test_CAN.yaml similarity index 100% rename from test/reference/from_arxml/test_CAN.yaml rename to tests/reference/from_arxml/test_CAN.yaml diff --git a/test/reference/from_dbc/test.arxml b/tests/reference/from_dbc/test.arxml similarity index 100% rename from test/reference/from_dbc/test.arxml rename to tests/reference/from_dbc/test.arxml diff --git a/test/reference/from_dbc/test.csv b/tests/reference/from_dbc/test.csv similarity index 99% rename from test/reference/from_dbc/test.csv rename to tests/reference/from_dbc/test.csv index ab655401..dae06148 100644 --- a/test/reference/from_dbc/test.csv +++ b/tests/reference/from_dbc/test.csv @@ -1,7 +1,7 @@ -ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,testBU,recBU,Name / Phys. Range,Function / Increment Unit,Value +ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,testBU,recBU,Name / Phys. Range,Function / Increment Unit,Value 123h,testFrame1,100,,,1,4,someTestSignal,"Multi Line -Signal comment with a-umlaut: ä",11, , ,m,u,s,r,5 specialCharUnit°$,0.0..500.0 -123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,1,one -123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,2,two -123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,3,three +Signal comment with a-umlaut: ä",11, , ,m,u,s,r,5 specialCharUnit°$,0.0..500.0 +123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,1,one +123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,2,two +123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,3,three diff --git a/test/reference/from_dbc/test.dbf b/tests/reference/from_dbc/test.dbf similarity index 100% rename from test/reference/from_dbc/test.dbf rename to tests/reference/from_dbc/test.dbf diff --git a/test/reference/from_dbc/test.json b/tests/reference/from_dbc/test.json similarity index 100% rename from test/reference/from_dbc/test.json rename to tests/reference/from_dbc/test.json diff --git a/test/reference/from_dbc/test.kcd b/tests/reference/from_dbc/test.kcd similarity index 100% rename from test/reference/from_dbc/test.kcd rename to tests/reference/from_dbc/test.kcd diff --git a/test/reference/from_dbc/test.sym b/tests/reference/from_dbc/test.sym similarity index 100% rename from test/reference/from_dbc/test.sym rename to tests/reference/from_dbc/test.sym diff --git a/test/reference/from_dbc/test.xls b/tests/reference/from_dbc/test.xls similarity index 100% rename from test/reference/from_dbc/test.xls rename to tests/reference/from_dbc/test.xls diff --git a/test/reference/from_dbc/test.xlsx b/tests/reference/from_dbc/test.xlsx similarity index 100% rename from test/reference/from_dbc/test.xlsx rename to tests/reference/from_dbc/test.xlsx diff --git a/test/reference/from_dbc/test.xml b/tests/reference/from_dbc/test.xml similarity index 100% rename from test/reference/from_dbc/test.xml rename to tests/reference/from_dbc/test.xml diff --git a/test/reference/from_dbc/test.yaml b/tests/reference/from_dbc/test.yaml similarity index 100% rename from test/reference/from_dbc/test.yaml rename to tests/reference/from_dbc/test.yaml diff --git a/test/reference/from_dbf/test.arxml b/tests/reference/from_dbf/test.arxml similarity index 100% rename from test/reference/from_dbf/test.arxml rename to tests/reference/from_dbf/test.arxml diff --git a/test/reference/from_dbf/test.csv b/tests/reference/from_dbf/test.csv similarity index 99% rename from test/reference/from_dbf/test.csv rename to tests/reference/from_dbf/test.csv index f83ed37a..ba6b1370 100644 --- a/test/reference/from_dbf/test.csv +++ b/tests/reference/from_dbf/test.csv @@ -1,5 +1,5 @@ -ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,testBU,recBU,Name / Phys. Range,Function / Increment Unit,Value -123h,testFrame1,100,,,1,4,someTestSignal,Multi Line Signal comment with a-umlaut: ä,11, , ,m,u,s,r,5 specialCharUnit°$,0.0..500.0 -123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,1,one -123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,2,two -123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,3,three +ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,testBU,recBU,Name / Phys. Range,Function / Increment Unit,Value +123h,testFrame1,100,,,1,4,someTestSignal,Multi Line Signal comment with a-umlaut: ä,11, , ,m,u,s,r,5 specialCharUnit°$,0.0..500.0 +123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,1,one +123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,2,two +123h,testFrame1,100,,,3,4,Signal,,3, , ,i,u,s,r,someUnit,3,three diff --git a/test/reference/from_dbf/test.dbc b/tests/reference/from_dbf/test.dbc similarity index 100% rename from test/reference/from_dbf/test.dbc rename to tests/reference/from_dbf/test.dbc diff --git a/test/reference/from_dbf/test.json b/tests/reference/from_dbf/test.json similarity index 100% rename from test/reference/from_dbf/test.json rename to tests/reference/from_dbf/test.json diff --git a/test/reference/from_dbf/test.kcd b/tests/reference/from_dbf/test.kcd similarity index 100% rename from test/reference/from_dbf/test.kcd rename to tests/reference/from_dbf/test.kcd diff --git a/test/reference/from_dbf/test.sym b/tests/reference/from_dbf/test.sym similarity index 100% rename from test/reference/from_dbf/test.sym rename to tests/reference/from_dbf/test.sym diff --git a/test/reference/from_dbf/test.xls b/tests/reference/from_dbf/test.xls similarity index 100% rename from test/reference/from_dbf/test.xls rename to tests/reference/from_dbf/test.xls diff --git a/test/reference/from_dbf/test.xlsx b/tests/reference/from_dbf/test.xlsx similarity index 100% rename from test/reference/from_dbf/test.xlsx rename to tests/reference/from_dbf/test.xlsx diff --git a/test/reference/from_dbf/test.xml b/tests/reference/from_dbf/test.xml similarity index 100% rename from test/reference/from_dbf/test.xml rename to tests/reference/from_dbf/test.xml diff --git a/test/reference/from_dbf/test.yaml b/tests/reference/from_dbf/test.yaml similarity index 100% rename from test/reference/from_dbf/test.yaml rename to tests/reference/from_dbf/test.yaml diff --git a/test/reference/from_json/test.arxml b/tests/reference/from_json/test.arxml similarity index 100% rename from test/reference/from_json/test.arxml rename to tests/reference/from_json/test.arxml diff --git a/test/reference/from_json/test.csv b/tests/reference/from_json/test.csv similarity index 99% rename from test/reference/from_json/test.csv rename to tests/reference/from_json/test.csv index 55219fb1..3cdfa208 100644 --- a/test/reference/from_json/test.csv +++ b/tests/reference/from_json/test.csv @@ -1,3 +1,3 @@ -ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value -123h,testFrame1,,,1,4,someTestSignal,,11, , ,m,u,5 specialCharUnit°$,1.0..10236.0 -123h,testFrame1,,,3,4,Signal,,3, , ,i,u,someUnit,0.0..7.0 +ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value +123h,testFrame1,,,1,4,someTestSignal,,11, , ,m,u,5 specialCharUnit°$,1.0..10236.0 +123h,testFrame1,,,3,4,Signal,,3, , ,i,u,someUnit,0.0..7.0 diff --git a/test/reference/from_json/test.dbc b/tests/reference/from_json/test.dbc similarity index 100% rename from test/reference/from_json/test.dbc rename to tests/reference/from_json/test.dbc diff --git a/test/reference/from_json/test.dbf b/tests/reference/from_json/test.dbf similarity index 100% rename from test/reference/from_json/test.dbf rename to tests/reference/from_json/test.dbf diff --git a/test/reference/from_json/test.kcd b/tests/reference/from_json/test.kcd similarity index 100% rename from test/reference/from_json/test.kcd rename to tests/reference/from_json/test.kcd diff --git a/test/reference/from_json/test.sym b/tests/reference/from_json/test.sym similarity index 100% rename from test/reference/from_json/test.sym rename to tests/reference/from_json/test.sym diff --git a/test/reference/from_json/test.xls b/tests/reference/from_json/test.xls similarity index 100% rename from test/reference/from_json/test.xls rename to tests/reference/from_json/test.xls diff --git a/test/reference/from_json/test.xlsx b/tests/reference/from_json/test.xlsx similarity index 100% rename from test/reference/from_json/test.xlsx rename to tests/reference/from_json/test.xlsx diff --git a/test/reference/from_json/test.xml b/tests/reference/from_json/test.xml similarity index 100% rename from test/reference/from_json/test.xml rename to tests/reference/from_json/test.xml diff --git a/test/reference/from_json/test.yaml b/tests/reference/from_json/test.yaml similarity index 100% rename from test/reference/from_json/test.yaml rename to tests/reference/from_json/test.yaml diff --git a/test/reference/from_kcd/test.arxml b/tests/reference/from_kcd/test.arxml similarity index 100% rename from test/reference/from_kcd/test.arxml rename to tests/reference/from_kcd/test.arxml diff --git a/test/reference/from_kcd/test_test.kcd.csv b/tests/reference/from_kcd/test_test.kcd.csv similarity index 99% rename from test/reference/from_kcd/test_test.kcd.csv rename to tests/reference/from_kcd/test_test.kcd.csv index ad49c8d5..389509b2 100644 --- a/test/reference/from_kcd/test_test.kcd.csv +++ b/tests/reference/from_kcd/test_test.kcd.csv @@ -1,390 +1,390 @@ -ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value -FF9B41xh,CommandModeControlAPU2,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,0,Disable -FF9B41xh,CommandModeControlAPU2,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,1,Enable -FF9B41xh,CommandModeControlAPU2,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,0,Normal -FF9B41xh,CommandModeControlAPU2,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,1,Clear Faults -FF9B41xh,CommandModeControlAPU2,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,0,Master -FF9B41xh,CommandModeControlAPU2,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,1,Follower -FF9B41xh,CommandModeControlAPU2,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal -FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On -FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal -FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On -FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal -FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On -FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal -FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On -FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,0,No invert -FF9B41xh,CommandModeControlAPU2,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,1,Invert -FF9B41xh,CommandModeControlAPU2,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,0,Disable -FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,1,Enable -FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,0,Normal - Three Phase Mode -FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,1,Enable Split Phase Mode -FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,i,u,,0,Negative -FF9B41xh,CommandModeControlAPU2,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,i,u,,1,Positive -FF9B41xh,CommandModeControlAPU2,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,i,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,0,Disable -FFAB41xh,CommandModeControl,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,1,Enable -FFAB41xh,CommandModeControl,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,0,Normal -FFAB41xh,CommandModeControl,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,1,Clear Faults -FFAB41xh,CommandModeControl,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,0,Master -FFAB41xh,CommandModeControl,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,1,Follower -FFAB41xh,CommandModeControl,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal -FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On -FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal -FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On -FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal -FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On -FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal -FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On -FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,0,No invert -FFAB41xh,CommandModeControl,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,1,Invert -FFAB41xh,CommandModeControl,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,0,Disable -FFAB41xh,CommandModeControl,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,1,Enable -FFAB41xh,CommandModeControl,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,0,Normal - Three Phase Mode -FFAB41xh,CommandModeControl,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,1,Enable Split Phase Mode -FFAB41xh,CommandModeControl,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,i,u,,0,Negative -FFAB41xh,CommandModeControl,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,i,u,,1,Positive -FFAB41xh,CommandModeControl,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,i,u,,2,Error -FFAB41xh,CommandModeControl,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,i,u,,3,N/A -CFF9C41xh,CommandPowerAPU2,None,,,4,0,RealPower_command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,i,s,W,-90000.0..90000.0 -CFF9C41xh,CommandPowerAPU2,None,,,8,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,i,s,VA,-90000.0..90000.0 -CFF9E41xh,CommandVFAPU2,None,,,2,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,i,u,0.1 Vrms,10.0..500.0 -CFF9E41xh,CommandVFAPU2,None,,,4,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,i,u,0.1 Hz,45.0..65.0 -CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,0,Param0 -CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,1,LVM_ClearingTimes1 -CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,2,LVM_ClearingTimes2 -CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,3,LFM_Limits -CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,4,LFM_ClearingTimes -CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,5,J1939_Interface -CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,6,Fault_Config -CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,7,ContactorDelays1 -CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,8,ContactorDelays2 -CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,10,ContactorDelays3 -CFFAA41xh,CommandSetNVParam,None,,,3,0,NodeID,Mode 5:J1939 Source Address node for the module.,8, , ,i,u,,0.0..247.0 -CFFAA41xh,CommandSetNVParam,None,,,3,0,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,i,u,,0,Warning -CFFAA41xh,CommandSetNVParam,None,,,3,0,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,i,u,,1,Fault -CFFAA41xh,CommandSetNVParam,None,,,3,0,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,i,u,,2,Error -CFFAA41xh,CommandSetNVParam,None,,,3,0,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,i,u,,3,N/A -CFFAA41xh,CommandSetNVParam,None,,,4,0,Dummy,Mode 0:,16, , ,i,u,,0.0..65535.0 -CFFAA41xh,CommandSetNVParam,None,,,4,0,FreqHi,"Mode 3:Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,i,u,0.1 Hz,40.0..70.0 -CFFAA41xh,CommandSetNVParam,None,,,4,0,FreqVeryLo,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains below the value specified in FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,i,u,ms,160.0..160.0 -CFFAA41xh,CommandSetNVParam,None,,,4,0,K2Open,Mode 10:Maximum time required for the K2 contactor to open.,16, , ,i,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,4,0,MX1Open,Mode 7:Maximum time required for the MX1 contactor to open.,16, , ,i,u,ms,0.0..5000.0 -CFFAA41xh,CommandSetNVParam,None,,,4,0,MX2Close,Mode 8:Maximum time required for the MX2 contactor to open.,16, , ,i,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,4,0,SA_Mask,Mode 5:Not presently used.,8, , ,i,u,,0.0..255.0 -CFFAA41xh,CommandSetNVParam,None,,,4,0,VOver120,Mode 2:Determines the fault trip time when Line-to-line rms voltage for a phase remains Over 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,i,u,,1.0..30000.0 -CFFAA41xh,CommandSetNVParam,None,,,4,0,VUnder50pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains under 50 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,i,u,ms,1.0..30000.0 -CFFAA41xh,CommandSetNVParam,None,,,5,4,Baudrate,Mode 5:CAN baudrate,4, , ,i,u,,0,125K -CFFAA41xh,CommandSetNVParam,None,,,5,4,Baudrate,Mode 5:CAN baudrate,4, , ,i,u,,1,250K -CFFAA41xh,CommandSetNVParam,None,,,5,4,Baudrate,Mode 5:CAN baudrate,4, , ,i,u,,2,500K -CFFAA41xh,CommandSetNVParam,None,,,5,4,Baudrate,Mode 5:CAN baudrate,4, , ,i,u,,3,1M -CFFAA41xh,CommandSetNVParam,None,,,6,0,FreqLo,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains between the value specified in FreqLo and FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,i,u,ms,1.0..30000.0 -CFFAA41xh,CommandSetNVParam,None,,,6,0,K1Open,Mode 8:Maximum time required for the K1 contactor to open.,16, , ,i,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,6,0,K2Close,Mode 10:Maximum time required for the K2 contactor to close.,16, , ,i,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,6,0,MX1Close,Mode 7:Maximum time required for the MX1 contactor to close.,16, , ,i,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,6,0,V50to88pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains between 50 and 88 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,i,u,ms,1.0..30000.0 -CFFAA41xh,CommandSetNVParam,None,,,8,0,FreqHi,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains above the value specified in FreqHi of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,i,u,ms,160.0..160.0 -CFFAA41xh,CommandSetNVParam,None,,,8,0,FreqVeryLo,"Mode 3:Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,i,u,0.1 Hz,40.0..70.0 -CFFAA41xh,CommandSetNVParam,None,,,8,0,K1Close,Mode 8:Maximum time required for the K1 contactor to close.,16, , ,i,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,8,0,MX2Open,Mode 7:Maximum time required for the MX2 contactor to open.,16, , ,i,u,ms,0.0..65535.0 -CFFAA41xh,CommandSetNVParam,None,,,8,0,V110to120pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains between 110 and 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,i,u,ms,1.0..30000.0 -CFFAC41xh,CommandPower,None,,,4,0,RealPower command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,i,s,W,-90000.0..90000.0 -CFFAC41xh,CommandPower,None,,,8,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,i,s,VA,-90000.0..90000.0 -CFFAE41xh,CommandVF,None,,,2,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,i,u,0.1 Vrms,10.0..500.0 -CFFAE41xh,CommandVF,None,,,4,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,i,u,0.1 Hz,45.0..65.0 -CFFAF41xh,CommandFactoryControl,None,,,1,0,WriteSerialNumber,,2, , ,i,u,,0,Disable -CFFAF41xh,CommandFactoryControl,None,,,1,0,WriteSerialNumber,,2, , ,i,u,,1,Enable -CFFAF41xh,CommandFactoryControl,None,,,1,0,WriteSerialNumber,,2, , ,i,u,,2,Error -CFFAF41xh,CommandFactoryControl,None,,,1,0,WriteSerialNumber,,2, , ,i,u,,3,N/A -CFFAF41xh,CommandFactoryControl,None,,,4,0,FactoryAccess,,16, , ,i,u,,0.0..65535.0 -CFFAF41xh,CommandFactoryControl,None,,,8,0,SerialNumber,,32, , ,i,u,,0.0..4294967295.0 -CFFC2F7xh,StatusACParameters,100,,,2,0,VoltageAC_measured,Measured RMS AC voltage.,16, , ,i,s,0.1 V,-3276.8..3276.7000000000003 -CFFC2F7xh,StatusACParameters,100,,,4,0,CurrentAC_measured,Measured RMS AC current.,16, , ,i,s,A,-32768.0..32767.0 -CFFC2F7xh,StatusACParameters,100,,,6,0,Frequency_measured,Measured frequency.,16, , ,i,s,0.1 Hz,-3276.8..3276.7000000000003 -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,0,"Power On Reset, and a quoted comma" -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,1,Ready -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,2,Following -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,3,Fault -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,4,Forming -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,5,N/A -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,6,N/A -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,7,N/A -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,8,N/A -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,9,N/A -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,10,N/A -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,11,N/A -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,12,N/A -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,13,N/A -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,14,N/A -CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,15,N/A -CFFC3F7xh,StatusBits,100,,,1,4,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,i,u,,0,Disable -CFFC3F7xh,StatusBits,100,,,1,4,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,i,u,,1,Enable -CFFC3F7xh,StatusBits,100,,,1,4,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,1,4,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,1,6,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,i,u,,0,Normal -CFFC3F7xh,StatusBits,100,,,1,6,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,i,u,,1,Clear Faults -CFFC3F7xh,StatusBits,100,,,1,6,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,1,6,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,2,0,HardwareEnable_status,Status of the hardware enable.,2, , ,i,u,,0,Not Active -CFFC3F7xh,StatusBits,100,,,2,0,HardwareEnable_status,Status of the hardware enable.,2, , ,i,u,,1,Active -CFFC3F7xh,StatusBits,100,,,2,0,HardwareEnable_status,Status of the hardware enable.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,2,0,HardwareEnable_status,Status of the hardware enable.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,i,u,,0,None -CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,i,u,,1,Available -CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,i,u,,0,None -CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,i,u,,1,Available -CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,2,6,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,i,u,,0,Disabled -CFFC3F7xh,StatusBits,100,,,2,6,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,i,u,,1,Enabled -CFFC3F7xh,StatusBits,100,,,2,6,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,2,6,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,3,0,MX1Permissive_status,MX1 relay status,2, , ,i,u,,0,Open -CFFC3F7xh,StatusBits,100,,,3,0,MX1Permissive_status,MX1 relay status,2, , ,i,u,,1,Closed -CFFC3F7xh,StatusBits,100,,,3,0,MX1Permissive_status,MX1 relay status,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,3,0,MX1Permissive_status,MX1 relay status,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,3,2,MX2Permissive_status,MX2 relay status,2, , ,i,u,,0,Open -CFFC3F7xh,StatusBits,100,,,3,2,MX2Permissive_status,MX2 relay status,2, , ,i,u,,1,Closed -CFFC3F7xh,StatusBits,100,,,3,2,MX2Permissive_status,MX2 relay status,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,3,2,MX2Permissive_status,MX2 relay status,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,3,4,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,i,u,,0,Open -CFFC3F7xh,StatusBits,100,,,3,4,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,i,u,,1,Closed -CFFC3F7xh,StatusBits,100,,,3,4,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,3,4,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,3,6,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,i,u,,0,Open -CFFC3F7xh,StatusBits,100,,,3,6,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,i,u,,1,Closed -CFFC3F7xh,StatusBits,100,,,3,6,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,3,6,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,4,0,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,0,Invalid -CFFC3F7xh,StatusBits,100,,,4,0,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,1,Valid -CFFC3F7xh,StatusBits,100,,,4,0,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,4,0,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,4,2,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,0,Invalid -CFFC3F7xh,StatusBits,100,,,4,2,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,1,Valid -CFFC3F7xh,StatusBits,100,,,4,2,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,4,2,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,4,4,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,0,Invalid -CFFC3F7xh,StatusBits,100,,,4,4,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,1,Valid -CFFC3F7xh,StatusBits,100,,,4,4,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,4,4,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,4,6,CANbus_status,Operational status of the CAN bus driver.,2, , ,i,u,,0,Normal -CFFC3F7xh,StatusBits,100,,,4,6,CANbus_status,Operational status of the CAN bus driver.,2, , ,i,u,,1,Warning -CFFC3F7xh,StatusBits,100,,,4,6,CANbus_status,Operational status of the CAN bus driver.,2, , ,i,u,,3,ErrorPassive -CFFC3F7xh,StatusBits,100,,,4,6,CANbus_status,Operational status of the CAN bus driver.,2, , ,i,u,,4,N/A -CFFC3F7xh,StatusBits,100,,,5,0,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,i,u,,0,Disable -CFFC3F7xh,StatusBits,100,,,5,0,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,i,u,,1,Enable -CFFC3F7xh,StatusBits,100,,,5,0,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,5,0,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,5,2,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,i,u,,0,Normal - Three Phase Mode -CFFC3F7xh,StatusBits,100,,,5,2,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,i,u,,1,Enable Split Phase Mode -CFFC3F7xh,StatusBits,100,,,5,2,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,5,2,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,5,4,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,i,u,,0,Negative -CFFC3F7xh,StatusBits,100,,,5,4,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,i,u,,1,Positive -CFFC3F7xh,StatusBits,100,,,5,4,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,5,4,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,5,6,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,i,u,,0,No_Voltage -CFFC3F7xh,StatusBits,100,,,5,6,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,i,u,,1,Voltage_Detected -CFFC3F7xh,StatusBits,100,,,5,6,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,5,6,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,i,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,6,0,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,i,u,,0,Negative -CFFC3F7xh,StatusBits,100,,,6,0,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,i,u,,1,Positive -CFFC3F7xh,StatusBits,100,,,6,0,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,i,u,,2,Error -CFFC3F7xh,StatusBits,100,,,6,0,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,1,0,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,1,0,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,1,0,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,1,0,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,1,2,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,1,2,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,1,2,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,1,2,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,1,4,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,1,4,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,1,4,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,1,4,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,1,6,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,1,6,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,1,6,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,1,6,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,2,0,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,2,0,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,2,0,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,2,0,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,2,2,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,2,2,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,2,2,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,2,2,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,2,4,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,2,4,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,2,4,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,2,4,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,2,6,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,2,6,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,2,6,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,2,6,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,3,0,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,3,0,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,3,0,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,3,0,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,3,4,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,3,4,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,3,4,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,3,4,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,4,0,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,4,0,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,4,0,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,4,0,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,4,2,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,4,2,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,4,2,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,4,2,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,4,4,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,4,4,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,4,4,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,4,4,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,4,6,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,4,6,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,4,6,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,4,6,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,5,0,ThermalOverload,,2, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,5,0,ThermalOverload,,2, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,5,0,ThermalOverload,,2, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,5,0,ThermalOverload,,2, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,1,FLT_A -CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,2,N/A -CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,3,FLT_C -CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,4,OverVoltage -CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,5,FLT_B -CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,6,Overcurrent -CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,7,5V -CFFC8F7xh,StatusFaults,100,,,6,3,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,6,3,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,6,3,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,6,3,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,1,FLT_A -CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,2,N/A -CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,3,FLT_C -CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,4,OverVoltage -CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,5,FLT_B -CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,6,Overcurrent -CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,7,5V -CFFC8F7xh,StatusFaults,100,,,8,3,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,8,3,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,8,3,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,8,3,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,3,N/A -CFFCAF6xh,MasterMeasuredPower,None,,,4,0,RealPower_measured,Measured real power of master unit.,32, , ,i,s,W,-2147483648.0..2147483647.0 -CFFCAF6xh,MasterMeasuredPower,None,,,8,0,ReactivePower_measured,Measured reactive power of master unit.,32, , ,i,s,VA,-2147483648.0..2147483647.0 -CFFCAF7xh,StatusMeasuredPower,100,,,4,0,RealPower_measured,Measured real power.,32, , ,i,s,W,-2147483648.0..2147483647.0 -CFFCAF7xh,StatusMeasuredPower,100,,,8,0,ReactivePower_measured,Measured reactive power.,32, , ,i,s,VA,-2147483648.0..2147483647.0 -18FFC4F7xh,StatusCommandedPower,100,,,4,0,RealPower_echo,Echoed real power command.,32, , ,i,s,W,-2147483648.0..2147483647.0 -18FFC4F7xh,StatusCommandedPower,100,,,8,0,ReactivePower_echo,Echoed reactive power command.,32, , ,i,s,VA,-2147483648.0..2147483647.0 -18FFC9F7xh,StatusCommandVF,100,,,2,0,Voltage_echo,Echoed voltage command,16, , ,i,u,0.1 Vrms,0.0..6553.5 -18FFC9F7xh,StatusCommandVF,100,,,4,0,Frequency_echo,Echoed frequency command.,16, , ,i,u,0.1 Hz,0.0..6553.5 -18FFCBF7xh,StatusTemps,100,,,2,0,TempInlet_measured,Coolant inlet temperature,16, , ,i,s,0.1 C,-3276.8..3276.7000000000003 -18FFCBF7xh,StatusTemps,100,,,4,0,TempInternal_measured,Internal ambient temperature,16, , ,i,s,0.1 C,-3276.8..3276.7000000000003 -18FFCBF7xh,StatusTemps,100,,,6,0,ConverterLosses,Power converter thermal loss,16, , ,i,u,W,0.0..65535.0 -18FFD0F7xh,StatusLineCurrents,100,,,2,0,L1Current_measured,Measured L1 RMS line current.,16, , ,i,u,A,0.0..65535.0 -18FFD0F7xh,StatusLineCurrents,100,,,4,0,L2Current_measured,Measured L2 RMS line current.,16, , ,i,u,A,0.0..65535.0 -18FFD0F7xh,StatusLineCurrents,100,,,6,0,L3Current_measured,Measured L3 RMS line current.,16, , ,i,u,A,0.0..65535.0 -18FFD1F7xh,StatusLineVoltages,100,,,2,0,L1Voltage_measured,Measured L1 RMS line-neutral voltage,16, , ,i,u,0.1 Vrms,0.0..6553.5 -18FFD1F7xh,StatusLineVoltages,100,,,4,0,L2Voltage_measured,Measured L2 RMS line-neutral voltage,16, , ,i,u,0.1 Vrms,0.0..6553.5 -18FFD1F7xh,StatusLineVoltages,100,,,6,0,L3Voltage_measured,Measured L3 RMS line-neutral voltage,16, , ,i,u,0.1 Vrms,0.0..6553.5 -1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,0,ActParam0 -1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,1,ActLVM_ClearingTimes1 -1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,2,ActLVM_ClearingTimes2 -1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,3,ActLFM_Limits -1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,4,ActLFM_ClearingTimes -1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,5,StatusJ1939_Interface -1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,6,StatusFault_Config -1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,7,StatusContactorDelays1 -1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,8,StatusContactorDelays2 -1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,9,StatusContactorDelays3 -1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusNodeID,Mode 5:J1939 Source Address node for the module,8, , ,i,u,,0.0..247.0 -1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,i,u,,0,Warning -1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,i,u,,1,Fault -1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,i,u,,2,Error -1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,i,u,,3,N/A -1CFFA9F7xh,StatusNVParam,None,,,4,0,Dummy,Mode 0:,16, , ,i,u,,5.0..10.0 -1CFFA9F7xh,StatusNVParam,None,,,4,0,FreqHi,Mode 3:,16, , ,i,u,0.1 Hz,40.0..70.0 -1CFFA9F7xh,StatusNVParam,None,,,4,0,FreqVeryLo,Mode 4:,16, , ,i,u,ms,160.0..160.0 -1CFFA9F7xh,StatusNVParam,None,,,4,0,StatusK2Open,Mode 9:Maximum time required for the K2 contactor to open.,16, , ,i,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,4,0,StatusMX1Open,Mode 7:Maximum time required for the MX1 contactor to open.,16, , ,i,u,ms,0.0..5000.0 -1CFFA9F7xh,StatusNVParam,None,,,4,0,StatusMX2Close,Mode 8:Maximum time required for the MX2 contactor to open.,16, , ,i,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,4,0,StatusSA_Mask,Mode 5:Mask used to configure from which master source addresses to accept commands.,8, , ,i,u,,0.0..255.0 -1CFFA9F7xh,StatusNVParam,None,,,4,0,VOver120,Mode 2:,16, , ,i,u,,1.0..30000.0 -1CFFA9F7xh,StatusNVParam,None,,,4,0,VUnder50pct,Mode 1:,16, , ,i,u,ms,1.0..30000.0 -1CFFA9F7xh,StatusNVParam,None,,,5,4,StatusBaudrate,Mode 5:,4, , ,i,u,,0,125K -1CFFA9F7xh,StatusNVParam,None,,,5,4,StatusBaudrate,Mode 5:,4, , ,i,u,,1,250K -1CFFA9F7xh,StatusNVParam,None,,,5,4,StatusBaudrate,Mode 5:,4, , ,i,u,,2,500K -1CFFA9F7xh,StatusNVParam,None,,,5,4,StatusBaudrate,Mode 5:,4, , ,i,u,,3,1M -1CFFA9F7xh,StatusNVParam,None,,,6,0,FreqLo,Mode 4:,16, , ,i,u,ms,1.0..30000.0 -1CFFA9F7xh,StatusNVParam,None,,,6,0,StatusK1Open,Mode 8:Maximum time required for the K1 contactor to open.,16, , ,i,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,6,0,StatusK2Close,Mode 9:Maximum time required for the K2 contactor to close.,16, , ,i,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,6,0,StatusMX1Close,Mode 7:Maximum time required for the MX1 contactor to close.,16, , ,i,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,6,0,V50to88pct,Mode 1:,16, , ,i,u,ms,1.0..30000.0 -1CFFA9F7xh,StatusNVParam,None,,,8,0,FreqHi,Mode 4:,16, , ,i,u,ms,160.0..160.0 -1CFFA9F7xh,StatusNVParam,None,,,8,0,FreqVeryLo,Mode 3:,16, , ,i,u,0.1 Hz,40.0..70.0 -1CFFA9F7xh,StatusNVParam,None,,,8,0,StatusK1Close,Mode 8:Maximum time required for the K1 contactor to close.,16, , ,i,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,8,0,StatusMX2Open,Mode 7:Maximum time required for the MX2 contactor to open.,16, , ,i,u,ms,0.0..65535.0 -1CFFA9F7xh,StatusNVParam,None,,,8,0,V110to120pct,Mode 1:,16, , ,i,u,ms,1.0..30000.0 -1CFFC1F7xh,softwareRev,None,,,2,0,ControlSwRev,Software revision of the control firmware.,16, , ,i,u,0.01 -,0.0..655.35 -1CFFC1F7xh,softwareRev,None,,,4,0,InterfaceRev,Software revision of the CAN communication interface.,16, , ,i,u,0.01 -,0.0..655.35 -1CFFC1F7xh,softwareRev,None,,,8,0,BuildTime,Build timestamp.,32, , ,i,u,,0.0..4294967295.0 -1CFFC5F7xh,StatusControlVoltage,100,,,2,0,v5p0_Supply,Present voltage of the control board 5V power suppy.,16, , ,i,s,0.01 V,-327.68..327.67 -1CFFC5F7xh,StatusControlVoltage,100,,,4,0,v3p3_Supply,Present voltage of the control board 3.3V power supply.,16, , ,i,s,0.01 V,-327.68..327.67 -1CFFC5F7xh,StatusControlVoltage,100,,,6,0,v24_Supply,Present voltage of the control board 24V power supply.,16, , ,i,s,0.01 V,-327.68..327.67 -1CFFC5F7xh,StatusControlVoltage,100,,,8,0,v15_Supply,Present voltage of the control board 15V power supply.,16, , ,i,s,0.01 V,-327.68..327.67 -1CFFC6F7xh,StatusControlVolts2,100,,,2,0,n15V_Supply,Present voltage of the control board -15V power supply.,16, , ,i,s,0.01 V,-327.68..327.67 -1CFFC6F7xh,StatusControlVolts2,100,,,6,0,DiodeTemperature,Hottest diode,16, , ,i,u,C,0.0..65535.0 -1CFFC6F7xh,StatusControlVolts2,100,,,8,0,IGBTTemperature,Hottest IGBT,16, , ,i,u,C,0.0..65535.0 -1CFFC7F7xh,StatusDCParameters,100,,,2,0,VoltageDCInput_measured,Estimated DC input voltage.,16, , ,i,s,V,-32768.0..32767.0 -1CFFC7F7xh,StatusDCParameters,100,,,4,0,VoltageDCBus,Measured DC bus voltage.,16, , ,i,s,V,-32768.0..32767.0 -1CFFC7F7xh,StatusDCParameters,100,,,6,0,CurrentDC_measured,Measured DC current.,16, , ,i,s,A,-32768.0..32767.0 -1CFFCCF7xh,serialNumber,None,,,4,0,SerialNumber,Serial number of the power module.,32, , ,i,u,,0.0..4294967295.0 -1CFFCDF7xh,softwareRevHash,None,,,4,4,Hash,Unique revision identification hashcode.,28, , ,i,u,,0.0..268435455.0 +ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value +FF9B41xh,CommandModeControlAPU2,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,0,Disable +FF9B41xh,CommandModeControlAPU2,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,1,Enable +FF9B41xh,CommandModeControlAPU2,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,0,Normal +FF9B41xh,CommandModeControlAPU2,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,1,Clear Faults +FF9B41xh,CommandModeControlAPU2,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,0,Master +FF9B41xh,CommandModeControlAPU2,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,1,Follower +FF9B41xh,CommandModeControlAPU2,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal +FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On +FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal +FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On +FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal +FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On +FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal +FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On +FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,0,No invert +FF9B41xh,CommandModeControlAPU2,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,1,Invert +FF9B41xh,CommandModeControlAPU2,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,0,Disable +FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,1,Enable +FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,0,Normal - Three Phase Mode +FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,1,Enable Split Phase Mode +FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,i,u,,0,Negative +FF9B41xh,CommandModeControlAPU2,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,i,u,,1,Positive +FF9B41xh,CommandModeControlAPU2,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,i,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,0,Disable +FFAB41xh,CommandModeControl,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,1,Enable +FFAB41xh,CommandModeControl,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,1,0,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,0,Normal +FFAB41xh,CommandModeControl,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,1,Clear Faults +FFAB41xh,CommandModeControl,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,1,2,FaultClear_command,Clears the latched fault message.,2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,0,Master +FFAB41xh,CommandModeControl,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,1,Follower +FFAB41xh,CommandModeControl,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,3,0,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal +FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On +FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal +FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On +FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal +FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On +FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,0,Normal +FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,1,Force On +FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,0,No invert +FFAB41xh,CommandModeControl,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,1,Invert +FFAB41xh,CommandModeControl,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,8,0,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,0,Disable +FFAB41xh,CommandModeControl,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,1,Enable +FFAB41xh,CommandModeControl,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,8,2,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,0,Normal - Three Phase Mode +FFAB41xh,CommandModeControl,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,1,Enable Split Phase Mode +FFAB41xh,CommandModeControl,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,8,4,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,i,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,i,u,,0,Negative +FFAB41xh,CommandModeControl,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,i,u,,1,Positive +FFAB41xh,CommandModeControl,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,i,u,,2,Error +FFAB41xh,CommandModeControl,None,,,8,6,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,i,u,,3,N/A +CFF9C41xh,CommandPowerAPU2,None,,,4,0,RealPower_command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,i,s,W,-90000.0..90000.0 +CFF9C41xh,CommandPowerAPU2,None,,,8,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,i,s,VA,-90000.0..90000.0 +CFF9E41xh,CommandVFAPU2,None,,,2,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,i,u,0.1 Vrms,10.0..500.0 +CFF9E41xh,CommandVFAPU2,None,,,4,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,i,u,0.1 Hz,45.0..65.0 +CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,0,Param0 +CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,1,LVM_ClearingTimes1 +CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,2,LVM_ClearingTimes2 +CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,3,LFM_Limits +CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,4,LFM_ClearingTimes +CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,5,J1939_Interface +CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,6,Fault_Config +CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,7,ContactorDelays1 +CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,8,ContactorDelays2 +CFFAA41xh,CommandSetNVParam,None,,,2,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,i,u,,10,ContactorDelays3 +CFFAA41xh,CommandSetNVParam,None,,,3,0,NodeID,Mode 5:J1939 Source Address node for the module.,8, , ,i,u,,0.0..247.0 +CFFAA41xh,CommandSetNVParam,None,,,3,0,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,i,u,,0,Warning +CFFAA41xh,CommandSetNVParam,None,,,3,0,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,i,u,,1,Fault +CFFAA41xh,CommandSetNVParam,None,,,3,0,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,i,u,,2,Error +CFFAA41xh,CommandSetNVParam,None,,,3,0,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,i,u,,3,N/A +CFFAA41xh,CommandSetNVParam,None,,,4,0,Dummy,Mode 0:,16, , ,i,u,,0.0..65535.0 +CFFAA41xh,CommandSetNVParam,None,,,4,0,FreqHi,"Mode 3:Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,i,u,0.1 Hz,40.0..70.0 +CFFAA41xh,CommandSetNVParam,None,,,4,0,FreqVeryLo,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains below the value specified in FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,i,u,ms,160.0..160.0 +CFFAA41xh,CommandSetNVParam,None,,,4,0,K2Open,Mode 10:Maximum time required for the K2 contactor to open.,16, , ,i,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,4,0,MX1Open,Mode 7:Maximum time required for the MX1 contactor to open.,16, , ,i,u,ms,0.0..5000.0 +CFFAA41xh,CommandSetNVParam,None,,,4,0,MX2Close,Mode 8:Maximum time required for the MX2 contactor to open.,16, , ,i,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,4,0,SA_Mask,Mode 5:Not presently used.,8, , ,i,u,,0.0..255.0 +CFFAA41xh,CommandSetNVParam,None,,,4,0,VOver120,Mode 2:Determines the fault trip time when Line-to-line rms voltage for a phase remains Over 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,i,u,,1.0..30000.0 +CFFAA41xh,CommandSetNVParam,None,,,4,0,VUnder50pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains under 50 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,i,u,ms,1.0..30000.0 +CFFAA41xh,CommandSetNVParam,None,,,5,4,Baudrate,Mode 5:CAN baudrate,4, , ,i,u,,0,125K +CFFAA41xh,CommandSetNVParam,None,,,5,4,Baudrate,Mode 5:CAN baudrate,4, , ,i,u,,1,250K +CFFAA41xh,CommandSetNVParam,None,,,5,4,Baudrate,Mode 5:CAN baudrate,4, , ,i,u,,2,500K +CFFAA41xh,CommandSetNVParam,None,,,5,4,Baudrate,Mode 5:CAN baudrate,4, , ,i,u,,3,1M +CFFAA41xh,CommandSetNVParam,None,,,6,0,FreqLo,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains between the value specified in FreqLo and FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,i,u,ms,1.0..30000.0 +CFFAA41xh,CommandSetNVParam,None,,,6,0,K1Open,Mode 8:Maximum time required for the K1 contactor to open.,16, , ,i,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,6,0,K2Close,Mode 10:Maximum time required for the K2 contactor to close.,16, , ,i,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,6,0,MX1Close,Mode 7:Maximum time required for the MX1 contactor to close.,16, , ,i,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,6,0,V50to88pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains between 50 and 88 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,i,u,ms,1.0..30000.0 +CFFAA41xh,CommandSetNVParam,None,,,8,0,FreqHi,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains above the value specified in FreqHi of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,i,u,ms,160.0..160.0 +CFFAA41xh,CommandSetNVParam,None,,,8,0,FreqVeryLo,"Mode 3:Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,i,u,0.1 Hz,40.0..70.0 +CFFAA41xh,CommandSetNVParam,None,,,8,0,K1Close,Mode 8:Maximum time required for the K1 contactor to close.,16, , ,i,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,8,0,MX2Open,Mode 7:Maximum time required for the MX2 contactor to open.,16, , ,i,u,ms,0.0..65535.0 +CFFAA41xh,CommandSetNVParam,None,,,8,0,V110to120pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains between 110 and 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,i,u,ms,1.0..30000.0 +CFFAC41xh,CommandPower,None,,,4,0,RealPower command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,i,s,W,-90000.0..90000.0 +CFFAC41xh,CommandPower,None,,,8,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,i,s,VA,-90000.0..90000.0 +CFFAE41xh,CommandVF,None,,,2,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,i,u,0.1 Vrms,10.0..500.0 +CFFAE41xh,CommandVF,None,,,4,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,i,u,0.1 Hz,45.0..65.0 +CFFAF41xh,CommandFactoryControl,None,,,1,0,WriteSerialNumber,,2, , ,i,u,,0,Disable +CFFAF41xh,CommandFactoryControl,None,,,1,0,WriteSerialNumber,,2, , ,i,u,,1,Enable +CFFAF41xh,CommandFactoryControl,None,,,1,0,WriteSerialNumber,,2, , ,i,u,,2,Error +CFFAF41xh,CommandFactoryControl,None,,,1,0,WriteSerialNumber,,2, , ,i,u,,3,N/A +CFFAF41xh,CommandFactoryControl,None,,,4,0,FactoryAccess,,16, , ,i,u,,0.0..65535.0 +CFFAF41xh,CommandFactoryControl,None,,,8,0,SerialNumber,,32, , ,i,u,,0.0..4294967295.0 +CFFC2F7xh,StatusACParameters,100,,,2,0,VoltageAC_measured,Measured RMS AC voltage.,16, , ,i,s,0.1 V,-3276.8..3276.7000000000003 +CFFC2F7xh,StatusACParameters,100,,,4,0,CurrentAC_measured,Measured RMS AC current.,16, , ,i,s,A,-32768.0..32767.0 +CFFC2F7xh,StatusACParameters,100,,,6,0,Frequency_measured,Measured frequency.,16, , ,i,s,0.1 Hz,-3276.8..3276.7000000000003 +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,0,"Power On Reset, and a quoted comma" +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,1,Ready +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,2,Following +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,3,Fault +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,4,Forming +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,5,N/A +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,6,N/A +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,7,N/A +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,8,N/A +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,9,N/A +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,10,N/A +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,11,N/A +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,12,N/A +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,13,N/A +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,14,N/A +CFFC3F7xh,StatusBits,100,,,1,0,State_status,Active control mode.,4, , ,i,u,,15,N/A +CFFC3F7xh,StatusBits,100,,,1,4,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,i,u,,0,Disable +CFFC3F7xh,StatusBits,100,,,1,4,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,i,u,,1,Enable +CFFC3F7xh,StatusBits,100,,,1,4,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,1,4,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,1,6,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,i,u,,0,Normal +CFFC3F7xh,StatusBits,100,,,1,6,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,i,u,,1,Clear Faults +CFFC3F7xh,StatusBits,100,,,1,6,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,1,6,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,2,0,HardwareEnable_status,Status of the hardware enable.,2, , ,i,u,,0,Not Active +CFFC3F7xh,StatusBits,100,,,2,0,HardwareEnable_status,Status of the hardware enable.,2, , ,i,u,,1,Active +CFFC3F7xh,StatusBits,100,,,2,0,HardwareEnable_status,Status of the hardware enable.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,2,0,HardwareEnable_status,Status of the hardware enable.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,i,u,,0,None +CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,i,u,,1,Available +CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,i,u,,0,None +CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,i,u,,1,Available +CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,2,6,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,i,u,,0,Disabled +CFFC3F7xh,StatusBits,100,,,2,6,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,i,u,,1,Enabled +CFFC3F7xh,StatusBits,100,,,2,6,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,2,6,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,3,0,MX1Permissive_status,MX1 relay status,2, , ,i,u,,0,Open +CFFC3F7xh,StatusBits,100,,,3,0,MX1Permissive_status,MX1 relay status,2, , ,i,u,,1,Closed +CFFC3F7xh,StatusBits,100,,,3,0,MX1Permissive_status,MX1 relay status,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,3,0,MX1Permissive_status,MX1 relay status,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,3,2,MX2Permissive_status,MX2 relay status,2, , ,i,u,,0,Open +CFFC3F7xh,StatusBits,100,,,3,2,MX2Permissive_status,MX2 relay status,2, , ,i,u,,1,Closed +CFFC3F7xh,StatusBits,100,,,3,2,MX2Permissive_status,MX2 relay status,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,3,2,MX2Permissive_status,MX2 relay status,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,3,4,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,i,u,,0,Open +CFFC3F7xh,StatusBits,100,,,3,4,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,i,u,,1,Closed +CFFC3F7xh,StatusBits,100,,,3,4,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,3,4,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,3,6,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,i,u,,0,Open +CFFC3F7xh,StatusBits,100,,,3,6,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,i,u,,1,Closed +CFFC3F7xh,StatusBits,100,,,3,6,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,3,6,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,4,0,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,0,Invalid +CFFC3F7xh,StatusBits,100,,,4,0,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,1,Valid +CFFC3F7xh,StatusBits,100,,,4,0,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,4,0,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,4,2,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,0,Invalid +CFFC3F7xh,StatusBits,100,,,4,2,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,1,Valid +CFFC3F7xh,StatusBits,100,,,4,2,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,4,2,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,4,4,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,0,Invalid +CFFC3F7xh,StatusBits,100,,,4,4,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,1,Valid +CFFC3F7xh,StatusBits,100,,,4,4,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,4,4,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,4,6,CANbus_status,Operational status of the CAN bus driver.,2, , ,i,u,,0,Normal +CFFC3F7xh,StatusBits,100,,,4,6,CANbus_status,Operational status of the CAN bus driver.,2, , ,i,u,,1,Warning +CFFC3F7xh,StatusBits,100,,,4,6,CANbus_status,Operational status of the CAN bus driver.,2, , ,i,u,,3,ErrorPassive +CFFC3F7xh,StatusBits,100,,,4,6,CANbus_status,Operational status of the CAN bus driver.,2, , ,i,u,,4,N/A +CFFC3F7xh,StatusBits,100,,,5,0,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,i,u,,0,Disable +CFFC3F7xh,StatusBits,100,,,5,0,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,i,u,,1,Enable +CFFC3F7xh,StatusBits,100,,,5,0,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,5,0,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,5,2,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,i,u,,0,Normal - Three Phase Mode +CFFC3F7xh,StatusBits,100,,,5,2,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,i,u,,1,Enable Split Phase Mode +CFFC3F7xh,StatusBits,100,,,5,2,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,5,2,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,5,4,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,i,u,,0,Negative +CFFC3F7xh,StatusBits,100,,,5,4,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,i,u,,1,Positive +CFFC3F7xh,StatusBits,100,,,5,4,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,5,4,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,5,6,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,i,u,,0,No_Voltage +CFFC3F7xh,StatusBits,100,,,5,6,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,i,u,,1,Voltage_Detected +CFFC3F7xh,StatusBits,100,,,5,6,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,5,6,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,i,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,6,0,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,i,u,,0,Negative +CFFC3F7xh,StatusBits,100,,,6,0,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,i,u,,1,Positive +CFFC3F7xh,StatusBits,100,,,6,0,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,i,u,,2,Error +CFFC3F7xh,StatusBits,100,,,6,0,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,1,0,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,1,0,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,1,0,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,1,0,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,1,2,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,1,2,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,1,2,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,1,2,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,1,4,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,1,4,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,1,4,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,1,4,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,1,6,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,1,6,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,1,6,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,1,6,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,2,0,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,2,0,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,2,0,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,2,0,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,2,2,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,2,2,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,2,2,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,2,2,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,2,4,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,2,4,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,2,4,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,2,4,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,2,6,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,2,6,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,2,6,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,2,6,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,3,0,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,3,0,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,3,0,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,3,0,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,3,4,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,3,4,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,3,4,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,3,4,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,4,0,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,4,0,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,4,0,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,4,0,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,4,2,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,4,2,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,4,2,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,4,2,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,4,4,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,4,4,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,4,4,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,4,4,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,4,6,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,4,6,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,4,6,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,4,6,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,5,0,ThermalOverload,,2, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,5,0,ThermalOverload,,2, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,5,0,ThermalOverload,,2, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,5,0,ThermalOverload,,2, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,1,FLT_A +CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,2,N/A +CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,3,FLT_C +CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,4,OverVoltage +CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,5,FLT_B +CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,6,Overcurrent +CFFC8F7xh,StatusFaults,100,,,6,0,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,7,5V +CFFC8F7xh,StatusFaults,100,,,6,3,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,6,3,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,6,3,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,6,3,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,1,FLT_A +CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,2,N/A +CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,3,FLT_C +CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,4,OverVoltage +CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,5,FLT_B +CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,6,Overcurrent +CFFC8F7xh,StatusFaults,100,,,8,0,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,i,u,,7,5V +CFFC8F7xh,StatusFaults,100,,,8,3,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,8,3,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,8,3,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,8,3,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,i,u,,3,N/A +CFFCAF6xh,MasterMeasuredPower,None,,,4,0,RealPower_measured,Measured real power of master unit.,32, , ,i,s,W,-2147483648.0..2147483647.0 +CFFCAF6xh,MasterMeasuredPower,None,,,8,0,ReactivePower_measured,Measured reactive power of master unit.,32, , ,i,s,VA,-2147483648.0..2147483647.0 +CFFCAF7xh,StatusMeasuredPower,100,,,4,0,RealPower_measured,Measured real power.,32, , ,i,s,W,-2147483648.0..2147483647.0 +CFFCAF7xh,StatusMeasuredPower,100,,,8,0,ReactivePower_measured,Measured reactive power.,32, , ,i,s,VA,-2147483648.0..2147483647.0 +18FFC4F7xh,StatusCommandedPower,100,,,4,0,RealPower_echo,Echoed real power command.,32, , ,i,s,W,-2147483648.0..2147483647.0 +18FFC4F7xh,StatusCommandedPower,100,,,8,0,ReactivePower_echo,Echoed reactive power command.,32, , ,i,s,VA,-2147483648.0..2147483647.0 +18FFC9F7xh,StatusCommandVF,100,,,2,0,Voltage_echo,Echoed voltage command,16, , ,i,u,0.1 Vrms,0.0..6553.5 +18FFC9F7xh,StatusCommandVF,100,,,4,0,Frequency_echo,Echoed frequency command.,16, , ,i,u,0.1 Hz,0.0..6553.5 +18FFCBF7xh,StatusTemps,100,,,2,0,TempInlet_measured,Coolant inlet temperature,16, , ,i,s,0.1 C,-3276.8..3276.7000000000003 +18FFCBF7xh,StatusTemps,100,,,4,0,TempInternal_measured,Internal ambient temperature,16, , ,i,s,0.1 C,-3276.8..3276.7000000000003 +18FFCBF7xh,StatusTemps,100,,,6,0,ConverterLosses,Power converter thermal loss,16, , ,i,u,W,0.0..65535.0 +18FFD0F7xh,StatusLineCurrents,100,,,2,0,L1Current_measured,Measured L1 RMS line current.,16, , ,i,u,A,0.0..65535.0 +18FFD0F7xh,StatusLineCurrents,100,,,4,0,L2Current_measured,Measured L2 RMS line current.,16, , ,i,u,A,0.0..65535.0 +18FFD0F7xh,StatusLineCurrents,100,,,6,0,L3Current_measured,Measured L3 RMS line current.,16, , ,i,u,A,0.0..65535.0 +18FFD1F7xh,StatusLineVoltages,100,,,2,0,L1Voltage_measured,Measured L1 RMS line-neutral voltage,16, , ,i,u,0.1 Vrms,0.0..6553.5 +18FFD1F7xh,StatusLineVoltages,100,,,4,0,L2Voltage_measured,Measured L2 RMS line-neutral voltage,16, , ,i,u,0.1 Vrms,0.0..6553.5 +18FFD1F7xh,StatusLineVoltages,100,,,6,0,L3Voltage_measured,Measured L3 RMS line-neutral voltage,16, , ,i,u,0.1 Vrms,0.0..6553.5 +1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,0,ActParam0 +1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,1,ActLVM_ClearingTimes1 +1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,2,ActLVM_ClearingTimes2 +1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,3,ActLFM_Limits +1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,4,ActLFM_ClearingTimes +1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,5,StatusJ1939_Interface +1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,6,StatusFault_Config +1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,7,StatusContactorDelays1 +1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,8,StatusContactorDelays2 +1CFFA9F7xh,StatusNVParam,None,,,2,0,StatusNVParam_MUX,Mode Signal: ,16, , ,i,u,,9,StatusContactorDelays3 +1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusNodeID,Mode 5:J1939 Source Address node for the module,8, , ,i,u,,0.0..247.0 +1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,i,u,,0,Warning +1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,i,u,,1,Fault +1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,i,u,,2,Error +1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,i,u,,3,N/A +1CFFA9F7xh,StatusNVParam,None,,,4,0,Dummy,Mode 0:,16, , ,i,u,,5.0..10.0 +1CFFA9F7xh,StatusNVParam,None,,,4,0,FreqHi,Mode 3:,16, , ,i,u,0.1 Hz,40.0..70.0 +1CFFA9F7xh,StatusNVParam,None,,,4,0,FreqVeryLo,Mode 4:,16, , ,i,u,ms,160.0..160.0 +1CFFA9F7xh,StatusNVParam,None,,,4,0,StatusK2Open,Mode 9:Maximum time required for the K2 contactor to open.,16, , ,i,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,4,0,StatusMX1Open,Mode 7:Maximum time required for the MX1 contactor to open.,16, , ,i,u,ms,0.0..5000.0 +1CFFA9F7xh,StatusNVParam,None,,,4,0,StatusMX2Close,Mode 8:Maximum time required for the MX2 contactor to open.,16, , ,i,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,4,0,StatusSA_Mask,Mode 5:Mask used to configure from which master source addresses to accept commands.,8, , ,i,u,,0.0..255.0 +1CFFA9F7xh,StatusNVParam,None,,,4,0,VOver120,Mode 2:,16, , ,i,u,,1.0..30000.0 +1CFFA9F7xh,StatusNVParam,None,,,4,0,VUnder50pct,Mode 1:,16, , ,i,u,ms,1.0..30000.0 +1CFFA9F7xh,StatusNVParam,None,,,5,4,StatusBaudrate,Mode 5:,4, , ,i,u,,0,125K +1CFFA9F7xh,StatusNVParam,None,,,5,4,StatusBaudrate,Mode 5:,4, , ,i,u,,1,250K +1CFFA9F7xh,StatusNVParam,None,,,5,4,StatusBaudrate,Mode 5:,4, , ,i,u,,2,500K +1CFFA9F7xh,StatusNVParam,None,,,5,4,StatusBaudrate,Mode 5:,4, , ,i,u,,3,1M +1CFFA9F7xh,StatusNVParam,None,,,6,0,FreqLo,Mode 4:,16, , ,i,u,ms,1.0..30000.0 +1CFFA9F7xh,StatusNVParam,None,,,6,0,StatusK1Open,Mode 8:Maximum time required for the K1 contactor to open.,16, , ,i,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,6,0,StatusK2Close,Mode 9:Maximum time required for the K2 contactor to close.,16, , ,i,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,6,0,StatusMX1Close,Mode 7:Maximum time required for the MX1 contactor to close.,16, , ,i,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,6,0,V50to88pct,Mode 1:,16, , ,i,u,ms,1.0..30000.0 +1CFFA9F7xh,StatusNVParam,None,,,8,0,FreqHi,Mode 4:,16, , ,i,u,ms,160.0..160.0 +1CFFA9F7xh,StatusNVParam,None,,,8,0,FreqVeryLo,Mode 3:,16, , ,i,u,0.1 Hz,40.0..70.0 +1CFFA9F7xh,StatusNVParam,None,,,8,0,StatusK1Close,Mode 8:Maximum time required for the K1 contactor to close.,16, , ,i,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,8,0,StatusMX2Open,Mode 7:Maximum time required for the MX2 contactor to open.,16, , ,i,u,ms,0.0..65535.0 +1CFFA9F7xh,StatusNVParam,None,,,8,0,V110to120pct,Mode 1:,16, , ,i,u,ms,1.0..30000.0 +1CFFC1F7xh,softwareRev,None,,,2,0,ControlSwRev,Software revision of the control firmware.,16, , ,i,u,0.01 -,0.0..655.35 +1CFFC1F7xh,softwareRev,None,,,4,0,InterfaceRev,Software revision of the CAN communication interface.,16, , ,i,u,0.01 -,0.0..655.35 +1CFFC1F7xh,softwareRev,None,,,8,0,BuildTime,Build timestamp.,32, , ,i,u,,0.0..4294967295.0 +1CFFC5F7xh,StatusControlVoltage,100,,,2,0,v5p0_Supply,Present voltage of the control board 5V power suppy.,16, , ,i,s,0.01 V,-327.68..327.67 +1CFFC5F7xh,StatusControlVoltage,100,,,4,0,v3p3_Supply,Present voltage of the control board 3.3V power supply.,16, , ,i,s,0.01 V,-327.68..327.67 +1CFFC5F7xh,StatusControlVoltage,100,,,6,0,v24_Supply,Present voltage of the control board 24V power supply.,16, , ,i,s,0.01 V,-327.68..327.67 +1CFFC5F7xh,StatusControlVoltage,100,,,8,0,v15_Supply,Present voltage of the control board 15V power supply.,16, , ,i,s,0.01 V,-327.68..327.67 +1CFFC6F7xh,StatusControlVolts2,100,,,2,0,n15V_Supply,Present voltage of the control board -15V power supply.,16, , ,i,s,0.01 V,-327.68..327.67 +1CFFC6F7xh,StatusControlVolts2,100,,,6,0,DiodeTemperature,Hottest diode,16, , ,i,u,C,0.0..65535.0 +1CFFC6F7xh,StatusControlVolts2,100,,,8,0,IGBTTemperature,Hottest IGBT,16, , ,i,u,C,0.0..65535.0 +1CFFC7F7xh,StatusDCParameters,100,,,2,0,VoltageDCInput_measured,Estimated DC input voltage.,16, , ,i,s,V,-32768.0..32767.0 +1CFFC7F7xh,StatusDCParameters,100,,,4,0,VoltageDCBus,Measured DC bus voltage.,16, , ,i,s,V,-32768.0..32767.0 +1CFFC7F7xh,StatusDCParameters,100,,,6,0,CurrentDC_measured,Measured DC current.,16, , ,i,s,A,-32768.0..32767.0 +1CFFCCF7xh,serialNumber,None,,,4,0,SerialNumber,Serial number of the power module.,32, , ,i,u,,0.0..4294967295.0 +1CFFCDF7xh,softwareRevHash,None,,,4,4,Hash,Unique revision identification hashcode.,28, , ,i,u,,0.0..268435455.0 diff --git a/test/reference/from_kcd/test_test.kcd.dbc b/tests/reference/from_kcd/test_test.kcd.dbc similarity index 100% rename from test/reference/from_kcd/test_test.kcd.dbc rename to tests/reference/from_kcd/test_test.kcd.dbc diff --git a/test/reference/from_kcd/test_test.kcd.dbf b/tests/reference/from_kcd/test_test.kcd.dbf similarity index 100% rename from test/reference/from_kcd/test_test.kcd.dbf rename to tests/reference/from_kcd/test_test.kcd.dbf diff --git a/test/reference/from_kcd/test_test.kcd.json b/tests/reference/from_kcd/test_test.kcd.json similarity index 100% rename from test/reference/from_kcd/test_test.kcd.json rename to tests/reference/from_kcd/test_test.kcd.json diff --git a/test/reference/from_kcd/test_test.kcd.sym b/tests/reference/from_kcd/test_test.kcd.sym similarity index 100% rename from test/reference/from_kcd/test_test.kcd.sym rename to tests/reference/from_kcd/test_test.kcd.sym diff --git a/test/reference/from_kcd/test_test.kcd.xls b/tests/reference/from_kcd/test_test.kcd.xls similarity index 100% rename from test/reference/from_kcd/test_test.kcd.xls rename to tests/reference/from_kcd/test_test.kcd.xls diff --git a/test/reference/from_kcd/test_test.kcd.xlsx b/tests/reference/from_kcd/test_test.kcd.xlsx similarity index 100% rename from test/reference/from_kcd/test_test.kcd.xlsx rename to tests/reference/from_kcd/test_test.kcd.xlsx diff --git a/test/reference/from_kcd/test_test.kcd.xml b/tests/reference/from_kcd/test_test.kcd.xml similarity index 100% rename from test/reference/from_kcd/test_test.kcd.xml rename to tests/reference/from_kcd/test_test.kcd.xml diff --git a/test/reference/from_kcd/test_test.kcd.yaml b/tests/reference/from_kcd/test_test.kcd.yaml similarity index 100% rename from test/reference/from_kcd/test_test.kcd.yaml rename to tests/reference/from_kcd/test_test.kcd.yaml diff --git a/test/reference/from_sym/test.arxml b/tests/reference/from_sym/test.arxml similarity index 100% rename from test/reference/from_sym/test.arxml rename to tests/reference/from_sym/test.arxml diff --git a/test/reference/from_sym/test.csv b/tests/reference/from_sym/test.csv similarity index 99% rename from test/reference/from_sym/test.csv rename to tests/reference/from_sym/test.csv index a3f21d44..153cf878 100644 --- a/test/reference/from_sym/test.csv +++ b/tests/reference/from_sym/test.csv @@ -1,391 +1,391 @@ -ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value -FF9B41xh,CommandModeControlAPU2,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,0,Normal -FF9B41xh,CommandModeControlAPU2,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,1,Clear Faults -FF9B41xh,CommandModeControlAPU2,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,0,Disable -FF9B41xh,CommandModeControlAPU2,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,1,Enable -FF9B41xh,CommandModeControlAPU2,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,0,Master -FF9B41xh,CommandModeControlAPU2,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,1,Follower -FF9B41xh,CommandModeControlAPU2,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal -FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On -FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal -FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On -FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal -FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On -FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal -FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On -FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,m,u,,0,Negative -FF9B41xh,CommandModeControlAPU2,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,m,u,,1,Positive -FF9B41xh,CommandModeControlAPU2,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,m,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,0,Normal - Three Phase Mode -FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,1,Enable Split Phase Mode -FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,0,Disable -FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,1,Enable -FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,3,N/A -FF9B41xh,CommandModeControlAPU2,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,0,No invert -FF9B41xh,CommandModeControlAPU2,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,1,Invert -FF9B41xh,CommandModeControlAPU2,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,2,Error -FF9B41xh,CommandModeControlAPU2,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,0,Normal -FFAB41xh,CommandModeControl,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,1,Clear Faults -FFAB41xh,CommandModeControl,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,0,Disable -FFAB41xh,CommandModeControl,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,1,Enable -FFAB41xh,CommandModeControl,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,0,Master -FFAB41xh,CommandModeControl,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,1,Follower -FFAB41xh,CommandModeControl,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal -FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On -FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal -FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On -FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal -FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On -FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal -FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On -FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,u,,0,Negative -FFAB41xh,CommandModeControl,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,u,,1,Positive -FFAB41xh,CommandModeControl,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,0,Normal - Three Phase Mode -FFAB41xh,CommandModeControl,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,1,Enable Split Phase Mode -FFAB41xh,CommandModeControl,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,0,Disable -FFAB41xh,CommandModeControl,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,1,Enable -FFAB41xh,CommandModeControl,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,3,N/A -FFAB41xh,CommandModeControl,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,0,No invert -FFAB41xh,CommandModeControl,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,1,Invert -FFAB41xh,CommandModeControl,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,2,Error -FFAB41xh,CommandModeControl,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,3,N/A -CFF9C41xh,CommandPowerAPU2,None,,,1,0,RealPower_command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,m,s,W,-90000.0..90000.0 -CFF9C41xh,CommandPowerAPU2,None,,,5,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,m,s,VA,-90000.0..90000.0 -CFF9E41xh,CommandVFAPU2,None,,,1,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,m,u,0.1 Vrms,10.0..500.0 -CFF9E41xh,CommandVFAPU2,None,,,3,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,m,u,0.1 Hz,45.0..65.0 -CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,0,Param0 -CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,1,LVM_ClearingTimes1 -CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,2,LVM_ClearingTimes2 -CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,3,LFM_Limits -CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,4,LFM_ClearingTimes -CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,5,J1939_Interface -CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,6,Fault_Config -CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,7,ContactorDelays1 -CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,8,ContactorDelays2 -CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,10,ContactorDelays3 -CFFAA41xh,CommandSetNVParam,None,,,3,0,Dummy,Mode 0:,16, , ,m,u,,0.0..65535.0 -CFFAA41xh,CommandSetNVParam,None,,,3,0,FreqHi,"Mode 3:Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,m,u,0.1 Hz,40.0..70.0 -CFFAA41xh,CommandSetNVParam,None,,,3,0,FreqVeryLo,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains below the value specified in FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,m,u,ms,160.0..160.0 -CFFAA41xh,CommandSetNVParam,None,,,3,0,K2Open,Mode 10:Maximum time required for the K2 contactor to open.,16, , ,m,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,3,0,MX1Open,Mode 7:Maximum time required for the MX1 contactor to open.,16, , ,m,u,ms,0.0..5000.0 -CFFAA41xh,CommandSetNVParam,None,,,3,0,MX2Close,Mode 8:Maximum time required for the MX2 contactor to open.,16, , ,m,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,3,0,NodeID,Mode 5:J1939 Source Address node for the module.,8, , ,m,u,,0.0..247.0 -CFFAA41xh,CommandSetNVParam,None,,,3,0,VOver120,Mode 2:Determines the fault trip time when Line-to-line rms voltage for a phase remains Over 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,u,,1.0..30000.0 -CFFAA41xh,CommandSetNVParam,None,,,3,0,VUnder50pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains under 50 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,u,ms,1.0..30000.0 -CFFAA41xh,CommandSetNVParam,None,,,3,6,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,m,u,,0,Warning -CFFAA41xh,CommandSetNVParam,None,,,3,6,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,m,u,,1,Fault -CFFAA41xh,CommandSetNVParam,None,,,3,6,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,m,u,,2,Error -CFFAA41xh,CommandSetNVParam,None,,,3,6,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,m,u,,3,N/A -CFFAA41xh,CommandSetNVParam,None,,,4,0,SA_Mask,Mode 5:Not presently used.,8, , ,m,u,,0.0..255.0 -CFFAA41xh,CommandSetNVParam,None,,,5,0,Baudrate,Mode 5:CAN baudrate,4, , ,m,u,,0,125K -CFFAA41xh,CommandSetNVParam,None,,,5,0,Baudrate,Mode 5:CAN baudrate,4, , ,m,u,,1,250K -CFFAA41xh,CommandSetNVParam,None,,,5,0,Baudrate,Mode 5:CAN baudrate,4, , ,m,u,,2,500K -CFFAA41xh,CommandSetNVParam,None,,,5,0,Baudrate,Mode 5:CAN baudrate,4, , ,m,u,,3,1M -CFFAA41xh,CommandSetNVParam,None,,,5,0,FreqLo,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains between the value specified in FreqLo and FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,m,u,ms,1.0..30000.0 -CFFAA41xh,CommandSetNVParam,None,,,5,0,K1Open,Mode 8:Maximum time required for the K1 contactor to open.,16, , ,m,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,5,0,K2Close,Mode 10:Maximum time required for the K2 contactor to close.,16, , ,m,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,5,0,MX1Close,Mode 7:Maximum time required for the MX1 contactor to close.,16, , ,m,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,5,0,V50to88pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains between 50 and 88 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,u,ms,1.0..30000.0 -CFFAA41xh,CommandSetNVParam,None,,,7,0,FreqHi,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains above the value specified in FreqHi of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,m,u,ms,160.0..160.0 -CFFAA41xh,CommandSetNVParam,None,,,7,0,FreqVeryLo,"Mode 3:Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,u,0.1 Hz,40.0..70.0 -CFFAA41xh,CommandSetNVParam,None,,,7,0,K1Close,Mode 8:Maximum time required for the K1 contactor to close.,16, , ,m,u,ms,0.0..2000.0 -CFFAA41xh,CommandSetNVParam,None,,,7,0,MX2Open,Mode 7:Maximum time required for the MX2 contactor to open.,16, , ,m,u,ms,0.0..1.0 -CFFAA41xh,CommandSetNVParam,None,,,7,0,V110to120pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains between 110 and 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,u,ms,1.0..30000.0 -CFFAC41xh,CommandPower,None,,,1,0,RealPower command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,m,s,W,-90000.0..90000.0 -CFFAC41xh,CommandPower,None,,,5,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,m,s,VA,-90000.0..90000.0 -CFFAE41xh,CommandVF,None,,,1,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,m,u,0.1 Vrms,10.0..500.0 -CFFAE41xh,CommandVF,None,,,3,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,m,u,0.1 Hz,45.0..65.0 -CFFAF41xh,CommandFactoryControl,None,,,1,6,WriteSerialNumber,,2, , ,m,u,,0,Disable -CFFAF41xh,CommandFactoryControl,None,,,1,6,WriteSerialNumber,,2, , ,m,u,,1,Enable -CFFAF41xh,CommandFactoryControl,None,,,1,6,WriteSerialNumber,,2, , ,m,u,,2,Error -CFFAF41xh,CommandFactoryControl,None,,,1,6,WriteSerialNumber,,2, , ,m,u,,3,N/A -CFFAF41xh,CommandFactoryControl,None,,,3,0,FactoryAccess,,16, , ,m,u,,0.0..65535.0 -CFFAF41xh,CommandFactoryControl,None,,,5,0,SerialNumber,,32, , ,m,u,,0.0..4294967295.0 -CFFC2F7xh,StatusACParameters,100,,,1,0,VoltageAC_measured,Measured RMS AC voltage.,16, , ,m,s,0.1 V,-3276.8..3276.7000000000003 -CFFC2F7xh,StatusACParameters,100,,,3,0,CurrentAC_measured,Measured RMS AC current.,16, , ,m,s,A,-32768.0..32767.0 -CFFC2F7xh,StatusACParameters,100,,,5,0,Frequency_measured,Measured frequency.,16, , ,m,s,0.1 Hz,-3276.8..3276.7000000000003 -CFFC3F7xh,StatusBits,100,,,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,u,,0,Normal -CFFC3F7xh,StatusBits,100,,,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,u,,1,Clear Faults -CFFC3F7xh,StatusBits,100,,,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,u,,0,Disable -CFFC3F7xh,StatusBits,100,,,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,u,,1,Enable -CFFC3F7xh,StatusBits,100,,,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,0,"Power On Reset, and a quoted comma" -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,1,Ready -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,2,Following -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,3,Fault -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,4,Forming -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,5,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,6,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,7,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,8,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,9,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,10,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,11,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,12,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,13,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,14,N/A -CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,15,N/A -CFFC3F7xh,StatusBits,100,,,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,u,,0,Disabled -CFFC3F7xh,StatusBits,100,,,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,u,,1,Enabled -CFFC3F7xh,StatusBits,100,,,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,u,,0,None -CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,u,,1,Available -CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,u,,0,None -CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,u,,1,Available -CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,u,,0,Not Active -CFFC3F7xh,StatusBits,100,,,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,u,,1,Active -CFFC3F7xh,StatusBits,100,,,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,u,,0,Open -CFFC3F7xh,StatusBits,100,,,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,u,,1,Closed -CFFC3F7xh,StatusBits,100,,,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,u,,0,Open -CFFC3F7xh,StatusBits,100,,,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,u,,1,Closed -CFFC3F7xh,StatusBits,100,,,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,u,,0,Open -CFFC3F7xh,StatusBits,100,,,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,u,,1,Closed -CFFC3F7xh,StatusBits,100,,,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,u,,0,Open -CFFC3F7xh,StatusBits,100,,,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,u,,1,Closed -CFFC3F7xh,StatusBits,100,,,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,u,,0,Normal -CFFC3F7xh,StatusBits,100,,,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,u,,1,Warning -CFFC3F7xh,StatusBits,100,,,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,u,,3,ErrorPassive -CFFC3F7xh,StatusBits,100,,,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,u,,4,N/A -CFFC3F7xh,StatusBits,100,,,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,0,Invalid -CFFC3F7xh,StatusBits,100,,,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,1,Valid -CFFC3F7xh,StatusBits,100,,,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,0,Invalid -CFFC3F7xh,StatusBits,100,,,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,1,Valid -CFFC3F7xh,StatusBits,100,,,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,0,Invalid -CFFC3F7xh,StatusBits,100,,,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,1,Valid -CFFC3F7xh,StatusBits,100,,,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,u,,0,No_Voltage -CFFC3F7xh,StatusBits,100,,,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,u,,1,Voltage_Detected -CFFC3F7xh,StatusBits,100,,,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,u,,0,Negative -CFFC3F7xh,StatusBits,100,,,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,u,,1,Positive -CFFC3F7xh,StatusBits,100,,,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,u,,0,Normal - Three Phase Mode -CFFC3F7xh,StatusBits,100,,,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,u,,1,Enable Split Phase Mode -CFFC3F7xh,StatusBits,100,,,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,u,,0,Disable -CFFC3F7xh,StatusBits,100,,,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,u,,1,Enable -CFFC3F7xh,StatusBits,100,,,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,u,,3,N/A -CFFC3F7xh,StatusBits,100,,,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,u,,0,Negative -CFFC3F7xh,StatusBits,100,,,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,u,,1,Positive -CFFC3F7xh,StatusBits,100,,,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,u,,2,Error -CFFC3F7xh,StatusBits,100,,,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,5,6,ThermalOverload,,2, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,5,6,ThermalOverload,,2, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,5,6,ThermalOverload,,2, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,5,6,ThermalOverload,,2, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,1,FLT_A -CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,2,N/A -CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,3,FLT_C -CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,4,OverVoltage -CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,5,FLT_B -CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,6,Overcurrent -CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,7,5V -CFFC8F7xh,StatusFaults,100,,,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,1,Fault Active -CFFC8F7xh,StatusFaults,100,,,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,2,Error -CFFC8F7xh,StatusFaults,100,,,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,3,N/A -CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,0,Normal -CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,1,FLT_A -CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,2,N/A -CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,3,FLT_C -CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,4,OverVoltage -CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,5,FLT_B -CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,6,Overcurrent -CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,7,5V -CFFCAF6xh,MasterMeasuredPower,None,,,1,0,RealPower_measured,Measured real power of master unit.,32, , ,m,s,W,-2147483648.0..2147483647.0 -CFFCAF6xh,MasterMeasuredPower,None,,,5,0,ReactivePower_measured,Measured reactive power of master unit.,32, , ,m,s,VA,-2147483648.0..2147483647.0 -CFFCAF7xh,StatusMeasuredPower,100,,,1,0,RealPower_measured,Measured real power.,32, , ,m,s,W,-2147483648.0..2147483647.0 -CFFCAF7xh,StatusMeasuredPower,100,,,5,0,ReactivePower_measured,Measured reactive power.,32, , ,m,s,VA,-2147483648.0..2147483647.0 -18FFC4F7xh,StatusCommandedPower,100,,,1,0,RealPower_echo,Echoed real power command.,32, , ,m,s,W,-2147483648.0..2147483647.0 -18FFC4F7xh,StatusCommandedPower,100,,,5,0,ReactivePower_echo,Echoed reactive power command.,32, , ,m,s,VA,-2147483648.0..2147483647.0 -18FFC9F7xh,StatusCommandVF,100,,,1,0,Voltage_echo,Echoed voltage command,16, , ,m,u,0.1 Vrms,0.0..6553.5 -18FFC9F7xh,StatusCommandVF,100,,,3,0,Frequency_echo,Echoed frequency command.,16, , ,m,u,0.1 Hz,0.0..6553.5 -18FFCBF7xh,StatusTemps,100,,,1,0,TempInlet_measured,Coolant inlet temperature,16, , ,m,s,0.1 C,-3276.8..3276.7000000000003 -18FFCBF7xh,StatusTemps,100,,,3,0,TempInternal_measured,Internal ambient temperature,16, , ,m,s,0.1 C,-3276.8..3276.7000000000003 -18FFCBF7xh,StatusTemps,100,,,5,0,ConverterLosses,Power converter thermal loss,16, , ,m,u,W,0.0..1.0 -18FFD0F7xh,StatusLineCurrents,100,,,1,0,L1Current_measured,Measured L1 RMS line current.,16, , ,m,u,A,0.0..1.0 -18FFD0F7xh,StatusLineCurrents,100,,,3,0,L2Current_measured,Measured L2 RMS line current.,16, , ,m,u,A,0.0..1.0 -18FFD0F7xh,StatusLineCurrents,100,,,5,0,L3Current_measured,Measured L3 RMS line current.,16, , ,m,u,A,0.0..1.0 -18FFD1F7xh,StatusLineVoltages,100,,,1,0,L1Voltage_measured,Measured L1 RMS line-neutral voltage,16, , ,m,u,0.1 Vrms,0.0..1.0 -18FFD1F7xh,StatusLineVoltages,100,,,3,0,L2Voltage_measured,Measured L2 RMS line-neutral voltage,16, , ,m,u,0.1 Vrms,0.0..1.0 -18FFD1F7xh,StatusLineVoltages,100,,,5,0,L3Voltage_measured,Measured L3 RMS line-neutral voltage,16, , ,m,u,0.1 Vrms,0.0..1.0 -1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,0,ActParam0 -1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,1,ActLVM_ClearingTimes1 -1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,2,ActLVM_ClearingTimes2 -1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,3,ActLFM_Limits -1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,4,ActLFM_ClearingTimes -1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,5,StatusJ1939_Interface -1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,6,StatusFault_Config -1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,7,StatusContactorDelays1 -1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,8,StatusContactorDelays2 -1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,9,StatusContactorDelays3 -1CFFA9F7xh,StatusNVParam,None,,,3,0,Dummy,Mode 0:,16, , ,m,u,,5.0..10.0 -1CFFA9F7xh,StatusNVParam,None,,,3,0,FreqHi,Mode 3:,16, , ,m,u,0.1 Hz,40.0..70.0 -1CFFA9F7xh,StatusNVParam,None,,,3,0,FreqVeryLo,Mode 4:,16, , ,m,u,ms,160.0..160.0 -1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusK2Open,Mode 9:Maximum time required for the K2 contactor to open.,16, , ,m,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusMX1Open,Mode 7:Maximum time required for the MX1 contactor to open.,16, , ,m,u,ms,0.0..5000.0 -1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusMX2Close,Mode 8:Maximum time required for the MX2 contactor to open.,16, , ,m,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusNodeID,Mode 5:J1939 Source Address node for the module,8, , ,m,u,,0.0..247.0 -1CFFA9F7xh,StatusNVParam,None,,,3,0,VOver120,Mode 2:,16, , ,m,u,,1.0..30000.0 -1CFFA9F7xh,StatusNVParam,None,,,3,0,VUnder50pct,Mode 1:,16, , ,m,u,ms,1.0..30000.0 -1CFFA9F7xh,StatusNVParam,None,,,3,6,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,m,u,,0,Warning -1CFFA9F7xh,StatusNVParam,None,,,3,6,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,m,u,,1,Fault -1CFFA9F7xh,StatusNVParam,None,,,3,6,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,m,u,,2,Error -1CFFA9F7xh,StatusNVParam,None,,,3,6,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,m,u,,3,N/A -1CFFA9F7xh,StatusNVParam,None,,,4,0,StatusSA_Mask,Mode 5:Mask used to configure from which master source addresses to accept commands.,8, , ,m,u,,0.0..255.0 -1CFFA9F7xh,StatusNVParam,None,,,5,0,FreqLo,Mode 4:,16, , ,m,u,ms,1.0..30000.0 -1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusBaudrate,Mode 5:,4, , ,m,u,,0,125K -1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusBaudrate,Mode 5:,4, , ,m,u,,1,250K -1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusBaudrate,Mode 5:,4, , ,m,u,,2,500K -1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusBaudrate,Mode 5:,4, , ,m,u,,3,1M -1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusK1Open,Mode 8:Maximum time required for the K1 contactor to open.,16, , ,m,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusK2Close,Mode 9:Maximum time required for the K2 contactor to close.,16, , ,m,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusMX1Close,Mode 7:Maximum time required for the MX1 contactor to close.,16, , ,m,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,5,0,V50to88pct,Mode 1:,16, , ,m,u,ms,1.0..30000.0 -1CFFA9F7xh,StatusNVParam,None,,,7,0,FreqHi,Mode 4:,16, , ,m,u,ms,160.0..160.0 -1CFFA9F7xh,StatusNVParam,None,,,7,0,FreqVeryLo,Mode 3:,16, , ,m,u,0.1 Hz,40.0..70.0 -1CFFA9F7xh,StatusNVParam,None,,,7,0,StatusK1Close,Mode 8:Maximum time required for the K1 contactor to close.,16, , ,m,u,ms,0.0..2000.0 -1CFFA9F7xh,StatusNVParam,None,,,7,0,StatusMX2Open,Mode 7:Maximum time required for the MX2 contactor to open.,16, , ,m,u,ms,0.0..1.0 -1CFFA9F7xh,StatusNVParam,None,,,7,0,V110to120pct,Mode 1:,16, , ,m,u,ms,1.0..30000.0 -1CFFABC0xh,stringAndOther,None,,,1,0,RealPower_measured,Measured real power.,32, , ,m,s,W,-2147483648.0..2147483647.0 -1CFFC1F7xh,softwareRev,None,,,1,0,ControlSwRev,Software revision of the control firmware.,16, , ,m,u,0.01 -,0.0..655.35 -1CFFC1F7xh,softwareRev,None,,,3,0,InterfaceRev,Software revision of the CAN communication interface.,16, , ,m,u,0.01 -,0.0..655.35 -1CFFC1F7xh,softwareRev,None,,,5,0,BuildTime,Build timestamp.,32, , ,m,u,,0.0..4294967295.0 -1CFFC5F7xh,StatusControlVoltage,100,,,1,0,v5p0_Supply,Present voltage of the control board 5V power suppy.,16, , ,m,s,0.01 V,-327.68..327.67 -1CFFC5F7xh,StatusControlVoltage,100,,,3,0,v3p3_Supply,Present voltage of the control board 3.3V power supply.,16, , ,m,s,0.01 V,-327.68..327.67 -1CFFC5F7xh,StatusControlVoltage,100,,,5,0,v24_Supply,Present voltage of the control board 24V power supply.,16, , ,m,s,0.01 V,-327.68..327.67 -1CFFC5F7xh,StatusControlVoltage,100,,,7,0,v15_Supply,Present voltage of the control board 15V power supply.,16, , ,m,s,0.01 V,-327.68..327.67 -1CFFC6F7xh,StatusControlVolts2,100,,,1,0,n15V_Supply,Present voltage of the control board -15V power supply.,16, , ,m,s,0.01 V,-327.68..327.67 -1CFFC6F7xh,StatusControlVolts2,100,,,5,0,DiodeTemperature,Hottest diode,16, , ,m,u,C,0.0..1.0 -1CFFC6F7xh,StatusControlVolts2,100,,,7,0,IGBTTemperature,Hottest IGBT,16, , ,m,u,C,0.0..1.0 -1CFFC7F7xh,StatusDCParameters,100,,,1,0,VoltageDCInput_measured,Estimated DC input voltage.,16, , ,m,s,V,-32768.0..32767.0 -1CFFC7F7xh,StatusDCParameters,100,,,3,0,VoltageDCBus,Measured DC bus voltage.,16, , ,m,s,V,-32768.0..32767.0 -1CFFC7F7xh,StatusDCParameters,100,,,5,0,CurrentDC_measured,Measured DC current.,16, , ,m,s,A,-32768.0..32767.0 -1CFFCCF7xh,serialNumber,None,,,1,0,SerialNumber,Serial number of the power module.,32, , ,m,u,,0.0..4294967295.0 -1CFFCDF7xh,softwareRevHash,None,,,1,0,Hash,Unique revision identification hashcode.,28, , ,m,u,,0.0..268435455.0 +ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value +FF9B41xh,CommandModeControlAPU2,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,0,Normal +FF9B41xh,CommandModeControlAPU2,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,1,Clear Faults +FF9B41xh,CommandModeControlAPU2,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,0,Disable +FF9B41xh,CommandModeControlAPU2,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,1,Enable +FF9B41xh,CommandModeControlAPU2,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,0,Master +FF9B41xh,CommandModeControlAPU2,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,1,Follower +FF9B41xh,CommandModeControlAPU2,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal +FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On +FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal +FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On +FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal +FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On +FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal +FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On +FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,m,u,,0,Negative +FF9B41xh,CommandModeControlAPU2,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,m,u,,1,Positive +FF9B41xh,CommandModeControlAPU2,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING,2, , ,m,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,0,Normal - Three Phase Mode +FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,1,Enable Split Phase Mode +FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,0,Disable +FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,1,Enable +FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,3,N/A +FF9B41xh,CommandModeControlAPU2,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,0,No invert +FF9B41xh,CommandModeControlAPU2,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,1,Invert +FF9B41xh,CommandModeControlAPU2,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,2,Error +FF9B41xh,CommandModeControlAPU2,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,0,Normal +FFAB41xh,CommandModeControl,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,1,Clear Faults +FFAB41xh,CommandModeControl,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,1,4,FaultClear_command,Clears the latched fault message.,2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,0,Disable +FFAB41xh,CommandModeControl,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,1,Enable +FFAB41xh,CommandModeControl,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,1,6,Enable_command,"Run command. When set to a value of 'Enable', causes transition to grid forming or grid following mode depending on whether AC power is detected. Must be set to 'Disable' to leave POR or FAULTED state.",2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,0,Master +FFAB41xh,CommandModeControl,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,1,Follower +FFAB41xh,CommandModeControl,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,3,6,MasterFollowerMode_command,"Specifies what power command the inverter will follow in GRID FOLLOWING mode. When configured as Master, CommandPower will be used as the power command. When configured as Slave, the values in StatusMeasuredPower of the master inverter will be used.",2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal +FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On +FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,5,0,ForceRelayRelayK2_DCRun_comand,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal +FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On +FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,5,2,ForceRelayK1_Precharge_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal +FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On +FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,5,4,ForceRelayMX2_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,0,Normal +FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,1,Force On +FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,5,6,ForceRelayMX1_command,"If set to 'Force On,' will force the relay closed, overriding firmware state machine commands. Meant for diagnostic purposes only.",2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,u,,0,Negative +FFAB41xh,CommandModeControl,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,u,,1,Positive +FFAB41xh,CommandModeControl,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,8,0,PhaseRotation_command,Specifies phase rotation direction. Only active while transitioning from READY to GRID_FORMING.,2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,0,Normal - Three Phase Mode +FFAB41xh,CommandModeControl,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,1,Enable Split Phase Mode +FFAB41xh,CommandModeControl,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,8,2,EnableSplitPhase_command,"Dictates to the module whether it is connected to a three-phase (four wire) or split phase (L1, L2 and N) electrical system.",2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,0,Disable +FFAB41xh,CommandModeControl,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,1,Enable +FFAB41xh,CommandModeControl,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,8,4,EnableUPSMode_command,"Enables uninterruptible operation when transitioning from GRID FOLLOWING to GRID FORMING operation. If operating in GRID FOLLOWING mode, and AC grid voltage is interrupted, the module will transition to GRID FORMING mode, with no interruption in power.",2, , ,m,u,,3,N/A +FFAB41xh,CommandModeControl,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,0,No invert +FFAB41xh,CommandModeControl,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,1,Invert +FFAB41xh,CommandModeControl,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,2,Error +FFAB41xh,CommandModeControl,None,,,8,6,InvertHwEnable_command,Inverts the logic of the Hardware Enable input.,2, , ,m,u,,3,N/A +CFF9C41xh,CommandPowerAPU2,None,,,1,0,RealPower_command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,m,s,W,-90000.0..90000.0 +CFF9C41xh,CommandPowerAPU2,None,,,5,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,m,s,VA,-90000.0..90000.0 +CFF9E41xh,CommandVFAPU2,None,,,1,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,m,u,0.1 Vrms,10.0..500.0 +CFF9E41xh,CommandVFAPU2,None,,,3,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,m,u,0.1 Hz,45.0..65.0 +CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,0,Param0 +CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,1,LVM_ClearingTimes1 +CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,2,LVM_ClearingTimes2 +CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,3,LFM_Limits +CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,4,LFM_ClearingTimes +CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,5,J1939_Interface +CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,6,Fault_Config +CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,7,ContactorDelays1 +CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,8,ContactorDelays2 +CFFAA41xh,CommandSetNVParam,None,,,1,0,CommandSetNVParam_MUX,Mode Signal: ,16, , ,m,s,,10,ContactorDelays3 +CFFAA41xh,CommandSetNVParam,None,,,3,0,Dummy,Mode 0:,16, , ,m,u,,0.0..65535.0 +CFFAA41xh,CommandSetNVParam,None,,,3,0,FreqHi,"Mode 3:Determines the upper bound, above which the frequency monitor will trip if the line frequency remains for the time specified in FreqHi of the LFM_ClearingTimes Mux.",16, , ,m,u,0.1 Hz,40.0..70.0 +CFFAA41xh,CommandSetNVParam,None,,,3,0,FreqVeryLo,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains below the value specified in FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,m,u,ms,160.0..160.0 +CFFAA41xh,CommandSetNVParam,None,,,3,0,K2Open,Mode 10:Maximum time required for the K2 contactor to open.,16, , ,m,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,3,0,MX1Open,Mode 7:Maximum time required for the MX1 contactor to open.,16, , ,m,u,ms,0.0..5000.0 +CFFAA41xh,CommandSetNVParam,None,,,3,0,MX2Close,Mode 8:Maximum time required for the MX2 contactor to open.,16, , ,m,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,3,0,NodeID,Mode 5:J1939 Source Address node for the module.,8, , ,m,u,,0.0..247.0 +CFFAA41xh,CommandSetNVParam,None,,,3,0,VOver120,Mode 2:Determines the fault trip time when Line-to-line rms voltage for a phase remains Over 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,u,,1.0..30000.0 +CFFAA41xh,CommandSetNVParam,None,,,3,0,VUnder50pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains under 50 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,u,ms,1.0..30000.0 +CFFAA41xh,CommandSetNVParam,None,,,3,6,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,m,u,,0,Warning +CFFAA41xh,CommandSetNVParam,None,,,3,6,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,m,u,,1,Fault +CFFAA41xh,CommandSetNVParam,None,,,3,6,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,m,u,,2,Error +CFFAA41xh,CommandSetNVParam,None,,,3,6,ThermalOverload,Mode 6:Configures action to take when thermal overload input is active.,2, , ,m,u,,3,N/A +CFFAA41xh,CommandSetNVParam,None,,,4,0,SA_Mask,Mode 5:Not presently used.,8, , ,m,u,,0.0..255.0 +CFFAA41xh,CommandSetNVParam,None,,,5,0,Baudrate,Mode 5:CAN baudrate,4, , ,m,u,,0,125K +CFFAA41xh,CommandSetNVParam,None,,,5,0,Baudrate,Mode 5:CAN baudrate,4, , ,m,u,,1,250K +CFFAA41xh,CommandSetNVParam,None,,,5,0,Baudrate,Mode 5:CAN baudrate,4, , ,m,u,,2,500K +CFFAA41xh,CommandSetNVParam,None,,,5,0,Baudrate,Mode 5:CAN baudrate,4, , ,m,u,,3,1M +CFFAA41xh,CommandSetNVParam,None,,,5,0,FreqLo,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains between the value specified in FreqLo and FreqVeryLo of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,m,u,ms,1.0..30000.0 +CFFAA41xh,CommandSetNVParam,None,,,5,0,K1Open,Mode 8:Maximum time required for the K1 contactor to open.,16, , ,m,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,5,0,K2Close,Mode 10:Maximum time required for the K2 contactor to close.,16, , ,m,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,5,0,MX1Close,Mode 7:Maximum time required for the MX1 contactor to close.,16, , ,m,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,5,0,V50to88pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains between 50 and 88 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,u,ms,1.0..30000.0 +CFFAA41xh,CommandSetNVParam,None,,,7,0,FreqHi,Mode 4:Determines the time it will take for a fault trip to occur when line frequency remains above the value specified in FreqHi of the LFM_Limits Mux when the inverter is in GRID FOLLOWING mode.,16, , ,m,u,ms,160.0..160.0 +CFFAA41xh,CommandSetNVParam,None,,,7,0,FreqVeryLo,"Mode 3:Determines the upper bound, in which the frequency monitor will trip if the line frequency remains below this bound but above the value of FreqVeryLo for the time specified in FreqLo of the LFM_ClearingTimes Mux.",16, , ,m,u,0.1 Hz,40.0..70.0 +CFFAA41xh,CommandSetNVParam,None,,,7,0,K1Close,Mode 8:Maximum time required for the K1 contactor to close.,16, , ,m,u,ms,0.0..2000.0 +CFFAA41xh,CommandSetNVParam,None,,,7,0,MX2Open,Mode 7:Maximum time required for the MX2 contactor to open.,16, , ,m,u,ms,0.0..1.0 +CFFAA41xh,CommandSetNVParam,None,,,7,0,V110to120pct,Mode 1:Determines the fault trip time when Line-to-line rms voltage for a phase remains between 110 and 120 percent of the nominal value specified in the CommandVF message while the inverter is running in GRID FOLLOWING mode.,16, , ,m,u,ms,1.0..30000.0 +CFFAC41xh,CommandPower,None,,,1,0,RealPower command,Commanded real power (W) while in grid following mode - positive real power is defined as power being put into the ac network.,32, , ,m,s,W,-90000.0..90000.0 +CFFAC41xh,CommandPower,None,,,5,0,ReactivePower_command,Commanded reactive power (VA) while in grid following mode - positive reactive power is defined as the converter having a leading power factor.,32, , ,m,s,VA,-90000.0..90000.0 +CFFAE41xh,CommandVF,None,,,1,0,Voltage_command,Desired output voltage while in grid forming mode.,16, , ,m,u,0.1 Vrms,10.0..500.0 +CFFAE41xh,CommandVF,None,,,3,0,Frequency_command,Desired output frequency while in grid forming mode.,16, , ,m,u,0.1 Hz,45.0..65.0 +CFFAF41xh,CommandFactoryControl,None,,,1,6,WriteSerialNumber,,2, , ,m,u,,0,Disable +CFFAF41xh,CommandFactoryControl,None,,,1,6,WriteSerialNumber,,2, , ,m,u,,1,Enable +CFFAF41xh,CommandFactoryControl,None,,,1,6,WriteSerialNumber,,2, , ,m,u,,2,Error +CFFAF41xh,CommandFactoryControl,None,,,1,6,WriteSerialNumber,,2, , ,m,u,,3,N/A +CFFAF41xh,CommandFactoryControl,None,,,3,0,FactoryAccess,,16, , ,m,u,,0.0..65535.0 +CFFAF41xh,CommandFactoryControl,None,,,5,0,SerialNumber,,32, , ,m,u,,0.0..4294967295.0 +CFFC2F7xh,StatusACParameters,100,,,1,0,VoltageAC_measured,Measured RMS AC voltage.,16, , ,m,s,0.1 V,-3276.8..3276.7000000000003 +CFFC2F7xh,StatusACParameters,100,,,3,0,CurrentAC_measured,Measured RMS AC current.,16, , ,m,s,A,-32768.0..32767.0 +CFFC2F7xh,StatusACParameters,100,,,5,0,Frequency_measured,Measured frequency.,16, , ,m,s,0.1 Hz,-3276.8..3276.7000000000003 +CFFC3F7xh,StatusBits,100,,,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,u,,0,Normal +CFFC3F7xh,StatusBits,100,,,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,u,,1,Clear Faults +CFFC3F7xh,StatusBits,100,,,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,1,0,FaultClr_echo,Echos the state of the FaultClear command withing the CommandModeControl message.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,u,,0,Disable +CFFC3F7xh,StatusBits,100,,,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,u,,1,Enable +CFFC3F7xh,StatusBits,100,,,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,1,2,Enable_echo,Echos the state of the Enable command withing the CommandModeControl message.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,0,"Power On Reset, and a quoted comma" +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,1,Ready +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,2,Following +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,3,Fault +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,4,Forming +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,5,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,6,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,7,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,8,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,9,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,10,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,11,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,12,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,13,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,14,N/A +CFFC3F7xh,StatusBits,100,,,1,4,State_status,Active control mode.,4, , ,m,u,,15,N/A +CFFC3F7xh,StatusBits,100,,,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,u,,0,Disabled +CFFC3F7xh,StatusBits,100,,,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,u,,1,Enabled +CFFC3F7xh,StatusBits,100,,,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,2,0,PowerCircuitEnabled_status,Indicates whether the switching devices are active.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,u,,0,None +CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,u,,1,Available +CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,2,2,PowerAvailDC_status,Indicates that DC bus voltage is within operating range.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,u,,0,None +CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,u,,1,Available +CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,2,4,PowerAvailAC_status,Indicates that AC power is connected and that voltage and frequency are within nominal ranges.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,u,,0,Not Active +CFFC3F7xh,StatusBits,100,,,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,u,,1,Active +CFFC3F7xh,StatusBits,100,,,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,2,6,HardwareEnable_status,Status of the hardware enable.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,u,,0,Open +CFFC3F7xh,StatusBits,100,,,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,u,,1,Closed +CFFC3F7xh,StatusBits,100,,,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,3,0,K2DCRunPermissive_status,K2 DC Run relay status.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,u,,0,Open +CFFC3F7xh,StatusBits,100,,,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,u,,1,Closed +CFFC3F7xh,StatusBits,100,,,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,3,2,K1PrechargePermissive_status,K1 precharge relay status.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,u,,0,Open +CFFC3F7xh,StatusBits,100,,,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,u,,1,Closed +CFFC3F7xh,StatusBits,100,,,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,3,4,MX2Permissive_status,MX2 relay status,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,u,,0,Open +CFFC3F7xh,StatusBits,100,,,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,u,,1,Closed +CFFC3F7xh,StatusBits,100,,,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,3,6,MX1Permissive_status,MX1 relay status,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,u,,0,Normal +CFFC3F7xh,StatusBits,100,,,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,u,,1,Warning +CFFC3F7xh,StatusBits,100,,,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,u,,3,ErrorPassive +CFFC3F7xh,StatusBits,100,,,4,0,CANbus_status,Operational status of the CAN bus driver.,2, , ,m,u,,4,N/A +CFFC3F7xh,StatusBits,100,,,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,0,Invalid +CFFC3F7xh,StatusBits,100,,,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,1,Valid +CFFC3F7xh,StatusBits,100,,,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,4,2,MessageValidVF_status,Indicates the validity of the CommandVF message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,0,Invalid +CFFC3F7xh,StatusBits,100,,,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,1,Valid +CFFC3F7xh,StatusBits,100,,,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,4,4,MessageValidPowerCMD_status,Indicates the validity of the CommandPQ message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,0,Invalid +CFFC3F7xh,StatusBits,100,,,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,1,Valid +CFFC3F7xh,StatusBits,100,,,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,4,6,MessageValidModeControl_status,Indicates the validity of the CommandModeControl message. Message must be received at least once per second and parameter data within range to be considered valid.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,u,,0,No_Voltage +CFFC3F7xh,StatusBits,100,,,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,u,,1,Voltage_Detected +CFFC3F7xh,StatusBits,100,,,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,5,0,LineVoltageDetected_status,"Flag indicating if voltage is detected on L1, L2 or L3.",2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,u,,0,Negative +CFFC3F7xh,StatusBits,100,,,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,u,,1,Positive +CFFC3F7xh,StatusBits,100,,,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,5,2,PhaseRotation_status,"Phase rotation order. When L1 phase angle leads L2 phase angle, rotation is considered positive.",2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,u,,0,Normal - Three Phase Mode +CFFC3F7xh,StatusBits,100,,,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,u,,1,Enable Split Phase Mode +CFFC3F7xh,StatusBits,100,,,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,5,4,EnableSplitPhase_echo,Echos the state of the EnableSplitPhase command withing the CommandModeControl message.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,u,,0,Disable +CFFC3F7xh,StatusBits,100,,,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,u,,1,Enable +CFFC3F7xh,StatusBits,100,,,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,5,6,EnableUPSMode_echo,Echos the state of the EnableUPSMode command withing the CommandModeControl message.,2, , ,m,u,,3,N/A +CFFC3F7xh,StatusBits,100,,,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,u,,0,Negative +CFFC3F7xh,StatusBits,100,,,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,u,,1,Positive +CFFC3F7xh,StatusBits,100,,,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,u,,2,Error +CFFC3F7xh,StatusBits,100,,,6,6,PhaseRotation_echo,Echos the state of PhaseRotation_command withing the CommandModeControl message.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,1,0,OvercurrentDC_status,Set immediately upon the software detection of DC current exceeding the threshold value.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,1,2,LossOfAC_status,"In grid following mode, this fault will be triggered if AC voltage or frequency goes outside of nominal bounds and EnableUPSMode is not set in the CommandModeControl message.",2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,1,4,OvercurrentAC_status,Set immediately upon the software detection of AC current exceeding the threshold value.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,1,6,GeneralFault_status,Will be set any time a fault shutdown has occurred. It is always accompanied by an additional fault descriptor.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,2,0,OvertempPowerDevice_status,Set immediately upon the software detection of an IGBT temperature exceeding the threshold value.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,2,2,OvertempInternal_status,Set immediately upon the software detection of an internal inverter temperature exceeding the threshold value.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,2,4,UndervoltageDC_status,Indicates loss of DC source voltage.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,2,6,OvervoltageDC_status,Set immediately upon the software detection of DC voltage exceeding the threshold value.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,3,0,LossValidControlMessage_status,Set whenever a control message required for operation contains out of range data or has not been received within the required timeout period.,4, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,3,4,ControlHardwareFail_status,Set upon the failure of control hardware to return expected response.,4, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,4,0,InvalidEESection_status,Indicates that reading or writing of an non-volatile parameter section failed.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,4,2,InvalidEEHeader_status,Indicates that reading of non-volatile parameters at power-up failed.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,4,4,IllegalTransition_status,"Indicates that an illegal state transition was requested. For example, this fault will occur if Enable is commanded and line voltage is detected but AC power is not available.",2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,4,6,EStopShutdown_status,Set when an enable request has been sent whithout the WakeUpSignal flag (hardware enable) in the StatusBits message being active.,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,5,6,ThermalOverload,,2, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,5,6,ThermalOverload,,2, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,5,6,ThermalOverload,,2, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,5,6,ThermalOverload,,2, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,6,4,BridgeBVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,1,FLT_A +CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,2,N/A +CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,3,FLT_C +CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,4,OverVoltage +CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,5,FLT_B +CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,6,Overcurrent +CFFC8F7xh,StatusFaults,100,,,6,5,BridgeBFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,7,5V +CFFC8F7xh,StatusFaults,100,,,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,1,Fault Active +CFFC8F7xh,StatusFaults,100,,,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,2,Error +CFFC8F7xh,StatusFaults,100,,,8,4,BridgeAVoltageOk_status,Indicates whether a hardware trip has been activated.,1, , ,m,u,,3,N/A +CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,0,Normal +CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,1,FLT_A +CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,2,N/A +CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,3,FLT_C +CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,4,OverVoltage +CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,5,FLT_B +CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,6,Overcurrent +CFFC8F7xh,StatusFaults,100,,,8,5,BridgeAFault_status,"Each bridge has hardware protection features as a backup to software protection. This bitfield indicates which, if any of these protection trips is active.",3, , ,m,u,,7,5V +CFFCAF6xh,MasterMeasuredPower,None,,,1,0,RealPower_measured,Measured real power of master unit.,32, , ,m,s,W,-2147483648.0..2147483647.0 +CFFCAF6xh,MasterMeasuredPower,None,,,5,0,ReactivePower_measured,Measured reactive power of master unit.,32, , ,m,s,VA,-2147483648.0..2147483647.0 +CFFCAF7xh,StatusMeasuredPower,100,,,1,0,RealPower_measured,Measured real power.,32, , ,m,s,W,-2147483648.0..2147483647.0 +CFFCAF7xh,StatusMeasuredPower,100,,,5,0,ReactivePower_measured,Measured reactive power.,32, , ,m,s,VA,-2147483648.0..2147483647.0 +18FFC4F7xh,StatusCommandedPower,100,,,1,0,RealPower_echo,Echoed real power command.,32, , ,m,s,W,-2147483648.0..2147483647.0 +18FFC4F7xh,StatusCommandedPower,100,,,5,0,ReactivePower_echo,Echoed reactive power command.,32, , ,m,s,VA,-2147483648.0..2147483647.0 +18FFC9F7xh,StatusCommandVF,100,,,1,0,Voltage_echo,Echoed voltage command,16, , ,m,u,0.1 Vrms,0.0..6553.5 +18FFC9F7xh,StatusCommandVF,100,,,3,0,Frequency_echo,Echoed frequency command.,16, , ,m,u,0.1 Hz,0.0..6553.5 +18FFCBF7xh,StatusTemps,100,,,1,0,TempInlet_measured,Coolant inlet temperature,16, , ,m,s,0.1 C,-3276.8..3276.7000000000003 +18FFCBF7xh,StatusTemps,100,,,3,0,TempInternal_measured,Internal ambient temperature,16, , ,m,s,0.1 C,-3276.8..3276.7000000000003 +18FFCBF7xh,StatusTemps,100,,,5,0,ConverterLosses,Power converter thermal loss,16, , ,m,u,W,0.0..1.0 +18FFD0F7xh,StatusLineCurrents,100,,,1,0,L1Current_measured,Measured L1 RMS line current.,16, , ,m,u,A,0.0..1.0 +18FFD0F7xh,StatusLineCurrents,100,,,3,0,L2Current_measured,Measured L2 RMS line current.,16, , ,m,u,A,0.0..1.0 +18FFD0F7xh,StatusLineCurrents,100,,,5,0,L3Current_measured,Measured L3 RMS line current.,16, , ,m,u,A,0.0..1.0 +18FFD1F7xh,StatusLineVoltages,100,,,1,0,L1Voltage_measured,Measured L1 RMS line-neutral voltage,16, , ,m,u,0.1 Vrms,0.0..1.0 +18FFD1F7xh,StatusLineVoltages,100,,,3,0,L2Voltage_measured,Measured L2 RMS line-neutral voltage,16, , ,m,u,0.1 Vrms,0.0..1.0 +18FFD1F7xh,StatusLineVoltages,100,,,5,0,L3Voltage_measured,Measured L3 RMS line-neutral voltage,16, , ,m,u,0.1 Vrms,0.0..1.0 +1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,0,ActParam0 +1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,1,ActLVM_ClearingTimes1 +1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,2,ActLVM_ClearingTimes2 +1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,3,ActLFM_Limits +1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,4,ActLFM_ClearingTimes +1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,5,StatusJ1939_Interface +1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,6,StatusFault_Config +1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,7,StatusContactorDelays1 +1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,8,StatusContactorDelays2 +1CFFA9F7xh,StatusNVParam,None,,,1,0,StatusNVParam_MUX,Mode Signal: ,16, , ,m,s,,9,StatusContactorDelays3 +1CFFA9F7xh,StatusNVParam,None,,,3,0,Dummy,Mode 0:,16, , ,m,u,,5.0..10.0 +1CFFA9F7xh,StatusNVParam,None,,,3,0,FreqHi,Mode 3:,16, , ,m,u,0.1 Hz,40.0..70.0 +1CFFA9F7xh,StatusNVParam,None,,,3,0,FreqVeryLo,Mode 4:,16, , ,m,u,ms,160.0..160.0 +1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusK2Open,Mode 9:Maximum time required for the K2 contactor to open.,16, , ,m,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusMX1Open,Mode 7:Maximum time required for the MX1 contactor to open.,16, , ,m,u,ms,0.0..5000.0 +1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusMX2Close,Mode 8:Maximum time required for the MX2 contactor to open.,16, , ,m,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,3,0,StatusNodeID,Mode 5:J1939 Source Address node for the module,8, , ,m,u,,0.0..247.0 +1CFFA9F7xh,StatusNVParam,None,,,3,0,VOver120,Mode 2:,16, , ,m,u,,1.0..30000.0 +1CFFA9F7xh,StatusNVParam,None,,,3,0,VUnder50pct,Mode 1:,16, , ,m,u,ms,1.0..30000.0 +1CFFA9F7xh,StatusNVParam,None,,,3,6,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,m,u,,0,Warning +1CFFA9F7xh,StatusNVParam,None,,,3,6,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,m,u,,1,Fault +1CFFA9F7xh,StatusNVParam,None,,,3,6,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,m,u,,2,Error +1CFFA9F7xh,StatusNVParam,None,,,3,6,StatusThermalOverload,Mode 6:Configured action to take when thermal overload input is active.,2, , ,m,u,,3,N/A +1CFFA9F7xh,StatusNVParam,None,,,4,0,StatusSA_Mask,Mode 5:Mask used to configure from which master source addresses to accept commands.,8, , ,m,u,,0.0..255.0 +1CFFA9F7xh,StatusNVParam,None,,,5,0,FreqLo,Mode 4:,16, , ,m,u,ms,1.0..30000.0 +1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusBaudrate,Mode 5:,4, , ,m,u,,0,125K +1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusBaudrate,Mode 5:,4, , ,m,u,,1,250K +1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusBaudrate,Mode 5:,4, , ,m,u,,2,500K +1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusBaudrate,Mode 5:,4, , ,m,u,,3,1M +1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusK1Open,Mode 8:Maximum time required for the K1 contactor to open.,16, , ,m,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusK2Close,Mode 9:Maximum time required for the K2 contactor to close.,16, , ,m,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,5,0,StatusMX1Close,Mode 7:Maximum time required for the MX1 contactor to close.,16, , ,m,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,5,0,V50to88pct,Mode 1:,16, , ,m,u,ms,1.0..30000.0 +1CFFA9F7xh,StatusNVParam,None,,,7,0,FreqHi,Mode 4:,16, , ,m,u,ms,160.0..160.0 +1CFFA9F7xh,StatusNVParam,None,,,7,0,FreqVeryLo,Mode 3:,16, , ,m,u,0.1 Hz,40.0..70.0 +1CFFA9F7xh,StatusNVParam,None,,,7,0,StatusK1Close,Mode 8:Maximum time required for the K1 contactor to close.,16, , ,m,u,ms,0.0..2000.0 +1CFFA9F7xh,StatusNVParam,None,,,7,0,StatusMX2Open,Mode 7:Maximum time required for the MX2 contactor to open.,16, , ,m,u,ms,0.0..1.0 +1CFFA9F7xh,StatusNVParam,None,,,7,0,V110to120pct,Mode 1:,16, , ,m,u,ms,1.0..30000.0 +1CFFABC0xh,stringAndOther,None,,,1,0,RealPower_measured,Measured real power.,32, , ,m,s,W,-2147483648.0..2147483647.0 +1CFFC1F7xh,softwareRev,None,,,1,0,ControlSwRev,Software revision of the control firmware.,16, , ,m,u,0.01 -,0.0..655.35 +1CFFC1F7xh,softwareRev,None,,,3,0,InterfaceRev,Software revision of the CAN communication interface.,16, , ,m,u,0.01 -,0.0..655.35 +1CFFC1F7xh,softwareRev,None,,,5,0,BuildTime,Build timestamp.,32, , ,m,u,,0.0..4294967295.0 +1CFFC5F7xh,StatusControlVoltage,100,,,1,0,v5p0_Supply,Present voltage of the control board 5V power suppy.,16, , ,m,s,0.01 V,-327.68..327.67 +1CFFC5F7xh,StatusControlVoltage,100,,,3,0,v3p3_Supply,Present voltage of the control board 3.3V power supply.,16, , ,m,s,0.01 V,-327.68..327.67 +1CFFC5F7xh,StatusControlVoltage,100,,,5,0,v24_Supply,Present voltage of the control board 24V power supply.,16, , ,m,s,0.01 V,-327.68..327.67 +1CFFC5F7xh,StatusControlVoltage,100,,,7,0,v15_Supply,Present voltage of the control board 15V power supply.,16, , ,m,s,0.01 V,-327.68..327.67 +1CFFC6F7xh,StatusControlVolts2,100,,,1,0,n15V_Supply,Present voltage of the control board -15V power supply.,16, , ,m,s,0.01 V,-327.68..327.67 +1CFFC6F7xh,StatusControlVolts2,100,,,5,0,DiodeTemperature,Hottest diode,16, , ,m,u,C,0.0..1.0 +1CFFC6F7xh,StatusControlVolts2,100,,,7,0,IGBTTemperature,Hottest IGBT,16, , ,m,u,C,0.0..1.0 +1CFFC7F7xh,StatusDCParameters,100,,,1,0,VoltageDCInput_measured,Estimated DC input voltage.,16, , ,m,s,V,-32768.0..32767.0 +1CFFC7F7xh,StatusDCParameters,100,,,3,0,VoltageDCBus,Measured DC bus voltage.,16, , ,m,s,V,-32768.0..32767.0 +1CFFC7F7xh,StatusDCParameters,100,,,5,0,CurrentDC_measured,Measured DC current.,16, , ,m,s,A,-32768.0..32767.0 +1CFFCCF7xh,serialNumber,None,,,1,0,SerialNumber,Serial number of the power module.,32, , ,m,u,,0.0..4294967295.0 +1CFFCDF7xh,softwareRevHash,None,,,1,0,Hash,Unique revision identification hashcode.,28, , ,m,u,,0.0..268435455.0 diff --git a/test/reference/from_sym/test.dbc b/tests/reference/from_sym/test.dbc similarity index 100% rename from test/reference/from_sym/test.dbc rename to tests/reference/from_sym/test.dbc diff --git a/test/reference/from_sym/test.dbf b/tests/reference/from_sym/test.dbf similarity index 100% rename from test/reference/from_sym/test.dbf rename to tests/reference/from_sym/test.dbf diff --git a/test/reference/from_sym/test.json b/tests/reference/from_sym/test.json similarity index 100% rename from test/reference/from_sym/test.json rename to tests/reference/from_sym/test.json diff --git a/test/reference/from_sym/test.kcd b/tests/reference/from_sym/test.kcd similarity index 100% rename from test/reference/from_sym/test.kcd rename to tests/reference/from_sym/test.kcd diff --git a/test/test.xls b/tests/reference/from_sym/test.xls similarity index 100% rename from test/test.xls rename to tests/reference/from_sym/test.xls diff --git a/test/reference/from_sym/test.xlsx b/tests/reference/from_sym/test.xlsx similarity index 100% rename from test/reference/from_sym/test.xlsx rename to tests/reference/from_sym/test.xlsx diff --git a/test/reference/from_sym/test.xml b/tests/reference/from_sym/test.xml similarity index 100% rename from test/reference/from_sym/test.xml rename to tests/reference/from_sym/test.xml diff --git a/test/reference/from_sym/test.yaml b/tests/reference/from_sym/test.yaml similarity index 100% rename from test/reference/from_sym/test.yaml rename to tests/reference/from_sym/test.yaml diff --git a/test/reference/from_xls/test.arxml b/tests/reference/from_xls/test.arxml similarity index 100% rename from test/reference/from_xls/test.arxml rename to tests/reference/from_xls/test.arxml diff --git a/test/reference/from_xls/test.csv b/tests/reference/from_xls/test.csv similarity index 98% rename from test/reference/from_xls/test.csv rename to tests/reference/from_xls/test.csv index b9233ae8..1796b809 100644 --- a/test/reference/from_xls/test.csv +++ b/tests/reference/from_xls/test.csv @@ -1,390 +1,390 @@ -ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value -FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,0,Disable -FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,1,Enable -FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,0,Normal -FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,1,Clear Faults -FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,0,Master -FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,1,Follower -FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,0,Normal -FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,1,Force On -FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,0,Normal -FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,1,Force On -FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,0,Normal -FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,1,Force On -FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,0,Normal -FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,1,Force On -FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,0,No invert -FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,1,Invert -FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,0,Disable -FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,1,Enable -FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,0,Normal - Three Phase Mode -FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,1,Enable Split Phase Mode -FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,0,Negative -FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,1,Positive -FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,0,Disable -FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,1,Enable -FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,0,Normal -FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,1,Clear Faults -FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,0,Master -FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,1,Follower -FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,0,Normal -FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,1,Force On -FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,0,Normal -FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,1,Force On -FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,0,Normal -FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,1,Force On -FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,0,Normal -FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,1,Force On -FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,0,No invert -FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,1,Invert -FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,0,Disable -FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,1,Enable -FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,0,Normal - Three Phase Mode -FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,1,Enable Split Phase Mode -FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,0,Negative -FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,1,Positive -FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,3,N/A -CFF9C41h,CommandPowerAPU2,0,,None,1,7,RealPower_command,,32, ,None,m,u,W,-90000.0..90000.0 -CFF9C41h,CommandPowerAPU2,0,,None,5,7,ReactivePower_command,,32, ,None,m,u,VA,-90000.0..90000.0 -CFF9E41h,CommandVFAPU2,0,,None,1,7,Voltage_command,,16, ,None,m,u,0.1 Vrms,10.0..500.0 -CFF9E41h,CommandVFAPU2,0,,None,3,7,Frequency_command,,16, ,None,m,u,0.1 Hz,45.0..65.0 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,0,Param0 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,1,LVM_ClearingTimes1 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,2,LVM_ClearingTimes2 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,3,LFM_Limits -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,4,LFM_ClearingTimes -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,5,J1939_Interface -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,6,Fault_Config -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,7,ContactorDelays1 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,8,ContactorDelays2 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,9,ContactorDelays3 -CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,0,Warning -CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,1,Fault -CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,2,Error -CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,3,N/A -CFFAA41h,CommandSetNVParam,0,,None,3,7,Dummy,Mode 0:,16, ,None,m,u,,0.0..65535.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,FreqHi,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,FreqVeryLo,Mode 4:,16, ,None,m,u,ms,160.0..160.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,K2Open,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,MX1Open,Mode 7:,16, ,None,m,u,ms,0.0..5000.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,MX2Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,NodeID,Mode 5:,8, ,None,m,u,,0.0..247.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,VOver120,Mode 2:,16, ,None,m,u,,1.0..30000.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,VUnder50pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -CFFAA41h,CommandSetNVParam,0,,None,4,7,SA_Mask,Mode 5:,8, ,None,m,u,,0.0..255.0 -CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,0,125K -CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,1,250K -CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,2,500K -CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,3,1M -CFFAA41h,CommandSetNVParam,0,,None,5,7,FreqLo,Mode 4:,16, ,None,m,u,ms,1.0..30000.0 -CFFAA41h,CommandSetNVParam,0,,None,5,7,K1Open,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,5,7,K2Close,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,5,7,MX1Close,Mode 7:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,5,7,V50to88pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -CFFAA41h,CommandSetNVParam,0,,None,7,7,FreqHi,Mode 4:,16, ,None,m,u,ms,160.0..160.0 -CFFAA41h,CommandSetNVParam,0,,None,7,7,FreqVeryLo,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 -CFFAA41h,CommandSetNVParam,0,,None,7,7,K1Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,7,7,MX2Open,Mode 7:,16, ,None,m,u,ms,0.0..65535.0 -CFFAA41h,CommandSetNVParam,0,,None,7,7,V110to120pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -CFFAC41h,CommandPower,0,,None,1,7,RealPower_command,,32, ,None,m,u,W,-90000.0..90000.0 -CFFAC41h,CommandPower,0,,None,5,7,ReactivePower_command,,32, ,None,m,u,VA,-90000.0..90000.0 -CFFAE41h,CommandVF,0,,None,1,7,Voltage_command,,16, ,None,m,u,0.1 Vrms,10.0..500.0 -CFFAE41h,CommandVF,0,,None,3,7,Frequency_command,,16, ,None,m,u,0.1 Hz,45.0..65.0 -CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,0,Disable -CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,1,Enable -CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,2,Error -CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,3,N/A -CFFAF41h,CommandFactoryControl,0,,None,3,7,FactoryAccess,,16, ,None,m,u,,0.0..65535.0 -CFFAF41h,CommandFactoryControl,0,,None,5,7,SerialNumber,,32, ,None,m,u,,0.0..4294967295.0 -CFFC2F7h,StatusACParameters,100,,None,1,7,VoltageAC_measured,,16, ,None,m,u,0.1 V,0.0..65535.0 -CFFC2F7h,StatusACParameters,100,,None,3,7,CurrentAC_measured,,16, ,None,m,u,A,0.0..65535.0 -CFFC2F7h,StatusACParameters,100,,None,5,7,Frequency_measured,,16, ,None,m,u,0.1 Hz,0.0..65535.0 -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,0,Power On Reset -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,1,Ready -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,2,Following -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,3,Fault -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,4,Forming -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,5,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,6,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,7,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,8,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,9,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,10,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,11,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,12,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,13,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,14,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,15,N/A -CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,0,Disable -CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,1,Enable -CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,0,Normal -CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,1,Clear Faults -CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,0,Not Active -CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,1,Active -CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,0,None -CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,1,Available -CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,0,None -CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,1,Available -CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,0,Disabled -CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,1,Enabled -CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,0,Open -CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,1,Closed -CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,0,Open -CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,1,Closed -CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,0,Open -CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,1,Closed -CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,0,Open -CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,1,Closed -CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,0,Invalid -CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,1,Valid -CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,0,Invalid -CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,1,Valid -CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,0,Invalid -CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,1,Valid -CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,0,Normal -CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,1,Warning -CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,3,ErrorPassive -CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,4,N/A -CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,0,Disable -CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,1,Enable -CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,0,Normal - Three Phase Mode -CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,1,Enable Split Phase Mode -CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,0,Negative -CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,1,Positive -CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,0,No_Voltage -CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,1,Voltage_Detected -CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,0,Negative -CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,1,Positive -CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,1,FLT_A -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,2,N/A -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,3,FLT_C -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,4,OverVoltage -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,5,FLT_B -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,6,Overcurrent -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,7,5V -CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,1,FLT_A -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,2,N/A -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,3,FLT_C -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,4,OverVoltage -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,5,FLT_B -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,6,Overcurrent -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,7,5V -CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,3,N/A -CFFCAF6h,MasterMeasuredPower,0,,None,1,7,RealPower_measured,,32, ,None,m,u,W,0.0..4294967295.0 -CFFCAF6h,MasterMeasuredPower,0,,None,5,7,ReactivePower_measured,,32, ,None,m,u,VA,0.0..4294967295.0 -CFFCAF7h,StatusMeasuredPower,100,,None,1,7,RealPower_measured,,32, ,None,m,u,W,0.0..4294967295.0 -CFFCAF7h,StatusMeasuredPower,100,,None,5,7,ReactivePower_measured,,32, ,None,m,u,VA,0.0..4294967295.0 -18FFC4F7h,StatusCommandedPower,100,,None,1,7,RealPower_echo,,32, ,None,m,u,W,0.0..4294967295.0 -18FFC4F7h,StatusCommandedPower,100,,None,5,7,ReactivePower_echo,,32, ,None,m,u,VA,0.0..4294967295.0 -18FFC9F7h,StatusCommandVF,100,,None,1,7,Voltage_echo,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 -18FFC9F7h,StatusCommandVF,100,,None,3,7,Frequency_echo,,16, ,None,m,u,0.1 Hz,0.0..65535.0 -18FFCBF7h,StatusTemps,100,,None,1,7,TempInlet_measured,,16, ,None,m,u,0.1 C,0.0..65535.0 -18FFCBF7h,StatusTemps,100,,None,3,7,TempInternal_measured,,16, ,None,m,u,0.1 C,0.0..65535.0 -18FFCBF7h,StatusTemps,100,,None,5,7,ConverterLosses,,16, ,None,m,u,W,0.0..65535.0 -18FFD0F7h,StatusLineCurrents,100,,None,1,7,L1Current_measured,,16, ,None,m,u,A,0.0..65535.0 -18FFD0F7h,StatusLineCurrents,100,,None,3,7,L2Current_measured,,16, ,None,m,u,A,0.0..65535.0 -18FFD0F7h,StatusLineCurrents,100,,None,5,7,L3Current_measured,,16, ,None,m,u,A,0.0..65535.0 -18FFD1F7h,StatusLineVoltages,100,,None,1,7,L1Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 -18FFD1F7h,StatusLineVoltages,100,,None,3,7,L2Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 -18FFD1F7h,StatusLineVoltages,100,,None,5,7,L3Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,0,ActParam0 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,1,ActLVM_ClearingTimes1 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,2,ActLVM_ClearingTimes2 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,3,ActLFM_Limits -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,4,ActLFM_ClearingTimes -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,5,StatusJ1939_Interface -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,6,StatusFault_Config -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,7,StatusContactorDelays1 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,8,StatusContactorDelays2 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,9,StatusContactorDelays3 -1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,0,Warning -1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,1,Fault -1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,2,Error -1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,3,N/A -1CFFA9F7h,StatusNVParam,0,,None,3,7,Dummy,Mode 0:,16, ,None,m,u,,5.0..10.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,FreqHi,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,FreqVeryLo,Mode 4:,16, ,None,m,u,ms,160.0..160.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusK2Open,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusMX1Open,Mode 7:,16, ,None,m,u,ms,0.0..5000.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusMX2Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusNodeID,Mode 5:,8, ,None,m,u,,0.0..247.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,VOver120,Mode 2:,16, ,None,m,u,,1.0..30000.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,VUnder50pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -1CFFA9F7h,StatusNVParam,0,,None,4,7,StatusSA_Mask,Mode 5:,8, ,None,m,u,,0.0..255.0 -1CFFA9F7h,StatusNVParam,0,,None,5,7,FreqLo,Mode 4:,16, ,None,m,u,ms,1.0..30000.0 -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,0,125K -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,1,250K -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,2,500K -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,3,1M -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusK1Open,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusK2Close,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusMX1Close,Mode 7:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,5,7,V50to88pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -1CFFA9F7h,StatusNVParam,0,,None,7,7,FreqHi,Mode 4:,16, ,None,m,u,ms,160.0..160.0 -1CFFA9F7h,StatusNVParam,0,,None,7,7,FreqVeryLo,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 -1CFFA9F7h,StatusNVParam,0,,None,7,7,StatusK1Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,7,7,StatusMX2Open,Mode 7:,16, ,None,m,u,ms,0.0..65535.0 -1CFFA9F7h,StatusNVParam,0,,None,7,7,V110to120pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -1CFFC1F7h,softwareRev,0,,None,1,7,ControlSwRev,,16, ,None,m,u,,0.0..65535.0 -1CFFC1F7h,softwareRev,0,,None,3,7,InterfaceRev,,16, ,None,m,u,,0.0..65535.0 -1CFFC1F7h,softwareRev,0,,None,5,7,BuildTime,,32, ,None,m,u,,0.0..4294967295.0 -1CFFC5F7h,StatusControlVoltage,100,,None,1,7,v5p0_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 -1CFFC5F7h,StatusControlVoltage,100,,None,3,7,v3p3_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 -1CFFC5F7h,StatusControlVoltage,100,,None,5,7,v24_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 -1CFFC5F7h,StatusControlVoltage,100,,None,7,7,v15_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 -1CFFC6F7h,StatusControlVolts2,100,,None,1,7,n15V_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 -1CFFC6F7h,StatusControlVolts2,100,,None,5,7,DiodeTemperature,,16, ,None,m,u,C,0.0..65535.0 -1CFFC6F7h,StatusControlVolts2,100,,None,7,7,IGBTTemperature,,16, ,None,m,u,C,0.0..65535.0 -1CFFC7F7h,StatusDCParameters,100,,None,1,7,VoltageDCInput_measured,,16, ,None,m,u,V,0.0..65535.0 -1CFFC7F7h,StatusDCParameters,100,,None,3,7,VoltageDCBus,,16, ,None,m,u,V,0.0..65535.0 -1CFFC7F7h,StatusDCParameters,100,,None,5,7,CurrentDC_measured,,16, ,None,m,u,A,0.0..65535.0 -1CFFCCF7h,serialNumber,0,,None,1,7,SerialNumber,,32, ,None,m,u,,0.0..4294967295.0 -1CFFCDF7h,softwareRevHash,0,,None,1,7,Hash,,28, ,None,m,u,,0.0..268435455.0 +ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value +FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,0,Disable +FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,1,Enable +FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,0,Normal +FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,1,Clear Faults +FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,0,Master +FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,1,Follower +FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,0,Normal +FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,1,Force On +FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,0,Normal +FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,1,Force On +FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,0,Normal +FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,1,Force On +FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,0,Normal +FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,1,Force On +FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,0,No invert +FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,1,Invert +FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,0,Disable +FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,1,Enable +FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,0,Normal - Three Phase Mode +FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,1,Enable Split Phase Mode +FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,0,Negative +FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,1,Positive +FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,0,Disable +FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,1,Enable +FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,0,Normal +FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,1,Clear Faults +FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,0,Master +FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,1,Follower +FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,0,Normal +FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,1,Force On +FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,0,Normal +FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,1,Force On +FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,0,Normal +FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,1,Force On +FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,0,Normal +FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,1,Force On +FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,0,No invert +FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,1,Invert +FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,0,Disable +FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,1,Enable +FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,0,Normal - Three Phase Mode +FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,1,Enable Split Phase Mode +FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,0,Negative +FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,1,Positive +FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,3,N/A +CFF9C41h,CommandPowerAPU2,0,,None,1,7,RealPower_command,,32, ,None,m,u,W,-90000.0..90000.0 +CFF9C41h,CommandPowerAPU2,0,,None,5,7,ReactivePower_command,,32, ,None,m,u,VA,-90000.0..90000.0 +CFF9E41h,CommandVFAPU2,0,,None,1,7,Voltage_command,,16, ,None,m,u,0.1 Vrms,10.0..500.0 +CFF9E41h,CommandVFAPU2,0,,None,3,7,Frequency_command,,16, ,None,m,u,0.1 Hz,45.0..65.0 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,0,Param0 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,1,LVM_ClearingTimes1 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,2,LVM_ClearingTimes2 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,3,LFM_Limits +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,4,LFM_ClearingTimes +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,5,J1939_Interface +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,6,Fault_Config +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,7,ContactorDelays1 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,8,ContactorDelays2 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,9,ContactorDelays3 +CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,0,Warning +CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,1,Fault +CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,2,Error +CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,3,N/A +CFFAA41h,CommandSetNVParam,0,,None,3,7,Dummy,Mode 0:,16, ,None,m,u,,0.0..65535.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,FreqHi,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,FreqVeryLo,Mode 4:,16, ,None,m,u,ms,160.0..160.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,K2Open,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,MX1Open,Mode 7:,16, ,None,m,u,ms,0.0..5000.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,MX2Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,NodeID,Mode 5:,8, ,None,m,u,,0.0..247.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,VOver120,Mode 2:,16, ,None,m,u,,1.0..30000.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,VUnder50pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +CFFAA41h,CommandSetNVParam,0,,None,4,7,SA_Mask,Mode 5:,8, ,None,m,u,,0.0..255.0 +CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,0,125K +CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,1,250K +CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,2,500K +CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,3,1M +CFFAA41h,CommandSetNVParam,0,,None,5,7,FreqLo,Mode 4:,16, ,None,m,u,ms,1.0..30000.0 +CFFAA41h,CommandSetNVParam,0,,None,5,7,K1Open,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,5,7,K2Close,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,5,7,MX1Close,Mode 7:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,5,7,V50to88pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +CFFAA41h,CommandSetNVParam,0,,None,7,7,FreqHi,Mode 4:,16, ,None,m,u,ms,160.0..160.0 +CFFAA41h,CommandSetNVParam,0,,None,7,7,FreqVeryLo,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 +CFFAA41h,CommandSetNVParam,0,,None,7,7,K1Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,7,7,MX2Open,Mode 7:,16, ,None,m,u,ms,0.0..65535.0 +CFFAA41h,CommandSetNVParam,0,,None,7,7,V110to120pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +CFFAC41h,CommandPower,0,,None,1,7,RealPower_command,,32, ,None,m,u,W,-90000.0..90000.0 +CFFAC41h,CommandPower,0,,None,5,7,ReactivePower_command,,32, ,None,m,u,VA,-90000.0..90000.0 +CFFAE41h,CommandVF,0,,None,1,7,Voltage_command,,16, ,None,m,u,0.1 Vrms,10.0..500.0 +CFFAE41h,CommandVF,0,,None,3,7,Frequency_command,,16, ,None,m,u,0.1 Hz,45.0..65.0 +CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,0,Disable +CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,1,Enable +CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,2,Error +CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,3,N/A +CFFAF41h,CommandFactoryControl,0,,None,3,7,FactoryAccess,,16, ,None,m,u,,0.0..65535.0 +CFFAF41h,CommandFactoryControl,0,,None,5,7,SerialNumber,,32, ,None,m,u,,0.0..4294967295.0 +CFFC2F7h,StatusACParameters,100,,None,1,7,VoltageAC_measured,,16, ,None,m,u,0.1 V,0.0..65535.0 +CFFC2F7h,StatusACParameters,100,,None,3,7,CurrentAC_measured,,16, ,None,m,u,A,0.0..65535.0 +CFFC2F7h,StatusACParameters,100,,None,5,7,Frequency_measured,,16, ,None,m,u,0.1 Hz,0.0..65535.0 +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,0,Power On Reset +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,1,Ready +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,2,Following +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,3,Fault +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,4,Forming +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,5,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,6,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,7,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,8,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,9,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,10,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,11,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,12,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,13,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,14,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,15,N/A +CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,0,Disable +CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,1,Enable +CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,0,Normal +CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,1,Clear Faults +CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,0,Not Active +CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,1,Active +CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,0,None +CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,1,Available +CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,0,None +CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,1,Available +CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,0,Disabled +CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,1,Enabled +CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,0,Open +CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,1,Closed +CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,0,Open +CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,1,Closed +CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,0,Open +CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,1,Closed +CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,0,Open +CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,1,Closed +CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,0,Invalid +CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,1,Valid +CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,0,Invalid +CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,1,Valid +CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,0,Invalid +CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,1,Valid +CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,0,Normal +CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,1,Warning +CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,3,ErrorPassive +CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,4,N/A +CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,0,Disable +CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,1,Enable +CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,0,Normal - Three Phase Mode +CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,1,Enable Split Phase Mode +CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,0,Negative +CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,1,Positive +CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,0,No_Voltage +CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,1,Voltage_Detected +CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,0,Negative +CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,1,Positive +CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,1,FLT_A +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,2,N/A +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,3,FLT_C +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,4,OverVoltage +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,5,FLT_B +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,6,Overcurrent +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,7,5V +CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,1,FLT_A +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,2,N/A +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,3,FLT_C +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,4,OverVoltage +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,5,FLT_B +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,6,Overcurrent +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,7,5V +CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,3,N/A +CFFCAF6h,MasterMeasuredPower,0,,None,1,7,RealPower_measured,,32, ,None,m,u,W,0.0..4294967295.0 +CFFCAF6h,MasterMeasuredPower,0,,None,5,7,ReactivePower_measured,,32, ,None,m,u,VA,0.0..4294967295.0 +CFFCAF7h,StatusMeasuredPower,100,,None,1,7,RealPower_measured,,32, ,None,m,u,W,0.0..4294967295.0 +CFFCAF7h,StatusMeasuredPower,100,,None,5,7,ReactivePower_measured,,32, ,None,m,u,VA,0.0..4294967295.0 +18FFC4F7h,StatusCommandedPower,100,,None,1,7,RealPower_echo,,32, ,None,m,u,W,0.0..4294967295.0 +18FFC4F7h,StatusCommandedPower,100,,None,5,7,ReactivePower_echo,,32, ,None,m,u,VA,0.0..4294967295.0 +18FFC9F7h,StatusCommandVF,100,,None,1,7,Voltage_echo,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 +18FFC9F7h,StatusCommandVF,100,,None,3,7,Frequency_echo,,16, ,None,m,u,0.1 Hz,0.0..65535.0 +18FFCBF7h,StatusTemps,100,,None,1,7,TempInlet_measured,,16, ,None,m,u,0.1 C,0.0..65535.0 +18FFCBF7h,StatusTemps,100,,None,3,7,TempInternal_measured,,16, ,None,m,u,0.1 C,0.0..65535.0 +18FFCBF7h,StatusTemps,100,,None,5,7,ConverterLosses,,16, ,None,m,u,W,0.0..65535.0 +18FFD0F7h,StatusLineCurrents,100,,None,1,7,L1Current_measured,,16, ,None,m,u,A,0.0..65535.0 +18FFD0F7h,StatusLineCurrents,100,,None,3,7,L2Current_measured,,16, ,None,m,u,A,0.0..65535.0 +18FFD0F7h,StatusLineCurrents,100,,None,5,7,L3Current_measured,,16, ,None,m,u,A,0.0..65535.0 +18FFD1F7h,StatusLineVoltages,100,,None,1,7,L1Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 +18FFD1F7h,StatusLineVoltages,100,,None,3,7,L2Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 +18FFD1F7h,StatusLineVoltages,100,,None,5,7,L3Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,0,ActParam0 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,1,ActLVM_ClearingTimes1 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,2,ActLVM_ClearingTimes2 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,3,ActLFM_Limits +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,4,ActLFM_ClearingTimes +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,5,StatusJ1939_Interface +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,6,StatusFault_Config +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,7,StatusContactorDelays1 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,8,StatusContactorDelays2 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,9,StatusContactorDelays3 +1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,0,Warning +1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,1,Fault +1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,2,Error +1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,3,N/A +1CFFA9F7h,StatusNVParam,0,,None,3,7,Dummy,Mode 0:,16, ,None,m,u,,5.0..10.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,FreqHi,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,FreqVeryLo,Mode 4:,16, ,None,m,u,ms,160.0..160.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusK2Open,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusMX1Open,Mode 7:,16, ,None,m,u,ms,0.0..5000.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusMX2Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusNodeID,Mode 5:,8, ,None,m,u,,0.0..247.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,VOver120,Mode 2:,16, ,None,m,u,,1.0..30000.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,VUnder50pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +1CFFA9F7h,StatusNVParam,0,,None,4,7,StatusSA_Mask,Mode 5:,8, ,None,m,u,,0.0..255.0 +1CFFA9F7h,StatusNVParam,0,,None,5,7,FreqLo,Mode 4:,16, ,None,m,u,ms,1.0..30000.0 +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,0,125K +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,1,250K +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,2,500K +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,3,1M +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusK1Open,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusK2Close,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusMX1Close,Mode 7:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,5,7,V50to88pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +1CFFA9F7h,StatusNVParam,0,,None,7,7,FreqHi,Mode 4:,16, ,None,m,u,ms,160.0..160.0 +1CFFA9F7h,StatusNVParam,0,,None,7,7,FreqVeryLo,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 +1CFFA9F7h,StatusNVParam,0,,None,7,7,StatusK1Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,7,7,StatusMX2Open,Mode 7:,16, ,None,m,u,ms,0.0..65535.0 +1CFFA9F7h,StatusNVParam,0,,None,7,7,V110to120pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +1CFFC1F7h,softwareRev,0,,None,1,7,ControlSwRev,,16, ,None,m,u,,0.0..65535.0 +1CFFC1F7h,softwareRev,0,,None,3,7,InterfaceRev,,16, ,None,m,u,,0.0..65535.0 +1CFFC1F7h,softwareRev,0,,None,5,7,BuildTime,,32, ,None,m,u,,0.0..4294967295.0 +1CFFC5F7h,StatusControlVoltage,100,,None,1,7,v5p0_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 +1CFFC5F7h,StatusControlVoltage,100,,None,3,7,v3p3_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 +1CFFC5F7h,StatusControlVoltage,100,,None,5,7,v24_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 +1CFFC5F7h,StatusControlVoltage,100,,None,7,7,v15_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 +1CFFC6F7h,StatusControlVolts2,100,,None,1,7,n15V_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 +1CFFC6F7h,StatusControlVolts2,100,,None,5,7,DiodeTemperature,,16, ,None,m,u,C,0.0..65535.0 +1CFFC6F7h,StatusControlVolts2,100,,None,7,7,IGBTTemperature,,16, ,None,m,u,C,0.0..65535.0 +1CFFC7F7h,StatusDCParameters,100,,None,1,7,VoltageDCInput_measured,,16, ,None,m,u,V,0.0..65535.0 +1CFFC7F7h,StatusDCParameters,100,,None,3,7,VoltageDCBus,,16, ,None,m,u,V,0.0..65535.0 +1CFFC7F7h,StatusDCParameters,100,,None,5,7,CurrentDC_measured,,16, ,None,m,u,A,0.0..65535.0 +1CFFCCF7h,serialNumber,0,,None,1,7,SerialNumber,,32, ,None,m,u,,0.0..4294967295.0 +1CFFCDF7h,softwareRevHash,0,,None,1,7,Hash,,28, ,None,m,u,,0.0..268435455.0 diff --git a/test/reference/from_xls/test.dbc b/tests/reference/from_xls/test.dbc similarity index 100% rename from test/reference/from_xls/test.dbc rename to tests/reference/from_xls/test.dbc diff --git a/test/reference/from_xls/test.dbf b/tests/reference/from_xls/test.dbf similarity index 100% rename from test/reference/from_xls/test.dbf rename to tests/reference/from_xls/test.dbf diff --git a/test/reference/from_xls/test.json b/tests/reference/from_xls/test.json similarity index 100% rename from test/reference/from_xls/test.json rename to tests/reference/from_xls/test.json diff --git a/test/reference/from_xls/test.kcd b/tests/reference/from_xls/test.kcd similarity index 100% rename from test/reference/from_xls/test.kcd rename to tests/reference/from_xls/test.kcd diff --git a/test/reference/from_xls/test.sym b/tests/reference/from_xls/test.sym similarity index 100% rename from test/reference/from_xls/test.sym rename to tests/reference/from_xls/test.sym diff --git a/test/reference/from_xls/test.xlsx b/tests/reference/from_xls/test.xlsx similarity index 100% rename from test/reference/from_xls/test.xlsx rename to tests/reference/from_xls/test.xlsx diff --git a/test/reference/from_xls/test.xml b/tests/reference/from_xls/test.xml similarity index 100% rename from test/reference/from_xls/test.xml rename to tests/reference/from_xls/test.xml diff --git a/test/reference/from_xls/test.yaml b/tests/reference/from_xls/test.yaml similarity index 100% rename from test/reference/from_xls/test.yaml rename to tests/reference/from_xls/test.yaml diff --git a/test/reference/from_xlsx/test.arxml b/tests/reference/from_xlsx/test.arxml similarity index 100% rename from test/reference/from_xlsx/test.arxml rename to tests/reference/from_xlsx/test.arxml diff --git a/test/reference/from_xlsx/test.csv b/tests/reference/from_xlsx/test.csv similarity index 98% rename from test/reference/from_xlsx/test.csv rename to tests/reference/from_xlsx/test.csv index b9233ae8..1796b809 100644 --- a/test/reference/from_xlsx/test.csv +++ b/tests/reference/from_xlsx/test.csv @@ -1,390 +1,390 @@ -ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value -FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,0,Disable -FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,1,Enable -FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,0,Normal -FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,1,Clear Faults -FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,0,Master -FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,1,Follower -FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,0,Normal -FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,1,Force On -FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,0,Normal -FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,1,Force On -FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,0,Normal -FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,1,Force On -FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,0,Normal -FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,1,Force On -FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,0,No invert -FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,1,Invert -FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,0,Disable -FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,1,Enable -FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,0,Normal - Three Phase Mode -FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,1,Enable Split Phase Mode -FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,3,N/A -FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,0,Negative -FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,1,Positive -FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,2,Error -FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,0,Disable -FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,1,Enable -FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,0,Normal -FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,1,Clear Faults -FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,0,Master -FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,1,Follower -FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,0,Normal -FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,1,Force On -FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,0,Normal -FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,1,Force On -FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,0,Normal -FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,1,Force On -FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,0,Normal -FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,1,Force On -FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,0,No invert -FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,1,Invert -FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,0,Disable -FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,1,Enable -FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,0,Normal - Three Phase Mode -FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,1,Enable Split Phase Mode -FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,3,N/A -FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,0,Negative -FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,1,Positive -FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,2,Error -FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,3,N/A -CFF9C41h,CommandPowerAPU2,0,,None,1,7,RealPower_command,,32, ,None,m,u,W,-90000.0..90000.0 -CFF9C41h,CommandPowerAPU2,0,,None,5,7,ReactivePower_command,,32, ,None,m,u,VA,-90000.0..90000.0 -CFF9E41h,CommandVFAPU2,0,,None,1,7,Voltage_command,,16, ,None,m,u,0.1 Vrms,10.0..500.0 -CFF9E41h,CommandVFAPU2,0,,None,3,7,Frequency_command,,16, ,None,m,u,0.1 Hz,45.0..65.0 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,0,Param0 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,1,LVM_ClearingTimes1 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,2,LVM_ClearingTimes2 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,3,LFM_Limits -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,4,LFM_ClearingTimes -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,5,J1939_Interface -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,6,Fault_Config -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,7,ContactorDelays1 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,8,ContactorDelays2 -CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,9,ContactorDelays3 -CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,0,Warning -CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,1,Fault -CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,2,Error -CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,3,N/A -CFFAA41h,CommandSetNVParam,0,,None,3,7,Dummy,Mode 0:,16, ,None,m,u,,0.0..65535.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,FreqHi,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,FreqVeryLo,Mode 4:,16, ,None,m,u,ms,160.0..160.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,K2Open,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,MX1Open,Mode 7:,16, ,None,m,u,ms,0.0..5000.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,MX2Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,NodeID,Mode 5:,8, ,None,m,u,,0.0..247.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,VOver120,Mode 2:,16, ,None,m,u,,1.0..30000.0 -CFFAA41h,CommandSetNVParam,0,,None,3,7,VUnder50pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -CFFAA41h,CommandSetNVParam,0,,None,4,7,SA_Mask,Mode 5:,8, ,None,m,u,,0.0..255.0 -CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,0,125K -CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,1,250K -CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,2,500K -CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,3,1M -CFFAA41h,CommandSetNVParam,0,,None,5,7,FreqLo,Mode 4:,16, ,None,m,u,ms,1.0..30000.0 -CFFAA41h,CommandSetNVParam,0,,None,5,7,K1Open,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,5,7,K2Close,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,5,7,MX1Close,Mode 7:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,5,7,V50to88pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -CFFAA41h,CommandSetNVParam,0,,None,7,7,FreqHi,Mode 4:,16, ,None,m,u,ms,160.0..160.0 -CFFAA41h,CommandSetNVParam,0,,None,7,7,FreqVeryLo,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 -CFFAA41h,CommandSetNVParam,0,,None,7,7,K1Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -CFFAA41h,CommandSetNVParam,0,,None,7,7,MX2Open,Mode 7:,16, ,None,m,u,ms,0.0..65535.0 -CFFAA41h,CommandSetNVParam,0,,None,7,7,V110to120pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -CFFAC41h,CommandPower,0,,None,1,7,RealPower_command,,32, ,None,m,u,W,-90000.0..90000.0 -CFFAC41h,CommandPower,0,,None,5,7,ReactivePower_command,,32, ,None,m,u,VA,-90000.0..90000.0 -CFFAE41h,CommandVF,0,,None,1,7,Voltage_command,,16, ,None,m,u,0.1 Vrms,10.0..500.0 -CFFAE41h,CommandVF,0,,None,3,7,Frequency_command,,16, ,None,m,u,0.1 Hz,45.0..65.0 -CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,0,Disable -CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,1,Enable -CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,2,Error -CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,3,N/A -CFFAF41h,CommandFactoryControl,0,,None,3,7,FactoryAccess,,16, ,None,m,u,,0.0..65535.0 -CFFAF41h,CommandFactoryControl,0,,None,5,7,SerialNumber,,32, ,None,m,u,,0.0..4294967295.0 -CFFC2F7h,StatusACParameters,100,,None,1,7,VoltageAC_measured,,16, ,None,m,u,0.1 V,0.0..65535.0 -CFFC2F7h,StatusACParameters,100,,None,3,7,CurrentAC_measured,,16, ,None,m,u,A,0.0..65535.0 -CFFC2F7h,StatusACParameters,100,,None,5,7,Frequency_measured,,16, ,None,m,u,0.1 Hz,0.0..65535.0 -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,0,Power On Reset -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,1,Ready -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,2,Following -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,3,Fault -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,4,Forming -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,5,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,6,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,7,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,8,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,9,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,10,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,11,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,12,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,13,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,14,N/A -CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,15,N/A -CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,0,Disable -CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,1,Enable -CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,0,Normal -CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,1,Clear Faults -CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,0,Not Active -CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,1,Active -CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,0,None -CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,1,Available -CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,0,None -CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,1,Available -CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,0,Disabled -CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,1,Enabled -CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,0,Open -CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,1,Closed -CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,0,Open -CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,1,Closed -CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,0,Open -CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,1,Closed -CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,0,Open -CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,1,Closed -CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,0,Invalid -CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,1,Valid -CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,0,Invalid -CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,1,Valid -CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,0,Invalid -CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,1,Valid -CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,0,Normal -CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,1,Warning -CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,3,ErrorPassive -CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,4,N/A -CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,0,Disable -CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,1,Enable -CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,0,Normal - Three Phase Mode -CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,1,Enable Split Phase Mode -CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,0,Negative -CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,1,Positive -CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,0,No_Voltage -CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,1,Voltage_Detected -CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,3,N/A -CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,0,Negative -CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,1,Positive -CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,2,Error -CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,1,FLT_A -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,2,N/A -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,3,FLT_C -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,4,OverVoltage -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,5,FLT_B -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,6,Overcurrent -CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,7,5V -CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,3,N/A -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,1,FLT_A -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,2,N/A -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,3,FLT_C -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,4,OverVoltage -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,5,FLT_B -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,6,Overcurrent -CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,7,5V -CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,0,Normal -CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,1,Fault Active -CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,2,Error -CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,3,N/A -CFFCAF6h,MasterMeasuredPower,0,,None,1,7,RealPower_measured,,32, ,None,m,u,W,0.0..4294967295.0 -CFFCAF6h,MasterMeasuredPower,0,,None,5,7,ReactivePower_measured,,32, ,None,m,u,VA,0.0..4294967295.0 -CFFCAF7h,StatusMeasuredPower,100,,None,1,7,RealPower_measured,,32, ,None,m,u,W,0.0..4294967295.0 -CFFCAF7h,StatusMeasuredPower,100,,None,5,7,ReactivePower_measured,,32, ,None,m,u,VA,0.0..4294967295.0 -18FFC4F7h,StatusCommandedPower,100,,None,1,7,RealPower_echo,,32, ,None,m,u,W,0.0..4294967295.0 -18FFC4F7h,StatusCommandedPower,100,,None,5,7,ReactivePower_echo,,32, ,None,m,u,VA,0.0..4294967295.0 -18FFC9F7h,StatusCommandVF,100,,None,1,7,Voltage_echo,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 -18FFC9F7h,StatusCommandVF,100,,None,3,7,Frequency_echo,,16, ,None,m,u,0.1 Hz,0.0..65535.0 -18FFCBF7h,StatusTemps,100,,None,1,7,TempInlet_measured,,16, ,None,m,u,0.1 C,0.0..65535.0 -18FFCBF7h,StatusTemps,100,,None,3,7,TempInternal_measured,,16, ,None,m,u,0.1 C,0.0..65535.0 -18FFCBF7h,StatusTemps,100,,None,5,7,ConverterLosses,,16, ,None,m,u,W,0.0..65535.0 -18FFD0F7h,StatusLineCurrents,100,,None,1,7,L1Current_measured,,16, ,None,m,u,A,0.0..65535.0 -18FFD0F7h,StatusLineCurrents,100,,None,3,7,L2Current_measured,,16, ,None,m,u,A,0.0..65535.0 -18FFD0F7h,StatusLineCurrents,100,,None,5,7,L3Current_measured,,16, ,None,m,u,A,0.0..65535.0 -18FFD1F7h,StatusLineVoltages,100,,None,1,7,L1Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 -18FFD1F7h,StatusLineVoltages,100,,None,3,7,L2Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 -18FFD1F7h,StatusLineVoltages,100,,None,5,7,L3Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,0,ActParam0 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,1,ActLVM_ClearingTimes1 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,2,ActLVM_ClearingTimes2 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,3,ActLFM_Limits -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,4,ActLFM_ClearingTimes -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,5,StatusJ1939_Interface -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,6,StatusFault_Config -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,7,StatusContactorDelays1 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,8,StatusContactorDelays2 -1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,9,StatusContactorDelays3 -1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,0,Warning -1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,1,Fault -1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,2,Error -1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,3,N/A -1CFFA9F7h,StatusNVParam,0,,None,3,7,Dummy,Mode 0:,16, ,None,m,u,,5.0..10.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,FreqHi,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,FreqVeryLo,Mode 4:,16, ,None,m,u,ms,160.0..160.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusK2Open,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusMX1Open,Mode 7:,16, ,None,m,u,ms,0.0..5000.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusMX2Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusNodeID,Mode 5:,8, ,None,m,u,,0.0..247.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,VOver120,Mode 2:,16, ,None,m,u,,1.0..30000.0 -1CFFA9F7h,StatusNVParam,0,,None,3,7,VUnder50pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -1CFFA9F7h,StatusNVParam,0,,None,4,7,StatusSA_Mask,Mode 5:,8, ,None,m,u,,0.0..255.0 -1CFFA9F7h,StatusNVParam,0,,None,5,7,FreqLo,Mode 4:,16, ,None,m,u,ms,1.0..30000.0 -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,0,125K -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,1,250K -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,2,500K -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,3,1M -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusK1Open,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusK2Close,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusMX1Close,Mode 7:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,5,7,V50to88pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -1CFFA9F7h,StatusNVParam,0,,None,7,7,FreqHi,Mode 4:,16, ,None,m,u,ms,160.0..160.0 -1CFFA9F7h,StatusNVParam,0,,None,7,7,FreqVeryLo,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 -1CFFA9F7h,StatusNVParam,0,,None,7,7,StatusK1Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 -1CFFA9F7h,StatusNVParam,0,,None,7,7,StatusMX2Open,Mode 7:,16, ,None,m,u,ms,0.0..65535.0 -1CFFA9F7h,StatusNVParam,0,,None,7,7,V110to120pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 -1CFFC1F7h,softwareRev,0,,None,1,7,ControlSwRev,,16, ,None,m,u,,0.0..65535.0 -1CFFC1F7h,softwareRev,0,,None,3,7,InterfaceRev,,16, ,None,m,u,,0.0..65535.0 -1CFFC1F7h,softwareRev,0,,None,5,7,BuildTime,,32, ,None,m,u,,0.0..4294967295.0 -1CFFC5F7h,StatusControlVoltage,100,,None,1,7,v5p0_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 -1CFFC5F7h,StatusControlVoltage,100,,None,3,7,v3p3_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 -1CFFC5F7h,StatusControlVoltage,100,,None,5,7,v24_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 -1CFFC5F7h,StatusControlVoltage,100,,None,7,7,v15_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 -1CFFC6F7h,StatusControlVolts2,100,,None,1,7,n15V_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 -1CFFC6F7h,StatusControlVolts2,100,,None,5,7,DiodeTemperature,,16, ,None,m,u,C,0.0..65535.0 -1CFFC6F7h,StatusControlVolts2,100,,None,7,7,IGBTTemperature,,16, ,None,m,u,C,0.0..65535.0 -1CFFC7F7h,StatusDCParameters,100,,None,1,7,VoltageDCInput_measured,,16, ,None,m,u,V,0.0..65535.0 -1CFFC7F7h,StatusDCParameters,100,,None,3,7,VoltageDCBus,,16, ,None,m,u,V,0.0..65535.0 -1CFFC7F7h,StatusDCParameters,100,,None,5,7,CurrentDC_measured,,16, ,None,m,u,A,0.0..65535.0 -1CFFCCF7h,serialNumber,0,,None,1,7,SerialNumber,,32, ,None,m,u,,0.0..4294967295.0 -1CFFCDF7h,softwareRevHash,0,,None,1,7,Hash,,28, ,None,m,u,,0.0..268435455.0 +ID,Frame Name,Cycle Time [ms],Launch Type,Launch Parameter,Signal Byte No.,Signal Bit No.,Signal Name,Signal Function,Signal Length [Bit],Signal Default, Signal Not Available,Byteorder,is signed,Name / Phys. Range,Function / Increment Unit,Value +FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,0,Disable +FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,1,Enable +FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,1,1,Enable_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,0,Normal +FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,1,Clear Faults +FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,0,Master +FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,1,Follower +FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,0,Normal +FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,1,Force On +FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,0,Normal +FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,1,Force On +FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,0,Normal +FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,1,Force On +FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,0,Normal +FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,1,Force On +FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,0,No invert +FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,1,Invert +FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,0,Disable +FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,1,Enable +FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,0,Normal - Three Phase Mode +FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,1,Enable Split Phase Mode +FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,3,N/A +FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,0,Negative +FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,1,Positive +FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,2,Error +FF9B41h,CommandModeControlAPU2,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,0,Disable +FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,1,Enable +FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,1,1,Enable_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,0,Normal +FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,1,Clear Faults +FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,1,3,FaultClear_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,0,Master +FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,1,Follower +FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,3,1,MasterFollowerMode_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,0,Normal +FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,1,Force On +FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,5,1,ForceRelayMX1_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,0,Normal +FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,1,Force On +FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,5,3,ForceRelayMX2_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,0,Normal +FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,1,Force On +FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,5,5,ForceRelayK1_Precharge_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,0,Normal +FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,1,Force On +FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,5,7,ForceRelayRelayK2_DCRun_comand,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,0,No invert +FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,1,Invert +FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,8,1,InvertHwEnable_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,0,Disable +FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,1,Enable +FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,8,3,EnableUPSMode_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,0,Normal - Three Phase Mode +FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,1,Enable Split Phase Mode +FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,8,5,EnableSplitPhase_command,,2, ,None,m,u,,3,N/A +FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,0,Negative +FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,1,Positive +FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,2,Error +FFAB41h,CommandModeControl,0,,None,8,7,PhaseRotation_command,,2, ,None,m,u,,3,N/A +CFF9C41h,CommandPowerAPU2,0,,None,1,7,RealPower_command,,32, ,None,m,u,W,-90000.0..90000.0 +CFF9C41h,CommandPowerAPU2,0,,None,5,7,ReactivePower_command,,32, ,None,m,u,VA,-90000.0..90000.0 +CFF9E41h,CommandVFAPU2,0,,None,1,7,Voltage_command,,16, ,None,m,u,0.1 Vrms,10.0..500.0 +CFF9E41h,CommandVFAPU2,0,,None,3,7,Frequency_command,,16, ,None,m,u,0.1 Hz,45.0..65.0 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,0,Param0 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,1,LVM_ClearingTimes1 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,2,LVM_ClearingTimes2 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,3,LFM_Limits +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,4,LFM_ClearingTimes +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,5,J1939_Interface +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,6,Fault_Config +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,7,ContactorDelays1 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,8,ContactorDelays2 +CFFAA41h,CommandSetNVParam,0,,None,1,7,CommandSetNVParam_MUX,Mode Signal: ,16, ,None,m,u,,9,ContactorDelays3 +CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,0,Warning +CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,1,Fault +CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,2,Error +CFFAA41h,CommandSetNVParam,0,,None,3,1,ThermalOverload,Mode 6:,2, ,None,m,u,,3,N/A +CFFAA41h,CommandSetNVParam,0,,None,3,7,Dummy,Mode 0:,16, ,None,m,u,,0.0..65535.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,FreqHi,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,FreqVeryLo,Mode 4:,16, ,None,m,u,ms,160.0..160.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,K2Open,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,MX1Open,Mode 7:,16, ,None,m,u,ms,0.0..5000.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,MX2Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,NodeID,Mode 5:,8, ,None,m,u,,0.0..247.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,VOver120,Mode 2:,16, ,None,m,u,,1.0..30000.0 +CFFAA41h,CommandSetNVParam,0,,None,3,7,VUnder50pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +CFFAA41h,CommandSetNVParam,0,,None,4,7,SA_Mask,Mode 5:,8, ,None,m,u,,0.0..255.0 +CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,0,125K +CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,1,250K +CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,2,500K +CFFAA41h,CommandSetNVParam,0,,None,5,7,Baudrate,Mode 5:,4, ,None,m,u,,3,1M +CFFAA41h,CommandSetNVParam,0,,None,5,7,FreqLo,Mode 4:,16, ,None,m,u,ms,1.0..30000.0 +CFFAA41h,CommandSetNVParam,0,,None,5,7,K1Open,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,5,7,K2Close,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,5,7,MX1Close,Mode 7:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,5,7,V50to88pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +CFFAA41h,CommandSetNVParam,0,,None,7,7,FreqHi,Mode 4:,16, ,None,m,u,ms,160.0..160.0 +CFFAA41h,CommandSetNVParam,0,,None,7,7,FreqVeryLo,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 +CFFAA41h,CommandSetNVParam,0,,None,7,7,K1Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +CFFAA41h,CommandSetNVParam,0,,None,7,7,MX2Open,Mode 7:,16, ,None,m,u,ms,0.0..65535.0 +CFFAA41h,CommandSetNVParam,0,,None,7,7,V110to120pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +CFFAC41h,CommandPower,0,,None,1,7,RealPower_command,,32, ,None,m,u,W,-90000.0..90000.0 +CFFAC41h,CommandPower,0,,None,5,7,ReactivePower_command,,32, ,None,m,u,VA,-90000.0..90000.0 +CFFAE41h,CommandVF,0,,None,1,7,Voltage_command,,16, ,None,m,u,0.1 Vrms,10.0..500.0 +CFFAE41h,CommandVF,0,,None,3,7,Frequency_command,,16, ,None,m,u,0.1 Hz,45.0..65.0 +CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,0,Disable +CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,1,Enable +CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,2,Error +CFFAF41h,CommandFactoryControl,0,,None,1,1,WriteSerialNumber,,2, ,None,m,u,,3,N/A +CFFAF41h,CommandFactoryControl,0,,None,3,7,FactoryAccess,,16, ,None,m,u,,0.0..65535.0 +CFFAF41h,CommandFactoryControl,0,,None,5,7,SerialNumber,,32, ,None,m,u,,0.0..4294967295.0 +CFFC2F7h,StatusACParameters,100,,None,1,7,VoltageAC_measured,,16, ,None,m,u,0.1 V,0.0..65535.0 +CFFC2F7h,StatusACParameters,100,,None,3,7,CurrentAC_measured,,16, ,None,m,u,A,0.0..65535.0 +CFFC2F7h,StatusACParameters,100,,None,5,7,Frequency_measured,,16, ,None,m,u,0.1 Hz,0.0..65535.0 +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,0,Power On Reset +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,1,Ready +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,2,Following +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,3,Fault +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,4,Forming +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,5,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,6,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,7,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,8,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,9,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,10,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,11,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,12,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,13,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,14,N/A +CFFC3F7h,StatusBits,100,,None,1,3,State_status,,4, ,None,m,u,,15,N/A +CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,0,Disable +CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,1,Enable +CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,1,5,Enable_echo,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,0,Normal +CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,1,Clear Faults +CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,1,7,FaultClr_echo,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,0,Not Active +CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,1,Active +CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,2,1,HardwareEnable_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,0,None +CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,1,Available +CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,2,3,PowerAvailAC_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,0,None +CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,1,Available +CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,2,5,PowerAvailDC_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,0,Disabled +CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,1,Enabled +CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,2,7,PowerCircuitEnabled_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,0,Open +CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,1,Closed +CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,3,1,MX1Permissive_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,0,Open +CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,1,Closed +CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,3,3,MX2Permissive_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,0,Open +CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,1,Closed +CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,3,5,K1PrechargePermissive_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,0,Open +CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,1,Closed +CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,3,7,K2DCRunPermissive_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,0,Invalid +CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,1,Valid +CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,4,1,MessageValidModeControl_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,0,Invalid +CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,1,Valid +CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,4,3,MessageValidPowerCMD_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,0,Invalid +CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,1,Valid +CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,4,5,MessageValidVF_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,0,Normal +CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,1,Warning +CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,3,ErrorPassive +CFFC3F7h,StatusBits,100,,None,4,7,CANbus_status,,2, ,None,m,u,,4,N/A +CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,0,Disable +CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,1,Enable +CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,5,1,EnableUPSMode_echo,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,0,Normal - Three Phase Mode +CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,1,Enable Split Phase Mode +CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,5,3,EnableSplitPhase_echo,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,0,Negative +CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,1,Positive +CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,5,5,PhaseRotation_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,0,No_Voltage +CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,1,Voltage_Detected +CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,5,7,LineVoltageDetected_status,,2, ,None,m,u,,3,N/A +CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,0,Negative +CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,1,Positive +CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,2,Error +CFFC3F7h,StatusBits,100,,None,6,1,PhaseRotation_echo,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,1,1,GeneralFault_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,1,3,OvercurrentAC_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,1,5,LossOfAC_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,1,7,OvercurrentDC_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,2,1,OvervoltageDC_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,2,3,UndervoltageDC_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,2,5,OvertempInternal_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,2,7,OvertempPowerDevice_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,3,3,ControlHardwareFail_status,,4, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,3,7,LossValidControlMessage_status,,4, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,4,1,EStopShutdown_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,4,3,IllegalTransition_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,4,5,InvalidEEHeader_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,4,7,InvalidEESection_status,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,5,1,ThermalOverload,,2, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,1,FLT_A +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,2,N/A +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,3,FLT_C +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,4,OverVoltage +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,5,FLT_B +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,6,Overcurrent +CFFC8F7h,StatusFaults,100,,None,6,2,BridgeBFault_status,,3, ,None,m,u,,7,5V +CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,6,3,BridgeBVoltageOk_status,,1, ,None,m,u,,3,N/A +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,1,FLT_A +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,2,N/A +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,3,FLT_C +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,4,OverVoltage +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,5,FLT_B +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,6,Overcurrent +CFFC8F7h,StatusFaults,100,,None,8,2,BridgeAFault_status,,3, ,None,m,u,,7,5V +CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,0,Normal +CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,1,Fault Active +CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,2,Error +CFFC8F7h,StatusFaults,100,,None,8,3,BridgeAVoltageOk_status,,1, ,None,m,u,,3,N/A +CFFCAF6h,MasterMeasuredPower,0,,None,1,7,RealPower_measured,,32, ,None,m,u,W,0.0..4294967295.0 +CFFCAF6h,MasterMeasuredPower,0,,None,5,7,ReactivePower_measured,,32, ,None,m,u,VA,0.0..4294967295.0 +CFFCAF7h,StatusMeasuredPower,100,,None,1,7,RealPower_measured,,32, ,None,m,u,W,0.0..4294967295.0 +CFFCAF7h,StatusMeasuredPower,100,,None,5,7,ReactivePower_measured,,32, ,None,m,u,VA,0.0..4294967295.0 +18FFC4F7h,StatusCommandedPower,100,,None,1,7,RealPower_echo,,32, ,None,m,u,W,0.0..4294967295.0 +18FFC4F7h,StatusCommandedPower,100,,None,5,7,ReactivePower_echo,,32, ,None,m,u,VA,0.0..4294967295.0 +18FFC9F7h,StatusCommandVF,100,,None,1,7,Voltage_echo,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 +18FFC9F7h,StatusCommandVF,100,,None,3,7,Frequency_echo,,16, ,None,m,u,0.1 Hz,0.0..65535.0 +18FFCBF7h,StatusTemps,100,,None,1,7,TempInlet_measured,,16, ,None,m,u,0.1 C,0.0..65535.0 +18FFCBF7h,StatusTemps,100,,None,3,7,TempInternal_measured,,16, ,None,m,u,0.1 C,0.0..65535.0 +18FFCBF7h,StatusTemps,100,,None,5,7,ConverterLosses,,16, ,None,m,u,W,0.0..65535.0 +18FFD0F7h,StatusLineCurrents,100,,None,1,7,L1Current_measured,,16, ,None,m,u,A,0.0..65535.0 +18FFD0F7h,StatusLineCurrents,100,,None,3,7,L2Current_measured,,16, ,None,m,u,A,0.0..65535.0 +18FFD0F7h,StatusLineCurrents,100,,None,5,7,L3Current_measured,,16, ,None,m,u,A,0.0..65535.0 +18FFD1F7h,StatusLineVoltages,100,,None,1,7,L1Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 +18FFD1F7h,StatusLineVoltages,100,,None,3,7,L2Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 +18FFD1F7h,StatusLineVoltages,100,,None,5,7,L3Voltage_measured,,16, ,None,m,u,0.1 Vrms,0.0..65535.0 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,0,ActParam0 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,1,ActLVM_ClearingTimes1 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,2,ActLVM_ClearingTimes2 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,3,ActLFM_Limits +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,4,ActLFM_ClearingTimes +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,5,StatusJ1939_Interface +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,6,StatusFault_Config +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,7,StatusContactorDelays1 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,8,StatusContactorDelays2 +1CFFA9F7h,StatusNVParam,0,,None,1,7,StatusNVParam_MUX,Mode Signal: ,16, ,None,m,u,,9,StatusContactorDelays3 +1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,0,Warning +1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,1,Fault +1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,2,Error +1CFFA9F7h,StatusNVParam,0,,None,3,1,StatusThermalOverload,Mode 6:,2, ,None,m,u,,3,N/A +1CFFA9F7h,StatusNVParam,0,,None,3,7,Dummy,Mode 0:,16, ,None,m,u,,5.0..10.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,FreqHi,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,FreqVeryLo,Mode 4:,16, ,None,m,u,ms,160.0..160.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusK2Open,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusMX1Open,Mode 7:,16, ,None,m,u,ms,0.0..5000.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusMX2Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,StatusNodeID,Mode 5:,8, ,None,m,u,,0.0..247.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,VOver120,Mode 2:,16, ,None,m,u,,1.0..30000.0 +1CFFA9F7h,StatusNVParam,0,,None,3,7,VUnder50pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +1CFFA9F7h,StatusNVParam,0,,None,4,7,StatusSA_Mask,Mode 5:,8, ,None,m,u,,0.0..255.0 +1CFFA9F7h,StatusNVParam,0,,None,5,7,FreqLo,Mode 4:,16, ,None,m,u,ms,1.0..30000.0 +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,0,125K +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,1,250K +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,2,500K +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusBaudrate,Mode 5:,4, ,None,m,u,,3,1M +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusK1Open,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusK2Close,Mode 9:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,5,7,StatusMX1Close,Mode 7:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,5,7,V50to88pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +1CFFA9F7h,StatusNVParam,0,,None,7,7,FreqHi,Mode 4:,16, ,None,m,u,ms,160.0..160.0 +1CFFA9F7h,StatusNVParam,0,,None,7,7,FreqVeryLo,Mode 3:,16, ,None,m,u,0.1 Hz,40.0..70.0 +1CFFA9F7h,StatusNVParam,0,,None,7,7,StatusK1Close,Mode 8:,16, ,None,m,u,ms,0.0..2000.0 +1CFFA9F7h,StatusNVParam,0,,None,7,7,StatusMX2Open,Mode 7:,16, ,None,m,u,ms,0.0..65535.0 +1CFFA9F7h,StatusNVParam,0,,None,7,7,V110to120pct,Mode 1:,16, ,None,m,u,ms,1.0..30000.0 +1CFFC1F7h,softwareRev,0,,None,1,7,ControlSwRev,,16, ,None,m,u,,0.0..65535.0 +1CFFC1F7h,softwareRev,0,,None,3,7,InterfaceRev,,16, ,None,m,u,,0.0..65535.0 +1CFFC1F7h,softwareRev,0,,None,5,7,BuildTime,,32, ,None,m,u,,0.0..4294967295.0 +1CFFC5F7h,StatusControlVoltage,100,,None,1,7,v5p0_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 +1CFFC5F7h,StatusControlVoltage,100,,None,3,7,v3p3_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 +1CFFC5F7h,StatusControlVoltage,100,,None,5,7,v24_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 +1CFFC5F7h,StatusControlVoltage,100,,None,7,7,v15_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 +1CFFC6F7h,StatusControlVolts2,100,,None,1,7,n15V_Supply,,16, ,None,m,u,0.01 V,0.0..65535.0 +1CFFC6F7h,StatusControlVolts2,100,,None,5,7,DiodeTemperature,,16, ,None,m,u,C,0.0..65535.0 +1CFFC6F7h,StatusControlVolts2,100,,None,7,7,IGBTTemperature,,16, ,None,m,u,C,0.0..65535.0 +1CFFC7F7h,StatusDCParameters,100,,None,1,7,VoltageDCInput_measured,,16, ,None,m,u,V,0.0..65535.0 +1CFFC7F7h,StatusDCParameters,100,,None,3,7,VoltageDCBus,,16, ,None,m,u,V,0.0..65535.0 +1CFFC7F7h,StatusDCParameters,100,,None,5,7,CurrentDC_measured,,16, ,None,m,u,A,0.0..65535.0 +1CFFCCF7h,serialNumber,0,,None,1,7,SerialNumber,,32, ,None,m,u,,0.0..4294967295.0 +1CFFCDF7h,softwareRevHash,0,,None,1,7,Hash,,28, ,None,m,u,,0.0..268435455.0 diff --git a/test/reference/from_xlsx/test.dbc b/tests/reference/from_xlsx/test.dbc similarity index 100% rename from test/reference/from_xlsx/test.dbc rename to tests/reference/from_xlsx/test.dbc diff --git a/test/reference/from_xlsx/test.dbf b/tests/reference/from_xlsx/test.dbf similarity index 100% rename from test/reference/from_xlsx/test.dbf rename to tests/reference/from_xlsx/test.dbf diff --git a/test/reference/from_xlsx/test.json b/tests/reference/from_xlsx/test.json similarity index 100% rename from test/reference/from_xlsx/test.json rename to tests/reference/from_xlsx/test.json diff --git a/test/reference/from_xlsx/test.kcd b/tests/reference/from_xlsx/test.kcd similarity index 100% rename from test/reference/from_xlsx/test.kcd rename to tests/reference/from_xlsx/test.kcd diff --git a/test/reference/from_xlsx/test.sym b/tests/reference/from_xlsx/test.sym similarity index 100% rename from test/reference/from_xlsx/test.sym rename to tests/reference/from_xlsx/test.sym diff --git a/test/reference/from_xlsx/test.xls b/tests/reference/from_xlsx/test.xls similarity index 100% rename from test/reference/from_xlsx/test.xls rename to tests/reference/from_xlsx/test.xls diff --git a/test/reference/from_xlsx/test.xml b/tests/reference/from_xlsx/test.xml similarity index 100% rename from test/reference/from_xlsx/test.xml rename to tests/reference/from_xlsx/test.xml diff --git a/test/reference/from_xlsx/test.yaml b/tests/reference/from_xlsx/test.yaml similarity index 100% rename from test/reference/from_xlsx/test.yaml rename to tests/reference/from_xlsx/test.yaml diff --git a/test/test.py b/tests/test.py old mode 100755 new mode 100644 similarity index 100% rename from test/test.py rename to tests/test.py diff --git a/src/canmatrix/tests/test_arxml.py b/tests/test_arxml.py similarity index 71% rename from src/canmatrix/tests/test_arxml.py rename to tests/test_arxml.py index b39c027b..224aa04f 100644 --- a/src/canmatrix/tests/test_arxml.py +++ b/tests/test_arxml.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import canmatrix.formats.arxml +import decimal try: from pathlib import Path @@ -8,9 +9,8 @@ def test_ecu_extract(): - here = Path(__file__).parent - - db = canmatrix.formats.arxml.load(str(here / "MyECU.ecuc.arxml"))[''] + test_file = "tests/files/arxml/MyECU.ecuc.arxml" + db = canmatrix.formats.arxml.load(test_file)[''] assert db.frames is not None assert len(db.frames) == 2 assert len(db.frames[0].signals) == 3 @@ -18,8 +18,8 @@ def test_ecu_extract(): def test_get_signals_from_container_i_pdu(): - here = Path(__file__).parent - matrix = canmatrix.formats.arxml.load(str(here / "ARXMLContainerTest.arxml")) + test_file = "tests/files/arxml/ARXMLContainerTest.arxml" + matrix = canmatrix.formats.arxml.load(test_file) assert matrix["New_CanCluster"].frames[0].signals[0].name == 'Header_ID' assert matrix["New_CanCluster"].frames[0].signals[1].name == 'Header_DLC' assert matrix["New_CanCluster"].frames[0].pdus[0].name == 'PDU_Contained_1' @@ -28,23 +28,24 @@ def test_get_signals_from_container_i_pdu(): def test_get_signals_from_secured_pdu(): - here = Path(__file__).parent - matrix = canmatrix.formats.arxml.load(str(here / "ARXMLSecuredPDUTest.arxml")) + test_file = "tests/files/arxml/ARXMLSecuredPDUTest.arxml" + matrix = canmatrix.formats.arxml.load(test_file) assert matrix["CAN"].frames[0].signals[0].name == 'someTestSignal' assert matrix["CAN"].frames[0].signals[1].name == 'Signal' def test_min_max(): - here = Path(__file__).parent - matrix = canmatrix.formats.arxml.load(str(here / "ARXML_min_max.arxml")) + test_file = "tests/files/arxml/ARXML_min_max.arxml" + matrix = canmatrix.formats.arxml.load(test_file) assert matrix["New_CanCluster"].frames[0].signals[0].is_signed is False def test_decode_compu_method_1(): - here = Path(__file__).parent + test_file = "tests/files/arxml/ARXMLCompuMethod1.arxml" ea = canmatrix.formats.arxml.Earxml() - ea.open(str(here / "ARXMLCompuMethod1.arxml")) + ea.open(test_file) compu_method = ea.find("COMPU-METHOD") + # default_float_factory = decimal.Decimal values, factor, offset, unit, const = canmatrix.formats.arxml.decode_compu_method(compu_method, ea, float) assert values == {'0': 'no trailer detected', '1': 'trailer detected'} assert factor == 42 diff --git a/src/canmatrix/tests/test_arxml_gw.py b/tests/test_arxml_gw.py similarity index 100% rename from src/canmatrix/tests/test_arxml_gw.py rename to tests/test_arxml_gw.py diff --git a/src/canmatrix/tests/test_canmatrix.py b/tests/test_canmatrix.py similarity index 99% rename from src/canmatrix/tests/test_canmatrix.py rename to tests/test_canmatrix.py index 91b87284..f6d774fe 100644 --- a/src/canmatrix/tests/test_canmatrix.py +++ b/tests/test_canmatrix.py @@ -297,7 +297,7 @@ def test_signal_encode_named_value(some_signal): def test_signal_encode_invalid_named_value(some_signal): - with pytest.raises(ValueError): + with pytest.raises(decimal.InvalidOperation): some_signal.phys2raw("wrong") @@ -958,7 +958,7 @@ def test_canmatrix_get_frame_by_wrong_pgn(empty_matrix, empty_frame): empty_frame.arbitration_id.id = 0xAB123456 empty_frame.arbitration_id.extended = True empty_matrix.add_frame(empty_frame) - assert empty_matrix.frame_by_pgn(0xAB34) == None + assert empty_matrix.frame_by_pgn(0xAB34) is None def test_canmatrix_iterate_over_frames(empty_matrix, empty_frame): diff --git a/src/canmatrix/tests/test_cli_compare.py b/tests/test_cli_compare.py similarity index 68% rename from src/canmatrix/tests/test_cli_compare.py rename to tests/test_cli_compare.py index fa908f69..c10f5b3a 100644 --- a/src/canmatrix/tests/test_cli_compare.py +++ b/tests/test_cli_compare.py @@ -1,43 +1,49 @@ +import os import sys +import tempfile -import canmatrix.formats import pytest +import canmatrix.formats + try: from pathlib import Path except ImportError: from pathlib2 import Path pytest_plugins = ["pytester"] -here = Path(__file__).parent +here = Path(__file__).parent / "files" +tmp_dir = tempfile.mkdtemp() @pytest.fixture def run(testdir): def do_run(*args): - args = [sys.executable,"-m","canmatrix.cli.compare"] + list(args) + args = [sys.executable, "-m", "canmatrix.cli.compare"] + list(args) return testdir.run(*args) return do_run def test_silent(tmpdir, run): - inputFile1 = str(here / "test_frame_decoding.dbc") - inputFile2 = str(here / "ARXML_min_max.arxml") + inputFile1 = str(here / "dbc" / "test_frame_decoding.dbc") + inputFile2 = str(here / "arxml" / "ARXML_min_max.arxml") - normal_result = run(inputFile1 ,inputFile2) - silent_result = run("-s", inputFile1 ,inputFile2) + normal_result = run(inputFile1, inputFile2) + silent_result = run("-s", inputFile1, inputFile2) assert len(normal_result.errlines) > len(silent_result.errlines) + assert len(normal_result.outlines) == len(silent_result.outlines) def test_verbose(tmpdir, run): - inputFile1 = str(here / "test_frame_decoding.dbc") - inputFile2 = str(here / "ARXML_min_max.arxml") + inputFile1 = str(here / "dbc" / "test_frame_decoding.dbc") + inputFile2 = str(here / "arxml" / "ARXML_min_max.arxml") normal_result = run(inputFile1, inputFile2) - verbose_result = run("-vv", inputFile1 ,inputFile2) - assert len(normal_result.errlines) < len(verbose_result.errlines) + verbose_result = run("-vv", inputFile1, inputFile2) + assert len(normal_result.errlines) + len(normal_result.outlines) < len(verbose_result.errlines) + len(verbose_result.outlines) def create_dbc(): - outFile1 = str(here / "tmpa.dbc") - outFile2 = str(here / "tmpb.dbc") + outFile1 = tmp_dir + "/output_cli_compare_tmpa.dbc" + outFile2 = tmp_dir + "/output_cli_compare_tmpb.dbc" + myFrame = canmatrix.Frame("testFrame3", arbitration_id=canmatrix.arbitration_id_converter(0x124), size=8, transmitters=["testBU"]) mySignal = canmatrix.Signal("someTestSignal", size=11, @@ -55,7 +61,7 @@ def create_dbc(): canmatrix.formats.dumpp({"": db}, outFile1, dbcExportEncoding='iso-8859-1', dbcExportCommentEncoding='iso-8859-1') - db.add_frame_defines("myAttribute","INT -5 10") + db.add_frame_defines("myAttribute", "INT -5 10") db.add_signal_defines("mySignalAttribute", 'INT 0 65535') mySignal.add_attribute("mySignalAttribute", "7") myFrame.add_attribute("myAttribute", "42") @@ -78,7 +84,7 @@ def test_attributes(tmpdir, run): reference = run(inputFile1, inputFile2) result = run("--attributes", inputFile1, inputFile2) - assert len(reference.outlines) < len(result.outlines) + assert len(reference.errlines) + len(reference.outlines) < len(result.errlines) + len(result.outlines) assert "ATTRIBUTES" not in "".join(reference.outlines) assert "ATTRIBUTES" in "".join(result.outlines) @@ -87,7 +93,7 @@ def test_value_tables(tmpdir, run): reference = run(inputFile1, inputFile2) result = run("--valueTable", inputFile1, inputFile2) - assert len(reference.outlines) > len(result.outlines) + assert len(reference.errlines) + len(reference.outlines) > len(result.errlines) + len(result.outlines) assert "Valuetable" in "".join(reference.outlines) assert "Valuetable" not in "".join(result.outlines) @@ -95,7 +101,7 @@ def test_comments(tmpdir, run): (inputFile1, inputFile2) = create_dbc() reference = run(inputFile1, inputFile2) result = run("--comments", inputFile1, inputFile2) - assert len(reference.outlines) < len(result.outlines) + assert len(reference.errlines) + len(reference.outlines) < len(result.errlines) + len(result.outlines) assert "comment:" not in "".join(reference.outlines) assert "comment:" in "".join(result.outlines) diff --git a/src/canmatrix/tests/test_cli_convert.py b/tests/test_cli_convert.py similarity index 70% rename from src/canmatrix/tests/test_cli_convert.py rename to tests/test_cli_convert.py index f1dfe762..e594c89d 100644 --- a/src/canmatrix/tests/test_cli_convert.py +++ b/tests/test_cli_convert.py @@ -1,8 +1,10 @@ # -*- coding: utf-8 -*- +import os import sys +import tempfile -import canmatrix.formats import pytest +import canmatrix.formats try: from pathlib import Path @@ -10,48 +12,55 @@ from pathlib2 import Path pytest_plugins = ["pytester"] -here = Path(__file__).parent +here = Path(__file__).parent / "files" +tmp_dir = tempfile.mkdtemp() @pytest.fixture def run(testdir): def do_run(*args): - args = [sys.executable,"-m","canmatrix.cli.convert"] + list(args) + args = [sys.executable, "-m", "canmatrix.cli.convert"] + list(args) return testdir.run(*args) return do_run def test_silent(tmpdir, run): - inputFile = str(here / "test_frame_decoding.dbc") + inputFile = str(here / "dbc" / "test_frame_decoding.dbc") - normal_result = run(inputFile ,"tmp.dbc") - silent_result = run("-s", inputFile,"tmp.dbc") + normal_result = run(inputFile, "tmp.dbc") + silent_result = run("-s", inputFile, "tmp.dbc") assert len(normal_result.errlines) > len(silent_result.errlines) def test_verbose(tmpdir, run): - inputFile = str(here / "ARXML_min_max.arxml") + inputFile = str(here / "arxml" / "ARXML_min_max.arxml") - normal_result = run(inputFile ,"tmp.dbc") - verbose_result = run("-vv", inputFile,"tmp.dbc") - assert len(normal_result.errlines) < len(verbose_result.errlines) + normal_result = run(inputFile, "tmp.dbc") + verbose_result = run("-vv", inputFile, "tmp.dbc") + assert len(normal_result.errlines) + len(normal_result.outlines) < len(verbose_result.errlines) + len(verbose_result.outlines) def test_force_output_format(tmpdir, run): - inputFile = str(here / "test_frame_decoding.dbc") - outFile = str(here / "tmp.tmp") - normal_result = run("-v", "-f","dbc", inputFile, outFile) - assert 'INFO - convert - done' in normal_result.errlines[-1] + inputFile = str(here / "dbc" / "test_frame_decoding.dbc") + outFile = tmp_dir + "/cli_convert_test_force.tmp" + + normal_result = run("-vv", "-f", "dbc", inputFile, outFile) + assert 'INFO - convert - Export Done' in normal_result.errlines[-1] + with open(outFile, "r") as fd: first_line = fd.readline() assert first_line == 'VERSION "created by canmatrix"\n' -def test_foce_input_format(tmpdir, run): - #requires test_force_output to run first - inputFile = str(here / "tmp.tmp") - normal_result = run("-i","dbc", inputFile, "tmp.dbc") - assert 'INFO - convert - done' in normal_result.errlines[-1] +def test_force_input_format(tmpdir, run): + inputFile = tmp_dir + "/cli_convert_test_force.tmp" + + normal_result = run("-i", "dbc", inputFile, "tmp.dbc") + assert 'INFO - convert - Export Done' in normal_result.errlines[-1] def create_dbc_with_special_char(): - outFile = str(here / "tmp.dbc") - myFrame = canmatrix.Frame("testFrame1", arbitration_id=canmatrix.arbitration_id_converter(0x123), size=8, transmitters=["testBU"]) + outFile = tmp_dir + "/output_cli_convert_tmp.dbc" + + myFrame = canmatrix.Frame("testFrame1", + arbitration_id=canmatrix.arbitration_id_converter(0x123), + size=8, + transmitters=["testBU"]) mySignal = canmatrix.Signal("someTestSignal", size=11, is_little_endian=False, @@ -67,137 +76,140 @@ def create_dbc_with_special_char(): db = canmatrix.CanMatrix() db.add_frame(myFrame) db.add_frame_defines("SomeUnneededDefine", 'INT 0 65535') - canmatrix.formats.dumpp({"": db}, outFile, dbcExportEncoding='iso-8859-1', + canmatrix.formats.dumpp({"": db}, + outFile, + dbcExportEncoding='iso-8859-1', dbcExportCommentEncoding='iso-8859-1') return outFile def test_ignore_encoding_errors(tmpdir, run): inputFile = create_dbc_with_special_char() - normal_result = run("--ignoreEncodingErrors","--dbcExportEncoding", "ascii", inputFile, "tmp2.dbc") - assert 'INFO - convert - done' in normal_result.errlines[-1] + normal_result = run("--ignoreEncodingErrors", "--dbcExportEncoding", "ascii", inputFile, "tmp2.dbc") + assert 'INFO - convert - Export Done' in normal_result.errlines[-1] def test_delete_obsolete_defines(tmpdir, run): inputFile = create_dbc_with_special_char() deleted_result = run("--deleteObsoleteDefines", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"BA_DEF_" not in content normal_result = run(inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"BA_DEF_" in content def test_delete_ecu(tmpdir, run): inputFile = create_dbc_with_special_char() - deleted_result = run("--deleteEcu","testBU", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + deleted_result = run("--deleteEcu", "testBU", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"testBU" not in content def test_rename_ecu(tmpdir, run): inputFile = create_dbc_with_special_char() - deleted_result = run("--renameEcu","testBU:renamedECU", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + deleted_result = run("--renameEcu", "testBU:renamedECU", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"testBU" not in content assert b"renamedECU" in content def test_delete_signal(tmpdir, run): inputFile = create_dbc_with_special_char() - deleted_result = run("--deleteSignal","someTestSignal", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + deleted_result = run("--deleteSignal", "someTestSignal", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"someTestSignal" not in content def test_rename_signal(tmpdir, run): inputFile = create_dbc_with_special_char() - deleted_result = run("--renameSignal","someTestSignal:renamedSignal", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + deleted_result = run("--renameSignal", "someTestSignal:renamedSignal", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"someTestSignal" not in content assert b"renamedSignal" in content def test_delete_frame(tmpdir, run): inputFile = create_dbc_with_special_char() - deleted_result = run("--deleteFrame","testFrame1", inputFile, "tmp2.dbc") - with open("tmp2.dbc","r") as fd: + deleted_result = run("--deleteFrame", "testFrame1", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "r") as fd: content = fd.read() assert "testFrame1" not in content def test_rename_frame(tmpdir, run): inputFile = create_dbc_with_special_char() - deleted_result = run("--renameFrame","testFrame1:renamedFrame", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + deleted_result = run("--renameFrame", "testFrame1:renamedFrame", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"testFrame1" not in content assert b"renamedFrame" in content def test_add_frame_receiver(tmpdir, run): inputFile = create_dbc_with_special_char() - deleted_result = run("--addFrameReceiver","testFrame1:newECU", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + deleted_result = run("--addFrameReceiver", "testFrame1:newECU", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"recBU,newECU" in content def test_change_frame_id(tmpdir, run): inputFile = create_dbc_with_special_char() - deleted_result = run("--changeFrameId","291:666", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + deleted_result = run("--changeFrameId", "291:666", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"BO_ 666" in content def test_set_frame_fd(tmpdir, run): inputFile = create_dbc_with_special_char() - deleted_result = run("--setFrameFd","testFrame1", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + deleted_result = run("--setFrameFd", "testFrame1", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b'BA_ "VFrameFormat" BO_ 291 14' in content - deleted_result = run("--unsetFrameFd","testFrame1", "tmp2.dbc", "tmp3.dbc") - with open("tmp3.dbc","rb") as fd: + deleted_result = run("--unsetFrameFd", "testFrame1", "tmp2.dbc", "tmp3.dbc") + with open("tmp3.dbc", "rb") as fd: content = fd.read() assert b'BA_ "VFrameFormat" BO_ 291 14' not in content def test_recalc_dlc(tmpdir, run): inputFile = create_dbc_with_special_char() - result = run("--recalcDLC","max", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + result = run("--recalcDLC", "max", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"testFrame1: 8" in content - result = run("--recalcDLC","force", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + result = run("--recalcDLC", "force", inputFile, "tmp2.dbc") + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"testFrame1: 2" in content def test_skip_long_dlc(tmpdir, run): inputFile = create_dbc_with_special_char() result = run("--skipLongDlc", "7", inputFile, "tmp2.dbc") - with open("tmp2.dbc","r") as fd: + with open("tmp2.dbc", "r") as fd: content = fd.read() assert "someTestSignal" not in content def test_cut_long_frames(tmpdir, run): inputFile = create_dbc_with_special_char() result = run("--cutLongFrames", "1", inputFile, "tmp2.dbc") - with open("tmp2.dbc","r") as fd: + with open("tmp2.dbc", "r") as fd: content = fd.read() assert "someTestSignal" not in content result = run("--cutLongFrames", "2", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"someTestSignal" in content def test_copy_signals(tmpdir, run): inputFile = create_dbc_with_special_char() result = run("--signals", "someTestSignal", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"someTestSignal" in content assert b"VECTOR__INDEPENDENT_SIG_MSG" in content - def create_dbc(additionalReceiver = []): - outFile = str(here / "tmpb.dbc") + tmp_dir = tempfile.mkdtemp() + outFile = tmp_dir + "/output_cli_convert_tmpb.dbc" + myFrame = canmatrix.Frame("testFrame3", arbitration_id=canmatrix.arbitration_id_converter(0x124), size=8, transmitters=["testBU"]) mySignal = canmatrix.Signal("someTestSignal", size=11, @@ -210,7 +222,7 @@ def create_dbc(additionalReceiver = []): receivers=["recBU"]) myFrame.add_signal(mySignal) myFrame2 = canmatrix.Frame("testFrame2", arbitration_id=canmatrix.arbitration_id_converter(0x125), size=8, transmitters=["testBU2"]) - myFrame2.add_attribute("myAttribute","42") + myFrame2.add_attribute("myAttribute", "42") mySignal2 = canmatrix.Signal("someTestSignal2", start_bit=15, size=11, @@ -238,7 +250,7 @@ def create_dbc(additionalReceiver = []): db = canmatrix.CanMatrix() db.add_frame(myFrame) db.add_frame(myFrame2) - db.add_frame_defines("myAttribute","INT -5 10") + db.add_frame_defines("myAttribute", "INT -5 10") db.add_signal_defines("mySignalAttribute", 'INT 0 65535') canmatrix.formats.dumpp({"": db}, outFile, dbcExportEncoding='iso-8859-1', dbcExportCommentEncoding='iso-8859-1') @@ -247,7 +259,7 @@ def create_dbc(additionalReceiver = []): def test_copy_ecus(tmpdir, run): inputFile = create_dbc() result = run("--ecus", "testBU", inputFile, "tmp2.dbc") - with open("tmp2.dbc","r") as fd: + with open("tmp2.dbc", "r") as fd: content = fd.read() assert "testBU2" not in content assert "testBU" in content @@ -255,7 +267,7 @@ def test_copy_ecus(tmpdir, run): def test_copy_ecus_rx(tmpdir, run): inputFile = create_dbc() result = run("--ecus", "recBU:rx", inputFile, "tmp2.dbc") - with open("tmp2.dbc","r") as fd: + with open("tmp2.dbc", "r") as fd: content = fd.read() assert "recBU2" not in content assert "recBU" in content @@ -263,7 +275,7 @@ def test_copy_ecus_rx(tmpdir, run): def test_copy_ecus_tx(tmpdir, run): inputFile = create_dbc(additionalReceiver = ["testBU"]) result = run("--ecus", "testBU:tx", inputFile, "tmp2.dbc") - with open("tmp2.dbc","r") as fd: + with open("tmp2.dbc", "r") as fd: content = fd.read() assert "testFrame2" not in content assert "testFrame3" in content @@ -271,7 +283,7 @@ def test_copy_ecus_tx(tmpdir, run): def test_copy_frames(tmpdir, run): inputFile = create_dbc() result = run("--frames", "testFrame3", inputFile, "tmp2.dbc") - with open("tmp2.dbc","rb") as fd: + with open("tmp2.dbc", "rb") as fd: content = fd.read() assert b"testFrame2" not in content assert b"testFrame3" in content @@ -279,22 +291,21 @@ def test_copy_frames(tmpdir, run): def test_delete_frame_attributes(tmpdir, run): inputFile = create_dbc() result = run("--deleteFrameAttributes", "myAttribute", inputFile, "tmp2.dbc") - with open("tmp2.dbc","r") as fd: + with open("tmp2.dbc", "r") as fd: content = fd.read() assert 'BA_ "myAttribute"' not in content def test_delete_zero_signals(tmpdir, run): inputFile = create_dbc() result = run("--deleteZeroSignals", inputFile, "tmp2.dbc") - with open("tmp2.dbc","r") as fd: + with open("tmp2.dbc", "r") as fd: content = fd.read() assert 'zeroSignal' not in content - def test_delete_signal_attributes(tmpdir, run): inputFile = create_dbc() result = run("--deleteSignalAttributes", "mySignalAttribute", inputFile, "tmp2.dbc") - with open("tmp2.dbc","r") as fd: + with open("tmp2.dbc", "r") as fd: content = fd.read() assert 'BA_ "mySignalAttribute"' not in content diff --git a/tests/test_codec.py b/tests/test_codec.py new file mode 100644 index 00000000..09db9f8a --- /dev/null +++ b/tests/test_codec.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Tests for `canmatrix` package.""" +import os +import unittest +import tempfile + +from canmatrix import formats +from canmatrix.canmatrix import Signal, ArbitrationId + + +class TestCanmatrixCodec(unittest.TestCase): + """Tests for `canmatrix` package.""" + + def setUp(self): + """Set up test fixtures, if any.""" + + def tearDown(self): + """Tear down test fixtures, if any.""" + + # def test_bitstruct_format(self): + # """""" + # s1 = Signal('signal') + # self.assertEqual(s1.bitstruct_format(), 's8') + + def test_encode_by_signal_raw_value(self): + test_file = "tests/files/dbc/test.dbc" + for bus in formats.loadp(test_file).values(): + test_frame1 = ArbitrationId(0x123) + data = { + 'Signal': 2, + 'someTestSignal': 101, + } + data_bytes = tuple(bytearray(bus.encode(test_frame1, data))) + assert data_bytes == (0, 0xCA, 0x20, 0, 0, 0, 0, 0) + + def test_encode_by_signal_physical_value(self): + test_file = "tests/files/dbc/test.dbc" + for bus in formats.loadp(test_file).values(): + test_frame1 = ArbitrationId(0x123) + data = { + 'someTestSignal': "101", + 'Signal': u'two' + } + data_bytes = tuple(bytearray(bus.encode(test_frame1, data))) + assert data_bytes == (0, 0x28, 0x20, 0, 0, 0, 0, 0) + + def test_encode_decode_signal_value(self): + test_file = "tests/files/dbc/test.dbc" + for bus in formats.loadp(test_file).values(): + test_frame1 = ArbitrationId(0x123) + + data = { + 'Signal': 2, + 'someTestSignal': 101, + } + data_bytes = tuple(bytearray(bus.encode(test_frame1, data))) + decoded = bus.decode(test_frame1, data_bytes) + + for k, v in data.items(): + assert decoded[k].raw_value == v + + def test_encode_decode_signal_value_choice_unicode(self): + test_file = "tests/files/dbc/test.dbc" + for bus in formats.loadp(test_file).values(): + test_frame1 = ArbitrationId(0x123) + + data = { + 'Signal': u'two' + } + data_bytes = tuple(bytearray(bus.encode(test_frame1, data))) + + decoded = bus.decode(test_frame1, data_bytes) + + for k, v in data.items(): + assert decoded[k].signal.values[decoded[k].raw_value] == v + + def test_encode_decode_signal_value_choice_str(self): + test_file = "tests/files/dbc/test.dbc" + for bus in formats.loadp(test_file).values(): + test_frame1 = ArbitrationId(0x123) + + data = { + 'Signal': 'two' + } + data_bytes = tuple(bytearray(bus.encode(test_frame1, data))) + + decoded = bus.decode(test_frame1, data_bytes) + + for k, v in data.items(): + assert decoded[k].signal.values[decoded[k].raw_value] == v + + def test_import_export_additional_frame_info(self): + test_file = "tests/files/dbc/test.dbc" + dbs = formats.loadp(test_file) + tmp_dir = tempfile.mkdtemp() + # for extension in ['csv', 'json']: # json will not export None type + for extension in ['csv']: + out_file_name = tmp_dir + "/output." + extension + formats.dumpp(dbs, out_file_name, additionalFrameAttributes="UserFrameAttr") + with open(out_file_name, "r") as file: + data = file.read() + self.assertIn("UserFrameAttr", data) + + +if __name__ == "__main__": + unittest.main() diff --git a/src/canmatrix/tests/test_copy.py b/tests/test_copy.py similarity index 99% rename from src/canmatrix/tests/test_copy.py rename to tests/test_copy.py index 6340a770..f7f46119 100644 --- a/src/canmatrix/tests/test_copy.py +++ b/tests/test_copy.py @@ -80,6 +80,7 @@ def test_copy_ecu_with_attributes(): assert matrix1.ecu_by_name("ECU").attribute("Node Address") == '42' assert matrix1.ecu_by_name("ECU").attribute("some_ecu_define", matrix1) == "default_value" + def test_copy_frame_default_attributes(): source = canmatrix.canmatrix.CanMatrix() frame1 = canmatrix.canmatrix.Frame("Frame1", arbitration_id=1) diff --git a/src/canmatrix/tests/test_dbc.py b/tests/test_dbc.py similarity index 99% rename from src/canmatrix/tests/test_dbc.py rename to tests/test_dbc.py index bf60deda..ae77ffb5 100644 --- a/src/canmatrix/tests/test_dbc.py +++ b/tests/test_dbc.py @@ -374,7 +374,6 @@ def test_cycle_time_handling(): assert matrix.frames[0].signal_by_name("sig1").cycle_time == 10 assert matrix.frames[0].signal_by_name("sig2").cycle_time == 20 - # assert "GenMsgCycleTime" not in matrix.frame_defines # assert "GenSigCycleTime" not in matrix.signal_defines diff --git a/src/canmatrix/tests/test_dbf.py b/tests/test_dbf.py similarity index 100% rename from src/canmatrix/tests/test_dbf.py rename to tests/test_dbf.py diff --git a/src/canmatrix/tests/test_formats.py b/tests/test_formats.py similarity index 100% rename from src/canmatrix/tests/test_formats.py rename to tests/test_formats.py diff --git a/src/canmatrix/tests/test_frame_decoding.py b/tests/test_frame_decoding.py similarity index 98% rename from src/canmatrix/tests/test_frame_decoding.py rename to tests/test_frame_decoding.py index c4d0eaae..ee8288ff 100644 --- a/src/canmatrix/tests/test_frame_decoding.py +++ b/tests/test_frame_decoding.py @@ -9,8 +9,8 @@ def load_dbc(): - here = os.path.dirname(os.path.realpath(__file__)) - return canmatrix.formats.loadp_flat(os.path.join(here, "test_frame_decoding.dbc")) + test_file = "tests/files/dbc/test_frame_decoding.dbc" + return canmatrix.formats.loadp_flat(test_file) def test_decode_with_dbc_big_endian(): diff --git a/src/canmatrix/tests/test_frame_encoding.py b/tests/test_frame_encoding.py similarity index 97% rename from src/canmatrix/tests/test_frame_encoding.py rename to tests/test_frame_encoding.py index c091018f..1df3211a 100644 --- a/src/canmatrix/tests/test_frame_encoding.py +++ b/tests/test_frame_encoding.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- import io -import os.path +# import os.path import textwrap import attr @@ -8,8 +8,8 @@ def load_dbc(): - here = os.path.dirname(os.path.realpath(__file__)) - return canmatrix.formats.loadp_flat(os.path.join(here, "test_frame_decoding.dbc")) + test_file = "tests/files/dbc/test_frame_decoding.dbc" + return canmatrix.formats.loadp_flat(test_file) def test_encode_with_dbc_big_endian(): diff --git a/src/canmatrix/tests/test_j1939_decoder.py b/tests/test_j1939_decoder.py similarity index 100% rename from src/canmatrix/tests/test_j1939_decoder.py rename to tests/test_j1939_decoder.py diff --git a/src/canmatrix/tests/test_json.py b/tests/test_json.py similarity index 100% rename from src/canmatrix/tests/test_json.py rename to tests/test_json.py diff --git a/src/canmatrix/tests/test_scapy.py b/tests/test_scapy.py similarity index 91% rename from src/canmatrix/tests/test_scapy.py rename to tests/test_scapy.py index 171e9065..98e0b998 100644 --- a/src/canmatrix/tests/test_scapy.py +++ b/tests/test_scapy.py @@ -1,6 +1,8 @@ -import canmatrix.formats.scapy -import io import os +import io + +import canmatrix.formats.scapy + def test_scapy_frame_exists(): db = canmatrix.CanMatrix() @@ -12,8 +14,9 @@ def test_scapy_frame_exists(): def test_scapy_muliplexed_frame(): - here = os.path.dirname(os.path.realpath(__file__)) - db = canmatrix.formats.loadp_flat(os.path.join(here, "test_frame_decoding.dbc")) + # here = os.path.dirname(os.path.realpath(__file__)) + test_file = "tests/files/dbc/test_frame_decoding.dbc" + db = canmatrix.formats.loadp_flat(test_file) outscapy = io.BytesIO() canmatrix.formats.dump(db, outscapy, "scapy") assert "ConditionalField" in outscapy.getvalue().decode("utf8") diff --git a/src/canmatrix/tests/test_sym.py b/tests/test_sym.py similarity index 100% rename from src/canmatrix/tests/test_sym.py rename to tests/test_sym.py diff --git a/src/canmatrix/tests/test_utils.py b/tests/test_utils.py similarity index 100% rename from src/canmatrix/tests/test_utils.py rename to tests/test_utils.py diff --git a/src/canmatrix/tests/test_wireshark.py b/tests/test_wireshark.py similarity index 89% rename from src/canmatrix/tests/test_wireshark.py rename to tests/test_wireshark.py index 1a7f9071..703123e3 100644 --- a/src/canmatrix/tests/test_wireshark.py +++ b/tests/test_wireshark.py @@ -12,8 +12,10 @@ def test_wireshark_frame_exists(): def test_wireshark_muliplexed_frame(): - here = os.path.dirname(os.path.realpath(__file__)) - db = canmatrix.formats.loadp_flat(os.path.join(here, "test_frame_decoding.dbc")) + # here = os.path.dirname(os.path.realpath(__file__)) + # db = canmatrix.formats.loadp_flat(os.path.join(here, "test_frame_decoding.dbc")) + test_file = "tests/files/dbc/test_frame_decoding.dbc" + db = canmatrix.formats.loadp_flat(test_file) outlua = io.BytesIO() canmatrix.formats.dump(db, outlua, "wireshark") assert "if muxer ==" in outlua.getvalue().decode("utf8") diff --git a/src/canmatrix/tests/test_xls.py b/tests/test_xls.py similarity index 100% rename from src/canmatrix/tests/test_xls.py rename to tests/test_xls.py diff --git a/tox.ini b/tox.ini index ab77dc1c..d417cc6f 100644 --- a/tox.ini +++ b/tox.ini @@ -1,45 +1,57 @@ [tox] -envlist = py{37,38,39,310,311}, mypy +envlist = py [testenv] +package = wheel +deps = + pytest==7.3.* + pytest-timeout==2.1.* + coveralls==3.3.1 + pytest-cov==4.0.0 + coverage==6.5.0 + parameterized==0.9.* + extras = arxml - test + xlsx xls -deps= - coverage - pytest-cov -passenv= - TOXENV + yaml + +commands = + pytest {posargs} + +recreate = True + +[testenv:gh] +passenv = CI - APPVEYOR - APPVEYOR_* -commands= - python -c 'import sys; print(sys.version)' - pytest -s --basetemp={envtmpdir} canmatrix --cov-config={toxinidir}/.coveragerc --cov=canmatrix --pyargs {posargs} - coverage report - -[testenv:dist] -envdir={toxworkdir}/{envname}_env -commands= - python -c 'import sys; print(sys.version)' - python setup.py sdist --formats=gztar,zip --dist-dir={toxinidir}/dist - python setup.py bdist_wheel --universal --dist-dir={toxinidir}/dist - -[testenv:codecov] -deps= - codecov -commands= - codecov - -[testenv:old_tests] -commands= - ./test.sh - -[testenv:mypy] -description = type check -basepython = python3.6 -deps= - mypy -commands= - python -m mypy src --config-file mypy.ini + GITHUB_* + COVERALLS_* + PY_COLORS + +[pytest] +testpaths = tests +addopts = -v --timeout=300 --cov=canmatrix --cov-config=tox.ini --cov-report=lcov --cov-report=term + +[coverage:run] +relative_files = True +branch = False + +[coverage:paths] +source = + src + */site-packages + +[coverage:report] +# two digits after decimal point +precision = 3 +show_missing = True +exclude_lines = + # Have to re-enable the standard pragma, see https://coverage.readthedocs.io/en/coverage-4.5.1a/config.html#syntax + pragma: no cover + + # Don't complain if non-runnable code isn't run: + if __name__ == .__main__.: + + # Don't complain if tests don't hit defensive assertion code: + raise NotImplementedError From dbc96d9024796a9386376f36b81858083a1f1969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Fri, 21 Jun 2024 13:45:29 +0200 Subject: [PATCH 38/61] cache short_names for spead up parsing (#801) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Eduard Bröcker --- src/canmatrix/formats/arxml.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 43b8a888..1c92e286 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -58,12 +58,14 @@ class Earxml: def __init__(self): self.xml_element_cache = dict() # type: typing.Dict[str, _Element] self.path_cache = {} + self.sn_cache = {} def fill_caches(self, start_element=None, ar_path=""): if start_element is None: start_element = self.root self.path_cache = {} if start_element.tag == self.ns + "SHORT-NAME": + self.sn_cache[start_element.getparent()] = start_element.text return start_element.text for sub_element in start_element: text = sub_element.text @@ -155,13 +157,8 @@ def get_short_name_path(self, shortname_path): def get_short_name(self, element): # type: (_Element, str) -> str """Get element short name.""" - if element is None: - return "" - name = element.find('./' + self.ns + 'SHORT-NAME') - if name is not None and name.text is not None: - return name.text - return "" - + return self.sn_cache.get(element, "") + def follow_ref(self, start_element, element_name): ref_element = self.find(element_name, start_element) if ref_element is None: From e9b29722c0e369d4b889af612c3680d4239c1cf4 Mon Sep 17 00:00:00 2001 From: SabrineBH Date: Fri, 21 Jun 2024 13:32:59 +0100 Subject: [PATCH 39/61] Update fibex.py (#802) --- src/canmatrix/formats/fibex.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index cd643426..fefef63a 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -788,8 +788,10 @@ def dump(db, f, **options): "Coding for " + signal_id) - coded = create_sub_element_ho(coding, "CODED-TYPE") - base_data_type = get_base_data_type(signal.size, signal.is_signed) + coded = create_sub_element_ho(coding, "CODED-TYPE") + # find smallest predefined type size able of holding signal size + byte_size = (signal.size + 8 - 1) / 8 + base_data_type = get_base_data_type(byte_size * 8, signal.is_signed) if base_data_type is not None: coded.set(ns_ho + "BASE-DATA-TYPE", base_data_type) coded.set("CATEGORY", "STANDARD-LENGTH-TYPE") From 6f71686252f4ee453544bf78adac24e1b35e32a2 Mon Sep 17 00:00:00 2001 From: SabrineBH Date: Mon, 24 Jun 2024 20:48:47 +0100 Subject: [PATCH 40/61] Update fibex.py (#805) --- src/canmatrix/formats/fibex.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index fefef63a..6c1c0884 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -131,35 +131,34 @@ def get_multiplexing_parts_infos(signals, frame_name, start_pos=-1, end_pos=-1, def get_base_data_type(bit_length, is_signed=False): # type: (int, bool) -> str - if bit_length == 8: + if bit_length > 0 and bit_length <= 8: if is_signed: return "A_INT8" elif not is_signed: return "A_UINT8" - elif bit_length == 16: + elif bit_length > 8 and bit_length <= 16: if is_signed: return "A_INT16" elif not is_signed: return "A_UINT16" - elif bit_length == 32: + elif bit_length > 16 and bit_length <= 32: if is_signed: return "A_INT32" elif not is_signed: return "A_UINT32" - elif bit_length == 64: + elif bit_length > 32 and bit_length <= 64: if is_signed: return "A_INT64" elif not is_signed: return "A_UINT64" - class Fe: def __init__(self, filename): self.tree = lxml.etree.parse(filename) @@ -788,10 +787,8 @@ def dump(db, f, **options): "Coding for " + signal_id) - coded = create_sub_element_ho(coding, "CODED-TYPE") - # find smallest predefined type size able of holding signal size - byte_size = (signal.size + 8 - 1) / 8 - base_data_type = get_base_data_type(byte_size * 8, signal.is_signed) + coded = create_sub_element_ho(coding, "CODED-TYPE") + base_data_type = get_base_data_type(signal.size, signal.is_signed) if base_data_type is not None: coded.set(ns_ho + "BASE-DATA-TYPE", base_data_type) coded.set("CATEGORY", "STANDARD-LENGTH-TYPE") From 9278ea995c2a8f090779734d716e9a0c415d5564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Fri, 12 Jul 2024 09:54:07 +0200 Subject: [PATCH 41/61] fix dbc tests (#810) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this should be an addon to pr #795 Co-authored-by: Eduard Bröcker --- src/canmatrix/formats/dbc.py | 12 ++++++--- tests/test_dbc.py | 47 ++++++++++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/canmatrix/formats/dbc.py b/src/canmatrix/formats/dbc.py index ffe3ffa9..ed13b52c 100644 --- a/src/canmatrix/formats/dbc.py +++ b/src/canmatrix/formats/dbc.py @@ -238,8 +238,10 @@ def dump(in_db, f, **options): if signal.cycle_time != 0: signal.add_attribute("GenSigCycleTime", signal.cycle_time) if "GenSigStartValue" in db.signal_defines: - signal.add_attribute("GenSigStartValue", signal.phys2raw(None)) - + if signal.phys2raw(None) != 0: + if db.signal_defines["GenSigStartValue"].defaultValue is None: + signal.add_attribute("GenSigStartValue", signal.phys2raw(None)) + name = normalized_names[signal] if compatibility: name = re.sub("[^A-Za-z0-9]", whitespace_replacement, name) @@ -950,7 +952,11 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None # frame.extended = 1 for signal in frame.signals: - default_value = signal.phys2raw(None) + if "GenSigStartValue" in db.signal_defines \ + and db.signal_defines["GenSigStartValue"].defaultValue is not None: + default_value = signal.phys2raw(float_factory(db.signal_defines["GenSigStartValue"].defaultValue)) + else: + default_value = signal.phys2raw(None) gen_sig_start_value = float_factory(signal.attributes.get("GenSigStartValue", default_value)) signal.initial_value = (gen_sig_start_value * signal.factor) + signal.offset signal.cycle_time = int(signal.attributes.get("GenSigCycleTime", 0)) diff --git a/tests/test_dbc.py b/tests/test_dbc.py index ae77ffb5..2f82602f 100644 --- a/tests/test_dbc.py +++ b/tests/test_dbc.py @@ -540,9 +540,52 @@ def test_default_initial_value(): matrix = canmatrix.formats.dbc.load(dbc, dbcImportEncoding="utf8") assert matrix.frames[0].signals[0].initial_value == 10 -# outdbc = io.BytesIO() -# canmatrix.formats.dump(matrix, outdbc, "dbc") +def test_keep_individual_inital_value(): + dbc = io.BytesIO(textwrap.dedent(u'''\ + BO_ 561 ECU1_Message2: 1 ECU1 + SG_ ECU2_Signal2 : 0|8@0+ (2,0) [-2|250] "g" ECU2 + + BA_DEF_ SG_ "GenSigStartValue" FLOAT 0.0 100.0; + + BA_DEF_DEF_ "GenSigStartValue" 10.0; + BA_ "GenSigStartValue" SG_ 561 ECU2_Signal2 42; + ''').encode('utf-8')) + matrix1 = canmatrix.formats.dbc.load(dbc, dbcImportEncoding="utf8") + assert matrix1.frames[0].signals[0].initial_value == decimal.Decimal('84') # in matrix should be the physical value! + outdbc = io.BytesIO() + canmatrix.formats.dump(matrix1, outdbc, "dbc") + # in dbc should be the raw value + assert 'BA_ "GenSigStartValue" SG_ 561 ECU2_Signal2 42' in outdbc.getvalue().decode('utf8') + + +def test_individual_initial_value_merge(): + dbc1 = io.BytesIO(textwrap.dedent(u'''\ + BO_ 560 ECU1_Message: 1 ECU1 + SG_ ECU2_Signal : 0|8@0+ (1,-5) [-2|250] "g" ECU2 + + BA_DEF_ SG_ "GenSigStartValue" FLOAT 0.0 100.0; + + BA_DEF_DEF_ "GenSigStartValue" 10.0; + ''').encode('utf-8')) + + dbc2 = io.BytesIO(textwrap.dedent(u'''\ + BO_ 561 ECU1_Message2: 1 ECU1 + SG_ ECU2_Signal2 : 0|8@0+ (1,0) [-2|250] "g" ECU2 + + BA_DEF_ SG_ "GenSigStartValue" FLOAT 0.0 100.0; + + BA_DEF_DEF_ "GenSigStartValue" 10.0; + BA_ "GenSigStartValue" SG_ 561 ECU2_Signal2 42; + ''').encode('utf-8')) + + matrix1 = canmatrix.formats.dbc.load(dbc1, dbcImportEncoding="utf8") + matrix2 = canmatrix.formats.dbc.load(dbc2, dbcImportEncoding="utf8") + matrix1.merge([matrix2]) + outdbc = io.BytesIO() + canmatrix.formats.dump(matrix1, outdbc, "dbc") + + assert 'BA_ "GenSigStartValue" SG_ 561 ECU2_Signal2 42' in outdbc.getvalue().decode('utf8') def test_no_initial_value(): dbc = io.BytesIO(textwrap.dedent(u'''\ From ef9f709e91324c7864443dbf7e50d5d292728e27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Fri, 12 Jul 2024 10:00:22 +0200 Subject: [PATCH 42/61] should fix issue #760 (#807) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Eduard Bröcker --- src/canmatrix/canmatrix.py | 1 + tests/test_canmatrix.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index 594c3707..87d18fc3 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -1321,6 +1321,7 @@ def update_receiver(self): # type: () -> None """ Collect Frame receivers out of receiver given in each signal. Add them to `self.receiver` list. """ + self.receivers = [] for sig in self.signals: for receiver in sig.receivers: self.add_receiver(receiver) diff --git a/tests/test_canmatrix.py b/tests/test_canmatrix.py index f6d774fe..bc8e77aa 100644 --- a/tests/test_canmatrix.py +++ b/tests/test_canmatrix.py @@ -987,6 +987,21 @@ def test_canmatrix_rename_ecu_by_wrong_name(empty_matrix): assert ecu.name == "old_name" +def test_canmatrix_rename_ecu_check_frame(empty_matrix): + ecu = canmatrix.Ecu(name="old_name") + frame = canmatrix.Frame(name="test_frame") + signal = canmatrix.Signal(name="test_signal") + signal.add_receiver("old_name") + frame.add_signal(signal) + frame.update_receiver() + assert "old_name" in frame.receivers + + empty_matrix.add_ecu(ecu) + empty_matrix.add_frame(frame) + empty_matrix.rename_ecu("old_name", "new_name") + assert "old_name" not in frame.receivers + assert "new_name" in frame.receivers + def test_canmatrix_rename_ecu_by_instance(empty_matrix): ecu = canmatrix.Ecu(name="old_name") empty_matrix.add_ecu(ecu) From 261f8c372c753f417a6a7cd176761b3031529891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Mon, 15 Jul 2024 11:38:36 +0200 Subject: [PATCH 43/61] possible quick fix for issue #781 (#809) * possible quick fix for issue #781 (DBC <=> XLSX initial_value) --- src/canmatrix/formats/dbc.py | 3 +++ tests/test_cli_convert.py | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/canmatrix/formats/dbc.py b/src/canmatrix/formats/dbc.py index ed13b52c..28e2b227 100644 --- a/src/canmatrix/formats/dbc.py +++ b/src/canmatrix/formats/dbc.py @@ -237,6 +237,9 @@ 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 and "GenSigStartValue" not in db.signal_defines: + db.add_signal_defines("GenSigStartValue", 'FLOAT 0 100000000000') + if "GenSigStartValue" in db.signal_defines: if signal.phys2raw(None) != 0: if db.signal_defines["GenSigStartValue"].defaultValue is None: diff --git a/tests/test_cli_convert.py b/tests/test_cli_convert.py index e594c89d..32a9581c 100644 --- a/tests/test_cli_convert.py +++ b/tests/test_cli_convert.py @@ -92,11 +92,11 @@ def test_delete_obsolete_defines(tmpdir, run): deleted_result = run("--deleteObsoleteDefines", inputFile, "tmp2.dbc") with open("tmp2.dbc", "rb") as fd: content = fd.read() - assert b"BA_DEF_" not in content + assert b"SomeUnneededDefine" not in content normal_result = run(inputFile, "tmp2.dbc") with open("tmp2.dbc", "rb") as fd: content = fd.read() - assert b"BA_DEF_" in content + assert b"SomeUnneededDefine" in content def test_delete_ecu(tmpdir, run): inputFile = create_dbc_with_special_char() From e7ce2aa5e48d1d1bdb6226f35154e05c947dbf50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Mon, 15 Jul 2024 11:43:23 +0200 Subject: [PATCH 44/61] possible fix for issue #786 (#808) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Eduard Bröcker --- src/canmatrix/formats/arxml.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 1c92e286..6ea6df74 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -797,7 +797,7 @@ def dump(dbs, f, **options): compu_int_to_phys = create_sub_element( compu_method, 'COMPU-INTERNAL-TO-PHYS') compu_scales = create_sub_element(compu_int_to_phys, 'COMPU-SCALES') - for value in sorted(signal.values, key=lambda x: int(x, 0)): + for value in sorted(signal.values): compu_scale = create_sub_element(compu_scales, 'COMPU-SCALE') desc = create_sub_element(compu_scale, 'DESC') l2 = create_sub_element(desc, 'L-2') From 4bfce242c1431cf70f6e70169284cc2b6b8ee3a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Sep 2024 08:21:59 +0200 Subject: [PATCH 45/61] Bump actions/download-artifact from 3 to 4.1.7 in /.github/workflows (#815) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3 to 4.1.7. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v3...v4.1.7) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 69499140..54d8549b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -141,7 +141,7 @@ jobs: # upload to PyPI only on release if: github.event.release && github.event.action == 'published' steps: - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4.1.7 with: name: python-can-dist path: dist From 27822d249bac1d8642b70ef4e5672eeee3ec9ccf Mon Sep 17 00:00:00 2001 From: Dalilaroussi <33608024+Dalilaroussi@users.noreply.github.com> Date: Mon, 14 Oct 2024 10:50:29 +0100 Subject: [PATCH 46/61] fix can fd in fibex (#817) Co-authored-by: malilaroussi --- src/canmatrix/formats/fibex.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index 6c1c0884..35cc4625 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -511,6 +511,9 @@ def dump(db, f, **options): create_sub_element_fx(identifier, "IDENTIFIER-VALUE", str(frame.arbitration_id.id)) frame_ref = create_sub_element_fx(frame_triggering, "FRAME-REF") frame_ref.set("ID-REF", "FRAME_" + frame.name) + if (frame.is_fd): + create_sub_element_fx(frame_triggering, "CAN-FRAME-TX-BEHAVIOR","CAN-FD") + create_sub_element_fx(frame_triggering, "CAN-FRAME-RX-BEHAVIOR","CAN-FD") # # ECUS From f06020333e9f380f83f8b95a4ec3c2a0f4da7e97 Mon Sep 17 00:00:00 2001 From: Koltan Hauersperger <54869912+khauersp@users.noreply.github.com> Date: Mon, 14 Oct 2024 05:52:02 -0400 Subject: [PATCH 47/61] Add in simple multiplexing for dbc (#816) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * test: add in two new unittests * test: remove unneeded test * feat: add in handling for simple multiplexing * feat: add in more logic * docs: update description of multiplex_signals --------- Co-authored-by: Eduard Bröcker --- src/canmatrix/canmatrix.py | 11 +++++++++++ src/canmatrix/formats/dbc.py | 5 ++++- tests/test_dbc.py | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index 87d18fc3..f88f5a53 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -1671,6 +1671,17 @@ def compress(self): gap_found = True break + def multiplex_signals(self): + """Assign multiplexer to signals. When a multiplexor is in the frame.""" + multiplexor = self.get_multiplexer + if multiplexor is None: + return + + for signal in self.signals: + if signal.is_multiplexer or (signal.muxer_for_signal is not None): + continue + signal.muxer_for_signal = multiplexor.name + signal.mux_val = signal.multiplex def __str__(self): # type: () -> str """Represent the frame by its name only.""" diff --git a/src/canmatrix/formats/dbc.py b/src/canmatrix/formats/dbc.py index 28e2b227..965459e2 100644 --- a/src/canmatrix/formats/dbc.py +++ b/src/canmatrix/formats/dbc.py @@ -599,9 +599,11 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None multiplex = temp.group(2) # type: str is_complex_multiplexed = False + is_multiplexer = False if multiplex == 'M': multiplex = 'Multiplexor' + is_multiplexer = True elif multiplex.endswith('M'): is_complex_multiplexed = True multiplex = multiplex[:-1] @@ -632,7 +634,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None **extras ) - if is_complex_multiplexed: + if is_complex_multiplexed or is_multiplexer: temp_signal.is_multiplexer = True temp_signal.multiplex = 'Multiplexor' @@ -989,6 +991,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None db.enum_attribs_to_values() for frame in db.frames: + frame.multiplex_signals() if "_FD" in frame.attributes.get("VFrameFormat", ""): frame.is_fd = True if "J1939PG" in frame.attributes.get("VFrameFormat", ""): diff --git a/tests/test_dbc.py b/tests/test_dbc.py index 2f82602f..77db8fb5 100644 --- a/tests/test_dbc.py +++ b/tests/test_dbc.py @@ -339,6 +339,20 @@ def test_j1939_frametype(): matrix = canmatrix.formats.dbc.load(dbc, dbcImportEncoding="utf8") assert matrix.frames[0].is_j1939 == False +def test_multiplex_frame(): + dbc = io.BytesIO(textwrap.dedent(u'''\ + BU_: someOtherEcu + + BO_ 123 someFrame: 8 someOtherEcu + SG_ someSignal m2 : 8|8@1+ (1,0) [0|9] "" CCL_TEST + SG_ someOtherSignal m1 : 8|8@0+ (1,0) [0|9] "" CCL_TEST + SG_ someMultiplexor M : 0|8@1+ (1,0) [0|2] "" CCL_TEST + ''').encode('utf-8')) + matrix = canmatrix.formats.dbc.load(dbc, dbcImportEncoding="utf8") + assert matrix.frames[0].is_multiplexed + + assert matrix.frames[0].signal_by_name("someSignal").muxer_for_signal == "someMultiplexor" + def test_attributes_with_spaces_before_semicolumn(): dbc = io.BytesIO(textwrap.dedent(u'''\ From d6bb599dc519355a8c7b054bbe6e1a136732e7e2 Mon Sep 17 00:00:00 2001 From: Dalilaroussi <33608024+Dalilaroussi@users.noreply.github.com> Date: Mon, 14 Oct 2024 10:53:15 +0100 Subject: [PATCH 48/61] fix base type once Signal is float in Fibex (#818) Co-authored-by: malilaroussi --- src/canmatrix/formats/fibex.py | 54 +++++++++++++++++----------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index 35cc4625..ae7dbe81 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -129,36 +129,36 @@ def get_multiplexing_parts_infos(signals, frame_name, start_pos=-1, end_pos=-1, return start_pos, end_pos, seg_big_endian -def get_base_data_type(bit_length, is_signed=False): +def get_base_data_type(signal): # type: (int, bool) -> str - if bit_length > 0 and bit_length <= 8: - if is_signed: + if signal.is_float: + if (signal.size<=32): + return "A_FLOAT32" + else: + return "A_FLOAT64" + + if signal.size > 0 and signal.size <= 8: + if signal.is_signed: return "A_INT8" - - elif not is_signed: + + elif not signal.is_signed: return "A_UINT8" - - elif bit_length > 8 and bit_length <= 16: - if is_signed: - return "A_INT16" - elif not is_signed: - return "A_UINT16" - - elif bit_length > 16 and bit_length <= 32: - if is_signed: - return "A_INT32" - - elif not is_signed: - return "A_UINT32" - - elif bit_length > 32 and bit_length <= 64: - if is_signed: - return "A_INT64" - - elif not is_signed: - return "A_UINT64" - + elif signal.size > 8 and signal.size <= 16: + if signal.is_signed: + return "A_INT16" + elif not signal.is_signed: + return "A_UINT16" + elif signal.size > 16 and signal.size <= 32: + if signal.is_signed: + return "A_INT32" + elif not signal.is_signed: + return "A_UINT32" + elif signal.size > 32 and signal.size <= 64: + if signal.is_signed: + return "A_INT64" + elif not signal.is_signed: + return "A_UINT64" class Fe: def __init__(self, filename): self.tree = lxml.etree.parse(filename) @@ -791,7 +791,7 @@ def dump(db, f, **options): signal_id) coded = create_sub_element_ho(coding, "CODED-TYPE") - base_data_type = get_base_data_type(signal.size, signal.is_signed) + base_data_type = get_base_data_type(signal) if base_data_type is not None: coded.set(ns_ho + "BASE-DATA-TYPE", base_data_type) coded.set("CATEGORY", "STANDARD-LENGTH-TYPE") From 877db6bb7659b1e3958a1f72272e51ada4e72e99 Mon Sep 17 00:00:00 2001 From: Dalilaroussi <33608024+Dalilaroussi@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:31:12 +0100 Subject: [PATCH 49/61] fix condition of get base type (#819) Co-authored-by: malilaroussi --- src/canmatrix/formats/fibex.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index ae7dbe81..95a7601d 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -130,7 +130,7 @@ def get_multiplexing_parts_infos(signals, frame_name, start_pos=-1, end_pos=-1, return start_pos, end_pos, seg_big_endian def get_base_data_type(signal): - # type: (int, bool) -> str + # type: (Signal) -> str if signal.is_float: if (signal.size<=32): return "A_FLOAT32" @@ -140,21 +140,20 @@ def get_base_data_type(signal): if signal.size > 0 and signal.size <= 8: if signal.is_signed: return "A_INT8" - elif not signal.is_signed: return "A_UINT8" - elif signal.size > 8 and signal.size <= 16: + elif signal.size > 8 and signal.size <= 16: if signal.is_signed: return "A_INT16" elif not signal.is_signed: return "A_UINT16" - elif signal.size > 16 and signal.size <= 32: + elif signal.size > 16 and signal.size <= 32: if signal.is_signed: return "A_INT32" elif not signal.is_signed: return "A_UINT32" - elif signal.size > 32 and signal.size <= 64: + elif signal.size > 32 and signal.size <= 64: if signal.is_signed: return "A_INT64" elif not signal.is_signed: From 7fde13516e5c51b4b3fad47764e194f777cbd8dd Mon Sep 17 00:00:00 2001 From: Alexandre Detiste Date: Tue, 26 Nov 2024 11:09:29 +0100 Subject: [PATCH 50/61] remove more Python2 hybridation (#822) * remove more Python2 hybridation * re-reduce scope of try/catch block --- examples/BusmasterRestbus.py | 1 - src/canmatrix/__init__.py | 1 - src/canmatrix/cancluster.py | 1 - src/canmatrix/cli/compare.py | 4 +--- src/canmatrix/cli/convert.py | 4 +--- src/canmatrix/compare.py | 6 ++---- src/canmatrix/convert.py | 2 -- src/canmatrix/copy.py | 2 -- src/canmatrix/formats/__init__.py | 1 - src/canmatrix/formats/arxml.py | 2 -- src/canmatrix/formats/csv.py | 20 ++++++-------------- src/canmatrix/formats/dbc.py | 2 -- src/canmatrix/formats/dbf.py | 1 - src/canmatrix/formats/fibex.py | 2 -- src/canmatrix/formats/json.py | 25 +++++++------------------ src/canmatrix/formats/kcd.py | 2 -- src/canmatrix/formats/ldf.py | 2 -- src/canmatrix/formats/odx.py | 2 -- src/canmatrix/formats/scapy.py | 2 -- src/canmatrix/formats/sym.py | 2 -- src/canmatrix/formats/xls.py | 2 -- src/canmatrix/formats/xls_common.py | 2 -- src/canmatrix/formats/xlsx.py | 2 -- src/canmatrix/formats/yaml.py | 2 -- src/canmatrix/j1939_decoder.py | 2 -- src/canmatrix/join.py | 1 - src/canmatrix/log.py | 2 -- src/canmatrix/utils.py | 5 +---- tests/createTestMatrix.py | 8 ++------ tests/test.py | 2 -- 30 files changed, 20 insertions(+), 92 deletions(-) diff --git a/examples/BusmasterRestbus.py b/examples/BusmasterRestbus.py index 96bc2b59..61941f82 100755 --- a/examples/BusmasterRestbus.py +++ b/examples/BusmasterRestbus.py @@ -19,7 +19,6 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. -from __future__ import division import math from struct import * import zipfile diff --git a/src/canmatrix/__init__.py b/src/canmatrix/__init__.py index f8ddc5c8..b8cb9a9b 100644 --- a/src/canmatrix/__init__.py +++ b/src/canmatrix/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import import logging import canmatrix._version diff --git a/src/canmatrix/cancluster.py b/src/canmatrix/cancluster.py index 54155bff..81e0bcd3 100644 --- a/src/canmatrix/cancluster.py +++ b/src/canmatrix/cancluster.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function import typing from builtins import * diff --git a/src/canmatrix/cli/compare.py b/src/canmatrix/cli/compare.py index 26a8788a..c34c374d 100644 --- a/src/canmatrix/cli/compare.py +++ b/src/canmatrix/cli/compare.py @@ -21,8 +21,6 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. -from __future__ import absolute_import, division, print_function - import logging import sys import typing @@ -105,4 +103,4 @@ def cli_compare(matrix1, matrix2, verbosity, silent, check_comments, check_attri # to be run as module `python -m canmatrix.compare`, NOT as script with argument `canmatrix/compare.py` if __name__ == '__main__': - sys.exit(cli_compare()) \ No newline at end of file + sys.exit(cli_compare()) diff --git a/src/canmatrix/cli/convert.py b/src/canmatrix/cli/convert.py index 60595bd9..834c34ee 100644 --- a/src/canmatrix/cli/convert.py +++ b/src/canmatrix/cli/convert.py @@ -21,8 +21,6 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. -from __future__ import absolute_import, division, print_function - import logging import sys @@ -160,4 +158,4 @@ def cli_convert(infile, outfile, silent, verbosity, **options): if __name__ == '__main__': - sys.exit(cli_convert()) \ No newline at end of file + sys.exit(cli_convert()) diff --git a/src/canmatrix/compare.py b/src/canmatrix/compare.py index c18a8316..24ce0dcc 100644 --- a/src/canmatrix/compare.py +++ b/src/canmatrix/compare.py @@ -19,8 +19,6 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. -from __future__ import absolute_import, division, print_function - import logging import sys import typing @@ -36,7 +34,7 @@ @attr.s -class CompareResult(object): +class CompareResult: """Hold comparison results in logical tree.""" result = attr.ib(default=None) # type: typing.Optional[str] # any of equal, added, deleted, changed type = attr.ib(default=None) # type: typing.Optional[str] # db, ecu, frame, signal, signalGroup or attribute @@ -508,4 +506,4 @@ def dump_result(res, depth=0): " new: " + str(res.changes[1])) for child in res.children: - dump_result(child, depth + 1) \ No newline at end of file + dump_result(child, depth + 1) diff --git a/src/canmatrix/convert.py b/src/canmatrix/convert.py index ddc3ea54..4c4151ca 100644 --- a/src/canmatrix/convert.py +++ b/src/canmatrix/convert.py @@ -19,8 +19,6 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. -from __future__ import absolute_import, division, print_function - import copy import logging import sys diff --git a/src/canmatrix/copy.py b/src/canmatrix/copy.py index 6ceeca4a..a2a881a6 100644 --- a/src/canmatrix/copy.py +++ b/src/canmatrix/copy.py @@ -19,8 +19,6 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. -from __future__ import absolute_import, division, print_function - import copy import logging import typing diff --git a/src/canmatrix/formats/__init__.py b/src/canmatrix/formats/__init__.py index d3d3b979..28dd6b9e 100644 --- a/src/canmatrix/formats/__init__.py +++ b/src/canmatrix/formats/__init__.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function import importlib import logging diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 6ea6df74..bff1970e 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -25,8 +25,6 @@ # currently Support for Autosar 3.2 and 4.0-4.3 is planned # AUTOSAR 4.2.2 is partial support -> 2024/05/20 -from __future__ import absolute_import, division, print_function - import copy import decimal import logging diff --git a/src/canmatrix/formats/csv.py b/src/canmatrix/formats/csv.py index 5f475acd..90918faf 100644 --- a/src/canmatrix/formats/csv.py +++ b/src/canmatrix/formats/csv.py @@ -23,8 +23,6 @@ # this script exports canmatrix-objects to a CSV file. (Based on xlsx) # Author: Martin Hoffmann (m8ddin@gmail.com) -from __future__ import absolute_import, division, print_function - import collections import csv import logging @@ -47,9 +45,6 @@ def __getitem__(self, key): # type: (int) -> CsvDataType return self._row_dict[key] def __setitem__(self, key, item): # type: (int, CsvDataType) -> None - if sys.version_info <= (3, 0): - if type(item).__name__ == "unicode": - item = item.encode('utf-8') self._row_dict[key] = item def __add__(self, other): # type: (typing.Iterable[CsvDataType]) -> CsvRow @@ -263,11 +258,8 @@ def dump(db, file_object, delimiter=',', **options): # loop over signals ends here # loop over frames ends here - if sys.version_info > (3, 0): - import io - temp = io.TextIOWrapper(file_object, encoding='UTF-8') - else: - temp = file_object + import io + temp = io.TextIOWrapper(file_object, encoding='UTF-8') try: writer = csv.writer(temp, delimiter=delimiter) @@ -279,7 +271,7 @@ def dump(db, file_object, delimiter=',', **options): # [row.toCSV(delimiter) for row in csv_table]) # print(finalTableString) finally: - if sys.version_info > (3, 0): - # When TextIOWrapper is garbage collected, it closes the raw stream - # unless the raw stream is detached first - temp.detach() + # When TextIOWrapper is garbage collected, it closes the raw stream + # unless the raw stream is detached first + temp.detach() + diff --git a/src/canmatrix/formats/dbc.py b/src/canmatrix/formats/dbc.py index 965459e2..84400218 100644 --- a/src/canmatrix/formats/dbc.py +++ b/src/canmatrix/formats/dbc.py @@ -23,8 +23,6 @@ # this script exports dbc-files from a canmatrix-object # dbc-files are the can-matrix-definitions of the CANoe (Vector Informatic) -from __future__ import absolute_import, division, print_function - import collections import copy import decimal diff --git a/src/canmatrix/formats/dbf.py b/src/canmatrix/formats/dbf.py index ee45bae2..8b5a780f 100644 --- a/src/canmatrix/formats/dbf.py +++ b/src/canmatrix/formats/dbf.py @@ -23,7 +23,6 @@ # this script imports dbf-files in a canmatrix-object # dbf-files are the can-matrix-definitions of the busmaster-project (http://rbei-etas.github.io/busmaster/) # -from __future__ import absolute_import, division, print_function import copy import decimal diff --git a/src/canmatrix/formats/fibex.py b/src/canmatrix/formats/fibex.py index 95a7601d..173bffaf 100644 --- a/src/canmatrix/formats/fibex.py +++ b/src/canmatrix/formats/fibex.py @@ -25,8 +25,6 @@ # only (fibex: Field Bus Exchange Format // # https://de.wikipedia.org/wiki/Field_Bus_Exchange_Format) -from __future__ import absolute_import, division, print_function - import os import typing from builtins import * diff --git a/src/canmatrix/formats/json.py b/src/canmatrix/formats/json.py index bffc4330..7ce56b04 100644 --- a/src/canmatrix/formats/json.py +++ b/src/canmatrix/formats/json.py @@ -24,10 +24,7 @@ # json-files are the can-matrix-definitions of the CANard-project # (https://github.com/ericevenchick/CANard) -from __future__ import absolute_import, division, print_function - import json -import sys import typing from builtins import * import decimal @@ -181,20 +178,16 @@ def dump(db, f, **options): "header_id": frame.header_id, "pdu_name": frame.pdu_name, "transmitters": frame.transmitters}) - if sys.version_info > (3, 0): - import io - temp = io.TextIOWrapper(f, encoding='UTF-8') - else: - temp = f + import io + temp = io.TextIOWrapper(f, encoding='UTF-8') try: json.dump(export_dict, temp, sort_keys=True, indent=4, separators=(',', ': ')) finally: - if sys.version_info > (3, 0): - # When TextIOWrapper is garbage collected, it closes the raw stream - # unless the raw stream is detached first - temp.detach() + # When TextIOWrapper is garbage collected, it closes the raw stream + # unless the raw stream is detached first + temp.detach() def load(f, **_options): @@ -202,12 +195,8 @@ def load(f, **_options): db = canmatrix.CanMatrix() - if sys.version_info > (3, 0): - import io - json_data = json.load(io.TextIOWrapper(f, encoding='UTF-8')) - else: - - json_data = json.load(f) + import io + json_data = json.load(io.TextIOWrapper(f, encoding='UTF-8')) if "enumerations" in json_data: for val_tab_name, val_tab_dict in json_data['enumerations'].items(): diff --git a/src/canmatrix/formats/kcd.py b/src/canmatrix/formats/kcd.py index 929f5b35..2abf64c7 100644 --- a/src/canmatrix/formats/kcd.py +++ b/src/canmatrix/formats/kcd.py @@ -24,8 +24,6 @@ # kcd-files are the can-matrix-definitions of the kayak # (http://kayak.2codeornot2code.org/) -from __future__ import absolute_import, division, print_function - import decimal import os import re diff --git a/src/canmatrix/formats/ldf.py b/src/canmatrix/formats/ldf.py index c239724e..51de6da8 100644 --- a/src/canmatrix/formats/ldf.py +++ b/src/canmatrix/formats/ldf.py @@ -1,5 +1,3 @@ -from __future__ import absolute_import - import ldfparser import canmatrix import ldfparser.encoding diff --git a/src/canmatrix/formats/odx.py b/src/canmatrix/formats/odx.py index 763bcdba..27e976a1 100644 --- a/src/canmatrix/formats/odx.py +++ b/src/canmatrix/formats/odx.py @@ -1,5 +1,3 @@ -from __future__ import print_function - from lxml import etree import canmatrix.formats import decimal diff --git a/src/canmatrix/formats/scapy.py b/src/canmatrix/formats/scapy.py index 7a5c47d4..0f8219ae 100644 --- a/src/canmatrix/formats/scapy.py +++ b/src/canmatrix/formats/scapy.py @@ -22,8 +22,6 @@ # this script exports scapy python files # https://scapy.readthedocs.io/en/latest/advanced_usage.html#automotive-usage -from __future__ import absolute_import, division, print_function - import textwrap import typing from builtins import * diff --git a/src/canmatrix/formats/sym.py b/src/canmatrix/formats/sym.py index 60baa48d..4ce3ca3b 100644 --- a/src/canmatrix/formats/sym.py +++ b/src/canmatrix/formats/sym.py @@ -23,8 +23,6 @@ # this script exports sym-files from a canmatrix-object # sym-files are the can-matrix-definitions of the Peak Systems Tools -from __future__ import absolute_import, division, print_function - import collections import decimal import logging diff --git a/src/canmatrix/formats/xls.py b/src/canmatrix/formats/xls.py index e9a7612f..b25bb280 100644 --- a/src/canmatrix/formats/xls.py +++ b/src/canmatrix/formats/xls.py @@ -23,8 +23,6 @@ # this script exports xls-files from a canmatrix-object # xls-files are the can-matrix-definitions displayed in Excel -from __future__ import absolute_import, division, print_function - import decimal import logging import typing diff --git a/src/canmatrix/formats/xls_common.py b/src/canmatrix/formats/xls_common.py index a4a3c9a6..dc792233 100644 --- a/src/canmatrix/formats/xls_common.py +++ b/src/canmatrix/formats/xls_common.py @@ -19,8 +19,6 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. -from __future__ import absolute_import, division, print_function - import typing from builtins import * diff --git a/src/canmatrix/formats/xlsx.py b/src/canmatrix/formats/xlsx.py index 5f24348a..68d7ce1d 100644 --- a/src/canmatrix/formats/xlsx.py +++ b/src/canmatrix/formats/xlsx.py @@ -23,8 +23,6 @@ # this script exports xls-files from a canmatrix-object # xls-files are the can-matrix-definitions displayed in Excel -from __future__ import absolute_import, division, print_function - import logging import typing from builtins import * diff --git a/src/canmatrix/formats/yaml.py b/src/canmatrix/formats/yaml.py index 0cb656b2..0efdeeb9 100644 --- a/src/canmatrix/formats/yaml.py +++ b/src/canmatrix/formats/yaml.py @@ -23,8 +23,6 @@ # yaml-files are just object-dumps human readable. # This export is complete, no information lost -from __future__ import absolute_import, division, print_function - import copy import typing from builtins import * diff --git a/src/canmatrix/j1939_decoder.py b/src/canmatrix/j1939_decoder.py index 3cd03c6f..840047dc 100644 --- a/src/canmatrix/j1939_decoder.py +++ b/src/canmatrix/j1939_decoder.py @@ -1,6 +1,4 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function - from builtins import * import attr diff --git a/src/canmatrix/join.py b/src/canmatrix/join.py index a2b921ab..3b143b62 100644 --- a/src/canmatrix/join.py +++ b/src/canmatrix/join.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function import typing from builtins import * diff --git a/src/canmatrix/log.py b/src/canmatrix/log.py index 3a38e0f1..9db1f693 100644 --- a/src/canmatrix/log.py +++ b/src/canmatrix/log.py @@ -22,8 +22,6 @@ # Configurable logging # Author: Martin Hoffmann (m8ddin@gmail.com) -from __future__ import absolute_import, division, print_function - import logging diff --git a/src/canmatrix/utils.py b/src/canmatrix/utils.py index edf69966..2074481c 100644 --- a/src/canmatrix/utils.py +++ b/src/canmatrix/utils.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import, division, print_function import csv import shlex @@ -16,9 +15,7 @@ def quote_aware_space_split(in_line): # type: (str) -> typing.List[str] - if sys.version_info >= (3, 0): # is there a clean way to to it? - return shlex.split(in_line.strip()) - return [item.decode('utf-8') for item in shlex.split(in_line.strip().encode('utf-8'))] + return shlex.split(in_line.strip()) # https://stackoverflow.com/questions/18092354/python-split-string-without-splitting-escaped-character diff --git a/tests/createTestMatrix.py b/tests/createTestMatrix.py index 1645e963..fbfa5cb1 100644 --- a/tests/createTestMatrix.py +++ b/tests/createTestMatrix.py @@ -17,12 +17,8 @@ myFrame = Frame("testFrame1", Id=0x123, dlc=8, transmitter="testBU") -if sys.version_info > (3, 0): - unit = u"specialCharUnit°$" - comment = u"Multi \n Line \n Signal comment with a-umlaut: ä" -else: - unit = "specialCharUnit°$".decode("utf-8") - comment = "Multi \n Line \n Signal comment with a-umlaut: ä".decode("utf-8") +unit = "specialCharUnit°$" +comment = "Multi \n Line \n Signal comment with a-umlaut: ä" mySignal = Signal("someTestSignal", signalSize=11, diff --git a/tests/test.py b/tests/test.py index 90f0983a..1b9887d9 100644 --- a/tests/test.py +++ b/tests/test.py @@ -1,7 +1,5 @@ #!/usr/bin/env python3 -from __future__ import absolute_import, division, print_function - import copy import os import shutil From d4427294c7e35f8e2ff264a4d2a71cf840876c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Thu, 2 Jan 2025 10:10:18 +0100 Subject: [PATCH 51/61] speedup for frame_by_id (#825) * speedup for frame_by_id #774 * speedup for frame_by_id #774 * speedup for frame_by_id #774 --- src/canmatrix/canmatrix.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index f88f5a53..e09a1a93 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -1793,7 +1793,7 @@ class CanMatrix(object): frames_dict_name = attr.ib(factory=dict) # type: typing.MutableSequence[Frame] frames_dict_id = attr.ib(factory=dict) # type: typing.MutableSequence[Frame] - + _frames_dict_id_extend = {} signal_defines = attr.ib(factory=dict) # type: typing.MutableMapping[str, Define] frame_defines = attr.ib(factory=dict) # type: typing.MutableMapping[str, Define] global_defines = attr.ib(factory=dict) # type: typing.MutableMapping[str, Define] @@ -1985,10 +1985,16 @@ def frame_by_id(self, arbitration_id): # type: (ArbitrationId) -> typing.Union[ :param ArbitrationId arbitration_id: Frame id as canmatrix.ArbitrationId :rtype: Frame or None """ - for test in self.frames: - if test.arbitration_id == arbitration_id: + hash_name = f"{arbitration_id.id}_{arbitration_id.extended}" + + frame = self._frames_dict_id_extend.get(hash_name, None) + if frame is not None: + return frame + for frame in self.frames: + if frame.arbitration_id == arbitration_id: # found ID while ignoring extended or standard - return test + self._frames_dict_id_extend[hash_name] = frame + return frame return None def frame_by_header_id(self, header_id): # type: (HeaderId) -> typing.Union[Frame, None] @@ -2090,7 +2096,7 @@ def add_frame(self, frame): # type: (Frame) -> Frame :return: the inserted Frame """ self.frames.append(frame) - + self._frames_dict_id_extend = {} self.frames_dict_name[frame.name] = frame if frame.header_id: self.frames_dict_id[frame.header_id] = frame @@ -2105,6 +2111,7 @@ def remove_frame(self, frame): # type: (Frame) -> None :param Frame frame: frame to remove from CAN Matrix """ self.frames.remove(frame) + self._frames_dict_id_extend = {} def add_signal(self, signal): # type: (Signal) -> Signal """ @@ -2199,6 +2206,8 @@ def add_ecu(self, ecu): # type(Ecu) -> None # todo return Ecu? if bu.name.strip() == ecu.name: return self.ecus.append(ecu) + self._frames_dict_id_extend = {} + def del_ecu(self, ecu_or_glob): # type: (typing.Union[Ecu, str]) -> None """Remove ECU from Matrix and all Frames. @@ -2369,6 +2378,7 @@ def merge(self, mergeArray): # type: (typing.Sequence[CanMatrix]) -> None else: logger.error( "Name Conflict, could not copy/merge EnvVar " + envVar) + self._frames_dict_id_extend = {} def set_fd_type(self) -> None: """Try to guess and set the CAN type for every frame. From f02e0806dedc7e38be00bec0e1b36c1f207472ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Thu, 2 Jan 2025 10:10:51 +0100 Subject: [PATCH 52/61] xls load: (#762) allow to explicite overwrite factor (#824) --- src/canmatrix/formats/xls.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/formats/xls.py b/src/canmatrix/formats/xls.py index b25bb280..b7d2a77c 100644 --- a/src/canmatrix/formats/xls.py +++ b/src/canmatrix/formats/xls.py @@ -545,7 +545,9 @@ def load(file, **options): unit = unit.strip() new_signal.unit = unit try: - new_signal.factor = float_factory(factor) + # if prevents overwriting explicit factor (if given) + if new_signal.factor in (1, 1.0): + new_signal.factor = float_factory(factor) except: logger.warning( "Some error occurred while decoding scale of Signal %s: '%s'", From 44d3121db01f2d15022e3f9e19352955d0c4ed2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Thu, 2 Jan 2025 10:11:40 +0100 Subject: [PATCH 53/61] store multiple scalings per signal (LDF-import) (#823) --- src/canmatrix/canmatrix.py | 2 +- src/canmatrix/formats/ldf.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/canmatrix/canmatrix.py b/src/canmatrix/canmatrix.py index e09a1a93..b1c50759 100644 --- a/src/canmatrix/canmatrix.py +++ b/src/canmatrix/canmatrix.py @@ -191,7 +191,7 @@ class Signal(object): cycle_time = attr.ib(default=0) # type: int initial_value = attr.ib(converter=float_factory, default=float_factory(0.0)) # type: canmatrix.types.PhysicalValue - + scale_ranges = attr.ib(factory=list) min = attr.ib( converter=lambda value, float_factory=float_factory: ( float_factory(value) diff --git a/src/canmatrix/formats/ldf.py b/src/canmatrix/formats/ldf.py index 51de6da8..7b4ba715 100644 --- a/src/canmatrix/formats/ldf.py +++ b/src/canmatrix/formats/ldf.py @@ -25,6 +25,12 @@ def load(f, **options): # type: (typing.IO, **typing.Any) -> canmatrix.CanMatri if isinstance(converter, ldfparser.encoding.LogicalValue): cm_signal.add_values(converter.phy_value, converter.info) if isinstance(converter, ldfparser.encoding.PhysicalValue): + cm_signal.scale_ranges.append({ + "min" : converter.phy_min, + "max" : converter.phy_max, + "factor" : converter.scale, + "offset" : converter.offset, + "unit" : converter.unit}) cm_signal.offset = converter.offset cm_signal.factor = converter.scale cm_signal.unit = converter.unit From 9a70a859c59d387607fa7e0e1181737f07368d53 Mon Sep 17 00:00:00 2001 From: xRowe <33739292+xRowe@users.noreply.github.com> Date: Thu, 2 Jan 2025 17:13:11 +0800 Subject: [PATCH 54/61] Hotfix_ARXML_Ethernet_Decode_Transmitters_Receivers (#828) --- src/canmatrix/formats/arxml.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index bff1970e..717c907a 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -1960,18 +1960,20 @@ def decode_ethernet_helper(ea, float_factory): try: target_frame.header_id = int(pdu_triggering_header_id_map[ipdu_triggering], 0) except: - target_frame.header_id = 0 - # continue - + pass + + # In Case Neither transmitter Nor receiver if comm_direction.text == "OUT": target_frame.add_transmitter(ecu.name) - else: + elif comm_direction.text == "IN": target_frame.add_receiver(ecu.name) + else: + pass pdu_sig_mapping = ea.findall("I-SIGNAL-TO-I-PDU-MAPPING", ipdu) get_signals(pdu_sig_mapping, target_frame, ea, None, float_factory) - target_frame.update_receiver() + # target_frame.update_receiver() # It will make transmitter and receiver worse db.add_frame(target_frame) return found_matrixes @@ -2089,10 +2091,14 @@ def decode_can_helper(ea, float_factory, ignore_cluster_info): else: ecu = process_ecu(ecu_elem, ea) nodes[ecu_elem] = ecu + + # In Case Neither transmitter Nor receiver if comm_direction.text == "OUT": frame.add_transmitter(ecu.name) - else: + elif comm_direction.text == "IN": frame.add_receiver(ecu.name) + else: + pass db.add_ecu(ecu) db.add_frame(frame) for frame in db.frames: From ab25b1778173dbad7ed01f6c5630b372c7bce301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Fri, 24 Jan 2025 18:20:27 +0100 Subject: [PATCH 55/61] Eds bugfixing (#830) Lots of updates for EDS file format, thanks @MatinF documented in #488 dbc: fix SIG_MUL_VAL_ for autmatically renamed signals --- .github/workflows/ci.yml | 2 +- appveyor.yml | 1 - src/canmatrix/formats/dbc.py | 4 +- src/canmatrix/formats/eds.py | 295 +++++++++++++++++++++++------------ 4 files changed, 200 insertions(+), 102 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 54d8549b..7601a3d8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: # os: [ubuntu-latest] experimental: [false] # python-version: ["2.7","3.4","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.12"] - python-version: ["3.7","3.8","3.9","3.10","3.11","3.12"] + python-version: ["3.8","3.9","3.10","3.11","3.12", "3.13"] fail-fast: false steps: - uses: actions/checkout@v4 diff --git a/appveyor.yml b/appveyor.yml index f993c54e..33e35883 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,7 +7,6 @@ skip_branch_with_pr: true environment: matrix: - - TOXENV: py37 - TOXENV: py38 - TOXENV: py39 - TOXENV: py310 diff --git a/src/canmatrix/formats/dbc.py b/src/canmatrix/formats/dbc.py index 84400218..3bf6b90c 100644 --- a/src/canmatrix/formats/dbc.py +++ b/src/canmatrix/formats/dbc.py @@ -223,6 +223,8 @@ def dump(in_db, f, **options): # remove "-" from frame names if compatibility: frame.name = re.sub("[^A-Za-z0-9]", whitespace_replacement, frame.name) + if frame.name[0].isdigit(): + frame.name = "_" + frame.name duplicate_signal_totals = collections.Counter(normalized_names.values()) duplicate_signal_counter = collections.Counter() # type: typing.Counter[str] @@ -459,7 +461,7 @@ def dump(in_db, f, **options): if frame.is_complex_multiplexed: for signal in frame.signals: if signal.muxer_for_signal is not None: - f.write(("SG_MUL_VAL_ %d %s %s " % (frame.arbitration_id.to_compound_integer(), signal.name, signal.muxer_for_signal)).encode(dbc_export_encoding, ignore_encoding_errors)) + f.write(("SG_MUL_VAL_ %d %s %s " % (frame.arbitration_id.to_compound_integer(), output_names[frame][signal], signal.muxer_for_signal)).encode(dbc_export_encoding, ignore_encoding_errors)) f.write((", ".join(["%d-%d" % (a, b) for a, b in signal.mux_val_grp])).encode(dbc_export_encoding, ignore_encoding_errors)) f.write(";\n".encode(dbc_export_encoding, ignore_encoding_errors)) diff --git a/src/canmatrix/formats/eds.py b/src/canmatrix/formats/eds.py index 7c5c7e6f..11c37474 100644 --- a/src/canmatrix/formats/eds.py +++ b/src/canmatrix/formats/eds.py @@ -4,7 +4,9 @@ import canopen.objectdictionary.eds import canopen.objectdictionary.datatypes import codecs - +import copy +import re +import math logger = logging.getLogger(__name__) @@ -33,129 +35,224 @@ 0x82: 'Reset Communication'} -def get_signals(parent_object, signal_receiver): - signals = [] - position = 0 - for sub in range(1, len(parent_object)): - name = parent_object[sub].name - size = datatype_mapping[parent_object[sub].data_type][1] - unsigned = "UNSIGNED" in datatype_mapping[parent_object[sub].data_type][0] - signal = canmatrix.Signal(name = name, receivers=[signal_receiver], size=size, start_bit = position, is_signed = not unsigned) - position += size - signals.append(signal) - return signals +def name_cleanup(in_str): + rets_str = re.sub("[^A-Za-z0-9]", '_', in_str) + return rets_str +def get_bit_length(data_type_code): + return datatype_mapping[data_type_code][1] +def get_data_type_name(data_type_code): + return datatype_mapping[data_type_code][0] + +def format_index(index, subindex): + return f"Index: 0x{index:04X}{subindex:02X}" def load(f, **options): # type: (typing.IO, **typing.Any) -> canmatrix.CanMatrix eds_import_encoding = options.get("edsImportEncoding", 'iso-8859-1') - node_id = options.get("eds_node_id", 1) + node_id = options.get("eds_node_id", 0) + generic = options.get("generic", False) fp = codecs.getreader(eds_import_encoding)(f) od = canopen.objectdictionary.eds.import_eds(fp, node_id) db = canmatrix.CanMatrix() + signal_group_counter = 1 node_name = od.device_information.product_name + if len(node_name) == 0: + node_name = "DUMMY" plc_name = "PLC" + if generic is True: + nm_out = canmatrix.canmatrix.Frame(name="NMT_Out_Request", size=2, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0), transmitters=[plc_name]) + sig_cmd = canmatrix.canmatrix.Signal(name="nmt_CMD", size=8, start_bit = 0, receivers=[node_name]) + for val, val_name in cmd_values.items(): + sig_cmd.add_values(val, val_name) + nm_out.add_signal(sig_cmd) + nm_out.add_signal(canmatrix.canmatrix.Signal(name="Node_ID", size=8, start_bit = 8, receivers=[node_name])) + db.add_frame(nm_out) + + nm_responde = canmatrix.canmatrix.Frame(name="NMT_Response_Frame_In", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x700+node_id), transmitters=[node_name]) + response_sig1 = canmatrix.canmatrix.Signal(name="NMT_Response_1", size=32, start_bit = 0, receivers=[plc_name]) + nm_responde.add_signal(response_sig1) + response_sig2 = canmatrix.canmatrix.Signal(name="NMT_Response_1", size=32, start_bit = 32, receivers=[plc_name]) + nm_responde.add_signal(response_sig2) + db.add_frame(nm_responde) + + sync = canmatrix.canmatrix.Frame(name="SYNC", size=0, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x80), transmitters=[plc_name]) + db.add_frame(sync) + + emcy = canmatrix.canmatrix.Frame(name="EMCY", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x80+node_id), transmitters=[node_name]) + emcy.add_signal(canmatrix.canmatrix.Signal(name="EMCY_Error_Code", size=16, start_bit=0, receivers=[plc_name])) + emcy.add_signal(canmatrix.canmatrix.Signal(name="E_Reg", size=8, start_bit=16, receivers=[plc_name])) + emcy.add_signal(canmatrix.canmatrix.Signal(name="E_Number", size=8, start_bit=24, receivers=[plc_name])) + db.add_frame(emcy) - nm_out = canmatrix.canmatrix.Frame(name="NMT_Out_Request", size=2, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0), transmitters=[plc_name]) - sig_cmd = canmatrix.canmatrix.Signal(name="nmt_CMD", size=8, start_bit = 0, receivers=[node_name]) - for val, val_name in cmd_values.items(): - sig_cmd.add_values(val, val_name) - nm_out.add_signal(sig_cmd) - nm_out.add_signal(canmatrix.canmatrix.Signal(name="Node_ID", size=8, start_bit = 8, receivers=[node_name])) - db.add_frame(nm_out) - - nm_responde = canmatrix.canmatrix.Frame(name="NMT_Response_Frame_In", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x700+node_id), transmitters=[node_name]) - response_sig1 = canmatrix.canmatrix.Signal(name="NMT_Response_1", size=32, start_bit = 0, receivers=[plc_name]) - nm_responde.add_signal(response_sig1) - response_sig2 = canmatrix.canmatrix.Signal(name="NMT_Response_1", size=32, start_bit = 32, receivers=[plc_name]) - nm_responde.add_signal(response_sig2) - db.add_frame(nm_responde) - - sync = canmatrix.canmatrix.Frame(name="SYNC", size=0, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x80), transmitters=[plc_name]) - db.add_frame(sync) - - emcy = canmatrix.canmatrix.Frame(name="EMCY", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x80+node_id), transmitters=[node_name]) - emcy.add_signal(canmatrix.canmatrix.Signal(name="EMCY_Error_Code", size=16, start_bit=0, receivers=[plc_name])) - emcy.add_signal(canmatrix.canmatrix.Signal(name="E_Reg", size=8, start_bit=16, receivers=[plc_name])) - emcy.add_signal(canmatrix.canmatrix.Signal(name="E_Number", size=8, start_bit=24, receivers=[plc_name])) - db.add_frame(emcy) - - sdo_down = canmatrix.canmatrix.Frame(name="SDO_download", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x600+node_id), transmitters=[node_name]) - sig_cmd = canmatrix.canmatrix.Signal(name="sdo_down_CMD", size=8, start_bit=0, receivers=[plc_name]) + sdo_down = canmatrix.canmatrix.Frame(name="SDO_receive", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x600+node_id), transmitters=[node_name]) + sig_cmd = canmatrix.canmatrix.Signal(name="CCS", size=3, start_bit=5, receivers=[plc_name], is_signed=False) sig_cmd.is_multiplexer = True + sdo_down.is_complex_multiplexed = True sig_cmd.multiplex = "Multiplexor" sdo_down.add_signal(sig_cmd) - sdo_down.add_signal(canmatrix.canmatrix.Signal(name="sdo_down_IDX", size=16, start_bit=8, receivers=[plc_name])) - sdo_down.add_signal(canmatrix.canmatrix.Signal(name="sdo_down_SUBIDX", size=8, start_bit=24, receivers=[plc_name])) - sdo_down.add_signal(canmatrix.canmatrix.Signal(name="data8", size=8, start_bit=32, receivers=[plc_name], multiplex=0x2f)) - sig_cmd.add_values(0x2f, "8_bytes") - sdo_down.add_signal(canmatrix.canmatrix.Signal(name="data16", size=16, start_bit=32, receivers=[plc_name], multiplex=0x2b)) - sig_cmd.add_values(0x2b, "16_bytes") - sdo_down.add_signal(canmatrix.canmatrix.Signal(name="data24", size=24, start_bit=32, receivers=[plc_name], multiplex=0x27)) - sig_cmd.add_values(0x27, "3_bytes") - sdo_down.add_signal(canmatrix.canmatrix.Signal(name="data32", size=32, start_bit=32, receivers=[plc_name], multiplex=0x23)) - sig_cmd.add_values(0x23, "4_bytes") - sig_cmd.add_values(0x40, "upload_request") + index = canmatrix.canmatrix.Signal(name="IDX", size=24, start_bit=8, receivers=[plc_name]) + index.multiplex = "Multiplexor" + index.is_multiplexer = True + index.mux_val = 1 + index.mux_val_grp.append([ 2, 2]) + index.muxer_for_signal = "CCS" + sdo_down.add_signal(index) db.add_frame(sdo_down) - sdo_up = canmatrix.canmatrix.Frame(name="SDO_upload", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x580+node_id), transmitters=[plc_name]) - sig_cmd = canmatrix.canmatrix.Signal(name="sdo_state", size=8, start_bit=0, receivers=[node_name]) + sdo_up = canmatrix.canmatrix.Frame(name="SDO_transmit", size=8, arbitration_id=canmatrix.canmatrix.ArbitrationId(id=0x580+node_id), transmitters=[plc_name]) + sig_cmd = canmatrix.canmatrix.Signal(name="SCS", size=3, start_bit=5, is_signed=False) sig_cmd.is_multiplexer = True + sdo_up.is_complex_multiplexed = True sig_cmd.multiplex = "Multiplexor" sdo_up.add_signal(sig_cmd) - sdo_up.add_signal(canmatrix.canmatrix.Signal(name="sdo_uo_IDX", size=16, start_bit=8, receivers=[node_name])) - sdo_up.add_signal(canmatrix.canmatrix.Signal(name="sdo_up_SUBIDX", size=8, start_bit=24, receivers=[node_name])) - sdo_up.add_signal(canmatrix.canmatrix.Signal(name="error_code", size=32, start_bit=32, receivers=[node_name], multiplex=0x80)) - sig_cmd.add_values(0x80, "upload_error") - - sdo_up.add_signal(canmatrix.canmatrix.Signal(name="data8", size=8, start_bit=32, receivers=[plc_name], multiplex=0x4f)) - sig_cmd.add_values(0x2f, "8_bytes") - sdo_up.add_signal(canmatrix.canmatrix.Signal(name="data16", size=16, start_bit=32, receivers=[plc_name], multiplex=0x4b)) - sig_cmd.add_values(0x2b, "16_bytes") - sdo_up.add_signal(canmatrix.canmatrix.Signal(name="data24", size=24, start_bit=32, receivers=[plc_name], multiplex=0x47)) - sig_cmd.add_values(0x27, "3_bytes") - sdo_down.add_signal(canmatrix.canmatrix.Signal(name="data32", size=32, start_bit=32, receivers=[plc_name], multiplex=0x43)) - sig_cmd.add_values(0x23, "4_bytes") + + index = canmatrix.canmatrix.Signal(name="IDX", size=24, start_bit=8) + index.multiplex = "Multiplexor" + index.is_multiplexer = True + index.mux_val = 2 + index.mux_val_grp.append([ 2, 2]) + index.muxer_for_signal = "SCS" + sdo_up.add_signal(index) db.add_frame(sdo_up) - # RX Can-Ids ... - for index in range(0x1400, 0x1408): - if index in od: - # store canid in object... - od[index+0x200].canid = od[index][1].default + for obj in od.values(): + if isinstance(obj, canopen.objectdictionary.ODVariable): + subindex = 0 + combined_value = int(f"{subindex:02X}{obj.index:04X}", 16) + signal_name = name_cleanup(obj.name) + size = get_bit_length(obj.data_type) + if size == 0: + logger.info("Ignoring " + signal_name + " size 0") + continue + new_sig = canmatrix.canmatrix.Signal(name=signal_name, size=size, start_bit=32, receivers=[plc_name]) + datatype_name = get_data_type_name(obj.data_type) + if "UNSIGNED" in datatype_name: + new_sig.is_signed = False + new_sig.mux_val = combined_value + new_sig.mux_val_grp.append([ combined_value, combined_value]) + new_sig.muxer_for_signal = "IDX" + sdo_down.add_signal(new_sig) + up_sig = copy.deepcopy(new_sig) + up_sig.muxer_for_signal = "IDX" - ##RX PDOs - for index in range(0x1600, 0x1608): - if index in od: - pdo_name = od[index].name.replace(" ", "_") - frame = canmatrix.canmatrix.Frame(name=pdo_name, transmitters=[plc_name]) - db.add_frame(frame) - frame_id = od[index].canid + up_sig.receivers = [] + sdo_up.add_signal(up_sig) + elif isinstance(obj, canopen.objectdictionary.ODRecord): + members = [] + for subobj in obj.values(): + combined_value = int(f"{subobj.subindex:02X}{obj.index:04X}", 16) + signal_name = name_cleanup(subobj.name) + size = get_bit_length(subobj.data_type) + if size == 0: + logger.info("Ignoring " + signal_name + " size 0") + continue + + new_sig = canmatrix.canmatrix.Signal(name=signal_name, size=size, start_bit=32, receivers=[plc_name]) + datatype_name = get_data_type_name(subobj.data_type) + if "UNSIGNED" in datatype_name: + new_sig.is_signed = False + new_sig.mux_val = combined_value + new_sig.mux_val_grp.append([ combined_value, combined_value]) + new_sig.muxer_for_signal = "IDX" + sdo_down.add_signal(new_sig) + up_sig = copy.deepcopy(new_sig) + up_sig.muxer_for_signal = "IDX" + + up_sig.receivers = [] + sdo_up.add_signal(up_sig) + if len(members) > 0: + sdo_down.add_signal_group("SG_R_" + name_cleanup(obj.name), signal_group_counter, members) + signal_group_counter += 1 + + elif isinstance(obj, canopen.objectdictionary.ODArray): + members = [] + for subobj in obj.values(): + combined_value = int(f"{subobj.subindex:02X}{obj.index:04X}", 16) + signal_name = name_cleanup(subobj.name) + size = get_bit_length(subobj.data_type) + if size == 0: + logger.info("Ignoring " + signal_name + " size 0") + continue + + new_sig = canmatrix.canmatrix.Signal(name=signal_name, size=size, start_bit=32, receivers=[plc_name]) + datatype_name = get_data_type_name(subobj.data_type) + if "UNSIGNED" in datatype_name: + new_sig.is_signed = False + new_sig.mux_val = combined_value + new_sig.mux_val_grp.append([ combined_value, combined_value]) + new_sig.muxer_for_signal = "IDX" + sdo_down.add_signal(new_sig) + members.append(signal_name) + up_sig = copy.deepcopy(new_sig) + up_sig.muxer_for_signal = "IDX" + up_sig.receivers = [] + sdo_up.add_signal(up_sig) + if len(members) > 0: + sdo_down.add_signal_group("SG_A_" + name_cleanup(obj.name), signal_group_counter, members) + signal_group_counter += 1 + + + for start_index, rx_tx_config in {0x1400 : {"transmitter": [], "receiver": [node_name]}, 0x1800: {"transmitter": [node_name], "receiver": []}}.items(): + for comm_index in range(start_index, start_index + 0x8): + map_index = comm_index + 0x200 + if comm_index not in od or map_index not in od: + continue + + # Retrieve the COB-ID + comm_param = od[comm_index] #od.get(comm_index) + cob_id_entry = comm_param.get(1) if comm_param else None + if not cob_id_entry or cob_id_entry.default is None: + # print(f" Warning: No valid COB-ID found for {pdo_type} PDO at index 0x{comm_index:04X}. Skipping.") + continue + cob_id = cob_id_entry.default & 0x7FF + pdo_name = name_cleanup(od[comm_index].name) + frame = canmatrix.canmatrix.Frame(name=pdo_name, transmitters=rx_tx_config["transmitter"]) + frame_id = cob_id frame.arbitration_id = canmatrix.ArbitrationId(id=frame_id) - frame.size = 8 - signals = get_signals(od[index], node_name) - for sig in signals: - frame.add_signal(sig) - - # RT Can-Ids ... - for index in range(0x1800, 0x1808): - if index in od: - # store canid in object... - od[index+0x200].canid = od[index][1].default - 0x40000000 - - #TX - for index in range(0x1A00, 0x1A08): - if index in od: - frame = canmatrix.canmatrix.Frame(name=pdo_name, transmitters=[node_name]) db.add_frame(frame) - pdo_name = od[index].name.replace(" ", "_") - frame_id = od[index].canid - frame.arbitration_id = canmatrix.ArbitrationId(id=frame_id) - frame.size = 8 - signals = get_signals(od[index], plc_name) - for sig in signals: - frame.add_signal(sig) + mapping_param = od.get(map_index) + if not mapping_param: + # print(f" Warning: No mapping parameter found for {pdo_type} PDO at index 0x{map_index:04X}.") + continue + num_entries = mapping_param[0].default if 0 in mapping_param else 0 + current_bit_start = 0 + for subindex in range(1, num_entries + 1): + mapping_entry = mapping_param.get(subindex) + if not mapping_entry or mapping_entry.default is None: + #print(f" Warning: Subindex {subindex} missing for mapping parameter at 0x{map_index:04X}.") + continue + + # Decode the mapping entry + mapping_value = mapping_entry.default + obj_index = (mapping_value >> 16) & 0xFFFF + obj_subindex = (mapping_value >> 8) & 0xFF + bit_length = mapping_value & 0xFF + + # Fetch the mapped object + mapped_obj = od.get_variable(obj_index, obj_subindex) + if not mapped_obj: + #print(f" Warning: Could not find object at Index: 0x{obj_index:04X}, Subindex: {obj_subindex}.") + current_bit_start += bit_length + continue + signal_name = name_cleanup(mapped_obj.name) + new_sig = canmatrix.Signal(signal_name, size=bit_length, start_bit=current_bit_start) + datatype_name = get_data_type_name(mapping_entry.data_type) + if "UNSIGNED" in datatype_name: + new_sig.is_signed = False + new_sig.factor = mapped_obj.factor + if mapped_obj.min is not None: + new_sig.min = mapped_obj.min + new_sig.offset = mapped_obj.min + if mapped_obj.max is not None: + new_sig.max = mapped_obj.max + new_sig.receivers = rx_tx_config["receiver"] + frame.add_signal(new_sig) + current_bit_start += bit_length + frame.size = math.ceil(current_bit_start/8) db.update_ecu_list() + for ecu in db.ecus: + db.rename_ecu(ecu.name, name_cleanup(ecu.name)) return db From eeba45c8c72df88a298b03c45f3145b4299f6123 Mon Sep 17 00:00:00 2001 From: xRowe <33739292+xRowe@users.noreply.github.com> Date: Sat, 25 Jan 2025 01:24:26 +0800 Subject: [PATCH 56/61] Fix_#833 (#835) --- src/canmatrix/formats/arxml.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 717c907a..937ba2f6 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -1134,7 +1134,8 @@ def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset isignal_ub = canmatrix.Signal(ub_name, start_bit=int(ub_start_bit.text, 0), size = 1, - is_signed = False) + is_signed = False, + unit = "Unitless") frame.add_signal(isignal_ub) group_id = group_id + 1 @@ -1389,7 +1390,8 @@ def get_signals(signal_array, frame, ea, multiplex_id, float_factory, bit_offset new_signal_ub = canmatrix.Signal(ub_name, start_bit = int(ub_start_bit.text, 0), size = 1, - is_signed = False) + is_signed = False, + unit = "Unitless") frame.add_signal(new_signal_ub) @@ -1631,19 +1633,21 @@ def get_frame(frame_triggering, ea, multiplex_translation, float_factory, header if freshness_tx_length is not None and int(freshness_tx_length, 0) > 0: freshness_name = f"{ea.get_element_name(frame_elem)}_Freshness" signal_freshness = canmatrix.Signal(freshness_name, - start_bit = int(ipdu_length, 0)*8 + int(freshness_tx_length, 0) - 8, + start_bit = int(ipdu_length, 0) * 8 + int(freshness_tx_length, 0) - 16, size = int(freshness_tx_length, 0), is_signed = False, - is_little_endian = False) + is_little_endian = False, + unit = "Unitless") new_frame.add_signal(signal_freshness) if auth_tx_length is not None and int(auth_tx_length, 0) > 0: authinfo_name = f"{ea.get_element_name(frame_elem)}_AuthInfo" signal_authinfo = canmatrix.Signal(authinfo_name, - start_bit = int(ipdu_length, 0)*8 + int(freshness_tx_length, 0) + int(auth_tx_length, 0) - 8, + start_bit = int(ipdu_length, 0) * 8 + int(freshness_tx_length, 0), size = int(auth_tx_length, 0), is_signed = False, - is_little_endian = False) + is_little_endian = False, + unit = "Unitless") new_frame.add_signal(signal_authinfo) comment = ea.get_element_desc(frame_elem) From 2fd32970e7b0178f8bd3dc6bde376b2d71cb369f Mon Sep 17 00:00:00 2001 From: Russ Date: Sat, 25 Jan 2025 18:04:16 +0800 Subject: [PATCH 57/61] fix: json import attributes at the frame level (#831) --- src/canmatrix/formats/json.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/canmatrix/formats/json.py b/src/canmatrix/formats/json.py index 7ce56b04..75d2ef95 100644 --- a/src/canmatrix/formats/json.py +++ b/src/canmatrix/formats/json.py @@ -233,8 +233,14 @@ def load(f, **_options): new_frame.pdu_name = frame[key] new_frame.arbitration_id.extended = frame.get("is_extended_frame", False) + + if "attributes" in frame: + for k, v in frame["attributes"].items(): + new_frame.add_attribute(k, v) + if "transmitters" in frame: new_frame.transmitters = frame["transmitters"] + for signal in frame["signals"]: is_little_endian = not signal.get("is_big_endian", False) is_float = signal.get("is_float", False) From fc2cf58a18c40e827438f334dc458d9edff75ed0 Mon Sep 17 00:00:00 2001 From: uerg <26408960+uerg@users.noreply.github.com> Date: Tue, 28 Jan 2025 11:00:33 +0100 Subject: [PATCH 58/61] parsing value tables of environment variables (#836) dbc --- src/canmatrix/formats/dbc.py | 17 ++++++++++++----- tests/test_dbc.py | 21 +++++++++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/canmatrix/formats/dbc.py b/src/canmatrix/formats/dbc.py index 3bf6b90c..3361332c 100644 --- a/src/canmatrix/formats/dbc.py +++ b/src/canmatrix/formats/dbc.py @@ -762,14 +762,14 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None db.ecus.append(canmatrix.Ecu(ele)) elif decoded.startswith("VAL_ "): - regexp = re.compile(r"^VAL_ +(\S+) +(\S+) +(.*) *;") + regexp = re.compile(r"^VAL_ +(\d+)? *(\S+) +(.*) *;") temp = regexp.match(decoded) if temp: frame_id = temp.group(1) signal_name = temp.group(2) temp_list = list(canmatrix.utils.escape_aware_split(temp.group(3), '"')) - if frame_id.isnumeric(): # value for Frame + if frame_id: # value for Frame try: frame = get_frame_by_id(canmatrix.ArbitrationId.from_compound_integer(int(frame_id))) sg = frame.signal_by_name(signal_name) @@ -780,8 +780,15 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None sg.add_values(temp_list[i * 2], val) except: logger.error("Error with Line: " + str(temp_list)) - else: - logger.info("Warning: environment variables currently not supported") + else: + try: + values = db.env_vars[signal_name]['values'] + for i in range(math.floor(len(temp_list) / 2)): + val = temp_list[i * 2 + 1] + val = val.replace('\\"', '"') + values[temp_list[i * 2].strip()]=val + except: + logger.error("Error with Line: " + str(temp_list)) elif decoded.startswith("VAL_TABLE_ "): regexp = re.compile(r"^VAL_TABLE_ +(\S+) +(.*) *;") @@ -925,7 +932,7 @@ def add_frame_by_id(new_frame): # type: (canmatrix.Frame) -> None access_nodes = temp.group(9).split(",") db.add_env_var(var_name, {"varType": var_type, "min": min_value, "max": max_value, "unit": unit, "initialValue": initial_value, "evId": ev_id, "accessType": access_type, - "accessNodes": access_nodes}) + "accessNodes": access_nodes, "values": {}}) # else: except: diff --git a/tests/test_dbc.py b/tests/test_dbc.py index 77db8fb5..45d34fe6 100644 --- a/tests/test_dbc.py +++ b/tests/test_dbc.py @@ -642,3 +642,24 @@ def test_int_attribute_zero(): assert 'BO_ 0 0' in outdbc.getvalue().decode('utf8') assert 'TestEcu 1' in outdbc.getvalue().decode('utf8') assert 'TestEcu 0' in outdbc.getvalue().decode('utf8') + +def test_env_var_with_val(): + + dbc = io.BytesIO(textwrap.dedent(u'''\ + EV_ XYZ2_RADAR__LDWwarningStatusFl11: 0 [1|3] "km/h" 2 1 DUMMY_NODE_VECTOR0 Vector__XXX; + BA_ "SystemEnvVarLongSymbol" EV_ XYZ2_RADAR__LDWwarningStatusFl11 "XYZ2_RADAR__LDWwarningStatus__RADAR_XYZ2"; + VAL_ XYZ2_RADAR__LDWwarningStatusFl11 0 "on" 1 "off" 2 "reserved" 3 "error" ; + ''').encode('utf-8')) + + matrix = canmatrix.formats.dbc.load(dbc) + key, var = next(iter(matrix.env_vars.items())) + assert key == 'XYZ2_RADAR__LDWwarningStatus__RADAR_XYZ2' + assert var['min'] == '1' + assert var['max'] == '3' + assert var['initialValue'] == '2' + assert var['unit'] == 'km/h' + assert len(var['values']) == 4 + assert var['values']['0'] == 'on' + assert var['values']['1'] == 'off' + + \ No newline at end of file From 472c97feac980f403efd14dcae79c7ee6f756a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Fri, 7 Feb 2025 08:27:00 +0100 Subject: [PATCH 59/61] further eds fix (#838) fix datatype --- src/canmatrix/formats/eds.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/canmatrix/formats/eds.py b/src/canmatrix/formats/eds.py index 11c37474..f744905c 100644 --- a/src/canmatrix/formats/eds.py +++ b/src/canmatrix/formats/eds.py @@ -238,7 +238,7 @@ def load(f, **options): # type: (typing.IO, **typing.Any) -> canmatrix.CanMatri continue signal_name = name_cleanup(mapped_obj.name) new_sig = canmatrix.Signal(signal_name, size=bit_length, start_bit=current_bit_start) - datatype_name = get_data_type_name(mapping_entry.data_type) + datatype_name = get_data_type_name(mapped_obj.data_type) if "UNSIGNED" in datatype_name: new_sig.is_signed = False new_sig.factor = mapped_obj.factor From be1bcd526d7755b705c92d1516f4ef94e1b0565b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Br=C3=B6cker?= Date: Mon, 10 Feb 2025 15:22:05 +0100 Subject: [PATCH 60/61] set autosar export t 4.1.0 by default (3.2.x is buggy and outdated anyway) (#839) workaround for #813 --- src/canmatrix/cli/convert.py | 2 +- src/canmatrix/formats/arxml.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/canmatrix/cli/convert.py b/src/canmatrix/cli/convert.py index 834c34ee..ef67152a 100644 --- a/src/canmatrix/cli/convert.py +++ b/src/canmatrix/cli/convert.py @@ -92,7 +92,7 @@ def get_formats(): # arxml switches @click.option('--arxmlIgnoreClusterInfo/--no-arxmlIgnoreClusterInfo', 'arxmlIgnoreClusterInfo', default=False, help="Ignore any can cluster info from arxml; Import all frames in one matrix\ndefault False") -@click.option('--arxmlExportVersion', 'arVersion', default="3.2.3", help="Set output AUTOSAR version\ncurrently only 3.2.3 and 4.1.0 are supported\ndefault 3.2.3") +@click.option('--arxmlExportVersion', 'arVersion', default="4.1.0", help="Set output AUTOSAR version\ncurrently only 3.2.3 and 4.1.0 are supported\ndefault 4.1.0") @click.option('--arxmlFlexray/--no-arxmlFlexray', 'decode_flexray', default = False, help="EXPERIMENTAL: import basic flexray data from ARXML") @click.option('--arxmlEthernet/--no-arxmlEthernet', 'decode_ethernet', default = False, help="EXPERIMENTAL: import basic ethernet data from ARXML") diff --git a/src/canmatrix/formats/arxml.py b/src/canmatrix/formats/arxml.py index 937ba2f6..2a1dfc00 100644 --- a/src/canmatrix/formats/arxml.py +++ b/src/canmatrix/formats/arxml.py @@ -354,7 +354,7 @@ def get_base_type_of_signal(signal): def dump(dbs, f, **options): # type: (typing.Mapping[str, canmatrix.CanMatrix], typing.IO, **str) -> None - ar_version = options.get("arVersion", "3.2.3") + ar_version = options.get("arVersion", "4.1.0") for name in dbs: db = dbs[name] From caf4fc2522cfa165125355a398430967ba617322 Mon Sep 17 00:00:00 2001 From: Eduard Date: Mon, 10 Feb 2025 16:05:17 +0100 Subject: [PATCH 61/61] disable python 3.13 due to ci errors --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7601a3d8..8f924539 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: # os: [ubuntu-latest] experimental: [false] # python-version: ["2.7","3.4","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.12"] - python-version: ["3.8","3.9","3.10","3.11","3.12", "3.13"] + python-version: ["3.8","3.9","3.10","3.11","3.12"] fail-fast: false steps: - uses: actions/checkout@v4