December 14, 2011
Quality System Integration: Closing the Loop with OPC
InfinityQS DMS and ProFicient DCS recently support new handshaking features that allow them to communicate at improved data rates. The Data Collection Service no longer needs to wait for the Data Management Service to publish new values. Instead DCS can request data from DMS automatically.
But more specifically, I want to talk about the new post-back capability that enables DCS to post values back to DMS Items. For example, after DCS saves a subgroup it could post some value back to a DMS Item as a way of acknowledging the save was performed. Now connect that DMS Item to an OPC Item and you are able to change the state of some PLC device right on your production line.
This new post-back capability is not just a tight relationship between DMS and DCS, though. You can even create your own custom software application that can post values to DMS Items and ultimately right down to your production floor equipment!
Imagine a manufacturing environment that runs with minimal user involvement. Equipment on the line is controlled by PLC (Program Logic Controller) devices which are managed by OPC Server software. To learn more about OPC go to www.opcfoundation.org.
The goal of this project is to have ProFicient stop a manufacturing line any time a quality violation occurs. Below is a description of the modules used to close-the-loop.
- Automated test equipment on the line provides real-time test results through PLC devices.
- The PLC manufacturer provides OPC Server software to interact with those devices.
- InfinityQS DMS (Data Management System) acquires device values by communicating with the OPC Server through an OPC Client adapter. Other DMS adapters could also bring in related details from other system such as the active material, job number and more.
- ProFicient DCS (Data Collection Service) periodically pulls in data samples from DMS and saves them to ProFicient Quality Suite.
- ProFicient RAMS (Remote Alarm Monitoring Service) evaluates the saved samples and writes Process Events for samples that violate their preset quality rules.
- ProFicient REMS (Remote Event Monitoring Service) acts upon these new Process Event violations by launching preconfigured software applications.
- One of these preconfigured software applications is DMSPost.exe which posts a value back to the DMS OPC Client adapter.
- The DMS OPC Client adapter sends the posted value back to OPC Server.
- OPC Server passes the value to the PLC device which stops the line.
DMSPost.exe is a simple application that makes this closed-loop feedback possible. The remainder of this article will focus on DMSPost.exe. But if you are interested in learning more about the others tools mentioned above, contact InfinityQS Technical Services who can help you apply them in your manufacturing environment.
First, DMS needs to have an OPC Provider created that communicates with an OPC Server and its OPC Items. Some of these OPC Items need to be read, such as "Temperature" and "SetPoint", and their acquired values will ultimately be compiled and saved as ProFicient data samples. Other OPC Items, like "CurrentState" will be written to by DMSPost.exe. Setting "CurrentState" to 1 starts the line. Setting it to zero (0) stops the line.
DMSPost.exe was developed using Microsoft Visual Studios 2010. This software project references a DMS software library (DLL) which allows it to connect to DMS Providers and post values to their DMS Items. Once developed and tested, DMSPost.exe must be copied to the folder where the library resides (C:\Program Files\InfinityQS International\DMS). DMSPost.exe is launched with command line information that instructs it to post specific values to specific DMS Items.
The command below directs DMSPost to set the DMS Item, "Line001\CurrentState" to a value of "1".
"C:\Program Files\InfinityQS International\DMS\DMSPost.exe" Line001\CurrentState=1
The command below directs DMSPost to set the DMS Item, "Line001\CurrentState" to a value of "0".
"C:\Program Files\InfinityQS International\DMS\DMSPost.exe" Line001\CurrentState=0
In ProFicient REMS an item is added that watches for specific alarm types (>USL, <LSL, >UCL and <LCL). The other configured properties include:
Application: C:\Program Files\InfinityQS International\DMS\DMSPost.exe
Command Line: %process%\CurrentState=0
Now, any time REMS receives an alarm, let's say for the "Line001" process, it would launch DMSPost.exe and would pass in "Line001\CurrentState=0". Once DMS receives this posted message, it routes the value to the OPC Server, which routes the value to the PLC device, which stops the line.
To develop an application in Microsoft Visual Studios 2010, you create a project and reference the DMS software library (C:\Program Files\InfinityQS International\DMS\InfinityQS.DMS.dll). My software was a bit more complicated because it parsed command line information. But a simple application could set a DMS Item value in as few as three lines of code. Here's a VB example.
'Create a DMS Client that will be used for post-backs
Dim oDMSClient As New InfinityQS.DMS.DMSClient
'Post the value to the server/item
oDMSClient.PostBack("*", "Line001", "CurrentState", 0)
'Keep the thread alive for a moment before closing the application
It is important to note that different DMS Providers deal with post-backs differently. OPC Providers are able to set OPC Item values, but only if those items are writable. A Grid Provider linked to a serial device sends the specified value (a read command, for example) across the serial stream, regardless of which DMS Item is specified. A Grid Provider linked to TCP/IP sends the value (a reset command, for example) over Ethernet. Post-backs to other types of providers are ignored at this time.
Quality System Integration will often mean something slightly different from one manufacturing environment to the next. But some type of closed-loop integration is a common theme for many InfinityQS users. How might these post-back features work for you and your company? Contact InfinityQS Technical Services for ideas. It's what we do!