Stable running reads
This commit is contained in:
parent
5252c69b5e
commit
ed421346a9
@ -36,8 +36,7 @@ NeoSWSerial modbusSerial(RX_PIN, TX_PIN); // Create a software serial instance
|
||||
ModbusMaster node;
|
||||
|
||||
unsigned long lastRefreshTime = 0;
|
||||
|
||||
|
||||
bool headerWritten = false;
|
||||
|
||||
void setup()
|
||||
{
|
||||
@ -87,21 +86,22 @@ void setup()
|
||||
node.begin(SLAVE_ID, modbusSerial);
|
||||
node.preTransmission(preTransmission);
|
||||
node.postTransmission(postTransmission);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void preTransmission()
|
||||
{
|
||||
// Serial.println(F("Transmitting Start"));
|
||||
digitalWrite(DE_RE_PIN, HIGH); // Enable RS485 transmit
|
||||
}
|
||||
|
||||
void postTransmission()
|
||||
{
|
||||
|
||||
digitalWrite(DE_RE_PIN, LOW); // Disable RS485 transmit
|
||||
// Serial.println(F("Transmitting End"));
|
||||
}
|
||||
|
||||
void writeFile(char *str)
|
||||
void primeFileDate()
|
||||
{
|
||||
if (!dataFile)
|
||||
{
|
||||
@ -110,6 +110,7 @@ void writeFile(char *str)
|
||||
}
|
||||
DateTime now = rtc.now();
|
||||
// Log the current date and time
|
||||
dataFile.print("\n");
|
||||
dataFile.print(now.year(), DEC);
|
||||
dataFile.print('-');
|
||||
dataFile.print(now.month(), DEC);
|
||||
@ -122,9 +123,6 @@ void writeFile(char *str)
|
||||
dataFile.print(':');
|
||||
dataFile.print(now.second(), DEC);
|
||||
dataFile.print(F(","));
|
||||
dataFile.print(str);
|
||||
|
||||
dataFile.println();
|
||||
}
|
||||
|
||||
String getFilename()
|
||||
@ -139,6 +137,7 @@ String getFilename()
|
||||
return mb;
|
||||
}
|
||||
|
||||
// const char[20] filename = "20240523.csv";
|
||||
|
||||
void loop()
|
||||
{
|
||||
@ -153,10 +152,34 @@ void loop()
|
||||
Serial.print(rtc.now().timestamp());
|
||||
// Serial.print("\nHeep:");
|
||||
// Serial.print(ESP.getFreeHeap());
|
||||
const uint16_t totalReg = sizeof(registers) / sizeof(registers[0]);
|
||||
// Open File
|
||||
String filename = getFilename();
|
||||
Serial.print(F("Open Card "));
|
||||
Serial.print(filename.c_str());
|
||||
Serial.print("\n");
|
||||
writebuffer = "a";
|
||||
if (!dataFile.open(filename.c_str(), FILE_WRITE))
|
||||
{
|
||||
Serial.println(F("Failed to Open Card "));
|
||||
}
|
||||
if (!headerWritten)
|
||||
{
|
||||
dataFile.print("\nDate Time,");
|
||||
for (int i = 0; i < totalReg; i++)
|
||||
{
|
||||
const uint16_t regaddr = pgm_read_word(®isters[i].regaddr);
|
||||
dataFile.print("Addr @ ");
|
||||
dataFile.print(regaddr);
|
||||
dataFile.print(",");
|
||||
}
|
||||
headerWritten = true;
|
||||
}
|
||||
primeFileDate();
|
||||
Serial.print("\n");
|
||||
|
||||
Serial.println(totalReg);
|
||||
// Modbus Data Loop
|
||||
for (int i = 0; i < 20; i++)
|
||||
for (int i = 0; i < totalReg; i++)
|
||||
{
|
||||
const uint16_t regaddr = pgm_read_word(®isters[i].regaddr);
|
||||
const uint8_t regtype = pgm_read_word(®isters[i].regtype);
|
||||
@ -165,53 +188,49 @@ void loop()
|
||||
Serial.println(regtype);
|
||||
Serial.println(regaddr);
|
||||
|
||||
|
||||
if (regaddr > 0)
|
||||
{
|
||||
uint8_t result = node.readHoldingRegisters(regaddr-1, 2);
|
||||
delay(50); //Gives the pending communication a little delay
|
||||
uint8_t result = node.readHoldingRegisters(regaddr - 1, 2);
|
||||
delay(50); //Delay the read for a little bit so that the buffer can be read
|
||||
|
||||
if (result == node.ku8MBSuccess)
|
||||
{
|
||||
if (regtype == 2)
|
||||
{
|
||||
writebuffer += String(getRegisterFloat(node.getResponseBuffer(0), node.getResponseBuffer(1)),4) + ",";
|
||||
dataFile.print(getRegisterFloat(node.getResponseBuffer(0), node.getResponseBuffer(1)));
|
||||
}
|
||||
else if (regtype == 1)
|
||||
{
|
||||
writebuffer += String(node.getResponseBuffer(0),10) + ",";
|
||||
dataFile.print(node.getResponseBuffer(0));
|
||||
}
|
||||
// else if (regtype == 3)
|
||||
// {
|
||||
// writebuffer += getRegisterInt64(node.getResponseBuffer(0), node.getResponseBuffer(1), node.getResponseBuffer(2), node.getResponseBuffer(3)) + ",";
|
||||
// dataFile.print(getRegisterInt64(node.getResponseBuffer(0), node.getResponseBuffer(1), node.getResponseBuffer(2), node.getResponseBuffer(3)));
|
||||
// }
|
||||
else if (regtype == 0)
|
||||
{
|
||||
writebuffer += String(getRegisterInt32(node.getResponseBuffer(0), node.getResponseBuffer(1)),10) + ",";
|
||||
}
|
||||
else {
|
||||
writebuffer += "null,";
|
||||
}
|
||||
|
||||
dataFile.print(getRegisterInt32(node.getResponseBuffer(0), node.getResponseBuffer(1)));
|
||||
}
|
||||
else
|
||||
{
|
||||
writebuffer += "E" + String(result,10) + "@" +String(regaddr) + ",";
|
||||
dataFile.print(F("null"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.print(F("Reg Error: "));
|
||||
Serial.print(result, HEX);
|
||||
Serial.print("\n");
|
||||
dataFile.print(F("E"));
|
||||
dataFile.print(result, HEX);
|
||||
}
|
||||
dataFile.print(",");
|
||||
}
|
||||
}
|
||||
|
||||
Serial.print(F("\nRead buffer: "));
|
||||
Serial.println(writebuffer);
|
||||
|
||||
delay(10);
|
||||
//Write to file
|
||||
String filename = getFilename();
|
||||
dataFile.open(filename.c_str(), FILE_WRITE);
|
||||
Serial.print(F("Open Card "));
|
||||
Serial.print(filename.c_str());
|
||||
Serial.print("\n");
|
||||
|
||||
writeFile(writebuffer.c_str());
|
||||
|
||||
if (dataFile)
|
||||
{
|
||||
@ -224,7 +243,6 @@ void loop()
|
||||
Serial.print(F("\n\n"));
|
||||
|
||||
delay(100);
|
||||
|
||||
}
|
||||
|
||||
// // Check if the read was successful
|
||||
|
Loading…
Reference in New Issue
Block a user