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 |