Developing a Wonderware InTouch HMI for PLC I/O Data Exchange
Wonderware InTouch (now part of the AVEVA portfolio) remains one of the most widely deployed HMI visualization platforms in process and manufacturing automation. This reference walks through the complete engineering workflow for developing an InTouch application that reads, displays, and writes I/O data from a programmable logic controller (PLC) — covering the I/O server architecture, Access Name configuration, tag dictionary, animation binding, and runtime verification. The procedures are platform-agnostic for the InTouch side, with concrete driver-selection guidance for Siemens S7-300/400 (S7-315-2DP on MPI) and Allen-Bradley SLC 500 platforms.
1. HMI Development Overview
InTouch is a tag-centric HMI. Every animated object, alarm, script, and historical trend references a tagname defined in the InTouch tag dictionary. Tags derive their values from a live data source — the PLC — through an intermediate I/O server. Three architectural elements must be in place before a single screen can be drawn:
- A working InTouch development environment (WindowMaker) installed and licensed on the engineering workstation.
- A compatible I/O server installed and configured to talk to the target PLC protocol.
- A physical or logical path between the I/O server and the PLC (MPI / Profibus / Serial / Ethernet).
The flow of data is unidirectional from the PLC's perspective: the I/O server polls the controller, InTouch subscribes to the I/O server, and operators interact through InTouch graphics that write back through the same chain when changes are made (operator setpoints, motor start commands, etc.).
2. InTouch / I/O Server / PLC Architecture
| Tier | Component | Role |
|---|---|---|
| Presentation | InTouch WindowViewer | Runs the runtime HMI; subscribes to tag values from the I/O server; dispatches operator writes. |
| Logic / Buffering | I/O Server (DDE, OPC, SuiteLink, DAServer) | Holds the live image of PLC memory; translates tag requests into PLC protocol frames. |
| Control | PLC CPU (S7-315-2DP, SLC 500/3, etc.) | Executes the user program; exposes process I/O, flags, and data blocks over MPI, Profibus, Ethernet/IP, or DH+. |
| Process | Field I/O modules | Digital and analog termination to sensors and actuators. |
The I/O server is the translation layer. InTouch has no native MPI, Profibus, or EtherNet/IP stack — it relies on a server-side protocol implementation. Selecting the right server is therefore the most consequential decision in the project.
3. Communication Protocols: DDE, OPC, and SuiteLink
Three data-exchange mechanisms appear in the InTouch ecosystem. Each describes a different interface contract between InTouch and the I/O server, not between InTouch and the PLC.
| Protocol | Full Name | Origin | Use in InTouch |
|---|---|---|---|
| DDE | Dynamic Data Exchange | Microsoft Windows legacy | Text-based, slow, deprecated for new projects. Still found in V7.11 era tag dictionaries. |
| OPC (DA) | OLE for Process Control — Data Access | Industrial automation standard | Primary mechanism for talking to OPC-compliant servers (KEPServerEX, RSLinx OPC, SimaticNet OPC). |
| SuiteLink | Wonderware SuiteLink | Wonderware proprietary, TCP-based | Native, high-throughput, time-stamped protocol used with Wonderware DAServers and ArchestrA. |
DDE is short for Dynamic Data Exchange, OPC is short for OLE for Process Control, and OLE itself is Object Linking and Embedding — all Windows-COM-era mechanisms for process data exchange. InTouch, AVEVA Edge, and legacy InTouch Access are DDE/OPC compliant by design.
For new Siemens S7 deployments, prefer the SimaticNet OPC server or a third-party OPC server such as KEPServerEX. For Allen-Bradley, RSLinx Classic exposes both OPC DA and a native DDE interface that InTouch can read directly.
4. Prerequisites
4.1 Hardware
- Engineering workstation with Windows 7 SP1 / Windows Server 2008 R2 or later (InTouch V7.11 is the legacy build referenced in many training labs; InTouch 2014 / 2017 / 2020 are the supported current branches under AVEVA).
- CP 5611, CP 5613, CP 5621, or compatible MPI/Profibus communications processor for direct MPI attachment to a Siemens S7-300 CPU.
- For Ethernet-attached S7: standard NIC plus SimaticNet Softnet or a CP 343-1 Lean/Advanced module on the PLC side.
- For Allen-Bradley SLC 500/3: 1747-UIC USB-to-DH485 converter, 1747-PCMK module, or a 1761-NET-ENI for EtherNet/IP bridging.
4.2 Software
- Wonderware InTouch V7.11 (or current AVEVA InTouch HMI) with a development license — WindowMaker is the editor, WindowViewer is the runtime.
- I/O server software — selected per Section 5.
- Siemens STEP 7 V5.5 or TIA Portal for S7 program access (read-only access to the symbol table is sufficient for tag address lookup).
- Allen-Bradley RSLogix 500 for SLC 500 program access and tag address verification.
4.3 PLC Configuration
Confirm the PLC is online, the MPI / Profibus / DH+ network is terminated and biased correctly, and that the data blocks / files you intend to read are not optimized. For S7, the data block attribute Optimized Block Access must be unchecked for absolute addressing from an external OPC server.
5. Selecting the Correct I/O Server / Driver
For a Siemens S7-300 CPU on MPI, the practical driver choices are:
| Driver | Source | Interface to PLC | Interface to InTouch |
|---|---|---|---|
| SimaticNet OPC Server (S7-OPC) | Siemens | MPI, Profibus, or Industrial Ethernet via Softnet / Hardnet | OPC DA 2.0 / 3.0 |
| S7-TagCreator | Siemens / Wonderware bundle | MPI / Profibus | SuiteLink / DDE |
| Profibus FMS | Siemens | Profibus FMS (legacy) | DDE |
| SimaticNet (Industrial Ethernet) | Siemens | TCP/IP to CP 343-1 / CP 443-1 | OPC DA |
| KEPServerEX (Siemens TCP/IP Ethernet) | Kepware | ISO-on-TCP (RFC 1006) / S7Comm to port 102 | OPC DA, SuiteLink via wrapper |
For a Siemens MPI network without a TCP/IP infrastructure, the SimaticNet OPC Server configured against an installed CP 5611 / CP 5621 is the most direct path. The S7-TagCreator on the Wonderware I/O Servers disc is an older, SuiteLink-native option that works with a CP 5611 but is no longer maintained.
For an Allen-Bradley SLC 500/3 on DH-485 or DH+:
| Driver | Source | Interface to PLC | Interface to InTouch |
|---|---|---|---|
| RSLinx Classic (DDE/OPC) | Rockwell Automation | DH-485, DH+, ControlNet, EtherNet/IP | OPC DA, native DDE (DTL / topic) |
| AB_DF1 | Wonderware / third party | DF1 serial to SLC 500 CH0 | DDE / SuiteLink |
| KEPServerEX (Allen-Bradley SLC 500) | Kepware | EtherNet/IP, DF1, DH+ via gateway | OPC DA |
6. Configuring the I/O Server (SimaticNet Example)
- Launch SimaticNet Configuration Console. Right-click Modules → PC Station and confirm the local PC station name matches the Windows hostname.
- Add a CP 5611 / CP 5621 module to the PC station. Set the MPI address to a unique value on the bus (commonly 0 or 1 for the engineering station, never matching the CPU default of 2).
- Add an S7-OPC Server entry. Bind it to the CP 5611 module and assign an MPI address equal to the target CPU (e.g., 2).
- Right-click the S7-OPC entry → OPC Scout to verify a tag read/write against the live PLC. A successful test read confirms the protocol stack is alive before any InTouch configuration begins.
- Note the ProgID of the server (typically
OPC.SimaticNet) — InTouch needs this exact string when configuring the Access Name.
7. Configuring the Access Name in InTouch
The Access Name in InTouch is the binding between an InTouch tag and a specific I/O server topic. It has four fields that the engineer must populate:
| Field | Meaning | Example |
|---|---|---|
| Access Name | Free-form label; referenced by tags. | S7_315_LAB |
| Node Name | Hostname or IP of the I/O server. Leave blank when the I/O server is local. |
ENGSVR01 or (blank)
|
| Application Name | Name of the I/O server program — DDE service name, OPC ProgID, or SuiteLink server name. | OPC.SimaticNet |
| Topic Name | Matches a configured topic in the I/O server; one topic per PLC or per polling class. | S7_315_CPU2 |
One I/O server can host multiple topics. Create separate topics when you want different update rates — for example, a 5-second topic for setpoint fields and operator-entered values, and a 1-second topic for high-speed interlocks and motor start/stop pushbuttons. Keeping a low update rate on non-critical tags dramatically reduces bus traffic on MPI.
Procedure in WindowMaker:
- From the menu bar, choose Special → Access Names.
- Click Add. Enter the four fields from the table above.
- For an OPC server, the Application Name must match the ProgID exactly. Common values:
- Siemens SimaticNet:
OPC.SimaticNet - Rockwell RSLinx OPC:
RSLinx OPC Server - KEPServerEX:
Kepware.KEPServerEX.V6
- Siemens SimaticNet:
- Click OK. The Access Name now appears in the tag dictionary dropdown selector.
8. Building the Tag Dictionary
Create tags before drawing graphics — animations reference tags directly, and using placeholder names forces a global find-and-replace later. The recommended discipline is to build the full tag list first, then build screens.
8.1 Tag Types
| Type | PLC Source | Example |
|---|---|---|
| Discrete (I/O) | S7 input bit / output bit; SLC input file bit |
I0.0 (S7), I:1/0 (SLC) |
| Integer | S7 MW / DBW; SLC N file integer |
MW10, DB1.DBW0, N7:0
|
| Real (Float) | S7 MD / DBD; SLC F file float |
MD20, DB1.DBD4, F8:0
|
| Analog Input / Output | S7 PIW / PQW; SLC analog word files |
PIW256, PQW272
|
| Message | Operator-entered text or alarm string | Memory Message |
8.2 Tag Definition Example
To expose a Siemens S7-300 analog input (PIW 256, the first analog input slot) to InTouch via SimaticNet OPC:
- Open Special → Tagname Dictionary and click New.
- Tag:
Tank1_Level_PV - Type: IO Real
- Access Name:
S7_315_LAB - Item:
S7:[S7_315_CPU2]PIW256,REAL— the bracketed string is the topic name, the address is the S7 absolute address, andREALrequests a 32-bit float. - Min/Max: 0 / 100 (engineering units of percent).
For an Allen-Bradley SLC 500 integer file N7:0 via RSLinx OPC:
- Tag:
Conveyor_Running_Seconds - Type: IO Integer
- Access Name:
SLC500_LAB - Item:
[SLC500]N7:0
For a discrete motor contactor status bit on an S7-300 output byte QB0 bit 0:
- Tag:
Motor1_Running - Type: IO Discrete
- Access Name:
S7_315_LAB - Item:
S7:[S7_315_CPU2]Q0.0 - Min/Max: 0 / 1 (display as BOOL).
9. WindowMaker Screen Design
Switch to WindowMaker from the Application Manager. The standard development cycle is:
- Draw the process equipment as symbols (valves, motors, tanks, conveyors) using the vector drawing tools or imported bitmaps.
- Place tags in the symbol library with linked animations so the symbol can be reused without redefining the animation every time it is dropped on a screen.
- Compose windows by dragging symbols and static graphics onto a window canvas.
- Bind each symbol's animation expressions to the appropriate tag in the tag dictionary.
9.1 Common Animations
| Animation | Use | Tag Type |
|---|---|---|
| Visibility | Show / hide a layer based on a bit (e.g., motor running indicator). | Discrete |
| Horizontal Fill / Vertical Fill | Tank level, progress bar, valve position. | Integer or Real |
| Color | Discrete (red/green) or analog (gradient). | Discrete / Real |
| Touch Pushbutton (Momentary, Toggle, Latch) | Operator command — motor start, valve open. | Discrete (write) or Memory Discrete |
| Value Display / Value Entry | Numeric readout or entry field bound to setpoint. | Real / Integer |
| Sliders, Dials, Bar Graphs | Operator entry of analog setpoints. | Integer or Real |
10. Alarm Configuration
Alarms are first-class objects in InTouch. Every tag can carry Hi, HiHi, Lo, LoLo, and Major Deviation limits. Configure alarms during tag creation under Special → Tagname Dictionary → <tag> → Alarms:
| Priority | Color | Typical Use |
|---|---|---|
| 1 — Lowest | White | Informational, log only |
| 500 | Yellow | Caution, operator awareness |
| 999 | Red | Critical, requires acknowledgement and operator action |
For a tank level tag Tank1_Level_PV with a 0-100% range, set LoLo = 5, Lo = 15, Hi = 90, and HiHi = 95. InTouch raises an alarm record and the Alarm Summary control can be dropped on any window to show live and historical alarms.
11. Deploying to WindowViewer and Verifying Live Data
- Save the InTouch application. The compiled runtime artifacts go to the application's directory under
\<server>\InTouch Application\<AppName>. - Switch from WindowMaker to WindowViewer via the Application Manager, or on a runtime node, launch WindowViewer.exe pointed at the application directory.
- Open the System Status window (Ctrl-Y in WindowViewer). Verify every Access Name shows Active status. An Inactive status means the I/O server is not responding — go back to Section 6 or 7.
- Open the tag cross-reference and confirm a non-zero value is flowing for a known PLC address.
- Operate a touch pushbutton animation. Use the PLC's online watch table (STEP 7) or RSLogix 500 to confirm the bit toggled in the controller.
12. Troubleshooting Matrix
| Symptom | Likely Root Cause | Corrective Action |
|---|---|---|
| Tag shows "Quality: Bad" in WindowViewer | Access Name node / application / topic typo; I/O server not running | Open Access Names dialog and confirm fields. Open Windows Services and start the I/O server. |
| Tags show last good value but never update | I/O server stopped polling; PLC in STOP | Restart the I/O server; check PLC mode switch. |
| OPC server returns "Item not found" | Wrong S7 area code or address; data block optimized | Use OPC Scout to validate the address; uncheck Optimized Block Access in STEP 7. |
| Reads work, writes silently fail | PLC in read-only protection; write-protection key on S7 MMC | Check PLC password / write-protection in STEP 7 hardware configuration. |
| Slow scan, especially on MPI | Excessive tag count per topic; all tags on a 1-second update | Split into multiple topics with slower update rates for non-critical tags. |
| InTouch crashes on launch | Tag dictionary references a deleted Access Name; corrupt .ldb file | Restore the application from the last good backup; rebuild the .ldb by re-importing tags. |
| DDE link shows "Service not started" | Legacy DDE service disabled on Windows | Migrate to OPC DA or SuiteLink; do not rely on DDE in new builds. |
13. Migration Note — Wonderware to AVEVA
Wonderware was the brand name under Invensys and then Schneider Electric, and is now part of the AVEVA portfolio after the 2018 merger. InTouch HMI remains a supported product line and is sold as AVEVA InTouch HMI alongside the newer AVEVA Edge (formerly InTouch Edge) for embedded panels. Cloud visibility is delivered through AVEVA Insight (formerly Wonderware Online), and the consolidated marketing entry point for the legacy product line is the AVEVA Wonderware solutions page. Existing V7.11 applications remain functional; new deployments should use the most recent InTouch release for Windows 10 / 11 / Server 2019 support.
What is the difference between an Access Name and a Topic in InTouch?
An Access Name is the InTouch-side pointer that tags reference. It bundles a Node Name (where the I/O server runs), an Application Name (the I/O server program or OPC ProgID), and a Topic Name. The Topic Name is the configuration bucket inside the I/O server that defines which PLC and which polling class. One I/O server can host many topics, allowing different update rates for different tag groups.
Which I/O server should I use for a Siemens S7-315-2DP on MPI from InTouch?
Use the Siemens SimaticNet OPC Server with a CP 5611 or CP 5621 communications processor. Configure a PC Station in the SimaticNet Configuration Console, assign an MPI address, add an S7-OPC entry bound to the target CPU, and verify with OPC Scout before pointing InTouch at it. The SimaticNet OPC ProgID is OPC.SimaticNet.
How do I expose an S7 analog input (PIW) to an InTouch tag?
Create an IO Real tag in the InTouch Tagname Dictionary. Set the Access Name to the configured SimaticNet entry. Set the Item field to S7:[TopicName]PIW256,REAL. Configure Min/Max to the engineering unit range (e.g., 0–100). Confirm in WindowViewer that the tag quality is "Good" and the value updates at the topic's configured rate.
Can I read an Allen-Bradley SLC 500/3 with InTouch?
Yes. Use RSLinx Classic configured with a DF1 or EtherNet/IP driver to the SLC 500. In the InTouch Access Name, set the Application Name to the RSLinx OPC ProgID (or the legacy DDE topic for older builds). Address SLC files using the file:element format, for example [SLC500]N7:0 for an integer or [SLC500]I:1/0 for a discrete input bit.
Why are my InTouch tags marked Quality: Bad after a PLC program change?
A program change that recompiles a data block or shifts an FB instance can change the absolute byte offset. Re-export the symbol table from STEP 7 or RSLogix, then re-bind the affected tags to the new absolute addresses. Optimized Block Access (S7-1200/1500) hides absolute addresses; an external OPC server cannot read optimized blocks, so the access method must be changed to standard (non-optimized) for any tag you intend to expose.