Server Objects and Types Example¶
Source example: examples/highlevel/server_objects.py
This example focuses on server object structure.
Explanation¶
Nested object hierarchy¶
plant = server.add_object("Plant", server.objects_node, nodeid="ns=1;i=100")
oven = server.add_object("Oven", plant, nodeid="ns=1;i=110")
conveyor = server.add_object("Conveyor", plant, nodeid="ns=1;i=120")
Creating object types¶
sensor_type = server.add_object_type("SensorType", nodeid="ns=1;i=200")
server.add_variable("Value", sensor_type, 0.0, nodeid="ns=1;i=201")
server.add_variable("Unit", sensor_type, "", nodeid="ns=1;i=202", writable=False)
Instantiating from a type definition¶
humidity_sensor = server.add_object(
"HumiditySensor",
oven,
nodeid="ns=1;i=130",
type_definition=sensor_type.nodeid,
)
Full source¶
#!/usr/bin/env python3
import time
from o6 import Server
def main():
server = Server(port=4840)
plant = server.add_object("Plant", server.objects_node, nodeid="ns=1;i=100")
oven = server.add_object("Oven", plant, nodeid="ns=1;i=110")
oven_temp = server.add_variable("Temperature", oven, 180.0, nodeid="ns=1;i=111")
oven_heater = server.add_variable("HeaterOn", oven, True, nodeid="ns=1;i=112")
conveyor = server.add_object("Conveyor", plant, nodeid="ns=1;i=120")
conveyor_speed = server.add_variable("Speed", conveyor, 1.5, nodeid="ns=1;i=121")
conveyor_running = server.add_variable(
"IsRunning", conveyor, False, nodeid="ns=1;i=122"
)
sensor_type = server.add_object_type(
"SensorType",
nodeid="ns=1;i=200",
)
server.add_variable("Value", sensor_type, 0.0, nodeid="ns=1;i=201")
server.add_variable("Unit", sensor_type, "", nodeid="ns=1;i=202", writable=False)
humidity_sensor = server.add_object(
"HumiditySensor",
oven,
nodeid="ns=1;i=130",
type_definition=sensor_type.nodeid,
)
server.add_variable("Value", humidity_sensor, 45.0, nodeid="ns=1;i=131")
server.add_variable(
"Unit", humidity_sensor, "%RH", nodeid="ns=1;i=132", writable=False
)
temperature_type = server.add_variable_type(
"TemperatureType",
data_type="i=11",
nodeid="ns=1;i=300",
)
server.start()
print("Server running at opc.tcp://localhost:4840")
print("Press Ctrl+C to stop.\n")
print("Address space outline:")
print(" Objects/")
print(" └─ Plant/")
print(" ├─ Oven/ (Temperature, HeaterOn, HumiditySensor)")
print(" └─ Conveyor/ (Speed, IsRunning)")
print()
try:
cycle = 0
while True:
cycle += 1
oven_temp.value = 180.0 + (cycle % 20) * 0.5
conveyor_speed.value = 1.5 + (cycle % 10) * 0.1
conveyor_running.value = cycle % 15 != 0
if cycle % 10 == 0:
print(
f" Cycle {cycle}: "
f"OvenTemp={oven_temp.value:.1f}°C, "
f"ConvSpeed={conveyor_speed.value:.1f}m/s"
)
time.sleep(1.0)
except KeyboardInterrupt:
print("\nShutting down…")
finally:
server.stop()
print("Server stopped.")
if __name__ == "__main__":
main()