mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 11:59:12 +03:00
fix ecto writeRegister
This commit is contained in:
@@ -329,11 +329,11 @@ public:
|
|||||||
bool writeFunctionModBus(const uint16_t ®, uint16_t &data)
|
bool writeFunctionModBus(const uint16_t ®, uint16_t &data)
|
||||||
{
|
{
|
||||||
// set word 0 of TX buffer to least-significant word of counter (bits 15..0)
|
// set word 0 of TX buffer to least-significant word of counter (bits 15..0)
|
||||||
node.setTransmitBuffer(1, lowWord(data));
|
//node.setTransmitBuffer(1, lowWord(data));
|
||||||
// set word 1 of TX buffer to most-significant word of counter (bits 31..16)
|
// set word 1 of TX buffer to most-significant word of counter (bits 31..16)
|
||||||
node.setTransmitBuffer(0, highWord(data));
|
//node.setTransmitBuffer(0, highWord(data));
|
||||||
// slave: write TX buffer to (2) 16-bit registers starting at register 0
|
// slave: write TX buffer to (2) 16-bit registers starting at register 0
|
||||||
uint8_t result = node.writeMultipleRegisters(0, 2);
|
uint8_t result = node.writeSingleRegister(reg, data);
|
||||||
if (_debug > 2)
|
if (_debug > 2)
|
||||||
{
|
{
|
||||||
SerialPrint("I", "EctoControlAdapter", "writeSingleRegister, addr: " + String((uint8_t)_addr, HEX) + ", reg: " + String(reg, HEX) + ", state: " + String(data) + " = result: " + String(result, HEX));
|
SerialPrint("I", "EctoControlAdapter", "writeSingleRegister, addr: " + String((uint8_t)_addr, HEX) + ", reg: " + String(reg, HEX) + ", state: " + String(data) + " = result: " + String(result, HEX));
|
||||||
@@ -585,7 +585,8 @@ public:
|
|||||||
bool setTypeConnect(float &data)
|
bool setTypeConnect(float &data)
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (writeFunctionModBus(ecW_SetTypeConnect, (uint16_t &)data))
|
uint16_t data16 = data;
|
||||||
|
if (writeFunctionModBus(ecW_SetTypeConnect, data16))
|
||||||
{
|
{
|
||||||
// TODO запросить результат записи у адаптера
|
// TODO запросить результат записи у адаптера
|
||||||
ret = true;
|
ret = true;
|
||||||
@@ -631,7 +632,8 @@ public:
|
|||||||
bool setMinCH(float &data)
|
bool setMinCH(float &data)
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (writeFunctionModBus(ecW_TSetMinCH, (uint16_t &)data))
|
uint16_t data16 = data;
|
||||||
|
if (writeFunctionModBus(ecW_TSetMinCH, data16))
|
||||||
{
|
{
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
@@ -645,7 +647,8 @@ public:
|
|||||||
bool setMaxCH(float &data)
|
bool setMaxCH(float &data)
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (writeFunctionModBus(ecW_TSetMaxCH, (uint16_t &)data))
|
uint16_t data16 = data;
|
||||||
|
if (writeFunctionModBus(ecW_TSetMaxCH, data16))
|
||||||
{
|
{
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
@@ -659,7 +662,8 @@ public:
|
|||||||
bool setMinDHW(float &data)
|
bool setMinDHW(float &data)
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (writeFunctionModBus(ecW_TSetMinDHW, (uint16_t &)data))
|
uint16_t data16 = data;
|
||||||
|
if (writeFunctionModBus(ecW_TSetMinDHW, data16))
|
||||||
{
|
{
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
@@ -673,7 +677,8 @@ public:
|
|||||||
bool setMaxDHW(float &data)
|
bool setMaxDHW(float &data)
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (writeFunctionModBus(ecW_TSetMaxDHW, (uint16_t &)data))
|
uint16_t data16 = data;
|
||||||
|
if (writeFunctionModBus(ecW_TSetMaxDHW, data16))
|
||||||
{
|
{
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
@@ -687,7 +692,8 @@ public:
|
|||||||
bool setTDHW(float &data)
|
bool setTDHW(float &data)
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (writeFunctionModBus(ecW_TSetDHW, (uint16_t &)data))
|
uint16_t data16 = data;
|
||||||
|
if (writeFunctionModBus(ecW_TSetDHW, data16))
|
||||||
{
|
{
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
@@ -701,7 +707,8 @@ public:
|
|||||||
bool setMaxModLevel(float &data)
|
bool setMaxModLevel(float &data)
|
||||||
{
|
{
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (writeFunctionModBus(ecW_SetMaxModLevel, (uint16_t &)data))
|
uint16_t data16 = data;
|
||||||
|
if (writeFunctionModBus(ecW_SetMaxModLevel, data16))
|
||||||
{
|
{
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -253,6 +253,28 @@ uint8_t ModbusMaster::readHoldingRegisters(uint16_t u16ReadAddress,
|
|||||||
return ModbusMasterTransaction(ku8MBReadHoldingRegisters);
|
return ModbusMasterTransaction(ku8MBReadHoldingRegisters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Modbus function 0x06 Write Single Register.
|
||||||
|
|
||||||
|
This function code is used to write a single holding register in a
|
||||||
|
remote device. The request specifies the address of the register to be
|
||||||
|
written. Registers are addressed starting at zero.
|
||||||
|
|
||||||
|
@param u16WriteAddress address of the holding register (0x0000..0xFFFF)
|
||||||
|
@param u16WriteValue value to be written to holding register (0x0000..0xFFFF)
|
||||||
|
@return 0 on success; exception number on failure
|
||||||
|
@ingroup register
|
||||||
|
*/
|
||||||
|
uint8_t ModbusMaster::writeSingleRegister(uint16_t u16WriteAddress,
|
||||||
|
uint16_t u16WriteValue)
|
||||||
|
{
|
||||||
|
_u16WriteAddress = u16WriteAddress;
|
||||||
|
_u16WriteQty = 0;
|
||||||
|
_u16TransmitBuffer[0] = u16WriteValue;
|
||||||
|
return ModbusMasterTransaction(ku8MBWriteSingleRegister);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Modbus function 0x10 Write Multiple Registers.
|
Modbus function 0x10 Write Multiple Registers.
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public:
|
|||||||
uint8_t readHoldingRegisters(uint16_t, uint16_t);
|
uint8_t readHoldingRegisters(uint16_t, uint16_t);
|
||||||
uint8_t writeMultipleRegisters(uint16_t, uint16_t);
|
uint8_t writeMultipleRegisters(uint16_t, uint16_t);
|
||||||
uint8_t writeMultipleRegisters();
|
uint8_t writeMultipleRegisters();
|
||||||
|
uint8_t writeSingleRegister(uint16_t, uint16_t);
|
||||||
uint8_t readAddresEctoControl();
|
uint8_t readAddresEctoControl();
|
||||||
uint8_t writeAddresEctoControl(uint8_t);
|
uint8_t writeAddresEctoControl(uint8_t);
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ private:
|
|||||||
// Modbus function codes for 16 bit access
|
// Modbus function codes for 16 bit access
|
||||||
static const uint8_t ku8MBReadHoldingRegisters = 0x03; ///< Modbus function 0x03 Read Holding Registers
|
static const uint8_t ku8MBReadHoldingRegisters = 0x03; ///< Modbus function 0x03 Read Holding Registers
|
||||||
static const uint8_t ku8MBWriteMultipleRegisters = 0x10; ///< Modbus function 0x10 Write Multiple Registers
|
static const uint8_t ku8MBWriteMultipleRegisters = 0x10; ///< Modbus function 0x10 Write Multiple Registers
|
||||||
|
static const uint8_t ku8MBWriteSingleRegister = 0x06; ///< Modbus function 0x06 Write Single Register
|
||||||
static const uint8_t ku8MBProgRead46 = 0x46; ///< EctoControl function 0x46 Устройство возвращает в ответе свой текущий адрес ADDR
|
static const uint8_t ku8MBProgRead46 = 0x46; ///< EctoControl function 0x46 Устройство возвращает в ответе свой текущий адрес ADDR
|
||||||
static const uint8_t ku8MBProgWrite47 = 0x47; ///< EctoControl function 0x47 высылается ведущим устройством ведомому с указанием сменить свой имеющийся адрес на заданный
|
static const uint8_t ku8MBProgWrite47 = 0x47; ///< EctoControl function 0x47 высылается ведущим устройством ведомому с указанием сменить свой имеющийся адрес на заданный
|
||||||
// высылается ведущим устройством единственному устройству на шине с неизвестным адресом
|
// высылается ведущим устройством единственному устройству на шине с неизвестным адресом
|
||||||
|
|||||||
Reference in New Issue
Block a user