Siemens
Siemens

Digital Industries, Motion Control, Machine Tool Systems

Laufzeit protokollieren, Laufzeit der letzten 10 protokollieren

Beitrag 07.02.2018, 17:33 Uhr
Chatchmee
Chatchmee
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 07.02.2018
Beiträge: 3
Hallo zusammen,

ich möchte in meinem Programm die Zeit gerne erfassen und ausgeben, das funktioniert soweit auch ganz gut, nur schreibe ich jetzt ins unendliche
oder kann sie mir mit einem delete Befehl komplett löschen, zurücksetzen. Hat jmd. schon mal was ähnliches geschrieben so dass ich die letzten 10
Zeiten schreibe und bei der 11ten die erste bzw. die älteste Zeit gelöscht wird?

So sieht es bisher aus
Anfang vom Pr.:

N1 DEF REAL WZ_ZEIT
N2 $AC_TIMER[2]=0
Ende vom Pr.:

R51=$AC_TIMER[2]
B_ZEIT=R51
WRITE(_EC,"LAUFZEIT","BEARBEITUNGSZEIT = "<<B_ZEIT<<" SEK")

Für Lösungsansätze wäre ich auch schon dankbar!!

liebe Grüße :)
   
Beitrag 07.02.2018, 18:20 Uhr
Chatchmee
Chatchmee
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 07.02.2018
Beiträge: 3
Hab ein paar Fehler reingebracht beim zu schnellem tippseln, sehe ich grade. Die am Anfang kreierte Variable "wz_zeit" sollte eigentlich "b_zeit" heissen, die später auch wieder abgefragt wird.
   
Beitrag 08.02.2018, 01:04 Uhr
platsch
platsch
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 01.11.2017
Beiträge: 308
Am einfachsten wird sein, Du schreibst die Timerwerte in eine Feldvariable. Dessen Index kannst Du hochzählen und bei erreichen der max. Messungen zurücksetzen. Dann wird wieder von vorn beschrieben.

CODE
def real _Zeit[9]
def int _Zaehler, _Stueck,
def int _Soll=20

Anfang:
$AC_TIMER[2]=0
BEARBEITUNGSPROGRAMM
_Zeit[_Zaehler]=$AC_TIMER[2]
WRITE[FEHLER,"LAUFZEIT","Bearbeitungszeit "<<_Zaehler<<" = "<<_Zeit[_Zaehler]<<" Sekunden")
_Zaehler=_Zaehler+1
if _Zaehler>9
_Zaehler=0
endif
_Stueck=_Stueck+1
if _Stueck<_Soll gotob Anfang
M30
   
Beitrag 08.02.2018, 11:12 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Wenn ich CHATMEE richtig verstehe, stört ihn, dass das log-File beliebig lange wird.
Wenn das Log-File seine gewünschte Maximalgröße erreicht hat, sehe ich nur die Möglichkeit, das File komplett zu löschen, und es neu zu beschreiben.
Dazu muss man sich natürlich wie in deinem Musterprogramm die letzten Werte merken.
Ich habe dazu mal das folgende Programm geschrieben:

N10 DEF INT _STUECKZAHL = 25
N20 DEF INT _LOG_LAENGE = 10 ; Maximale Laenge des log-Files
N30 DEF REAL _ZEIT[10]
N40 DEF INT _TEILE_ZAEHLER
N50 DEF INT _LOG_ZAEHLER
N60 DEF INT _FELDINDEX
N70 DEF INT _BEARBEITUNGSNR
N80 DEF INT _FEHLER ; Rueckgabestatus des WRITE- bzw. DELETE-Befehls

N90 DELETE(_FEHLER, "LAUFZEIT")

N100 FOR _TEILE_ZAEHLER = 0 TO _STUECKZAHL - 1
N110 $AC_TIMER[2] = 0
; Bearbeitungsprogramm
N120 _ZEIT[_TEILE_ZAEHLER MOD _LOG_LAENGE] = $AC_TIMER[2]

N130 IF (_TEILE_ZAEHLER < _LOG_LAENGE)
N140 _FELDINDEX = _TEILE_ZAEHLER MOD _LOG_LAENGE
N150 WRITE(_FEHLER,"LAUFZEIT","BEARBEITUNGSZEIT "<<_TEILE_ZAEHLER + 1<<" = "<<_ZEIT[_FELDINDEX ]<<" SEKUNDEN")
N160 ELSE
N170 DELETE(_FEHLER, "LAUFZEIT")
N180 FOR _LOG_ZAEHLER = 1 TO _LOG_LAENGE
N190 _FELDINDEX =(_TEILE_ZAEHLER + _LOG_ZAEHLER) MOD _LOG_LAENGE
N200 _BEARBEITUNGSNR = _TEILE_ZAEHLER - _LOG_LAENGE + _LOG_ZAEHLER + 1
N210 WRITE(_FEHLER,"LAUFZEIT","BEARBEITUNGSZEIT "<<_BEARBEITUNGSNR<<" = "<<_ZEIT[_FELDINDEX]<<" SEKUNDEN")
N220 ENDFOR
N230 ENDIF
N240 ENDFOR
N250 M30

Wenn die gesamte Bearbeitungsstückszahl vorab nicht bekannt ist, muss man die äußere Schleife (N100 - N240) entsprechend anpassen.
Die Länge des log-Files steht in N20.
In N130 - N160 werden in log-File nue Zeilen anghängt, solange die maximale Filelänge noch nicht erreicht ist.
In N170 bis N220 wird das log-File in jedem Durchgang zunächst gelöscht und dann neu mit der maximalen Zeilenzahl neu erzeugt.

Der Beitrag wurde von CNCFr bearbeitet: 08.02.2018, 11:14 Uhr
   
Beitrag 08.02.2018, 22:15 Uhr
Chatchmee
Chatchmee
Level 1 = Community-Lehrling
*
Gruppe: Mitglied
Mitglied seit: 07.02.2018
Beiträge: 3
Hallo nochmal!

Erstmal grosses Dankeschön das ihr euch die Mühe gemacht habt euch damit zu befassen und für die Beispiel Programmierung!!

Leider konnte ich es auf der Arbeit noch nicht einsetzen.

Ich hab mir beide Programme angeschaut und so wie ich das sehe, bitte korrigiert mich wenn ich falsch liege, wird ein maximal wert definiert und ab dem Punkt an dem der erreicht ist wird alles gelöscht und wieder von vorne begonnen, richtig? Mein Anliegen war es programmtechnisch etwas zu schreiben was mir einen Verlauf von den letzten 10 Bearbeitungen schreibt. Ist das denn überhaupt Machbar? Im Büro hatten wir uns schon darüber unterhalten und ein Kollege hatte was ähnliches aufgebaut in dem er für jeden Tag eine neue File ablegt und mit einer Abfrage alles was älter ist wie 32 Tage zuvor, löscht. Das geht hat aber den Nachteil daß man für jeden Tag eine neue File hat.

Gibt es nicht einen Befehl der das alles vereinfacht?

LG
   
Beitrag 08.02.2018, 22:47 Uhr
platsch
platsch
Level 4 = Community-Meister
****
Gruppe: Mitglied
Mitglied seit: 01.11.2017
Beiträge: 308
nein.gif

Man könnte eben die 10 letzten Meßwerte in einem Rutsch in eine Datei mit "verkettetem Dateinamen" schreiben. die Unterscheidung könnte also beispielsweise der Tag und die Stunde sein. Mit diesen "Werten" im Dateinamen könnte man auch geziehlt löschen.
Das geht dann aber etwas weiter.
Was bist Du denn bereit dafür zu investieren?
   
Beitrag 08.02.2018, 22:49 Uhr
CNCFr
CNCFr
Level 7 = Community-Professor
*******
Gruppe: Mitglied
Mitglied seit: 15.09.2002
Beiträge: 1.922
Damit wir uns nicht missverstehen: Ich verstehe unter einer Bearbeitung, wenn das Bearbeitungsprogramm, dass in meinem Musterprogramm nur als eine Kommentarzeile erscheint einmal durchlaufen wird.
Bei den ersten 10 Bearbeitungen, wird jeweils eine neue Zeile an das File angehängt, ab der elften Bearbeitung werden immer die Daten der aktuellen Bearbeitung und der 9 Bearbeitungen davor in das File geschrieben. Ab der zehnten Bearbeitung enthält das File deshalb immer 10 Zeilen.
Das heißt die ganze Protokollierung ist dafür gedacht, dass das Gesamtprgramm einmal aufgerufen wird. Deshalb wird das File zunächst am Anfang (falls es bereits vorhanden ist) auch gelöscht.
Wenn du etwas anders braucht, müsstest du das genauer beschreiben. Bei entprechendem Aufwand ist vieles machbar.
   
1 Besucher lesen dieses Thema (Gäste: 1)
0 Mitglieder: