Skip to main content

Crate mabi_opcua

Crate mabi_opcua 

Source
Expand description

§trap-sim-opcua

OPC UA server simulator for the TRAP protocol simulator.

This crate provides a comprehensive OPC UA server simulation capability with:

  • Server Configuration: Flexible server setup with security policies and endpoints
  • Address Space Management: Hierarchical node organization with 100,000+ node support
  • Node Types: Full support for Objects, Variables, Methods, and Type nodes
  • Subscriptions: Data change monitoring with 10,000+ concurrent subscription support
  • Historical Access: Raw and aggregated historical data with configurable retention
  • High Performance: LRU caching, concurrent access, and efficient memory management

§Architecture

┌─────────────────────────────────────────────────────────┐
│                    OPC UA Server                         │
├─────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌──────────────┐  ┌───────────────┐   │
│  │   Session   │  │ Subscription │  │    History    │   │
│  │   Manager   │  │   Manager    │  │    Store      │   │
│  └─────────────┘  └──────────────┘  └───────────────┘   │
├─────────────────────────────────────────────────────────┤
│  ┌─────────────────────────────────────────────────────┐│
│  │              Address Space (Nodes)                   ││
│  │  ┌─────────┐ ┌──────────┐ ┌────────┐ ┌───────────┐  ││
│  │  │ Objects │ │ Variables│ │ Methods│ │   Types   │  ││
│  │  └─────────┘ └──────────┘ └────────┘ └───────────┘  ││
│  └─────────────────────────────────────────────────────┘│
├─────────────────────────────────────────────────────────┤
│  ┌───────────────┐  ┌──────────────────────────────────┐│
│  │  Node Cache   │  │     Variable Factory             ││
│  │    (LRU)      │  │  (Analog, Discrete, Batch)       ││
│  └───────────────┘  └──────────────────────────────────┘│
└─────────────────────────────────────────────────────────┘

§Quick Start

use mabi_opcua::{
    OpcUaServerConfig, OpcUaDevice,
    types::{NodeId, Variant, DataValue},
    nodes::{AddressSpace, AddressSpaceConfig, VariableBuilder, NodeBuilder},
    services::{SubscriptionManager, SubscriptionManagerConfig, HistoryStore, HistoryStoreConfig},
};

// Create an OPC UA device
let mut device = OpcUaDevice::new("opc-server-1", "My OPC UA Server");

// Create address space with nodes
let address_space = AddressSpace::new(AddressSpaceConfig::default());

// Add a variable node using the address space API
address_space.add_variable(
    NodeId::numeric(2, 1001),
    "Temperature",
    "Temperature",
    NodeId::numeric(0, 11), // Double data type
    Variant::Double(25.0),
    &NodeId::numeric(0, 85), // Objects folder
).unwrap();

// Create subscription manager for data changes
let subscriptions = SubscriptionManager::new();

// Create history store for historical access
let history = HistoryStore::new(HistoryStoreConfig::default());

§Module Organization

  • types: Core OPC UA types (NodeId, Variant, DataValue, etc.)
  • nodes: Node classes and address space management
  • services: Session, subscription, and history services
  • security: Security policies, certificates, encryption, and authentication
  • config: Server configuration
  • device: Device trait implementation
  • factory: Device factory for creating OPC UA devices

Re-exports§

pub use config::OpcUaServerConfig;
pub use config::SecurityPolicy;
pub use config::MessageSecurityMode;
pub use config::EndpointConfig;
pub use config::UserTokenConfig;
pub use device::OpcUaDevice;
pub use error::OpcUaError;
pub use error::OpcUaResult;
pub use factory::OpcUaDeviceFactory;
pub use factory::OpcUaDeviceBuilder;
pub use server::OpcUaServer;
pub use server::OpcUaServerBuilder;
pub use server::ServerState;
pub use server::ServerStats;
pub use server::ServerEvent;
pub use types::NodeId;
pub use types::StatusCode;
pub use types::Variant;
pub use types::DataValue;
pub use types::AttributeId;
pub use types::AccessLevel;
pub use types::DataTypeId;
pub use nodes::Node;
pub use nodes::NodeClass;
pub use nodes::NodeBase;
pub use nodes::QualifiedName;
pub use nodes::LocalizedText;
pub use nodes::ObjectNode;
pub use nodes::VariableNode;
pub use nodes::MethodNode;
pub use nodes::AddressSpace;
pub use nodes::AddressSpaceConfig;
pub use nodes::NodeStoreStats;
pub use nodes::VariableBuilder;
pub use nodes::ObjectBuilder;
pub use nodes::FolderBuilder;
pub use nodes::BatchVariableBuilder;
pub use nodes::AddToAddressSpace;
pub use nodes::NodeCache;
pub use nodes::NodeCacheConfig;
pub use nodes::CacheStats;
pub use nodes::Reference;
pub use nodes::ReferenceTypeId;
pub use nodes::BrowseDirection;
pub use nodes::BrowseResult;
pub use nodes::VariableFactory;
pub use nodes::AnalogVariable;
pub use nodes::DiscreteVariable;
pub use nodes::BatchNodeCreator;
pub use nodes::BatchConfig;
pub use nodes::BatchProgress;
pub use nodes::ProgressCallback;
pub use nodes::VariableTemplate;
pub use nodes::ObjectTemplate;
pub use nodes::ValueGeneratorType;
pub use nodes::NodePrefetcher;
pub use nodes::PrefetchConfig;
pub use nodes::PrefetchStats;
pub use nodes::AsyncPrefetchWorker;
pub use nodes::PrefetchingAddressSpace;
pub use services::SessionManager;
pub use services::SessionManagerConfig;
pub use services::Session;
pub use services::SessionInfo;
pub use services::SubscriptionManager;
pub use services::SubscriptionManagerConfig;
pub use services::Subscription;
pub use services::SubscriptionConfig;
pub use services::MonitoredItem;
pub use services::MonitoredItemConfig;
pub use services::MonitoredItemNotification;
pub use services::MonitoringMode;
pub use services::DataChangeFilter;
pub use services::DataChangeTrigger;
pub use services::DeadbandType;
pub use services::HistoryStore;
pub use services::HistoryStoreConfig;
pub use services::HistoricalDataPoint;
pub use services::AggregateType;
pub use security::SecurityManager;
pub use security::SecurityManagerConfig;
pub use security::SecurityContext;
pub use security::CertificateManager;
pub use security::CertificateManagerConfig;
pub use security::Certificate;
pub use security::CertificateStore;
pub use security::CertificateValidator;
pub use security::ValidationResult;
pub use security::CryptoProvider;
pub use security::CryptoProviderConfig;
pub use security::SymmetricAlgorithm;
pub use security::AsymmetricAlgorithm;
pub use security::HashAlgorithm;
pub use security::EncryptionResult;
pub use security::DecryptionResult;
pub use security::SignatureResult;
pub use security::UserAuthenticator;
pub use security::UserAuthConfig;
pub use security::AuthenticationResult;
pub use security::UserCredentials;
pub use security::UserToken;
pub use security::SecurityPolicyConfig;
pub use security::SecurityPolicyProvider;

Modules§

channel
OPC UA Secure Channel Layer.
codec
OPC UA Binary Encoding/Decoding.
config
OPC UA configuration types.
device
OPC UA device implementation (placeholder).
error
OPC UA error types.
factory
OPC UA device factory implementation.
nodes
OPC UA Node system.
security
OPC UA Security Module.
server
OPC UA server implementation.
service
OPC UA Service Layer.
services
OPC UA services implementation.
transport
OPC UA TCP Transport Layer.
types
OPC UA type system.

Constants§

MAX_RECOMMENDED_NODES
Maximum recommended nodes for optimal performance.
MAX_RECOMMENDED_SUBSCRIPTIONS
Maximum recommended subscriptions for optimal performance.
OPCUA_SPEC_VERSION
OPC UA specification version supported.
VERSION
Crate version.