The Redlion HMIs have the capability of creating and deleting files on the flash memory card and emailing out files. The program below is called from a button on a diagnostics screen. This is used to collect the contents of a group of memory tags (variables), format them so they can be read with a spreadsheet program, store as a file on the flash memory card, then email that file out.
// program to store all the current regression data in a file and email it out cstring line; int FileNum, index; //delete old file FileNum = OpenFile("RegDiags.csv", 1); Sleep(500); DeleteFile(FileNum); Sleep(500); // create the file CreateFile("RegDiags.csv"); Sleep(500); // wait for file to be created while(GetDriveStatus('C') != 5) {} // open the file and write the 'main' header information FileNum = OpenFile("RegDiags.csv", 2); //write memory contents to text file WriteFileLine(FileNum, "Regression1.lastTimeStamp"); WriteFileLine(FileNum, Regression1.lastTimeStamp.AsText); WriteFileLine(FileNum, "Regression1.period"); WriteFileLine(FileNum, Regression1.period.AsText); WriteFileLine(FileNum, "Regression1.slope"); WriteFileLine(FileNum, Regression1.slope.AsText); WriteFileLine(FileNum, "Regression1.slope_scaled"); WriteFileLine(FileNum, Regression1.slope_scaled.AsText); WriteFileLine(FileNum, "Regression1.slopeValid"); WriteFileLine(FileNum, Regression1.slopeValid.AsText); // build up heading text line for spreadsheet viewing line = "Sensor1x,Sensor1y,Sensor2x,Sensor2y,"; // write the line to the file WriteFileLine(FileNum, line); //write a line for each element in the array for (index = 1; index <= 1500; index++){ line = Regression1.x[index].AsText; line += ","; line += Regression1.y[index].AsText; line += ","; line += Regression2.x[index].AsText; line += ","; line += Regression2.y[index].AsText; line += ","; WriteFileLine(FileNum, line); }; CloseFile(FileNum); Sleep(500); //email file to list 1 SendFile(1, "RegDiags.csv");
Notes:
- The Redlion HMI retains the contents of variables that have the ‘retentive’ option checked, even when a new database is loaded. Because of this, I was able to load a new database containing this program, and extract all the data I needed.
- The “.AsText” suffix can be used with any tag to represent the value (integer, float, or binary) as text so it can be written to a file.