Commit bae371454503efbf3f27faaecc81b37b08cd66c5
1 parent
81b55e0463
Exists in
master
and in
2 other branches
485 통신 오류 검출 루틴
- 10초 동안 UDP를 받지 못하면 통신 오류 시그널 출력 - 통신 오류 시그널 출력 후 UDP를 받으면 통신 복구 시그널 출력
Showing
2 changed files
with
27 additions
and
0 deletions
Show diff stats
app/gui/oven_control/udphandler.cpp
| @@ -17,6 +17,13 @@ UdpHandler::UdpHandler(QObject *parent) : QObject(parent) | @@ -17,6 +17,13 @@ UdpHandler::UdpHandler(QObject *parent) : QObject(parent) | ||
| 17 | { | 17 | { |
| 18 | bzero(&control, sizeof(control)); | 18 | bzero(&control, sizeof(control)); |
| 19 | bzero(&state, sizeof(state)); | 19 | bzero(&state, sizeof(state)); |
| 20 | + | ||
| 21 | + emitted = false; | ||
| 22 | + emitTimeoutTimer.setSingleShot(true); | ||
| 23 | + emitTimeoutTimer.setInterval(10 * 1000); | ||
| 24 | + connect(&emitTimeoutTimer, SIGNAL(timeout()), SLOT(emitTimeout())); | ||
| 25 | + | ||
| 26 | + emitTimeoutTimer.start(); | ||
| 20 | } | 27 | } |
| 21 | 28 | ||
| 22 | bool UdpHandler::init() | 29 | bool UdpHandler::init() |
| @@ -48,6 +55,12 @@ void UdpHandler::processDatagram(QByteArray &datagram) | @@ -48,6 +55,12 @@ void UdpHandler::processDatagram(QByteArray &datagram) | ||
| 48 | { | 55 | { |
| 49 | sock->writeDatagram(datagram, QHostAddress("localhost"), 40001); | 56 | sock->writeDatagram(datagram, QHostAddress("localhost"), 40001); |
| 50 | 57 | ||
| 58 | + if (emitted) | ||
| 59 | + { | ||
| 60 | + emitted = false; | ||
| 61 | + emit recovered(); | ||
| 62 | + } | ||
| 63 | + | ||
| 51 | packet_t *packet = (packet_t *) datagram.data(); | 64 | packet_t *packet = (packet_t *) datagram.data(); |
| 52 | switch (packet->header) | 65 | switch (packet->header) |
| 53 | { | 66 | { |
| @@ -63,6 +76,8 @@ void UdpHandler::processDatagram(QByteArray &datagram) | @@ -63,6 +76,8 @@ void UdpHandler::processDatagram(QByteArray &datagram) | ||
| 63 | qDebug() << "Received Error"; | 76 | qDebug() << "Received Error"; |
| 64 | break; | 77 | break; |
| 65 | } | 78 | } |
| 79 | + | ||
| 80 | + emitTimeoutTimer.start(); | ||
| 66 | } | 81 | } |
| 67 | 82 | ||
| 68 | void UdpHandler::processControl(oven_control_t *control) | 83 | void UdpHandler::processControl(oven_control_t *control) |
| @@ -105,6 +120,12 @@ void UdpHandler::sendCommand(int cmd, int target, int value) | @@ -105,6 +120,12 @@ void UdpHandler::sendCommand(int cmd, int target, int value) | ||
| 105 | sock->writeDatagram((const char *) &command, sizeof(command), QHostAddress(IPC_UDP_SYS_HOST), IPC_UDP_SYS_PORT); | 120 | sock->writeDatagram((const char *) &command, sizeof(command), QHostAddress(IPC_UDP_SYS_HOST), IPC_UDP_SYS_PORT); |
| 106 | } | 121 | } |
| 107 | 122 | ||
| 123 | +void UdpHandler::emitTimeout() | ||
| 124 | +{ | ||
| 125 | + emitted = true; | ||
| 126 | + emit timeout(); | ||
| 127 | +} | ||
| 128 | + | ||
| 108 | void UdpHandler::fillControl(oven_control_t &container) | 129 | void UdpHandler::fillControl(oven_control_t &container) |
| 109 | { | 130 | { |
| 110 | memcpy(&container, &control, sizeof(control)); | 131 | memcpy(&container, &control, sizeof(control)); |
app/gui/oven_control/udphandler.h
| @@ -4,6 +4,7 @@ | @@ -4,6 +4,7 @@ | ||
| 4 | #include <QObject> | 4 | #include <QObject> |
| 5 | #include <QUdpSocket> | 5 | #include <QUdpSocket> |
| 6 | #include <QByteArray> | 6 | #include <QByteArray> |
| 7 | +#include <QTimer> | ||
| 7 | 8 | ||
| 8 | #include "../../app-prime-modbus/include/all_share.h" | 9 | #include "../../app-prime-modbus/include/all_share.h" |
| 9 | 10 | ||
| @@ -55,6 +56,8 @@ public: | @@ -55,6 +56,8 @@ public: | ||
| 55 | 56 | ||
| 56 | signals: | 57 | signals: |
| 57 | void changed(); | 58 | void changed(); |
| 59 | + void timeout(); | ||
| 60 | + void recovered(); | ||
| 58 | 61 | ||
| 59 | public slots: | 62 | public slots: |
| 60 | void turnOn(int target); | 63 | void turnOn(int target); |
| @@ -71,11 +74,14 @@ private: | @@ -71,11 +74,14 @@ private: | ||
| 71 | void processState(oven_state_t *state); | 74 | void processState(oven_state_t *state); |
| 72 | 75 | ||
| 73 | QUdpSocket *sock; | 76 | QUdpSocket *sock; |
| 77 | + QTimer emitTimeoutTimer; | ||
| 78 | + bool emitted; | ||
| 74 | 79 | ||
| 75 | private slots: | 80 | private slots: |
| 76 | void readPendingDatagrams(); | 81 | void readPendingDatagrams(); |
| 77 | void sendCommand(int cmd, int target, int value); | 82 | void sendCommand(int cmd, int target, int value); |
| 78 | 83 | ||
| 84 | + void emitTimeout(); | ||
| 79 | }; | 85 | }; |
| 80 | 86 | ||
| 81 | #endif // UDPHANDLER_H | 87 | #endif // UDPHANDLER_H |