嵌入式

在Arduino中实现ModbusRTU Slave

2024-11-27  本文已影响0人  Charles2018

简言

在 Modbus RTU 通信中,主机(Master)指的是发起请求并控制通信的设备,而 从机(Slave)是响应请求并提供数据的设备。

接线图

TTL to RS485

代码

开源库地址https://github.com/arduino-libraries/ArduinoModbus/tree/master

#include <ArduinoRS485.h> // ArduinoModbus depends on the ArduinoRS485 library
#include <ArduinoModbus.h>

const int numRegs = 10;

void setup() {
  Serial.begin(9600);
  while (!Serial);

  Serial.println("Modbus RTU Server Kitchen Sink");

  // start the Modbus RTU server, with (slave) id 42
  if (!ModbusRTUServer.begin(42, 9600)) {
    Serial.println("Failed to start Modbus RTU Server!");
    while (1);
  }

  // configure coils at address 0x00
  ModbusRTUServer.configureCoils(0x00, numRegs);

  // configure discrete inputs at address 0x00
  ModbusRTUServer.configureDiscreteInputs(0x00, numRegs);

  // configure holding registers at address 0x00
  ModbusRTUServer.configureHoldingRegisters(0x00, numRegs);

  // configure input registers at address 0x00
  ModbusRTUServer.configureInputRegisters(0x00, numRegs);
}

void loop() {
  for (int i = 0; i < 10; i++) {
    
    ModbusRTUServer.coilWrite(i,0x01);

    int randomHoldingValue = random(0, 1000);
    ModbusRTUServer.holdingRegisterWrite(i, randomHoldingValue);

    int randomInputValue = random(0, 355);
    ModbusRTUServer.inputRegisterWrite(i, randomInputValue);

    bool randomDiscreteValue = random(0, 2);
    ModbusRTUServer.discreteInputWrite(i, randomDiscreteValue);
  }
  // poll for Modbus RTU requests
  ModbusRTUServer.poll();

  delay(1000);
}

运行结果

image.png
上一篇 下一篇

猜你喜欢

热点阅读