From 6cbc6b61581e3bf15c0b8e27c6c881c1a3b0ffbc Mon Sep 17 00:00:00 2001 From: Yeongdo Park Date: Thu, 6 Aug 2020 18:10:42 -0700 Subject: [PATCH] dummy model and controller --- BmsApp.py | 92 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 39 deletions(-) diff --git a/BmsApp.py b/BmsApp.py index db287a2..61c7543 100644 --- a/BmsApp.py +++ b/BmsApp.py @@ -20,12 +20,14 @@ nCell = 12 from BmsView import BmsMonitorFrame -def parse_can_id (arbitration_id): + +def parse_can_id(arbitration_id): mtag = (arbitration_id & 0xfffff000) >> 12 mid = (arbitration_id & 0xf00) >> 8 mtype = arbitration_id & 0xff return mtag, mid, mtype + BMS_MSG_CAT = Enum( "BMS_MSG_CAT", "BMS_PROFILE " @@ -37,7 +39,8 @@ BMS_MSG_CAT = Enum( "ERROR " ) -def findCategory (imsg, isignal): + +def findCategory(imsg, isignal): tag, id, type = parse_can_id(imsg) if tag != 0x14180: @@ -45,34 +48,28 @@ def findCategory (imsg, isignal): if 0x00 <= type <= 0x06: return BMS_MSG_CAT.BMS_PROFILE - - elif type == 0x11: - return BMS_MSG_CAT.PACK_PROFILE - + elif 0x07 <= type <= 0x0B: + return BMS_MSG_CAT.MODULE_DATA elif type == 0x10: if isignal < 4: return BMS_MSG_CAT.PACK_PROFILE else: return BMS_MSG_CAT.PACK_ALARM - + elif type == 0x11: + return BMS_MSG_CAT.PACK_PROFILE + elif type == 0x14: + return BMS_MSG_CAT.PACK_DATA elif type == 0x15: if isignal < 3: return BMS_MSG_CAT.PACK_DATA else: return BMS_MSG_CAT.PACK_ALARM - - elif type == 0x14: - return BMS_MSG_CAT.PACK_DATA - elif 0x16 <= type <= 0x20: return BMS_MSG_CAT.PACK_DATA - - elif 0x07 <= type <= 0x0B: - return BMS_MSG_CAT.MODULE_DATA - else: return BMS_MSG_CAT.UNDEFINED + cat_propgrid = [ BMS_MSG_CAT.BMS_PROFILE, BMS_MSG_CAT.PACK_PROFILE, @@ -82,6 +79,23 @@ cat_propgrid = [ tohex = "{:#04X}-".format + +class Controller: + def __init__(self, m, v): + self.view = v + self.model = m + + pub.subscribe(lambda: "dummy function", "dummy message") + + +class Model: + def __init__(self): + self.battery_module_state = [{} for i in range(nModule)] + + def process_message(self, msg): + pass + + class BmsMonitorView(BmsMonitorFrame): def __init__(self, *args, **kwds): @@ -112,7 +126,7 @@ class BmsMonitorView(BmsMonitorFrame): self.property_grid_page_info.AppendIn(BMS_MSG_CAT.BMS_PROFILE.name, prop) for isig, signal in enumerate(msg.signals): - plabel = tohex(type)+signal.name + plabel = tohex(type) + signal.name prop = wx.propgrid.StringProperty(label=plabel) prop.SetHelpString(signal.comment) @@ -132,13 +146,13 @@ class BmsMonitorView(BmsMonitorFrame): def OnToggle(self, event): btnLabel = self.button_1.GetLabel() if self.button_1.Value: - print ("starting timer...") + print("starting timer...") self.bus = can.Bus() self.timer.Start(10) self.button_1.SetLabel("Stop") else: - print ( "timer stopped!" ) + print("timer stopped!") self.bus.shutdown() self.bus = None @@ -153,58 +167,55 @@ class BmsMonitorView(BmsMonitorFrame): self.battery_module_state[imodule][k] = dmsg[k] def GetModuleVoltage(self, module_dict): - keyString='BatS_Cell{}_V' + keyString = 'BatS_Cell{}_V' return [module_dict.get(keyString.format(x), -1) for x in range(nCell)] def GetModuleBalState(self, module_dict): - keyString='BatS_Cell{}_BalState' + keyString = 'BatS_Cell{}_BalState' return [module_dict.get(keyString.format(x), -1) for x in range(nCell)] def OnTimer(self, event): # print("Read CAN Message!") msg = self.bus.recv(timeout=1.) - fullid = msg.arbitration_id + full_id = msg.arbitration_id mtag, mid, mtype = parse_can_id(msg.arbitration_id) - dbmsg = db.get_message_by_frame_id(msg.arbitration_id) + db_msg = db.get_message_by_frame_id(msg.arbitration_id) master_id = int(self.choice_1.GetStringSelection(), 16) if mid == master_id: - if findCategory(fullid, 0) == BMS_MSG_CAT.MODULE_DATA: + if findCategory(full_id, 0) == BMS_MSG_CAT.MODULE_DATA: try: - dmsg = db.decode_message(msg.arbitration_id, msg.data) + decoded = db.decode_message(msg.arbitration_id, msg.data) except KeyError as key: print(key, " does not exist") else: - self.__update_bm_state(dmsg) + self.__update_bm_state(decoded) - elif findCategory(fullid, 0) == BMS_MSG_CAT.BMS_PROFILE: + elif findCategory(full_id, 0) == BMS_MSG_CAT.BMS_PROFILE: try: - print ("bmsprofile message raw", (dbmsg.name), msg.data, msg.data.decode()) + print("bmsprofile message raw", db_msg.name, msg.data, msg.data.decode()) except UnicodeDecodeError: - print ("bmsprofile message raw", (dbmsg.name), msg.data, int.from_bytes(msg.data, byteorder="big")) + print("bmsprofile message raw", db_msg.name, msg.data, int.from_bytes(msg.data, byteorder="big")) - if self.property_grid_page_info.GetProperty(dbmsg.name): - self.property_grid_page_info.SetPropertyValue(dbmsg.name, msg.data.decode()) + if self.property_grid_page_info.GetProperty(db_msg.name): + self.property_grid_page_info.SetPropertyValue(db_msg.name, msg.data.decode()) else: - dmsg = db.decode_message(msg.arbitration_id, msg.data) - for isig, signal in enumerate(dbmsg.signals): + decoded = db.decode_message(msg.arbitration_id, msg.data) + for isig, signal in enumerate(db_msg.signals): plabel = tohex(mtype) + signal.name - cat = findCategory(fullid, isig) + cat = findCategory(full_id, isig) if cat in cat_propgrid: if self.property_grid_page_info.GetProperty(plabel): - # print (plabel, dmsg[signal.name]) - value = float(dmsg[signal.name]) if signal.is_float else dmsg[signal.name] + # print (plabel, decoded[signal.name]) + value = float(decoded[signal.name]) if signal.is_float else decoded[signal.name] self.property_grid_page_info.SetPropertyValue(plabel, value) else: pass # print (plabel, " is Not Available") ''' - if tag == 0x14180 and id == 0x2 and 0x00 <= type <= 0x06: # BMS Profile - self.property_grid_page_info.AppendIn(BMS_MSG_CAT.BMS_PROFILE, prop) - if tag == 0x14180 and id == 0x2 and 0x10 <= type <= 0x20: # Pack Profile and Data self.property_grid_page_info.AppendIn("packdata", prop) ''' @@ -224,15 +235,18 @@ class BmsMonitorView(BmsMonitorFrame): class BmsApp(wx.App): def OnInit(self): + self.bms = Model() self.frame = BmsMonitorView(None, wx.ID_ANY, "") + self.bms_controller = Controller(self.bms, self.frame) self.SetTopWindow(self.frame) self.frame.Show() return True + # end of class BmsApp if __name__ == "__main__": - gettext.install("app") # replace with the appropriate catalog name + gettext.install("app") # replace with the appropriate catalog name app = BmsApp(0) app.MainLoop()