- Beiträge
- 9.191
- Reaktionspunkte
- 2.950
-> Hier kostenlos registrieren
Hallo,
bei WinCC lassen sich ja von einer externen Anwendung über die Funktionen der MsRtCli.dll die Informationen der Alarmlogging Runtime auslesen.
Dazu gibt es bei Siemens einige Beispiele, und die Header-Dateien sind bei der WinCC Installation mit dabei.
Grundsätzlich funktioniert das auch alles.
Ich habe mir also eine kleine Testanwendung geschrieben, die sich beim Dienst anmeldet, die anstehenden Alarme ausliest und sich dann wieder beendet. Die msrtcli.dll lade ich dabei dynamisch mittels LoadLibrary() und ermittle die Adressen der Funktionen mit GetProcAddress().
Nun bekomme ich sporadisch alle paar Aufrufe der Anwendung, eine Speicherzugriffsverletzung beim Aufruf von MSRTStartMsgService.
Wenn ich meine Anwendung so anpasse, dass sie während sie aktiv ist zyklisch MSRTStartMsgService, Abfrage, MSRTStopMsgService aufruft, dann kann ich das mehrere tausend Mal machen ohne dass es ein Fehler gibt.
MSRTStartMsgService bekommt einen Funktionszeiger auf eine Callback-Funktion übermittelt, die normalerweise aufgerufen wird wenn man sich erfolgreich verbunden hat. Der Zugriffsfehler könnte dann beispielsweise auftreten, wenn die Adresse der Funktionszeigers nicht gültig ist.
Ist zwar etwas speziell, aber vielleicht hat jemand damit ja schon seine Erfahrungen gemacht, ob es da etwas spezielles zu beachten gibt.
bei WinCC lassen sich ja von einer externen Anwendung über die Funktionen der MsRtCli.dll die Informationen der Alarmlogging Runtime auslesen.
Dazu gibt es bei Siemens einige Beispiele, und die Header-Dateien sind bei der WinCC Installation mit dabei.
Grundsätzlich funktioniert das auch alles.
Ich habe mir also eine kleine Testanwendung geschrieben, die sich beim Dienst anmeldet, die anstehenden Alarme ausliest und sich dann wieder beendet. Die msrtcli.dll lade ich dabei dynamisch mittels LoadLibrary() und ermittle die Adressen der Funktionen mit GetProcAddress().
Nun bekomme ich sporadisch alle paar Aufrufe der Anwendung, eine Speicherzugriffsverletzung beim Aufruf von MSRTStartMsgService.
Wenn ich meine Anwendung so anpasse, dass sie während sie aktiv ist zyklisch MSRTStartMsgService, Abfrage, MSRTStopMsgService aufruft, dann kann ich das mehrere tausend Mal machen ohne dass es ein Fehler gibt.
MSRTStartMsgService bekommt einen Funktionszeiger auf eine Callback-Funktion übermittelt, die normalerweise aufgerufen wird wenn man sich erfolgreich verbunden hat. Der Zugriffsfehler könnte dann beispielsweise auftreten, wenn die Adresse der Funktionszeigers nicht gültig ist.
Ist zwar etwas speziell, aber vielleicht hat jemand damit ja schon seine Erfahrungen gemacht, ob es da etwas spezielles zu beachten gibt.