DatenLogger

Zuviel Werbung?
-> Hier kostenlos registrieren
hallo,


@AdminThomas:
Nein, ich habe keine Erfahrung mit InTouch. Aber es gibt im Haus Intouch-Programmierer, die mir da sicher bissl helfen können.
Deine Lösung in SCL würde mich brennend interessieren, wenn sie auf mein Problem anwendbar ist.

Liebe Grüße
Sascha

Hey hallo, hab mal ein ähnliches problem gehabt.
Ich wollte einen "Fehler" sichtbar machen der nur alle Jubeljahre auftrat.
Mit follgendem FB hab ich die SPS-Zeit ausgelesen. (HH MM SS Msec)
die wiederum in einen DB geschrieben...

SCL-Quelle:

FUNCTION_BLOCK FB50

//
//Funktion liest CPU Zeit und Datum
//
//Aufruf: in OB1 freier Zyklus
//

// Kopf
TITLE= 'Uhrzeit_aus_SPS'
VERSION: '1.0'
AUTHOR: 'Thomas'

VAR_IN_OUT
iStdExt: INT; //Stunde
iMinExt: INT; //Minute
iSekExt: INT; //Sekunde
iMscExt: INT; //Milisekunde

iJahExt: INT; //Jahr vierstellig !
iMonExt: INT; //Monat
iTagExt: INT; //Tag
END_VAR

VAR_OUTPUT
rTime: REAL; //Uhrzeit im REAL-Format z.B. 12.351965 (HH.MMSSms)
END_VAR

VAR// statische Variablen im Instanz DB
dtDateTime: DATE_AND_TIME;
abDate AT dtDateTime: ARRAY [0..7] OF BYTE; //Byteweise Sicht auf Datum und Uhrzeit
END_VAR

VAR_TEMP// temporäre Variablen
iErrorCode: INT;
END_VAR

iErrorCode:=READ_CLK(CDT := dtDateTime); //SPS-Uhr lesen

iJahExt:=BCD_TO_INT(abDate[0])+2000;
iMonExt:=BCD_TO_INT(abDate[1]);
iTagExt:=BCD_TO_INT(abDate[2]);

iStdExt:=BCD_TO_INT(abDate[3]);
iMinExt:=BCD_TO_INT(abDate[4]);
iSekExt:=BCD_TO_INT(abDate[5]);
iMscExt:=BCD_TO_INT(abDate[6]);

rTime:=iStdExt+(iMinExt*0.01)+(iSekExt*0.0001)+(iMscExt*0.000001); //Uhrzeit mit 2 Vor- und 6 Nachkommastellen

END_FUNCTION_BLOCK


in rTime steht die Uhrzeit im REAL-format (HH.MM SS Msec)

als zweites hab ich dann einen FB100 geschrieben, den ich von aussen antriggern kann (boStart), und mit der Uhrzeit (rAktualZeit) aus FB50 (DB50.DBD0) beschreiben kann.
diesen hab ich dann in OB35 verdrahtet.

SCL-Quelle:

FUNCTION_BLOCK FB100


VAR // statische Variablen im Instanz DB
arZeitstempel: ARRAY[1..10]OF REAL:=0.0; //Messwerte Array
iZeitstempelZeiger: INT:=1; //Zeiger auf aktuellen Messwert
END_VAR

VAR_INPUT //Eingangsvariablen
rAktualZeit: REAL:= 0.0; //Aktualzeit CPU aus DB50
boStart: BOOL:= FALSE; //Baustein-Startimpuls
iAdresse: INT := 8;
END_VAR

// Anweisungsteil

IF boStart THEN
arZeitstempel[iZeitstempelZeiger]:=rAktualZeit; //
IF iZeitstempelZeiger < 10 THEN
iZeitstempelZeiger:=iZeitstempelZeiger + 1; //
ELSE
iZeitstempelZeiger:=1; //
END_IF;
END_IF;

END_FUNCTION_BLOCK

in meinem beispiel hab ich mal 10 werte in einen DB schreiben lassen
(arZeitstempel: ARRAY[1..10]OF REAL:=0.0)

dies währe erst einmal für den Zeitstempel.... erweiten kann mann das ganze dann ja auch auf den Analogwert (bekommt mann hin)

Nun zu InTouch, hier braucht mann wirklich einen Specialisten
(SIDirect DAServer 1.5) wie hier die geschwindigkeit ist müsstest du dich einmal genau erkundigen, aber hiermit könntest du auf den DB zugreifen und z.B. die Uhrzeit sowie die Messwerte auslesen.

hoffe ein bischen geholfen zu haben.. bei fragen bitte melden...
 
Hey AdminThomas, sieht gut aus, danke...
Aber:
Ich benutze erst einmal den SPS-Analyzer von autum (oder so ähnlich hießt er...)
im nächsten schritt - nach fertigem Energiemanagement - werde ich mich nochmal der Sache widmen. für spätere anwendungen dann. Erstmal zählt nur die Diplomarbeit.

danke an alle!
 
Zurück
Oben