v3.0.3 modbus rtu not working stable

32 views
Skip to first unread message

Ilhan SEVEN

unread,
Sep 27, 2017, 5:25:38 PM9/27/17
to libmodbus
Hi everyone,

I am on Beaglebone Black Angstrom Linux.

    struct timeval response_timeout;
    response_timeout
.tv_sec = 0;
    response_timeout
.tv_usec = 50000;
    entesPoller
= modbus_new_rtu("/dev/ttyO4", 9600, 'N', 8, 1);
    modbus_rtu_set_serial_mode
(entesPoller, MODBUS_RTU_RS485);
    modbus_set_slave
(entesPoller, 2);
    modbus_set_debug
(entesPoller, 1);
    modbus_set_response_timeout
(entesPoller, &response_timeout);
   
if(entesPoller == NULL) {
        qDebug
() << "Unable to create EntesPoller modbus context";
   
}else {
        connected
= modbus_connect(entesPoller);
   
}
    modbus_flush
(entesPoller);

And every 5 seconds:

    if(connected == -1) {
        qDebug
() << "Cannot connect to Entes";
   
} else if(connected == 0) {
        qDebug
() << "Values from Entes: ";
        modbus_read_registers
(entesPoller, entesInformation::importEnergyLSBAddress, 4, entesRegisters);
       
for(int i=0; i<4; i++) {
            qDebug
() << entesRegisters[i];
       
}
   
}
    modbus_flush
(entesPoller);

Read success rate is very very low. 
General error:

ERROR CRC received xxxx != CRC calculated xxxx

Second error

Connection timed out: Select

Third from time to time:

Waiting for a confirmation...
<00><3C><00><04><84><36><02><03><08><00><E0><00><00><00><53><00><00><8B><4C><02><03 bytes flashed,

Any ideas what can be the isse?

Thanks in advance,
Ilhan

oldfaber

unread,
Oct 12, 2017, 8:11:43 AM10/12/17
to libmodbus

Your response_timeout.tv_usec is too short.

Best regards
Fabio
Reply all
Reply to author
Forward
0 new messages