Servus Zusammen!
Ich bin auf der Suche nach eine Step7 (Optimal TIA) Baustein für eine KRC2 anzusteuern. (Automatik-extern).
Hätte da einer was fertiges? Das wäre fein
Vielen Danke vorab!
Grüße TomTom
Servus Zusammen!
Ich bin auf der Suche nach eine Step7 (Optimal TIA) Baustein für eine KRC2 anzusteuern. (Automatik-extern).
Hätte da einer was fertiges? Das wäre fein
Vielen Danke vorab!
Grüße TomTom
Das ganze ist eigentlich kein Zauber. Lediglich eine abfolge von Signalen.
Anbei mein Baustein den ich verwende. Bei mir funktioniert er sehr gut. die benutzung erfolgt totzdem auf eigene Gefahr
Der Baustein hat auch die Besondertheit das die Fahrfreigabe nur bei T1 oder AutoExt gesetzt wird.
FUNCTION_BLOCK FB999
TITLE ='FB_KUKA_Roboter_KRC2'
AUTHOR : 'El Cattivo'
FAMILY : 'Standard'
VERSION : '1.0'
VAR_INPUT
I_O_ACTCONF : BOOL ; //Schnittstelle aktiv (AutomatikExtern)
STOPMESS : BOOL ; //Sammelstörung
PRO_ACT : BOOL ; //Programm aktiv
PERI_READY : BOOL; //Antriebe sind eingeschaltet
IN_HOME : BOOL ; //Roboter in Home Position
ALARM_STOP : BOOL ; // Not-Halt i.O. (intern und extern)
USER_SAF : BOOL ;
PGNO_REQ : BOOL ; //Programmnummer übermitteln
APPL_RUN : BOOL ; //Programm läuft
T1_BETRIEB : BOOL ; // Roboter im T1 Betrieb
AUTO : BOOL ; //Automatik von SPS
START : BOOL; //Start von SPS
END_VAR
VAR_OUTPUT
EXT_START : BOOL ; //Programmstart
MOVE_ENABLE : BOOL ; //Fahrfreigabe
CONF_MESS : BOOL ; //Fehlerquittung
DRIVES_OFF : BOOL ; //Antriebe aus (inverse)
DRIVES_ON : BOOL ; //Antriebe ein
I_O_ACT : BOOL ; // Schnittstelle AutomatikExtern aktivieren
PGNO_VALID : BOOL ; //Programmnummer übertragen
END_VAR
VAR_IN_OUT
END_VAR
VAR
sSTART_SEQ : INT ; //Start Sequenz
sTON_DRIVES_OFF : TON; //Verzögerung DRIVES_OFF
sTON_START_SEQ11 : TON; //Verzögerung Start Sequenz Schritt 11
sTON_START_SEQ12 : TON; //Verzögerung Start Sequenz Schritt 12
sTON_START_SEQ21 : TON; //Verzögerung Start Sequenz Schritt 21
sTON_START_SEQ22 : TON; //Verzögerung Start Sequenz Schritt 22
sTON_START_SEQ31 : TON; //Verzögerung Start Sequenz Schritt 31
sTON_START_SEQ41 : TON; //Verzögerung Start Sequenz Schritt 41
sHmPfStart : BOOL; // Hilfsmerker Positive Flanke Start
sPfStart : BOOL; // Hilfsmerker Positive Flanke Start
END_VAR
VAR_TEMP
END_VAR
// Antriebe aus (inverse)
DRIVES_OFF := ALARM_STOP AND USER_SAF ;
sTON_DRIVES_OFF(IN := DRIVES_OFF
,PT := t#200ms);
// Positive Flanke von Start zum Anstarten des Roboter
sPfStart := Start AND NOT sHmPfStart;
sHmPfStart := Start;
// Fahrfreigabe
MOVE_ENABLE := (AUTO AND I_O_ACTCONF AND START ) OR T1_Betrieb ;
// Automatikanforderung von SPS
I_O_ACT := ALARM_STOP AND USER_SAF;
//Start Sequenz
CASE sSTART_SEQ OF
//Initialschritt
0:
DRIVES_ON := false;
CONF_MESS := false;
EXT_START := false;
PGNO_VALID := false;
IF AUTO AND sPfStart AND NOT PRO_ACT THEN
sSTART_SEQ := 11;
END_IF;
//Antriebe einschalten
11:
IF sTON_START_SEQ11.Q THEN
sSTART_SEQ := 12;
END_IF;
12:
DRIVES_ON:= true;
IF PERI_READY THEN
DRIVES_ON := false;
sSTART_SEQ := 21;
ELSIF sTON_START_SEQ12.Q THEN
DRIVES_ON := false;
sSTART_SEQ := 11;
END_IF;
//Störung quittieren
21:
IF sTON_START_SEQ21.Q THEN
sSTART_SEQ := 22;
ELSIF NOT STOPMESS THEN
sSTART_SEQ := 31;
END_IF;
22:
CONF_MESS := true;
IF NOT STOPMESS THEN
CONF_MESS := false;
sSTART_SEQ := 31;
ELSIF sTON_START_SEQ22.Q THEN
CONF_MESS := false;
sSTART_SEQ := 21;
END_IF;
//Start einschalten
31:
IF sTON_START_SEQ31.Q THEN
sSTART_SEQ := 32;
END_IF;
32:
EXT_START := TRUE;
IF PRO_ACT THEN
EXT_START := false;
sSTART_SEQ := 41;
END_IF;
//Auftrag mit Nummer starten
41:
IF sTON_START_SEQ41.Q AND APPL_RUN THEN
sSTART_SEQ := 0;
ELSIF PGNO_REQ THEN
sSTART_SEQ := 42;
END_IF;
42:
PGNO_VALID := true;
IF NOT PGNO_REQ THEN
PGNO_VALID := false;
sSTART_SEQ := 43;
END_IF;
43:
IF APPL_RUN THEN
sSTART_SEQ := 0;
END_IF;
ELSE
sSTART_SEQ := 0;
END_CASE;
//Zeitüberwachung Schrittkette
sTON_START_SEQ11(IN := sSTART_SEQ = 11
,PT := t#200ms);
sTON_START_SEQ12(IN := sSTART_SEQ = 12
,PT := t#1s);
sTON_START_SEQ21(IN := sSTART_SEQ = 21
,PT := t#200ms);
sTON_START_SEQ22(IN := sSTART_SEQ = 22
,PT := t#1s);
sTON_START_SEQ31(IN := sSTART_SEQ = 31
,PT := t#200ms);
sTON_START_SEQ41(IN := sSTART_SEQ = 41
,PT := t#500ms);
//Reset Start Sequenz
IF NOT Start OR NOT I_O_ACTCONF THEN
sSTART_SEQ := 0;
END_IF;
END_FUNCTION_BLOCK
Alles anzeigen
Habe nun diesen Code in Betrieb. Soweit funktioniert alles, nur bei einem Programmwechsel habe ich ein Problem.
Die Programme übertrage ich Binär mit einer Bitbreite von 4.
Der Ablauf:
Beispiel:
Programm 1 (0001) startet und wird in der Cell abgearbeitet, alles ohne Probleme CASE 1 wird abgearbeitet. Jetzt steuere ich das 2. Programm an (0010) und starte die ext. Start folge. Nun bleibt das Programm innerhalb der SWITCH Anweisung im Teil P00 (#EXT_PGNO, #PGNO_GET, DMY[],0) stehen und meldet "Wait for PGNO_VALID".
Im SPS Programm (Siehe Code) steht er auch in diesem Moment in Schritt 43. Das heißt, er hat die PGNO_VALID := TRUE; in Schritt 42 zugewiesen bekommen.
Komme da im Moment nicht weiter.... Oder habe ich einfach nur ein Denkfehler?
Vorab Vielen Dank!
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können