-> 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.
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;