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))
Example #2
0
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)
Example #3
0
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
Example #4
0
    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
Example #5
0
    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