[Development] modbus over serial port on windows 7 ?

Denis Shienkov denis.shienkov at gmail.com
Thu Jun 2 07:10:38 CEST 2016


 > only the value of around 50ms gives a stable result in my case.

Hehh.. I warned the QtSerialBus team that introduction of 3.5 timeouts 
will lead to bugs and that it doesn't make sense (though, it is 
described in the Modbus specification). We do not need to rely on this 
'characters timeouts', because the OS can not provide this precision 
timeout (besides, Qt5 event loop introduces also an delay). But, nobody 
haven't listened to me.

BR,

Denis


01.06.2016 20:59, Dmitry Shapovalov пишет:
> Okay. I think i found the source of problem. Calculation of send 
> timeout is incorrect.
>
> Here is the calculation code:
>
> http://code.qt.io/cgit/qt/qtserialbus.git/tree/src/serialbus/qmodbusrtuserialmaster_p.h#n294
>
>             // Example: 9600 baud, 11 bit per packet -> 872 char/sec
>             // so: 1000 ms / 872 char = 1.147 ms/char * 3.5 character
>             m_sendTimer.start((1000. / (qreal(m_baudRate) / 11.)) * 
> m_current.adu.size());
>
> Which in my case (115200 and 8 bytes of data) gives 0.7 ms. And after 
> conversion to int, it becomes zero.
> So m_sendTimer is fired up immediately, which brings us to to this code:
>
> http://code.qt.io/cgit/qt/qtserialbus.git/tree/src/serialbus/qmodbusrtuserialmaster_p.h#n323
>
>             } else if (m_current.bytesWritten < m_current.adu.size()) {
>                 qCDebug(QT_MODBUS) << "(RTU client) Send failed:" << 
> m_current.requestPdu;
>
>                 if (m_current.numberOfRetries <= 0) {
>                     if (m_current.reply) {
> m_current.reply->setError(QModbusDevice::TimeoutError,
>                             QModbusClient::tr("Request timeout."));
>                     }
> So there comes a premature timeout.
>
> I experimented with a timeout and found that even a value of 15-20ms 
> does not give stable results. only the value of around 50ms gives a 
> stable result in my case.
> I suppose that timeout calculation must include some additional 
> minimum time constant.
>
> I will report this bug.
>
> Thank you all for the help )
>
> 2016-05-31 17:15 GMT+05:00 Ralf Nolden <nolden at kde.org 
> <mailto:nolden at kde.org>>:
>
>     Am Dienstag, 31. Mai 2016, 13:53:15 schrieb Denis Shienkov:
>     >  > But why ?
>     >
>     > I don't know.. maybe the Qt Modbus Master closes the connection
>     without
>     > waiting of data send,
>     >
>     > maybe something else..
>     >
>     > PS: I just have checked the QSerialPort autotests with the PL2303 on
>     > Windows - all worked.
>     >
>     > PS2: You can try to use the Terminal Example (from the Qt Serial
>     Port)
>     > with the Rx/Tx connected,
>     >
>     > to check that your serial port works.
>
>     If you have a second PC around, try running the slave example
>     there and
>     connect them with a second adapter, then try the master example to
>     see if your
>     conection works between those two computers.
>
>     At any rate. the modbus master is doing the right thing if the
>     error comes
>     from the serial port. We can't just ignore port errors in cases
>     where the
>     returned response theoretically matches the expected results :)
>
>     >
>     > 31.05.2016 13:17, Dmitry Shapovalov пишет:
>     > > Yep. That's right. It is ERROR_OPERATION_ABORTED.
>     > > But why ? Any other application works as expected with this
>     hardware.
>     > >
>     > > And i confirm that 0x01040000000131ca and 0x0104024c494c06 are
>     correct
>     > > request and response.
>     > >
>     > >
>     > > 2016-05-31 15:05 GMT+05:00 Denis Shienkov
>     <denis.shienkov at gmail.com <mailto:denis.shienkov at gmail.com>
>     > >
>     > > <mailto:denis.shienkov at gmail.com
>     <mailto:denis.shienkov at gmail.com>>>:
>     > >     Seems, this:
>     > >     > qt.modbus: (RTU server) QSerialPort error:
>     > >     > QSerialPort::SerialPortError(ResourceError) "Операция>
>     > >     ввода/вывода была прервана из-за завершения потока команд
>     или по
>     > >     запросу приложения."
>     > >
>     > >     It is an 'ERROR_OPERATION_ABORTED', that can be caused by
>     > >
>     > >     ::CancelIo() (e.g. when the serial port closes) or by a HW
>     problems.
>     > >
>     > >     BR,
>     > >
>     > >     Denis
>     > >
>     > >     31.05.2016 12:23, Dmitry Shapovalov пишет:
>     > >>     Thanks for reply Ralf. Email more preferable for me.
>     > >>
>     > >>     Can you tell me what type of adapter you are using? Which
>     version
>     > >>     of qtserialport are you using? Maybe my problem is
>     related to the
>     > >>     type of serial port adapter. I tried use arduino with
>     different
>     > >>     usb-uart chips(ch430 and pl2303), but unsuccessfully.
>     > >>
>     > >>     Here is output of qt modbus master example
>     > >>
>     > >>     Запускается
>     > >>
>      C:\Qt\Examples\Qt-5.6\qtserialbus\serialbus\modbus\build-master-Deskt
>     > >>  op_Qt_5_6_0_MinGW_32bit-Debug\debug\modbusmaster.exe...
>     qt.modbus:
>     > >>     (RTU client) Sent Serial PDU: 0x0400000001
>     > >>     qt.modbus.lowlevel: (RTU client) Sent Serial ADU:
>     0x01040000000131ca
>     > >>     qt.modbus: (RTU client) Send failed: 0x0400000001
>     > >>     qt.modbus: (RTU server) QSerialPort error:
>     > >>  QSerialPort::SerialPortError(ResourceError) "Операция
>     > >>     ввода/вывода была прервана из-за завершения потока команд
>     или по
>     > >>     запросу приложения."
>     > >>     qt.modbus.lowlevel: (RTU client) Response buffer: "01"
>     > >>     qt.modbus: (RTU client) Modbus ADU not complete
>     > >>     qt.modbus.lowlevel: (RTU client) Response buffer:
>     "0104024c494c06"
>     > >>     qt.modbus: (RTU client) Received ADU: "0104024c494c06"
>     > >>     qt.modbus: (RTU client) Cannot match response with open
>     request,
>     > >>     ignoring
>     > >>
>     > >>     Look like it actually sends request, but qtserialport reports
>     > >>     error, so qtserialbus(modbus) ignores response.
>     > >>
>     > >>
>     > >>     2016-05-31 11:59 GMT+05:00 Ralf Nolden <nolden at kde.org
>     <mailto:nolden at kde.org>
>     > >>
>     > >>     <mailto:nolden at kde.org <mailto:nolden at kde.org>>>:
>     > >>         Am Dienstag, 31. Mai 2016, 09:34:19 schrieb Dmitry
>     Shapovalov:
>     > >>         > Hello,
>     > >>         > can someone confirm that modbus over serial port is
>     working
>     > >>
>     > >>         on windows ?
>     > >>         I have tested modbus over serial port on windows with two
>     > >>         Schneider Electric
>     > >>         PLCs, a Twido and a Premium, both with TCP and RS485. We
>     > >>         could evaluate your
>     > >>         problems on IRC if you want.
>     > >>
>     > >>         > all my experiments led me to the thought that it is
>     > >>
>     > >>         absolutely broken.
>     > >>
>     > >>         > i am using arduno as a modbus device. i tested it with
>     > >>
>     > >>         qmodbus and modbus
>     > >>
>     > >>         > poll. works great. but when i try to use modbus
>     examples from
>     > >>         > qt(qtserialbus/examples/serialbus/modbus/master),
>     look like
>     > >>
>     > >>         it can not send
>     > >>
>     > >>         > request.
>     > >>         > i tried release(5.6) and git version of qtserialbus and
>     > >>
>     > >>         qtserialport
>     > >>
>     > >>         > modules with no luck.
>     > >>         >
>     > >>         > i am using windows 7 on virtualbox.
>     > >>         > arduino modbus library from here
>     > >>         >
>     https://github.com/smarmengol/Modbus-Master-Slave-for-Arduino
>     > >>         > arduino sketch http://pastebin.com/FHW3B7TX
>     > >>         >
>     > >>         > it's me or it's really broken ?
>     > >>
>     > >>         --
>     > >>         Kind regards,
>     > >>
>     > >>         Ralf Nolden
>     > >>
>     > >>  _______________________________________________
>     > >>         Development mailing list
>     > >> Development at qt-project.org
>     <mailto:Development at qt-project.org>
>     <mailto:Development at qt-project.org
>     <mailto:Development at qt-project.org>>
>     > >>http://lists.qt-project.org/mailman/listinfo/development
>     > >>
>     > >>  _______________________________________________
>     > >>     Development mailing list
>     > >> Development at qt-project.org
>     <mailto:Development at qt-project.org>
>     <mailto:Development at qt-project.org
>     <mailto:Development at qt-project.org>>
>     > >>http://lists.qt-project.org/mailman/listinfo/development
>     > >
>     > >  _______________________________________________
>     > >     Development mailing list
>     > > Development at qt-project.org <mailto:Development at qt-project.org>
>     <mailto:Development at qt-project.org
>     <mailto:Development at qt-project.org>>
>     > >http://lists.qt-project.org/mailman/listinfo/development
>     > >
>     > > _______________________________________________
>     > > Development mailing list
>     > > Development at qt-project.org <mailto:Development at qt-project.org>
>     > > http://lists.qt-project.org/mailman/listinfo/development
>
>     --
>     Kind regards,
>
>     Ralf Nolden
>
>     _______________________________________________
>     Development mailing list
>     Development at qt-project.org <mailto:Development at qt-project.org>
>     http://lists.qt-project.org/mailman/listinfo/development
>
>
>
>
> -- 
> -- 
> With Best Regards
> Dmitry Shapovalov
>
>
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20160602/57c562a1/attachment.html>


More information about the Development mailing list