PLX-DAQ v2

Beginners Guide to PLX DAQ v2 by Net^Devil

(Revision 1)

Table of content

1. 關於該程式及其使用

2. 如何使用

3. Excel UI 部件

4. The Arduino part - overview

5. The Arduino part - Basic setup and communication

6. The Arduino part - specific communication and manipulation

7. The Arduino part - Excel workbook commands

8. The Arduino part - Miscellaneous commands

9. Doing your own stuff

10. Upgrading PLX DAQ v2 Excel versions

11. Full blown demo

1. About the program and its use

PLX DAQ v2 用來建立安裝Windows作業系統下的Excel 和任何設備之間的簡單的通信, 支援序列埠協定。它是為了允許 Arduino 和 Excel 之間的通信而特意編寫的。

例如, 您可以用您的 Arduino 測量溫度資料, 每10秒將結果發送到 Excel, 在一張紙上列印資料並繪製一個帶有所有資訊的圖形。所有的溝通將由Serial.println 命令就像您在 Arduino IDE 串列監視器中從 Arduino 發送到監視器時所使用的命令一樣。

Arduino 送出的指令格式如下:

void loop() {

Serial.println( (String) "DATA,DATE,TIME," + millis() );

delay(100);

}

在 Excel 中類似于以下內容:

2. 如何使用

該程式使用兩個部分工作: 特殊的微軟 Excel 試算表與 PLX DAQ v2 使用者介面和命令加上任何 Arduino 設備, 發送特殊的通信命令。最新的 Excel 試算表可以在 Arduino 論壇上下載 (Link: HTTP://forum.arduino.cc/index.php?topic=437398.msg3013761#msg3013761 ; 請始終下載最新版本! Arduino 代碼可以由每個人編寫自己與以下指南。

3. The Excel UI part

After opening the Excel Spreadsheet please allow running the macro (yellow warning message at the top). Afterwards you can see the PLX DAQ v2 UI. In case not please click the button “Open PLX DAQ UI” on the “Simple Data” sheet.

The UI offers the following options:

a. Port: 請指定Arduino分配到的埠號

b. Baud: 請指定你在code中所使用的Baud rate (e.g.,若你在void setup() 函式中使用 Serial.begin(9600); 就使用9600)

c. Connect: 連接到你的Arduino 並開始記錄

d. Pause logging/resume logging: 暫停紀錄資料

e. Reset Timer: 將使計時器歸零. 計時器是用來計時開始記錄以後的持續時間

f. Clear Columns: 將清空excel資料,但不會清除第一列的標籤

g. Display/Hide direct debug: 將顯示/隱藏傳送來的資料. The Direct Debug Window可以直接在視窗內除錯

h. Sheet name to post to: this will list all sheets in the Excel workbook. Whatever sheet you select in the dropdown the logged data will be posted to it. This sheet will be referred to as the “ActiveSheet” throughout this document.

Note: after adding / deleting sheets please press the small “Load” button on the left side of the dropdown box for the sheet list to be updated

i. Controller Messages: in the field below the most recent commands and status information will be shown. Most likely the information is changing way too fast for you to read, thus use the Direct Debug Window J

j. Reset on Connect: the checkbox should be ticked at all time. If ticket the first command from Excel to Arduino will be to restart, thus your code starts from the beginning as well. This way you can have a fresh session. If you want to connect to your Arduino without restarting it just untick the box

k. Custom Checkbox 1/2/3: these can be used to control your Arduino during run in any way you want. There are commands to label the Checkboxes by your Arduino and to query the state of the boxes. You could for example label one box “Measure humidity as well?” and check on demand in Excel if you want your Arduino to measure humidity with a second sensor next to only measure e.g., temperature. There are special commands Arduino can use to query the status of the checkboxes. More detail on these can be found below.

l. Log incoming data? checkbox: information received from Arduino will be displayed in the direct debug window. Hint: disable if you experience performance issues

m. Log outgoing data? checkbox: information send to your Arduino will be displayed in the direct debug window. Hint: disable if you experience performance issues

n. Log system messages? checkbox: information from Excel will be display in the direct debug window (e.g., errors) . Hint: disable if you experience performance issues

o. Add timestamp? checkbox: will add a timestamp to every information logged in the direct debug window. This is handy for debugging.

p. =>: will increase the size of the direct debug window to a certain maximum

q. <=: will decrease the size of the direct debug window to a certain minimum

r. Clear: will clear all information in the direct debug window

4. The Arduino part - overview

要使 PLX DAQ v2正確工作,Arduino必須送出正確的資料格式. 所有的指令必須使用Arduino內建的 Serial.println 指令. 指令中必須包含 「參數」, 「變數」 和「功能指令」 . 參數與參數間須以「,」隔開. 可以把它寫成如下形式:

Serial.println( (String) "DATA,DATE,TIME," + millis() );

These commands can be split up into different categories:

a. Basic setup and communication:

這裡的指令用來格式化儲存格並傳送資料到儲存格內

b. Specific communication and manipulation:

這裡的指令用來行使進階指令,跳到某一個儲存格或間格某幾個儲存格,並使用合取方塊來

Commands here are used to work with further parameters, jump on or between sheets, and using checkboxes for “communication” to your Arduino

c. Excel workbook commands:

Commands here are used to control the logging process or even saving workbooks in window

d. Miscellaneous commands:

Everything that is not really crucial or does not have any benefit (anymore)

5. The Arduino part - Basic setup and communication

a. CLEARSHEET:

This command clears all data the ActiveSheet (including labels!). It should be the first command on every sketch.

Syntax: Serial.println(“CLEARSHEET”);

b. CLEARDATA:

This commands clears only logged data on the ActiveSheet (starting at row 2)

Syntax: Serial.println(“CLEARDATA”);

c. LABEL:

With this command you can set the labels for the top most row of the ActiveSheet

Syntax: Serial.println(“LABEL,1st Column,2nd Column,Third one!”);

d. DATA:

This is the most basic and crucial command of PLX DAQ v2. It is used to send data from your Arduino to Excel and have it printed on the ActiveSheet. You can send anything you want but you should make sure you split the data up by commas and match the number of columns you defined with the LABEL command.

The reserved code words DATE, TIME and TIMER will be recognized by PLX DAQ and will be replaced with values.

DATE will be switched to the current Windows computer’s date (e.g., 12.03.2017)

TIME will be switched to the current Windows computer’s time (e.g., 18:17:42)

TIMER will be switched to the time the logging is already active (e.g., 1,365 seconds)

You can add the keyword AUTOSCROLL_20 to your string. This information will make PLX DAQ to automatically scroll your Excel window down with every new line of data that is received. The number (e.g., 20) indicates how many lines should be shown above the latest line that is scrolled to automatically.

i. Syntax 1 – this can be used to make you code more readable but works for static info only:

Serial.println("DATA,DATE,TIME”);

ii. Syntax 2 – this can be used to include function calls or variables in the same line:

Serial.println( (String) "DATA,DATE,TIME," + millis() );

iii. Syntax 3 – this is a way to present the code with rather more lines but with a better readability if you use many variables in one line. Please note that only the print command is used and println is only used at the end to send the fully build up string:

Serial.print("DATA,DATE,TIME,”);

Serial.print(myVariableA);

Serial.print(",”);

Serial.print(millis());

Serial.print(",”);

Serial.println(myVariableB);

6. The Arduino part - specific communication and manipulation

a. CELL,SET

By this command you can set the value of any cell in the Excel workbook with any value you want. This can either be done on the ActiveSheet or on any other sheet.

Syntax to set a value on the ActiveSheet:

Serial.println("CELL,SET,C9,MyValue”);

Syntax to set a value on a named sheet somewhere in the workbook:

Serial.println("CELL,SET, ONSHEET,AnySheet,C,9,MyValue”);

PLEASE NOTE !! è there might occur problems at higher baud rates with the CELL,SET command. It might happen that values are not transferred correctly – instead “0” might be transmitted. In these cases please either decrease your baud rate or insert small delay before to your CELL,SET command (e.g., delay(3);). Typically values between 3 and 100 should do the trick. In case you make excessive use of CELL,SET or CELL,GET please increase the delay value even further in case you continue receiving wrong values.

b. CELL,GET

With this command values from the Excel sheet (either ActiveSheet or named sheet) can be queried and read by Arduino. For example you could put a value for the delay duration in cell J9, query it every loop iteration and control how long your Arduino should pause between each loop. The value in J9 can be changed by you during runtime at any time.

Please note: you need to read the value on your Arduino. This can be done by Integer or String. You should take care to only send integers when you are reading integers and vice versa.

Use Serial.readStringUntil(10);

or Serial.readStringUntil(10).toInt();

or Serial.readStringUntil(10).toFloat();

The number 10 is important as ASCII char 10 represents the end of a line to read.

With the following command you could read the value in J9 for the example above:

void loop() {

int myDelayValue;

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

myDelayValue = Serial.readStringUntil(10).toInt();

Serial.println( (String) "Read value is: " + myDelayValue);

delay(myDelayValue);

}

To read a value from any other named sheet please use the following syntax:

Serial.println("CELL,GET,FROMHEET,AnySheet,C,9”);

PLEASE NOTE !! è there might occur problems at higher baud rates with the CELL,GET command. It might happen that values are not transferred correctly – instead “0” might be transmitted. In these cases please either decrease your baud rate or insert small delay before to your CELL,GET command (e.g., delay(3);). Typically values between 3 and 100 should do the trick. In case you make excessive use of CELL,SET or CELL,GET please increase the delay value even further in case you continue receiving wrong values.

c. ROW

You can set the row on which data should be logged to manually. Thus after e.g., having logged 20 data sets you can reset the row counter to “2” and start from the beginning again. Or you can read the row that is currently logged to (please note you need Serial.readStringUntil(10).toInt() command afterwards in Arduino)

Syntax:

Serial.println("ROW,SET,2”);

Syntax:

Serial.println("ROW,GET”);

myRow = Serial.readStringUntil(10).toInt();

d. CUSTOMBOX1 / CUSTOMBOX2 / CUSTOMBOX3

You can set a label to the checkboxes on the PLX DAQ UI, set the values to the checkboxes (ticked or not ticked) and read the value of the checkboxes (into bool).

Syntax for example:

Serial.println("CUSTOMBOX1,LABEL,Measure humidity as well?”);

Serial.println(“CUSTOMBOX1,GET”);

myBoolValue = Serial.readStringUntil(10).toInt();

e. CLEARRANGE

Other than Cleardata or Clearsheet this command will only clear a certain range on the ActiveSheet. Data will be deleted in a rectangle from top left to bottom right.

Syntax: Serial.println(“CLEARRANGE,B,10,D,20”);

f. RESETTIMER

It will reset the timer that is used to count the time PLX DAQ is already logging

Syntax: Serial.println(“RESETTIMER”);

7. The Arduino part - Excel workbook commands

a. PAUSELOGGING / RESUMELOGGING / STOPLOGGING

Basically these commands explain themselves. Use to pause PLX DAQ to post logged data to the sheet. Of course PLX DAQ will still listen to incoming commands (to recognize RESUMELOGGING after PAUSELOGGING) but it won’t be printed to ActiveSheet. In case you want to see what information is received use the Direct Debug Window. STOPLOGGING will completely stop the logging process. No more data can be received afterwards! You have to restart the logging process manually by clicking the connect button!

Syntax: Serial.println(“PAUSELOGGING”);

b. SAVEWORKBOOK

Will just save the workbook by its current name. This is useful if you are logging for a long time and want to save your data every now and then.

Syntax: Serial.println(“SAVEWORKBOOK”);

c. SAVEWORKBOOKAS

Will save the workbook by any given name. The new workbook will be saved in the same folder as the currently open workbook (except if you include subfolders in the name to be saved).

Syntax: Serial.println(“SAVEWORKBOOKAS,MyNewWorkbookName”);

Syntax: Serial.println(“SAVEWORKBOOKAS,Subfolder\Workbookname”);

d. FORCEEXCELQUIT

This is a heavy command! It will force quit Excel.

!! PLEASE NOTE TO SAVE YOUR WORKBOOK FIRST !!

Syntax: Serial.println(“FORCEEXCELQUIT”);

8. The Arduino part - Miscellaneous commands

a. BEEP

Will simply make a beep noise in Excel. Good if you want to be notified by your Arduino e.g., after a certain threshold is past on a value you measure (room temperature or other)

Syntax: Serial.println(“BEEP”);

b. MSG

Can be used to put a string on the Controller Message label on the PLX DAQ UI

Syntax: Serial.println(“MSG,Put your text here”);

c. DONE

Will flush the Serial port on Excel side. Can be used to send data which might be in the buffer on Excel

Syntax: Serial.println(“DONE”);

d. GETRANDOM

Will return a random number from Excel to Arduino. This is useful because Arduino can’t create true random numbers. Arduino’s random function requires prior initialization by randomSeed(value). If value is not unique (e.g., user input) the number sequence return by Arduino’s random will always be the same. To get a unique value for randomSeed’s value you can therefore query Excel.

Syntax:

Serial.println("GETRANDOM,-31313,32323");

int rndseed = Serial.readStringUntil(10).toInt();

randomSeed(rndseed);

Serial.println( (String) “1st number: “ + random(0, 50));

Serial.println( (String) “2nd number: “ + random(0, 50));

Serial.println( (String) “3rd number: “ + random(0, 50));

9. Doing your own stuff

Each and every one – including you (!!) – is allowed and should and can see the full source code of PLX DAQ v2, read it, learn from it and adjust it in any way you want or need. The source code can be viewed by pressing Alt+F11 in Excel. I deeply hope I managed to write the code as clear as possible. Generally, all you need to know is that in the sub “DataReady” you can add new commands. Simply copy & paste an old one, give it your name and go for it!

You could also use the CustomDevPoints that I included in the code. These functions are called at different times during the run. E.g., every time a new line is read from PLX DAQ (thus after each Serial.println();), after a new line with DATA is read (thus after each Serial.println(“DATA,……”);) or after this data is added to the sheet.

10. Upgrading PLX DAQ v2 Excel versions

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.

PLEASE NOTE !! è it is NOT possible to copy the sheet “Simple Data” from the old version to the new version. Excel would automatically copy the old version of PLX DAQ as well ….

a. Download new PLX DAQ Excel and open, open your Excel as well.

b. In your old Excel select first sheet, then hold shift key and select last sheet, right click first sheet and select "Move or Copy"

c. Select new PLX DAQ Excel in the dropdown, select "move to end", select "Create a copy" and press OK.

d. It should copy all selected sheets to the new version.

11. Full blown demo

Last but not least here is a fully working demo sketch that is using most of the above mentioned commands and should give you a fair overview on how to program your Arduino to communicate with Excel using PLX DAQ v2.

Enjoy !!

And thanks for reading and sharing.

Greetings

Jonathan Arndt (aka Net^Devil)

/*

* Demo sketch for new "PLX DAQ v2"

* including most all common commands to be used

*/

int i = 0;

void setup() {

// open serial connection

Serial.begin(9600);

//Serial.println("CLEARDATA"); // clears starting at row 2

Serial.println("CLEARSHEET"); // clears starting at row 1

// define 5 columns named "Date", "Time", "Timer", "Counter" and "millis"

Serial.println("LABEL,Date,Time,Timer,Counter,millis");

// set the names for the 3 checkboxes

Serial.println("CUSTOMBOX1,LABEL,Stop logging at 250?");

Serial.println("CUSTOMBOX2,LABEL,Resume log at 350?");

Serial.println("CUSTOMBOX3,LABEL,Quit at 450?");

// check 2 of the 3 checkboxes (first two to true, third to false)

Serial.println("CUSTOMBOX1,SET,1");

Serial.println("CUSTOMBOX2,SET,1");

Serial.println("CUSTOMBOX3,SET,0");

}

void loop() {

// simple print out of number and millis

// output "DATA,DATE,TIME,TIMER,4711,13374,AUTOSCROLL_20"

Serial.println( (String) “DATA,DATE,TIME,TIMER,” + i++ + “,” +

millis() + “,AUTOSCROLL_20”);

// clear some cells in Excel (rectangle range from B10 to D20)

if(i==100)

Serial.println("ClearRange,B,10,D,20");

// do a simple beep in Excel on PC

if(i==150)

Serial.println("BEEP");

// read a value (in this case integer) from a sheet by name

if(i==200)

//Serial.println("CELL,GET,E4"); ==> active sheet in Excel

Serial.println("CELL,GET,FROMSHEET,Simple Data,E,4"); //named sheet

int readvalue = Serial.readStringUntil(10).toInt();

// result displayed in Excel DirectDebugWindow to double check

Serial.println( (String) "Value of cell E4 is: “ + readvalue);

}

// check value of custombox1 on PLX DAQ in Excel and if

// checkbox is checked then send the command to pause logging

if(i==250)

{

Serial.println("CUSTOMBOX1,GET");

int stoplogging = Serial.readStringUntil(10).toInt();

// this information can be seen in the

// direct debug window on PLX DAQ in Excel

Serial.print("Value of stoplogging/checkbox is: ");

Serial.println(stoplogging);

if(stoplogging) {

Serial.println("PAUSELOGGING");

}

}

// get a true random number from the computer

if(i==300)

{

Serial.println("GETRANDOM,-4321,12345"); // between -4321 to 12345

int rndseed = Serial.readStringUntil(10).toInt();

Serial.println( (String) "Got random value '" + rndseed + "'" );

// Note: this information is not posted to Excel: "DATA" is missing

// instead this information can be seen in the direct debug window

}

// and now resume logging

if(i==350)

{

Serial.println("CUSTOMBOX2,GET");

int resumelogging = Serial.readStringUntil(10).toInt();

if(resumelogging) {

Serial.println("RESUMELOGGING");

}

}

// post to specific cells on defaul sheet and named sheet

if(i==400)

{

// default sheet active in PLX DAQ Excel

Serial.println("CELL,SET,G10,400 test 1 string");

// named sheet available in PLX DAQ Excel

Serial.println("CELL,SET,ONSHEET,Simple Data,G,11,400 test 2”);

}

// and for forced quit of Excel with saving the file first

if(i==450)

{

Serial.println("CUSTOMBOX3,GET");

if(Serial.readStringUntil(10).toInt()) {

Serial.println("SAVEWORKBOOKAS,450-Lines-File");

Serial.println("FORCEEXCELQUIT");

}

else

Serial.println("No forced Excel quit requested!");

}

}