Added reconnection to CAN and some fixes

This commit is contained in:
Yury Shuvakin
2024-08-01 17:31:52 +09:00
parent a6a0513186
commit e18144b051
5 changed files with 69 additions and 30 deletions

View File

@@ -27,6 +27,7 @@
CanController::CanController(QObject* parent) CanController::CanController(QObject* parent)
: QObject{parent} : QObject{parent}
, lastPackageDateTime_(QDateTime::fromMSecsSinceEpoch(0)) , lastPackageDateTime_(QDateTime::fromMSecsSinceEpoch(0))
, reconnectTimer_(new QTimer(this))
{ {
setupDrivers(); setupDrivers();
setupDefaultParameters(); setupDefaultParameters();
@@ -50,6 +51,9 @@ CanController::CanController(QObject* parent)
updateCanStatusTimer->start(1000); updateCanStatusTimer->start(1000);
connect(updateCanStatusTimer, &QTimer::timeout, this, &CanController::updateCanStatus); connect(updateCanStatusTimer, &QTimer::timeout, this, &CanController::updateCanStatus);
reconnectTimer_->start(5000);
connect(reconnectTimer_, &QTimer::timeout, this, &CanController::tryConnectCan);
// auto statusTimer = new QTimer(this); // auto statusTimer = new QTimer(this);
// statusTimer->start(1000); // statusTimer->start(1000);
// statusTimer->callOnTimeout([this] // statusTimer->callOnTimeout([this]
@@ -95,6 +99,14 @@ void CanController::disconnectCan()
Backend::instance().stopMeasurement(); Backend::instance().stopMeasurement();
} }
void CanController::tryConnectCan()
{
if (!isConnected_)
{
connectCan();
}
}
void CanController::switchVkuClosure() void CanController::switchVkuClosure()
{ {
setProperty("isVkuClosed", !isVkuClosed_); setProperty("isVkuClosed", !isVkuClosed_);
@@ -172,6 +184,10 @@ void CanController::sendVkuClosure()
void CanController::handlePackage(int index) void CanController::handlePackage(int index)
{ {
lastPackageDateTime_ = QDateTime::currentDateTime(); lastPackageDateTime_ = QDateTime::currentDateTime();
if (isFirstCheck_)
{
updateCanStatus();
}
auto& backend = Backend::instance(); auto& backend = Backend::instance();
auto message = backend.getTrace()->getMessage(index); auto message = backend.getTrace()->getMessage(index);
@@ -222,15 +238,15 @@ void CanController::showStatus(quint32 status)
{ {
QMap<quint32, QString> statusDescriptionMap = QMap<quint32, QString> statusDescriptionMap =
{ {
{0x00, tr("Reset")}, {0x00, tr("Emergency reset")},
{0x01, tr("No incoming messages via CAN interface")}, {0x01, tr("No incoming messages via CAN interface")},
{0x02, tr("Pause after breaking")}, {0x02, tr("Pause after breaking")},
{0x03, tr("Waiting for a command for closing")}, {0x03, tr("Pause after emergency")},
{0x04, tr("Work via CAN")}, {0x04, tr("Waiting for command for closure")},
{0x05, tr("Work via button signal")}, {0x05, tr("VKU is closed")},
{0x06, tr("Work via CAN or button signal")},
{0x18, tr("Exceeding radiator temperature")}, {0x18, tr("Exceeding radiator temperature")},
{0x20, tr("Exceeding input voltage")}, {0x20, tr("Exceeding input voltage")},
{0x21, tr("Fault signal")},
{0x22, tr("Exceeding maximum current")}, {0x22, tr("Exceeding maximum current")},
{0x23, tr("Exceeding switching current")}, {0x23, tr("Exceeding switching current")},
{0x25, tr("Voltage 5V is not normal")}, {0x25, tr("Voltage 5V is not normal")},

View File

@@ -7,6 +7,7 @@
class QQmlEngine; class QQmlEngine;
class QJSEngine; class QJSEngine;
class QTimer;
class CanMessage; class CanMessage;
@@ -38,6 +39,7 @@ public:
public slots: public slots:
void connectCan(); void connectCan();
void disconnectCan(); void disconnectCan();
void tryConnectCan();
void switchVkuClosure(); void switchVkuClosure();
void emergencyReset(); void emergencyReset();
@@ -78,6 +80,7 @@ private:
bool isConnected_ = false; bool isConnected_ = false;
bool isFirstCheck_ = true; bool isFirstCheck_ = true;
QDateTime lastPackageDateTime_; QDateTime lastPackageDateTime_;
QTimer* reconnectTimer_ = nullptr;
QString inputVoltage_; QString inputVoltage_;
QString radiatorTemperature_; QString radiatorTemperature_;

View File

@@ -132,7 +132,7 @@ QuickControls.ApplicationWindow {
indicator: qsTr("A") indicator: qsTr("A")
value.text: CanController.maximumCurrent value.text: CanController.maximumCurrent
value.onEditingFinished: CanController.maximumCurrent = value.text value.onEditingFinished: CanController.maximumCurrent = value.text
value.validator: IntValidator { bottom: 0; top: 255 } value.validator: IntValidator { bottom: 0; top: 95 }
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredWidth: 100 Layout.preferredWidth: 100
} }
@@ -172,7 +172,7 @@ QuickControls.ApplicationWindow {
indicator: qsTr("A") indicator: qsTr("A")
value.text: CanController.breakingCurrent value.text: CanController.breakingCurrent
value.onEditingFinished: CanController.breakingCurrent = value.text value.onEditingFinished: CanController.breakingCurrent = value.text
value.validator: IntValidator { bottom: 0; top: 255 } value.validator: IntValidator { bottom: 0; top: 127 }
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredWidth: 100 Layout.preferredWidth: 100
} }

Binary file not shown.

View File

@@ -4,82 +4,102 @@
<context> <context>
<name>CanController</name> <name>CanController</name>
<message> <message>
<location filename="../cpp/CanController.cpp" line="225"/>
<source>Reset</source> <source>Reset</source>
<translation>Сброс</translation> <translation type="vanished">Сброс</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="226"/> <location filename="../cpp/CanController.cpp" line="242"/>
<source>No incoming messages via CAN interface</source> <source>No incoming messages via CAN interface</source>
<translation>Нет входящих сообщений по CAN</translation> <translation>Нет входящих сообщений по CAN</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="228"/>
<source>Waiting for a command for closing</source> <source>Waiting for a command for closing</source>
<translation>Ожидание команды на замыкание</translation> <translation type="vanished">Ожидание команды на замыкание</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="229"/>
<source>Work via CAN</source> <source>Work via CAN</source>
<translation>Работа по CAN</translation> <translation type="vanished">Работа по CAN</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="230"/>
<source>Work via button signal</source> <source>Work via button signal</source>
<translation>Работа по сигналу кнопки</translation> <translation type="vanished">Работа по сигналу кнопки</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="231"/>
<source>Work via CAN or button signal</source> <source>Work via CAN or button signal</source>
<translation>Работа по CAN или сигналу кнопки</translation> <translation type="vanished">Работа по CAN или сигналу кнопки</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="233"/> <location filename="../cpp/CanController.cpp" line="248"/>
<source>Exceeding input voltage</source> <source>Exceeding input voltage</source>
<translation>Превышение входного напряжения</translation> <translation>Превышение входного напряжения</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="234"/> <location filename="../cpp/CanController.cpp" line="250"/>
<source>Exceeding maximum current</source> <source>Exceeding maximum current</source>
<translation>Превышение максимального тока</translation> <translation>Превышение максимального тока</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="232"/> <location filename="../cpp/CanController.cpp" line="247"/>
<source>Exceeding radiator temperature</source> <source>Exceeding radiator temperature</source>
<translation>Превышение температуры радиатора</translation> <translation>Превышение температуры радиатора</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="227"/> <location filename="../cpp/CanController.cpp" line="241"/>
<source>Pause after breaking</source> <source>Emergency reset</source>
<translation>Пауза после размыкания</translation> <translation>Сброс аварии</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="235"/> <location filename="../cpp/CanController.cpp" line="243"/>
<source>Pause after breaking</source>
<translation>Задержка после размыкания</translation>
</message>
<message>
<location filename="../cpp/CanController.cpp" line="244"/>
<source>Pause after emergency</source>
<translation>Задержка после аварии</translation>
</message>
<message>
<location filename="../cpp/CanController.cpp" line="245"/>
<source>Waiting for command for closure</source>
<translation>Ожидание команды на замыкание</translation>
</message>
<message>
<location filename="../cpp/CanController.cpp" line="246"/>
<source>VKU is closed</source>
<translation>ВКУ замкнут</translation>
</message>
<message>
<location filename="../cpp/CanController.cpp" line="249"/>
<source>Fault signal</source>
<translation>Сигнал Fault</translation>
</message>
<message>
<location filename="../cpp/CanController.cpp" line="251"/>
<source>Exceeding switching current</source> <source>Exceeding switching current</source>
<translation>Превышение коммутируемого тока</translation> <translation>Превышение коммутируемого тока</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="236"/> <location filename="../cpp/CanController.cpp" line="252"/>
<source>Voltage 5V is not normal</source> <source>Voltage 5V is not normal</source>
<translation>Напряжение 5В не в норме</translation> <translation>Напряжение 5В не в норме</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="237"/> <location filename="../cpp/CanController.cpp" line="253"/>
<source>Blocking due to emergency</source> <source>Blocking due to emergency</source>
<translation>Блокировка по аварии</translation> <translation>Блокировка по аварии</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="238"/> <location filename="../cpp/CanController.cpp" line="254"/>
<source>Can connected</source> <source>Can connected</source>
<translation>Can подключен</translation> <translation>Can подключен</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="239"/> <location filename="../cpp/CanController.cpp" line="255"/>
<source>Can disconnected</source> <source>Can disconnected</source>
<translation>Can отключен</translation> <translation>Can отключен</translation>
</message> </message>
<message> <message>
<location filename="../cpp/CanController.cpp" line="242"/> <location filename="../cpp/CanController.cpp" line="258"/>
<source>Unknown status</source> <source>Unknown status</source>
<translation>Неизвестный статус</translation> <translation>Неизвестный статус</translation>
</message> </message>