Skip to content
This repository has been archived by the owner. It is now read-only.

Commit

Permalink
add microtome commands
Browse files Browse the repository at this point in the history
  • Loading branch information
MPIBR-tushevg committed Jan 4, 2019
1 parent 4ef04de commit f681987
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 8 deletions.
55 changes: 52 additions & 3 deletions BrainATUMtome/microtome.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#include "microtome.h"

Microtome::Microtome(QObject *parent) : QObject(parent),
m_serialPort(nullptr)
m_serialPort(nullptr),
m_cutter_requestStop(false)
{

}
Expand All @@ -22,28 +23,76 @@ void Microtome::open(const QString &portName, int baudRate)
}
);
m_serialPort->open(portName, baudRate);
connect(this, &Microtome::schedule, m_serialPort, &SerialPort::on_scheduleMessage);
}

void Microtome::on_uirequest_cuttingMotor(bool state)
{
QString textState = (state) ? "on" : "off";
emit log(EventLogType::Notify, "Microtome :: cutting motor is " + textState);
// request mottor stop at a retraction position
if (!state) {
m_cutter_requestStop = true;
return;
}

// ask for feedrate advance
QString command = SerialPackage::pack(ADDRESS_COMMAND_STEPPER) +
SerialPackage::pack(STEPPER_FEEDRATE_MOTOR_CONTROL) +
SerialPackage::pack(STATUS_GET);
QString buffer = SerialPackage::package(command);
emit schedule(buffer.toUtf8());

// start cutting motor
m_cutter_requestStop = false;
emit log(EventLogType::Notify, "Microtome :: cutting motor is on");
command = SerialPackage::pack(ADDRESS_COMMAND_CUTTER) +
SerialPackage::pack(CUTTER_MOTOR) +
SerialPackage::pack(STATUS_SET);
buffer = SerialPackage::package(command);

emit schedule(buffer.toUtf8());
}


void Microtome::on_uirequest_cuttingSpeed(int cuttingSpeed)
{
emit log(EventLogType::Notify, "Microtome :: cutting speed is " + QString::number(cuttingSpeed));

// 1 digit = 10 um/sec
quint16 valueCuttingSpeed = static_cast<quint16>(cuttingSpeed / 10);
QString command = SerialPackage::pack(ADDRESS_COMMAND_CUTTER) +
SerialPackage::pack(CUTTER_SPEED_CUTTING) +
SerialPackage::pack(STATUS_SET) +
SerialPackage::pack(valueCuttingSpeed);
QString buffer = SerialPackage::package(command);
emit schedule(buffer.toUtf8());
}


void Microtome::on_uirequest_returnSpeed(int returnSpeed)
{
emit log(EventLogType::Notify, "Microtome :: return speed is " + QString::number(returnSpeed));

// 1 digit = 10 um/sec
quint16 valueReturnSpeed = static_cast<quint16>(returnSpeed / 10);
QString command = SerialPackage::pack(ADDRESS_COMMAND_CUTTER) +
SerialPackage::pack(CUTTER_SPEED_RETURN) +
SerialPackage::pack(STATUS_SET) +
SerialPackage::pack(valueReturnSpeed);
QString buffer = SerialPackage::package(command);
emit schedule(buffer.toUtf8());
}


void Microtome::on_uirequest_feedStep(int feedStep)
{
emit log(EventLogType::Notify, "Microtome :: feed step is " + QString::number(feedStep));

// 1 digit == 1 nm
quint16 valueFeedStep = static_cast<quint16>(feedStep);
QString command = SerialPackage::pack(ADDRESS_COMMAND_STEPPER) +
SerialPackage::pack(STEPPER_FEED) +
SerialPackage::pack(STATUS_SET) +
SerialPackage::pack(valueFeedStep);
QString buffer = SerialPackage::package(command);
emit schedule(buffer.toUtf8());
}
27 changes: 27 additions & 0 deletions BrainATUMtome/microtome.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,32 @@ class Microtome : public QObject

private:
SerialPort *m_serialPort;
bool m_cutter_requestStop;

const quint8 ADDRESS_COMMAND_SYSTEM = 0x81;
const quint8 ADDRESS_RESPOND_SYSTEM = 0x18;
const quint8 ADDRESS_COMMAND_STEPPER = 0x41;
const quint8 ADDRESS_RESPOND_STEPPER = 0x14;
const quint8 ADDRESS_COMMAND_CUTTER = 0x51;
const quint8 ADDRESS_RESPOND_CUTTER = 0x15;

const quint8 SYSTEM_GET_PARTID = 0xF1;
const quint8 SYSTEM_COMMAND_TRANSMISSION_ERROR = 0xF3;
const quint8 SYSTEM_GET_VERSION = 0xF5;

const quint8 STEPPER_FEEDRATE_MOTOR_CONTROL = 0x20;
const quint8 STEPPER_FEED = 0x23;

const quint8 CUTTER_MOTOR = 0x20;
const quint8 CUTTER_SPEED_CUTTING = 0x30;
const quint8 CUTTER_SPEED_RETURN = 0x31;
const quint8 CUTTER_HANDWHEEL_POSITION = 0x40;

const quint8 STATUS_NULL = 0x00;
const quint8 STATUS_SET = 0x01;
const quint8 STATUS_GET = 0xFF;
const quint8 STATUS_INVALID_CALIBRATION = 0xE0;


public slots:
void on_uirequest_cuttingMotor(bool state);
Expand All @@ -28,6 +54,7 @@ public slots:

signals:
void log(EventLogType type, const QString &message);
void schedule(const QByteArray &message);

};

Expand Down
8 changes: 4 additions & 4 deletions BrainATUMtome/serialport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ SerialPort::SerialPort(QObject *parent) : QObject(parent),
connect(m_timerRespond, &QTimer::timeout, [this](){emit log(EventLogType::Warn, "SerialPort :: respond timeout.");});


connect(stateListener, &QState::entered, [this](){emit log(EventLogType::Notify, "SerialPort ::Dispatcher::Listener");});
connect(stateSender, &QState::entered, [this](){emit log(EventLogType::Notify, "SerialPort ::Dispatcher::Sender");});
connect(stateReceiver, &QState::entered, [this](){emit log(EventLogType::Notify, "SerialPort ::Dispatcher::Receiver");});
//connect(stateListener, &QState::entered, [this](){emit log(EventLogType::Notify, "SerialPort ::Dispatcher::Listener");});
//connect(stateSender, &QState::entered, [this](){emit log(EventLogType::Notify, "SerialPort ::Dispatcher::Sender");});
//connect(stateReceiver, &QState::entered, [this](){emit log(EventLogType::Notify, "SerialPort ::Dispatcher::Receiver");});


}
Expand Down Expand Up @@ -135,7 +135,7 @@ void SerialPort::on_bufferWrite()
else
{
m_timerRespond->start();
emit log(EventLogType::Notify, "SerialPort :: message " + QString::fromUtf8(packageBuffer));
emit log(EventLogType::Respond, "SerialPort :: message " + QString::fromUtf8(packageBuffer));
emit sent();
}
}
2 changes: 1 addition & 1 deletion config/settings.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[microtome]
#deviceName=Leica
#deviceName=LeicaEMUC7
#port=COM2
#baudRate=19200
deviceName=Arduino
Expand Down

0 comments on commit f681987

Please sign in to comment.