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() { }