Windmill Data Acquisition Software Logo
20 May 2016

Windmill Software
Data Acquisition Intelligence
Call now: +44 (0)161 833 2782

Issue 13: Feeding Laboratory Instrument Data into Excel, VB Programs, etc


Windmill News | Linking to Excel, Access, etc. | DDE Links | VB Corner


We are striving to offer the best possible technical support for our free Windmill software. To this end we have improved our web-based support offerings.

  1. We've created a library of serial instrument setup files at You can download a setup file and send it directly to your instrument: saving time otherwise spent filling in dialogue boxes.
    We hope to expand this library. If your instrument is not yet represented, and you would like to contribute to our library project, please e-mail your *.aid file and details of your instrument to (If your instrument plugs into your computer's COM port and communicates using ASCII messages, you can control it with the free Windmill software and use the library files.)
  2. We've extended our technical support page. When people ask for help we've been adding the questions and answers to
  3. We've added more information to our DDE (dynamic data exchange) Help. Go to and select
    Incidentally, we're interested to hear your comments on the Help files - if you can think of any improvements or anything we've left out please fill in the form on the Help web page.

We hope you find the new and improved pages useful. Don't forget that you can also obtain the full, printed, manuals from our shop.

Finally, if you can't find what you're looking for on the web or in the manual, please fill in our technical support form or telephone us on +44 (0)161 833 2782.


Windmill software reads data from instruments and devices connected to your PC. You could use it, for instance, to monitor and control temperatures. We have a range of drivers for many types of hardware, and our RS232 instrument driver is now free to our newsletter subscribers.

You may want to use the data you get through Windmill in other applications - perhaps to average readings over time or a number of sampling points; to calculate control outputs; or to put data directly into reports and databases. You can either collect data with the Windmill Logger, and after collection has finished import it into your spreadsheet or database. Alternatively you can transfer data as it arrives, using dynamic data exchange. The simplest way to do this is to use the free Windmill DDE Panel to act as a gateway to get and send data values from your application. This works well for Office programs such as Microsoft Excel, Access or Word.

You can also use DDE if you are writing your own application code, in say Visual Basic, C, or another application generator. Alternatively you may wish to use Windmill's IML Toolkit to send and get data values from the hardware directly. Details of the IML Toolkit are at


DDE Links

Using dynamic data exchange to communicate between applications, the Windmill DDE Panel lets you copy and paste live data into Excel, Access or Word. For more sophisticated tasks, you can use macros.

Analysis and control with an Excel spreadsheet
Using Microsoft Excel to handle incoming values from data acquisition instruments is beneficial because of the spreadsheet’s analytical capabilities - for statistical analysis, graphing functions including X-Y plotting, and for calculating control values to send back to the hardware.

To try out data acquisition into Excel

  1. Load Windmill DDE Panel and select the hardware setup (your *.ims file).
  2. Load Excel with a clean sheet, and then select menu item Insert.Macro.Module (Excel 5 and 95) or Tools.Macro.Visual Basic Editor (Excel 97) to get to the VBA editor.
  3. To read data from one channel connected to the Windmill DDE Panel and place it into a cell in the spreadsheet, create the following VBA code.
    Sub DDEread()
     'Read data value from channel "Chan_00" in Windmill DDE
     'Panel and write the result in cell A1
     'Opens a DDE conversation with the Windmill DDE 
     'Panel using the Service Name "Windmill" and the  
     'Topic Name "Data"
    ddeChan = Excel.DDEInitiate("Windmill", "data")
     'Requests data from a channel called Chan00.
    myData = Excel.DDERequest(ddeChan, "Chan_00")
    Cells(1,1).Value = myData
     'Closes the DDE conversation.
    Excel.DDETerminate (ddeChan)
    End Sub
  4. To send data to an analogue or digital output channel, create the following VBA code.
    Sub DDEpoke()
     'Send data in Sheet1.Cell.A1 to channel "Blackb_1" in
     'Windmill DDE Panel
     'Opens a DDE conversation with the Windmill 
     'DDE Panel using the Service Name "Windmill"
     'and the Topic Name "Data"
    ddeChan = Excel.DDEInitiate("Windmill", "data")
     'Now send the data.
     'Note the 3rd parameter MUST be a cell or range of
     'cells which contain the data
    Excel.DDEpoke ddeChan, "Blackb_1", Range("a1")
     'Closes the DDE conversation.
    Excel.DDETerminate (ddeChan)
    End Sub

Issue 16 of Monitor gives details of charting data from Excel.

VB Corner

Over the next few months we're including a "VB Corner". This section will give you hints, tips and code samples for using Windmill applications and data from Visual Basic programs. (You don't need to do any programming to use Windmill, but if you want to create your own Visual Basic applications you will find this section useful.)


Using DDE to get Data from your Instrument into your VB Program

This month we discuss how to get data from your instruments, via the Windmill software and dynamic data exchange, into your VB program for analysis, processing and so on.

Hint: When you're trying out communication between your software and Windmill - use the free Software Signal Generator. This generates data quickly and without the need for additional hardware. The Software Signal Generator (the SIGGEN device) is supplied with all versions of Windmill.

You can download the project and code for this month's VB corner.

We use a label control on the VB form with the following properties:

Name	laDDEmessage
Visible	False 

The subroutines that do the work are as follows.

When the VB application loads, we need to open the DDE conversation with the DDE Panel application. You should open the conversation once, when you load, because repeatedly opening and closing the conversation causes a memory leak which will eventually crash your application

Private Sub Form_Load()
' the  default DDE name for the Windmill DDE Panel is Windmill
laDDEMessage.LinkTopic = "Windmill|Data"
laDDEMessage.LinkMode = 2
End Sub

Here Windmill is the default name given to the Windmill DDE Panel for its DDE conversations. You can change this in the Panel by selecting the DDE item from the File menu.

When the VB application terminates we can tidy up by resetting the LinkMode to close the DDE conversation.

Private Sub Form_Unload(Cancel As Integer)
laDDEMessage.LinkMode = 0

End Sub

The Receiving and Sending of data values is done as follows:

Private Function GetIMLdde(IMLChanName$, ReplyMessage$)
GetIMLdde = False
laDDEMessage.LinkItem = IMLChanName$
On Error GoTo GetIML_Error
GetIMLdde = True
ReplyMessage$ = laDDEMessage.Caption
 Exit Function
 Resume GetIML_Exit
End Function
Private Function SendIMLdde(IMLChanName$, DataMessage$) As Integer
SendIMLdde = False
laDDEMessage.LinkItem = IMLChanName$
laDDEMessage.Caption = DataMessage$
On Error GoTo SendIML_Error
SendIMLdde = True
 Exit Function
 Resume SendIML_Exit
End Function

Note that the routine to get data from an IML input channel uses the .LinkRequest method, while the routine to send a data string to an IML output channel uses the .LinkPoke method.

That's the end of this month's VB Corner. Our other Visual Basic articles are in:

Do you have a comment or suggestion for this newsletter? E-mail the editor - Jill - at

Copyright 1999 Windmill Software Ltd. All rights reserved. This newsletter may be distributed in its entirety. However, individual sections may not be reproduced without the prior written agreement of Windmill Software Ltd.


To receive Monitor every month please fill in your email address below. We will not pass your address to any third parties.

*  Email:
*  Format:

Previous Issue Next Issue