Description
Write to Holding Registers.
Syntax
node1.writeHoldingRegister(address, value) node2.writeHoldingRegister(address, size, buffer)
Parameters
node1/node2: ModbusSlaveNode object.
address:Holding Register address to be written.
value:Single Holding Register value to be written.
size: The number of holding registers to be written.
buffer: Copy the array data in the array space pointed to by buffer to the holding registers.
Return
int: If successful, return MODBUS_SUCCESS, otherwise return EXCEPTION_CODE.
Example
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include <Modbus86.h>
ModbusSlave bus;
ModbusSlaveNode node;
uint32_t command = 0;
uint32_t lasttime = 0;
uint8_t read_holding_registers( uint8_t function,
uint16_t address,
uint16_t length)
{
for (int i = address; i < address + length; i++) {
if (i == 16)
node.writeHoldingRegister(i, command & 0xFFFF);
else if (i == 17)
}
return MODBUS_SUCCESS;
}
uint8_t write_multiple_registers( uint8_t function,
uint16_t address,
uint16_t length)
{
int i;
for (i = address; i < address + length; i++) {
if (i == 16)
command = (command & 0xFFFF0000) | node.readHoldingRegister(i);
else if (i == 17)
command =
(command & 0x0000FFFF) | (node.readHoldingRegister(i) << 16);
}
return MODBUS_SUCCESS;
}
void setup()
{
Serial485.begin(115200);
/* Modbus RTU Mode via RS485. */
bus.begin(MODBUS_RTU, Serial485);
/* Slave node with ID 11. */
node.attach(11, bus);
/* Set the callback function of Read Holding Registers (0x03). */
node.cbFunc[MODBUS_CB_READ_HOLDING_REGISTERS]
= read_holding_registers;
/* Set the callback function of Write Multiple Registers (0x10). */
node.cbFunc[MODBUS_CB_WRITE_MULTIPLE_REGISTERS]
= write_multiple_registers;
}
void loop()
{
uint32_t now;
node.poll();
now = millis();
if (now - lasttime > 500) {
lasttime = now;
Serial.print("commnad = ");
Serial.println(command);
}
}
|
See Also
- readHoldingRegister()
The text in the 86Duino reference is modified from the Arduino reference and is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. The code examples in the reference have been released into the public domain.