ATHOS Benutzertreffen 12.Oktober Report of the Lab Glashütten, 12.Oktober 2006 HighQSoft GmbH, Karst Schaap /
Themen 12.Oktober Aktueller Stand der Entwicklung Kundenspezifische Projekte Geplante Entwicklungen Zugriff auf Massendaten
Aktueller Stand der Entwicklung 12.Oktober Allgemeine Erweiterungen Operating System Support ASAM ODS 5.1 Model Mapping
Aktueller Stand der Entwicklung 12.Oktober Allgemeine Erweiterungen –Extended Query –DT_ENUM –ID und Referenzen als DT_LONGLONG –Korrektur der Basisattribute bei AoExternal Component –CorbaFileServer
Aktueller Stand der Entwicklung 12.Oktober Operating System Support –Windows 2000 (32-Bit) –Windows XP (32-Bit) –Windows 2003(32-Bit) –Linux, Suse 10 (32-Bit) –Linux, Suse 10, RedHat (64-Bit)
Aktueller Stand der Entwicklung 12.Oktober WindowsLinux 32-BitLinux 64-Bit AsamCommanderJa AvalonJaJa, nur 32 Id.Ja AscobaJaJa.Ja AOP3ServerJaNein Mme (Oracle 9.2)Ja XATFJa ATFJa AVL3Ja EsqlJaNein
Aktueller Stand der Entwicklung 12.Oktober ASAM ODS 5.1 –Verbesserung der Dokumentation. –Verbesserung ATF/XML. –Neue OO-API Methoden. –Neue OO-API Funktionalität. ASAM ODS –Mehrere identische Based Relations an ein Element.
Aktueller Stand der Entwicklung 12.Oktober Neue OO-API Methoden ODS 5.1 – Interface AoSession createCoSession() getUser() –Interface ApplicationElement getRelationByBaseName() –Interface BaseRelation getInverseRelationName() –Interface BaseAttribute getEnumerationDefinition() –Enum SelOpcode IS_NULL, // Value is NULL IS_NOT_NULL // Value is not NULL
Aktueller Stand der Entwicklung 12.Oktober Neue OO-API Funktionalität – Interface ApplElemAccess getInstances() getInstancesExt() updateInstances() The values of the local column instances are part of the result set when the following criteria all fit: Only when the attributes id, generation_parameters, values, flags are requested, as soon as any other attributes are requested the values are not reported. The values of the local column must all belong to exactly one instance of AoMeasurement The server can be configured to a use not more than a specified amount of memory. As soon as a result set exceeds this limit, an exception will be thrown. For the rest no iterator is required.
Aktueller Stand der Entwicklung 12.Oktober Mehrere identische Based Relations an ein Element UnitUnderTest UnitUnderTestPart_1UnitUnderTestPart_2 UUT (parent) Parts_1 (Children) Parts_2 (Children)
Aktueller Stand der Entwicklung 12.Oktober Geänderte OO-API Methoden ODS –Interface ApplicationElement Alt: ApplicationRelation getRelationByBaseName( in Name baseRelName) raises (AoException); Neu: ApplicationRelationSequence getRelationsByBaseName( in Name baseRelName) raises (AoException);
Aktueller Stand der Entwicklung 12.Oktober Model Mapper –Umstellung von TCL auf Java –Konfigurationsfiles mit XML, Prüfung durch XSD –Einbindung Query mit HQLX Der neue Model Mapper wird nur bei neuen Kunden- projekten eingesetzt, der aktuelle Model Mapper wird weiterhin gewartet und für realisierte Projekte auch erweitert.
Kundenspezifische Projekte 12.Oktober Datalogger PAK Import / Export Archivierung externe Dateien Co-Server für Einheiten-Umrechnung Beratung und Prototyp Erstellung
Geplante Entwicklungen 12. Oktober ASAM ODS Sobald ODS vom TAB verabschiedet ist, wird der Avalon auf diese Version umgestellt. Kundenspezifische Projekte
Zugriff auf Massendaten 12. Oktober Verschiedene Möglichkeiten: –Interface ValueMatrix –Interface InstanceElement –Interface InstanceElement mit Auslesen von ExternalComponent Dateien –Interface ApplElemAccess
Zugriff auf Massendaten 12. Oktober ValueMatrix –Aufbau der ValueMatrix von SubMatrix oder Measurement. –Werte immer im MeasurementQuantity Datentyp. –Zugriff der Daten über Zeilen (Vector), Spalten (MeaPoint) und Bereiche. –Einheit ist bei Column zu erfragen.
Zugriff auf Massendaten 12. Oktober z.B: Measurement meaObj = ieMea.upcastMeasurement(); ValueMatrix vmObj = meaObj.getValueMatrix(); if (vmObj != null) { Column cols[] = vmObj.getColumns("*"); for (int i = 0; i < cols.length; i++) { TS_ValueSeq values = vmObj.getValueVector(cols[i], 0, 0); } vmObj.destroy(); }
Zugriff auf Massendaten 12. Oktober InstanceElement –Navigation von Measurement auf SubMatrix weiter auf Local Column –Auslesen der Attribute sequence_representation, values, raw_datatype, generation_parameters, global_flag und flags von AoLocalColumn –Auslesen des Attributes datatype von AoMeasurementQuantity –Auswertung der sequence_represenation –Nur Zugriff auf alle Daten einer Local Column –Einheit wird mit geliefert.
Zugriff auf Massendaten 12. Oktober Sequence_Represenation Explicit, Daten liegen explizit vor in korrektem Datentyp. Implicit_Constant, Ein Wert bei values, der für alle Werte zu verwenden ist. Implicit_Linear, Zwei Werte bei values, Anfangswert und Offset zur Berechnung der Werte. Implicit_Saw, Drei Werte bei values, Anfangswert und Offset und Maximum zur Berechnung der Werte. Raw_Linear, Raw_Polynomial und Raw_Linear_Calibrated, Daten liegen in raw_datatype vor, die generation_parameters werden zur Umrechnung gebraucht. External_Component, Raw_Linear_External, Raw_Polynomial_External und Raw_Linear_Calibrated_External identisch wie Explicit, Raw_Linear, Raw_Polynomial und Raw_Linear_Calibrated der Daten werden von dem Server aus der externen Datei geladen.
Zugriff auf Massendaten 12. Oktober z.B.: InstanceElementIterator ieSubIter = ieMea.getRelatedInstances(arMeaSub, "*"); if (ieSubIter != null) { InstanceElement ieSub; do { ieSub = ieSubIter.nextOne(); if (ieSub != null) { InstanceElementIterator ieLccIter = ieSub.getRelatedInstances(arSubLcc, "*"); if (ieLccIter != null) { InstanceElement ieLcc; do { ieLcc = ieLccIter.nextOne(); if (ieLcc != null) { NameValueUnit values = ieLcc.getValueByBaseName("values");
Zugriff auf Massendaten 12. Oktober ieLcc.destroy(); } } while (ieLcc != null); ieLccIter.destroy(); } ieSub.destroy(); } } while (ieSub != null); ieSubIter.destroy(); }
Zugriff auf Massendaten 12. Oktober InstanceElement mit Auslesen von ExternalComponent Dateien –Wie bei InstanceElement. –Nur für sequence_represenation External_Component, Raw_Linear_External, Raw_Polynomial_External und Raw_Linear_Calibrated_External –weitere Navigation auf AoExternalComponent. –Zugriff von Client auf Dateien. –Auswertung der Basisattribute von AoExternalComponent
Zugriff auf Massendaten 12. Oktober ApplElemAccess –Neu in ODS 5.1 –Zugriff auf Werte von mehreren Local Columns in eine Anfrage. –Attribute Auswertung wie bei InstanceElement –Implementierung für getInstances() –Beschränkungen wie oben angegeben –Nur ein Datentyp pro Anfrage
Zugriff auf Massendaten 12. Oktober z.B.: // Build query for the request of the values QueryStructure qs = new QueryStructure(); // Get the Id of the application elements T_LONGLONG aeSubId = aeSub.getId(); T_LONGLONG aeLccId = aeLcc.getId(); // Deternime the number of attributes ApplicationAttribute aaLccId = aeLcc.getAttributeByBaseName("id"); String aaLccIdName = aaLccId.getName(); ApplicationAttribute aaLccName = aeLcc.getAttributeByBaseName("name"); String aaLccNameName = aaLccName.getName(); ApplicationAttribute aaLccValues = aeLcc.getAttributeByBaseName("values");
Zugriff auf Massendaten 12. Oktober // Report the attributes of the localcolumn qs.anuSeq = new AIDNameUnitId[2]; qs.anuSeq[0] = createAIDNameUnitId(aeLccId, aaLccIdName); qs.anuSeq[1] = createAIDNameUnitId(aeLccId, aaLccValues.getName()); // Conditions Name of Localcolumn qs.condSeq = new SelValue[1]; qs.condSeq[0] = createSelValue(aeLccId, aaLccNameName, SelOpcode.LIKE); qs.condSeq[0].value.u.stringVal("*"); // No operation qs.operSeq = new SelOperator[0]; // No order by qs.orderBy = new SelOrder[0]; // Related instance submatrix qs.relInst = new ElemId(); qs.relInst.aid = aeSubId; qs.relName = arSubLcc.getRelationName();
Zugriff auf Massendaten 12. Oktober InstanceElementIterator ieSubIter = ieMea.getRelatedInstances(arMeaSub, "*"); if (ieSubIter != null) { InstanceElement ieSub = null; do { ieSub = ieSubIter.nextOne(); if (ieSub != null) { qs.relInst.iid = ieSub.getId(); ElemResultSet res[] = aea.getInstances(qs, 0); ieSub.destroy(); } } while (ieSub != null); ieSubIter.destroy(); }
Vielen Dank für Ihre Aufmerksamkeit