# Arduino Modbus Library ## Modbus Client ### `client.coilRead()` #### Description Perform a "Read Coils" operation for the specified address for a single coil. #### Syntax ``` int coilRead(int address); int coilRead(int id, int address); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation #### Returns coil value on success, -1 on failure. ### `client.discreteInputRead()` #### Description Perform a "Read Discrete Inputs" operation for the specified address for a single discrete input. #### Syntax ``` int discreteInputRead(int address); int discreteInputRead(int id, int address); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation #### Returns discrete input value on success, -1 on failure. ### `client.holdingRegisterRead()` #### Description Perform a "Read Holding Registers" operation for a single holding register. #### Syntax ``` long holdingRegisterRead(int address); long holdingRegisterRead(int id, int address); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address start address to use for operation - holding register value on success, -1 on failure. ### `client.inputRegisterRead()` #### Description Perform a "Read Input Registers" operation for a single input register. #### Syntax ``` long inputRegisterRead(int address); long inputRegisterRead(int id, int address); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation #### Returns input register value on success, -1 on failure. ### `client.coilWrite()` #### Description Perform a "Write Single Coil" operation for the specified address and value. #### Syntax ``` int coilWrite(int address, uint8_t value); int coilWrite(int id, int address, uint8_t value); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation - value coi -l value to write #### Returns 1 on success, 0 on failure. ### `client.holdingRegisterWrite()` #### Description Perform a "Write Single Holding Register" operation for the specified address and value. #### Syntax ``` int holdingRegisterWrite(int address, uint16_t value); int holdingRegisterWrite(int id, int address, uint16_t value); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation - value - holding register value to write #### Returns 1 on success, 0 on failure. ### `client.registerMaskWrite()` #### Description Perform a "Mask Write Registers" operation for the specified address, AND mask and OR mask. #### Syntax ``` int registerMaskWrite(int address, uint16_t andMask, uint16_t orMask); int registerMaskWrite(int id, int address, uint16_t andMask, uint16_t orMask); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation - andMask - AND mask to use for operation - orMask - OR mask to use for operation #### Returns 1 on success, 0 on failure. ### `client.beginTransmission()` #### Description Begin the process of a writing multiple coils or holding registers. Use write(value) to set the values you want to send, and endTransmission() to send request on the wire. #### Syntax ``` int beginTransmission(int type, int address, int nb); int beginTransmission(int id, int type, int address, int nb); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - type - type of write to perform, either COILS or HOLDING_REGISTERS - address start address to use for operation - nb - number of values to write #### Returns 1 on success, 0 on failure ### `client.write()` #### Description Set the values of a write operation started by beginTransmission(...). #### Syntax ``` int write(unsigned int value); ``` #### Parameters - value - value to write #### Returns 1 on success, 0 on failure ### `client.endTransmission()` #### Description End the process of a writing multiple coils or holding registers. #### Syntax ``` int endTransmission(); ``` #### Parameters none #### Returns 1 on success, 0 on failure ### `client.requestFrom()` #### Description Read multiple coils, discrete inputs, holding registers, or input register values. Use available() and read() to process the read values. #### Syntax ``` int requestFrom(int type, int address, int nb); int requestFrom(int id, int type, int address,int nb); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified type - type of read to perform, either COILS, DISCRETE_INPUTS, HOLDING_REGISTERS, or INPUT_REGISTERS - address start address to use for operation - nb - number of values to read #### Returns 0 on failure, number of values read on success ### `client.available()` #### Description Query the number of values available to read after calling requestFrom(...) #### Syntax ``` int available(); ``` #### Parameters none #### Returns number of values available for reading use read() ### `client.read()` #### Description Read a value after calling requestFrom(...) #### Syntax ``` long read(); ``` #### Parameters None #### Returns -1 on failure, value on success ### `client.lastError()` #### Description Read the last error reason as a string #### Syntax ``` const char* lastError(); ``` #### Parameters none #### Returns Last error reason as a C string ### `client.end()` #### Description Stop the client and clean up #### Syntax ``` void end(); ``` #### Parameters None #### Returns nothing ## ModbusRTUClient Class ### `modbusRTUClient.begin()` #### Description Start the Modbus RTU client with the specified parameters. #### Syntax ``` ModbusRTUClient.begin(baudrate); ModbusRTUClient.begin(baudrate, config); ``` #### Parameters - baudrate - Baud rate to use for serial - config - Config to use for serial (see Serial.begin(...) for more info.) defaults to SERIAL_8N1 if not provided #### Returns 1 on success, 0 on failure ## ModbusTCPClient Class ### `ModbusTCPClient()` #### Description Creates a Modbus TCP client using the provided Client for the transport. #### Syntax ``` ModbusTCPClient(client); ``` #### Parameters - Client - to use for the transport ### `modbusTCPClient.begin()` #### Description Start the Modbus TCP client with the specified parameters. #### Syntax ``` modbusTCPClient.begin(ip, port); ``` #### Parameters - ip - the IP Address the client will connect to - port - port to the client will connect to #### Returns 1 on success, 0 on failure ### `modbusTCPClient.connected()` #### Description Returns the connection status. #### Syntax ``` modbusTCPClient.connected(); ``` #### Parameters None #### Returns Returns true if the client is connected, false if not. ### `modbusTCPClient.stop()` #### Description Disconnect from the server. #### Syntax ``` modbusTCPClient.stop(); ``` #### Parameters None #### Returns Nothing ## ModbusServer Class ### `modbusServer.configureCoils()` #### Description Configure the servers coils. #### Syntax ``` int configureCoils(int startAddress, int nb); ``` #### Parameters - startAddress - start address of coils - nb - number of coils to configure #### Returns 0 on success, 1 on failure ### `modbusServer.configureDiscreteInputs()` #### Description Configure the servers discrete inputs. #### Syntax ``` int configureDiscreteInputs(int startAddress, int nb); ``` #### Parameters - startAddress - start address of discrete inputs - nb - number of discrete inputs to configure #### Returns 0 on success, 1 on failure ### `modbusServer.configureHoldingRegisters()` #### Description Configure the servers holding registers. #### Syntax ``` int configureHoldingRegisters(int startAddress, int nb); ``` #### Parameters - startAddress - start address of holding registers - nb - number of holding registers to configure #### Returns 0 on success, 1 on failure ### `modbusServer.configureInputRegisters()` #### Description Configure the servers input registers. #### Syntax ``` int configureInputRegisters(int startAddress, int nb); ``` #### Parameters - startAddress - start address of input registers - nb - number of input registers to configure #### Returns 0 on success, 1 on failure ### `modbusServer.coilRead()` #### Description Perform a "Read Coils" operation for the specified address for a single coil. #### Syntax ``` int coilRead(int address); int coilRead(int id, int address); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation #### Returns coil value on success, -1 on failure. ### `modbusServer.discreteInputRead()` #### Description Perform a "Read Discrete Inputs" operation for the specified address for a single discrete input. #### Syntax ``` int discreteInputRead(int address); int discreteInputRead(int id, int address); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation #### Returns discrete input value on success, -1 on failure. ### `modbusServer.holdingRegisterRead()` #### Description Perform a "Read Holding Registers" operation for a single holding register. #### Syntax ``` long holdingRegisterRead(int address); long holdingRegisterRead(int id, int address); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address start address to use for operation - holding register value on success, -1 on failure. ### `modbusServer.inputRegisterRead()` #### Description Perform a "Read Input Registers" operation for a single input register. #### Syntax ``` long inputRegisterRead(int address); long inputRegisterRead(int id, int address); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation #### Returns input register value on success, -1 on failure. ### `modbusServer.coilWrite()` #### Description Perform a "Write Single Coil" operation for the specified address and value. #### Syntax ``` int coilWrite(int address, uint8_t value); int coilWrite(int id, int address, uint8_t value); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation - value coi -l value to write #### Returns 1 on success, 0 on failure. ### `modbusServer.holdingRegisterWrite()` #### Description Perform a "Write Single Holding Register" operation for the specified address and value. #### Syntax ``` int holdingRegisterWrite(int address, uint16_t value); int holdingRegisterWrite(int id, int address, uint16_t value); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation - value - holding register value to write #### Returns 1 on success, 0 on failure. ### `modbusServer.registerMaskWrite()` #### Description Perform a "Mask Write Registers" operation for the specified address, AND mask and OR mask. #### Syntax ``` int registerMaskWrite(int address, uint16_t andMask, uint16_t orMask); int registerMaskWrite(int id, int address, uint16_t andMask, uint16_t orMask); ``` #### Parameters - id (slave) - id of target, defaults to 0x00 if not specified - address address to use for operation - andMask - AND mask to use for operation - orMask - OR mask to use for operation #### Returns 1 on success, 0 on failure. ### `modbusServer.discreteInputWrite()` #### Description Write the value of the server's Discrete Input for the specified address and value. #### Syntax ``` int discreteInputWrite(int address, uint8_t value); ``` #### Parameters - address address to use for operation - value - discrete input value to write #### Returns 1 on success, 0 on failure. ### `modbusServer.writeDiscreteInputs()` #### Description Write values to the server's Discrete Inputs for the specified address and values. #### Syntax ``` int writeDiscreteInputs(int address, uint8_t values[], int nb); ``` #### Parameters - address address to use for operation - values - array of discrete inputs values to write - nb - number of discrete inputs to write #### Returns 1 on success, 0 on failure. ### `modbusServer.inputRegisterWrite()` #### Description Write the value of the server's Input Register for the specified address and value. #### Syntax ``` int inputRegisterWrite(int address, uint16_t value); ``` #### Parameters - address address to use for operation - value - input register value to write #### Returns 1 on success, 0 on failure. ### `modbusServer.writeInputRegisters()` #### Description Write values to the server's Input Registers for the specified address and values. #### Syntax ``` int writeInputRegisters(int address, uint16_t values[], int nb); ``` #### Parameters - address address to use for operation - values - array of input registers values to write - nb - number of input registers to write #### Returns 1 on success, 0 on failure. ### `modbusServer.poll()` #### Description Poll for requests #### Syntax ``` virtual void poll() = 0; ``` #### Parameters None #### Returns nothing ### `modbusServer.end()` #### Description Stop the server #### Syntax ``` void end(); ``` #### Parameters None #### Return nothing ## ModbusRTUServer Class ### `modbusRTUServer.begin()` #### Description Start the Modbus RTU server with the specified parameters. #### Syntax ``` ModbusRTUServer.begin(id, baudrate); ModbusRTUServer.begin(id, baudrate, config); ``` #### Parameters - id - (slave) id of the server baudrate - Baud rate to use for serial - config - Config to use for serial (see Serial.begin(...) for more info.) defaults to SERIAL_8N1 if not provided #### Returns 1 on success, 0 on failure ## ModbusTCPServer ### `ModbusTCPServer()` #### Description Creates a Modbus TCP server. #### Syntax ``` ModbusTCPServer(); ``` #### Parameters None ### `modbusTCPServer.begin()` #### Description Start the Modbus TCP server. #### Syntax ``` modbusTCPserver.begin(); modbusTCPserver.begin(id); ``` #### Parameters - id - the (slave) id of the server, defaults to 0xff (TCP); #### Returns 1 on success, 0 on failure ### `modbusTCPServer.accept()` #### Description Accept a client connection. #### Syntax ``` modbusTCPserver.accept(client); ``` #### Parameters - client - the Client to accept a connection from; #### Returns Nothing