Step 7 FB funktioniert nicht wenn er das 2. mal aufgerufen wird

tommylik

Level-2
Beiträge
115
Reaktionspunkte
0
Zuviel Werbung?
-> 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.

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:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo NBerger,

Vielen Dank für deine Antwort.

Nein.
Da die 2. Kamera in einer anderen Station rein gekommen ist wird der FB10 in dem zur Station gehörigem FB aufgerufen.

z.B.

1.Kamera FB380 > FB10 (IDB380)

2.Kamera FB385 > FB10 (IDB385)

Mfg Tommylik
 
Die FB10-Instanzen sind jeweils als Multiinstanzen im FB380 und FB385 deklariert? Und es wird diese lokale Instanz aufgerufen, oder wird der FB10 jeweils mit einem eigenen IDB aufgerufen?

Harald
 
Hallo Harald,

Vielen Dank für deine Antwort.

Sie werden als Instanz aufgerufen. Sie haben keinen eigenen IDB.

FB10.jpg

Mfg Tommylik



 
Zuviel Werbung?
-> Hier kostenlos registrieren
E- und A-Bereich der 2. Kamera in der Hardwarekonfiguration sind tatsächlich identisch?

Man könnte die 2. Kamera mal mit einem eigenen IDB aufrufen. Das würde dann keine Multiinstanz mehr sein und man kann sehen, ob es evtl am AR2 liegt.
 
Hallo Ralle,

Vielen Dank für deine Antwort.

Der Aufbau ist identisch aber natürlich sind andere Adressen vergeben.
Die 2. Kamera mit einem eigenen IDB aufzurufen kann ich leider erst zum Wochenende prüfen.
Zur Zeit haben wir den 2. FB10 Aufruf raus genommen damit die Anlage weiter arbeiten kann.

Meine neue Vermutung laut der Hilfe zum SFC14 und 15 müssen es
konsistente Daten sein zum lesen.
Da aber die Inputs vom SFC14 und 15 Temp Variablen sind denke ich das beim 2. Aufruf das nicht mehr sicher ist.

Dann habe ich noch gehört vom Kollegen das man Pointer nicht mit SFC14 und 15 kombiniert,
sondern das man den
BLKMOV nimmt, wenn man mit Zeigern arbeitet und ganze Bereiche beschreiben will.
Aber das weiß ich nicht ob das wirklich so stimmt. [h=1]Also erstmal vielen Dank für Eure Unterstützung.[/h]Wenn ich neue Erkenntnisse habe dann melde ich mich.

Mfg Tommylik



 
Mit den Adressen meinete ich die der jeweiligen einzelnen Kamera.
Da müssen E- und A-Bereich identisch beginnen, also z.B. E bei 24 und A auch bei 24.
Das bei de Kameras insgesamt unterschiedliche Adressbereiche adressieren müssen ist klar. ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die E/A-Adressen der Kameras liegen offensichtlich in einem Prozessabbild (OB1-PA?). Warum wird da SFC14 DPRD_DAT und SFC15 DPWR_DAT verwendet? Da kann man direkt SFC20 BLKMOV nehmen. Ich meine, manche Baugruppen mögen es nicht, wenn das Betriebssystem auf die Peripherieadressen zugreift um das Prozessabbild zu aktualisieren, und zusätzlich DPRD_DAT und DPWR_DAT aufgerufen werden.
Auf welcher CPU läuft der Code?

Der RET_VAL von DPRD_DAT und DPWR_DAT wird nie ausgewertet...

Könnte es sein, daß beim Aufruf der zweiten FB10-Instanz nicht alle Übergabeparameter korrekt sind? Werden da vielleicht noch Parameter oder Variablen der ersten Kamera übergeben?

Was heißt "funktioniert nicht"?

Harald
 
Es wäre vielleicht mal ganz interessant zu sehen was in dem aufrufenden FB passiert - also FB380 bzw. FB 385 ...
Wenn der FB10 für sich genommen funktioniert und solange er "nur" von dem einen oder anderen FB verwendet wird kann der FB10 selbst erstmal nicht so ganz verkehrt sein. Ich verstehe doch doch richtig wenn du dagst, dass die 2. Kamera auch funktionieren würde wenn die erste nicht aufgerufen wird ?

Gruß
Larry
 
Vielen Dank für Eure antworten.

@Ralle E- und A-Bereich beginnen identisch.

@ Harald

CPU 416F-3

Warum
SFC14 DPRD_DAT und SFC15 DPWR_DAT hergenommen wurden kann ich dir nicht sagen der FB ist schon so seit dem die Anlage läuft.
Müsste ich die Fa. fragen die es programmiert hat.
Ich dachte es ist einfach die 2. Kamera einzubinden da es ja schon ein Baustein existiert und damals hatte keiner gewusst das noch eine 2. Kamera reinkommt.
Wenn der FB10 nur einmal aufgerufen wird funktioniert es ja auch.
Aber um nicht weiter Eure Zeit zu vergeuden werde ich an meinen Chef weitergeben das ein neuer Baustein her muss und dann kann ich die Kamera in Betrieb nehmen.
Ich hatte gehofft das es nur eine Kleinigkeit ist, was an dem FB korrigiert werden muss und deswegen habe ich hier Euch gefragt.
Aber hier brauchen wir was komplett neues das muss die Firma einkaufen.
Also Entschuldigung für die Zeit Verschwendung aber auch vielen Dank für Eure Unterstützung.

Mfg Tommylik
 
Hallo Larry,

Vielen Dank für deine Antwort und sorry ich habe nicht mitbekommen das du, als ich am schreiben war, etwas geschrieben hattest.

Bei der Kamera 1 beginnen die Ein-und Ausgänge bei 5200
Bei der Kamera 2 beginnen die Ein-und Ausgänge bei 5260

Um auf deinen Beitrag noch einzugehen, jede Kamera funktioniert wenn ein FB10 nicht aufgerufen wird.

Was in dem aufrufenden FB passiert kann ich dir jetzt leider nicht zeigen da wie du weißt der FB10 für die 2. Kamera bis zum Wochenende nicht aufgerufen wird.
Ich habe leider auch nicht viel Zeit bekommen um den Fehler vernünftig zu analysieren.

Auch für deine Hilfe vielen Dank.

Mfg Tommylik
 
werde ich an meinen Chef weitergeben das ein neuer Baustein her muss und dann kann ich die Kamera in Betrieb nehmen.
Ich hatte gehofft das es nur eine Kleinigkeit ist, was an dem FB korrigiert werden muss und deswegen habe ich hier Euch gefragt.
Aber hier brauchen wir was komplett neues das muss die Firma einkaufen.
Also ich kann an dem FB10 nichts finden warum der nicht mit 2 Instanzen funktionieren sollte. Ich glaube das Problem liegt außerhalb des FB10.

Harald
 
... Meine neue Vermutung laut der Hilfe zum SFC14 und 15 müssen es konsistente Daten sein zum lesen.
Da aber die Inputs vom SFC14 und 15 Temp Variablen sind denke ich das beim 2. Aufruf das nicht mehr sicher ist...
"Konsistent" müssen die in der Hardwarekonfiguration deklarierten Adressblöcke sein. Das ist aber in deinem Fall gegeben, sonst würde es niemals funktionieren.


... Dann habe ich noch gehört vom Kollegen das man Pointer nicht mit SFC14 und 15 kombiniert,
sondern das man den
BLKMOV nimmt, wenn man mit Zeigern arbeitet und ganze Bereiche beschreiben will....
Bei konsistenten Daten ist das schon richtig mit den SFC14/15. Die Datenbereiche liegen bei dir in den statischen Lokaldaten des IDB und werden als ANY-Pointer an die SFCs übergeben. Diese Strukturen müssen genau die selbe Größe haben, wie die Adressblöcke in der Hardwarekonfiguration. Aber auch das ist in deinem Fall richtig, da es ansonsten auch niemals funktioniert hätte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wird der FB10 der ersten Kamera vor oder nach dem FB10 der zweiten Kamera aufgerufen? Beziehungsweise der FB380 vor oder nach dem FB385 im OB?

Ist bei den beiden Kameras die Variable #Praegecode unterschiedlich oder gleich?
Mit dieser Variable wird im FB ein DB geöffnet.
 
Hallo,

Sorry für die verspätete Antwort, aber bei uns gab es einen Corona Fall da mussten wir zu Hause bleiben.

@ TP-Inc
Von der Firma Sensopart.

@ Holzmichl
FB380 wird vor FB385 aufgerufen.

Dieses Problem können wir jetzt nicht mehr lösen da mein Chef die Firma beauftragt hat dieses Problem zu lösen.
Die Firma hat so wie ich es gesehen habe die SFC14/15 rausgeschmissen und alles mit dem BLKMOV umgesetzt und es läuft.

Trotzdem vielen Dank für Eure Hilfe und Mühe.

Frohe Weihnachten und bleibt alle Gesund und Munter.

Mfg Tommylik
 
Zurück
Oben