zerodds-opcua-pubsub
OPC-UA stack. OPC Foundation Part 14 (PubSub, UADP) with the Part 6 binary encoding, in pure Rust.
- Source: crates/opcua-pubsub
- API docs: docs.rs/zerodds-opcua-pubsub
zerodds-opcua-pubsub adds the Part 14 publish/subscribe transport on top of
zerodds-opcua-gateway, the OMG DDS-OPCUA 1.0 type-system and AddressSpace mapping,
which has no wire I/O of its own. It encodes the gateway types (NodeId,
Variant, DataValue, …) in the Part 6 binary encoding (little-endian, no
alignment padding) and frames them as UADP NetworkMessages. DDS-OPCUA 1.0 bridges OPC-UA
into the DDS data space; Part 14 is OPC-UA's own publish/subscribe protocol. The crate is an
additional profile and does not change the gateway.
binary—UaEncode/UaDecode,UaReader/UaWriter; built-in types includingNodeId,ExpandedNodeId,Guid,QualifiedName,LocalizedText,ExtensionObject,Variant,DataValue.uadp—NetworkMessage(flag bytesUADPFlags,ExtendedFlags1,ExtendedFlags2, group and payload headers) andDataSetMessage(field encodings Variant, RawData, DataValue; KeyFrame, DeltaFrame, Event, KeepAlive); discovery requests and responses forDataSetMetaData,PublisherEndpointsandDataSetWriterConfiguration. Chunked NetworkMessages are rejected on decode.config,writer,reader— configuration model (connection, writer and reader groups, DataSetWriter and DataSetReader configuration);PublishedDataSet,DataSetWriterwith content mask and key-frame policy,WriterGroup;DataSetReaderfilters by PublisherId, WriterGroupId and DataSetWriterId and decodes with theDataSetMetaData;ReaderGroup.dynamic— decoding of RawData fields of custom structured, enumerated or simple types into aDynamicValuetree driven by the metadata.infomodel— the PubSub configuration as AddressSpace nodes underPublishSubscribe, with the management operations (AddConnection,AddWriterGroup, …,Remove…).transport—PubSubTransporttrait;UdpTransportandLoopbackTransport(std);MqttTransport,AmqpTransportandKafkaTransportover injected client traits;EthernetTransportover an injectedEthernetInterface, so the raw socket stays in the caller's implementation. TSN timing guarantees are outside this crate.security(feature) —PubSub-Aes128-CTR,PubSub-Aes256-CTR(AES-CTR with HMAC-SHA256 signature) andPubSub-Aes256-GCM;SecurityKeyServicekeyed bySecurityTokenId.json(feature) — JSON message mapping (JsonNetworkMessage,MessageType"ua-data") on the reversible JSON encoding.bridge,daemon— DataSet ↔ DDS sample mapping over theDdsPublisher/DdsSubscribertraits (no dependency onzerodds-dcps);Publisher::publish_cycleandSubscriber::polldrive the groups over a transport, with secured variants undersecurity.
Spec anchors
- OPC UA Part 6 §5.2 (binary encoding; §5.2.2.9–§5.2.2.17 built-in structured types), §5.4 (reversible JSON encoding).
- OPC UA Part 14 §6.2 (configuration model; §6.2.4/§6.2.5 publishing, §6.2.6 PubSubConnection, §6.2.7/§6.2.8 subscribing), §7.2.2.2 (NetworkMessage), §7.2.2.3 (DataSetMessage), §7.2.2.4 (discovery), §7.2.3 (JSON mapping), §7.3.3 (Ethernet), §7.3.4 (MQTT), §7.3.5 (UDP), Annex B.2 (Kafka), Annex B.3 (AMQP), §8 (security; §8.2.1 policies), §9 (information model).
- Coverage: opcua-pubsub-1.05.
Consumers
zerodds-opcua-uacp(reuses the binary codec).zerodds-opcua-server.zerodds-opcua-bridge(its featurepubsub-securityenablessecurityhere).
Features
std(default) — enablesallocandzerodds-opcua-gateway/std; addsUdpTransport,LoopbackTransportandstd::error::Errorimplementations.alloc— enableszerodds-opcua-gateway/alloc.security— pulls inaes,ctr,hmac,sha2,aes-gcm(RustCrypto); compiles thesecuritymodule andpublish_cycle_secured/poll_secured. Does not requirestd.json— enablesstd,serde_jsonandbase64; compiles thejsonmodule.
Status
no_stdwithallocunlessstdis enabled.forbid(unsafe_code).- Library only, no binaries. Examples:
open62541_uadp_probe,open62541_uadp_publisher. The scriptproofs/open62541_uadp.shruns both directions of the UADP wire against open62541 and exits with 77 when no open62541 build is present. - 121 test functions in the source (
src/).
zerodds-opcua-pubsub
OPC-UA-Stack. OPC Foundation Part 14 (PubSub, UADP) mit der binären Kodierung aus Part 6, in reinem Rust.
- Quelle: crates/opcua-pubsub
- API-Docs: docs.rs/zerodds-opcua-pubsub
zerodds-opcua-pubsub ergänzt den Publish/Subscribe-Transport aus Part 14 auf
zerodds-opcua-gateway, der Abbildung von Typsystem und AddressSpace nach OMG DDS-OPCUA
1.0, die selbst nichts überträgt. Es kodiert die Typen des Gateways (NodeId,
Variant, DataValue, …) in der binären Kodierung aus Part 6 (Little Endian,
ohne Ausrichtungsfüllung) und rahmt sie als UADP-NetworkMessages. DDS-OPCUA 1.0 verbindet
OPC-UA mit dem DDS-Datenraum; Part 14 ist das eigene Publish/Subscribe-Protokoll von OPC-UA. Das
Crate ist ein zusätzliches Profil und ändert das Gateway nicht.
binary—UaEncode/UaDecode,UaReader/UaWriter; eingebaute Typen, darunterNodeId,ExpandedNodeId,Guid,QualifiedName,LocalizedText,ExtensionObject,Variant,DataValue.uadp—NetworkMessage(Flag-BytesUADPFlags,ExtendedFlags1,ExtendedFlags2, Gruppen- und Nutzdatenkopf) undDataSetMessage(Feldkodierungen Variant, RawData, DataValue; KeyFrame, DeltaFrame, Event, KeepAlive); Anfragen und Antworten der Discovery fürDataSetMetaData,PublisherEndpointsundDataSetWriterConfiguration. Gestückelte (chunked) NetworkMessages werden beim Dekodieren abgewiesen.config,writer,reader— Konfigurationsmodell (Verbindung, Gruppen für Writer und Reader, Konfiguration von DataSetWriter und DataSetReader);PublishedDataSet,DataSetWritermit Inhaltsmaske und Regel für KeyFrames,WriterGroup;DataSetReaderfiltert nach PublisherId, WriterGroupId und DataSetWriterId und dekodiert mit denDataSetMetaData;ReaderGroup.dynamic— Dekodierung von Feldern in der Kodierung RawData, deren Typ ein eigener strukturierter, Aufzählungs- oder einfacher Typ ist, in einen Baum ausDynamicValueanhand der Metadaten.infomodel— die PubSub-Konfiguration als Knoten im AddressSpace unterPublishSubscribe, mit den Verwaltungsoperationen (AddConnection,AddWriterGroup, …,Remove…).transport— TraitPubSubTransport;UdpTransportundLoopbackTransport(std);MqttTransport,AmqpTransportundKafkaTransportüber injizierte Client-Traits;EthernetTransportüber ein injiziertesEthernetInterface, sodass der Raw-Socket in der Implementierung des Aufrufers bleibt. Zeitgarantien von TSN liegen außerhalb dieses Crates.security(Feature) —PubSub-Aes128-CTR,PubSub-Aes256-CTR(AES-CTR mit HMAC-SHA256-Signatur) undPubSub-Aes256-GCM;SecurityKeyService, adressiert überSecurityTokenId.json(Feature) — JSON-Abbildung der Nachrichten (JsonNetworkMessage,MessageType"ua-data") auf Basis der umkehrbaren JSON-Kodierung.bridge,daemon— Abbildung DataSet ↔ DDS-Sample über die TraitsDdsPublisher/DdsSubscriber(keine Abhängigkeit vonzerodds-dcps);Publisher::publish_cycleundSubscriber::pollbetreiben die Gruppen über einen Transport, mit gesicherten Varianten untersecurity.
Spec-Anker
- OPC UA Part 6 §5.2 (binäre Kodierung; §5.2.2.9–§5.2.2.17 eingebaute strukturierte Typen), §5.4 (umkehrbare JSON-Kodierung).
- OPC UA Part 14 §6.2 (Konfigurationsmodell; §6.2.4/§6.2.5 Veröffentlichen, §6.2.6 PubSubConnection, §6.2.7/§6.2.8 Abonnieren), §7.2.2.2 (NetworkMessage), §7.2.2.3 (DataSetMessage), §7.2.2.4 (Discovery), §7.2.3 (JSON-Abbildung), §7.3.3 (Ethernet), §7.3.4 (MQTT), §7.3.5 (UDP), Annex B.2 (Kafka), Annex B.3 (AMQP), §8 (Sicherheit; §8.2.1 Policies), §9 (Informationsmodell).
- Abdeckung: opcua-pubsub-1.05.
Konsumenten
zerodds-opcua-uacp(nutzt den binären Codec mit).zerodds-opcua-server.zerodds-opcua-bridge(dessen Featurepubsub-securityaktiviert hiersecurity).
Features
std(Standard) — aktiviertallocundzerodds-opcua-gateway/std; ergänztUdpTransport,LoopbackTransportund Implementierungen vonstd::error::Error.alloc— aktiviertzerodds-opcua-gateway/alloc.security— bindetaes,ctr,hmac,sha2,aes-gcm(RustCrypto) ein; kompiliert das Modulsecuritysowiepublish_cycle_secured/poll_secured. Setztstdnicht voraus.json— aktiviertstd,serde_jsonundbase64; kompiliert das Moduljson.
Status
no_stdmitalloc, solangestdnicht aktiviert ist.forbid(unsafe_code).- Nur Bibliothek, keine Binaries. Beispiele:
open62541_uadp_probe,open62541_uadp_publisher. Das Skriptproofs/open62541_uadp.shführt beide Richtungen des UADP-Verkehrs gegen open62541 aus und endet mit 77, wenn kein Build von open62541 vorhanden ist. - 121 Testfunktionen im Quelltext (
src/).