Thanks again to all that have responded - I now understand the string question and the line feed in the monitor worked as well. Command + t also smartened up the formatting.
To answer a few queries above.....
To date, I have not connected this to my engine/hardware so everything I have done so far is based on example messages from J1587 papers online and the SAE specification, everything I've done so far has been tested either using the monitor window (where I saw the serial read delay) and final testing connecting two arduinos together.
The construct of the messages coming out my engine is not yet known. The engine may transmit messages with just one engine parameter per line, or, it may pack the message line to the maximum of 19 bytes and send - I just don't know yet. There is a final possibility - it sends no data unless it's requested, in which case I will need to send requests to the ECU which it responds too, if this happens I'll need more code and I suspect the responses will be on engine parameter at a time. I'll know more when I connect to the engine on my next visit.
If you were good enough to look at my code, did you spot any howlers in it - anything that might fail or make it unreliable?
Just to re-iterate the message format - depending on the engine parameter, the packet can consist of a an address byte followed by one data byte, or an address byte followed by two data bytes. The first byte is always the engine identity which defaults to 80 (hex), the packets follow that. Engine parameters below 192 contain 1 data byte, 192 and above contain 2 data bytes.The exception is if the second byte is FF which indicates a second page of parameters, in this case the first address byte is the 3rd byte in the stream rather than the 2nd. Finally, if the address byte is 192 I want to dump the rest of the line as it contains trouble codes, which is not what I'm after.
Cheers
Tim