Zooms 728x90 Rev.PNG


From Zymergi Support

Jump to: navigation, search

ZOOMS is the Google-like front-end to the PI Server. One text-box, one-button, and search results.


Basic Concepts

The user comes to PI knowing a handful of concepts, mostly related to manufacturing and process, and not so much with PI terminology.


"where" a process step takes place.

A unit is a fundamental concept in chemical processing. Chemical engineering courses teach UO or Unit Operation as part of the curriculum, and even the basic ideas of making chemicals starts with putting fluids in a vessel or a tank or a reactor... such physical equipment are units.

To the real world, a unit is well-defined. To PI, a unit is nothing more than a collection of tags. Maybe you have tags with instruments plugged into the same physical equipment. Maybe you have tags that are coming from the controller of a bioreactor station... To PI, it is just however YOU define this collection of tags.

Users who are close to the operation tend to come to ZOOMS with knowledge of the unit.

Example: I want to know everything that happened on T420


In some plants, you have duplicates of the same unit. You have multiple fermentors or multiple columns. T420 is an instance of a fermentor, but has the same exact properties as T421, T422, T423, T424. Often, manufacturers will group these units and name them, say, "The 400L fermentors."

Users who are less specific about unit often know processClass.

(((Example: You're in charge of the 400L fermentors today)))


another name for a tag.

There is the concept of an unbound alias "My favorite tag" versus a bound alias "pH of T440" where you must specify an additional argument to fully resolve a unique tag. Given that tagnames tend to be automation gibberish to identify an IO, having another name for a tag is very useful. Since tags are grouped (as discussed above in units) an Alias + Unit produces a unique tag (in PI).

Users who are close to the operation tend to come to ZOOMS knowing the alias.

Example: What is the last pH reading from T420


A startTime + endTime or a startTime + duration... some concept of a time...Window. Others may call this an eventFrame, but the concept is the same.

Users who are close to the operation will also ask timeWindow questions of ZOOMS.

Example: What happened in the last day?

ID (of a unitBatch)

Identification of a timeWindow. In many situations, timeWindows are named. They are named because the use of a unit has a starttime and an endtime. And operationally, manufacturers wish to track this equipment usage. Typically a unique identification is assigned to a unit allocation and release. Because these timeWindows are associated with units, there is a concept called the unitBatch that combines the timeWindow, the unit, and the identification.

Users typically do not know the ID. Some may when they find the ID in another system (say a discrepancy system or a manufacturing execution system) and must look up the trends.

Product (or Procedure of a unitBatch)

PI allows (in the PI BatchDatabase) a string to store another attribute. This was historically named, "Product" because the unitBatch was making something while allocated for use.

Users typically know the product.

Example: Show me all the times we made Rituximab in the last month.

Users come to ZOOMS knowing the above concepts. Users of ZOOMS wish to use ZOOMS to find trends. The pathway to get from the users' keywords to trends is depicted in the diagram below:


ZOOMS will have a (1) directory of pre-created pages and an (2) application that will create search results (or I'm feeling lucky and generate the most probably result).

Directory of Pages

This directory of pages is avaiable for the curious user to go ahead and browse.

A page for aliases A page for each alias (e.g. the Glucose Page, the Lactate Page, the "Packed Cell Volume Page") A page for tags A page for each tag A page for units A page for all units A page for all unitBatches (timeWindows) A page for each unitBatch

The workhorse of ZOOMS is the [ZST|Zymergi SQL Tool]. As of 4/2/2008, this is an older version of the more polished ZST, nonetheless, something very close.

ZOOMS connects to [PI|PI] via a PI-OleDb connection string and sends SQL statements to PI. ZOOMS receives the resulting .NET DataSet XML and

  1. Transforms the XML right there and renders it to the web
  2. Writes the transformed XML to disk and redirects to the path for user to download


Because the set of PI vocabulary is small, there is an opportunity to intuit the objective of the user from the keywords they type. The application component aims to skip clicks and intuit the user intention.

The application will parse the keywords and 'operate' on them. As discussed in the basic concepts, the relationship between the keywords are known.

Order of Operation

The actual [zooms-logic|pseudocode/logic] is simple. The keywords interact on a binary level:

   Even though there are 3 elements combined, there is order to the combination.

Binary Combinations:

  1. Alias + Unit = tag
  2. Alias + Product = batch trends, list of unitBatches, list of tags
  3. Alias + Id = batch information
  4. Alias + timeWindow
  5. Unit + Product = list of unitBatches
  6. Unit + Id = a unitBatch
  7. Unit + timeWindow = list of unitBatches
  8. Product + Id = a unitBatch
  9. Product + timeWindow = list of unitBatches
  10. Id + timeWindow = a unitBatch

The thing about Id is that it is highly specific. An Id will, at most, refer to

The combination of these two components is what ZOOMS technically is.


Since the primary objective of a PI user is a trend, the code to generate trends is worthy of discussion. In addition to MIT's SIMILE's Timeplotting tool, an additional Zymergi-created Javascript library is required in the declaration. The library is called, [ZPlot.JS|ZPLOT.JS] and lives in the zooms folder.

Declaring a trend

With zplot.js and SIMILE Timeplot, in the HTML code you need only declare a few HTML elements to automatically get a trend:

 <tag name="SINUSOID" color="#FFAD00"/>
 <tag alias="pH" unit="U_N3_T240" color="#FFAD00"/> 
 <tag name="SINUSOID" color="#FFAD00"/> 
 <tag alias="pH" unit="U_N3_T240" color="#FFAD00"/>

The div element is the crux of the Timeplot. The div element must have an id for the Javascript to identify it. The type attribute must be tr in order for zplot.js to identify it as something to be plotted.

Many trends can be specified per web-page. Many tags can be specified per trend. The trends on the page are permitted to have unique time windows as well.

TimeWindow declaration

As all PI trends must have a timeWindow, so must the
. TimeWindows can be declared in two ways:
  1. Specifying st attribute and the et attribute
    • The attribute st should contain the starttime
    • The attribute et should contain the endtime
  2. Specifying a tw attribute - the tw attribute should contain starttime to endtime (e.g. "*-4d to *")

Tag declaration

Trends must also have tags. There are two ways to specify a tag:

  1. Specifying the name of the tag (e.g. name="CDM158")
  2. Specifying the alias and unit combination (e.g. alias="pH" unit="U_N3_T240")


This project was originally cast as

  1. Using ZST to enable common queries of PI (show me list of aliases, show me tag values during a timeWindow)
  2. Using Google's index and user presentation to create a "Google" front-end to PI

The discovery that PI is rich with timestamped data and poor with metadata (even fully configured to have aliases and units and unitBatch timeWindow generation), that the results were rather pitiful. This finding led to the creation of the intuit application that enables the "I'm feeling lucky" feature of ZOOMS.


Slated for version 2.0 of ZOOMS.PI are:

  • PI-SDK-based version where PI OleDb and the PI Data Pack are not required. This is so users of PI Basic Server can enjoy ZOOMS.PI
  • Server-based handling of the trend plotting (currently done in JavaScript)
  • Autocomplete that is more up-to-date.

See Also

Personal tools