Overview The incubator utilizes the Baker Packet Protocol to provide the current state and status of the incubator. The payload portion of the packet contains information specific to the Incubator. The packets are generated in three phases: Startup Messages •...
• The `#@` ASCII characters denote the start of a packet. Packet Protocol Version: This field contains a major and minor version number to be used to identify the version of the Baker Packet Protocol in use. This protocol shall follow the semantic versioning system of the minor version...
Page 6
Sender Address: • The sender address field defines the bus address of the transmitting device. • The sender shall populate this field with its own unique bus address. • The receiver will use this address to direct its responses. • The address is two ASCII characters representing a hexadecimal value. •...
`,`. Payload System Type: • Identifies the Baker product initiating the packet. It will always be ‘C’ for incubator. Payload Message Category: • Identifies the category of message defined in the payload. It will always be ‘L’ for incubator Logging.
Page 8
Figure 2 Data Packet Figure 3 Event Packet July 2021...
Incubator Specific Operation 1. Every minute the incubator sends an unsolicited type `D` data message. This feature is not configurable. 2. Additionally, packets of message type event ‘E’ (these messages provide operational Event information) are automatically transmitted as they occur. 3.
5. If the Message Type field contains an ‘E’ follow the incubator: Event Unpacking Incubator: Data Unpacking 1. Parse the first comma delimited field as the time in the format of hh:mm:ss. 2. Parse the second comma delimited field as the date in the format of mm:dd:yy. 3.
2. Set the payload header System Type to ‘C’ 3. Set the payload header Message Category to ‘L’ 4. Set the payload header Message Type to ‘D’ or ‘E’ 5. Set the packet header preamble to “#@” 6. Set the packet header protocol version to “0.1” 7.
RESET ERROR WDT Reset Faults (memory After a restart cause this event shall access, invalid instruction) be generated if the restart cause Power Issues was not caused by a power loss. HIBERNATE The HIBERNATE state is entered. RUN MODE The RUN state is entered. DOOR OPEN The door transitioned from closed to opened.
Page 13
Event Name Event Event Code Meaning Description Code TEMP H ALARM This indicates that the air temperature has risen above the HI alarm set point. TEMP L ALARM This indicates that the air temperature has gone below the LO alarm set point RH HI ALARM This indicates that the RH has risen above the HI alarm set point.
Page 14
END HEPA The HEPA Filter Age is equal to 100% of the HEPA’s rated lifespan, 8760 hours. PUMP ALARM The Water Pump is in alarm state. State/Status Events Event Name Event Event Code Meaning Description Code START This event shall be generated when the UI’s “Decon Start”...
FAILED and Water Pump Alarm is in the ALARM state While not in the H State REMOVE/COMPLETE or FAILED and Air Temp Sensor/Value Alarm is in the ALARM state. While not in the H State REMOVE/COMPLETE or FAILED and Door/Face Temp Sensor/Value Alarm is in the ALARM state UV Bulb Age is or will...
Page 16
Sensor Communications Error This denotes an error Calibration Range Error with the CO sensor or value UI ERROR Communications Error This event shall be generated when a fault with the LCD Touchscreen is detected. MEMORY 1 ERR SD-Card Not Detected This event shall be Filesystem Mount Failure generated when a fault...
Page 17
with the 4-20mA CO transmitter is detected 4-20mA 2 ERR Communications Error This event shall be Over temperature generated when a fault Open Loop with the 4-20mA Temp transmitter is detected. O ERR Sensor Communications Error This denotes an error Calibration Range Error with the Water Pan Temp sensor or value.
FAULT EVENT LOG INDEX ERR, This is a generic fault PID LOCK VALUE ERR, event message. Firmware Revisions Incompatible Arguments indicating the type of fault will be appended to the message. Please consult engineering for assistance deciphering the appended fault code.
Page 19
HI RH SET <value> The new HI alarm set point. The “RH Alarm High” set point value has changed. LO RH SET <value> The new LO alarm set point. The “RH Alarm Low” set point value has changed. RH OFFSET <value>...
Page 20
Filter Age to 0 hrs via the LCD touchscreen which indicates that the HEPA has been replaced. PASS CHG This event shall be generated if the passcode is changed by the user. PASS SET CHG This event shall be generated when the passcode settings on the “Passcode Configuration”...
Python V3.6.5 Sample Application Code Packet Processor """ Main file for Baker Packet Protocol Receiver There are three classes that make up this application: • BPPReader_GUI This provides the GUI if invoked. If the application is not invoked with the GUI, then this class is unused.
rdr.stop = True; rdr.join() print("Goodbye") import tkinter from tkinter import * from tkinter import messagebox # message is hidden during the above import, it must be done separately import tkinter.ttk as ttk import asyncio # for Semaphore from BPPReader import BPPReader class BPPReader_GUI(Tk): inst = None readerInstance = None...
Page 27
Tk.__init__(self,parent) # instantiates the main window self.parent = parent # save off the parent main window reference BPPReader_GUI.inst = self # save ourselves as a singleton self.geometry("1200x500") self.call('wm', 'iconphoto', self._w, PhotoImage(file='icon.gif')) self.labelStyle = ttk.Style() self.labelStyle.configure("VAL.TLabel", padding=2, anchor='w', relief='sunken', width=10) self.statusFrame = ttk.Frame(self,height=160,relief="raised") self.statusFrame.pack(fill='both',expand=False, pady=1) self.statusFrame.grid_rowconfigure(0, minsize=16);...
Page 28
l2.grid_rowconfigure(3, minsize=24); l = ttk.Label(l2,text="Cur:") # cur l.grid(row=0,column=0,sticky='e',padx=2) self.Temp = StringVar() self.TempVal = ttk.Label(l2, textvariable=self.Temp, style="VAL.TLabel") self.TempVal.grid(row=0,column=1,sticky='w') l = ttk.Label(l2,text="Set:") # Set l.grid(row=1,column=0,sticky='e',padx=2) self.TempSet = StringVar() self.TempSetVal = ttk.Label(l2, textvariable=self.TempSet, style="VAL.TLabel") self.TempSetVal.grid(row=1,column=1,sticky='w') l = ttk.Label(l2,text="Min:") # Min l.grid(row=2,column=0,sticky='e',padx=2) self.TempMin = StringVar() self.TempMinVal = ttk.Label(l2, textvariable=self.TempMin, style="VAL.TLabel") self.TempMinVal.grid(row=2,column=1,sticky='w') l = ttk.Label(l2,text="Max:") # Max...
Page 29
self.RH = StringVar() self.RHVal = ttk.Label(l2, textvariable=self.RH, style="VAL.TLabel") self.RHVal.grid(row=0,column=1,sticky='w') l = ttk.Label(l2,text="Set:") # Set l.grid(row=1,column=0,sticky='e',padx=2) self.RHSet = StringVar() self.RHSetVal = ttk.Label(l2, textvariable=self.RHSet, style="VAL.TLabel") self.RHSetVal.grid(row=1,column=1,sticky='w') l = ttk.Label(l2,text="Min:") # Min l.grid(row=2,column=0,sticky='e',padx=2) self.RHMin = StringVar() self.RHMinVal = ttk.Label(l2, textvariable=self.RHMin, style="VAL.TLabel") self.RHMinVal.grid(row=2,column=1,sticky='w') l = ttk.Label(l2,text="Max:") # Max l.grid(row=3,column=0,sticky='e',padx=2) self.RHMax = StringVar() self.RHMaxVal = ttk.Label(l2, textvariable=self.RHMax, style="VAL.TLabel")
Page 30
self.Dryout = StringVar() l = ttk.Label(self.statusFrame, textvariable=self.Dryout, style="VAL.TLabel") l.grid(row=3,column=11,sticky='w') l = ttk.Label(self.statusFrame,text="H2O:",anchor='e') l.grid(row=4,column=10,sticky='e',padx=2) self.H2O = StringVar() l = ttk.Label(self.statusFrame, textvariable=self.H2O, style="VAL.TLabel") l.grid(row=4,column=11,sticky='w') btn = ttk.Button(self.statusFrame,text="Clear",command=self.btnClear) btn.grid(row=1,column=13,sticky='e') self.messageFrame = ttk.Frame(self) self.messageFrame.pack(fill="both", expand=True) cols = [("Type", 130), ("Date", 90),("Message", 500),("Code", 18), ("Header", 300)] self.tv = ttk.Treeview(self.messageFrame, columns=[col for col, _ in cols], show="headings") for col, colwidth in cols: self.tv.heading(col, text=col)
Page 31
if ("ERR" in eeData[4] or float(eeData[4]) <= float(eeData[7])) or (float(eeData[4]) >= float(eeData[6])): color_ = 'red' self.RHVal.configure(foreground=color_) self.RH.set(eeData[4]) self.RHSet.set(eeData[5]) self.RHMin.set(eeData[6]) self.RHMax.set(eeData[7]) color_ = 'black' if ("ERR" in eeData[8] or float(eeData[8]) <= float(eeData[11])) or (float(eeData[8]) >= float(eeData[10])): color_ = 'red' self.CO2Val.configure(foreground=color_) self.CO2.set(eeData[8]) self.CO2Set.set(eeData[9]) self.CO2Min.set(eeData[10]) self.CO2Max.set(eeData[11])
Communications Protocol Is a system of rules that allows two or more entities of a communications system to transmit information of varying sizes via any type of physical medium. The protocol defines the syntax and semantics used in the communication between entities. The protocol may provide rules for synchronization of communication and possible error recovery processes.
Page 34
Point-to-Multipoint (P2MP) One device can access several devices via the same link (aka. Broadcast link, Multidrop Link) Multipoint-to-Point A device may have multiple P2P links, but each link only connects to one device. Duplex Full Duplex – in a P2P Link, both parties and send and receive at the same time. Half Duplex –Elements in the communications network can only receive or send at one time, but not both.