Items anlegen hat funktioniert.
Leider kann ich nur den Inhalt der Variable auslesen, wie kann ich auf weiter Eigentschaften zugreifen?
Wie schaut der Vorgang aus, wenn ich den Wert verändern will.
Sollte das mit dem auslesen begrenzt sein, kann jemand eine ander LIB empfehlen.
thetrock
Hab leider zu der Lib keine Dokumentation gefunden.
Wenn es so leicht wäre, würde ich hier nicht fragen.
Vielleicht kann trotzdem jemand mir noch weiterhelfen
Jetzt stellt sich mir die Frage, wo ich mehrer Imtes anlegen kann fürs auslesen?
Gruß thetrock
Kann hier noch jemand weiterhelfen ´mit der LIB
bzw. kennt jemand einen guten opensource LIB mit Beschreibung?
@MartinH vielen Dank.
Console.WriteLine("Step 6 - Add items to the subscription.");
var itemsToCreate = new MonitoredItemCreateRequest[]
{
new MonitoredItemCreateRequest { ItemToMonitor = new ReadValueId { NodeId = NodeId.Parse("ns=3;s=\"DbMachineConfiguration\".\"Parameter\".\"Lasertime\"") , AttributeId = AttributeIds.Value }, MonitoringMode = MonitoringMode.Reporting, RequestedParameters = new MonitoringParameters { ClientHandle = 12345, SamplingInterval = -1, QueueSize = 0, DiscardOldest = true } }
};
var itemsRequest = new CreateMonitoredItemsRequest
{
SubscriptionId = id,
ItemsToCreate = itemsToCreate,
};
var itemsResponse = await channel.CreateMonitoredItemsAsync(itemsRequest);
Console.WriteLine("Step 7 - Subscribe to PublishResponse stream.");
var token = channel.Where(pr => pr.SubscriptionId == id).Subscribe(pr =>
{
// loop thru all the data change notifications
var dcns = pr.NotificationMessage.NotificationData.OfType<DataChangeNotification>();
foreach (var dcn in dcns)
{
foreach (var min in dcn.MonitoredItems)
{
Console.WriteLine($" value: {min.Value}");
}
}
});
Jetzt stellt sich mir die Frage, wo ich mehrer Imtes anlegen kann fürs auslesen?
Folgender Code geht
NodeId.Parse("ns=3;s=DeviceManual")
Folgender Code geht nicht
NodeId.Parse("ns=3;s="DbMachineConfiguration"."Parameter"."Laser"")
--> aber die NodeID wird mir so angezeigt
Das ansprechen via NodeId funktioniert für ns=3;s=DeviceManual
aber wenn ich andere Daten auslesen will, ist hat die NodeId wiefolgt
ns=3;s="DbMachineConfiguration"."Parameter"."Bedienung"
aber das geht ja nicht, da es mehrer Strings sind.
Wie kann ich das lösen?
Kann es sein, das bei dem Sample ich nicht so viele Attribute auslesen kann?
Console.WriteLine("Step 7 - Subscribe to PublishResponse stream.");
122 var token = channel.Where(pr => pr.SubscriptionId == id).Subscribe(pr =>
123 {
124 // loop thru all the data change notifications
125 var dcns = pr.NotificationMessage.NotificationData.OfType<DataChangeNotification>();
126 foreach (var dcn in dcns)
127 {
128 foreach (var min in dcn.MonitoredItems)
129 {
130 Console.WriteLine($"sub: {pr.SubscriptionId}; handle: {min.ClientHandle}; value: {min.Value}");
131 }
132 }
133 });
So, jetzt bekomme ich schon ein Value zurück.
aber wenn meine node ID wiefolgt aussieht
ns=3;s="DbMachineConfiguration"."Parameter"."Bedienung"
bringt er mir ein Fehler, da ja mehrere Strings sind.
Daher meine Frage wie kann ich das lösen und wie kann ich mehrere Items anlegen um das Value und Name auszulesen zu können.
Hier wird das Abo erstellt
Console.WriteLine("Step 5 - Create a subscription.");
var subscriptionRequest = new CreateSubscriptionRequest
{
RequestedPublishingInterval = 1000,
RequestedMaxKeepAliveCount = 10,
RequestedLifetimeCount = 30,
PublishingEnabled = true
};
var subscriptionResponse = await channel.CreateSubscriptionAsync(subscriptionRequest);
var id = subscriptionResponse.SubscriptionId;
JEtzt muss ich nur noch die Variablen/Items dem Abo hinzufügen.
Console.WriteLine("Step 6 - Add items to the subscription.");
var itemsToCreate = new MonitoredItemCreateRequest[]
{
new MonitoredItemCreateRequest { ItemToMonitor = new ReadValueId { NodeId = NodeId.Parse("ns=3;s=SerialNumber"), AttributeId = AttributeIds.Value }, MonitoringMode = MonitoringMode.Reporting, RequestedParameters = new MonitoringParameters { ClientHandle = 12345, SamplingInterval = -1, QueueSize = 0, DiscardOldest = true } }
};
var itemsRequest = new CreateMonitoredItemsRequest
{
SubscriptionId = id,
ItemsToCreate = itemsToCreate,
};
var itemsResponse = await channel.CreateMonitoredItemsAsync(itemsRequest);
Den Part verstehe ich nur noch nicht.
Wenn ich die NodeID hier eingebe bekomme ich keine Output raus
Danke für die schnelle Antwort.
Kann es sein, dass ich gar nicht Browsen muss???
Der Browse Requeste, lässt alle daten darstellen.
soweit verstanden.
Wie kann ich jetzt genau eine spezielles Objet darstellen
ID
ns=3;s="DbTest"."Test".Data1
bzw. muss ich ein Objetk anlegen mit der ID und kann dann auf die einzelenen Attribute zugrefein (NodeClass, BrowseName,Value, ...)
wie kann ich rd2.NodeId ersetzten?
konnte jetzt ersetz werden
NodeId.Parse("ns=3;s=PLC")
Ich hab rd2.NodeID ausgelesen und hier steht
ns=3;s=PLC
wenn ich das dort als string eingebe übersetzt er es nicht.
Wie kann ich jetzt das rd2.NodeID richtig ersetzten???
Als nächstes, wollte ich eine spezielle Variable auslesen. ID ist bekannt.
wie lautet dan dazu der Befehlt.
Gibt es hierfür auch eine Literatur oder ähnliches?
Danke Gruß thetrock
Hallo zusammen,
Hier die Anfrage an den Server
browseRequest = new BrowseRequest
{
NodesToBrowse = new BrowseDescription[] { new BrowseDescription { NodeId = ExpandedNodeId.ToNodeId(rd2.NodeId, channel.NamespaceUris), BrowseDirection = BrowseDirection.Forward, ReferenceTypeId = NodeId.Parse(ReferenceTypeIds.HierarchicalReferences), NodeClassMask = (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method, IncludeSubtypes = true, ResultMask = (uint)BrowseResultMask.All } },
};
browseResponse = await channel.BrowseAsync(browseRequest);
foreach (var rd3 in browseResponse.Results[0].References ?? new ReferenceDescription[0])
wie kann ich rd2.NodeId ersetzten?
Was bewirkt die Zeilte (sieh unten) genau?
browseResponse = await channel.BrowseAsync(browseRequest);
foreach (var rd3 in browseResponse.Results[0].References ?? new ReferenceDescription[0])
Hi hab jetzt von
https://github.com/convertersystems/...App/Program.cs
den Code benutzt.
wie kann ich jetzt auf Variablen genau zugreifen?
Hab folgende nodeid ns=3;s="DbInfo"."Parameter"."Station1"
Hi vbprogger,
danke für die schnelle Antwort.
Ich komm mit dem Samples/Lib nicht so gut zurecht,
weiß nicht was genau ich da einnbinden muss oder auch nicht.
Bräuchte am besten Info, welche Lib/Sample wie eingesetz wird und dann wie die Befehle implementiert werden müssen.
Hallo Zusammen,
ich muss einen OPC UA Client in C# programmieren.
Leider komm ich mit den Samples nicht so gut klar.
Kann hier jemand mich unterstützen bzw. eine detailierte Anleitung nennen?
Mti einem fertigen "Client" komme ich schon auf den SErver drauf.
Aber wie ich jetzt starten soll bei der programmierung habe ich keinen Plan, bei dem Thema OPC.
Vorallem in Bezug welche spezielle DLL muss eingebunden werden.
Was benötige ich genau für Aufbau der Verbindung. usw.
Hab bis jetzt nur "kleine" Änderungen oder ganz einfache Programme in C# gelöst. Komme aus der SPS Programmierung.
Danke
thetrock