writeHoldingRegister()
描述
寫入 Holding Registers 暫存器。
語法
node1.writeHoldingRegister(address, value)
node2.writeHoldingRegister(address, size, buffer)
參數
node1/node2
: ModbusSlaveNode
物件。
address
:欲寫入的 Holding Registers 暫存器位址。
value
:欲寫入的單一 Holding Registers 暫存器數值。
size
:欲寫入的複數 Holding Registers 暫存器數量。
buffer
:將 buffer 指向的陣列空間內的陣列資料複寫至 Holding Registers 暫存器內。
回傳
int
:如果成功回傳 MODBUS_SUCCESS
,反之回傳 EXCEPTION_CODE 。
範例
#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) node.writeHoldingRegister(i, (command >> 16) & 0xFFFF); } 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
The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.