Added various improvements
This commit is contained in:
@@ -22,9 +22,11 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <QRandomGenerator>
|
||||||
|
|
||||||
CanController::CanController(QObject* parent)
|
CanController::CanController(QObject* parent)
|
||||||
: QObject{parent}
|
: QObject{parent}
|
||||||
|
, lastPackageDateTime_(QDateTime::fromMSecsSinceEpoch(0))
|
||||||
{
|
{
|
||||||
setupDrivers();
|
setupDrivers();
|
||||||
setupDefaultParameters();
|
setupDefaultParameters();
|
||||||
@@ -33,23 +35,26 @@ CanController::CanController(QObject* parent)
|
|||||||
connect(backend.getTrace(), &CanTrace::messageEnqueued, this, &CanController::handlePackage);
|
connect(backend.getTrace(), &CanTrace::messageEnqueued, this, &CanController::handlePackage);
|
||||||
|
|
||||||
QSettings settings("settings.ini", QSettings::IniFormat);
|
QSettings settings("settings.ini", QSettings::IniFormat);
|
||||||
auto sendParametersTimeout = settings.value("sendParametersTimeout", 50).toInt();
|
|
||||||
|
|
||||||
const auto sendParametersTimer = new QTimer(this);
|
const auto sendParametersTimer = new QTimer(this);
|
||||||
|
const auto sendParametersTimeout = settings.value("sendParametersTimeout", 50).toInt();
|
||||||
sendParametersTimer->start(sendParametersTimeout);
|
sendParametersTimer->start(sendParametersTimeout);
|
||||||
connect(sendParametersTimer, &QTimer::timeout, this, &CanController::sendParameters);
|
connect(sendParametersTimer, &QTimer::timeout, this, &CanController::sendParameters);
|
||||||
|
|
||||||
// auto statusTimer = new QTimer(this);
|
const auto sendVkuClosureTimer = new QTimer(this);
|
||||||
// statusTimer->start(5000);
|
const auto sendVkuClosureTimeout = settings.value("sendVkuClosureTimeout", 50).toInt();
|
||||||
|
sendVkuClosureTimer->start(sendVkuClosureTimeout);
|
||||||
|
connect(sendVkuClosureTimer, &QTimer::timeout, this, &CanController::sendVkuClosure);
|
||||||
|
|
||||||
|
const auto updateCanStatusTimer = new QTimer(this);
|
||||||
|
updateCanStatusTimer->start(1000);
|
||||||
|
connect(updateCanStatusTimer, &QTimer::timeout, this, &CanController::updateCanStatus);
|
||||||
|
|
||||||
|
// auto statusTimer = new QTimer(this);
|
||||||
|
// statusTimer->start(1000);
|
||||||
// statusTimer->callOnTimeout([this]
|
// statusTimer->callOnTimeout([this]
|
||||||
// {
|
// {
|
||||||
// QVariantMap statusMap;
|
// showStatus(QRandomGenerator::global()->generate());
|
||||||
// statusMap.insert("time", QDateTime::currentDateTime().toString());
|
|
||||||
// statusMap.insert("status", "0x" + QString::number(0xff, 16).toUpper().rightJustified(2, '0'));
|
|
||||||
// statusMap.insert("description", "asdfasdfasdf");
|
|
||||||
// statuses_.prepend(statusMap);
|
|
||||||
// emit statusesChanged();
|
|
||||||
// });
|
// });
|
||||||
|
|
||||||
QTimer::singleShot(0, this, &CanController::connectCan);
|
QTimer::singleShot(0, this, &CanController::connectCan);
|
||||||
@@ -81,6 +86,8 @@ void CanController::connectCan()
|
|||||||
}
|
}
|
||||||
|
|
||||||
backend.startMeasurement();
|
backend.startMeasurement();
|
||||||
|
|
||||||
|
QTimer::singleShot(150, this, [this]{ updateCanStatus(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanController::disconnectCan()
|
void CanController::disconnectCan()
|
||||||
@@ -88,21 +95,10 @@ void CanController::disconnectCan()
|
|||||||
Backend::instance().stopMeasurement();
|
Backend::instance().stopMeasurement();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanController::vkuClosure()
|
void CanController::switchVkuClosure()
|
||||||
{
|
{
|
||||||
CanMessage message(0x201);
|
setProperty("isVkuClosed", !isVkuClosed_);
|
||||||
message.setLength(8);
|
sendVkuClosure();
|
||||||
message.setByte(0, 0x01);
|
|
||||||
|
|
||||||
auto& backend = Backend::instance();
|
|
||||||
for (const auto interfaceId: backend.getInterfaceList())
|
|
||||||
{
|
|
||||||
auto interface = backend.getInterfaceById(interfaceId);
|
|
||||||
if (interface)
|
|
||||||
{
|
|
||||||
interface->sendMessage(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanController::emergencyReset()
|
void CanController::emergencyReset()
|
||||||
@@ -137,7 +133,7 @@ void CanController::sendParameters()
|
|||||||
const auto breakingCurrent = breakingCurrent_.toUInt();
|
const auto breakingCurrent = breakingCurrent_.toUInt();
|
||||||
message.setByte(3, breakingCurrent & 0xFF);
|
message.setByte(3, breakingCurrent & 0xFF);
|
||||||
|
|
||||||
const auto emergencyDelay = emergencyDelay_.toUInt();
|
const auto emergencyDelay = qRound(emergencyDelay_.toDouble() * 2.0);
|
||||||
message.setByte(4, emergencyDelay & 0xFF);
|
message.setByte(4, emergencyDelay & 0xFF);
|
||||||
|
|
||||||
const auto retriesAfterEmergencyBreak = retriesAfterEmergencyBreak_.toUInt();
|
const auto retriesAfterEmergencyBreak = retriesAfterEmergencyBreak_.toUInt();
|
||||||
@@ -156,8 +152,27 @@ void CanController::sendParameters()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CanController::sendVkuClosure()
|
||||||
|
{
|
||||||
|
CanMessage message(0x201);
|
||||||
|
message.setLength(8);
|
||||||
|
message.setByte(0, isVkuClosed_ ? 0x01 : 0x00);
|
||||||
|
|
||||||
|
auto& backend = Backend::instance();
|
||||||
|
for (const auto interfaceId: backend.getInterfaceList())
|
||||||
|
{
|
||||||
|
auto interface = backend.getInterfaceById(interfaceId);
|
||||||
|
if (interface)
|
||||||
|
{
|
||||||
|
interface->sendMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CanController::handlePackage(int index)
|
void CanController::handlePackage(int index)
|
||||||
{
|
{
|
||||||
|
lastPackageDateTime_ = QDateTime::currentDateTime();
|
||||||
|
|
||||||
auto& backend = Backend::instance();
|
auto& backend = Backend::instance();
|
||||||
auto message = backend.getTrace()->getMessage(index);
|
auto message = backend.getTrace()->getMessage(index);
|
||||||
if (!message)
|
if (!message)
|
||||||
@@ -184,8 +199,8 @@ void CanController::handleCurrentState(const CanMessage* message)
|
|||||||
quint16 outputVoltage = (message->getByte(2) << 8) + message->getByte(3);
|
quint16 outputVoltage = (message->getByte(2) << 8) + message->getByte(3);
|
||||||
setProperty("outputVoltage", QString::number(outputVoltage));
|
setProperty("outputVoltage", QString::number(outputVoltage));
|
||||||
|
|
||||||
quint8 outputCurrent = message->getByte(4);
|
quint8 inputCurrent = message->getByte(4);
|
||||||
setProperty("outputCurrent", QString::number(outputCurrent));
|
setProperty("inputCurrent", QString::number(inputCurrent));
|
||||||
|
|
||||||
qint16 radiatorTemperature = (message->getByte(5) << 8) + message->getByte(6);
|
qint16 radiatorTemperature = (message->getByte(5) << 8) + message->getByte(6);
|
||||||
setProperty("radiatorTemperature", QString::number(radiatorTemperature));
|
setProperty("radiatorTemperature", QString::number(radiatorTemperature));
|
||||||
@@ -193,22 +208,37 @@ void CanController::handleCurrentState(const CanMessage* message)
|
|||||||
|
|
||||||
void CanController::handleStatus(const CanMessage* message)
|
void CanController::handleStatus(const CanMessage* message)
|
||||||
{
|
{
|
||||||
QMap<quint8, QString> statusDescriptionMap =
|
quint8 status = message->getByte(0);
|
||||||
|
showStatus(status);
|
||||||
|
|
||||||
|
quint8 emergencyCounter = message->getByte(1);
|
||||||
|
setProperty("emergencyCounter", QString::number(emergencyCounter));
|
||||||
|
|
||||||
|
// bool isVkuClosed = (message->getByte(2) & 0x1) == 1;
|
||||||
|
// setProperty("isVkuClosed", isVkuClosed);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CanController::showStatus(quint32 status)
|
||||||
|
{
|
||||||
|
QMap<quint32, QString> statusDescriptionMap =
|
||||||
{
|
{
|
||||||
{0x00, tr("Reset")},
|
{0x00, tr("Reset")},
|
||||||
{0x01, tr("No incoming messages via CAN interface")},
|
{0x01, tr("No incoming messages via CAN interface")},
|
||||||
|
{0x02, tr("Pause after breaking")},
|
||||||
{0x03, tr("Waiting for a command for closing")},
|
{0x03, tr("Waiting for a command for closing")},
|
||||||
{0x04, tr("Work via CAN")},
|
{0x04, tr("Work via CAN")},
|
||||||
{0x05, tr("Work via button signal")},
|
{0x05, tr("Work via button signal")},
|
||||||
{0x06, tr("Work via CAN or button signal")},
|
{0x06, tr("Work via CAN or button signal")},
|
||||||
|
{0x18, tr("Exceeding radiator temperature")},
|
||||||
{0x20, tr("Exceeding input voltage")},
|
{0x20, tr("Exceeding input voltage")},
|
||||||
{0x22, tr("Exceeding maximum current")},
|
{0x22, tr("Exceeding maximum current")},
|
||||||
{0x18, tr("Exceeding radiator temperature")},
|
{0x23, tr("Exceeding switching current")},
|
||||||
{0x02, tr("Pause after breaking")},
|
{0x25, tr("Voltage 5V is not normal")},
|
||||||
{0x80, tr("Blocking due to emergency")}
|
{0x80, tr("Blocking due to emergency")},
|
||||||
|
{0x0100, tr("Can connected")},
|
||||||
|
{0x0200, tr("Can disconnected")},
|
||||||
};
|
};
|
||||||
|
|
||||||
quint8 status = message->getByte(0);
|
|
||||||
auto statusDescription = statusDescriptionMap.value(status, tr("Unknown status"));
|
auto statusDescription = statusDescriptionMap.value(status, tr("Unknown status"));
|
||||||
|
|
||||||
QVariantMap statusMap;
|
QVariantMap statusMap;
|
||||||
@@ -221,12 +251,17 @@ void CanController::handleStatus(const CanMessage* message)
|
|||||||
statuses_.prepend(statusMap);
|
statuses_.prepend(statusMap);
|
||||||
emit statusesChanged();
|
emit statusesChanged();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
quint8 emergencyCounter = message->getByte(1);
|
void CanController::updateCanStatus()
|
||||||
setProperty("emergencyCounter", QString::number(emergencyCounter));
|
{
|
||||||
|
auto isConnected = lastPackageDateTime_.msecsTo(QDateTime::currentDateTime()) < 2000;
|
||||||
bool isVkuClosed = (message->getByte(2) & 0x1) == 1;
|
if (isConnected_ != isConnected || isFirstCheck_)
|
||||||
setProperty("isVkuClosed", isVkuClosed);
|
{
|
||||||
|
isConnected_ = isConnected;
|
||||||
|
isFirstCheck_ = false;
|
||||||
|
showStatus(isConnected ? 0x0100 : 0x0200);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanController::setupDrivers()
|
void CanController::setupDrivers()
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
|
#include <QDateTime>
|
||||||
|
|
||||||
class QQmlEngine;
|
class QQmlEngine;
|
||||||
class QJSEngine;
|
class QJSEngine;
|
||||||
@@ -17,7 +18,7 @@ class CanController : public QObject
|
|||||||
Q_PROPERTY(QString radiatorTemperature MEMBER radiatorTemperature_ NOTIFY radiatorTemperatureChanged)
|
Q_PROPERTY(QString radiatorTemperature MEMBER radiatorTemperature_ NOTIFY radiatorTemperatureChanged)
|
||||||
Q_PROPERTY(QString outputVoltage MEMBER outputVoltage_ NOTIFY outputVoltageChanged)
|
Q_PROPERTY(QString outputVoltage MEMBER outputVoltage_ NOTIFY outputVoltageChanged)
|
||||||
Q_PROPERTY(QString emergencyCounter MEMBER emergencyCounter_ NOTIFY emergencyCounterChanged)
|
Q_PROPERTY(QString emergencyCounter MEMBER emergencyCounter_ NOTIFY emergencyCounterChanged)
|
||||||
Q_PROPERTY(QString outputCurrent MEMBER outputCurrent_ NOTIFY outputCurrentChanged)
|
Q_PROPERTY(QString inputCurrent MEMBER inputCurrent_ NOTIFY inputCurrentChanged)
|
||||||
|
|
||||||
Q_PROPERTY(QString maximumCurrent MEMBER maximumCurrent_ NOTIFY maximumCurrentChanged)
|
Q_PROPERTY(QString maximumCurrent MEMBER maximumCurrent_ NOTIFY maximumCurrentChanged)
|
||||||
Q_PROPERTY(QString emergencyDelay MEMBER emergencyDelay_ NOTIFY emergencyDelayChanged)
|
Q_PROPERTY(QString emergencyDelay MEMBER emergencyDelay_ NOTIFY emergencyDelayChanged)
|
||||||
@@ -38,18 +39,19 @@ public slots:
|
|||||||
void connectCan();
|
void connectCan();
|
||||||
void disconnectCan();
|
void disconnectCan();
|
||||||
|
|
||||||
void vkuClosure();
|
void switchVkuClosure();
|
||||||
void emergencyReset();
|
void emergencyReset();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void sendParameters();
|
void sendParameters();
|
||||||
|
void sendVkuClosure();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void inputVoltageChanged();
|
void inputVoltageChanged();
|
||||||
void radiatorTemperatureChanged();
|
void radiatorTemperatureChanged();
|
||||||
void outputVoltageChanged();
|
void outputVoltageChanged();
|
||||||
void emergencyCounterChanged();
|
void emergencyCounterChanged();
|
||||||
void outputCurrentChanged();
|
void inputCurrentChanged();
|
||||||
|
|
||||||
void maximumCurrentChanged();
|
void maximumCurrentChanged();
|
||||||
void emergencyDelayChanged();
|
void emergencyDelayChanged();
|
||||||
@@ -65,16 +67,23 @@ private slots:
|
|||||||
void handleCurrentState(const CanMessage* message);
|
void handleCurrentState(const CanMessage* message);
|
||||||
void handleStatus(const CanMessage* message);
|
void handleStatus(const CanMessage* message);
|
||||||
|
|
||||||
|
void showStatus(quint32 status);
|
||||||
|
void updateCanStatus();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupDrivers();
|
void setupDrivers();
|
||||||
void setupDefaultParameters();
|
void setupDefaultParameters();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool isConnected_ = false;
|
||||||
|
bool isFirstCheck_ = true;
|
||||||
|
QDateTime lastPackageDateTime_;
|
||||||
|
|
||||||
QString inputVoltage_;
|
QString inputVoltage_;
|
||||||
QString radiatorTemperature_;
|
QString radiatorTemperature_;
|
||||||
QString outputVoltage_;
|
QString outputVoltage_;
|
||||||
QString emergencyCounter_;
|
QString emergencyCounter_;
|
||||||
QString outputCurrent_;
|
QString inputCurrent_;
|
||||||
|
|
||||||
QString maximumCurrent_;
|
QString maximumCurrent_;
|
||||||
QString emergencyDelay_;
|
QString emergencyDelay_;
|
||||||
@@ -82,8 +91,9 @@ private:
|
|||||||
QString retriesAfterEmergencyBreak_;
|
QString retriesAfterEmergencyBreak_;
|
||||||
QString breakingCurrent_;
|
QString breakingCurrent_;
|
||||||
|
|
||||||
QVariantList statuses_;
|
|
||||||
bool isVkuClosed_ = false;
|
bool isVkuClosed_ = false;
|
||||||
|
|
||||||
|
QVariantList statuses_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CANCONTROLLER_H
|
#endif // CANCONTROLLER_H
|
||||||
|
|||||||
10
qml/main.qml
10
qml/main.qml
@@ -84,9 +84,9 @@ QuickControls.ApplicationWindow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Indicator {
|
Indicator {
|
||||||
label: qsTr("Output current")
|
label: qsTr("Input current")
|
||||||
indicator: qsTr("A")
|
indicator: qsTr("A")
|
||||||
value.text: CanController.outputCurrent
|
value.text: CanController.inputCurrent
|
||||||
value.readOnly: true
|
value.readOnly: true
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredWidth: 100
|
Layout.preferredWidth: 100
|
||||||
@@ -97,7 +97,7 @@ QuickControls.ApplicationWindow {
|
|||||||
text: CanController.isVkuClosed ? qsTr("VKU opening") : qsTr("VKU closing")
|
text: CanController.isVkuClosed ? qsTr("VKU opening") : qsTr("VKU closing")
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.topMargin: Ui.scale(12)
|
Layout.topMargin: Ui.scale(12)
|
||||||
onClicked: CanController.vkuClosure()
|
onClicked: CanController.switchVkuClosure()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,6 +235,10 @@ QuickControls.ApplicationWindow {
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QuickControls.ScrollBar.vertical: QuickControls.ScrollBar {
|
||||||
|
policy: size > 0 && size < 1 ? QuickControls.ScrollBar.AlwaysOn : QuickControls.ScrollBar.AsNeeded
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
[General]
|
[General]
|
||||||
bitrate=100000
|
bitrate=100000
|
||||||
sendParametersTimeout=50
|
sendParametersTimeout=50
|
||||||
|
sendVkuClosureTimeout=50
|
||||||
|
|||||||
@@ -4,62 +4,82 @@
|
|||||||
<context>
|
<context>
|
||||||
<name>CanController</name>
|
<name>CanController</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cpp/CanController.cpp" line="198"/>
|
<location filename="../cpp/CanController.cpp" line="225"/>
|
||||||
<source>Reset</source>
|
<source>Reset</source>
|
||||||
<translation>Сброс</translation>
|
<translation>Сброс</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cpp/CanController.cpp" line="199"/>
|
<location filename="../cpp/CanController.cpp" line="226"/>
|
||||||
<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="200"/>
|
<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>Ожидание команды на замыкание</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cpp/CanController.cpp" line="201"/>
|
<location filename="../cpp/CanController.cpp" line="229"/>
|
||||||
<source>Work via CAN</source>
|
<source>Work via CAN</source>
|
||||||
<translation>Работа по CAN</translation>
|
<translation>Работа по CAN</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cpp/CanController.cpp" line="202"/>
|
<location filename="../cpp/CanController.cpp" line="230"/>
|
||||||
<source>Work via button signal</source>
|
<source>Work via button signal</source>
|
||||||
<translation>Работа по сигналу кнопки</translation>
|
<translation>Работа по сигналу кнопки</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cpp/CanController.cpp" line="203"/>
|
<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>Работа по CAN или сигналу кнопки</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cpp/CanController.cpp" line="204"/>
|
<location filename="../cpp/CanController.cpp" line="233"/>
|
||||||
<source>Exceeding input voltage</source>
|
<source>Exceeding input voltage</source>
|
||||||
<translation>Превышение входного напряжения</translation>
|
<translation>Превышение входного напряжения</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cpp/CanController.cpp" line="205"/>
|
<location filename="../cpp/CanController.cpp" line="234"/>
|
||||||
<source>Exceeding maximum current</source>
|
<source>Exceeding maximum current</source>
|
||||||
<translation>Превышение максимального тока</translation>
|
<translation>Превышение максимального тока</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cpp/CanController.cpp" line="206"/>
|
<location filename="../cpp/CanController.cpp" line="232"/>
|
||||||
<source>Exceeding radiator temperature</source>
|
<source>Exceeding radiator temperature</source>
|
||||||
<translation>Превышение температуры радиатора</translation>
|
<translation>Превышение температуры радиатора</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cpp/CanController.cpp" line="207"/>
|
<location filename="../cpp/CanController.cpp" line="227"/>
|
||||||
<source>Pause after breaking</source>
|
<source>Pause after breaking</source>
|
||||||
<translation>Пауза после размыкания</translation>
|
<translation>Пауза после размыкания</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cpp/CanController.cpp" line="208"/>
|
<location filename="../cpp/CanController.cpp" line="235"/>
|
||||||
|
<source>Exceeding switching current</source>
|
||||||
|
<translation>Превышение коммутируемого тока</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../cpp/CanController.cpp" line="236"/>
|
||||||
|
<source>Voltage 5V is not normal</source>
|
||||||
|
<translation>Напряжение 5В не в норме</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../cpp/CanController.cpp" line="237"/>
|
||||||
<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="212"/>
|
<location filename="../cpp/CanController.cpp" line="238"/>
|
||||||
|
<source>Can connected</source>
|
||||||
|
<translation>Can подключен</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../cpp/CanController.cpp" line="239"/>
|
||||||
|
<source>Can disconnected</source>
|
||||||
|
<translation>Can отключен</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../cpp/CanController.cpp" line="242"/>
|
||||||
<source>Unknown status</source>
|
<source>Unknown status</source>
|
||||||
<translation>Неизвестный статус</translation>
|
<translation>Неизвестный статус</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -263,9 +283,8 @@
|
|||||||
<translation>Счетчик аварий</translation>
|
<translation>Счетчик аварий</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/main.qml" line="87"/>
|
|
||||||
<source>Output current</source>
|
<source>Output current</source>
|
||||||
<translation>Выходной ток</translation>
|
<translation type="vanished">Выходной ток</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/main.qml" line="88"/>
|
<location filename="../qml/main.qml" line="88"/>
|
||||||
@@ -278,15 +297,20 @@
|
|||||||
<source>VKU closure</source>
|
<source>VKU closure</source>
|
||||||
<translation type="vanished">Замыкание ВКУ</translation>
|
<translation type="vanished">Замыкание ВКУ</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../qml/main.qml" line="87"/>
|
||||||
|
<source>Input current</source>
|
||||||
|
<translation>Входной ток</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/main.qml" line="97"/>
|
<location filename="../qml/main.qml" line="97"/>
|
||||||
<source>VKU opening</source>
|
<source>VKU opening</source>
|
||||||
<translation>Замыкание ВКУ</translation>
|
<translation>Размыкание ВКУ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/main.qml" line="97"/>
|
<location filename="../qml/main.qml" line="97"/>
|
||||||
<source>VKU closing</source>
|
<source>VKU closing</source>
|
||||||
<translation>Размыкание ВКУ</translation>
|
<translation>Замыкание ВКУ</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../qml/main.qml" line="118"/>
|
<location filename="../qml/main.qml" line="118"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user