2017-10-18 6 views
0

Hy,Milo OPC UA Server mit Historical Data Access

Ich bin neu in milo (und OPC-UA) und versuchen, eine OPC-UA-Server mit Historical Data Access zu implementieren. Ich habe das aktuelle Milo-Server-Beispiel erneut verwendet und einen Verlaufsknoten erstellt. Auf diesem Knoten kann ich (mit dem Prosys OPC UA Client) die leere Historie abfragen. Ich weiß, dass ich die Persistenz der History-Knoten selbst implementieren muss. So weit, so gut - aber ich konnte keine Informationen über die Geschichte lesen Anfrage und wie man die Antwort zurückgeben. Genauer gesagt, wie die HistoryData zu einem HistoryReadResult

@Override 
public void historyRead(HistoryReadContext context, HistoryReadDetails readDetails, TimestampsToReturn timestamps, 
     List<HistoryReadValueId> readValueIds) 
{ 
    List<HistoryReadResult> results = Lists.newArrayListWithCapacity(readValueIds.size()); 
    for (HistoryReadValueId readValueId : readValueIds){ 
     //return 3 historical entries 
     DataValue v1 = new DataValue(new Variant(new Double(1)), StatusCode.GOOD, new DateTime(Date.from(Instant.now().minus(1, ChronoUnit.MINUTES)))); 
     DataValue v2 = new DataValue(new Variant(new Double(2)), StatusCode.GOOD, new DateTime(Date.from(Instant.now().minus(2, ChronoUnit.MINUTES)))); 
     DataValue v3 = new DataValue(new Variant(new Double(3)), StatusCode.GOOD, new DateTime(Date.from(Instant.now().minus(3, ChronoUnit.MINUTES)))); 
     HistoryData data = new HistoryData(new DataValue[] {v1,v2,v3}); 
     //??? 
     HistoryReadResult result = new HistoryReadResult(StatusCode.GOOD, ByteString.NULL_VALUE, ???); 
     results.add(result); 
    } 
    context.complete(results); 
} 

Antwort

1

hinzufügen Sie werden Zugriff auf die Spezifikation müssen erfolgreich Dienstleistungen historischen Zugang zu implementieren. Teil 4 und Teil 11.

Der letzte Parameter im HistoryReadResult Konstruktor soll eine HistoryData Struktur sein. ExtensionObject ist im Grunde die Behälter, die Strukturen codiert und übertragen in.

zu erstellen, die ExtensionObject Sie würden zuerst eine erstellen HistoryData (oder HistoryModifiedData, depends ... siehe die Spezifikation) und dann wie ExtensionObject.encode(historyData) etwas tun, das Objekt, das Sie bekommen müssen fertig bauen HistoryReadResult.