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;
|
ModbusMaster node;
|
||||||
|
|
||||||
unsigned long lastRefreshTime = 0;
|
unsigned long lastRefreshTime = 0;
|
||||||
|
bool headerWritten = false;
|
||||||
|
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
@ -87,21 +86,22 @@ void setup()
|
|||||||
node.begin(SLAVE_ID, modbusSerial);
|
node.begin(SLAVE_ID, modbusSerial);
|
||||||
node.preTransmission(preTransmission);
|
node.preTransmission(preTransmission);
|
||||||
node.postTransmission(postTransmission);
|
node.postTransmission(postTransmission);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void preTransmission()
|
void preTransmission()
|
||||||
{
|
{
|
||||||
|
// Serial.println(F("Transmitting Start"));
|
||||||
digitalWrite(DE_RE_PIN, HIGH); // Enable RS485 transmit
|
digitalWrite(DE_RE_PIN, HIGH); // Enable RS485 transmit
|
||||||
}
|
}
|
||||||
|
|
||||||
void postTransmission()
|
void postTransmission()
|
||||||
{
|
{
|
||||||
|
|
||||||
digitalWrite(DE_RE_PIN, LOW); // Disable RS485 transmit
|
digitalWrite(DE_RE_PIN, LOW); // Disable RS485 transmit
|
||||||
|
// Serial.println(F("Transmitting End"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void writeFile(char *str)
|
void primeFileDate()
|
||||||
{
|
{
|
||||||
if (!dataFile)
|
if (!dataFile)
|
||||||
{
|
{
|
||||||
@ -110,6 +110,7 @@ void writeFile(char *str)
|
|||||||
}
|
}
|
||||||
DateTime now = rtc.now();
|
DateTime now = rtc.now();
|
||||||
// Log the current date and time
|
// Log the current date and time
|
||||||
|
dataFile.print("\n");
|
||||||
dataFile.print(now.year(), DEC);
|
dataFile.print(now.year(), DEC);
|
||||||
dataFile.print('-');
|
dataFile.print('-');
|
||||||
dataFile.print(now.month(), DEC);
|
dataFile.print(now.month(), DEC);
|
||||||
@ -122,9 +123,6 @@ void writeFile(char *str)
|
|||||||
dataFile.print(':');
|
dataFile.print(':');
|
||||||
dataFile.print(now.second(), DEC);
|
dataFile.print(now.second(), DEC);
|
||||||
dataFile.print(F(","));
|
dataFile.print(F(","));
|
||||||
dataFile.print(str);
|
|
||||||
|
|
||||||
dataFile.println();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String getFilename()
|
String getFilename()
|
||||||
@ -139,6 +137,7 @@ String getFilename()
|
|||||||
return mb;
|
return mb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// const char[20] filename = "20240523.csv";
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
@ -153,10 +152,34 @@ void loop()
|
|||||||
Serial.print(rtc.now().timestamp());
|
Serial.print(rtc.now().timestamp());
|
||||||
// Serial.print("\nHeep:");
|
// Serial.print("\nHeep:");
|
||||||
// Serial.print(ESP.getFreeHeap());
|
// 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");
|
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
|
// 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 uint16_t regaddr = pgm_read_word(®isters[i].regaddr);
|
||||||
const uint8_t regtype = pgm_read_word(®isters[i].regtype);
|
const uint8_t regtype = pgm_read_word(®isters[i].regtype);
|
||||||
@ -164,54 +187,50 @@ void loop()
|
|||||||
Serial.print(F("Reg Read: "));
|
Serial.print(F("Reg Read: "));
|
||||||
Serial.println(regtype);
|
Serial.println(regtype);
|
||||||
Serial.println(regaddr);
|
Serial.println(regaddr);
|
||||||
|
|
||||||
|
|
||||||
if (regaddr > 0)
|
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 (result == node.ku8MBSuccess)
|
||||||
{
|
{
|
||||||
if (regtype == 2)
|
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)
|
else if (regtype == 1)
|
||||||
{
|
{
|
||||||
writebuffer += String(node.getResponseBuffer(0),10) + ",";
|
dataFile.print(node.getResponseBuffer(0));
|
||||||
}
|
}
|
||||||
// else if (regtype == 3)
|
// 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)
|
else if (regtype == 0)
|
||||||
{
|
{
|
||||||
writebuffer += String(getRegisterInt32(node.getResponseBuffer(0), node.getResponseBuffer(1)),10) + ",";
|
dataFile.print(getRegisterInt32(node.getResponseBuffer(0), node.getResponseBuffer(1)));
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
writebuffer += "null,";
|
{
|
||||||
|
dataFile.print(F("null"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
writebuffer += "E" + String(result,10) + "@" +String(regaddr) + ",";
|
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.print(F("\nRead buffer: "));
|
||||||
Serial.println(writebuffer);
|
|
||||||
|
|
||||||
delay(10);
|
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)
|
if (dataFile)
|
||||||
{
|
{
|
||||||
@ -224,7 +243,6 @@ void loop()
|
|||||||
Serial.print(F("\n\n"));
|
Serial.print(F("\n\n"));
|
||||||
|
|
||||||
delay(100);
|
delay(100);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// // Check if the read was successful
|
// // Check if the read was successful
|
||||||
|
Loading…
Reference in New Issue
Block a user