Przeglądaj źródła

improve the documentation

Julius Pfrommer 9 lat temu
rodzic
commit
1004a7fa58
1 zmienionych plików z 106 dodań i 24 usunięć
  1. 106 24
      doc/mainpage.dox

+ 106 - 24
doc/mainpage.dox

@@ -1,29 +1,111 @@
 /**
 \mainpage Open62541 Developer Documentation
 
-<a href="http://en.wikipedia.org/wiki/OPC_Unified_Architecture">OPC UA</a>
-(short for OPC Universal Architecture) is a communication protocol originally
-developed in the context of industrial automation. OPC UA has been released as
-an “open” standard (meaning everybody can buy the document) in the IEC 62541
-series. As of late, it is marketed as the one standard for non-realtime
-industrial communication.
-
-Remote clients can interact with a \ref server by calling remote \ref services.
-(The services are different from a remote procedure call that is provided via
-the "Call" service.) The server contains a rich information model that defines
-an object system on top of an ontology-like set of nodes and references between
-nodes. The data and its "meta model" can be inspected to discover variables,
-objects, object types, methods, data types, and so on. Roughly, the \ref
-services provide access to
-
-- Session management
-- CRUD operations on the node level
-- Remote procedure calls to methods defined in the address space
-- Subscriptions to events and variable changes where clients are notified via push messages.
-
-The data structures the services process as in- and output can be encoded either
-as a binary stream or in XML. They are transported via a TCP-based custom
-protocol or via Webservices. Currently, open62541 supports only the binary
-encoding and TCP-based transport.
+<a href="http://en.wikipedia.org/wiki/OPC_Unified_Architecture">OPC UA</a> (short for OPC Universal
+Architecture) is a protocol for industrial communication and has been standardized in the IEC62541.
+At its core, OPC UA defines a set of services to interact with a server-side object-oriented
+information model. Besides the service-calls initiated by the client, push-notification of remote
+events (such as data changes) can be negotiated with the server. The client/server interaction is
+mapped either to a binary encoding and TCP-based transmission or to SOAP-based webservices. As of
+late, OPC UA is marketed as the one standard for non-realtime industrial communication.
+
+We believe that it is best to understand OPC UA *from the inside out*, building upon conceptually
+simple first principles. After establishing a first understanding, we go on explaining how these
+principles are realized in detail. Examples are given based on the *open62541* implementation of the
+standard.
+
+OPC UA, a collection of services
+--------------------------------
+
+In OPC-UA, all communication is based on service calls, each consisting of a request and a response
+message. Be careful to note the difference between services and methods. Services are pre-defined in
+the standard and cannot be changed. But you can use the *Call* service to invoke user-defined
+methods on the server.
+
+For completeness, the following tables contain all services defined in the standard. Do not bother
+with their details, yet. We will introduce the different services later in the text. In open62541,
+each service is implemented in a single function. See the \ref services section for details.
+
+__Establishing communication__
+
+| Discovery Service Set | SecureChannel Service Set | Session Service Set |
+|-----------------------|---------------------------|---------------------|
+| FindServers           | OpenSecureChannel         | CreateSession       |
+| GetEndpoints          | CloseSecureChannel        | ActivateSession     |
+| RegisterServer        |                           | CloseSession        |
+|                       |                           | Cancel              |
+
+__Interaction with the information model__
+
+| NodeManagement Service Set | View Service Set               | Query Service Set | Attribute Service Set | Method Service Set |
+|----------------------------|--------------------------------|-------------------|-----------------------|--------------------|
+| AddNodes                   | Browse                         | QueryFirst        | Read                  | Call               |
+| AddReferences              | BrowseNext                     | QueryNext         | HistoryRead           |                    |
+| DeleteNodes                | TranslateBrowsePathsToNodeIds  |                   | Write                 |                    |
+| DeleteReferences           | RegisterNodes                  |                   | HistoryUpdate         |                    |
+|                            | UnregisterNodes                |                   |                       |                    |
+
+__Notifications__
+
+| MonitoredItem Service Set | Subscription Service Set |
+|---------------------------|--------------------------|
+| CreateMonitoredItems      | CreateSubscription       |
+| ModifyMonitoredItems      | ModifySubscription       |
+| SetMonitoringMode         | SetPublishingMode        |
+| SetTriggering             | Publish                  |
+| DeleteMonitoredItems      | Republish                |
+|                           | TransferSubscription     |
+|                           | DeleteSubscription       |
+
+
+OPC UA, a web of nodes
+----------------------
+
+The information model in each OPC UA server is a web of interconnected nodes. There are eight
+different types of nodes. Depending on its type, every node contains different attributes. Some
+attributes, such as the *NodeId* (unique identifier) and the *BrowseName*, are contained in all node
+types.
+
+<table>
+<tr> <td>ReferenceTypeNode</td> <td>MethodNode</td> </tr>
+<tr> <td>DataTypeNode</td> <td>ObjectTypeNode</td> </tr>
+<tr> <td>VariableTypeNode</td> <td>ObjectNode</td> </tr>
+<tr> <td>VariableNode</td> <td>ViewNode</td> </tr>
+</table>
+                                                                                                            
+Nodes are interconnected by directed reference-triples of the form `(nodeid, referencetype,
+target-nodeid)`. Therefore an OPC UA information model is easiest imagined as a __web of nodes__.
+Reference types can be
+- standard- or user-defined and
+- either non-hierarchical (e.g., indicating the type of a variable-node) or hierarchical (e.g., indicating a parent-child relationship).
+
+
+OPC UA, a protocol
+------------------
+
+The OPC UA protocol (both binary and XML-based) is based on 25 *built-in* datatypes. In open62541, these
+are defined in ua_types.h.
+
+<table>
+<tr> <td>Boolean</td> <td>Float</td> <td>StatusCode</td> </tr>
+<tr> <td>SByte</td> <td>Double</td> <td>QualifiedName</td> </tr>
+<tr> <td>Byte</td> <td>String</td> <td>LocalizedText</td> </tr>
+<tr> <td>Int16</td> <td>DateTime</td> <td>ExtensionObject</td> </tr>
+<tr> <td>UInt16</td> <td>Guid</td> <td>DataValue</td> </tr>
+<tr> <td>Int32</td> <td>ByteString</td> <td>Variant</td> </tr>
+<tr> <td>UInt32</td> <td>XmlElement</td> <td>DiagnosticInfo</td> </tr>
+<tr> <td>Int64</td> <td>NodeId</td> <td> </td> </tr>
+<tr> <td>UInt64</td> <td>ExpandedNodeId</td> <td> </td> </tr>
+</table>
+
+The builtin datatypes are combined to more complex structures. When the structure contains an array,
+then the size of the array is stored in an Int32 value just before the array itself. A size of -1
+indicates an undefined array. Positive size (and zero) have the usual semantics.
+
+Most importantly, every service has a request and a response message defined as such a data
+structure. Their exact definitions can be looked up here:
+https://opcfoundation.org/UA/schemas/Opc.Ua.Types.bsd.xml. In open62541, we autogenerate the
+C-structs to handle the standard-defined structures automatically. See ua_types_generated.h for
+comparison. The entire OPC UA protocol revolves around the exchange of these request and response messages.
 
 */