Extensible Object Model at the heart of Adroit

Get Adroit

One of Adroit’s most compelling benefits is an extensible object model at the heart of the I/O server. For OEMs and Integrators it allows you to create sophisticated, high-performance, display, control, and data acquisition “products” in such a way that the resulting “badged” application effectively appears as your own without the cost and overhead of retaining a large, expensive team of software developers.

Typical Adroit system architecture

The diagram shows a typical system with Adroit I/O and Graphics servers connecting to separate networks: an Office/IT network of client workstations, as well as a SCADA/Plant network of PLCs. Note: it is not essential, just recognized good practice, to separate the plant and office networks. In fact, for simple, standalone applications, there may be no office network at all, in that workstation (HMI) functions and server functions all run in a single PC or tablet.

Objects in the I/O server are called agents in Adroit terminology, and range in type from simple Boolean, Integer, Real types, through conventional SCADA types like Digital, Analog, right up to rich data types that, on their own, implement complete sub-systems such as Alarm Management, Overall Equipment Effectiveness, etc.

By following a few fairly simple development conventions and rules, it is possible for OEMs to add new, rich data types of their own to the Adroit I/O server, and is primarily what we mean by describing the object model as being extensible.

An example of this is marine, ship-board environments where the monitoring required for liquid levels in vessels needs to be radically different to that in static, land-based environments. OEMs in this sector have been able to build their own custom Analog data types that provide delayed level-alarming in which transient threshold overshoots are ignored as the vessel moves around in rough seas.

Other examples of industry-specific data types exist in different industry sectors resulting in the greatest possible fitness for purpose across a wide spectrum of industries.

Another key benefit in Adroit is the availability, at no cost, of dozens of drivers for a wide range of different front-end equipment types. A native Adroit driver exists for all major PLC models including an OPC DA client that will interface to any OPC DA server. But, if you have a very specialized piece of equipment for which a driver does not exist, a new driver can be created in a similar way to which server data types are created. Multiple different types of drivers can concurrently be connected to the I/O server thereby allowing simultaneous control and acquisition to and from many different types of equipment.

FurtherI/O server extensibility comes in the form of several open system interfaces including: OLE Automation, ActiveX Server Control, ADO, OPC DA, and COM Interop

OLE Automation
Also known as the Dispatch or Programmability Interface, OLE Automation exposes objects, methods and properties to programming tools and other applications that support Automation. Adroit’s I/O server implements the IDispatch interface to enable access by Automation clients, such as Visual Basic, and provides the following methods (alphabetically ordered):
AlarmTagConfigure an agent for alarming
ConnectConnect to a server on a remote computer
CreateAgentAdd a new agent directly to the server
FetchRead a single tag value from the server
FetchTagsRead multiple tag values from the server
FetchChangesRetrieve a list of historically logged value changes from the server
FetchValuesRetrieve a list of historically logged values from the server
GetSlotInfoQueries information about the different slots constituting an agent
JoinGroup one or more agents together
LeaveRelinquish group membership for one or more agents
LogTagConfigure a tag for historical data logging
PokeModify a single tag value in the server
RemoveAgentRemove an agent from the server
ScanTagConfigure a tag for scanning

ActiveX Server Control
The Adroit Server ActiveX control (AdroitX.ocx) can be hosted in any ActiveX client. It is similar to the OLE Automation IDispatch interface in that it offers a similar range of Automation methods. But, in addition, since ActiveX controls offer an unsolicited callback mechanism (event firing), AdroitX.ocx provides a subscription capability whereby value changes can be received in the client in an unsolicited fashion as opposed to the usual synchronous poll-response approach. AdroitX.ocx also has several properties that support dual-redundant server clustering.

Microsoft’s ActiveX Data Objects (ADO) comprise a set of objects for accessing data sources. They provide a middleware layer between programming languages and a means of accessing data stores, whether databases or not, in a uniform manner. ADO allows a developer to write programs that access data without knowing how the database is implemented. Several I/O server components and subsystems such as Historical Logging (Datalog, DBLog), Alarm Management, DB Access, OEE, Auditing, etc., make use of ADO to insert, update, retrieve, or delete database records in any SQL and ADO compliant database such as SQL Server, Oracle, etc.

As well providing OPC DA support in the form of an OPC client driver to communicate with any OPC DA server, the Adroit I/O server itself provides an OPC DA server interface so that any OPC DA client such as an MES, ERP, or other IT system can gain read-write access to any tag value in an Adroit I/O server.

COM Interop
COM Interop is a technology included in the .NET Framework Common Language Runtime (CLR) that enables unmanaged code Component Object Model (COM) objects to interact with managed code .NET objects, and vice versa.

Although it may not be obvious from the diagram, there is another interface supported by the Adroit I/O server, that is a really an internal interface used by SmartUI graphics. Because SmartUI graphics are all .NET managed code and the Adroit I/O server is unmanaged code, the AdroitCOM interop DLL is needed to allow these two major subsystems in Adroit to interact effectively.

Even though AdroitCOM.dll is primarily an internal interface, because of .NET support for Intellisense – Intelligent code completion, it is eminently possible, given a proper development environment supporting Intellisense to interact programmatically with the Adroit I/O server from a managed code environment. One use for this kind of thing might be in developing a web-service interface to the Adroit I/O server.

Graphics Extensibility

So far we have talked mostly about extensibility within, and interfacing to the Adroit I/O server by creating custom data types or drivers or interacting with external 3rd party products via one or more of the open system interfaces previously listed.

Another area of extensibility within Adroit is in the graphical user interface or HMI created by the SmartUI Designer hosted in the graphics server, and deployed via SmartUI Operator SmartUI is essentially a collection of specialized Windows Forms called Graphic Forms. Individual forms can be considered containers for Controls, either .NET Windows Components or legacy ActiveX controls. There are thus three identifiable ways in which SmartUI extensibility can be achieved: Parameterized Forms, Custom Windows Components, ActiveX Controls:

Parameterized Forms
It is possible, instead of just providing hard-coded data element specifications for designating tag values on graphic forms, e.g. “ANALOG01.value”, to parameterize any part the string by enclosing the parameterized part inside curly braces, e.g. “ANALOG{ItemNo}.value”. Taking advantage of this, graphic form templates and wizards can be constructed that have application to more than just a single aspect of your project. Furthermore, one of the standard controls that ships with SmartUI, TemplateGO (Template Graphic Object), is itself a graphic form container that can host other, possibly parameterized, forms. There is no theoretical limit to the number of levels you can create in nesting graphic forms inside each other, and in this way comprehensive hierarchies of child forms within parent forms can be built up that are completely parameterized and therefore extremely reusable.

Windows Components and Controls
In .NET parlance, a Windows Control is a Windows Component that has design-time user interface. So every Windows Control is also a Windows Component, but not all Windows Components are Controls. SmartUI graphic forms are containers for Windows Components and therefore Windows Controls, as well as legacy ActiveX Controls. SmartUI Designer contains dozens of different controls grouped into various categories. Shown in Figure 2 below are some standard Windows Forms controls, as well as some special SCADA controls. As we have mentioned it is possible to create your own Windows Components, as well as to re-use existing legacy ActiveX controls.

Some of the available graphic form controls in SmartUI Designer

Call To Action
By taking full advantage of one or more of the various axes of extensibility within Adroit Smart SCADA that have been described in this data sheet, OEMs and high-end System Integrators can engineer and “productize” a high-value, industry-specific solution rather than just deliver a once-off project. Comprehensive System Integrator and OEM programmes exist that have attractive volume discounts for this kind of thing. With full product source code locally available, training and support is geared to helping you build high-value, high-performance solutions that you can deploy effectively and economically.

Read up more on Adroit and get hold of it from the SmartSCADA page