ESR_Collect -- und dann?

Begonnen von Joe4630, 29. Oktober 2009, 10:09:33

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

Joe4630

Liebe SPS-Gemeinde,

Ich versuche zum ersten mal mit PC-Works (6.0)  Daten und Ereignisse mitzuloggen. Dazu habe ich die ESR-Bausteine in der Bibliothek gefunden. Leider bin ich mit Arrays nicht so fitt und komme nun mit den bereitgestellten Daten am ESR_OUT nicht zurecht. Die Bausteine ESR_MON_B8 laufen meiner Meinung nach (Nachdem ich mir das DT mit Set_DT zusammengebastelt habe)


Folgende Fragen habe ich:

- Wie bekomme ich die Daten am ESR_OUT in ein "lesbares" Format z.Bsp. String um dieses dann z.Bsp. per Email zu verschicken? Der Datums-Zeitstempel ist doch als UDINT dargestellt, also eine Zahl. Wie bekomme ich dies wieder in ein Datums-Zeitformat zurück?
- Wie kann ich das Array dann auslesen um die einzelnen Daten in z.Bsp ein File zu schreiben? (Sorry, brauch halt etwas Nachhilfe für Arrays  :'( )
- Wie genau kann geloggt werden? Woher kommt das TX- zeitsignal im ESR_MON - Baustein? Das DT-Signal gibt ja nur maximal Sekunden aus.
- Der POS- Zeiger steht bei mir immer auf 0 obwohl Ereignisse an den ESR_MON- Bausteinen anliegen und dessen ESR_FLAG auch zwischendurch kurz auf 1 geht. Wo steht dann das neuste Ereigniss im Array?

Vielen Dank für Eure Hilfe!

peewit

#1
Hallo

Da PCWorx leider kein Datum-Format unterstützt ist dieses als Kompromiss als UDINT realisiert.
Um eine DT (UDINT) zu einen STRING zu wandeln, kannst du den extra-Baustein "DT_TO_STRING" oder DT_TO_STRF benutzen

Das Zeitsignal bei den ESRT_MON_xx Bausteinen wird über Parameter "DT_IN" übergeben.
Das kannst du dir selber bilden mit dem Baustein "SET_DT" und als Parameter für diesen nimmst du die globalen Datum/Zeit Variablen

Die Zeit "TX" ist der sps interne TICKCOUNT seit den letzten SPS-Kaltstart, dies ermöglicht eine millisekunden genaue Zeitmessung
DT_IN ist die aktuelle Zeit (Datum/Zeit)

Es werden somit in der Datenstrukur die uebergebene DT_IN und der interne Tickcount TX abgespeichert.

Was genau bei dir nicht funktioniert , kann ich so leider nicht beurteilen, du kannst aber dein Projekt online stellen
, dann kann ich es mir ansehen, was los ist.

Joe4630

Hallo Peewit,

Danke für die Erklärungen! Mit der Zeit TX ist alles klar, konnte ich nun auch im Debugmodus sehen. DT_TO_String funktioniert auch und gibt das Format auch so aus wie ich es gewünscht habe.

Wegen dem Array-Ausgang ESR_OUT habe ich aber immer noch meine Probleme. Vielleicht ist es auch ganz einfach und nur weil ich mit Arrays mich nicht so auskenne komme ich nicht selbst auf eine Lösung.

Wie programmiere ich es das ich vom Ausgang 'ESR_Out' im Datenformat 'oscat_esr_63' einen String erzeuge der die aktuellste Meldung mit allen Informationen von 'oscat_esr_data' enthält. Also, typ, adress, DT (mit DT_TO_STRING gewandelt), TS und data.
Diesen String möchte ich dann per Email versenden bzw. in ein File abspeichern.

In meinem Projekt habe ich zwei ESR_MON_B8 und ein ESR_Collect Bausteine verwendet und so verschaltet wie in der Doku abgebildet. Also den Ausgang ESR_OUT von ESR_Mon_B8_1 mit dem ESR_0 Eingang des ESR_Collect Bausteines verbunden. Sonst existiert keine weitere Verbindung. An den Ausgang ESR_FLAG der ESR_MON_B8 Bausteine habe ich nur eine Variable angeschlossen um den Wert zu sehen. Sonst ist der Ausgang mit nichts verbunden. In der Doku ist dieser auch nicht angeschlossen.

Was mache ich falsch?

Vielen Dank!