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

Seite 3 von 8 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 72

Thema: Probleme mit SFC 14 / SFC 15 in FB

  1. #21
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    ich habe jetzt einen FC erstellt der die Daten von einem Servo liest und in einen DB (mit einem UDT) transferiert.

    Das funktioniert auch sehr gut.

    Jetzt will ich den ersten FB für den Servo schreiben.

    Dazu brauche ich nun wieder die Daten vom Servo aus dem DB.

    Wie beim FC habe ich wieder einen Datenzeiger der die Daten aus dem DB an den FB übergibt.

    Ich behaupte mal ich habe alles richtig gemacht, klappt aber nicht.

    Hier mal der Code meines FB

    Code:
    Netzwerk 1
      
          L     P##Daten_Zeiger             // Datenzeiger in AKKU 1 laden
          LAR1                              //  AR1 mit Inhalt von AKKU 1 laden
    
          L     W [AR1,P#4.0]               // DB Nummer in AKKU 1 laden
          T     #Daten.DB_Nr                // Inhalt von AKKU 1 nach TEMP kopieren
    
          L     D [AR1,P#6.0]               // Adresse in AKKU 1 laden
          T     #Daten.Adresse              // Inhalt von AKKU 1 nach TEMP kopieren
    
    Netzwerk 2
    
          AUF   DB [#Daten.DB_Nr]           // DB Nummer mit Inhalt aus TEMP öffnen
          LAR1  #Daten.Adresse              // AR1 mit Inhalt von AKKU 1 laden
    
    Netzwerk 3
    
          U     #MX1.PI.Betriebsart_24V
          =     #AKTIV
    Der Aufruf dazu sieht so aus:

    Code:
           CALL  FB     1 , DB111
           Daten_Zeiger       :="MX1".DB_VAR
           AKTIV              :=M0.1
    In dem Datenbaustein MX1 ist das entsprechende Bit PI.Betriebsart_24V gesetzt. Aber das Bit M0.1 wird nicht HIGH.

    Woran kann das liegen?

  2. #22
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Ok also jetzt ist mir auf jeden Fall klar warum das nicht funktioniert.

    Ich muss natürlich auch in dem FB alle meine Daten aus dem DB manuell auf die temporären Variablen zuweisen.
    - BLKMOV funktioniert da nicht.

    Ist doch richtig so? - Find ich nämlich schon recht umständlich ..

    smartie

  3. #23
    Registriert seit
    13.10.2007
    Beiträge
    12.038
    Danke
    2.789
    Erhielt 3.273 Danke für 2.159 Beiträge

    Standard

    Du hast ein FB genommen da musst du natürlich
    mit den Adressregistern aufpassen.
    Warum machst du das so, endweder du nimmst ein
    FC und legst die Daten global an oder einen FB und
    erzeugst eine Instanz und holst dir die Daten aus der
    direkt im FB aus der Instanz.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  4. #24
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo,
    ich muß / möchte hier noch einmal auf den Beitrag #1 von Smartie zurückkommen ...
    Aus meiner Sicht spricht gar nichts dagegen, für jede Achse (oder was auch immer) einen eigenen FB zu machen - das mache ich auch grundsätzlich immer so. Auch ein mehrfaches Aufrufen der SFC14 und 15 sollte kein Problem darstellen.
    Im Grundsatz sollte der ursprüngliche Baustein also funktionieren.
    Was mich hier jetzt interessiert ist : wo ist denn der Datenbereich PI und PO deklariert ? Ich hoffe nicht im Bereich TEMP sondern doch ganz bestimmt im Bereich STAT des FB ...

    Gruß
    LL

  5. #25
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    669
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard

    ja. ist im stat bereich. Steht als Kommentar da (#1)
    "arbeite klug, nicht hart" - deutsches Sprichwort

  6. #26
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Hallo zusammen,

    wie SPS Killer schon bemerkt hat sind PI und PO nicht im TEMP sondern im STAT Bereich definiert.

    @ Larry Laffer:
    Du sagst du hast das schon öfter so realisiert. - Hast du vielleicht ein Beispiel für mich?

    @ Helmut:

    Ich habe einen FC zur Kommunikation mit jeweils einer Achse erstellt.
    Die FB's sind für die einzelnen Betriebsarten der Achsen.
    Aber irgendwie muss ich doch die Daten aus dem DB in den FB bekommen.

    Ich hoffe ich nerv euch nicht zu sehr damit, aber das ist schon ne Menge neues für mich.

    Gruß smartie

  7. #27
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    @ Larry Laffer:
    Im übrigen habe ich insgesamt 8 FB's je Achse die jeweils einen Aufruf der SFC14 / 15 haben.

  8. #28
    Registriert seit
    13.10.2007
    Beiträge
    12.038
    Danke
    2.789
    Erhielt 3.273 Danke für 2.159 Beiträge

    Standard

    @Larry Laffer,
    ich stimme dir auf jedem fall zu das man die SFC14/15 öfter aufrufen
    kann. Bei Smartie sieht allerdings so aus, das er dieses für jede Betriebs-
    art macht (wie ich aus Beitrag #3 lese) ich denke mal das er dieses aber
    nicht gegeneinander veriegelt. Ich glaube er schreibt etwas in der ersten
    Betriebsart etwas rein und macht es weiter unten mit einer anderen Betriebs-
    art wieder platt.
    Deswegen war mein Tip nur einmal an den Teilnehmer zu schreiben und
    in die Betriebsarten separat zu sehen.
    Aber Smartie hält sich auch Vornehm zurück mit entsprechenden Informationen
    bzw. Code.

    @Smartie,
    um dir weiter helfen zu können stell doch mal mehr von deinen Programm
    hier rein damit wir überhaubt sehen können wo es hackt.
    Geändert von rostiger Nagel (15.02.2010 um 07:46 Uhr)
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  9. #29
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    ... sieh mal an ... da ist der Helmut wieder etwas schneller gewesen ...

    @Smartie:
    Auif die Schnelle finde ich jetzt keinen Beispiel-Baustein - das bringt uns m.E. aber auch nicht wirklich weiter. Ich sehe das genau wie Helmut und würde auch sagen, dass es sinnig ist, deinen ganzen Baustein zu kennen und nicht nur den Auszug der ersten Zeilen (wenn das denn überhaupt so aussieht). Diese Zeilen könnten auch in einem meiner Bausteine so drin stehen.
    Was dir schon zu denken geben sollte ist, dass dir der / die SFC keinen Fehler melden - die sind damit nämlich eigentlich nicht kleinlich.

    Gruß
    LL

  10. #30
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Morgen,

    FC10 - MX1 Steuern

    FUNCTION FC 10 : VOID
    TITLE =
    VERSION : 0.1

    BEGIN
    NETWORK
    TITLE =Kommunikation mit Achse MX1 aufbauen

    CALL FC 1 (
    Daten_Zeiger := DB1.DB_VAR,
    IO_Adresse := 258,
    FEHLER_SFC := M 0.0);
    NOP 0;
    NETWORK
    TITLE =Achse 1 freigeben
    //IO-Adresse wird an dieser Stelle momentan nicht benötigt
    U M 1.0;
    = L 0.0;
    BLD 103;
    CALL FB 1 , DB 112 (
    Daten_Zeiger := DB1.DB_VAR,
    REFERENZIEREN_START := L 0.0,
    AKTIV := M 0.1,
    FERTIG := M 0.2);

    NOP 0;
    END_FUNCTION


    FC1 - MOVIAXIS1


    Code:
    FUNCTION FC 1 : VOID
    TITLE =
    AUTHOR : HO
    FAMILY : SEW
    NAME : BUS_POSI
    VERSION : 0.1
    
    
    VAR_INPUT
      Daten_Zeiger : ANY ;    //Zeiger Ablage Daten für die Achse
      IO_Adresse : INT ;    
    END_VAR
    VAR_OUTPUT
      FEHLER_SFC : BOOL ;    
    END_VAR
    VAR_TEMP
      Daten : STRUCT     //Zeiger für DB und Adresse der Anzeige
       DB_Nr : INT ;    //Anzeige-DB Nr
       Adresse : DWORD ;    //Anzeige Start-Adresse im DB
      END_STRUCT ;    
      Peripherie : WORD ;    //Peripherie-Zeiger Umrichter
      RET_VAL_SFC14 : INT ;    //Rückgabe vom DP lesen
      RET_VAL_SFC15 : INT ;    //Rückgabe zum DP schreiben
      MX1 : UDT 1;    
      test : BOOL ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Adresse von INT nach Word wandeln
    
          L     #IO_Adresse; 
          T     #Peripherie; 
          NOP   0; 
    NETWORK
    TITLE =Daten vom Umrichter lesen
    //#MX1.PI
          CALL SFC   14 (
               LADDR                    := #Peripherie,
               RET_VAL                  := #RET_VAL_SFC14,
               RECORD                   := #MX1.PI);
          NOP   0; 
    NETWORK
    TITLE =Daten zum Umrichter schreiben
    
          CALL SFC   15 (
               LADDR                    := #Peripherie,
               RECORD                   := #MX1.PO,
               RET_VAL                  := #RET_VAL_SFC15);
          NOP   0; 
    NETWORK
    TITLE =Fehlerauswertung SFC
    
          O(    ; 
          L     #RET_VAL_SFC15; 
          L     0; 
          <>I   ; 
          )     ; 
          O(    ; 
          L     #RET_VAL_SFC14; 
          L     0; 
          <>I   ; 
          )     ; 
          =     #FEHLER_SFC; 
    NETWORK
    TITLE =Test
    
          U     #MX1.PI.Betriebsart_24V; 
          =     #test; 
    NETWORK
    TITLE =Datenzeiger auftrennen
    
          L     P##Daten_Zeiger; // Datenzeiger in AKKU 1 laden
          LAR1  ; //  AR1 mit Inhalt von AKKU 1 laden
    
          L     W [AR1,P#4.0]; // DB Nummer in AKKU 1 laden
          T     #Daten.DB_Nr; // Inhalt von AKKU 1 nach TEMP kopieren
    
          L     D [AR1,P#6.0]; // Adresse in AKKU 1 laden
          T     #Daten.Adresse; // Inhalt von AKKU 1 nach TEMP kopieren
    
    NETWORK
    TITLE =Datenbaustein aufschlagen
    
          AUF   DB [#Daten.DB_Nr]; // DB Nummer mit Inhalt aus TEMP öffnen
          LAR1  #Daten.Adresse; // AR1 mit Inhalt von AKKU 1 laden
    NETWORK
    TITLE =Daten aus #PI in Zwischenspeicher DB kopieren
    
          U     #MX1.PI.FU_freigegeben; 
          =     DBX [AR1,P#3.1]; 
    
          U     #MX1.PI.Betriebsart_24V; 
          =     DBX [AR1,P#3.4]; 
    
    
    
    NETWORK
    TITLE =Daten aus Zwischenspeicher DB in #PO kopieren
    
    
          U     DBX [AR1,P#32.1]; 
          =     #MX1.PO.Freigabe_Schnellstop; 
    
    
          U     DBX [AR1,P#32.2]; 
          =     #MX1.PO.Freigabe_Halt; 
    
    END_FUNCTION
    Geändert von smartie (15.02.2010 um 10:27 Uhr)

Ähnliche Themen

  1. Bus Probleme
    Von KR-TKD im Forum Feldbusse
    Antworten: 7
    Letzter Beitrag: 15.06.2011, 16:37
  2. CPU 315 F 2PN/DP DI Probleme
    Von Joke im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 12.05.2009, 21:10
  3. Probleme über Probleme!
    Von tom_2802 im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 12.06.2008, 22:19
  4. Probleme mit ALM
    Von Larry Laffer im Forum PC- und Netzwerktechnik
    Antworten: 4
    Letzter Beitrag: 08.03.2008, 18:13
  5. Probleme mit OPC
    Von ILW im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 01.11.2007, 12:37

Lesezeichen

Berechtigungen

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