Windmill Software Ltd
Windows Engineering Software

September 2004

The Newsletter for PC-Based Data Acquisition and Control
Issue 74      September 2004
--------------------ISSN 1472-0221----------------------

Welcome to September's edition of Monitor.  We hope you 
enjoy this issue, but should you wish to cancel your 
subscription you can do so at

* Windmill News: Live Instrumentation News Summaries
* Interfacing Instruments with RS232 Ports: 
  Handshaking Explained
* Excel Corner: Adding a Time Stamp to Logged Data

Windmill News: Live Instrumentation News Summaries

If you have put our live news headlines on data 
acquisition and control onto your web site, then 
thank you. We hope you are pleased with the results. We 
welcome any suggestions on the news feed: e-mail 
[email protected]

You can now also add short summaries of the news to your 
web pages. To do this edit the javascript code given at, 
and change feed_compact=1 to feed_compact=0

The news feed regularly updates on your page - giving 
your visitors the latest news in one place.  The news 
changes daily and is completely free.  It is selected 
by human editors, not by a computer program, and so is 
guaranteed relevant to the data acquisition, control, 
measurement and instrumentation fields.

For full details of incorporating live news into your 
web site see

Interfacing Instruments with RS232 Ports: 
Handshaking Explained

Windmill software lets you connect RS232 instruments to 
your computer.  As a subscriber to this newsletter you 
can download Version 4.3 of the software for free.  
Alternatively, if you would prefer the up-to-date 
release (called COMIML 6), you can buy this from

The RS232 protocol includes handshaking.  Although this 
is often not necessary, it has two functions.
1. It allows the computer to stop your instrument from 
   sending data when the PC is not ready for it. 
2. It allows your instrument to prevent the PC from 
   sending data when the instrument not ready for it. 

The fact that your instrument comes equipped with inputs 
and outputs that can be used for handshaking is no 
guarantee that handshaking is needed.  Unless you know 
differently, when connecting the instrument to the PC it 
is best to start with the assumption that handshaking is 
not required.

If you start with no handshaking what symptoms might 
indicate that it really is needed?.  Well one possibility 
is that the computer misses part of a message because its 
input buffer overflows.  With Windmill's COMIML software 
the buffers are 3000 bytes long so you are unlikely to be 
bothered by this problem. The other possibility is that 
the instrument misses part of a message sent by the 
computer. This will probably cause the instrument not to 
work properly.

There are two types of handshaking: hardware and 

Software Handshaking
Xon \ Xoff Handshaking is a software protocol that is 
often used to control data flow.  Suppose that the 
computer were sending data to an instrument which could 
accept no more data for the time being - the instrument 
would send the single Xoff character to the computer 
which would stop sending data until it received an Xon 
character to restart transmission. The same arrangements 
would apply for the reverse direction of data flow. 

Xon is ASCII character 17 and Xoff ASCII character 19.

Hardware Handshaking
Handware handshaking is not often used, so you can tie
any potential handshake lines to fixed voltages so that 
they do not affect operation. In fact many manufacturers 
add tying resistors to handshake lines so that if you do 
not want to use them you simply make no connection.

If you do decide that handshaking must be used then you 
need to know which lines your communications software 
(such as COMIML) and your instrument use. COMIML, for 
example, uses the DTR (Data Terminal Ready) line to 
indicate when it is able to receive data.  Other 
programs may use the RTS (request to Send) line.  The 
instrument will probably use the CTS (Clear To Send) 
line to indicate when it is ready to receive data.  Once 
you select hardware handshaking in COMIML, the state of 
the CTS input to the computer becomes important. When 
hardware handshake is not selected the CTS line state is 
ignored.  COMIML keeps the DTR output permanently high. 

Further Reading
The COMIML serial driver
Serial Ports and RS232 Communications	

Excel Corner: Adding a Time Stamp to Logged Data

When the Windmill Logger program saves data, it "stamps" 
each reading with the time and date that it was 
collected.  You can also do this in Excel, by means of a 
macro and the Windmill DDE Panel.

The macro below repeatedly samples data from all the 
instruments' channels and stores the data in Sheet1. It 
then inserts the timestamp at the end of the row.  When 
the macro runs you are asked how many times to sample 
all the channels, and the interval between taking sets 
of samples.  Make sure that Windmill DDE Panel is 
running and displaying data before running the 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 and sample interval.
NoOfSamples = Val(InputBox("Please enter no of samples to collect", "No 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 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 in Sheet 1.
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 = Now

'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


Notes: This macro is a modified version of one given at  If you are already 
using this then just insert these lines of code at the 
relevant place.

'Inserts the time into the next column
Column = Upper + 1
Cells(NoOfRows, Column).Value = Now

Further Reading
More on using Excel for data acquisition...
For more on data logging with Windmill Logger...

* 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.

Monitor Archive


Subscribe to Monitor
for more articles and tutorials


*  Email:
*  Format:
    First Name:
    Last Name:
*  Enter the security code shown:

Previous Issue Next Issue