ABB Roboterschulung von praxiserfahrenen Trainern
in unserem Schulungszentrum in Mainburg oder vor Ort bei Ihnen
Bediener und Expertenschulungen anfragen

Autor Thema:  Stückzahlzähler für jede Schicht anlegen  (Gelesen 3207 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline strunz

  • zweiter Post
  • *
  • Beiträge: 2
  • Bewertet: 0
Stückzahlzähler für jede Schicht anlegen
« am: 09. August 2007, 17:42:49 »
Hallo,

ich bin neu in diesem Forum und habe nur begrenzte Prog.Kentnisse.
In diesem Forum habe ich mir schon sehr viele Tipps geholt !!

Nun zu meinem Problem.

Ich habe für jede Schicht einen Stückzahlzähler angelegt,habe aber das Problem wenn der
Robbi zum bsp. um 14.00 Uhr nicht läuft (Reparatur am WKZ etc.) den Stückzahlzähler
später zurück zu setzen.
Da genau um 14.00 Uhr das Programm halt nicht gelaufen ist.

Rücksetzen um 6.00 Uhr 14.00 Uhr und 22.00 Uhr

Vielleicht hat jemand eine Idee?

Danke im Vorraus

Strunz
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert


ABB Robotertraining
günstig und verständlich mit Zertifikat
ABB Roboterschulung

Offline Thomas

  • Forum Mitglied LV 8
  • *
  • Beiträge: 74
  • Bewertet: 0
Re: Stückzahlzähler für jede Schicht anlegen
« am: 10. August 2007, 00:32:31 »
Hat der Rob ne übergeordnete SPS die das erledigen kann?
Thomas
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline maddin

  • Forum Mitglied LV 14
  • *
  • Beiträge: 168
  • Bewertet: 0
Re: Stückzahlzähler für jede Schicht anlegen
« am: 10. August 2007, 22:29:00 »
Wird der Roboter bei einer Reparatur komplett abgeschaltet (Steuerung aus ?)

Gruß maddin
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Hermann

  • Forum Legende LV 2
  • *
  • Beiträge: 1317
  • Bewertet: +48
Re: Stückzahlzähler für jede Schicht anlegen
« am: 11. August 2007, 15:33:47 »
Hallo,
nur mal so als Anregung:
die Uhrzeiten auf den Schichtbereich abfragen, und für jede Schicht einen Merker
bilden, ob der Schichtzähler schon zurückgesetzt wurde.
Beim Rücksetzen der aktuellen Schicht die Merker der anderen Schichten zurücksetzen.

Symbolisch mal so hingeschrieben (ohne die genaue Syntax und Uhrzeitformate zu beachten):
if (aktuelle_uhrzeit >=6:00) and (aktuelle_uhrzeit<14:00) and not merker1 then
 zaehler1:=0;
 merker1:=true;
 merker2:=false;
 merker3:=false;
end

if (aktuelle_uhrzeit >=14:00) and (aktuelle_uhrzeit<22:00) and not merker2 then
 zaehler2:=0;
 merker1:=false;
 merker2:=true;
 merker3:=false;
end

if (aktuelle_uhrzeit >=22:00) or (aktuelle_uhrzeit<6:00) and not merker3 then
 zaehler3:=0;
 merker1:=false;
 merker2:=false;
 merker3:=true;
end


Hermann
« Letzte Änderung: 11. August 2007, 15:35:33 von Hermann »
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline strunz

  • zweiter Post
  • *
  • Beiträge: 2
  • Bewertet: 0
Re: Stückzahlzähler für jede Schicht anlegen
« am: 13. August 2007, 11:55:02 »
Hallo,

danke für die Antworten und Anregungen

zu den Fragen

-  der Roboter wird nicht  ausgeschaltet sondern nur in seine Homepos gefahren
(Steuerung ist noch eingeschaltet aber in Handbetrieb)

-  der Roboter hat keine übergeordnete SPS

Danke an Hermann für den Tip werde es gleich mal ausprobieren.
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline matthias1000

  • Einmalposter
  • *
  • Beiträge: 1
  • Bewertet: 0
Re: Stückzahlzähler für jede Schicht anlegen
« am: 21. August 2007, 03:46:10 »
Hallo,
hatte das gleiche Problem,
habe eine sehr gute Lösung gefunden.
Probier das mal:

  PROC StueckFile()
    VAR iodev txtfile;

    aktStunde:=GetTime(\Hour);
    IF aktStunde<6 OR aktStunde>=22 THEN
      schichtbeginn:=22;
    ELSEIF aktStunde<14 AND aktStunde>=6 THEN
      schichtbeginn:=6;
    ELSE
      schichtbeginn:=14;
    ENDIF
    aktTag:=GetTime(\WDay);
    IF timeset<>schichtbeginn OR (aktTag<>dayset AND aktStunde>6) THEN
      timeset:=schichtbeginn;
      dayset:=aktTag;
      Open "pc:"\File:="Stueck.txt",txtfile\Append\Bin;
      WriteStrBin txtfile,CDate()+"  "+CTime()+"  "+ValToStr(Schichtzaehler)+"\0D\0A";
      Clear Schichtzaehler;
      Close txtfile;
    ENDIF
  ENDPROC


viel spaß
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Kotik

  • Forum Mitglied LV 7
  • *
  • Beiträge: 65
  • Bewertet: 0
Re: Stückzahlzähler für jede Schicht anlegen
« am: 18. April 2011, 15:43:35 »
Hallo,

ich habe keleine Probleme mit den Schichten.

Ich möchte die Laufzeiten der Anlage aufnehmen und in ein String schreiben (pro/Tag und Schicht)

PERS num nLaufZeitSchicht{31,3}:=[[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[23399.7,96.323,20265.2],[18445.3,23347.1,12858.8],[5906.8,3544.16,0],[0,0,0],[0,19408.4,1036.97],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0]];
 
nLaufZeitSchicht{nLaufTagAlt,nLaufSchichtAlt}:=nLaufZeitSchicht{nLaufTagAlt,nLaufSchichtAlt}+nLocZeit; !-- Zeit speichern

Jetzt zu meinem Problem:

So lange der Tages/Schichtzähler um ein erhöht wird (d.h. der Roboter Läuft ohne eine Schicht/Tag Unterbrechung), ist alles ok.
Aber, wenn der Roboter eine Schicht oder mehr als 1 Tag nix gemacht hat, komm ich dann durcheinander.

Dann wird die Akt.Zeit auf den Alten Tag (>1) geschrieben was nicht ok ist. Und wie kann ich den Monat mit einbeziehn?

IF (fLaufSchicht("Tag")<>nLaufTagAlt AND fLaufSchicht("Schicht")<>1) THEN
          Open "home:/"\File:=LogFileName,devLogFile\APPEND;
          Write devLogFile,"  ------ SPEICHERSTAND: "+CDate()+" "+CTime()+" ------";......
IF (fLaufSchicht("Mon")<>nLaufMonAlt AND fLaufSchicht("Schicht")<>1) THEN
          RemoveFile "home:/"+LogFileNameOLD;
          CopyFile   "home:/"+LogFileName, "home:/"+LogFileNameOLD;
          WaitTime 0.1;
          Open "home:/"+LogFileName,devLogFile\Write;
!-----------------------------------------------------------
  !- Schichtlaufzeit aufnahme / pro Schicht und Tag
  !-----------------------------------------------------------
  FUNC num fLaufSchicht(
    string strLocStatus)
   
    VAR num nLocAktStd;
    VAR num nLocAktDay;
    VAR num nLocAktMon;
    VAR bool bLocHilf;
    VAR num nLocMerker;
    VAR string strLocDatNeu;
    VAR string strLocUhrNeu;
   
    strLocDatNeu:=CDate();
    strLocUhrNeu:=CTime();
    bLocHilf:=StrToVal(StrPart(strLocDatNeu,9,2),nLocAktDay);
    bLocHilf:=StrToVal(StrPart(strLocDatNeu,6,2),nLocAktMon);
    bLocHilf:=StrToVal(StrPart(strLocUhrNeu,1,2),nLocAktStd);
    !
    TEST strLocStatus
      CASE "Schicht":
        IF (nLocAktStd<6 OR nLocAktStd>=22) THEN
          nLocMerker:=1;  !-- Nachtschicht
        ELSEIF (nLocAktStd<14 AND nLocAktStd>=6) THEN
          nLocMerker:=2;  !-- Frühschicht
        ELSE
          nLocMerker:=3;  !-- Spätschicht
        ENDIF
      CASE "Tag":
        nLocMerker:=nLocAktDay; !-- AktTag übergeben
      CASE "Mon":
        nLocMerker:=nLocAktMon; !-- AktMon übergeben
      Default:
        EXIT;
    ENDTEST
    !
    RETURN nLocMerker;
  ENDFUNC

rS
Zeit Stoppen
chichtlaufzeit "Zeit",\nLocZeit:=ClkRead(clSchicht);

Vielen Dank im Voraus!
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Z750

  • Forum Mitglied LV 7
  • *
  • Beiträge: 60
  • Bewertet: 0
Re: Stückzahlzähler für jede Schicht anlegen
« am: 19. April 2011, 10:45:06 »
OK, ich versuch mich mal daran,
Um das problem mit den Unterbrechungen zu lösen würde ich nicht die alte Schicht speichern sondern von der aktuellen 1 abziehen. So kommst du immer auf die vorherige Schicht , unabhängig von einer Unterbrechung.
Mit dem Datum genauso. Ich weiß aber gerade nicht ob man vom Datum einfach einen Tag abziehen kann oder ob man da wieder rumrechnen darf. :denk:



IF fLaufSchicht("Schicht") = 1 THEN
   nLaufSchichtAlt:= 3;
ELSE
   nLaufSchichtAlt := fLaufSchicht("Schicht") -1
ENDIF

nLaufZeitSchicht{nLaufTagAlt,nLaufSchichtAlt}:=nLocZeit;

Gruß Z
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Kotik

  • Forum Mitglied LV 7
  • *
  • Beiträge: 65
  • Bewertet: 0
Re: Stückzahlzähler für jede Schicht anlegen
« am: 20. April 2011, 07:29:42 »
Hallo,

daran hatte ich auch gedacht.

ABER:

Wenn die fLaufSchicht("Schicht")=3 und nLaufSchichtAlt=1 ist und man macht -1, heißt die (nLaufSchichtAlt=fLaufSchicht("Schicht")-1)=2.
d.h. das wird ein Glücksfall, um die richtige Schicht zu kriegen....

Mit den Tagen ist es auch so ein Problem:

AktTag-1= erster Tag im Monat -1 = 0 geht auch nicht...

Oder hab ich es falsch verstanden...?
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Z750

  • Forum Mitglied LV 7
  • *
  • Beiträge: 60
  • Bewertet: 0
Re: Stückzahlzähler für jede Schicht anlegen
« am: 20. April 2011, 11:35:54 »
Das mit dem Tag/Datum - 1 könnte man so lösen (ungetestet):

FUNC string fGetPrevDate(string stDate)
       !Rechnet das Datum auf den Vortag zurück

VAR num nDayPerMonth{12}:=[31,28,31,30,31,30,31,31,30,31,30,31];
VAR num nTempYear;
VAR num nTempMonth;
VAR num nTempDay;
VAR bool bOK;

!YYYY-MM-DD
bOK := StrToVal(StrPart(stDate,1,4), nTempYear);
bOK := StrToVal(StrPart(stDate,6,2), nTempMonth);
bOK := StrToVal(StrPart(stDate,9,2), nTempDay);

IF nTempDay > 1 THEN
Decr nTempDay;
ELSE
IF nTempMonth > 1 THEN
Decr nTempMonth;
ELSE
nTempMont := 12;
Decr nTempYear;
ENDIF

! Wenn Februar und Schaltjahr ist dann 29 für Februr
IF nTempMonth = 2 AND IsLeapYear(nTempYear) = TRUE THEN
nDayPerMonth{2} := 29;
ENDIF
ENDIF

RETURN nTempYear + "-" + nTempMonth + "-" + nTempDay;
ENDFUNC



FUNC bool IsLeapyear(num nYear)
!Prüft ob das übergebene Jahr ein Schaltjahr ist
If nYear MOD 4 = 0 AND nYear MOD 100 <> 0 OR nYear MOD 400 =0 Then
RETURN TRUE;
ELSE
RETURN FALSE;
ENDIF
ENDFUNC

Ich finde dein Schnipsel aber etwas umständlich. Sieht so aus als ob du einmal pro Tag die Daten des ganzen aktuellen Monats Loggst.
Oder hab ich es jetzt falsch verstanden...?  :lol:
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Kotik

  • Forum Mitglied LV 7
  • *
  • Beiträge: 65
  • Bewertet: 0
Re: Stückzahlzähler für jede Schicht anlegen
« am: 20. April 2011, 11:42:49 »
Vielen Dank,

werd ich mal testen.

Ich logge die Daten einmal am Tag nur die letzten 3 Schichten.

F/S/N

Und wenn der Monat vorbei ist, lösche ich die Zeiten...

Was passiert, wenn ich 2Tage nicht produziert habe und MonatAkt. neu ist???
« Letzte Änderung: 20. April 2011, 12:45:24 von Kotik »
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert

Offline Kotik

  • Forum Mitglied LV 7
  • *
  • Beiträge: 65
  • Bewertet: 0
Re: Stückzahlzähler für jede Schicht anlegen
« am: 21. April 2011, 07:31:23 »

Hallo Z,

!--Früh:=2--Spät:=3--Nacht:=1
  PERS string strSchicht{3}:=["Nachtschicht","Frühschicht","Spätschicht"];

Da komm ich etwas durcheinander... ;)

d.h. z.B. ich habe akt. Frühschicht und laut Ihrer zZuweisung, würde ich in der F. die Werte auf Nacht schreiben, oder?
d.h. Ich muss auf den Tag achten und die Schicht, ob  die alte Schicht zum akt. größer als 2 ist

!-----------------------------------------------------------
  !- Schichtlaufzeit aufnahme / pro Schicht und Tag
  !-----------------------------------------------------------
  PROC rSchichtlaufzeit(
    string strLoc,
    \num nLocZeit)
   
    VAR string SaveNum{5}:=[" ","Bitte den Tag im Monat (1-31) eingeben,","der angezeigt werden soll!"," ","Bei Null wird abgebrochen!"];
    VAR num nLocS;
    VAR num nLocTag;
    CONST string LogFileName:="STILLSTAND.TXT";
    CONST string LogFileNameOLD:="STILLSTAND_OLD.TXT";
    VAR iodev devLogFile;
    !["Nachtschicht","Frühschicht","Spätschicht"]
   
    TEST strLoc
      CASE "Zeit":
        !
        IF (fLaufSchicht("Schicht")=1) nLaufSchichtAlt:=3;
        IF (fLaufSchicht("Schicht")<>1) nLaufSchichtAlt:=fLaufSchicht("Schicht")-1
        !
        TPWrite "ZZZZZZ: "+NumToStr(nLaufZeitSchicht{nLaufTagAlt,nLaufSchichtAlt},0);
        nLaufZeitSchicht{nLaufTagAlt,fLaufSchicht("Schicht")}:=nLaufZeitSchicht{nLaufTagAlt,fLaufSchicht("Schicht")}+nLocZeit; !-- Zeit speichern
        !
        IF (fLaufSchicht("Tag")<>nLaufTagAlt AND fLaufSchicht("Schicht")<>1) THEN
          Open "HOME:/TEXTDATEIEN/"\File:=LogFileName,devLogFile\APPEND;
          Write devLogFile,"  ------ SPEICHERSTAND: "+CDate()+" "+CTime()+" ------";
          Write devLogFile," ";
          Write devLogFile,"  "+NumToStr(nLaufTagAlt,0)+". Tag im Monat...";
          Write devLogFile," ";
          Write devLogFile,"    Laufzeit - Frühschicht  :  "+fZeit(nLaufZeitSchicht{nLaufTagAlt,2})+" Std.";
          Write devLogFile,"    Laufzeit - Spätschicht  :  "+fZeit(nLaufZeitSchicht{nLaufTagAlt,3})+" Std.";
          Write devLogFile,"    Laufzeit - Nachtschicht :  "+fZeit(nLaufZeitSchicht{nLaufTagAlt,1})+" Std.";
          Write devLogFile,"                              ___________";
          nLocS:=86400-(nLaufZeitSchicht{nLaufTagAlt,1}+nLaufZeitSchicht{nLaufTagAlt,2}+nLaufZeitSchicht{nLaufTagAlt,3});
          Write devLogFile,"    Stillstand der Anlage     "+fZeit(nLocS)+" Std.";
          Write devLogFile," ";
          Write devLogFile,"  ------------------------------------------------";
          Close devLogFile;
          !
          nLaufTagAlt:=fLaufSchicht("Tag");
        ENDIF
        !
        IF (fLaufSchicht("Mon")<>nLaufMonAlt AND fLaufSchicht("Schicht")<>1) THEN
          RemoveFile "HOME:/TEXTDATEIEN/"+LogFileNameOLD;
          CopyFile   "HOME:/TEXTDATEIEN/"+LogFileName, "HOME:/TEXTDATEIEN/"+LogFileNameOLD;
          WaitTime 0.1;
          Open "HOME:/TEXTDATEIEN/"+LogFileName,devLogFile\Write;
          Write devLogFile," ";
          Close devLogFile;
          !
          FOR reg1 FROM 1 TO 31 DO
            FOR reg2 FROM 1 TO 3 DO
              nLaufZeitSchicht{reg1,reg2}:=0;
            ENDFOR
          ENDFOR
          nLaufMonAlt:=fLaufSchicht("Mon");
        ENDIF
        !
        nLaufSchichtAlt:=fLaufSchicht("Schicht");
        !
      CASE "Anzeige":
        nLocTag := UINumEntry(
        \Header:="Welcher Tag soll angezeigt werden?"
        \MsgArray:=SaveNum
        \Icon:=iconInfo
        \InitValue:=0
        \MinValue:=0
        \MaxValue:=31
        \AsInteger);
        IF (nLocTag=0) rError "Exit","R4=> Durch einen Bediener abgebrochen!"," ";
        !
        TPErase;
        TPWrite " ";
        TPWrite " ";
        TPWrite "  Dein gewähltes Datum   :  "+NumToStr(nLocTag,0)+"."+NumToStr(fLaufSchicht("Mon"),0);
        TPWrite " ";
        TPWrite "       Frühschicht       :  "+fZeit(nLaufZeitSchicht{nLocTag,2})+" Std.";
        TPWrite "       Spätschicht       :  "+fZeit(nLaufZeitSchicht{nLocTag,3})+" Std.";
        TPWrite "       Nachtschicht      :  "+fZeit(nLaufZeitSchicht{nLocTag,1})+" Std.";
        nLocS:=86400-(nLaufZeitSchicht{nLocTag,1}+nLaufZeitSchicht{nLocTag,2}+nLaufZeitSchicht{nLocTag,3});
        TPWrite " ";
        TPWrite "  Stillstand der Anlage  :  "+fZeit(nLocS)+" Std.";
      Default:
        rError "Exit","R4=> Übergabewert (strLoc) stimmt nicht!","Die Routine (rSchichtlaufzeit) prüfen!";
    ENDTEST
    !
  ERROR
    TRYNEXT;
  ENDPROC
« Letzte Änderung: 21. April 2011, 07:45:32 von Kotik »
  • finde ich gut    Danke, das hat mir geholfen    brauche Hilfe    da stimmt was nicht    Lesenswert


xx
Stückzahlzähler

Begonnen von Metallmaus

10 Antworten
2818 Aufrufe
Letzter Beitrag 31. Januar 2010, 18:15:26
von Z750
xx
Stückzähler automatisch 1x pro Schicht speichern

Begonnen von ferrarifan4

5 Antworten
2702 Aufrufe
Letzter Beitrag 04. Dezember 2007, 20:44:06
von Welder
xx
Jede halbe Sekunde Position des Roboters und Analogsignal in Datei schreiben

Begonnen von abb2400

5 Antworten
1517 Aufrufe
Letzter Beitrag 26. November 2010, 23:44:20
von abb2400
xx
Werkobjekt anlegen

Begonnen von Buschmann

3 Antworten
3165 Aufrufe
Letzter Beitrag 02. Januar 2008, 12:49:53
von Buschmann
xx
Variablentabelle anlegen Robotstudio

Begonnen von DanielBodor

6 Antworten
1191 Aufrufe
Letzter Beitrag 26. Oktober 2014, 14:17:25
von DanielBodor
 

über das Roboterforum

Nutzungsbedingungen Impressum
Sitemap