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.

Laden und Analysieren von Capture-Dateien (Offline-Modus) 1:

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:

Laden und Analysieren von Capture-Dateien (Offline-Modus) 2:

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:

Laden und Analysieren von Capture-Dateien (Offline-Modus) 3:

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.

Laden und Analysieren von Capture-Dateien (Offline-Modus) 4:

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'