User Documentation
Datenrekorder
Systemhandbuch
2696780000/02/04.2020
90
Trigger lassen sich mit DataRecApiSetTrigger einstellen und mit DataRe-
cApiRemoveTrigger wieder aufheben.
Sonderfall im Modus änderungsbasierte Aufzeichnung mit einer überwach-
ten Variablen: Für die Anzahl der zu speichernden Aufzeichnungen zählt
nicht die bloße Anzahl von Aufrufen von DataRecApiSampleValues, da nicht
jeder Aufruf eine Speicherung zur Folge haben muss. Sondern es zählen
nur die tatsächlich aufzeichnenden Aufrufe der Funktion. In den übrigen Mo-
di zählen hingegen die reinen Aufrufe von DataRecApiSampleValues.
Die Anmeldefunktion DataRecApiAddVar ermittelt im Zuge der Anmeldung
die Lokalität einer Variablen. Diese Informationen wird über die Abfragefunk-
tionen DataRecApiGetFirstVar, DataRecApiGetNextVar und DataRecA-
piGetVars dem Anwender zur Verfügung gestellt und lässt sich zu Prüfzwe-
cken verwenden. Das gelieferte Flag isLocal gibt an, ob die Variable pro-
zesslokal ist und somit echtzeitfähig abgetastet werden kann.
Mit DataRecApiSetSampleHook durchgeführte Einstellungen sind nicht dau-
erhaft (Code-Adressen sind hochlaufabhängig), sondern müssen im Zuge je-
des Applikationshochlaufs (vor dem Aufzeichnungsstart) neu durchgeführt
werden.
14.7.1 Profil mit manueller Aufzeichnung
Das folgende Beispiel zeigt die einfachste Anwendung: Die Applikation re-
gistriert über MemApi zwei Variablen beim Variablenserver und meldet deren
Pfade bei einem Profil mit Puffertyp Continuous und einer Kapazität von
1000 Samples an.
In der Start-Funktion wird die Aufzeichnung gestartet, in der Stopp-Funktion
wieder gestoppt. Die Applikationsfunktion ModuleCallback wird im Sekun-
dentakt aufgerufen und zeichnet mittels Aufruf von DataRecApiSampleVa-
lues die Variablen auf.
Ein explizites Löschen des Profils in der Exit-Funktion kann entfallen, da
nach Beenden aller Applikationen alle noch bestehenden Profile automa-
tisch gelöscht werden. Persistierte Daten sind von diesem Löschen nicht be-
troffen.
void ModuleInit() {
DataRecApiInfo info;
DataRecApiResult rc;
char varPath[80];
LogApiAddId(traceid, "TestRec");
LogApiTrace(traceid, "TestDataRecApp initialized");
MemApiInit();
MemApiAddVar(scVarNameTemp, MemApiSInt32, &sTemp, sizeof sTemp);
MemApiAddVar(scVarNamePres, MemApiReal, &sPres, sizeof sPres);
sTemp = 0;
sPres = 0.0;
strcpy(info.name, scProfileName);
info.size = 1000; /* space for 1000 samples */
info.maxVarCnt = 5; /* max. 5 variables per sample */
info.bufType = DataRecApiBufTypeContinuous; /* ring buffer type */
info.level = DataRecApiLevelApplRt; /* (unsupported yet) */
info.autoStart = 0; /* application starts recording */
rc = DataRecApiCreateProfile(&info, &sP1Id);
ReturnIfNot(rc == DataRecApiResultOk && sP1Id != DataRecApiNoId);
snprintf(varPath, sizeof varPath, "APPL.MEM.%s", scVarNameTemp);
rc = DataRecApiAddVar(sP1Id, varPath, 0, &sTempId);
ReturnIfNot(rc == DataRecApiResultOk && sTempId != DataRecApiNoId);