Open
Description
Not able to decode ModbusTCPServer.Poll(); function to get the Function code for Whether the Function code is for read or write Operation. Need functions to get the PDU that is Function code, Address & Data seperately and need response function to send the response to the Client Master
Here is the code Example:
#include <SPI.h>
#include <Ethernet.h>
#include <ArduinoModbus.h>
bool _1s;
unsigned long TimeAct, TimePrev, HoldingResult, InputResult, HeartBeat, i, StartingAddr;
long Cmd;
EthernetServer EthServer(502);
ModbusTCPServer modbusTCPServer;
void setup() {
// Ethernet Settings
byte mac[] = { 0x4E, 0xA0, 0xBE, 0x3F, 0xFE, 0x0F }; // Define MAc address
byte ip[] = { 192, 168, 1, 23 }; // Define IP address
byte subnet[] = { 255, 255, 255, 0 }; // Define SubNEt mask
// initialize the ethernet device
Ethernet.begin(mac, ip, subnet); // Assign MAC, IP, and subnet mask
Serial.begin(9600);
EthServer.begin(); // start listening for clients
modbusTCPServer.begin(); // start listening for clients
// Define Holding register:
HoldingResult = modbusTCPServer.configureHoldingRegisters(0, 100);
InputResult = modbusTCPServer.configureInputRegisters(0, 100);
Serial.print("Holding Reg init result =");
Serial.print(HoldingResult);
Serial.print("\n");
Serial.print("Input Reg init result =");
Serial.print(InputResult);
Serial.print("\n");
Serial.print("Modbus server address=");
Serial.println(Ethernet.localIP());
Serial.print("\n");
}
void loop() {
// Modbus server accept incoming connections
EthernetClient client = EthServer.available();
if (client.connected()) {
modbusTCPServer.accept(client);
// poll for Modbus TCP requests, while client connected
modbusTCPServer.poll();
// Serial.print("poll");
}
// Code Stuff needed to get the Function Code, Address, &Data
//---------------------------------------------------------------------------------
// Modbus server :
// holding resgiter 40001: heartbeat (FC3)
modbusTCPServer.holdingRegisterWrite(0x00, HeartBeat);
// holding resgiter 40500: Command Word (FC6)
Cmd = modbusTCPServer.holdingRegisterRead(90);
}