-> Hier kostenlos registrieren
Guten Morgen,
Habe hier eine AWL Quelle von einem FB10 der in einem anderen FBx aufgerufen wird und die ganze Zeit ohne Probleme lief.
	
	
	
		
Dieser Baustein sorgt dafür das eine Kamera Bilder von Objekten macht.
Jetzt haben wir die gleiche Kamera nochmal bekommen und haben sie genauso mit eingebunden wie die andere.
Mein Problem ist jetzt das die 1. Kamera immer noch funktioniert aber die 2. nicht. Hänge ich den FB10 für die 1. Kamera ab funktioniert die 2.
Im FB10 wird mit SFC14 und 15 gearbeitet. Und soviel ich weiß liegt es daran das der SFC15 beim 2. FB10 Aufruf die Ausgangsdaten falsch beschreibt.
Hat jemand von Euch Erfahrung mit SFC14 und 15 wenn mehrere Instanzen aufgerufen werden.
Was muss jetzt an dem FB10 geändert werden für die neue Situation.
Die richtige Adresse aus der Hardwarekonfiguration wird jedem FB10 Aufruf als Integer Wert übergeben.
Angeblich spielt das AR2 eine große Rolle wenn man Eingänge auf den IDB lädt und vom IDB wieder die Ausgänge beschreibt.
Es wäre toll wenn mir einer von Euch helfen könnte. Mit Adressregister zu Arbeiten ist nicht meine Stärke.
Vielen Dank
Mfg Tommylik
	
		
			
		
		
	
				
			Habe hier eine AWL Quelle von einem FB10 der in einem anderen FBx aufgerufen wird und die ganze Zeit ohne Probleme lief.
		Code:
	
	FUNCTION_BLOCK FB 10
TITLE =Schnittstelle Kamera
{ S7_pdiag := 'true'; S7_language := '9(2) English (United Kingdom)  10.07.2013  10:03:04' }
VERSION : 0.0
VAR_INPUT
  Address : INT ;    //Start Addresse von Kamera
  Praegecode : ANY ;    //Prägecode, Bauteilzuordnung
  Job_Nummer : BYTE ;    //Job-Nummer die verwendet werden soll
  Frg_Job_Num_wechseln : BOOL ;    //Freigabe Job-Nummer wechseln
  Hand : BOOL ;    //Manual Mode
  Acknowledge : BOOL ;    //Acknowledge
  Dry_Run : BOOL ;    //bauteilloser Betrieb angewählt
  Dry_Run_Sim_Time : TIME ;    //Simulationszeit für bauteillosen Betrieb
  Start_Aufnahme : BOOL ;    //Start Aufnahme
END_VAR
VAR_OUTPUT
  Aufnahme_OK : BOOL ;    //Aufnahme ohne Fehler beendet
  Aufnahme_nOK : BOOL ;    //Aufnahme mit Fehler beendet
  Fehler : BOOL ;    //Fehler aktiv
  Warnung : BOOL ;    //Warnung aktiv
END_VAR
VAR_IN_OUT
  Typ_Daten_Bit : BOOL ;    //Bit wird gesetzt, wenn Aufnahme n.O.K. ist
END_VAR
VAR
  Out_Kamera : STRUCT     
   Status : STRUCT     
    Ready : BOOL ;    //Bereit zur nächsten Auswertung
    Res_0_2 : BOOL ;    //Reserve
    Trigger_ack : BOOL ;    //Trigger-Signal ausgeführt
    Ch_Job_ack : BOOL ;    //Change-Job-Signal erkannt
    Sw_Run_ack : BOOL ;    //Switch to Run-Signal erkannt
    Res_0_5 : BOOL ;    //Reserve
    Res_0_6 : BOOL ;    //Reserve
    Res_0_7 : BOOL ;    //Reserve
    Res_1 : BYTE ;    //Reserve
    _12_RDBU : BOOL ;    //Gesamtergebnis iO
    _09_RD : BOOL ;    
    _05_PK : BOOL ;    
    _06_YE : BOOL ;    
    _07_BK : BOOL ;    
    _08_GY : BOOL ;    
    Res_2_6 : BOOL ;    
    Res_2_7 : BOOL ;    
    aktiver_Job : BYTE ;    //aktueller Job
    Image_ID : BYTE ;    
    Error_Bit0 : BOOL ;    //Fehler Bit 0 Wert 1
    Error_Bit1 : BOOL ;    //Fehler Bit 1 Wert 2
    Error_Bit2 : BOOL ;    //Fehler Bit 2 Wert 4
    Error_Bit3 : BOOL ;    //Fehler Bit 3 Wert 8
    Trigger_Mode : BOOL ;    //0=Trigger / 1=Freilauf
    Res_5_5 : BOOL ;    //Reserve
    OP_Mode : BOOL ;    //0=Config / 1= Run
    Res_5_7 : BOOL ;    //aktueller Job Bit 7 Wert 128
   END_STRUCT ;    
   Data : STRUCT     
    Image_ID : BYTE ;    //(0-255) wird nach jeder Job-Ausführung um Eins erhöht
    ResultDataOverrun : BOOL ;    //Ergebnisdaten wurden abgeschnitten
    Res_1_1 : BOOL ;    //Reserve
    Res_1_2 : BOOL ;    //Reserve
    Res_1_3 : BOOL ;    //Reserve
    Res_1_4 : BOOL ;    //Reserve
    Res_1_5 : BOOL ;    //Reserve
    Res_1_6 : BOOL ;    //Reserve
    Res_1_7 : BOOL ;    //Reserve
    ResultData : ARRAY  [1 .. 8 ] OF BYTE ;    
   END_STRUCT ;    
   Response : STRUCT     
    Key : BYTE ;    //Key-Response (gespiegelter Wert von Req.nach Job-Ausführung)
    ResultDataOverrun : BOOL ;    //Response-Daten wurden abgeschnitten
    Res_1_1 : BOOL ;    //Reserve
    Res_1_2 : BOOL ;    //Reserve
    Res_1_3 : BOOL ;    //Reserve
    Res_1_4 : BOOL ;    //Reserve
    Res_1_5 : BOOL ;    //Reserve
    Res_1_6 : BOOL ;    //Reserve
    Res_1_7 : BOOL ;    //Reserve
    Res_02 : BYTE ;    //Reserve
    Res_03 : BYTE ;    //Reserve
    Data : STRUCT     
     TG_Laenge : DWORD ;    //Telegrammlänge
     Erw_Trigger : BYTE ;    //Erweiterter Trigger
     Fehlercode1 : BYTE ;    //Fehlercode
     Fehlercode2 : BYTE ;    //Fehlercode
     Daten_Laenge : BYTE ;    //Datenlänge (Anzahl Zeichen)
     Jahr3 : BYTE ;    //Produktions Jahr 3.Stelle
     Jahr4 : BYTE ;    //Produktions Jahr 4.Stelle
     Monat1 : BYTE ;    //Produktions Monat 1.Stelle
     Monat2 : BYTE ;    //Produktions Monat 2.Stelle
     Tag1 : BYTE ;    //Produktions Tag 1.Stelle
     Tag2 : BYTE ;    //Produktions Tag 2.Stelle
     Stunde1 : BYTE ;    //Produktions Stunde 1.Stelle
     Stunde2 : BYTE ;    //Produktions Stunde 2.Stelle
     Minute1 : BYTE ;    //Produktions Minute 1.Stelle
     Minute2 : BYTE ;    //Produktions Minute 2.Stelle
     Sekunde1 : BYTE ;    //Produktions Sekunde 1.Stelle
     Res_19 : BYTE ;    //Reserve
     Reserve : ARRAY  [20 .. 31 ] OF //Reserve
     BYTE ;    
    END_STRUCT ;    
   END_STRUCT ;    
  END_STRUCT ;    
  IN_Kamera : STRUCT     
   Control : STRUCT     
    Reset_Error : BOOL ;    //Fehler quittieren / löschen
    Dis_HW_Trig : BOOL ;    //Hardware-Trigger deaktivieren
    Trigger : BOOL ;    //Trigger (Aufnahme starten)
    Change_Job : BOOL ;    //aktiviere Job xxx
    Switch_Run : BOOL ;    //Switch to Run
    Res_0_5 : BOOL ;    //Reserve
    Res_0_6 : BOOL ;    //Reserve
    Res_0_7 : BOOL ;    //Reserve
    Res_1 : BOOL ;    //Reserve
    Job_Nr : BYTE ;    //Job-Nummer
   END_STRUCT ;    
   Request : STRUCT     
    Key : BYTE ;    //Key-Request (Request counter)
    Res_01 : BYTE ;    //Reserve
    Res_02 : BYTE ;    //Reserve
    Res_03 : BYTE ;    //Reserve
    Data : STRUCT     
     TG_Laenge : DWORD ;    //Telegrammlänge
     Erw_Trigger : BYTE ;    //Erweiterter Trigger
     Daten_Laenge : BYTE ;    //Datenlänge (Anzahl Zeichen)
     Jahr3 : BYTE ;    //Produktions Jahr 3.Stelle
     Jahr4 : BYTE ;    //Produktions Jahr 4.Stelle
     Monat1 : BYTE ;    //Produktions Monat 1.Stelle
     Monat2 : BYTE ;    //Produktions Monat 2.Stelle
     Tag1 : BYTE ;    //Produktions Tag 1.Stelle
     Tag2 : BYTE ;    //Produktions Tag 2.Stelle
     Stunde1 : BYTE ;    //Produktions Stunde 1.Stelle
     Stunde2 : BYTE ;    //Produktions Stunde 2.Stelle
     Minute1 : BYTE ;    //Produktions Minute 1.Stelle
     Minute2 : BYTE ;    //Produktions Minute 2.Stelle
     Sekunde1 : BYTE ;    //Produktions Sekunde 1.Stelle
     Res_17 : BYTE ;    //Reserve
     Reserve : ARRAY  [18 .. 31 ] OF //Reserve
     BYTE ;    
    END_STRUCT ;    
   END_STRUCT ;    
  END_STRUCT ;    
  HMI : STRUCT     
   Button_Fehler_Quitt : BOOL ;    //Button Fehler quittieren
   Button_Reset : BOOL ;    //Button Reset Baustein
   Button_Pruefung_wh : BOOL ;    //Button Prüfung wiederholen
   Button_Quitt_niO_iO : BOOL ;    //Button Quittierung "Prüfung niO" mit in Ordnung
   Button_Quitt_niO_niO : BOOL ;    //Button Quittierung "Prüfung niO" mit nicht in Ordnung
   Button_Anwahl_Hand : BOOL ;    //Button Anwahl Hand
   Button_Start_Pruefung : BOOL ;    //Button Start Prüfung
   Res_07 : BOOL ;    
   Anz_Fehler : BOOL ;    //Anzeige Fehler
   Anz_Frg_Hand : BOOL ;    //Anzeige Freigabe Handbetrieb
   Anz_Pruefung_iO : BOOL ;    //Anzeige Prüfung in Ordnung
   Anz_Pruefung_niO : BOOL ;    //Anzeige Prüfung nicht in Ordnung
   Res_14 : BOOL ;    
   Res_15 : BOOL ;    
   Res_16 : BOOL ;    
   Res_17 : BOOL ;    
   Job_Nr_Auto : BYTE ;    //Job-Nummer durch Automatikbetrieb
   Job_Nr_Eingabe : BYTE ;    //Job-Nummer Eingabefeld Visu
   Job_Nr_aktiv : BYTE ;    //Job-Nummer Rückmeldung aktive Nummer von Kamera
  END_STRUCT ;    
  Dry_Run_Timer : "TON";    
  Timer_Job_niO : "TON";    
  Fehlernummer : INT ;    
  Response_Key_alt : INT ;    
  Bereit : BOOL ;    
  Job_Nummer_nio : BOOL ;    
  Aufnahme_gestartet : BOOL ;    
  kein_Fehler : BOOL ;    
  Ergebnis_nOK : BOOL ;    
END_VAR
VAR_TEMP
  Save_AR1 : DWORD ;    
  Temp_DWord_1 : DWORD ;    
  Temp_DWord_2 : DWORD ;    
  E_Adr_Status : WORD ;    
  E_Adr_Data : WORD ;    
  E_Adr_Response : WORD ;    
  A_Adr_Control : WORD ;    
  A_Adr_Request : WORD ;    
  t_RetVal : INT ;    
  T_ANY_Anzahl_DBB : WORD ;    
  T_DB_Nr_PraegeCode : WORD ;    
  T_DB_A_Adr_PraegeCode : DWORD ;    
  FLA_Start_Aufnahme : BOOL ;    
  Auftrag_fertig : BOOL ;    
  Dry_Run_iO : BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =Save AR1
      TAR1  ; 
      T     #Save_AR1; 
NETWORK
TITLE =Visu-Button zurücksetzen, wenn keine Freigabe
      ON    #Hand; 
      ON    #HMI.Button_Anwahl_Hand; 
      R     #HMI.Button_Anwahl_Hand; 
      R     #HMI.Button_Start_Pruefung; 
NETWORK
TITLE =Eingänge auf Instanz-DB schreiben
      L     #Address; 
      T     #E_Adr_Status; 
      L     6; 
      +I    ; 
      T     #E_Adr_Data; 
      L     10; 
      +I    ; 
      T     #E_Adr_Response; 
// ===============================
      L     #Address; 
      SLW   3; 
      LAR1  ; 
// Fehlerbits laden und dekodieren
      L     EB [AR1,P#5.0]; 
      L     B#16#F; 
      UW    ; 
      T     #Fehlernummer; 
NETWORK
TITLE =Status-Signale in Instanz-DB kopieren
      CALL "DPRD_DAT" (
           LADDR                    := #E_Adr_Status,
           RET_VAL                  := #t_RetVal,
           RECORD                   := #Out_Kamera.Status);
      NOP   0; 
NETWORK
TITLE =Data-Signale in Instanz-DB kopieren
      CALL "DPRD_DAT" (
           LADDR                    := #E_Adr_Data,
           RET_VAL                  := #t_RetVal,
           RECORD                   := #Out_Kamera.Data);
      NOP   0; 
NETWORK
TITLE =Response-Signale in Instanz-DB kopieren
      CALL "DPRD_DAT" (
           LADDR                    := #E_Adr_Response,
           RET_VAL                  := #t_RetVal,
           RECORD                   := #Out_Kamera.Response);
      NOP   0; 
NETWORK
TITLE =Poniter für Prägecode schreiben
      L     P##Praegecode; 
      TAR2  ; 
      UD    DW#16#FFFFFF; 
      +D    ; 
      LAR1  ; 
      L     W [AR1,P#2.0]; 
      T     #T_ANY_Anzahl_DBB; 
      L     W [AR1,P#4.0]; 
      T     #T_DB_Nr_PraegeCode; 
      L     D [AR1,P#6.0]; 
      T     #T_DB_A_Adr_PraegeCode; 
NETWORK
TITLE =Prägecode für Kamera schreiben
      U     #Start_Aufnahme; 
      UN    #Aufnahme_gestartet; 
      SPBN  PrCE; 
// Telegrammlänge
      L     DW#16#11; 
      T     #IN_Kamera.Request.Data.TG_Laenge; 
// Erweiterter Trigger
      L     B#16#13; 
      T     #IN_Kamera.Request.Data.Erw_Trigger; 
// Anzahlzeichen
      L     B#16#B; 
      T     #IN_Kamera.Request.Data.Daten_Laenge; 
// Prägecode aus Typverwaltung an Kamera senden
      AUF   DB [#T_DB_Nr_PraegeCode]; 
      LAR1  #T_DB_A_Adr_PraegeCode; 
      L     B [AR1,P#0.0]; 
      T     #IN_Kamera.Request.Data.Jahr3; 
      L     B [AR1,P#1.0]; 
      T     #IN_Kamera.Request.Data.Jahr4; 
      L     B [AR1,P#2.0]; 
      T     #IN_Kamera.Request.Data.Monat1; 
      L     B [AR1,P#3.0]; 
      T     #IN_Kamera.Request.Data.Monat2; 
      L     B [AR1,P#4.0]; 
      T     #IN_Kamera.Request.Data.Tag1; 
      L     B [AR1,P#5.0]; 
      T     #IN_Kamera.Request.Data.Tag2; 
      L     B [AR1,P#6.0]; 
      T     #IN_Kamera.Request.Data.Stunde1; 
      L     B [AR1,P#7.0]; 
      T     #IN_Kamera.Request.Data.Stunde2; 
      L     B [AR1,P#8.0]; 
      T     #IN_Kamera.Request.Data.Minute1; 
      L     B [AR1,P#9.0]; 
      T     #IN_Kamera.Request.Data.Minute2; 
      L     B [AR1,P#10.0]; 
      T     #IN_Kamera.Request.Data.Sekunde1; 
PrCE: NOP   0; 
NETWORK
TITLE =kein Fehler
      L     #Fehlernummer; 
      L     0; 
      ==I   ; 
      =     #kein_Fehler; 
NETWORK
TITLE =Fehler quittieren
      O     #Acknowledge; 
      O     #HMI.Button_Fehler_Quitt; 
      O     #HMI.Button_Reset; 
      =     #IN_Kamera.Control.Reset_Error; 
NETWORK
TITLE =Hardware-Trigger deaktivieren
      U     "VKE_0"; 
      =     #IN_Kamera.Control.Dis_HW_Trig; 
NETWORK
TITLE =Auftrag fertig, wenn Request+Response-Key identisch
      U(    ; 
      L     #IN_Kamera.Request.Key; 
      L     #Out_Kamera.Response.Key; 
      ==I   ; 
      )     ; 
      U(    ; 
      L     #Out_Kamera.Response.Key; 
      L     #Response_Key_alt; 
      <>I   ; 
      )     ; 
      U     #Aufnahme_gestartet; 
      =     #Auftrag_fertig; 
      U     #Auftrag_fertig; 
      NOT   ; 
      SPBNB _001; 
      L     #Out_Kamera.Response.Key; 
      T     #Response_Key_alt; 
_001: NOP   0; 
NETWORK
TITLE =Job-Nummer nio
      U(    ; 
      L     #IN_Kamera.Control.Job_Nr; 
      L     #Out_Kamera.Status.aktiver_Job; 
      <>I   ; 
      )     ; 
      U     #Frg_Job_Num_wechseln; 
      UN    #IN_Kamera.Control.Reset_Error; 
      UN    #Dry_Run; 
      =     L     34.0; 
      BLD   103; 
      CALL #Timer_Job_niO (
           IN                       := L     34.0,
           PT                       := T#5S,
           Q                        := #Job_Nummer_nio);
      NOP   0; 
NETWORK
TITLE =Kamera bereit für neue Aufgabe
      U     #Out_Kamera.Status.Ready; 
      U     #Out_Kamera.Status.OP_Mode; 
      U     #kein_Fehler; 
      UN    #Out_Kamera.Status.Trigger_ack; 
      UN    #Out_Kamera.Status.Ch_Job_ack; 
      UN    #Out_Kamera.Status.Sw_Run_ack; 
      UN    #Aufnahme_gestartet; 
      =     #Bereit; 
NETWORK
TITLE =Job in Kamera ändern
      U(    ; 
      U     #Frg_Job_Num_wechseln; 
      SPBNB _002; 
      L     #Job_Nummer; 
      T     #IN_Kamera.Control.Job_Nr; 
      SET   ; 
      SAVE  ; 
      CLR   ; 
_002: U     BIE; 
      )     ; 
      U(    ; 
      L     #IN_Kamera.Control.Job_Nr; 
      L     #Out_Kamera.Status.aktiver_Job; 
      <>I   ; 
      )     ; 
      U     #Bereit; 
      UN    #Job_Nummer_nio; 
      UN    #Dry_Run; 
      =     #IN_Kamera.Control.Change_Job; 
NETWORK
TITLE =Kamera-Aufnahme starten
      U(    ; 
      U     #Start_Aufnahme; 
      UN    #HMI.Button_Pruefung_wh; 
      O     ; 
      U     #HMI.Button_Anwahl_Hand; 
      U     #HMI.Button_Start_Pruefung; 
      )     ; 
      U(    ; 
      L     #IN_Kamera.Control.Job_Nr; 
      L     #Out_Kamera.Status.aktiver_Job; 
      ==I   ; 
      )     ; 
      U     #Bereit; 
      UN    #HMI.Button_Reset; 
      UN    #Dry_Run; 
      UN    #Aufnahme_gestartet; 
      =     #FLA_Start_Aufnahme; 
      U     #FLA_Start_Aufnahme; 
      S     #Aufnahme_gestartet; 
      U(    ; 
      UN    #Start_Aufnahme; 
      UN    #HMI.Button_Anwahl_Hand; 
      O     ; 
      U     #HMI.Button_Anwahl_Hand; 
      UN    #HMI.Button_Start_Pruefung; 
      O     #HMI.Button_Reset; 
      O     #HMI.Button_Pruefung_wh; 
      )     ; 
      R     #Aufnahme_gestartet; 
      NOP   0; 
NETWORK
TITLE =Kamera-Aufnahme starten durch erhöhen von Key-Request
      U     #FLA_Start_Aufnahme; 
      SPBNB _003; 
      L     #IN_Kamera.Request.Key; 
      L     1; 
      +I    ; 
      T     #IN_Kamera.Request.Key; 
_003: NOP   0; 
NETWORK
TITLE =Simulation für bauteilloses Fahren
      U     #Start_Aufnahme; 
      U     #Dry_Run; 
      =     L     34.0; 
      BLD   103; 
      CALL #Dry_Run_Timer (
           IN                       := L     34.0,
           PT                       := #Dry_Run_Sim_Time,
           Q                        := #Dry_Run_iO);
      NOP   0; 
NETWORK
TITLE =Aufnahme iO/niO
      U     #Aufnahme_gestartet; 
      U     #Auftrag_fertig; 
      =     L     33.0; 
      U     L     33.0; 
      U     #Out_Kamera.Status._12_RDBU; 
      O     #Dry_Run_iO; 
      =     #Aufnahme_OK; 
      U     L     33.0; 
      UN    #Out_Kamera.Status._12_RDBU; 
      S     #Ergebnis_nOK; 
      UN    #Aufnahme_gestartet; 
      R     #Ergebnis_nOK; 
      U     #Ergebnis_nOK; 
      =     #Aufnahme_nOK; 
NETWORK
TITLE =NIO-Kennung in Typfachschreiben
      U     #HMI.Button_Quitt_niO_niO; 
      U     #Ergebnis_nOK; 
      S     #Typ_Daten_Bit; 
NETWORK
TITLE =Generate errors
// Errors
      O     #Job_Nummer_nio; 
      ON    #Out_Kamera.Status.Ready; 
      ON    #Out_Kamera.Status.OP_Mode; 
      ON    #kein_Fehler; 
      =     #Fehler; 
// Warninngs
      O     #Aufnahme_nOK; 
      =     #Warnung; 
NETWORK
TITLE =Write Data to Outputs
      L     #Address; 
      T     #A_Adr_Control; 
      L     16; 
      +I    ; 
      T     #A_Adr_Request; 
NETWORK
TITLE =Control-Signale zur Kamera-Kamera
      CALL "DPWR_DAT" (
           LADDR                    := #A_Adr_Control,
           RECORD                   := #IN_Kamera.Control,
           RET_VAL                  := #t_RetVal);
      NOP   0; 
NETWORK
TITLE =Request-Signale zur Kamera-Kamera
      CALL "DPWR_DAT" (
           LADDR                    := #A_Adr_Request,
           RECORD                   := #IN_Kamera.Request,
           RET_VAL                  := #t_RetVal);
      NOP   0; 
NETWORK
TITLE =Restore AR1
      L     #Save_AR1; 
      LAR1  ; 
END_FUNCTION_BLOCK
	Dieser Baustein sorgt dafür das eine Kamera Bilder von Objekten macht.
Jetzt haben wir die gleiche Kamera nochmal bekommen und haben sie genauso mit eingebunden wie die andere.
Mein Problem ist jetzt das die 1. Kamera immer noch funktioniert aber die 2. nicht. Hänge ich den FB10 für die 1. Kamera ab funktioniert die 2.
Im FB10 wird mit SFC14 und 15 gearbeitet. Und soviel ich weiß liegt es daran das der SFC15 beim 2. FB10 Aufruf die Ausgangsdaten falsch beschreibt.
Hat jemand von Euch Erfahrung mit SFC14 und 15 wenn mehrere Instanzen aufgerufen werden.
Was muss jetzt an dem FB10 geändert werden für die neue Situation.
Die richtige Adresse aus der Hardwarekonfiguration wird jedem FB10 Aufruf als Integer Wert übergeben.
Angeblich spielt das AR2 eine große Rolle wenn man Eingänge auf den IDB lädt und vom IDB wieder die Ausgänge beschreibt.
Es wäre toll wenn mir einer von Euch helfen könnte. Mit Adressregister zu Arbeiten ist nicht meine Stärke.
Vielen Dank
Mfg Tommylik
			
				Zuletzt bearbeitet: 
			
		
	
								
								
									
	
		
			
		
		
	
	
	
		
			
		
		
	
								
							
							
	
 
 