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

Ergebnis 1 bis 6 von 6

Thema: Peripheriebereich in SCL kopieren

  1. #1
    Registriert seit
    21.08.2006
    Ort
    Schweiz
    Beiträge
    82
    Danke
    9
    Erhielt 6 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen

    Ich möchte im SCL einem Peripheriebereich in die stat eines FB kopieren und umgekehrt.
    z.B. vom EB300 möchte ich 6 Bytes in die lokalen Stat-daten kopieren. Und von den Stat-Daten wieder 10 Bytes in das AB300.
    In den Stat-Daten habe ich einen Any-Pointer.
    Ich dachte, dass könnte man über einen Block-Move lösen?
    Ich möchte meine Profibusbasuteine in SCL-umschreibem. Bis jetzt sind die Bausteine in AWL und dort habe ich das über Pointer gelöst.

    Viele Grüsse
    Ralph
    Zitieren Zitieren Peripheriebereich in SCL kopieren  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Ich denke, du brauchst dafür den SFC14/15.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    wenn du es in AWL bislang über Pointer gelößt hast dann verstehe ich dass so, dass du eine Art Schleife hast in der du die PEW's (oder PED's) quasi "Stück für Stück" vom Einen in den Anderen kopierst - ist das so ?
    Wenn ja, dann sähe dein Weg in SCL im Grunde genauso aus - du baust dir einen Index-Pointer mit dem du auf die Adressen in einer Schleife zugreifst.

    Gruß
    Larry

  4. #4
    rr_zx ist offline Benutzer
    Themenstarter
    Registriert seit
    21.08.2006
    Ort
    Schweiz
    Beiträge
    82
    Danke
    9
    Erhielt 6 Danke für 4 Beiträge

    Standard

    Hallo

    Das mit dem SFC14/15 sollte bei Profibus/Profinet funktionieren. Jedoch habe ich bei einer Zählerkarte (direkt an einer 151-8 CPU angeschlossen) immer einen Fehler bekommen, dass die Länge nicht stimmt.
    Ich möchte am Baustein einen IN-Parameter definieren mit der Peripherieadresse (integer).
    Früher habe ich das so gelöst:

    Code:
    //Statuswort lesen 
          L     #Adresse                    //Pointer für Adresse machen
          L     L#8
          *D    
          LAR1  
    //ganzer Lesebereich in Temp. Daten schreiben
          L     PEW [AR1,P#0.0]
          T     #StatusSteuerWord
          L     PED [AR1,P#2.0]
          T     #Daten_1
          L     PED [AR1,P#6.0]
          T     #Daten_2
          L     PED [AR1,P#10.0]
          T     #Daten_3
    
    
    //Pointer für Stat machen und ganzer Bereich schreiben   
          L     P##ek_in_drive
          LAR1  
          L     #StatusSteuerWord
          T     DIW [AR1,P#0.0]
          L     #Daten_1
          T     DID [AR1,P#2.0]
          L     #Daten_2
          T     DID [AR1,P#6.0]
          L     #Daten_3
          T     DID [AR1,P#10.0]
    Als Zwischenlösung habe ich einen Any-Pointer im SCL verwendet und verwendeten Peripheriewörter in das Prozessabblid gelegt.
    Mit folgendem Code:

    Code:
    (* Werte von SSI Geber einlesen                          *)
    (*********************************************************)
    
    #AnyPointerDatenModul.Syntax_ID       := b#16#10;
    #AnyPointerDatenModul.Datentyp        := b#16#2;
    #AnyPointerDatenModul.Count           := w#16#8;
    #AnyPointerDatenModul.DB_Nummer       := w#16#0;
    #AnyPointerDatenModul.Byte_Pointer    := SHL(IN := INT_TO_DWORD(#Adresse_Mess_System), N :=3) OR 16#8100_0000;
    
    #Ret :=  BLKMOV(SRCBLK := #"AnyPointerDatenModul-AT", DSTBLK => #SSI_Daten.Eing_daten);
    Ich möchte nur nicht immer das Prozessabblid erweitern.

    Viele Grüsse
    Ralph

  5. #5
    Registriert seit
    06.10.2003
    Beiträge
    3.408
    Danke
    449
    Erhielt 502 Danke für 406 Beiträge

    Standard

    Hallo Ralph,

    Zitat Zitat von rr_zx Beitrag anzeigen
    ..Ich möchte am Baustein einen IN-Parameter definieren mit der Peripherieadresse (integer)...
    du kannst indiziert auf deine PEW-Adressen zugreifen.


    Sinnfreier Code:
    Code:
    FUNCTION "PEW_RD_DAT": VOID
    
    VAR_INPUT
      PEW_ADRESSE                       : INT;                    // Anfangsadresse PEW-Bereich
    END_VAR
    
    VAR_TEMP
      X,Y,Z                             : BYTE;
      INDEX_PEW                         : INT;
    END_VAR
    
    BEGIN
        INDEX_PEW := PEW_ADRESSE;
        X := PEB[INDEX_PEW];
        Y := PEB[INDEX_PEW + 1];
        Z := PEB[INDEX_PEW + 2];
         // oder wie auch immer (Schleife?)
    END_FUNCTION

    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

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

    rr_zx (06.11.2012)

  7. #6
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    wir machen das immer mit einer Struct:

    Code:
    Empfangspuffer :STRUCT
            MeinWort_1   :WORD;
            MeinWort_2   :WORD;
            MeinWort_3   :WORD;
    END_STRUCT;
    Code:
            Hardware_IO_Adresse := INT_TO_WORD(E_Meine_IO_Addresse);
            
            Rueckgabewert := DPRD_DAT(LADDR := Hardware_IO_Adresse
                                                ,RECORD := Empfangspuffer );

Ähnliche Themen

  1. Any-Pointer zum Kopieren von Strings (SCL)
    Von volu im Forum Programmierstrategien
    Antworten: 7
    Letzter Beitrag: 15.06.2012, 10:00
  2. Antworten: 14
    Letzter Beitrag: 14.02.2012, 15:29
  3. Sting nach String kopieren in SCL
    Von Waelder im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 01.03.2011, 08:23
  4. SCL Word in beliebeigen UDT kopieren
    Von dinner4one im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 01.06.2008, 17:00
  5. Bausteininhalt kopieren / SCL
    Von broesel im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 18.06.2007, 17:22

Lesezeichen

Berechtigungen

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