dummy model and controller

This commit is contained in:
Yeongdo Park 2020-08-06 18:10:42 -07:00
parent 5e109268db
commit 6cbc6b6158

View file

@ -20,12 +20,14 @@ nCell = 12
from BmsView import BmsMonitorFrame
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,6 +39,7 @@ BMS_MSG_CAT = Enum(
"ERROR "
)
def findCategory(imsg, isignal):
tag, id, type = parse_can_id(imsg)
@ -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):
@ -163,48 +177,45 @@ class BmsMonitorView(BmsMonitorFrame):
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,11 +235,14 @@ 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__":