mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 14:12:16 +03:00
fix ecto writeRegister
This commit is contained in:
@@ -329,11 +329,11 @@ public:
|
||||
bool writeFunctionModBus(const uint16_t ®, uint16_t &data)
|
||||
{
|
||||
// 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)
|
||||
node.setTransmitBuffer(0, highWord(data));
|
||||
//node.setTransmitBuffer(0, highWord(data));
|
||||
// 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)
|
||||
{
|
||||
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 ret = false;
|
||||
if (writeFunctionModBus(ecW_SetTypeConnect, (uint16_t &)data))
|
||||
uint16_t data16 = data;
|
||||
if (writeFunctionModBus(ecW_SetTypeConnect, data16))
|
||||
{
|
||||
// TODO запросить результат записи у адаптера
|
||||
ret = true;
|
||||
@@ -631,7 +632,8 @@ public:
|
||||
bool setMinCH(float &data)
|
||||
{
|
||||
bool ret = false;
|
||||
if (writeFunctionModBus(ecW_TSetMinCH, (uint16_t &)data))
|
||||
uint16_t data16 = data;
|
||||
if (writeFunctionModBus(ecW_TSetMinCH, data16))
|
||||
{
|
||||
ret = true;
|
||||
}
|
||||
@@ -645,7 +647,8 @@ public:
|
||||
bool setMaxCH(float &data)
|
||||
{
|
||||
bool ret = false;
|
||||
if (writeFunctionModBus(ecW_TSetMaxCH, (uint16_t &)data))
|
||||
uint16_t data16 = data;
|
||||
if (writeFunctionModBus(ecW_TSetMaxCH, data16))
|
||||
{
|
||||
ret = true;
|
||||
}
|
||||
@@ -659,7 +662,8 @@ public:
|
||||
bool setMinDHW(float &data)
|
||||
{
|
||||
bool ret = false;
|
||||
if (writeFunctionModBus(ecW_TSetMinDHW, (uint16_t &)data))
|
||||
uint16_t data16 = data;
|
||||
if (writeFunctionModBus(ecW_TSetMinDHW, data16))
|
||||
{
|
||||
ret = true;
|
||||
}
|
||||
@@ -673,7 +677,8 @@ public:
|
||||
bool setMaxDHW(float &data)
|
||||
{
|
||||
bool ret = false;
|
||||
if (writeFunctionModBus(ecW_TSetMaxDHW, (uint16_t &)data))
|
||||
uint16_t data16 = data;
|
||||
if (writeFunctionModBus(ecW_TSetMaxDHW, data16))
|
||||
{
|
||||
ret = true;
|
||||
}
|
||||
@@ -687,7 +692,8 @@ public:
|
||||
bool setTDHW(float &data)
|
||||
{
|
||||
bool ret = false;
|
||||
if (writeFunctionModBus(ecW_TSetDHW, (uint16_t &)data))
|
||||
uint16_t data16 = data;
|
||||
if (writeFunctionModBus(ecW_TSetDHW, data16))
|
||||
{
|
||||
ret = true;
|
||||
}
|
||||
@@ -701,7 +707,8 @@ public:
|
||||
bool setMaxModLevel(float &data)
|
||||
{
|
||||
bool ret = false;
|
||||
if (writeFunctionModBus(ecW_SetMaxModLevel, (uint16_t &)data))
|
||||
uint16_t data16 = data;
|
||||
if (writeFunctionModBus(ecW_SetMaxModLevel, data16))
|
||||
{
|
||||
ret = true;
|
||||
}
|
||||
|
||||
@@ -253,6 +253,28 @@ uint8_t ModbusMaster::readHoldingRegisters(uint16_t u16ReadAddress,
|
||||
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.
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ public:
|
||||
uint8_t readHoldingRegisters(uint16_t, uint16_t);
|
||||
uint8_t writeMultipleRegisters(uint16_t, uint16_t);
|
||||
uint8_t writeMultipleRegisters();
|
||||
|
||||
uint8_t writeSingleRegister(uint16_t, uint16_t);
|
||||
uint8_t readAddresEctoControl();
|
||||
uint8_t writeAddresEctoControl(uint8_t);
|
||||
|
||||
@@ -76,7 +76,7 @@ private:
|
||||
// Modbus function codes for 16 bit access
|
||||
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 ku8MBWriteSingleRegister = 0x06; ///< Modbus function 0x06 Write Single Register
|
||||
static const uint8_t ku8MBProgRead46 = 0x46; ///< EctoControl function 0x46 Устройство возвращает в ответе свой текущий адрес ADDR
|
||||
static const uint8_t ku8MBProgWrite47 = 0x47; ///< EctoControl function 0x47 высылается ведущим устройством ведомому с указанием сменить свой имеющийся адрес на заданный
|
||||
// высылается ведущим устройством единственному устройству на шине с неизвестным адресом
|
||||
|
||||
Reference in New Issue
Block a user