Source code for ingenialink.canopen.dictionary

import ingenialogger

from ingenialink.dictionary import Dictionary
from ingenialink.canopen.register import CanopenRegister

logger = ingenialogger.get_logger(__name__)


[docs]class CanopenDictionary(Dictionary): """Contains all registers and information of a CANopen dictionary. Args: dictionary_path (str): Path to the Ingenia dictionary. """ class AttrRegCanDict(Dictionary.AttrRegDict): IDX = "idx" SUBIDX = "subidx" def __init__(self, dictionary_path): super().__init__(dictionary_path) def _read_xdf_register(self, register): current_read_register = super()._read_xdf_register(register) if current_read_register is None: return None try: aux_var = int(register.attrib["address"], 16) current_read_register[self.AttrRegCanDict.IDX] = aux_var >> 8 current_read_register[self.AttrRegCanDict.SUBIDX] = aux_var & 0xFF return current_read_register except KeyError as ke: logger.error( f"Register with ID {current_read_register[self.AttrRegCanDict.IDENTIFIER]} has not attribute {ke}" ) return None def _add_register_list(self, register): identifier = register[self.AttrRegCanDict.IDENTIFIER] subnode = register[self.AttrRegCanDict.SUBNODE] reg = CanopenRegister(**register) self._registers[subnode][identifier] = reg