Stand up local dev infrastructure (OPC UA, LDAP, MS SQL) with Docker Compose, Python CLI tools for service interaction, and teardown script. Fix GLAuth config mount, OPC PLC node format, and document actual DN/namespace behavior discovered during testing. Resolve Q1-Q8,Q10: .NET 10, Akka.NET 1.5.x, monorepo with slnx, appsettings JWT, Windows Server 2022 site target.
139 lines
3.7 KiB
JSON
139 lines
3.7 KiB
JSON
{
|
|
"Folder": "ScadaLink",
|
|
"NodeList": [],
|
|
"FolderList": [
|
|
{
|
|
"Folder": "Motor",
|
|
"NodeList": [
|
|
{
|
|
"NodeId": "Motor.Speed",
|
|
"Name": "Speed",
|
|
"DataType": "Double",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Motor speed in RPM"
|
|
},
|
|
{
|
|
"NodeId": "Motor.Temperature",
|
|
"Name": "Temperature",
|
|
"DataType": "Double",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Motor bearing temperature in Celsius"
|
|
},
|
|
{
|
|
"NodeId": "Motor.Current",
|
|
"Name": "Current",
|
|
"DataType": "Double",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Motor current draw in Amps"
|
|
},
|
|
{
|
|
"NodeId": "Motor.Running",
|
|
"Name": "Running",
|
|
"DataType": "Boolean",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Motor running status"
|
|
},
|
|
{
|
|
"NodeId": "Motor.FaultCode",
|
|
"Name": "FaultCode",
|
|
"DataType": "UInt32",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Active fault code (0 = no fault)"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Folder": "Pump",
|
|
"NodeList": [
|
|
{
|
|
"NodeId": "Pump.FlowRate",
|
|
"Name": "FlowRate",
|
|
"DataType": "Double",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Flow rate in liters per minute"
|
|
},
|
|
{
|
|
"NodeId": "Pump.Pressure",
|
|
"Name": "Pressure",
|
|
"DataType": "Double",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Discharge pressure in bar"
|
|
},
|
|
{
|
|
"NodeId": "Pump.Running",
|
|
"Name": "Running",
|
|
"DataType": "Boolean",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Pump running status"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Folder": "Tank",
|
|
"NodeList": [
|
|
{
|
|
"NodeId": "Tank.Level",
|
|
"Name": "Level",
|
|
"DataType": "Double",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Tank level in percent"
|
|
},
|
|
{
|
|
"NodeId": "Tank.Temperature",
|
|
"Name": "Temperature",
|
|
"DataType": "Double",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Tank contents temperature in Celsius"
|
|
},
|
|
{
|
|
"NodeId": "Tank.HighLevel",
|
|
"Name": "HighLevel",
|
|
"DataType": "Boolean",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentRead",
|
|
"Description": "High level alarm switch"
|
|
},
|
|
{
|
|
"NodeId": "Tank.LowLevel",
|
|
"Name": "LowLevel",
|
|
"DataType": "Boolean",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentRead",
|
|
"Description": "Low level alarm switch"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Folder": "Valve",
|
|
"NodeList": [
|
|
{
|
|
"NodeId": "Valve.Position",
|
|
"Name": "Position",
|
|
"DataType": "Double",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Valve position in percent open"
|
|
},
|
|
{
|
|
"NodeId": "Valve.Command",
|
|
"Name": "Command",
|
|
"DataType": "UInt32",
|
|
"ValueRank": -1,
|
|
"AccessLevel": "CurrentReadOrWrite",
|
|
"Description": "Valve command (0=Close, 1=Open, 2=Stop)"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|