diff options
author | Karsten Heimrich <karsten.heimrich@theqtcompany.com> | 2016-03-01 14:27:07 +0100 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@theqtcompany.com> | 2016-03-01 14:23:34 +0000 |
commit | e40343337940705ceb830f9f20a09084185ab198 (patch) | |
tree | 4e02bcafa5bb1b0b1b2d0c98fe9244b3b60e2967 | |
parent | 75dbf60352157085f106faf88e89e97288217ae2 (diff) |
Move clearing or updating values into a common function.
Change-Id: I25ee09e5fe70464048500dc4d376d4e38805ca50
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
-rw-r--r-- | src/serialbus/qmodbusrtuserialmaster.cpp | 7 | ||||
-rw-r--r-- | src/serialbus/qmodbusrtuserialmaster_p.h | 36 | ||||
-rw-r--r-- | src/serialbus/qmodbusrtuserialslave.cpp | 4 | ||||
-rw-r--r-- | src/serialbus/qmodbusrtuserialslave_p.h | 5 |
4 files changed, 27 insertions, 25 deletions
diff --git a/src/serialbus/qmodbusrtuserialmaster.cpp b/src/serialbus/qmodbusrtuserialmaster.cpp index 17d12ad..afdcac9 100644 --- a/src/serialbus/qmodbusrtuserialmaster.cpp +++ b/src/serialbus/qmodbusrtuserialmaster.cpp @@ -97,12 +97,8 @@ bool QModbusRtuSerialMaster::open() return true; Q_D(QModbusRtuSerialMaster); - - d->responseBuffer.clear(); - - d->updateSerialPortConnectionInfo(); if (d->m_serialPort->open(QIODevice::ReadWrite)) { - d->m_serialPort->clear(); + d->setupEnvironment(); setState(QModbusDevice::ConnectedState); } else { setError(d->m_serialPort->errorString(), QModbusDevice::ConnectionError); @@ -119,7 +115,6 @@ void QModbusRtuSerialMaster::close() return; Q_D(QModbusRtuSerialMaster); - if (d->m_serialPort->isOpen()) d->m_serialPort->close(); diff --git a/src/serialbus/qmodbusrtuserialmaster_p.h b/src/serialbus/qmodbusrtuserialmaster_p.h index 9517777..c3b1b5a 100644 --- a/src/serialbus/qmodbusrtuserialmaster_p.h +++ b/src/serialbus/qmodbusrtuserialmaster_p.h @@ -218,32 +218,38 @@ public: Q_Q(QModbusRtuSerialMaster); if (q->state() != QModbusDevice::ClosingState) q->close(); + m_sendTimer.stop(); + m_responseTimer.stop(); }); } - void updateSerialPortConnectionInfo() { + void setupEnvironment() { if (m_serialPort) { + m_serialPort->clear(); m_serialPort->setPortName(m_comPort); m_serialPort->setParity(m_parity); m_serialPort->setBaudRate(m_baudRate); m_serialPort->setDataBits(m_dataBits); m_serialPort->setStopBits(m_stopBits); + } - // According to the Modbus specification, in RTU mode message frames - // are separated by a silent interval of at least 3.5 character times. - // Calculate the timeout if we are less than 19200 baud, use a fixed - // timeout for everything equal or greater than 19200 baud. - if (m_baudRate < 19200) { - // Example: 9600 baud, 11 bit per packet -> 872 char/sec - // so: 1000 ms / 872 char = 1.147 ms/char * 3.5 character - // Always round up because the spec requests at least 3.5 char. - m_timeoutThreeDotFiveMs = qCeil(3500. / (qreal(m_baudRate) / 11.)); - } else { - // The spec recommends a timeout value of 1.750 msec. Without such - // precise single-shot timers use a approximated value of 1.750 msec. - m_timeoutThreeDotFiveMs = 2; - } + // According to the Modbus specification, in RTU mode message frames + // are separated by a silent interval of at least 3.5 character times. + // Calculate the timeout if we are less than 19200 baud, use a fixed + // timeout for everything equal or greater than 19200 baud. + if (m_baudRate < 19200) { + // Example: 9600 baud, 11 bit per packet -> 872 char/sec + // so: 1000 ms / 872 char = 1.147 ms/char * 3.5 character + // Always round up because the spec requests at least 3.5 char. + m_timeoutThreeDotFiveMs = qCeil(3500. / (qreal(m_baudRate) / 11.)); + } else { + // The spec recommends a timeout value of 1.750 msec. Without such + // precise single-shot timers use a approximated value of 1.750 msec. + m_timeoutThreeDotFiveMs = 2; } + + responseBuffer.clear(); + m_state = QModbusRtuSerialMasterPrivate::Idle; } void scheduleNextRequest() { diff --git a/src/serialbus/qmodbusrtuserialslave.cpp b/src/serialbus/qmodbusrtuserialslave.cpp index 56293b8..718d739 100644 --- a/src/serialbus/qmodbusrtuserialslave.cpp +++ b/src/serialbus/qmodbusrtuserialslave.cpp @@ -107,9 +107,8 @@ bool QModbusRtuSerialSlave::open() return true; Q_D(QModbusRtuSerialSlave); - d->updateSerialPortConnectionInfo(); if (d->m_serialPort->open(QIODevice::ReadWrite)) { - d->m_serialPort->clear(); + d->setupEnvironment(); setState(QModbusDevice::ConnectedState); } else { setError(d->m_serialPort->errorString(), QModbusDevice::ConnectionError); @@ -126,7 +125,6 @@ void QModbusRtuSerialSlave::close() return; Q_D(QModbusRtuSerialSlave); - if (d->m_serialPort->isOpen()) d->m_serialPort->close(); diff --git a/src/serialbus/qmodbusrtuserialslave_p.h b/src/serialbus/qmodbusrtuserialslave_p.h index 49c7b1c..213572c 100644 --- a/src/serialbus/qmodbusrtuserialslave_p.h +++ b/src/serialbus/qmodbusrtuserialslave_p.h @@ -321,14 +321,17 @@ public: }); } - void updateSerialPortConnectionInfo() { + void setupEnvironment() { if (m_serialPort) { + m_serialPort->clear(); m_serialPort->setPortName(m_comPort); m_serialPort->setParity(m_parity); m_serialPort->setBaudRate(m_baudRate); m_serialPort->setDataBits(m_dataBits); m_serialPort->setStopBits(m_stopBits); } + + m_requestBuffer.clear(); } QByteArray m_requestBuffer;; |