Windmill Software Ltd
Windows Engineering Software

December 2004

The Newsletter for PC-Based Data Acquisition and Control
Issue 77       December 2004
--------------------ISSN 1472-0221----------------------

Welcome to December's Monitor. We wish you a peaceful 
New Year.

Should you wish to cancel your subscription to Monitor 
you can do so at

* Windmill News: Data Acquisition News Available via PHP
* Windmill Notes: Manually Entering Data into a Log File 
* Excel Corner: Time Stamping in Tenths of Seconds

Windmill News: Data Acquisition News Available via PHP

You can now display live news headlines in your web site 
using PHP.  The news is selected by human editors and so 
is guaranteed relevant to the data acquisition, control, 
measurement and instrumentation fields. For how to do 
this see

You can also keep up-to-date by having the news 
delivered by e-mail, view it in news aggregator 
software or show it in a "ticker" on your PC's 
desktop.  Again, details are at 

If you already receive other RSS news feeds you can grab 
ours at

Windmill Notes: Manually Entering Data into a Log File

The Windmill Logger program saves data from sensors and 
instruments in an ASCII file.  It also records the time 
of each reading.  There may be occasions, though, when 
you want to include other data in the file.  For example, 
you might want to make a note of a batch number or 
include somebody's name.  You can do this in Windmill 
using the Blackboard and AnalogOut programs.

AnalogOut is included with every copy of the Windmill 
suite.  Amongst other things, it lets you use the 
computer's keyboard to enter data into the sytem.  You 
also need the Blackboard program to store the data until 
it is picked up by Windmill Logger.  You can think of 
AnalogOut as chalking words and numbers onto the 
Blackboard, where they remain for a pre-specified time.  
During this time Logger can read the information and 
save it alongside the other data it is collecting.

Further Reading
For more on Blackboard and AnalogOut, either see their 
Help files or contact [email protected]  The latest 
versions of the Help files are available from

Excel Corner: Time Stamping in Tenths of Seconds

In Issue 74 of Monitor I explained how to use Excel to 
log data from instruments, and also display the time of 
each data reading.  That method displayed the time to 
the nearest second.  But what if you are logging data 
quicker than once a second?  This month I explain how 
to display the time in fractions of a second.

First of all decide how many columns of logged data 
you are going to need.  In this example I'll assume you 
are logging from one data channel and placing the 
readings in column A.  The time stamp will be placed 
in the next column - column B in my example - and you 
need to format this column to show fractions of a

Formatting the Time Stamp Column
1. Select the entire column by clicking on its letter.
2. From the Format menu choose Cells.
3. Select the Custom Number category.
4. Into the Type: box, enter hh:mm:ss.0 for tenths of 
   seconds or hh:mm:ss.00 for hundredths of seconds. 
   If you would also like the date inserted, type 
   instead dd/mm/yy hh:mm:ss.0

Getting the Time
You now need to insert this formula into an unused cell:

For example, into cell C1.

You are now ready to create the macro to collect data. 
Copy the code below, but edit this line so it references 
the cell containing the NOW formula.
Cells(NoOfRows, Column).Value = Range("C1")


'Start of Macro

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub SampleData()

'If NoOfRows = 1, the first data value
'will be placed in row 1.
NoOfRows = 1

'Ask for number of sets of samples to be collected.
NoOfSamples = Val(InputBox("Please enter no of samples to collect", "No of Samples"))

'Ask for the time to wait between taking each set of samples
SamplePeriod = InputBox("Please enter sample interval in seconds", "Sample Interval")

' Convert to milliseconds - needed for sleep statement below.
SamplePeriod = SamplePeriod * 1000

'Initiates conversation with Windmill DDE Panel
ddeChan = DDEInitiate("Windmill", "Data")

'Keeps conversation open until the required
'number of samples have been collected.
While NoOfRows < NoOfSamples + 1

'Requests data from all channels and stores it in
'memory in an array called mydata.
mydata = DDERequest(ddeChan, "AllChannels")

'Ignores any warning messages which would halt the macro
On Error Resume Next

'Finds the lower & upper boundaries of array,
'to determine the number of columns needed to
'store the data.
Lower = LBound(mydata, 1)
Upper = UBound(mydata, 1)

'Inserts data from the array into a row of cells.
For Column = Lower To Upper
Sheets("Sheet1").Cells(NoOfRows, Column).Value = mydata(Column)
Next Column

'Inserts the time into the next column
Column = Upper + 1
Sheets("Sheet1").Cells(NoOfRows, Column).Value = Range("C1")

'Waits for the specified sample interval
Sleep SamplePeriod

'Increments number of rows, so next set of samples
'is inserted in the next row down.
NoOfRows = NoOfRows + 1

'Stops loop when required sets of samples collected.
DDETerminate (ddeChan)
End Sub

'End of Macro


Further Reading
For more on using Excel with Windmill see

* Copyright Windmill Software Ltd
* Reprinting permitted with this notice included
* For more articles see

We are happy for you to copy and distribute this 
newsletter, and use extracts from it on your own web site 
or publication, providing the above notice is 
included and a link back to our website is in place.

An archive of previous issues is at
and an index of articles at

Windmill Software Ltd, PO Box 58, North District Office,
Manchester, M8 8QR, UK
Telephone: +44 (0)161 833 2782
Facsimile: +44 (0)161 833 2190
E-mail: [email protected]


To receive Monitor every month please fill in your e-mail address below. We will not pass your address to any third parties, nor send you any unsolicited e-mail.


Previous Issue Next Issue