Stable running reads

This commit is contained in:
Warky 2024-09-23 18:49:42 +02:00
parent 5252c69b5e
commit ed421346a9

View File

@ -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(&registers[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(&registers[i].regaddr);
const uint8_t regtype = pgm_read_word(&registers[i].regtype);
@ -165,53 +188,49 @@ void loop()
Serial.println(regtype);
Serial.println(regaddr);
if (regaddr > 0)
{
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