feat: initial server

This commit is contained in:
2026-08-17 18:52:27 +02:00
commit 61c6cd6183
4 changed files with 830 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
use std::time::Duration;
use anyhow::Result;
use open62541::*;
use open62541_sys::*;
#[tokio::main]
async fn main() -> Result<()> {
let (server, runner) = Server::new();
let object_node_id = server.add_object_node(ObjectNode {
requested_new_node_id: None,
parent_node_id: ua::NodeId::ns0(UA_NS0ID_OBJECTSFOLDER),
reference_type_id: ua::NodeId::ns0(UA_NS0ID_ORGANIZES),
browse_name: ua::QualifiedName::new(1, "TestMachine"),
type_definition: ua::NodeId::ns0(UA_NS0ID_FOLDERTYPE),
attributes: ua::ObjectAttributes::default(),
})?;
let variable_node_id = server.add_variable_node(VariableNode {
requested_new_node_id: None,
parent_node_id: object_node_id,
reference_type_id: ua::NodeId::ns0(UA_NS0ID_ORGANIZES),
browse_name: ua::QualifiedName::new(1, "SomeRandomValue"),
type_definition: ua::NodeId::ns0(UA_NS0ID_BASEDATAVARIABLETYPE),
attributes: ua::VariableAttributes::default()
.with_data_type(&ua::NodeId::ns0(UA_NS0ID_INT32)),
})?;
tokio::spawn(async move {
let mut counter = 0i32;
loop {
tokio::time::sleep(Duration::from_secs(1)).await;
let value = ua::Int32::new(counter);
server
.write_value(&variable_node_id, &ua::Variant::scalar(value))
.unwrap();
counter += 1;
}
});
runner.run_until_interrupt()?;
Ok(())
}