def main(argv=None): comm = RepRapSerialComm(port=COMM_PORT, baudrate=COMM_BAUDRATE) print "Sleeping for 1 second for the serial port and firmware to settle..." time.sleep(1) print "Flushing communicaton channel..." comm.reset() print "Querying for Heater 1 temperature (Command 91)..." p = SimplePacket() p.add_8(0) p.add_8(91) comm.send(p) print "Reading back the response..." p = comm.readback() while p == None: p = comm.readback() print "Readback result code (1 for success, anything else - failure): " + str( p.rc) if p.rc == SimplePacket.RC_OK: print "The current temperature is: " + str(p.get_16(1)) print str(p.get_8(0)) print str(p.get_8(1)) print str(p.get_8(2)) print str(p.get_8(3))
def main(argv=None): comm = RepRapSerialComm(port=COMM_PORT, baudrate=COMM_BAUDRATE) print "Sleeping for 1 second for the serial port and firmware to settle..." time.sleep(1) print "Flushing communicaton channel..." comm.reset() print "Querying for Heater 1 temperature (Command 91)..." p = SimplePacket() p.add_8(0) p.add_8(91) sendPacket(p, print_temperature)
def sendPacket(p, CallBack): RetryCounter = 0 sendFlag = True comm = RepRapSerialComm(port=COMM_PORT, baudrate=COMM_BAUDRATE) comm.reset() while RetryCounter < 10: # Send the Packet to slave. if sendFlag: comm.send(p) sendFlag = False # Read answer from slave. SlaveAnswer_Packet = comm.readback() if SlaveAnswer_Packet != None: if not (SlaveAnswer_Packet.rc != SimplePacket.RC_OK) and not ( SlaveAnswer_Packet.get_8(0) != 1) and not (SlaveAnswer_Packet.id_received != SlaveAnswer_Packet.id()): # Execute the call back if there was no CRC mismatch on slave... (CallBack)(SlaveAnswer_Packet) return True if SlaveAnswer_Packet.rc != SimplePacket.RC_OK: print >> sys.stderr, datetime.now() print >> sys.stderr, "Slave -> Master communication error: RC: %d" % ( SlaveAnswer_Packet.rc) print >> sys.stderr, " " if SlaveAnswer_Packet.get_8(0) != 1: print >> sys.stderr, datetime.now() print >> sys.stderr, "Master -> Slave communication error: response_code: %d" % ( SlaveAnswer_Packet.get_8(0)) print >> sys.stderr, " " if SlaveAnswer_Packet.id_received != SlaveAnswer_Packet.id(): print >> sys.stderr, datetime.now() print >> sys.stderr, "Packet id error. id = %d; id_received = %d" % ( SlaveAnswer_Packet.id(), SlaveAnswer_Packet.id_received) print >> sys.stderr, " " sendFlag = True RetryCounter += 1 # There was to much errors... # Shut down system comm.reset() return None
def execute(self): """ Start the main process loop. This will return only when error (Communication, Exception, etc) is encountered. """ next_status_read = datetime.now() next_temp_read = datetime.now() next_motor_read = datetime.now() self.readback_queue = [] self._init_trigger_state() self.comm = None try: self.comm = RepRapSerialComm(port=COMM_PORT, baudrate=COMM_BAUDRATE) self.comm.reset() p = self.comm.readback() while True: time.sleep(0.005) # Process any packets if len(self.readback_queue) > 0: p = self.comm.readback() if p != None: if p.rc != SimplePacket.RC_OK: print >> sys.stderr, "Extruder communication error: RC: %d" % ( p.rc) self.c['fault.communication'] = 1 self.c['connection'] = 0 self.c['estop'] = 1 self.c['online'] = 0 self.extruder_ready_check = 0 self.extruder_state = 0 self.c['mapp.done'] = self.c['mapp.seqid'] self.comm.reset() self.readback_queue = [] # Turn Off p = SimplePacket() p.add_8(0) p.add_8(82) self.comm.send(p) self.readback_queue.append(self._rb_dummy) else: self.c['connection'] = 1 (self.readback_queue[0])(p) del self.readback_queue[0] if len(self.readback_queue) > 20: raise SystemExit( "The readback queue is too long. Suggesting microcontroller overflow or other bus problem" ) # Enable if self.enable_state != self.c['enable']: self.enable_state = self.c['enable'] p = SimplePacket() p.add_8(0) if self.enable_state: p.add_8(81) else: self.extruder_ready_check = 0 self.extruder_state = 0 self.c['mapp.done'] = self.c['mapp.mcode'] p.add_8(82) self.comm.send(p) self.readback_queue.append(self._rb_enable) # Check button trigger self._check_trigger() # Read Status if datetime.now() > next_status_read: next_status_read = datetime.now() + timedelta( milliseconds=50) p = SimplePacket() p.add_8(0) p.add_8(80) self.comm.send(p) self.readback_queue.append(self._rb_status) # Read Heater PV/SV if datetime.now() > next_temp_read: next_temp_read = datetime.now() + timedelta( milliseconds=250) p = SimplePacket() p.add_8(0) p.add_8(91) self.comm.send(p) self.readback_queue.append(self._rb_heater1_pvsv) p = SimplePacket() p.add_8(0) p.add_8(93) self.comm.send(p) self.readback_queue.append(self._rb_heater2_pvsv) # Read Motor PV/SV if datetime.now() > next_motor_read: next_motor_read = datetime.now() + timedelta( milliseconds=50) p = SimplePacket() p.add_8(0) p.add_8(95) self.comm.send(p) self.readback_queue.append(self._rb_motor1_pvsv) except KeyboardInterrupt: if self.comm != None: p = SimplePacket() p.add_8(0) p.add_8(82) self.comm.send(p) self.comm.readback() raise SystemExit finally: if self.comm != None: self.comm.close() self.comm = None
def execute(self): """ Start the main process loop. This will return only when error (Communication, Exception, etc) is encountered. """ next_status_read = datetime.now() next_temp_read = datetime.now() next_motor_read = datetime.now() self._init_trigger_state() self.comm = None try: self.comm = RepRapSerialComm(port=COMM_PORT, baudrate=COMM_BAUDRATE) self.comm.reset() p = self.comm.readback() while True: time.sleep(0.005) # Enable the system if it should be enable if self.enable_state != self.c['enable']: self.enable_state = self.c['enable'] p = SimplePacket() p.add_8(SLAVE_ADDRESS) if self.enable_state: p.add_8(SLAVE_CMD_TURN_ON) else: self.extruder_ready_check = 0 self.extruder_state = 0 self.c['mapp.done'] = self.c['mapp.mcode'] p.add_8(SLAVE_CMD_TURN_OFF) self.sendPacket(p, self._rb_enable) # Check button trigger self._check_trigger() # Read Status if datetime.now() > next_status_read: next_status_read = datetime.now() + timedelta( milliseconds=50) p = SimplePacket() p.add_8(SLAVE_ADDRESS) p.add_8(SLAVE_CMD_STATUS) self.sendPacket(p, self._rb_status) # Read Heater PV/SV if datetime.now() > next_temp_read: next_temp_read = datetime.now() + timedelta( milliseconds=50) p = SimplePacket() p.add_8(SLAVE_ADDRESS) p.add_8(SLAVE_CMD_GET_HEATER1_PVSV) self.sendPacket(p, self._rb_heater1_pvsv) # Read Motor PV/SV if datetime.now() > next_motor_read: next_motor_read = datetime.now() + timedelta( milliseconds=50) p = SimplePacket() p.add_8(SLAVE_ADDRESS) p.add_8(SLAVE_CMD_GET_MOTOR1_PVSV) self.sendPacket(p, self._rb_motor1_pvsv) except KeyboardInterrupt: # Disable system if we hit keyboard interrupt if self.comm != None: p = SimplePacket() p.add_8(SLAVE_ADDRESS) p.add_8(SLAVE_CMD_TURN_OFF) self.sendPacket(p, self._rb_dummy) raise SystemExit finally: if self.comm != None: self.comm.close() self.comm = None