From b3f44bfb0fcae8d679fc8188816f5ebc70299149 Mon Sep 17 00:00:00 2001 From: Georgi Tushev Date: Wed, 2 Jan 2019 23:53:12 +0100 Subject: [PATCH] add epos timer --- BrainATUMtome/BrainATUMtome.pro | 1 + BrainATUMtome/epos.cpp | 16 +++++++++++++++- BrainATUMtome/epos.h | 2 +- BrainATUMtome/mainwindow.cpp | 34 +++++++++++++++++++++++++++++---- BrainATUMtome/mainwindow.h | 4 ++++ 5 files changed, 51 insertions(+), 6 deletions(-) diff --git a/BrainATUMtome/BrainATUMtome.pro b/BrainATUMtome/BrainATUMtome.pro index 34e4717..3088193 100644 --- a/BrainATUMtome/BrainATUMtome.pro +++ b/BrainATUMtome/BrainATUMtome.pro @@ -54,3 +54,4 @@ DEPENDPATH += $$PWD/../libs/epos/include macx: INCLUDEPATH += $$PWD/../libs/epos/macx macx: LIBS += -L$$PWD/../libs/epos/macx -lepos + diff --git a/BrainATUMtome/epos.cpp b/BrainATUMtome/epos.cpp index 0606cfb..69b6557 100644 --- a/BrainATUMtome/epos.cpp +++ b/BrainATUMtome/epos.cpp @@ -126,7 +126,7 @@ void Epos::setVelocityMode(HANDLE m_keyHandle) } } -void Epos::move(HANDLE m_keyHandle, qint16 velocityMust) +void Epos::move(HANDLE m_keyHandle, int velocityMust) { enable(m_keyHandle); @@ -230,6 +230,19 @@ void Epos::on_uirequest_velocity(int motorid, int velocity) } emit log(EventLogType::Notify, "EPOS :: " + textMotor + " motor " + textState); + + // activate/deactivate runing state + BOOL runningState = (velocity == 0) ? FALSE : TRUE; + HANDLE keyHandle = (motorid == MOTORID_LOWER) ? m_keyHandle_lower : m_keyHandle_upper; + + if (runningState) { + move(keyHandle, velocity); + } + else { + stop(keyHandle); + } + + setLedGreen(runningState); } @@ -237,4 +250,5 @@ void Epos::on_uirequest_tension(bool state) { QString textState = (state) ? "on" : "off"; emit log(EventLogType::Notify, "EPOS :: tension motor is " + textState); + setTension(state); } diff --git a/BrainATUMtome/epos.h b/BrainATUMtome/epos.h index f41a8fd..58d0fd3 100644 --- a/BrainATUMtome/epos.h +++ b/BrainATUMtome/epos.h @@ -28,7 +28,7 @@ class Epos : public QObject void enable(HANDLE m_keyHandle); void disable(HANDLE m_keyHandle); void setVelocityMode(HANDLE m_keyHandle); - void move(HANDLE m_keyHandle, qint16 velocityMust); + void move(HANDLE m_keyHandle, int velocityMust); void stop(HANDLE m_keyHandle); void setDOPin(HANDLE m_keyHandle, WORD digitalOutputNb, WORD configuration, BOOL state); diff --git a/BrainATUMtome/mainwindow.cpp b/BrainATUMtome/mainwindow.cpp index 33ac565..a9311bc 100644 --- a/BrainATUMtome/mainwindow.cpp +++ b/BrainATUMtome/mainwindow.cpp @@ -7,7 +7,10 @@ MainWindow::MainWindow(QWidget *parent) : m_driverEpos(nullptr), m_driverMicrotome(nullptr), m_driverSyringe(nullptr), + m_timerEpos(new QTimer(this)), + m_epos_ticks(0), m_epos_direction(0), + m_epos_velocity(1000), m_microtome_iscutting(false), m_microtome_sections(0), m_microtome_advanceRemaining(0) @@ -20,7 +23,10 @@ MainWindow::MainWindow(QWidget *parent) : } MainWindow::~MainWindow() -{ +{ + if (m_timerEpos->isActive()) + m_timerEpos->stop(); + delete ui; } @@ -50,6 +56,16 @@ void MainWindow::configure_epos() ui->spinBox_epos_sync_velocity->setKeyboardTracking(false); ui->spinBox_epos_lower_velocity->setKeyboardTracking(false); ui->spinBox_epos_upper_velocity->setKeyboardTracking(false); + + m_timerEpos = new QTimer(this); + m_timerEpos->setInterval(1000); + connect(m_timerEpos, &QTimer::timeout, + [this]() { + QString textTime = QDateTime::fromSecsSinceEpoch(++m_epos_ticks).toUTC().toString("hh:mm:ss"); + QString textRpm = QString::number(abs(m_epos_velocity) * m_epos_ticks / 60.0, 'f', 2); + ui->lineEdit_epos_status->setText(textTime + " / " + textRpm); + } + ); } @@ -184,14 +200,24 @@ void MainWindow::on_spinBox_epos_upper_velocity_valueChanged(int value) if (ui->radioButton_epos_upper_off->isChecked()) return; - drive_epos_motor(EPOS_UPPER_MOTTOR, value); + drive_epos_motor(EPOS_UPPER_MOTTOR, value); } void MainWindow::drive_epos_motor(int motorid, int velocity) { - int velocity_value = velocity * m_epos_direction; - emit uirequest_epos_velocity(motorid, velocity_value); + m_epos_velocity = velocity * m_epos_direction; + emit uirequest_epos_velocity(motorid, m_epos_velocity); + + if ((m_epos_velocity == 0) && m_timerEpos->isActive()) { + m_timerEpos->stop(); + m_epos_ticks = 0; + } + + if ((m_epos_velocity != 0) && !m_timerEpos->isActive()) { + m_timerEpos->start(); + } + } diff --git a/BrainATUMtome/mainwindow.h b/BrainATUMtome/mainwindow.h index 56e1b67..dc5ee8d 100644 --- a/BrainATUMtome/mainwindow.h +++ b/BrainATUMtome/mainwindow.h @@ -2,6 +2,7 @@ #define MAINWINDOW_H #include +#include #include #include "eventlog.h" @@ -27,8 +28,11 @@ class MainWindow : public QMainWindow Epos *m_driverEpos; Microtome *m_driverMicrotome; Syringe *m_driverSyringe; + QTimer *m_timerEpos; + int m_epos_ticks; int m_epos_direction; + int m_epos_velocity; bool m_microtome_iscutting; int m_microtome_sections; int m_microtome_advanceRemaining;