SIM7020 modbus 读写保持寄存器


写单个保持寄存器

每隔一秒将保持寄存器1增加1

#include 
#include 
#include 
#define RX_PIN      13
#define TX_PIN      15
RS485Class RS485(Serial2, RX_PIN, TX_PIN,-1,-1);
uint16_t x = 0;
int i = 5;
void setup() {
  M5.begin(true,true,true);
  if (!ModbusRTUClient.begin(9600, SERIAL_8E1)) {
        Serial.println("Failed to start Modbus RTU Client!");
        return;
  }
  delay(500);
}
void loop() {
  if(!ModbusRTUClient.holdingRegisterWrite(7,1,x)){
    Serial.print("Failed to write holdingRegister! ");
    Serial.println(ModbusRTUClient.lastError());
  }
  x++;
  i--;
  if(i == 0){
    ModbusRTUClient.end();
    return;
  }
  delay(1000);
}

写多个保持寄存器

#include 
#include 
#include 
#define RX_PIN      13
#define TX_PIN      15
RS485Class RS485(Serial2, RX_PIN, TX_PIN,-1,-1);
uint16_t msg[3] = {0x41,0x42,0x43}; 
void setup() {
  M5.begin(true,true,true);
  if (!ModbusRTUClient.begin(9600, SERIAL_8E1)) {
        Serial.println("Failed to start Modbus RTU Client!");
        return;
  }
  delay(500);
  ModbusRTUClient.beginTransmission(7,HOLDING_REGISTERS,0,3);
  int i=3;
  uint16_t *p = msg;
  while(i){
    if(!ModbusRTUClient.write(*p)){
      Serial.println(ModbusRTUClient.lastError());
      return;
    }
    p++;
    i--;
  }
  ModbusRTUClient.endTransmission();
}
void loop() {
}

 读保持寄存器

#include 
#include 
#include 
#define RX_PIN      13
#define TX_PIN      15
RS485Class RS485(Serial2, RX_PIN, TX_PIN,-1,-1);
void setup() {
  M5.begin(true,true,true);
  if (!ModbusRTUClient.begin(9600, SERIAL_8E1)) {
        Serial.println("Failed to start Modbus RTU Client!");
        return;
  }
  delay(500);
  ModbusRTUClient.requestFrom(0x07,HOLDING_REGISTERS,0,3);
  delay(500);
  while(ModbusRTUClient.available()){
    Serial.printf("%ld",ModbusRTUClient.read());
  }
  ModbusRTUClient.end();
}
void loop() {

}

相关