@Robin,
that was actually a typo, I meant to say continuous results as I had an infinite loop running.
Also I should have probably said that my test use more of the available bandwidth than in the real world. So I could turn down the polling rate and effectively decreasing processor overhead in production.
That last example was just of the core "matching" element in the parser, and the python script was very simple.
So i used a little of my weekend to add some handshaking and ascii-to-integer conversion for the stored results.
So far, tests have been passing without a hitch; again, so far.....
even by copying and pasting two of those fake status messages together and sending, it still gets parsed ok; its around three times where things get too large for the loop timings i have set, which is easily adjusted by changing the "onTime" variable in the arduino sketch.
though i am very interested in feedback from anyone who runs the test; i also hope this could be of use for someone in the future.
and thank you everyone for your help!!
Enjoy! 
SUPER LONG STRING PARSER - ARDUINO SKETCH:
#include <avr/pgmspace.h>
prog_char string_0[] PROGMEM = "Process Temps";
prog_char string_1[] PROGMEM = "Dewpoint:";
prog_char string_2[] PROGMEM = "String 2";
prog_char string_3[] PROGMEM = "String 3";
prog_char string_4[] PROGMEM = "String 4";
prog_char string_5[] PROGMEM = "String 5";
// Then set up a table to refer to your strings.
PROGMEM const char *string_table[] = // change "string_table" name to suit
{
string_0,
string_1,
string_2,
string_3,
string_4,
string_5 };
const int TotalNumOfValues = 6;
int VALUES[TotalNumOfValues];
const int bufSize = 64;
char cpy_buffer[bufSize+1]; // make sure this is large enough for the largest string it must hold
char lin_buffer[bufSize+1];
int lin_buffer_idx = 0;
void setup() {
Serial.begin(38400);
}
void printValues() {
Serial.println("VALUES:");
for (int i = 0; i < TotalNumOfValues; i++) {
Serial.println( VALUES[i] );
}
}
void clearBuffer() {
memset(lin_buffer,0,sizeof(lin_buffer));
lin_buffer_idx = 0;
}
int readInLine() {
char input = Serial.read();
if (input == '\r' || input == '\n') {
return 1;
} else if (input != -1) {
lin_buffer[lin_buffer_idx] = input;
lin_buffer_idx++;
lin_buffer_idx = constrain(lin_buffer_idx, 0, bufSize-1);
return 0;
}
return -1;
}
void parseIncoming() {
if (readInLine() == 1) {
int i = 0;
for (i; i < 6; i++)
{
strcpy_P(cpy_buffer, (char*)pgm_read_word(&(string_table[i]))); // Necessary casts and dereferencing, just copy.
boolean checker = 1;
int x = 0;
for (x; x < bufSize; x++) {
if ( int(cpy_buffer[x] ) == 0 ) { //fires once the string in PORGMEM reaches a /0 null
break;
}
checker &= (cpy_buffer[x] == lin_buffer[x]);
}
if (checker == 1) {
//now that we have a match lets scan it and pluck out the first set of numbers,
int numBufferIdx = 0;
char numBuffer[8] = {'\0'};
boolean numFlag = true; //goes false to indicate when the first digit was seen
for (int c = x; c <= bufSize; c++) {
numFlag &= ( ( !(isdigit(lin_buffer[c]) ) && ( !(lin_buffer[c] == '-')) ) ); //will go false if digit or '-' is seen then is anded to the flag.
if (!numFlag) { //after this sees digit, if it sees anything but digit it moves on.
numBuffer[numBufferIdx] = lin_buffer[c];
numBufferIdx++;
if ( !isdigit(lin_buffer[c+1]) ) { //saw something other than digit, moving on...
VALUES[i] = atoi(numBuffer);//APPLYING VALUE TO VARIABLE HERE
break; //done, lets break out and continue checking input for matches
}
numBufferIdx = constrain(numBufferIdx, 0, 7);
}
}
break;
}
}
clearBuffer(); //always do this last.
}
}
long previousMillis = 0;
long interval = 2000;
long onTime = 1000;
boolean poll = true;
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
//do communication opperations here
if (poll) {
Serial.print("STATUS\r\n");
poll = false;
}
parseIncoming();
if(currentMillis - previousMillis > interval + onTime) {
//do one time opperation here
poll = true;
previousMillis = currentMillis;
Serial.print("REPLY\r\n");
printValues();
}
} else {
//do long bulky opperations here
}
//do short critical stuff here
}
DEVICE SIMULATOR - PYTHON SCRIPT:
import serial, time
#Text Of The Fake Response:
text = """
Dryer Serial = D18885
Temperatures are in F
Two Hopper System
Motor Selected
Hopper 1 enabled
System Autostart Enabled
Loop Break Alarm DISABLED
Current Test DISABLED
Thermocouple Test ENABLED
Installed thermocouples = fff
Process 1 Temp Offset = +0
Process 2 Temp Offset = +0
Dewpoint Offset = +0
Drying Trip point = 330
Cooling Trip point = 280
Regen Setpoint = 600
Heat Exchanger Hi Temp Limit = 180,
Heat Exchanger Low Temp Limit = 170,
Preheat Time = 60
Process 1 setpoint = 180 - actual temp = 190 Temp Alarm Delta = 50
Process 2 setpoint = 180 - actual temp = 78 Temp Alarm Delta = 50
Low Temp Alarm Disabled
Dewpoint Alarm Enabled
Dewpoint: -53C No Limit Dewpoint: -53C
Dewpoint Alarm Level = 25
Loader On Time = 5
Loader Delay = 15
Zone 1 heating - Mode: Temperature
Single Hopper Cool Trip Delta = 75
Heater Difference = 75
Network Address = 0
LEARNED HEATER CURRENTS
Z1B Z1T Z2B Z2T HP1 HP2 OFF
0.1 0.1 0.1 0.0 0.0 0.0 0.0
Process 1 Setback is OFF
Process 2 Setback is OFF
Setback Inhibit Times 120 , 120 minutes
Setback Activate Delta Temps 75 , 75 Degrees
Setback Temp Delta 30 , 30 Degrees
Setback Restore Temps 100 , 100 Degrees
Process Temps 190 , 78 Degrees
Process Return Temps 78 , 78 Degrees
Inhibit Timers 95 , 95 minutes
Setback Idle Times 30 , 30 minutes
"""
BUFFER = ''
try:
ser = serial.Serial(timeout=0.25, baudrate=38400, port="COM32")
time.sleep(2)
ser.flushInput();
while True:
while ser.inWaiting() > 0:
D = ser.read(1)
if D == '\r' or D == '\n':
if BUFFER == "STATUS":
for c in text:
ser.write(c)
if BUFFER == "REPLY":
linebuff = ''
time.sleep(0.1)
while ser.inWaiting() > 0:
linebuff += ser.read(1)
print linebuff #the returned values
if linebuff <> '\nVALUES:\r\n190\r\n-53\r\n0\r\n0\r\n0\r\n0\r\n': #change this when you make changes, hint: print repr(linebuff)
PassFail = "FAIL!!!! " + repr(linebuff)
else:
PassFail = "PASS! :-)"
print PassFail
BUFFER = '';
ser.flushInput();
else:
BUFFER += D
finally:
ser.close()
OUTPUT OF THE ABOVE EXAMPLE:
>>>
VALUES:
190
-53
0
0
0
0
PASS! :-)