TIA Zählwert CTU_Int

Ganner

Level-2
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
ich habe eine kleine Verständnisfrage. Ich arbeite mich gerade in ein Programm einer Produktionsmaschine in unserem Unternehmen ein (Tia V13). Im Programm wurde zur Ansteuerung einer Kamera ein FB in SCL geschrieben. Der grobe Ablauf ist mir bekannt. Sporadisch liefert mir Der FB an der IO Variable IO_Auftrag_aktuell einen wert von -1. was ich mir nicht so ganz erklären kann. Im kompletten FB sowie der Variable die von außen auf IO gelegt ist wird nirgends ein count down Signal verwendet. Ich finde im kompletten SPS Programm keine Stelle an welcher die Variable mit einem Zähler verwendet wird bei welchem der CD Eingang beschaltet ist. Der Zähler dient zum Programmwechsel eine DiSoric Kamera bzw. zum Jobwechsel. Der grobe Ablauf des Jobwechsel ist: Ausgang 1 true, Ausgang 2 zb für Job 4 4 Impulse geben dann Ausgang 1 wieder auf low. Anschließend erfolgt eine Quittierung seitens der Kamera.
Den Quellcode des FB anbei. Würde mich freuen wenn mir jemand weiter helfen kann.

Code:
// Flanke Taktmerker
#s_FL_Takt := #I_Takt & NOT #s_HFL_Takt;
#s_HFL_Takt := #I_Takt;


//Reset Variablen
#T_JobChange := false;
#T_JobSelect := false;
#T_Trigger := false;
#T_Beleuchtung := false;
#T_Reset_Zähler := false;
 #T_Trigger2 := false;


//Reset Eingang
IF #I_Reset THEN
  #s_Step := 1;
  #s_IO := false;
  #s_NIO := false;
  #O_Auftrag_Fertig := false;
  #s_AuftragAktiv := false;
END_IF;


CASE #s_Step OF
  1:  // ***Verteiler***
    // Rücksetzen der Variablen
    #s_AuftragSoll := 1;


    // Kamera Triggern
    IF (#I_Trigger) THEN
      #s_Step := 5;
      #s_IO := false;
      #s_NIO := false;
      #s_AuftragAktiv := true;
    END_IF;


    // NeuenAuftrag übermitteln
    IF (#I_JobSelect AND #I_Takt AND NOT #s_FL_Takt) THEN
      #s_AuftragSoll := #I_JobNumber;
      #s_Step := 9;
      #s_IO := false;
      #s_NIO := false;
      #s_AuftragAktiv := true;
      #T_Reset_Zähler := true;
      #T_JobChange := true;
    END_IF;


  5:  // ***Warten bis Beleuchtung ein***
    #O_Auftrag_Fertig := false;
    #T_Trigger2 := true;


    IF #s_Trigger THEN
      #s_Step := 6;
    END_IF;


  6:  // ***Kamera Trigger***
    #T_Trigger:= true;
       #s_Step := 7;


  7: // ***Warte auf Antwort: Auftrag Fertig***
       IF #I_DI_Eingang3 OR #I_DI_Eingang4 THEN
      #O_Auftrag_Fertig := true;
      #s_IO := #I_DI_Eingang3;  //Bauteil i.O.
      #s_NIO := #I_DI_Eingang4; //Bauteil n.i.O.
      #s_Step := 1;
      #s_AuftragAktiv := false;
    END_IF;


  9: // ***Auftragsnummer ändern***
   #T_JobChange := true;
   IF #s_FL_Takt THEN
      #s_Step := 10;
    END_IF;


  10:  // ***Auftragsnummer ändern***
   IF (#IEC_Counter_Auftragsübermittlung.QU) THEN
      #s_Step := 11;
    END_IF;


    #O_Auftrag_Fertig := false;
    #T_JobSelect := NOT #I_Takt AND (#s_Step = 10);
    #T_Reset_Zähler := false;
    #T_JobChange := true;


  
  11: // ***Warte auf Antwort: Auftragsnummer geändert***
     #T_Reset_Zähler := true;
      IF #I_DI_Eingang1 THEN
        #O_Auftrag_Fertig := true;
        #s_Step := 1;
        #s_AuftragAktiv := false;
        #IO_Auftrag_Akt:=#s_AuftragSoll;
      END_IF;   


ELSE  // 
    #s_Step := 1;
END_CASE;


// Ansteuerung Beleuchtung
"T-SATimer-MS"(pIN:=(#I_Beleuchtung OR #T_Trigger OR #T_Trigger2),
               pR:="VKE 0",
               pPT:=t#200ms,
               pQ:=#T_Bool,
               pTS:=#s_TimerBeleuchtung);


"T-SETimer-MS"(pIN:=#T_Trigger2,
               pPT:=t#200ms,
               pQ=>#s_Trigger,
               pTS:=#s_TimerTrigger);


#T_Beleuchtung := #T_Bool;


// Ansteuerung Zähler
    #IEC_Counter_Auftragsübermittlung(CU:= #T_JobSelect,
                                      R :=  #T_Reset_Zähler,
                                      PV:=  #s_AuftragSoll+1);


// Ansteuerung Ausgänge
#O_DO_JobChange := #T_JobChange;
#O_DO_JobSelect :=#T_JobSelect AND NOT (#s_AuftragSoll < #IEC_Counter_Auftragsübermittlung.CV);
#O_DO_Trigger := #T_Trigger;
#O_DO_Beleuchtung := #T_Beleuchtung;


// Busy
#s_Busy := #s_Step <> 1;
 
Sporadisch liefert mir Der FB an der IO Variable IO_Auftrag_aktuell einen wert von -1.
Im ganzen Code gibt es kein IO_Auftrag_aktuell, nur eine Zuweisung an IO_Auftrag_Akt. Meinst Du diese?
IO_Auftrag_Akt kann -1 werden, wenn während s_Step = 1 an I_JobNumber der Wert -1 übergeben wird.

Welche CPU programmierst Du da?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,
Erstmal vielen Dank für deine Antwort.
Ja ich meine die variable IO_Auftrag_Akt. Die -1 müsste also definitiv über die Input variable I_JobNumber kommen meinst du? Bitte erschlag mich nicht aber es müsste eine 1516F sein habs jetzt grad nicht genau im Kopf.
Wenn ich den Baustein beobachte zeigt mir die I_JobNumber eine 3. Ich werde morgen mal außerhalb des Bausteins suchen wo die jobnummer herkommt bzw diese noch irgendwo bearbeitet wird. Normal ist dies eine Vorgabe die aus einer hmi Rezeptur kommt.
Da das Kamerasystem gegen eine neue Variante getauscht wurde und die Quittierung des Jobwechsel nicht kommt wird der letzte Schritt auch nicht ausgeführt in welchem #IO_Auftrag_Akt:=#s_AuftragSoll;
Ausgeführt wird. Ich werde morgen mal weiter recherchieren und ggf berichten wenn ich was gefunden habe.
 
Zurück
Oben