Laden und Analysieren von Capture-Dateien (Offline-Modus)
Wenn der Viewer nicht mit dem Logger verbunden ist, können die vom AMS-Logger aufgezeichnete AMS-Kommando geladen werden. Die Anzeige unterteilt sich in drei Splitterfenster. Das oberste Fenster ist ein List-View und enthält eine Auflistung aller aufgezeichneten Kommandos. Der Parser-View in der Mitte gibt nähere Auskunft über das im List-View selektierte Kommando. Das unterste View gibt einen HEX-Dump des Kommandos aus.
Abspeichern einer Datei
Um eine Aufzeichnung abzuspeichern, muss mit der rechten Maustaste auf den Eintrag AmsViewer in der Baumansicht geklickt werden. In dem hierdurch geöffneten Kontextmenü muss der Eintrag Save Capture As... ausgewählt werden. Dies öffnet den Save As Dialog:
Mit den Editierfeldern Range From und Range To kann der Bereich angegeben werden, der abgespeichert werden soll. Wenn die Filtered Checkbox gecheckt ist, werden nur die gefilterten AMS-Kommandos abgespeichert. Dies ist besonders nützlich bei größeren Dateien, um die Datenmenge zu minimieren.
Filtern der Capture-Datei
Im Offline-Modus gibt es die Möglichkeit die aufgezeichneten AMS/ADS Kommandos zu filtern. Die Filtermöglichkeiten sind hierbei wesentlich umfangreicher als die Filter, die beim Aufzeichnen von AMS/ADS-Kommandos zur Verfügng stehen. Um einen neuen Filter einzugeben, muss mit der rechten Maustaste auf den Eintrag AmsViewer in der Baumansicht geklickt werden. In dem hierdurch geöffneten Kontextmenü muss der Eintrag Set Display Filter ausgewählt werden. Dies öffnet folgenden Dialog:
Im Editierfeld Filter kann ein Filterstring eingegeben, wenn. Hierbei kann man Ausdrücke mit booleschen Operatoren(AND,OR,NOT) miteinander verknüpfen. Ein Ausdruck ist entweder eine Kombination aus einer Eigenschaft (z. B. TargetNetId) einer Relation (!=,==,<,>,>=,<) und einem Wert ( Zahl,NetId etc.) oder nur eine alleinstehende Eigenschaft. Wenn eine Eigenschaft als Ausdruck verwendet wird, wird überprüft, ob diese Eigenschaft im Kommando enthalten ist.
Ads_IndexGroup
Wenn als Filterstring z. B. Ads_IndexGroup eingegeben wird, werden alle Kommandos angezeigt, die diese Eigenschaft enthalten. In diesem Fall sind das alle ADS Write, Read, ReadWrite und AddDeviceNotification Request. Wenn nun als Filterstring:
Ads_IndexGroup == 0x4020
Wenn als String z. B. Ads_IndexGroup == 0x4020 eingegeben wird, werden alle ADS Write, Read, ReadWrite und AddDeviceNotification Request angezeigt, dessen IndexGroup 0x4020 entspricht. Es gibt auch Eigenschaften, die nur allein stehen können und nicht mit einer Relation verknüpft werden können.
AdsCmd
Zum Beispiel werden mit Hilfe dieses Filterstrings alle ADS-Kommandos angezeigt. Die Eigenschaften, die mit Ads_ beginnen, sind ADS-spezifische Eigenschaften.
Folgende Tabelle listet die unterstützten Eigenschaften auf:
Eigenschaft | Beschreibung | Beispiel |
---|---|---|
SenderPort | Portnummer des sendenden ADS-Gerätes . | SenderPort > 800 |
SenderNetId | AMS-NetId des sendenden ADS-Gerätes. | SenderNetId == 172.16.17.5.1.1 |
TargetPort | Portnummer des empfangenden ADS-Gerätes. | TargetPort == 123 |
TargetNetId | AMS-NetId des empfangenenden ADS-Gerätes. | TargetNetId != 127.12.2.3.1.1 |
ErrorCode | AMS Fehlercode. Wenn kein Fehler vorhanden ist, ist dieser Wert 0. | ErrorCode > 0 |
CmdId | Id des AMS-Kommandos. |
|
hUser | Userhandle | hUser == 0x12345678 |
cbData | Länge der Daten in Bytes. | cbData > 40 |
StateFlags | AMS_Zustandsflags. |
|
Response | Ist wahr, wenn es sich beim Kommando um eine Response handelt. | Response |
Data | Daten des Ams-Kommandos. | Data == 'MAIN.Variables[10]'
|
AdsCmd | Ist wahr, wenn das Kommando ein ADS-Befehl ist. | AdsCmd |
Ads_Read | Ist wahr, wenn das Kommando ein ADS-Read Befehl ist. | Ads_Read |
Ads_Write | Ist wahr, wenn das Kommando ein ADS-Write Befehl ist. | Ads_Write |
Ads_ReadWrite | Ist wahr, wenn das Kommando ein ADS-ReadWrite Befehl ist. | Ads_ReadWrite |
Ads_ReadDeviceInfo | Ist wahr, wenn das Kommando ein ADS-ReadDeviceInfo Befehl ist. | Ads_ReadDeviceInfo |
Ads_ReadState | Ist wahr, wenn das Kommando ein ADS-ReadState Befehl ist. | Ads_ReadState |
Ads_WriteCtrl | Ist wahr, wenn das Kommando ein ADS-WriteCtrl Befehl ist. | Ads_WriteCtrl |
Ads_AddDeviceNote | Ist wahr, wenn das Kommando ein ADS-AddDeviceNotification Befehl ist. | Ads_AddDeviceNote |
Ads_DelDeviceNote | Ist wahr, wenn das Kommando ein ADS-DeleteDeviceNotification Befehl ist. | Ads_DelDeviceNote |
Ads_DeviceNote | Ist wahr, wenn das Kommando ein ADS-DeviceNotification Befehl ist. | Ads_DeviceNote |
Ads_IndexOffset | Index-Offset des ADS-Kommandos. | Ads_IndexOffset |
Ads_IndexGroup | Index-Group des ADS-Kommandos. | Ads_IndexGroup |
Ads_Result | Ergebnis des ADS-Aufrufes. Ein Wert ungleich 0 bedeutet, dass ein Fehler aufgetreten ist. | Ads_Result |
Ads_data | Daten des Ads-Kommandos. | Ads_data |
Um die Eingabe der Ausdrücke zu vereinfachen, kann mit Add Expression ... der Filter Expression Dialog geöffnet werden. Im linken Listenfeld sind alle Eigenschaften aufgelistet. Wenn eine Eigenschaft selektiert ist, werden im Relation Listenfeld die mögliche Relation angegeben. Im Editierfeld Value kann der Wert eingegeben werden, mit der die Eigenschaft verglichen werden soll.
Wenn der Dialog mit OK bestätigt wird, wird der Ausdruck dem Filter Editierfeld hinzugefügt.
Beispiel 1:
Es sollen alle AMS-Kommandos angezeigt werden, die von einem ADS-Gerät mit der AMS-NetId 172.16.7.70.1.1 gesendet oder empfangen wurden:
sendernetid == 172.16.7.70.1.1 OR targetnetid == 172.16.7.70.1.1
Im zweiten Schritt wollen wir diese Menge auf alle ADS Write-Befehle minimieren:
(sendernetid == 172.16.7.70.1.1 OR targetnetid == 172.16.7.70.1.1) AND ads_write
Beispiel 2:
Es soll nach dem String 'MAIN.Values' gesucht werden:
ads_data contains 'MAIN.Values'
Beispiel 3:
Es soll nach dem Byte-Pattern '01 25 a0' gesucht werden:
ads_data contains '01 25 a0'