Fix lock on MODBUS

This commit is contained in:
Emanuele Trabattoni
2025-07-22 11:15:57 +02:00
parent 146a2b558b
commit 16bb029e93
5 changed files with 21 additions and 8 deletions

View File

@@ -76,6 +76,7 @@ namespace drivers
{
std::vector<uint16_t> value;
delayRequest();
auto lock = m_bus.getLock();
m_bus.readHoldingRegisters(m_address, REG_Regset, 2, value);
if (value.empty())
return UINT8_MAX;
@@ -86,6 +87,7 @@ namespace drivers
{
std::vector<uint16_t> value;
delayRequest();
auto lock = m_bus.getLock();
m_bus.readHoldingRegisters(m_address, REG_PartCount, 2, value);
if (value.empty())
return UINT16_MAX;
@@ -103,6 +105,7 @@ namespace drivers
{
bool ok(true);
delayRequest();
auto lock = m_bus.getLock();
LOG_WARN("Powermeter Counter STOP");
ok &= m_bus.writeRegisters(m_address, REG_PartCount, {nullVal, stopAll});
delayRequest();
@@ -126,6 +129,7 @@ namespace drivers
while (retries++ < maxRetries)
{
delayRequest();
auto lock = m_bus.getLock();
if (m_bus.readHoldingRegisters(m_address, reg, dataWords, values) && values.size() == dataWords)
{
floatval_t fv; // potrebbe essere il contrario, vedremo