Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 26

Thema: SCL und Multiinstanz

  1. #11
    Avatar von Grimsey
    Grimsey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.10.2006
    Ort
    Plauen
    Beiträge
    376
    Danke
    107
    Erhielt 13 Danke für 11 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe nochmals die Konsistenz geprüft und das gesamte Programm neu übersetzen lassen.
    Der Fehler tritt nach wie vor auf.

    Also OB121 gelöscht und zur Fehlerstelle gewechselt.

    Hier wird mir dann ein anderer Baustein angezeigt, der mit aus den LagerDBs anhand einer Fachnummer, die Fach- und PalettenDaten ausgibt. Dieser Baustein wurde aber auch separat für sich getestet und funktioniert. Auch funktioniert er an anderen Stellen, wo er mehrfach aufgerufen wird. Ich vermute das das Problem in der Konstellation der Aufrufe besteht, ohne das ich sagen könnte wo genau.

    SCL Multiinstanz Fehlerstelle.jpg
    Step7 V5.5 SP4 HF11
    TIA Portal V14 SP1
    WinCC flexible 2008 SP3
    WinCC 7.4 Update 4
    =======================

  2. #12
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.639
    Danke
    377
    Erhielt 803 Danke für 644 Beiträge

    Standard

    Man sieht dass das Problem liegt in FC_FachAuslesen.

    Kannst du den Aufruf von FC_FachAuslesen von FB_SucheAlternative zeigen, und auch der Deklaration und Code von FC_FachAuslesen ?
    Jesper M. Pedersen

  3. Folgender Benutzer sagt Danke zu JesperMP für den nützlichen Beitrag:

    Grimsey (29.10.2014)

  4. #13
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Jetzt musst Du eigentlich nur noch überlegen welce Daten an dieser Stelle im AR2 stehen...
    Das Grauen lauert in der Zwischenablage !!

  5. Folgender Benutzer sagt Danke zu dtsclipper für den nützlichen Beitrag:

    Grimsey (29.10.2014)

  6. #14
    Avatar von Grimsey
    Grimsey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.10.2006
    Ort
    Plauen
    Beiträge
    376
    Danke
    107
    Erhielt 13 Danke für 11 Beiträge

    Standard

    Der Aufruf von dem FC_FachAuslesen sieht wie folgt aus:
    Aufruf FC106 in FB_SucheAlternative.png

    zum Zeitpunkt, an dem der Fehler auftritt steht dort eine Fachnummer....teste ich den FC für sich allein im OB mit dieser Fachnummer, gibt er das korrekte Ergebnis zurück.
    Daher wundert es mich, dass es innerhalb des FBs da irgendein Problem gibt.
    Step7 V5.5 SP4 HF11
    TIA Portal V14 SP1
    WinCC flexible 2008 SP3
    WinCC 7.4 Update 4
    =======================

  7. #15
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.639
    Danke
    377
    Erhielt 803 Danke für 644 Beiträge

    Standard

    Bitte auch dies posten:
    Zitat Zitat von JesperMP Beitrag anzeigen
    [..] und auch der Deklaration und Code von FC_FachAuslesen ?
    Jesper M. Pedersen

  8. Folgender Benutzer sagt Danke zu JesperMP für den nützlichen Beitrag:

    Grimsey (29.10.2014)

  9. #16
    Avatar von Grimsey
    Grimsey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.10.2006
    Ort
    Plauen
    Beiträge
    376
    Danke
    107
    Erhielt 13 Danke für 11 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Bitte auch dies posten:
    Der FC ist ein globaler FC, hier der Code dazu:

    Code:
    FUNCTION "FC_FachAuslesen" : VOIDTITLE =FachDaten und PalettenDaten auslesen
    //dieser Baustein ermittelt der übgergebenen Fachnummer die Facheigenschaften und 
    //die PalettenDaten des Fachs und gibt diese an die Eingangs-AnyPointer zurück
    AUTHOR : ROP
    VERSION : 0.1
    
    
    
    
    VAR_INPUT
      iFachnummer : DINT ;    //Fachnummer
      iZielPalettenDaten : ANY ;    
      iZielFachDaten : ANY ;    
    END_VAR
    
    VAR_TEMP
      tPointerPalettenDaten : ANY ;    //Pointer für Palettendaten
      tPointerFachDaten : ANY ;    //Pointer für Facheigenschaften
      tZielPattenDaten : ANY ;    
      tZielFachDaten : ANY ;    
      retval : INT ;    
    
      tSYS : STRUCT     //Systemvariablen
       AR1 : DWORD ;    //Adressregister sichern
       AR2 : DWORD ;    //Adressregister sichern
       INSTANZOFS : DWORD ;    //Instanzdatenoffset sichern
      END_STRUCT ; 
       
      FachDaten : STRUCT     
       PalettenDaten : "UDT_Palette";    
       Facheigenschaften : "UDT_Facheigenschaften";    
      END_STRUCT ;   
     
      tDBNrRegal : INT ;    //Nr des DBs des Quellfachs
      tOffsetFach : DINT ;    
      tOffsetEigenschaften : DINT ;    
      tGasse : INT ;    
      tRegal : INT ;    
      tX : INT ;    
      tY : INT ;    
      tZ : INT ;    
      tZwischenergebnis : INT ;    
      tWerteGueltig : BOOL ;    
      tEinsmerker : BOOL ;    
    END_VAR
    
    BEGIN
    
    NETWORK
    TITLE ==== System save === 
    // 
          TAR1  #tSYS.AR1; // Sichern AR1
          TAR2  #tSYS.AR2; // Sichern AR2
    
    
          TAR2  ; 
          UD    DW#16#FFFFFF; // Bereichskennung ausmaskieren
          T     #tSYS.INSTANZOFS; // Sichern Instanzdatenanfang
    
    NETWORK
    TITLE =
    
    
          UN    #tEinsmerker; 
          S     #tEinsmerker; 
    
    NETWORK
    TITLE =Fachnummer in Koordinaten zerlegen
    
    
          CALL "FC_KonvertFachnummer" (
               iFachnummer              := #iFachnummer,
               oRegalnummer             := #tRegal,
               oX                       := #tX,
               oY                       := #tY,
               oZ                       := #tZ);
          NOP   0; 
    
    NETWORK
    TITLE =Koordinaten auf gültigen Wertebereich prüfen
    //Regal >= 1 <= 14
    //X     >= 1 <= 61
    //Y     >= 1 <= 12
    //Z     >= 1 <= 2
          U     #tEinsmerker; 
          =     L    161.0; 
          U     L    161.0; 
          U(    ; 
          L     #tRegal; 
          L     1; 
          >=I   ; 
          )     ; 
          U(    ; 
          L     #tRegal; 
          L     14; 
          <=I   ; 
          )     ; 
          =     #tWerteGueltig; 
          U     L    161.0; 
          U     #tWerteGueltig; 
          U(    ; 
          L     #tX; 
          L     1; 
          >=I   ; 
          )     ; 
          U(    ; 
          L     #tX; 
          L     61; 
          <=I   ; 
          )     ; 
          =     #tWerteGueltig; 
          U     L    161.0; 
          U     #tWerteGueltig; 
          U(    ; 
          L     #tY; 
          L     1; 
          >=I   ; 
          )     ; 
          U(    ; 
          L     #tY; 
          L     12; 
          <=I   ; 
          )     ; 
          =     #tWerteGueltig; 
          U     L    161.0; 
          U     #tWerteGueltig; 
          U(    ; 
          L     #tZ; 
          L     1; 
          >=I   ; 
          )     ; 
          U(    ; 
          L     #tZ; 
          L     2; 
          <=I   ; 
          )     ; 
          =     #tWerteGueltig; 
    
    NETWORK
    TITLE =Bausteinende wenn Werte nicht gültig
    
    
          UN    #tWerteGueltig; 
          SPB   ende; 
    
    NETWORK
    TITLE =Quell-Gasse aus Regalnummer ermitteln
    
    
          L     #tRegal; 
          +     1; 
          L     2; 
          /I    ; 
          T     #tGasse; 
    
    
    NETWORK
    TITLE =DB-Nr berechnen/festlegen
    //tDBNrRegal = 100 + (tGasse*10) + ((tRegal / tGasse) - 1)*2 + tZ
          L     #tRegal; 
          L     #tGasse; 
          /I    ; 
          +     -1; 
          L     2; 
          *I    ; 
          T     #tZwischenergebnis; // Regaloffset 0 oder 2
    
    
          L     #tGasse; // 10er Schritte DB-Nr.
          L     10; 
          *I    ; 
          +     100; // Grundoffset DB-Nr.
          L     #tZwischenergebnis; 
          +I    ; 
          L     #tZ; // Fachtiefe 1 oder 2
          +I    ; 
          T     #tDBNrRegal; 
    
    NETWORK
    TITLE =Offset (Fach) innerhalb vom Lager-DB berechnen
    //Offset pro X-Koordinate = 1008 Byte
    //Offset pro Y-Koordnate = 84 Byte
    //
    //Offset = [(iX-1)*1008] + [(iY-1)*84]
          L     #tX; 
          L     1; 
          -I    ; 
          ITD   ; 
          L     L#1008; 
          *D    ; 
          T     #tOffsetFach; 
    
    
          L     #tY; 
          L     1; 
          -I    ; 
          ITD   ; 
          L     L#84; 
          *D    ; 
          L     #tOffsetFach; 
          +D    ; 
          T     #tOffsetFach; 
    
    NETWORK
    TITLE =Anypointer bilden
    
    
    NETWORK
    TITLE =Any-Pointer PalettenDaten
    
    
          L     B#16#10; // ID (S7)
          T     LB     0; 
    
    
          L     B#16#2; // Byte (siehe Hilfe "Format des Parametertyps ANY")
          T     LB     1; 
    
    
          L     80; // Länge: 80 byte
          T     LW     2; 
    
    
          L     #tDBNrRegal; 
          T     LW     4; // Quell-DB
    
    
          L     #tOffsetFach; // ab Adresse 0.0 (festlegen!)
          SLD   3; // 2*8 (nicht ändern!)            
          L     P#DBX 0.0; // Datenbaustein-Kennung (nicht ändern!)
          OD    ; 
          T     LD     6; 
    
    NETWORK
    TITLE =Any-Pointer Facheigenschaften
    
    
          L     B#16#10; // ID (S7)
          T     LB    10; 
    
    
          L     B#16#2; // Byte (siehe Hilfe "Format des Parametertyps ANY")
          T     LB    11; 
    
    
          L     4; // Länge: 4 byte
          T     LW    12; 
    
    
          L     #tDBNrRegal; 
          T     LW    14; // Ziel-DB: = DBNrRegal
    
    
          L     #tOffsetFach; // ab Adresse 0.0  (=variabel)
          L     L#80; 
          +D    ; 
          T     #tOffsetEigenschaften; 
    
    
          L     #tOffsetEigenschaften; 
          SLD   3; // *8 (nicht ändern!)            
          L     P#DBX 0.0; // Datenbaustein-Kennung (nicht ändern!)
          OD    ; 
          T     LD    16; 
    
    NETWORK
    TITLE =AnyPointer ZielPalettenDaten
    
    
          L     P##iZielPalettenDaten; 
          TAR2  ; 
          UD    DW#16#FFFFFF; 
          +D    ; 
          LAR1  ; 
          L     D [AR1,P#0.0]; 
          T     LD    20; 
          L     D [AR1,P#4.0]; 
          T     LD    24; 
          L     W [AR1,P#8.0]; 
          T     LW    28; 
    
    NETWORK
    TITLE =AnyPointer ZielFachDaten
    
    
          L     P##iZielFachDaten; 
          TAR2  ; 
          UD    DW#16#FFFFFF; 
          +D    ; 
          LAR1  ; 
          L     D [AR1,P#0.0]; 
          T     LD    30; 
          L     D [AR1,P#4.0]; 
          T     LD    34; 
          L     W [AR1,P#8.0]; 
          T     LW    38; 
    
    NETWORK
    TITLE =Daten ausgeben
    
    NETWORK
    TITLE =PalettenDaten
    
    
          CALL "BLKMOV" (
               SRCBLK                   := #tPointerPalettenDaten,
               RET_VAL                  := #retval,
               DSTBLK                   := #tZielPattenDaten);
          NOP   0; 
    
    NETWORK
    TITLE =Facheigenschaften
    
    
          CALL "BLKMOV" (
               SRCBLK                   := #tPointerFachDaten,
               RET_VAL                  := #retval,
               DSTBLK                   := #tZielFachDaten);
          NOP   0; 
    
    NETWORK
    TITLE ==== System recovery === 
    // 
    ende: LAR1  #tSYS.AR1; // Load AR1
          LAR2  #tSYS.AR2; // Load AR2
    
    
          SET   ; 
          SAVE  ; 
          CLR   ; 
    END_FUNCTION
    Geändert von Grimsey (29.10.2014 um 11:34 Uhr)
    Step7 V5.5 SP4 HF11
    TIA Portal V14 SP1
    WinCC flexible 2008 SP3
    WinCC 7.4 Update 4
    =======================

  10. #17
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.294
    Danke
    932
    Erhielt 3.321 Danke für 2.683 Beiträge

    Standard

    Oha, ein Multiinstanz-FC...

    Kann es sein, daß dieser Schweine-Baustein vor langer langer Zeit von irgendjemandem zusammengeschrieben wurde und heute niemand mehr weiß, wie er funktionieren sollte? Und später kam irgendein Genie auf die Idee, den ursprünglichen FB einfach in FC umzubenennen, weil man da so schön den lästigen Instanz-DB weglassen kann?

    Ist Dir bewußt, daß der FC in dem "heimlichen" Übergabeparameter AR2 bestimmte Werte erwartet? Wie stellst Du gezielt sicher, daß in AR2 ein sinnvoller/richtiger Wert drinsteht, besonders wenn Du den FC statt aus einem FB aus dem OB1 aufrufst?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    vierlagig (29.10.2014)

  12. #18
    Avatar von Grimsey
    Grimsey ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.10.2006
    Ort
    Plauen
    Beiträge
    376
    Danke
    107
    Erhielt 13 Danke für 11 Beiträge

    Standard

    Der Baustein ist nicht alt und auch nicht vor langer langer Zeit geschrieben.
    Und ein Multiinstanz-FC geht doch gar nicht anzulegen Und einen FC kann man doch mehrmals aufrufen...

    Ich habe jetzt jedenfalls den kompletten Aufruf des Bausteins "FB_SucheAlternative" aus dem übergeordneten Baustein herausgenommen, also den Multiinstanzaufruf entfernt, und damit funktioniert es jetzt korrekt.
    Step7 V5.5 SP4 HF11
    TIA Portal V14 SP1
    WinCC flexible 2008 SP3
    WinCC 7.4 Update 4
    =======================

  13. #19
    Registriert seit
    06.10.2003
    Beiträge
    3.445
    Danke
    453
    Erhielt 509 Danke für 411 Beiträge

    Standard

    Zitat Zitat von Grimsey Beitrag anzeigen
    ..Ich habe jetzt jedenfalls den kompletten Aufruf des Bausteins "FB_SucheAlternative" aus dem übergeordneten Baustein herausgenommen, also den Multiinstanzaufruf entfernt, und damit funktioniert es jetzt korrekt.
    Und damit gibst du dich zufrieden?

    Zitat Zitat von Grimsey Beitrag anzeigen
    ...Und ein Multiinstanz-FC geht doch gar nicht anzulegen ...
    Nein, aber du hast so etwas wie einen Anti-Multiinstanz-FC erfunden . Was machst du denn mit dem AR2 in deiner FC?
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  14. Folgender Benutzer sagt Danke zu Onkel Dagobert für den nützlichen Beitrag:

    Grimsey (30.10.2014)

  15. #20
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Onkel Dagobert Beitrag anzeigen

    Nein, aber du hast so etwas wie einen Anti-Multiinstanz-FC erfunden . Was machst du denn mit dem AR2 in deiner FC?
    na, erfunden hat er es nicht - ist halt zufällig drauf gestoßen.
    es gibt versierte programmierer, die das zur jahrtausendwende sehr erfolgreich in unterschiedlichen maschinen verteilt haben. einen promovierten dieser art kenne ich.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  16. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    vollmi (29.10.2014)

Ähnliche Themen

  1. Multiinstanz in SCL
    Von godi im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 08.03.2015, 19:59
  2. Step 7 SCL Multiinstanz
    Von emilio20 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.12.2013, 17:25
  3. Step 7 SCL - Multiinstanz
    Von voni_1 im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 04.12.2013, 07:31
  4. TIA V11 SCL TON Multiinstanz
    Von MrEASY im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 04.03.2013, 15:17
  5. TON als Multiinstanz unter SCL
    Von derwestermann im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 09.10.2007, 13:30

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •