Wonderware InTouch 9.0

# Wonderware InTouch 9.0 ReadMe

Last revision: 05/04/04

This document contains important information about WonderwareÒ InTouchÔ. Please carefully review this document for known issues in this version and changes to the InTouch documentation included on this CD.

InTouch Documentation

System Requirements

Installation Information

Using InTouch with the ArchestrA Security Interface

Known Restrictions for Limited Users – InTouch 9.0

Known Issues – InTouch 9.0

Resolved Issues

Known Issues - InTouch 9.0 Documentation

Top of document

# InTouch Documentation

The InTouch documentation set includes the following guides:

· Wonderware ® FactorySuite™ InTouch™ User’s Guide.

· Wonderware® FactorySuite™ InTouch™ New Features User’s Guide.

· Wonderware ® FactorySuite™ InTouch™ Reference Guide. Provides an in-depth reference to the InTouch QuickScript language and functions, system tagnames, and tagname dotfields.

· Wonderware ® FactorySuite™ SPCPro™ User’s Guide. Provides complete information on the InTouch SPCPro add-on program.

· Wonderware ® FactorySuite™ Recipe Manager User’s Guide. Provides complete information on the Recipe Manager add-on program.

· Wonderware ® FactorySuite™ SQL Access Manager User’s Guide. Provides complete information on the SQL Access Manager add-on program.

· Wonderware FactorySuite Protocols Guide. This guide provides background information on the main protocols used between components of Wonderware products.

· Wonderware ® FactorySuite™ InTouch™ Supplementary Components User’s Guide.

All of these guides are provided in PDF form and can be printed. Also, information included in these guides is provided in browser-based online Help. You need to install Adobe Acrobat reader in order to view the PDF user’s guides. Click here to Download Acrobat Reader.

Top of document

# System Requirements

To run InTouch, we recommend as a minimum the following hardware and software configurations:

· Any IBM® compatible PC with a Pentium II processor or higher (minimum: 400MHz on a single node system, recommended: 1.2GHz or higher).

· At least 2GB of free hard disk space.

· At least 256MB of random-access memory (RAM), 512MB of RAM is recommended.

· We recommend 5MB of additional RAM per 5K tagnames. For example, 32MB of RAM for 32K tagname support and 60MB of RAM for 60K tagname support.

· SVGA display adapter (2MB RAM recommended).

· We recommend you view WindowMaker in 800x600 resolution or higher to ensure full visibility of all dialog boxes.

· Pointing device. For example, mouse, trackball, touch screen.

· The Microsoft® Windows® 2000 Professional operating system with Service Pack 3 or higher or the Microsoft® Windows® XP Professional operating system with Service Pack 1 or higher.

· For InTouch Terminal Services, the Microsoft® Windows® 2000 Server(s) operating system(s) with Service Pack 3 or higher and with Windows Terminal Services enabled only in the Application Server mode.

· Tablet PC users must have the Windows XP Tablet PC Edition Version 2002 operating system with Service Pack 1 or higher.

· Tablet PC users must install Microsoft .NET Framework 1.1 manually before installing InTouch 9.0.

Microsoft Windows Server 2003 Support and Requirements:

· InTouch 9.0 is supported on Microsoft Windows Server 2003 Standard Edition.

· InTouch 9.0 Terminal Services Edition is supported on Microsoft Windows Server 2003 Standard Edition with Terminal Server enabled (the default setting for enabling Terminal Server on Windows Server 2003 Standard Edition is the Application Server mode).

· Running InTouch 9.0 on Microsoft Windows Server 2003 Standard Edition requires the following system requirements as a minimum: 550MHz CPU speed on a single node system (recommended: 1.2GHz or higher), 256MB RAM memory with at least 2.5GB free hard disk space.

· Windows Server 2003 Standard Edition Terminal Server client User Name(s) must be a member of Windows “Remote Desktop Users” and “Power Users” groups in order to connect to the server and to run any applications on the server.

· TSAC (Terminal Services Advanced Client) – Running InTouch in an Internet Explorer window on Windows Server 2003 Standard Edition Terminal Server:

To run InTouch 9.0 in TSAC environment, “IIS” (Internet Information Services) must be installed on the server. This service is called “Application Server” in Windows Server 2003 and can be installed from Windows “Control Panel à Add/Remove Programs à Add/Remove Windows Components.” By default, this service is not installed as part of Windows Server 2003 installation.

Note: Windows Server 2003 Terminal Server does not allow two clients login with the same user IDs. Each Terminal Services session has to have a unique user ID to connect to the Windows Server 2003 Terminal Server.

### Citrix MetaFrame Support:

· To run InTouch 9.0 Terminal Services ICA Thin client(s) on Windows Server 2003 Standard Edition, you'll need Citrix MetaFrame XP, Feature Release 3. Citrix MetaFrame 1.8 Feature Release 1 is not supported on Windows Server 2003.

InTouch Version 9.0 (or later) does not support the Microsoft Windows 3.x, the Microsoft Windows for Workgroups, the Microsoft Windows 9x or the Microsoft Windows NT operating systems.

NetDDE is not supported with InTouch on Windows Server 2003 and later operating systems.

Note: If you are using a computer as an Alarms database server, install Microsoft SQL Server 2000 with SP3 or later or, as a minimum requirement, install Microsoft SQL Server Desktop Engine (MSDE).

Top of document

# Installation Information

## InTouch 9.0 Installation

Detailed installation instructions are included in the InTouch Installation Guide. It is recommended that you read the InTouch Installation Guide prior to beginning the installation process.

The Microsoft SQL Server key is required in order to install the MS SQL Server. When installing the MS SQL Server, you will be asked to enter the 25 digit key number. The Microsoft SQL Server key number is GJDD4-GMYXW-GQR4C-KT4P9-QDQGB.

InTouch 9.0 can be installed on a “clean” system (a system without an existing installed version of InTouch), or it can be installed as an upgrade to a system that already has InTouch 8.0, InTouch 8.0 SP1 or InTouch 8.0 with SP2 installed.

When upgrading from InTouch 8.0, InTouch 8.0 SP1 or InTouch 8.0 with SP2 to InTouch 9.0, the installation procedure will detect which components have already been installed on your system and will update your system accordingly. Changing the existing installed components (adding/removing components) during the upgrade is not recommended.

Upgrading to InTouch 9.0 may require a reboot if the Microsoft MDAC version currently installed on the system is not up to the prerequisite version level required by InTouch 9.0. InTouch 9.0 requires, as a minimum, MDAC 2.7 SP1 for Windows 2000 and Windows XP Professional, and MDAC 2.8 for Windows Server 2003. MDAC version is automatically checked during installation procedure.

Upgrading from InTouch 7.11 to InTouch 8.0, InTouch 8.0 SP1, InTouch 8.0 with SP2 or InTouch 9.0 requires that InTouch 7.11 be uninstalled first before the new version can be installed.

If InTouch 7.11 is installed on your system and you have Alarm DB Logger set to run as a service, you must change the service mode to manual before you uninstall InTouch and reboot your system. You must also ensure that this service is not running before you install InTouch 9.0. Otherwise, the installation will not be able to update the files properly. If you uninstall InTouch 7.11 with Alarm DB Logger in automatic mode, InTouch 9.0 installation will not complete properly.

Install InTouch Terminal Services on a stand-alone server. We strongly recommend that you not install InTouch Terminal Services on any computer that also acts as a database server (such as IndustrialSQL Server), RAS server or PPTP server.

InTouch and InTouch Terminal Services are not supported and should not be installed on a system that is configured to be a domain controller. InTouch Terminal Services is designed to perform like Windows 2000 Professional at the end-user level and it will not assign top priority to critical domain-level processes. Installing InTouch Terminal Services on any of these servers can significantly degrade performance.

Important Note: If you have to copy the whole InTouch CD to a folder on your hard drive first and then run the installation from this folder, the full path name of this folder should not have a blank space in it. This does not affect users installing InTouch directly from the CD.

Top of document

# Using InTouch with the ArchestrA Security Interface

InTouch must be configured with the ArchestrA security mode in order to write to the Industrial Application Server. If InTouch is not configured with ArchestrA security, all attempted writes to the Industrial Application Server will be treated as if there is no logged on user. If the object you are trying to write to is configured with security, the writes will fail. InTouch will no longer attempt to write under the context of the DefaultUser if no user is logged-on to InTouch View.

This decision allows InTouch to eliminate a call to the IuserAuthenticator UserLogin method there by increasing Logon performance in slow networks. The GUID obtained from the call to ChangeLogin will be used by InTouch while writing to attributes.

# Known Restrictions for Limited Users – InTouch 9.0

Although InTouch 9.0 can be run by Limited Users, certain features and operations will not be supported for Limited Users. We recommend that users who configure InTouch applications have Power User privileges. The following operations are not supported for Limited Users:

Installing or uninstalling Wizards and ActiveX controls.

Configuring node properties (Limited Users will not be permitted to access Node Properties in the Application Manager).

Converting 16 bit applications created in InTouch 5.6a.

Opening applications created by other users.

Using the license utility.

Using SPCPro features.

Using the Alarm Purge-Archive utility.

Using the Alarm DB Restore utility.

Using the AlarmSuite History Migration utility.

Changing the Alarm DB Logger settings.

Top of document

# Known Issues – InTouch 9.0

### L00024118 – Installing InTouch on a computer with the Microsoft Windows XP Service Pack 2 operating system

If you are installing InTouch on a computer with the Microsoft Windows XP Service Pack 2 operating system, you must manually enable NetDDE services before the installation.

### L00024526 – The InTouch installation hangs and does not stop slssvc if a Bootstrap service is running on the same node

The InTouch installation hangs and does not stop slssvc if you install InTouch on the same node as the Industrial Application Server with a Bootstrap. Stop the slssvc service manually to resume installation.

### L00020971 – Limitations while running WindowViewer as a service

If you are running WindowViewer as a service, running WindowMaker is not recommended. You should stop running WindowViewer as a service before starting WindowMaker.

### L00024259 – Changing the screen resolution while WindowViewer is running

If you change the screen resolution while WindowViewer is running, you must restart WindowViewer to apply the changes.

### L00024313 - Nested Quick Functions are not supported in InTouch

Nested Quick Functions do not work and will result in an error message in the logger.

### L00010875 - Unable to browse to the DemoApp directory in the DB Load window

The default path for the InTouch Demo Applications is <Drive:>\Documents and Settings\All Users\Application Data\InTouchDemos.

### L00022744 - The .Quality property of an entire Array attribute is 0 (bad) when referenced as "MyArrayAttr.Quality"

The .Quality property of an entire Array attribute is 0 (bad) when referenced as "MyArrayAttr.Quality." To get the quality of an array from InTouch, use ArrayName[] or ArrayName[-1]. ArrayName.Quality is not supported.

### L00023236 – SmartSymbols do not retain properties when the SmartSymbol cell is broken

If you break the cell of an existing SmartSymbol that contains a wizard, the Properties dialog box of the wizard will not be displayed upon double-clicking the wizard.

### L00025183 - After editing a SmartSymbol by changing the size of the object, the existing instance of the edited object will have font sizes that are not proportionate to the size of the object

After editing a SmartSymbol by changing the size of the object, the existing instance of the edited object will have font sizes that are not proportionate to the size of the object.

### L00023456 - With EnableDisableKeys(1,1,1) enabled, it is possible to open the WindowViewer system menu with an ALT key combination

With EnableDisableKeys(1,1,1) enabled, it is possible to open the WindowViewer system menu with an ALT key combination, whereas EnableDisableKeys is expected to disable the ALT key.

### L00024311 - When writing values to Industrial Application Server integer attributes via string or analog input links in InTouch, x.5 is rounded to x instead of x+1

When writing values to Industrial Application Server integer attributes via string or analog input links in InTouch, x.5 is rounded to x instead of x+1, which can lead to discrepancies in the display. ArchestrA rounds values by design. InTouch should not change (i.e. continue to truncate tags). However, when InTouch writes a floating value to an ArchestrA integer, the ArchestrA behavior of rounding prevails.

### L00025502 – IOStatus topic is not supported for the Galaxy access name

View.exe's IOStatus topic is not supported for the Galaxy access name because Galaxy does not use DDE or SuiteLink.

### L00025849 – If the user restores alarm records multiple times, duplicate alarm records may be added to the AlarmDetail and Event tables

If the user restores alarm records multiple times, duplicate alarm records may be added to the AlarmDetail and Event tables. If you have restored alarm records multiple times and have duplicate alarm records, delete all records in the alarm database and restore again.

Top of document

# Resolved Issues

### L00021597 - The WizardSDK does not allow users to create of alarm groups

The Wizard SDK allows users to create of InTouch tags, but does not allow users to create alarm groups for these tags. Consequently, a complete automatic tag definition by a wizard is not possible if an alarm group does not exist before executing the wizard. This problem also applies to tag creators.

### L00021652 – Cannot bypass the creation of placeholders when windows are imported to an application

It is not possible to bypass the creation of placeholders (based on the existence of tags in the Tagname Dictionary) when windows and scripts are imported from one application to another. A new option “Use existing tags” is available now to bypass the creation of placeholders.

### L00022220 – No error message is issued when a NAD update fails due to loss of network connection

When ReloadWindowViewer() or RestartWindowViewer() is executed, if the NAD client fails to connect to the NAD server to copy new application, the following message is logged:

"NAD could not access source directory \\{path}."

For ReloadWindowViewer() the current application continues to run. For RestartWindowViewer(), WindowViewer restarts with the unchanged application.

### L00023668 - The vertical and horizontal scroll bars of the graphics area in WindowMaker is not limited by the screen resolution size

WindowMaker’s workspace area has been increased to 32000 by 32000. In previous versions of InTouch, it was constrained to the dimensions of the primary monitor. This increased workspace allows you to develop larger windows within WindowMaker that can be used in applications supporting larger virtual displays or desktops. If you enter a number less than 1 or greater than 32000 for the window width and/or height in the Window Properties dialog box, a warning message will be displayed. WindowViewer's main window will still only maximize to the size of the primary monitor.

### L00024293 - The layout of the authentication dialog box for secured/verified writes is distorted if the attribute name is long

The layout of the authentication dialog box for secured/verified writes to Industrial Application Server attributes is distorted if a long attribute name of approximately 30 or more characters is used. The text in the dialog box is partially hidden).

### L00025408 – The Alarm subsystem stop generating alarms as soon as the error "WNAP_Register - failed" is generated

Alarm subsystem stop generating alarms as soon as the error "WNAP_Register - failed" is generated. The size of the history buffer has been increased to resolve this issue.

# Known Issues - InTouch 9.0 Documentation

The following table describes changes to the documentation.

### Item

### Location of Change

### Existing Documentation

### Change

1 | InTouchUG.pdf, “System Requirements,” p. 16. | Microsoft Windows 2000 Professional with Service Pack 1 or Windows XP Professional with Service Pack 3 operating systems. | Microsoft Windows 2000 Professional with Service Pack 3 or Windows XP Professional with Service Pack 1 operating systems.
2 | InTouchUG.pdf, “Customizing Your Development Environment,” p. 73. | WindowMaker Properties screenshot shows Start Wonderware Logger as a checkbox option. | Start Wonderware Logger is not an option in WindowMaker Properties.
3 | InTouchUG.pdf, “Setting WindowViewer’s General Properties,” p. 166. | WindowViewer Properties screenshot shows Start Wonderware Logger as a checkbox option. | Start Wonderware Logger is not an option in WindowViewer Properties.

4

InTouchUG.pdf, “Using the Security System Tagnames,” p. 193. WindowMaker Help File: “Using the Security System Tagnames.”

Whenever the $PasswordEntered tag changes, a log on is attempted internally without any GUI being displayed. The log on attempt uses the $*Entered tags as input user name and the string value of $OperatorDomainEntered as the domain name (used only if the current mode is operating system-based security). If the security mode is not operating

system-based, this tag is ignored.

Whenever the $PasswordEntered tag changes, a log on is attempted internally without any GUI being displayed. The log on attempt uses the $*Entered tags as input user name and the string value of $OperatorDomainEntered as the domain name (used only if the current mode is operating system or ArchestrA-based security). This tag can be ignored if the security mode is:

1. the InTouch-based security mode.

2. the operating system-based security mode and the user is logged on to a local computer.

3. the ArchestrA-based security mode or the operating system-based (user or group) mode if $OperatorEntered has the fully-qualified username

4. the ArchestrA Galaxy mode.

5 | InTouchUG.pdf, “$VerifiedUserName,” p. 194. | Contains the verified user's full name if the call to InvisibleVerifyCredentials() is successful and if the security mode is set to operating system-based or ArchestrA AppServer-based security. | Contains the verified user's full name if the call to InvisibleVerifyCredentials() is successful and if the security mode is set to any security mode except for the None mode.
6 | InTouchUG.pdf, “Tagname Dictionary Special Features,” p. 244. WindowMaker Help File: “Tagname Dictionary Special Features.” | Extended Tagname Support InTouch can support up to 61,405 tagnames in its Tagname Dictionary. (The number of tagnames that your system supports is determined by your software license.) | Extended Tagname Support InTouch can support up to 61,402 tagnames in its Tagname Dictionary. (The number of tagnames that your system supports is determined by your software license.)

7

InTouchUG.pdf, “Timestamps in the Distributed Alarm System,” p. 522. WindowMaker Help File: “Timestamps in the Distributed Alarm System.”

## Timestamps in the Distributed Alarm System

The present Alarm Record for the Distributed Alarm system has five timestamps:

Table shown

Remove section and table.

8

InTouchUG.pdf, “AlarmCounter Database Stored Procedure,” p. 552. WindowMaker Help File: “AlarmCounter Database Stored Procedure.”

The column names in the table are documented as:

TagName – Nchar, Name of the object that generated the alarms such as TIC101

Area – Nchar, Name of the area or group for the alarm

Type – Nchar, Type of alarm such as Hi, HiHi, ROC, PV, HiAlarm.

Category – Nchar, Alarm class or alarm category such, as Value, Process, Batch, etc.

AlarmCount – Integer, Number of onsets of the alarm during the time range. If alarm existed prior to entering the selected time range, do not count that one.

· Priority – Integer, Alarm priority.

Provider – Nchar, Provider of alarm, such as node/InTouch, or GalaxyName.

Comment - Nchar

The column names in the table should be documented as:

TagName – Nchar, Name of the object that generated the alarms such as TIC101

GroupName – Nchar, Name of the area or group for the alarm

AlarmType – Nchar, Type of alarm such as Hi, HiHi, ROC, PV, HiAlarm.

AlarmClass – Nchar, Alarm class or alarm category such, as Value, Process, Batch, etc.

AlarmCount – Integer, Number of onsets of the alarm during the time range. If alarm existed prior to entering the selected time range, do not count that one.

· Priority – Integer, Alarm priority.

Provider – Nchar, Provider of alarm, such as node/InTouch, or GalaxyName.

Comment - Nchar

9 | InTouchUG.pdf, “Column Details Button,” p. 648. WindowMaker Help File: “Column Details Button.” | Comment - Displays the tagname’s comments. These comments were typed in the Alarm Comment box when the tagname’s alarm was defined in the database. These comments are also updated when ACK comments are given. | Description - Displays the tagname’s comments. These comments were typed in the Alarm Comment box when the tagname’s alarm was defined in the database. These comments are also updated when ACK comments are given. UTC Time - Displays the date and time of the alarm or event, in coordinated universal time (UTC).

10

InTouchUG.pdf, “Column Details Button,” p. 648. WindowMaker Help File: “Column Details Button.” Alarm Viewer Help File: “Column Details Button.”

### Duration

Displays the UNACK duration or the alarm duration, depending on what has been selected by the user.

11 | InTouchUG.pdf, “Colors Page,” p. 651. WindowMaker Help File: “Colors Page.” |  | AckOrAlarmDuration The duration column is populated with either UNACK Duration or Alarm Duration. FALSE (0) is UNACK Duration and TRUE (1) is Alarm Duration.

12

InTouchUG.pdf, “Colors Page,” pp. 651-662. WindowMaker Help File: “Colors Page.”

### The property descriptions list the incorrect default colors for several properties.

The following list notes the corrections required for property color defaults:

AlmRtnForeColor - The default color is blue.

AlmRtnBackColor - The default color is white.

EventForeColor - The default color is red.

EventBackColor - The default color is white.

UnAckAlmBackColorRange1 - The default color is white.

UnAckAlmBackColorRange2 – The default color is white.

UnAckAlmBackColorRange3 - The default color is white.

UnAckAlmBackColorRange4 - The default color is white.

AckAlmBackColorRange1 - The default color is white.

AckAlmBackColorRange2 - The default color is white.

AckAlmBackColorRange3 - The default color is white.

AckAlmBackColorRange4 - The default color is white.

AckAlmForeColorRange1 - The default color is black.

AckAlmForeColorRange2 - The default color is black.

AckAlmForeColorRange3 - The default color is black.

AckAlmForeColorRange4 - The default color is black.

13

InTouchUG.pdf, “About the Filters Pane,” p. 672. WindowMaker Help File: About the Filters Pane.” Alarm DB View Control Help File: “About the Filters Pane.”

### Duration

Filters query by UNACK duration

Duration

Filters query by UNACK and alarm duration. A duration column set as equal to zero will not produce records with a null value in the query.

14 | InTouchUG.pdf, “About the Filters Pane,” p. 673. WindowMaker Help File: About the Filters Pane.” Alarm DB View Control Help File: “About the Filters Pane.” | % - any string of zero or more characters. _ - any single character. [ ] - Any single character not within the specified range ([^a-f]) or set ([^abcdef]). [^ ] - Any single character not within the specified range ([^a-f]) or set ([^abcdef]). | % - any string of zero or more characters. _ - any single character. [ ] - Any single character within the specified range ([a-f]) or set ([abcdef]). [^ ] - Any single character not within the specified range ([^a-f]) or set ([^abcdef]).
15 | InTouchUG.pdf, Chapter 10, Alarm / Event Clients | N/A | For the Alarm Viewer control and the Distributed Alarm Object, the Original Alarm Time is the date/time stamp of the onset of the alarm." If tag is an IO tag, then it is the time stamp from the IOServer, if that Server is capable of passing timestamps.

16

### Wonderware FactorySuite InTouch Alarm Deployment Guide, Chapter 3, Terminal Services Alarm Support, p. 100

### The Distributed Alarm System is capable of distinguishing alarms coming from different Terminal Sessions and different instances of the same application.

### The existing text is incorrect. The note stating “Alarm Providers are not supported on Terminal Sessions. They are only supported on the Terminal Console” is correct.

17

### Wonderware ® FactorySuite™ SQL Access Manager User’s Guide, Chapter 5, p. 44, Troubleshooting Functions.

### N/A

### The result code -6 for SQL Access is not documented.

For the result code -6, the error message is "Invalid statement ID." The error can occur because a SQL Access function is called with an invalid statement ID as a parameter. A possible cause is that the statement ID returned from SQLPrepareStatement is corrupt (e.g., by a script) before it is used in a subsequent SQL Access function such as SQLExecute, SQLInsertExecute, SQLInsertEnd, SQLSetParam{Type}, SQLClearParam, or SQLClearStatement.

## Wonderware ® FactorySuite™ InTouch ® Reference Guide Corrections

The following section consists of corrections to the InTouch Reference Guide, which was released with InTouch.

## Chapter 2 - Dotfields

### Quality

To completely understand the Quality dotfields used by Wonderware a brief definition of quality standard is stated. The Wonderware Data Quality standard is based on the OLE for Process Control (OPC) proposed quality, which in turn is based on Fieldbus Data Quality Specifications.

Quality flags represent the quality state for an item's data value. This design makes it fairly easy for both Servers and Client applications to determine how much functionality they want to implement.

The low 8 bits (Least Significant Byte) of the Quality flags are currently defined in the form of three bit fields; Quality, Substatus and Limit status arranged as follows:

QQSSSSLL

The Quality field allows the user to access the quality of an I/O tagname as provided by an I/O server.

Note If the I/O connection becomes invalid, the quality dotfields are automatically reset to the initial value of zero. The .ReferenceComplete flag is also set to zero at this time.

Category | tagname
Usage | Tagname.Quality
| Parameter | Description
| Tagname | Any Discrete, Integer, or Real tagname, or Indirect Analog or Indirect Message tagname.
Data Type | Integer (read only)
Valid Values | Value may be 0 to 255
Example(s) | IF I0Tag.Quality <> 192 THEN LogMessage("This data is not Good!"); ENDIF;
| Wonderware I/O servers can report six (6) mutually exclusive states of quality of data being sent back to their clients. They are as follows:
|  | OPC QualityBytes
| OPC Quality Bits | .QualityStatus
| MSByte | LSByte | .QualitySubStatus
States of Quality | Hex Value | xxxxxxxx | QQSSSSLN | .QualityLimit
1. Good | 0x00C0 | 00000000 | 11000000 | Q=3 | S=0 | L=0
2. Clamped High | 0x0056 | 00000000 | 01010110 | Q=1 | S=5 | L=2
3. Clamped Low | 0x0055 | 00000000 | 01010101 | Q=1 | S=5 | L=1
4. Cannot Convert | 0x0040 | 00000000 | 01000000 | Q=1 | S=0 | L=0
5. Cannot Access Point | 0x0004 | 00000000 | 00000100 | Q=0 | S=1 | L=0
6. Communications Failed | 0x0018 | 00000000 | 00011000 | Q=0 | S=6 | L=0
| When the client application is unable to communicate with the Server .QualityStatus is 0.
| 0x0000 | 00000000 | 00000000 | Q=0 | S=0 | L=0
| The conditions under which each of these quality states will be reported are as follows:
1. Good | The Communications link has been verified. The PLC understood our Poll request and returned a valid response packet. If a write occurred, there were no errors during the write process. There were no conversion problems with the data contained in the response packet.
Example | The value 0x0000A is returned due to a poll of a register containing 10 (decimal).

2. Clamped High

The Communications link has been verified.

The PLC understood our Poll request and returned a valid response packet.

The register was read or written without error.

It was necessary to clamp its intended value to a limit because the value was larger than the maximum allowed.

In the case of a string, the string is truncated.

Example | An unsigned 16 bit integer is clamped to 65535.
3. Clamped Low | The Communications link has been verified. The PLC understood our Poll request and returned a valid response packet. The register was read or written without error. It was necessary to clamp its intended value to a limit because the value was smaller than the minimum allowed.
Example | An unsigned 16 bit integer is clamped to 0.

4. Cannot Convert

The Communications link has been verified.

The PLC understood our Poll request and returned a valid response packet.

The data from the PLC could not be converted into the desired format.

Possibilities for cannot convert include, but are not limited to:

The Server may return a constant in place of the data or return quality information alone.

The data is not usable.

It is not known whether the value is too large or too small.

The data returned from the PLC is of the incorrect data type.

A Floating Point number is returned, but is not value (for example: Not A Number).

Example | The value of 0x000A is returned from a BCD register in a PLC.

5. Cannot Access Point

The Communications link has been verified.

The PLC understood our Poll request and returned a valid response packet.

The PLC reported that it could not access the requested point.

Possibilities for lack of accessibility include, but are not limited to:

Item does not exist in PLC memory.

Item is not currently available (locked in some way due to resource contention).

Item is not of the correct format / data type.

A write attempt was made, but item is read-only.

In most cases, a group of items will be affected when one item is invalid. This is due to the block-polling scheme used by the Servers. For example, if one item in a block of 10 is invalid, then entire block is marked invalid by the PLC. The Server will report invalid quality for all items in the block.

The data is unusable.

Example | Attempting to read R40001 but R40001 is not defined in the PLC's memory map.

6. Communications Failed

Any combination of the following:

Data communications are down.

The Topic is in slow poll (or equivalent) mode.

There have been no link validating messages.

Lack of resources in the Server. For example, a TSR (or driver) cannot allocate memory.

Lack of resources in the communications link.

The communications link is off-line.

All communications channels are in use.

The network is unable to route the message to the PLC.

Example | Attempting to read data from a PLC which has been powered off.
See Also | .QualityLimit, .QualityStatus, .QualitySubstatus

### .QualitySubstatus

| Integer used to display the quality substatus of an I/O value provided by an I/O server when the I/O connection is valid.
Category | tagname
Usage | Tagname.QualitySubstatus
| Parameter | Description
| Tagname | Any Discrete, Integer, or Real tagname, or Indirect Analog or Indirect Message tagname.
Data Type | Integer (read-only)
Valid Values | (SSSS) and (QQ)
| Substatus (SSSS) for BAD Quality (QQ=0):
| 0 | Non-specific |
| 1 | Configuration Error |
| 2 | Not Connected |
| 3 | Device Failure |
| 4 | Sensor Failure |
| 5 | Last Known Value |
| 6 | Com Failure |
| 7 | Out of Service |
| Substatus (SSSS) for UNCERTAIN Quality (QQ=1):
| 0 | Non-specific |
| 1 | Last Usable Value |
| 4 | Sensor Not Accurate |
| 5 | Engineering Units Exceeded |
| 6 | Sub-Normal |
| Substatus (SSSS) for GOOD Quality (QQ=3):
| 0 | Non-specific |
| 6 | Local Override |
See Also | .QualityStatus, .Quality

## Alarm Viewer ActiveX Control Methods and Events

The following section is a supplement to the Alarm Viewer ActiveX Control Methods and events section in the Wonderware ® FactorySuite™ InTouch™ User’s Guide located in Chapter 10 - Alarm/Event Clients. The following section provides complete syntax information and examples that are not included in the Wonderware ® FactorySuite™ InTouch™ User’s Guide.

### AboutBox

Method: | AboutBox
Purpose: | Shows the "About" dialog box.
Syntax: | Object.AboutBox
Example: | #AlarmViewerCtrl1.AboutBox(); where the name of the control is AlarmViewerCtrl1.

### AckSelected

Method | AckSelected
Purpose | The Alarm Viewer allows alarms to be selected by clicking on them with the mouse at runtime. The AckSelected function can be used to acknowledge those alarms.
Syntax | Object.AckSelected (Comment)
| Parameter | Description
| Comment | Alarm acknowledgment comment.
Example | Tag1 = "Alarm Comment" #AlarmViewerCtrl1.AckSelected (Tag1); where Tag1 is defined as a message tag and the name of the control is AlarmViewerCtrl1.

### AckAll

Method | AckAll
Purpose | Acknowledges all the alarms in the current alarm query. Since the Alarm Viewer has only a limited display area, the AckAll function may acknowledge alarms that are not visible in the display.
Syntax | Object.AckAll (Comment)
| Parameter | Description
| Comment | Alarm acknowledgment comment.
Example | Tag1 = "Alarm Comment” #AlarmViewerCtrl1.AckAll (Tag1); where Tag1 is defined as a message tag and the name of the control is AlarmViewerCtrl1.

### AckVisible

Method | AckVisible
Purpose | Acknowledges only those alarms that are currently visible in the Alarm Viewer.
Syntax | Object.AckVisible (Comment)
| Parameter | Description
| Comment | Alarm acknowledgment comment.
Example | Tag1 = "Alarm Comment" #AlarmViewerCtrl1.AckVisible (Tag1); where Tag1 is defined as a message tag and the name of the control is AlarmViewerCtrl1.

### AckSelectedGroup

Method | AckSelectedGroup
Purpose | Acknowledges all alarms that have the same group name as one or more of the selected alarms.
Syntax | Object.AckSelectedGroup (Comment)
| Parameter | Description
| Comment | Alarm acknowledgment comment.
Example | Tag1 = "Alarm Comment" #AlarmViewerCtrl1.AckSelectedGroup (Tag1); where Tag1 is defined as a message tag and the name of the control is AlarmViewerCtrl1.

### AckSelectedTag

Method | AckSelectedTag
Purpose | Acknowledges all alarms that have the same Tagname, group name and priority as one or more of the selected alarms.
Syntax | Object.AckSelectedTag (Comment)
| Parameter | Description
| Comment | Alarm acknowledgment comment.
Example | Tag1 = "Alarm Comment" #AlarmViewerCtrl1.AckSelectedTag (Tag1); where Tag1 is defined as a message tag and the name of the control is AlarmViewerCtrl1.

### AckSelectedPriority

Method | AckSelectedPriority
Purpose | Acknowledges all alarms that have the same priority range as one or more of the selected alarms.
Syntax | Object.AckSelectedPriority (Comment)
| Parameter | Description
| Comment | Alarm acknowledgment comment.
Example | Tag1 = "Alarm Comment" #AlarmViewerCtrl1.AckSelectedPriority (Tag1); where Tag1 is defined as a message tag and the name of the control is AlarmViewerCtrl1.

### ShowSuppression

Method: | ShowSuppression
Purpose: | Displays the suppression dialog box, which contains all suppressed alarms.
Syntax: | Object.ShowSuppression()
Example: | #AlarmViewerCtrl1.ShowSuppression(); where the name of the control is AlarmViewerCtrl1.

### SuppressSelected

Method: | SuppressSelected
Purpose: | Suppresses the display of current and future occurrences of the selected alarms.
Syntax: | Object.SuppressSelected()
Example: | #AlarmViewerCtrl1.SuppressSelected(); where the name of the control is AlarmViewerCtrl1.

### SuppressAll

Method: | SuppressAll
Purpose: | Suppresses the display of current and future occurrences of all active alarms.
Syntax: | Object.SuppressAll()
Example: | #AlarmViewerCtrl1.SuppressAll(); where the name of the control is AlarmViewerCtrl1.

### SuppressVisible

Method: | SuppressVisible
Purpose: | Suppresses the display of current and future occurrences of any visible alarm.
Syntax: | Object.SuppressVisible()
Example: | #AlarmViewerCtrl1.SuppressVisible(); where the name of the control is AlarmViewerCtrl1.

### SuppressSelectedGroup

Method: | SuppressSelectedGroup
Purpose: | Suppresses the display of current and future occurrences of any alarm that belongs to the same groups of one or more selected alarms.
Syntax: | Object.SuppressSelectedGroup()
Example: | #AlarmViewerCtrl1.SuppressSelectedGroup(); where the name of the control is AlarmViewerCtrl1.

### SuppressSelectedTag

Method: | SuppressSelectedTag
Purpose: | Suppresses the display of current and future occurrences of any alarm that belongs to the same Tagname name of one or more selected alarms having the same Group name and Priority range.
Syntax: | Object.SuppressSelectedTag()
Example: | #AlarmViewerCtrl1.SuppressSelectedTag(); where the name of the control is AlarmViewerCtrl1.

### SuppressSelectedPriority

Method: | SuppressSelectedPriority
Purpose: | Suppresses the display of current and future occurrences of any alarm that belongs to the same priority range of one or more selected alarms.
Syntax: | Object.SuppressSelectedPriority()
Example: | #AlarmViewerCtrl1.SuppressSelectedPriority(); where the name of the control is AlarmViewerCtrl1.

### UnsuppressAll

Method: | UnSuppressAll
Purpose: | Clears alarm suppression.
Syntax: | Object.UnSuppressAll()
Example: | #AlarmViewerCtrl1.UnSuppressAll(); where the name of the control is AlarmViewerCtrl1.

### ShowQueryFavorites

Method: | ShowQueryFavorites
Purpose: | Displays the Query Favorites dialog if the "QueryFavoritesFile" property contains a valid Query Favorite File Name in XML format.
Syntax: | Object.ShowQueryFavorites()
Example: | #AlarmViewerCtrl1.ShowQueryFavorites(); where the name of the control is AlarmViewerCtrl1.

### ShowStatistics

Method: | ShowStatistics
Purpose: | Displays the Statistics dialog.
Syntax: | Object.ShowStatistics()
Example: | #AlarmViewerCtrl1.ShowStatistics(); where the name of the control is AlarmViewerCtrl1.

### FreezeDisplay

Method | FreezeDisplay
Purpose | Freezes the display.
Syntax | Object.FreezeDisplay(Discrete)
Comment | Discrete
| True | False
| Freezes the display. | Unfreezes the display.
Example | Tag1 = 1; #AlarmViewerCtrl1.FreezeDisplay(Tag1); where Tag1 is defined as Memory Discrete tag and the name of the control is AlarmViewerCtrl1.

### Requery

Method: | Requery
Purpose: | Queries the alarm provider again.
Syntax: | Object.Requery()
Example: | #AlarmViewerCtrl1.Requery(); where the name of the control is AlarmViewerCtrl1.

### AckGroup

Method | AckGroup
Purpose | Acknowledge all alarms for a given Group name.
Syntax | Object.AckGroup(ApplicationName, GroupName, Comment)
| Parameter | Description
| ApplicationName | The name of the Application for example, \\node1\Intouch
| GroupName | The name of the group. For example, Turbine.
| Comment | Alarm acknowledgement comment.
Example | #AlarmViewerCtrl1.AckGroup (“\Intouch”, “Turbine”, “Turbine Ack Comment”); where the name of the control is AlarmViewerCtrl1.

### AckPriority

Method | AckPriority
Purpose | Acknowledges all of the alarms within a specified priority range and given group name.
Syntax | Object.AckPriority(ApplicationName, GroupName, FromPriority, ToPriority, Comment)
| Parameter | Description
| ApplicationName | The name of the Application for example, \\node1\Intouch
| GroupName | The name of the group. For example, Turbine.
| FromPriority | Starting priority of alarms. For example, 100.
| ToPriority | Ending priority of alarms. For example, 900.
| Comment | Alarm acknowledgement comment.
Example | #AlarmViewerCtrl1.AckPriority (“\Intouch”, “Turbine”, 100, 900, “Turbine Ack Comment”); where the name of the control is AlarmViewerCtrl1.

### AckTag

Method | AckTag
Purpose | Acknowledge all of the alarms for a given Tag name, Provider name and Group name within the given Priority range.
Syntax | Object.AckTag(ApplicationName, GroupName, TagName, FromPriority, ToPriority, Comment)
| Parameter | Description
| ApplicationName | The name of the Application for example, \\node1\Intouch
| GroupName | The name of the group. For example, Turbine.
| Tagname | The name of the alarm tagname. For example, Valve1.
| FromPriority | Starting priority of alarms. For example, 100.
| ToPriority | Ending priority of alarms. For example, 900.
| Comment | Alarm acknowledgement comment.
Example | #AlarmViewerCtrl1.AckTag (“\Intouch”, “Turbine”, “Valve1”, 100, 900, “Turbine Ack Comment”); where the name of the control is AlarmViewerCtrl1.

### SuppressGroup

Method | SuppressGroup
Purpose | Suppress the display of current and future occurrences of any alarm that belongs to a given Group name.
Syntax | Object.SuppressGroup(ApplicationName, GroupName)
| Parameter | Description
| ApplicationName | The name of the Application for example, \\node1\Intouch
| GroupName | The name of the group. For example, Turbine.
Example | #AlarmViewerCtrl1.SuppressGroup (“\Intouch”, “Turbine”); where the name of the control is AlarmViewerCtrl1.

### SuppressPriority

Method | SuppressPriority
Purpose | Suppress the display of current and future occurrences of any alarm of the specified priority range, having the same Provider name and Group name.
Syntax | Object.SuppressPriority(ApplicationName, GroupName, FromPriority, ToPriority)
| Parameter | Description
| ApplicationName | The name of the Application for example, \\node1\Intouch
| GroupName | The name of the group. For example, Turbine.
| FromPriority | Starting priority of alarms. For example, 100.
| ToPriority | Ending priority of alarms. For example, 900.
Example | #AlarmViewerCtrl1.SuppressPriority (“\Intouch”, “Turbine”, 100, 900); where the name of the control is AlarmViewerCtrl1.

### SuppressTag

Method | SuppressTag
Purpose | Suppresses the display of current and future occurrences of any alarm emitted by a given tag name or Group name and in the specifed Priority range.
Syntax | Object.SuppressTag(ApplicationName, GroupName, FromPriority, ToPriority)
| Parameter | Description
| ApplicationName | The name of the Application for example, \\node1\Intouch
| GroupName | The name of the group. For example, Turbine.
| Tagname | The name of the alarm tag. For example, valve 1.
| FromPriority | Starting priority of alarms. For example, 100.
| ToPriority | Ending priority of alarms. For example, 900.
Example | #AlarmViewerCtrl1.SuppressTag (“\Intouch”, “Turbine”, 100, 900); where the name of the control is AlarmViewerCtrl1.

### SelectGroup

Method | SelectGroup
Purpose | Selects the selection of all the alarms from a given Group.
Syntax | Object.SelectGroup(ApplicationName, GroupName)
| Parameter | Description
| ApplicationName | The name of the Application for example, \\node1\Intouch
| GroupName | The name of the group. For example, Turbine.
Example | #AlarmViewerCtrl1.SelectGroup (“\Intouch”, “Turbine”); where the name of the control is AlarmViewerCtrl1.

### SelectPriority

Method | SelectPriority
Purpose | Selects all of the alarms for a given Priority range within a given Group.
Syntax | Object.SelectPriority(ApplicationName, GroupName, FromPriority, ToPriority)
| Parameter | Description
| ApplicationName | The name of the Application for example, \\node1\Intouch
| GroupName | The name of the group. For example, Turbine.
| FromPriority | Starting priority of alarms. For example, 100.
| ToPriority | Ending priority of alarms. For example, 900.
Example | #AlarmViewerCtrl1.SelectPriority (“\Intouch”, “Turbine”, 100, 900); where the name of the control is AlarmViewerCtrl1.

### SelectTag

Method | SelectTag
Purpose | Selects all of the alarms from a specific Provider/Group/Tag. You can also specify a Priority range, or use 1-999.
Syntax | Object.SelectTag(ApplicationName, GroupName, TagName, FromPriority, ToPriority)
| Parameter | Description
| ApplicationName | The name of the Application for example, \\node1\Intouch
| GroupName | The name of the group. For example, Turbine.
| Tagname | The name of the alarm tag. For example, valve 1.
| FromPriority | Starting priority of alarms. For example, 100.
| ToPriority | Ending priority of alarms. For example, 900.
Example | #AlarmViewerCtrl1.SelectTag (“\Intouch”, “Turbine”, “Valve1”,100, 900); where the name of the control is AlarmViewerCtrl1.

### ApplyQuery

Method | ApplyQuery
Purpose | Performs the query as specified by its parameters Alarm Query, From and To Priorities, State of alarms to query for. and the type of alarms to retrieve.
Syntax | Object.ApplyQuery(AlarmQuery, FromPriority, ToPriority, State, Type)
| Parameter | Description
| AlarmQuery | Sets the Alarm Query/Name Manager alias to perform the query against, for example, "\intouch!$System" or a Message tagname.
| FromPriority | Starting priority of alarms. For example, 100.
| ToPriority | Ending priority of alarms. For example, 900.
| State | Specifies type of alarms to display. For example, "UnAck" or Message tagname. Valid states are All, UnAck or Ack.
| Type | Specifies type of query for example, Historical (Historical alarms) or Summary (Summary alarms).
Example | #AlarmViewerCtrl1.ApplyQuery (\InTouch!$System,100,900,"All", "Historical"); where the name of the control is AlarmViewerCtrl1.

### ApplyDefaultQuery

Method: | ApplyDefaultQuery
Purpose: | Performs a query using the properties "From Priority," "ToPriority," "AlarmState," "QueryType," and "AlarmQuery" as specified at design time. The default properties can only be changed at development time and are not overwritten by other alarm queries.
Syntax: | Object.ApplyDefaultQuery()
Example: | #AlarmViewerCtrl1.ApplyDefaultQuery(); where the name of the control is AlarmViewerCtrl1.

### SelectAll

Method: | SelectAll
Purpose: | Toggles the selection of all the alarms in a display. Since the alarm display has only a limited display area, the SelectAll function may select alarms that are not visible in the display.
Syntax: | Object.SelectAll()
Example: | #AlarmViewerCtrl1.SelectAll(); where the name of the control is AlarmViewerCtrl1.

### SelectItem

Method | SelectItem
Purpose | Toggles an alarm record at a given row.
Syntax | Object.SelectItem(Row Number)
| Parameter | Description
| Integer | Row number.
Example | Tag1 = 9 #AlarmViewerCtrl1.SelectItem (Tag1); where the name of the control is AlarmViewerCtrl1 and Tag1 is defined as a memory integer.

### UnselectAll

Method: | UnSelectAll
Purpose: | Unselects all of the selected records.
Syntax: | Object.UnSelectAll()
Example: | #AlarmViewerCtrl1.UnSelectAll(); where the name of the control is AlarmViewerCtrl1.

### SetQueryByName

Method | SetQueryByName
Purpose | Sets the current query as specified by the query name passed. The query name must be in the query favorites file.
Syntax | Object.SetQueryByName
| Parameter | Description
| QueryName | The name of the query as created by using “Query Favorites,” for example, Turbine Queries.
Example | #AlarmViewerCtrl1.SetQueryByName-("Turbine Queries"); where the name of the control is AlarmViewerCtrl1.

### MoveWindow

Method | MoveWindow
Purpose | Scrolls the control as specified by Option and the repeat count.
Syntax | Object.MoveWindow(Option, Repeat)
| Parameter | Description
| Option | The type of action to perform:
|  | Type | Description
|  | LineDn | Line down. The number of lines to be scrolled is reflected by the "repeat" parameter.
|  | LineUp | Line up. The number of lines to be scrolled is reflected by the "repeat" parameter.
|  | PageDn | Page down. The number of pages to be scrolled is reflected by the "repeat" parameter.
|  | PageUp | Page up. The number of pages to be scrolled is reflected by the "repeat" parameter.
|  | Top | To the top of the control.
|  | Bottom | To the bottom of the control.
|  | PageRt | Page to the right. The number of pages to be scrolled is reflected by the "repeat" parameter.
|  | PageLf | Page to the left. The number of pages to be scrolled is reflected by the "repeat" parameter.
|  | Right | Scrolls right. The number of columns to be scrolled is reflected by the "repeat" parameter.
|  | Left | Scrolls left. The number of columns to be scrolled is reflected by the "repeat" parameter.
|  | Home | Scrolls to the top and left most column of the control.
| Repeat | The number of times this operation should be repeated.
Examples | #AlarmViewerCtrl1.MoveWindow (”Bottom”, 0); #AlarmViewerCtrl1.MoveWindow (”LineUp”, 3); #AlarmViewerCtrl1.MoveWindow (”PageLf”, 7); where the name of the control is AlarmViewerCtrl1.

### GetItem

Method: | GetItem
Purpose: | Returns the data at a specified row & column as string.
Syntax: | Object.GetItem(Row Number, Column Name)
| RowNumber | An integer expression that evaluates to a specific row in the control.
| ColumnName | A string expression that evaluates to the column name in the control.
Example: | Tag1 = #AlarmViewerCtrl1.GetItem(1, "Group"); where the name of the control is AlarmViewerCtrl1 and Tag1 is defined as Memory Message.

### ShowContext

Method: | ShowContext
Purpose: | Shows the context sensitive menu if any one of the context-sensitive menus is enabled.
Syntax: | Object.ShowContext()
Example: | #AlarmViewerCtrl1.ShowContext(); where the name of the control is AlarmViewerCtrl1.

### ShowSort

Method: | ShowSort
Purpose: | Shows the "Secondary Sort" dialog.
Syntax: | Object.ShowSort()
Example: | #AlarmViewerCtrl1.ShowSort(); where the name of the control is AlarmViewerCtrl1.

### SetSort

Method: | SetSort
Purpose: | Sets the sort criteria as specified by the "SortColumn" and "SortOrder" properties.
Syntax: | Object.SetSort()
Example: | #AlarmViewerCtrl1.SetSort(); where the name of the control is AlarmViewerCtrl1.

### Click

Event: | Click
Purpose: | Occurs when the user clicks the left mouse button and releases it over the control.
Syntax: | Tagname = #ThisEvent.ClicknRow
| tagname | Tagname holds the clicked record (row) index of the control.
| # Thisevent & ClicknRow | Keywords

Note The ActiveX Alarm Viewer control ignores the UI methods when the method is called from OnStartup event, since the control is not visible yet. The UI methods listed below will be ignored if they are called from OnStartup event:
"ShowSort", "ShowContext", "GetSelectedItem", "GetNext", "GetPrevious" & "AboutBox".DoubleClick

### DoubleClick

Event: | DoubleClick
Purpose: | Occurs when the user double-clicks the left mouse button and releases it over the control.
Syntax: | Tagname = #ThisEvent.DoubleClicknRow
| tagname | Tagname holds the double clicked record (row) index of the control.
| # Thisevent & DoubleClicknRow | Keyword

Note Click and DoubleClick events are zero-based. When Click and/or DoubleClick events are published for the user, the row count in the display starts with 0.

Top of document