PLX-DAQ version 2 - now with 64 bit support! (and further new features)

jl1cny: Thank you very much for providing a great handy tool to transfer serial data to Excel. I am writing a sketch that controls Arduino by sending characters and numbers to it through serial. I am wondering if you can add functions to PLQ-DAQ version 2 that allows the user to send characters and numbers to Arduino through serial. (...) Thank you in advance for your consideration.

Hi Sam,

thanks a lot for your feedback :) Good news for you: the function is in fact already present in the program ;)

With the command

Serial.println("CELL,GET,D1,");

your Ardunio can ask Excel to send him the values from cell D1 (well in this case). In that cell (and further cells) you could put the variables that you use to operate the frequency range.

Otherwise you could use the custom dev-point "CustomDevPointNewData". There you could easily send your own defined commands from Arduino to Excel and programm in VBA any behaviour you want (e.g. check current time of PC and adjust frequency if time is pre 12:00 am or past 12:00 am. Data can be send to your Arduino from VBA via command

CommWrite cboPort.Text, "Any information can be send here"

In case you have any further questions please feel free to ask :-)

Greetings

NetDevil

Hi NetDevil,

Thank you for the quick response. It is great to know the function is already there!
I tried CELL GET function and came up with a few more questions.

  1. I tried the code below with 123 in D1. When executed, the EXCEL says “Value in cell D1=0” in A2. It seems the value in D1 is not properly read. Any problem with the code?

Serial.println(“ROW,SET,2”);
Serial.println(“CELL,GET,D1,”);
Serial.print(“DATA,”);
int cell_num = Serial.parseInt();
Serial.print(“Value in cell D1 = “);
Serial.print(cell_num);
Serial.println(”,”);

  1. I want to copy a number in C1 to D1. Then I tried the code like this. I found ‘a’ in D1. What I meant is to see the number in C1 copied to D1. How can I do it?

Serial.println(“CELL,GET,C1,”);
int a=Serial.parseInt();
Serial.println(“CELL,SET,D1,a,”);

  1. I would like to clear contents for the range of say A2 to B200. How can I do it?

Thank you very much in advance for your help.

best regards,

Sam

Hi Sam,

well - let’s see.

  1. I guess you used Larrys code from here http://forum.arduino.cc/index.php?topic=437398.msg3032364#msg3032364 ? Have you tried running the whole sketch and then stripping down to what you need?

From what I see instantly is, that you have two much commas in your code.

Serial.println("ROW,SET,2");
Serial.println("CELL,GET,D1,"); <<<== last comma after D1 is too much
Serial.print("DATA,");
int  cell_num = Serial.parseInt();
Serial.print("Value in cell D1 = ");
Serial.print(cell_num);
Serial.println(","); <<<== full line needless. Just change above line to Serial.println(cell_num);
  1. Sure it puts an “a” in the cell. You send an “a” hardcoded :wink: Change to:
Serial.println("CELL,GET,C1,");  <<== last comma needless again
int a=Serial.parseInt();    
Serial.print("CELL,SET,D1,");
Serial.println(a); <<== use variable 'a' instead of char 'a' in string above
  1. No, there is no function yet to clear a range. By the command CLEARSHEET you can clear the full sheet. What you can do is

a) loop in your Arduino and clear the cells yourself

for(int i = 2 ; i <= 200 ; i++)
{
  Serial.print("CELL,SET,A");
  Serial.print(i);
  Serial.println(",")  <<<=== used to output 'CELL,SET,A2,' ; last comma needed to say fourth parameter (aka value) is empty, thus cell A2 should be made empty
  Serial.print("CELL,SET,B");
  Serial.print(i);
  Serial.println(",") <<<=== same for cells B
}

(please note! I have no Arduino here with me right now. Code is from mind, hopefully the syntax is ok)

That method is dirty. Better would be to define your own command and use it in the custom dev point CustomDevPointLineRead as recommended above.

Arduino code with new function and parameters:

Serial.println("MyCustomClearCommand,A,2,B,200");

VBA code extension in Excel (press F11 to get to VBA code editor in Excel) in the module frmStampDAQ (right click ‘Show code’):

Private Function CustomDevPointLineRead(newLine As String) As Boolean

    CustomDevPointLineRead = True 'be true if not stated otherwise in this function
    Dim DataVal() As String

If Data <> "" Then
    DataVal = Split(Data, ",")
    If (UCase(DataVal(0)) = "MYCUSTOMCLEARCOMMAND") Then
        WStoUse.Range(WStoUse.Cells(DataVal(2), DataVal(1)), WStoUse.Cells(DataVal(4), DataVal(3))).ClearContents
        'line above translates to = Range(Cells(2,A),Cells(200,B)).ClearContents
        CustomDevPointLineRead = False
        'line above says that command was operated and no need to pass to main function
    End If
End If

End Function

The Range-clear-Command could be useful for many people so maybe I should integrate it into the standard and release with version 2.7. However that way you should be able to use it now already.

Hi, NetDevil

Thank you for your quick reply as always. I appreciate it.

As for 2. and 3., it works fine. Although you said 3. a) is dirty, it showed me a way to overwrite data in certain range, which is more suitable for my purpose than clearing contents then filling data. Thank you soooo much! I am looking forward to seeing new Range-clear-Command incorporated into Ver 2.7 in the near future, though. This tool is going to be a perfect solution to me.

What is still annoying me is 1. As you suggested, I just copied and pasted LarryD's entire code and ran it with no joy. It seems to me that his code works properly except GET function. Then I tried Ver 2.4, which I believe he used for his code. No joy. Then I changed his code based on your suggestion still with no joy. I am totally lost. Any idea? I really want to use his tool.

Best regards,

Sam

jl1cny:
What is still annoying me is 1. As you suggested, I just copied and pasted LarryD’s entire code and ran it with no joy. It seems to me that his code works properly except GET function. Then I tried Ver 2.4, which I believe he used for his code. No joy. Then I changed his code based on your suggestion still with no joy. I am totally lost. Any idea?

Hi Sam,

I tried using my Arduino and your code is working fine for me as long as I read numbers(!). Reading chars or strings is not working because of the used

Serial.parseInt();

In case you want to read chars / strings try this one:

Serial.println("ROW,SET,2");
Serial.println("CELL,GET,D1");
Serial.print("DATA,");
String cell_content = Serial.readString(); <<== Changed data type, variable name and Serial-function
Serial.print("Value in cell D1 = ");
Serial.println(cell_content); <<== used new variable nane

The command for ClearRange is already included in v2.7 which I will release in the next post (in a few minutes)

As announced here we are (new post for clear hyperlinking):


=============================================================
This version is already outdated !! Link to always most recent version of PLX DAQ v2 here:
==> https://forum.arduino.cc/index.php?topic=437398.msg3013761#msg3013761 <==
=============================================================


What’s new in “version 2.7” aka Change log:

  • Added a new command: ClearRange that allows for a range to be cleared in the sheet.
    Syntax is Serial.println(“ClearRange,StartColumn,StartRow,EndColumn,EndRow”); ==> e.g., Serial.println(“ClearRange,B,2,D,50”);
  • fixed a bug when closing the form while still logging. The macro was not paused correctly but will do so now

Backlog for next version(s):

  • find a good solution for Excel crashing when moving the window around while logging. Priority: low

I also updated the example sketch once more with the ClearRange command (included stand alone and in the zip file as well).

Image-Link: http://www.freebie-base.de/Pics/PLX_DAQ_v2.7.png
(hosted on my server, no traffic hijack)

=============================================================
This version is already outdated !! Link to always most recent version of PLX DAQ v2 here:
==> https://forum.arduino.cc/index.php?topic=437398.msg3013761#msg3013761 <==
=============================================================

PLX-DAQ-v2.7.zip (136 KB)

PLX-DAQ-v2-DefaultSketch.ino (2.19 KB)

a minor fix. There’s a missing end quote in the example in your post (49):

Serial.println("ClearRange,B,2,D,50);

Pete

el_supremo: a minor fix. There's a missing end quote in the example in your post (49):

Serial.println("ClearRange,B,2,D,50);

Pete

Thanks, I fixed it. :)

Hi,

Thank you for uploading Ver2.7! The new function works very well.

I am still investigating the reason GET function does not properly work in my Arduino.

I just created a simple sketch below to see if the 123 in E2 will be copied to D2 and ‘TEST’ in E3 will be copied to D3. When executed, it is weird enough to see 0 in D2 and 123 not ‘TEST’ in D3. It seems to me as if the data transfer from the EXCEL to my Arduino was delayed so that 123 which should be input to variable ‘b’ was actually input to variable ‘d’.

Serial.println(“ClearRange,D,2,E,202”);

int a = 123;
Serial.print(“CELL,SET,E2,”);
Serial.println(a);

Serial.println(“CELL,GET,E2”);
int b = Serial.parseInt();

Serial.print(“CELL,SET,D2,”);
Serial.println(b);

String c = “TEST”;
Serial.print(“CELL,SET,E3,”);
Serial.println(c);

Serial.println(“CELL,GET,E3”);
String d = Serial.readString();

Serial.print(“CELL,SET,D3,”);
Serial.println(d);

Than I inserted ‘while (!Serial.available()){}’ to see if my Arduino receives data from the EXCEL by the execution of ‘Serial.println(“CELL,GET,E2”);’ command. In this case, the program stays at ‘while (!Serial.available()){}’ command and never goes beyond.

Serial.println(“ClearRange,D,2,E,202”);

int a = 123;
Serial.print(“CELL,SET,E2,”);
Serial.println(a);

Serial.println(“CELL,GET,E2”);
while (!Serial.available()){} // << inserted
int b = Serial.parseInt();

Serial.print(“CELL,SET,D2,”);
Serial.println(b);

String c = “TEST”;
Serial.print(“CELL,SET,E3,”);
Serial.println(c);

Serial.println(“CELL,GET,E3”);
String d = Serial.readString();

Serial.print(“CELL,SET,D3,”);
Serial.println(d);

I am a newbie in terms of programming. I wonder if there exist some timing issues. Does anyone have any clue?

Sam

Hi jl1cny,

might be I found the problem. I was able to recreate the same issue when using baud rates greater then 19200. Might be that it is just to fast for my PC / your PC and or Excel or the Arduino.

When using baud rate of 9600 or 19200 all my get / set commands were executed correctly.

I attached a test sketch and a special Excel sheet for you to try.

The sketch has 4 test cases:

  • read int from B4 to B8 and show in DirectDebug window
  • read string from C4 to C8 and show in DirectDebug window
  • read string from E4 to E8, store it, put a random string in E4 to E8 and put old value in D4 to D8 (read / change / switch)
  • read int from G4 to G8, increase by one, put result in G4 to G8 and put old value in F4 to F8 (read / increase / switch)

All is running well with baud up to 19200.

Please just give it try and in case it is running well try to reduce your baud rate.

And one more thing, when posting code please use the code tags for better readability.

[ code]put code here[/ code]

and remove blanks'

PLX-DAQ-TestingSketch.zip (139 KB)

Updates Updates Updates :smiley: :smiley:


=============================================================
This version is already outdated !! Link to always most recent version of PLX DAQ v2 here:
==> https://forum.arduino.cc/index.php?topic=437398.msg3013761#msg3013761 <==
=============================================================


What’s new in “version 2.8” aka Change log:

  • fixed an issue with the LABEL command. Columns that should labeled either TIME, TIMER or DATE where translated as well thus the column was not labeled with e.g., DATE but accidentally resolved to current system date (e.g., 21.02.2017)
  • fixed in issue with 32 bit Office versions and sleep function. Should be working on 64 bit and 32 bit versions again. Issue was reported by ankoo here
  • removed two deprecated commands from PLX DAQ v1 (RESET and CMD?) as they were of no use anymore
  • realigned source code for better readability, reused functions more often to reduce redundancy, commented out old checkbox calls from PLX DAQ v1 that are deprecated within commands
  • corrected a mistake in the comments of the default sketch (column naming)

Backlog for next version(s):

  • find a solution for Excel crashing when moving the window around while logging. Priority: low ; Workaround: don’t move window while logging ; Status: clueless…
  • solve get cell / set cell mix up reported by jl1cny here. Priority: high ; Workaround: none(!) ; Status: in contact with Sam directly via email to identify issue. Best guess is an issue in Arduino code where different variables point to the same addresses in RAM

Image-Link: http://www.freebie-base.de/Pics/PLX_DAQ_v2.8.png
(hosted on my server, no traffic hijack)

=============================================================
This version is already outdated !! Link to always most recent version of PLX DAQ v2 here:
==> https://forum.arduino.cc/index.php?topic=437398.msg3013761#msg3013761 <==
=============================================================

PLX-DAQ-v2-DefaultSketch.ino (2.2 KB)

PLX-DAQ-v2.8.zip (139 KB)

Hi NetDevil

Many thanks for the ClearRange command. This enables an easy workaround for the inability to read from other sheets. Just set a cell in Simple Data (that is not cleared) equal to the cell in the other sheet you want to read from.

SASv

P.S. In your version 2.8 update you state in Backlog for next version(s): "solve get cell / set cell mix up reported by jl1cny here. Priority: high ; Workaround: none(!)" But for those who can afford lower baud rates you already posted a workaround, it is to lower the baud rate. I checked it and it works. As I have occasional issues with 9600 baud, I will be using 4800.

Hi SASv, thanks for your feedback. Let's see:

SASv: This enables an easy workaround for the inability to read from other sheets. Just set a cell in Simple Data (that is not cleared) equal to the cell in the other sheet you want to read from.

Interesting issue. You are right, you can only read values from the current sheet and with having had only CLEARSHEET your reference cell was deleted as well. I will add a feature within the next version to read data from other sheets (by name) as well. Right now I am thinking of something like:

// ## NOTE: function not yet implemented in PLX DAQ v2
Serial.println("CELL,GET,FROMSHEET,MyConfigSheet,C,5");

SASv: P.S. In your version 2.8 update you state in Backlog for next version(s): "solve get cell / set cell mix up reported by jl1cny here. Priority: high ; Workaround: none(!)" But for those who can afford lower baud rates you already posted a workaround, it is to lower the baud rate. I checked it and it works. As I have occasional issues with 9600 baud, I will be using 4800.

Good to know it is working well for you. I still need to get to the bottom of the issue and was hoping the workaround would suite for more people. Could you post me the code you are having issue with at 9600 baud? Are you using more then 1 variable to store data?

Hi NetDevil

Apologies, I should have specified that I had occasional issues at 9600 baud with version 2.3. Version 2.8 has no issues at 9600 baud, and I will be switching to version 2.8.

A "CELL,GET,FROMSHEET,MyConfigSheet,C,5" command would be great.

Many thanks!

Hey there, I added the command to the programm and did some more research on the issues with the window crash and cell mix up. Unfortunately there is no update on those issues yet. Still pretty mysterious … Nevertheless I’ll reduce the priority as baud rates of around 9600 seem to work without any problems.


=============================================================
This version is already outdated !! Link to always most recent version of PLX DAQ v2 here:
==> https://forum.arduino.cc/index.php?topic=437398.msg3013761#msg3013761 <==
=============================================================


What’s new in “version 2.9” aka Change log:

  • Extended the CELL,GET command to read cells from other sheets as well.
    Syntax is Serial.println(“CELL,GET,FROMSHEET,SheetName,Column,Row”); ==> e.g., Serial.println(“CELL,GET,FROMSHEET,Simple Data,E,4”);

  • Updated the default sketch to include the new command

Backlog for next version(s):

  • find a solution for Excel crashing when moving the window around while logging. Priority: low ; Workaround: don’t move window while logging ; Status: clueless…
  • solve get cell / set cell mix up reported by jl1cny here. Priority: medium; Workaround: use baud rates smaller 25.000; Status: in contact with Sam directly via email to identify issue. Best guess is an issue in Arduino code with Serial.ParseInt not getting values out of buffer correctly
  • implement new feature CLEARDATA. Command CLEARSHEET does not clear labels. Thus CLEARDATA should clear all data starting cell A2 with all columns and all rows, CLEARSHEET should start at cell A1 with all columns and rows (thus including labels in row 1).

Guideline to migrate from old version to new one:

  • if you want to use the new version of PLX DAQ v2 but want to keep all your configured sheets in old Excel version of PLX DAQ try the following steps to copy all sheets, references and formulas easily to the new version:
  • Download new PLX DAQ Excel and open, open your Excel as well.
  • In your old Excel select first sheet (e.g., “Simple Data”), then hold shift key and select last sheet, right click firest sheet and select “Move or Copy”
  • select new PLX DAQ Excel in the dropdown, select “move to end”, select “Create a copy” and press OK.
  • It should copy all sheets to the new version. Might be Excel will rename “Simple Data” to “Simple Data (2)” because it is already in new version of PLX DAQ default workbook but you can easily remove the new sheet and rename yours back to “Simple Data”

Image-Link: http://www.freebie-base.de/Pics/PLX_DAQ_v2.9.png
(hosted on my server, no traffic hijack)

=============================================================
This version is already outdated !! Link to always most recent version of PLX DAQ v2 here:
==> https://forum.arduino.cc/index.php?topic=437398.msg3013761#msg3013761 <==
=============================================================

PLX-DAQ-v2.9.zip (144 KB)

PLX-DAQ-v2-DefaultSketch.ino (2.57 KB)

Possible Workaround to GET/SET Issues for High Baud Rates

I found that the GET, SET, and the new Serial.println(“CELL,GET,FROMSHEET,SheetName,Column,Row”);
commands can work well even at high baud rates if a small delay is added after serial interactions.
The following test code was tested in three computers (two Windows 7 and one Windows 10):

// First you must have NetDevil’s Excel file PLX-DAQ-v2.9.xlsm open and
// PLX-DAQ-v2.9 connected at the appropriate port with the desired baud rate.
// Download it from
// https://forum.arduino.cc/index.php?topic=437398.msg3160058#msg3160058
// Enter a numerical value in cell J3 of sheet Simple Data
// Enter a numerical value in cell F6 of sheet Further sheet
// Code for a second serial port (SoftSerial) has been added so that one serial port can
// be dedicated for output to Excel using NetDevil’s PLX-DAQ-v2.9 and the
// other serial port to the Arduino monitor
// A CP2102 cable does the job well for connecting the Arduino soft serial
// pins to a 2nd computer USB.

//PRELIMINARIES
#include <SoftwareSerial.h> // include the software serial port library

//Soft serial pins
#define rxPin 8 //connect to green wire of CP2102 or to orange wire of FTDI
#define txPin 7 //connect to white wire of CP2102 or to yellow wire of FTDI

// set up a new serial port
SoftwareSerial excelSerial = SoftwareSerial(rxPin, txPin);

unsigned long baudr = 38400; //Do not forget to change the baud rate in PLX-DAQ and in the serial monitor
byte tdelay = 3;

void setup(void) {
// define pin modes for tx, rx:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// set baud rates for both ports
excelSerial.begin(baudr);
delay(tdelay);
Serial.begin(baudr);
delay(tdelay); //A workaround to the GET/SET issues is to put a small delay after serial interaction commands
// testing SET
excelSerial.println(“ClearRange,A,1,F,100”);
delay(tdelay);
float Ans = 42;
Serial.println(Ans);
delay(tdelay);
excelSerial.print(“CELL,SET,D3,”);
delay(tdelay);
excelSerial.println(Ans);
delay(tdelay);
// testing GET
Serial.print(F("Test print is "));
delay(tdelay); // To be safe I have added delays even where they are probably not needed
excelSerial.println(“CELL,GET,J3”);
delay(tdelay);
float NotAns = excelSerial.parseFloat();
delay(tdelay);
Serial.println(NotAns);
delay(tdelay);
// testing GET FROMSHEET (thanks NetDevil)
excelSerial.println(“CELL,GET,FROMSHEET,Further sheet,F,6”);
delay(tdelay);
float AnsAns = excelSerial.parseFloat();
delay(tdelay);
Serial.println(AnsAns);
delay(tdelay);
Serial.println(“DONE”);
}

void loop(void) {;}

//End of code

Update:
Further testing using a Windows 10 computer showed that this workaround is not effective 100% of the time at 115200 baud.
At 115200 baud & tdelay = 3, all printouts were correct about 85% of the time (34/40 trials).
At 115200 baud & tdelay = 10, all printouts were correct about 90% of the time (18/20 trials).
At 38400 baud & tdelay =10, 20 out of 20 trials were completely successful.
At 38400 baud & tdelay =3, 30 out of 30 trials were completely successful.

Previous Caution Removed:
I had previously cautioned that an inexpensive CP2102 cable from China failed to perform. I was incorrect, it was a loose wire.

UPDATED - Further Investigation on the delay GET/SET workaround - UPDATED

I investigated which delays are really needed in the above code using an Adafruit CP2102 cable. My starting point was 38400 baud with 3 msec delays, which had successes in 30 out of 30 previous trials. This time I used a Windows 8.1 computer.

  1. 20 new trials at 38400 baud with all delays active at 3 msec: 20 complete successes

As I had the number 53.90 in “SimpleData”!J3 and 42.42 in “Further sheet”!F6, the correct result is to print on the Arduino monitor:

42.00
Test print is 53.90
42.42
DONE

  1. 20 new trials at 38400 baud with all delays commented out: 0 complete successes

16 out of the 20 answers were:

42.00
Test print is 0.00
53.90
DONE

which pointed out that a delay may be necessary before the CELL,GET command

  1. 20 new trials at 38400 baud activating the delay before the CELL,GET,J3 command: 19 complete successes

The only failure was the first test

  1. 20 trials at 115200 baud with 3 msec delays before the CELL,GET and CELL,GET,FROMSHEET commands: 15 complete successes.

  2. 20 trials at 115200 baud with 10 msec delays before the CELL,GET and CELL,GET,FROMSHEET commands: only 5 complete successes!

The majority of failures printed

42.00
Test print is 53.00
942.42
DONE

  1. 10 trials at 115200 baud with 100 msec delays before the CELL,GET and CELL,GET,FROMSHEET commands: 0 complete successes!

Update: If tdelay is changed from byte to integer
Result: 10/10 complete successes

  1. 20 trials at 57600 baud with 3 msec delays before the CELL,GET and CELL,GET,FROMSHEET commands: 20 complete successes.

  2. 20 trials at 74880 baud with 3 msec delays before the CELL,GET and CELL,GET,FROMSHEET commands: 20 complete successes.

REVISED CONCLUSION
Placing delays before CELL,GET and CELL,GET,FROMSHEET commands seems to be completely effective for rates <= 74880 baud.

Delays of 3 msec were successful for the above test, but larger delays are needed if the Excel cells read from involve lengthy calculations.

I am not sure what is happening at 115200 baud. Perhaps it is an issue of the software serial port. Even though the current documentation states that it works up to 115200 baud, older documentation indicated issues at that rate.

Hi SASv,

thank you very very much for all the effort you put in researching the issue and the posts you've made !! I still owe you an email as well ;)

I will try to reproduce your results over the weekend and try to verify them. Also I might publish a demo sheet for general testing purposes thus everyone can participate. It seems to be coming down to a general Arduino issue and maybe not Excel / PLX DAQ which would be kind of hard to fix other then to use your mentioned delays.

Thanks again and I'll get back to you :)

sir, where should placed this zip code..i am not understand ?? please give steps to use it?

[u]On the delay workaround for the CELL, GET and CELL, GET,FROMSHEET commands for 115200 baud[/u]

As indicated in the earlier post, I started suspecting that the issue at 115200 baud may be related to the software serial port I have been using. The code below has removed it and gave the correct result (in cells J7-J11) in 18 out of 20 trials.

// 1. Open NetDevil's Excel file PLX-DAQ-v2.9.xlsm but do not connect PLX-DAQ
// (https://forum.arduino.cc/index.php?topic=437398.msg3160058#msg3160058)
// Enter a numerical value in cell J3 of sheet Simple Data
// Enter a numerical value in cell F6 of sheet Further sheet
// 2. Setting the port for the Arduino USB (in Tools), upload the sketch
// 3. With the Arduino serial monitor CLOSED connect PLX-DAQ at the same port
// 4. For repeating trials disconnect and reconnect PLX-DAQ

unsigned long baudr = 115200;  //Do not forget to change the baud rate in PLX-DAQ

int tdelay = 100;

void setup(void) {
  Serial.begin(baudr);
  Serial.println("ClearRange,A,1,F,100");
  Serial.println("ClearRange,J,7,J,11");
  delay(tdelay);
  delay(tdelay);
  // 1st test of CELL,SET
  float Ans = 42;
  delay(tdelay);
  Serial.print("CELL,SET,J7,"); 
  Serial.println(Ans);
  delay(tdelay);
  // 2nd test of CELL,SET
  Serial.print("CELL,SET,J8,"); 
  Serial.println(F("Test print is "));
  // Test of CELL,GET
  delay(tdelay);
  Serial.println("CELL,GET,J3");
  float NotAns = Serial.parseFloat();
  delay(tdelay);
  Serial.print("CELL,SET,J9,"); 
  Serial.println(NotAns);
  // Test of GET FROMSHEET (thanks NetDevil)
  delay(tdelay);
  Serial.println("CELL,GET,FROMSHEET,Further sheet,F,6");
  float AnsAns = Serial.parseFloat();
  delay(tdelay);
  Serial.print("CELL,SET,J10,"); 
  Serial.println(AnsAns);
  // Final printout
  delay(tdelay);
  Serial.print("CELL,SET,J11,");
  Serial.println("DONE");
}

void loop(void) {;}

Testing results: delay = 0 : completely correct 0/10 delay =10 : completely correct 19/20 delay = 100: completely correct 18/20

CONCLUSIONS 1. Delays help but do not guarantee success at 115200 2. Failures do not seem to be an issue with the previously used software serial port