Baker ReCO2ver User Manual

Baker ReCO2ver User Manual

Rapid recovery co2 incubator

Advertisement

Quick Links

Rapid Recovery CO
Incubator
2
Baker Packet
Communications
Protocol
User's Guide
This Manual applies to Models: • REC 602, • REC 602 -Plus

Advertisement

Table of Contents
loading

Summary of Contents for Baker ReCO2ver

  • Page 1: Table Of Contents

    Rapid Recovery CO Incubator Baker Packet Communications Protocol User’s Guide This Manual applies to Models: • REC 602, • REC 602 -Plus...
  • Page 2: Table Of Contents

    Table of Contents Table of Contents ................................1 Introduction ..................................4 Purpose ....................................4 Overview .................................... 4 Startup Messages ..............................4 Periodic Messages ..............................4 Sporadic Messages ..............................4 Packet Description ................................5 Incubator Specific Example Packets ........................... 7 Incubator Specific Operation ............................9 Receiver: Unpacking the packet ...........................
  • Page 3 Network Topology ..............................33 Link Type ................................. 33 Point-to-Point (P2P) ............................33 Point-to-Multipoint .............................. 34 Multipoint-to-Point .............................. 34 Duplex ..................................34 Packet Protocol ............................... 34 July 2021...
  • Page 4: Introduction

    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 •...
  • Page 5: Packet Description

    • 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. •...
  • Page 7: Incubator Specific Example Packets

    `,`. 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...
  • Page 9: Incubator Specific Operation

    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.
  • Page 10: Incubator: Data Unpacking

    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.
  • Page 11: Messages

    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.
  • Page 12: State/Status Events

    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”...
  • Page 15: Errors/Faults Alarms

    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.
  • Page 18: User Action Events

    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”...
  • Page 21: Python V3.6.5 Sample Application Code

    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.
  • Page 22 = aPortName.upper() self.ser = None self.lenPacket = 0 self.parsedChecksum = 0 self.test_directory = self.title.replace(' ', '') print(self.title + self.ver) self.test_directory_path = os.path.join("C:/Baker/Test Software", self.test_directory) self.rawFilename = None self.rawFile = None self.dataFilename = None self.dataFile = None self.eventFilename = None self.eventFile = None...
  • Page 23 if BPPReader.stopRequest: BPPReader.stopAck = True print("BPPReader stopping.") return time.sleep(10) print("Reopen port") except Exception as e: print(str(e)) exc_type, exc_obj, exc_tb = sys.exc_info() print(exc_type, exc_tb.tb_lineno) if BPPReader.stopRequest: BPPReader.stopAck = True print("BPPReader stopping.") return print("Restarting") def stop(self): BPPReader.stopRequest = True def stopAcked(self): return BPPReader.stopAck def processHeader(self,header): ret_ = False self.lenPacket = 0...
  • Page 24 def processData(self,packetBody): if self.dataFilename == None: self.dataFilename = format( "DAT_S%X_%X_R%X_%X.txt" % (self.senderAddr, self.senderID, self.recipientAddr, self.recipientID) ) self.dataFile = ResFile("",self.test_directory_path, self.dataFilename) dataBytes = bytes(packetBody[3:]) self.bodyStr = dataBytes.decode('utf-8') self.timedate = self.bodyStr.split(',',2) self.msg = self.timedate[2] self.typeStr += "Data" self.dataFile.appendTestFileString(self.bodyStr) self.updateData() self.gui.mode.set("RUN") def processEvent(self,packetBody,eventType): if self.eventFilename == None: self.eventFilename = format( "EVL_S%X_%X_R%X_%X.txt"...
  • Page 25 def processPacket(self): ret_ = True if self.gui is None: print("SOP") header = bytearray(self.ser.readbytes(self.headerLength - 2)) if self.processHeader(header): if self.rawFilename == None: self.rawFilename = format( "RAW_S%X_%X_R%X_%X.txt" % (self.senderAddr, self.senderID, self.recipientAddr, self.recipientID) ) self.rawFile = ResFile("",self.test_directory_path, self.rawFilename) packetBody = self.ser.readbytes(self.lenPacket - self.headerLength) packet = bytes("#@".encode() + header + packetBody) #print(packet) self.rawFile.appendTestFileString(packet.decode('utf-8'))
  • Page 26: Gui

    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])
  • Page 32: Glossary

    Glossary July 2021...
  • Page 33: Communications Protocol

    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.

Table of Contents