Henk Boterenbrood Benjamin Farnham Vyacheslav Filimonov Sebastien Franz
Henk Boterenbrood Benjamin Farnham Vyacheslav Filimonov Sebastien Franz Piotr Nikiel Jolanta Olszowska Stefan Schlenker Opc. Ua. Can. Open. Server Program interface between CANopen device and SCADA system OPC UA client
Readout Platform Win. CC OA OPC UA Client SCADA Win. CC OA OPC UA Protocol OPC UA CANopen Server via TCP/IP HW Component OS Function Calls CAN Driver Type X CAN Hardware Interface Type X ELMB node_id=1 Field Overview Standalone OPC UA Client Distributed SCADA ELMB node_id=2 ELMB node_id=n CAN Driver Type Y CAN Hardware Interface Type Y ELMB node_id=1 ELMB node_id=2 ELMB node_id=n CAN Driver Type Z CAN Hardware Interface Type Z CANopen Device node_id=1 CANopen Device node_id=2 CANopen Device node_id=k Component. Specific Messages via e. g. USB, Ethernet, PCIe CANopen Messages via CAN Bus
Support all general CANopen protocol objects and operations (NMT, SDO, PDO, NG, Emergency, Sync…) Segmented ELMB SDO extensions Event-driven Hardware Linux processing of calculation items driver plugins and Windows Main Features
Support most of OPC UA features Data Access Alarm & Event Historical trend Security SOAP interface is absent (in C++ version) Windows & Linux Good Documentation Source code WINCC OA Opc. Ua. Client was written using this toolkit Toolkit and UA stack – same developers (Ascolab) Unified Automation C++ OPC UA Toolkit
Address Space Interface notifications Driver Component Codebase: HW-specific OPC UA Address Space commands OPC UA Client CAN Interface read/write data OPC UA Server CANopen Interface send/receive messages OPC UA Stack Can Interface Architecture Configuration Node Manager Custom XSD Configuration OPC UA toolkit
Schema document predefined Code Synthesis XSD tool Linux, Windows Open Source Utility to create the parser code Very simple configuration C++ classes for parsing XML file Automatic syntax checking Configuration <xs: complex. Type name="Can. Open. Opc. Server. Config"> <xs: sequence> <xs: element name="NODETYPE“ type="NODETYPE" min. Occurs="0” max. Occurs="unbounded"/> <xs: element name="CANBUS" type="CANBUS" min. Occurs="0“ max. Occurs="unbounded"/> <xs: element name="REGEXPR" type="REGEXPR" min. Occurs="0“ max. Occurs="unbounded"/> <xs: element name="ITEM" type="ITEM" min. Occurs="0“ max. Occurs="unbounded"/> </xs: sequence> </xs: complex. Type>
Include Check Node file syntax types Calculation items <? xml version="1. 0" encoding="UTF-8" ? > <!DOCTYPE Can. Open. Opc. Server. Config [<!ENTITY ELMB SYSTEM ". OPCUA_node. Type_ELMB. xml">]> <Can. Open. Opc. Server. Config xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: no. Namespace. Schema. Location=". . ConfigurationCANOpen. Server. Config. xsd"> &ELMB; <CANBUS speed="125000" port="14" type="st" name="Bus_1” nmt = “start"> <NODEGUARD interval="0"/> <SYNC interval="0"/> <NODE type="ELMB" name="ELMB_1" nodeid="1"> <REGEXPR name ="$VAL 1" value="TPDO 3. Value_d*[13579]"/> <REGEXPR name ="$VAL 2" value="TPDO 3. Value_d*[02468]"/> <ITEM name="Temp" value="($VAL 1+$VAL 2)/2" when="$VAL 1"/> </NODE> <NODE type="ELMB" name="ELMB_11" nodeid="11"/> </CANBUS> </Can. Open. Opc. Server. Config> XML Configuration – Example
<? xml version="1. 0" encoding="UTF-8" ? > <NODETYPE name="ELMB" > <SDOITEM subindex="0" access="R" type="byte" index="1001" name="Node. Error" /> <SDO index="100 A" name="elmb. Sw" > <SDOITEM subindex="0" access="R" type="UInt 32" name="sw. Version" /> <SDOITEM subindex="1" access="R" type="UInt 32" name="sw. Minor. Version" /> </SDO> <TPDO 1 access="R" name="TPDO 1" cobid="180" rtr = "init"> <PDOITEM bit="0" type="bit" name="di_F_0" byteindex="0" /> <PDOITEM bit="1" type="bit" name="di_F_1" byteindex="0" /> </TPDO 1> <TPDO 3 access="R" numch="64" name="TPDO 3" cobid="380" > <PDOITEM type="byte" name="Flag" byteindex="1" /> <PDOITEM type="UInt 32" name="Value" byteindex="2" /> </TPDO 3> </NODETYPE> XML Configuration – Node Type Example
Possible Client Operations 1. Read (Single query) 2. Win. CCOA: Polling (read periodically set of Items) 3. Write (dp. Set) 4. Subscription Opc. Ua A. Server Operations Read Callback – PDO, Emergency… Ua. Variable_Value_Cache. Is. Source IOManager. SDO: one thread per node, allows to send/receive data in parallel to/from different nodes Ua. Variable_Value_Cache B. Write IOManager SDO: one thread per node. IOManager. PDO: one thread per bus C. Monitoring PDO, Calculation Item … (Default IOManager) Client-Server-Interaction
Linux Socket. Can – used in production Native Kvaser driver Windows Systec Peak PCAN Kvaser class CCan. Access { public: CCan. Access() {}; virtual bool create. BUS(const char *, const char *) = 0 ; virtual bool send. Remote. Request(short ) = 0; virtual bool send. Message(short, unsigned char *) = 0; char *get. Bus. Name() { return bus. Name; } virtual ~CCan. Access() {}; Readout Interface Plugins boost: : signals 2: : signal<void (const can. Message &)> can. Message. Came; boost: : signals 2: : signal<void (const int, const char *, timeval &)> can. Message. Error; protected: char *bus. Name; }
Current version 2. 0. 2 -1 Production: Opc. Ua. Can. Open. Server working on >15 ATLAS projects CIC ~40 busses, 300 ELMBs TGC & MDT ~100 busses, 3000 ELMBs Until end of 2014 to be installed on all ATLAS projects with ELMB readout All under Linux with Socket. CAN interface and SYSTEC hardware Documentation: Status doxygen
- Slides: 11