Download presentation
Presentation is loading. Please wait.
Published byMeryl O’Connor’ Modified over 6 years ago
1
Henk Boterenbrood Benjamin Farnham Vyacheslav Filimonov Sebastien Franz Piotr Nikiel Jolanta Olszowska Stefan Schlenker OpcUaCanOpenServer Program interface between CANopen device and SCADA system OPC UA client
2
Overview Readout Platform Field Distributed SCADA SCADA WinCC OA
CANopen Device node_id=k CANopen Device node_id=2 ELMB node_id=n ELMB node_id=2 ELMB node_id=1 Readout Platform SCADA WinCC OA CAN Hardware Interface Type X CAN Hardware Interface Type Y CANopen Device node_id=1 CAN Hardware Interface Type Z OPC UA CANopen Server Standalone OPC UA Client Component-Specific Messages via e.g. USB, Ethernet, PCIe CANopen Messages via CAN Bus OS Function Calls OPC UA Protocol via TCP/IP Distributed SCADA CAN Driver Type X CAN Driver Type Y CAN Driver Type Z HW Component Overview
3
Support all general CANopen protocol objects and operations (NMT,SDO,PDO,NG, Emergency, Sync…)
Segmented SDO ELMB extensions Event-driven processing of calculation items Hardware driver plugins Linux and Windows Main Features
4
Unified Automation C++ OPC UA Toolkit
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 OpcUaClient was written using this toolkit Toolkit and UA stack – same developers (Ascolab) Unified Automation C++ OPC UA Toolkit
5
Address Space Interface
OPC UA Server Can Interface CAN Interface Driver Component OPC UA Address Space OPC UA Client Node Manager read/write data notifications Configuration Address Space Interface CANopen commands send/receive messages OPC UA Stack Architecture HW-specific Custom XSD Configuration OPC UA toolkit Codebase:
6
Configuration 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 <xs:complexType name="CanOpenOpcServerConfig"> <xs:sequence> <xs:element name="NODETYPE“ type="NODETYPE" minOccurs="0” maxOccurs="unbounded"/> <xs:element name="CANBUS" type="CANBUS" minOccurs="0“ maxOccurs="unbounded"/> <xs:element name="REGEXPR" type="REGEXPR" <xs:element name="ITEM" type="ITEM" </xs:sequence> </xs:complexType> Configuration
7
XML Configuration – Example
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE CanOpenOpcServerConfig [<!ENTITY ELMB SYSTEM ".\OPCUA_nodeType_ELMB.xml">]> <CanOpenOpcServerConfig xmlns:xsi=" xsi:noNamespaceSchemaLocation="..\Configuration\CANOpenServerConfig.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 ="$VAL1" value="TPDO3\.Value\_\d*[13579]"/> <REGEXPR name ="$VAL2" value="TPDO3\.Value\_\d*[02468]"/> <ITEM name="Temp" value="($VAL1+$VAL2)/2" when="$VAL1"/> </NODE> <NODE type="ELMB" name="ELMB_11" nodeid="11"/> </CANBUS> </CanOpenOpcServerConfig> Include file Check syntax Node types Calculation items XML Configuration – Example
8
XML Configuration – Node Type Example
<?xml version="1.0" encoding="UTF-8" ?> <NODETYPE name="ELMB" > <SDOITEM subindex="0" access="R" type="byte" index="1001" name="NodeError" /> <SDO index="100A" name="elmbSw" > <SDOITEM subindex="0" access="R" type="UInt32" name="swVersion" /> <SDOITEM subindex="1" access="R" type="UInt32" name="swMinorVersion" /> </SDO> <TPDO1 access="R" name="TPDO1" 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" /> </TPDO1> <TPDO3 access="R" numch="64" name="TPDO3" cobid="380" > <PDOITEM type="byte" name="Flag" byteindex="1" /> <PDOITEM type="UInt32" name="Value" byteindex="2" /> </TPDO3> </NODETYPE> XML Configuration – Node Type Example
9
Client-Server-Interaction
Possible Client Operations Read (Single query) WinCCOA: Polling (read periodically set of Items) Write (dpSet) Subscription OpcUa Server Operations Read Callback – PDO, Emergency… UaVariable_Value_CacheIsSource IOManagerSDO: one thread per node, allows to send/receive data in parallel to/from different nodes UaVariable_Value_Cache Write IOManager SDO: one thread per node . IOManagerPDO: one thread per bus Monitoring PDO, Calculation Item … (Default IOManager) Client-Server-Interaction OpcUa Server Operation Read Callback - PDO, Emergency… UaVariable_Value_CacheIsSource) IOManagerSDO SDO, one thread per node, allows to send/receive data in parallel to/from different nodes (UaVariable_Value_Cache) Write IOManager SDO SDO one thread per node . IOManagerPDO PDO one thread per bus Monitoring PDO, Calculation Item … (Default IOManager)
10
Readout Interface Plugins
Linux Windows SocketCan – used in production Native Kvaser driver Systec Peak PCAN Kvaser class CCanAccess { public: CCanAccess() {}; virtual bool createBUS(const char *, const char *) = 0 ; virtual bool sendRemoteRequest(short ) = 0; virtual bool sendMessage(short, unsigned char, unsigned char *) = 0; char *getBusName() { return busName; } virtual ~CCanAccess() {}; boost::signals2::signal<void (const canMessage &)> canMessageCame; boost::signals2::signal<void (const int, const char *, timeval &)> canMessageError; protected: char *busName; } Readout Interface Plugins
11
Status Current version 2.0.2-1 Production: Documentation: doxygen
OpcUaCanOpenServer 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 SocketCAN interface and SYSTEC hardware Documentation: doxygen Status
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.