mirror of
https://github.com/arendst/Tasmota.git
synced 2025-04-25 23:37:16 +00:00
Fix Modbus timeouts reading reg blocks
This commit is contained in:
parent
d4c2282170
commit
204d738053
@ -81,8 +81,9 @@ bool TasmotaModbus::ReceiveReady()
|
||||
uint8_t TasmotaModbus::ReceiveBuffer(uint8_t *buffer, uint8_t register_count)
|
||||
{
|
||||
mb_len = 0;
|
||||
uint32_t last = millis();
|
||||
while ((available() > 0) && (mb_len < (register_count *2) + 5) && (millis() - last < 10)) {
|
||||
uint32_t timeout = millis() + 10;
|
||||
while ((mb_len < (register_count *2) + 5) && (millis() < timeout)) {
|
||||
if (available()) {
|
||||
uint8_t data = (uint8_t)read();
|
||||
if (!mb_len) { // Skip leading data as provided by hardware serial
|
||||
if (mb_address == data) {
|
||||
@ -104,7 +105,10 @@ uint8_t TasmotaModbus::ReceiveBuffer(uint8_t *buffer, uint8_t register_count)
|
||||
}
|
||||
}
|
||||
}
|
||||
last = millis();
|
||||
|
||||
timeout = millis() + 10;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (mb_len < 7) { return 7; } // 7 = Not enough data
|
||||
|
Loading…
x
Reference in New Issue
Block a user