The title of this post is what inspired me to develop the EtherNet/IP WCF Adapter Service and associated Logix Library. At a recent contract for a large coal outloading terminal, a project was underway to introduce MS BizTalk as the ESB. The project was to introduce a new MES, a finite capacity scheduling application, as well as some JD Edwards integration. Naturally, being a fully automated terminal, integration with the control system was also required. The integration method of choice was to be (WCF) Web Services, primarily for their SOA enabling characteristics.
At the time an assessment of what was available in terms of Web Services (for Rockwell ControlLogix processors) was fairly limited especially where bi-directional message exchange patterns and custom XML schemas were concerned. Hence commenced an 18-month development cycle to produce a WCF adapter for communication with EtherNet/IP devices.
In order for the development to be a success, some critical criteria had to be met. The solution would have to:
- Leverage existing technologies: WCF Web Services and EtherNet/IP explicit messaging
- Not require per-message-instance configuration (hence adapter as opposed to middleware)
- Support user defined XML Schemas
- Provide bi-directional, synchronous messaging
What resulted are the two packages on my web site. A generic EtherNet/IP WCF Adapter and a Logix Library for Rockwell ControlLogix processors. Within the latter I have developed two custom pipeline components for BizTalk; the LogixEncoder and LogixDecoder.
Architectural Overview
The image below shows the solution from a data perspective. A key aspect of the Logix Library is it's ability to translate ControlLogix UDT exports (L5X) to type equivalent XML Schema documents. The XSD is then used by both the encoding and decoding functions to format binary on EtherNet/IP and XML on the WCF side of the adapter.
In a post to follow I'll walk through the process of implementing each MEP using BizTalk Pipelines (no need for orchestrations) and standard RSLogix message (MSG) instructions.
|