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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Put and Get - Baustein Error

  1. #1
    Registriert seit
    30.07.2014
    Beiträge
    289
    Danke
    66
    Erhielt 33 Danke für 19 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich bin gerade dabei, mir einen Standart-Baustein aufzubauen, den ich dann später mal als Multiinstanz für meine Kommunikationen aufrufen kann. Habe das ganze mal in FUP angefangen, bekomme jetzt aber ein Problem. Gerne switche ich auch auf SCL um, sofern jemand da besser weiterhelfen kann.

    Ich verwende eine 315 PN/DP und programmiere, wie ersichtlich, mit TIA.

    Folgendes Bild sollte mein Problem darstellen:

    Error_PUG.jpg

    Ich wollte gerne meine DB Bereichszeiger an meinen Multiinstanz schreiben, deshalb als Any als InOut deklariert. Pointer hilft mir auch nicht weiter. Ich bekomme immer die Meldung "Unzulässige Parameterversorgung".

    Muss ich das ganze zerpflücken oder wie kann ich das später mal extern beschreiben?

    Ist für mich grade nicht unbedingt ersichtlich, vielleicht ja für die Forenteilnehmer easy, dann freue ich mich um so mehr über aufklärende Antworten.

    Vielen Dank im Voraus!
    Freundliche Grüße aus München, der Stadt mit Herz


    There are 2#10 kinds of people, those who do the work & those who take the credit.
    Zitieren Zitieren Put and Get - Baustein Error  

  2. #2
    Avatar von Münchnerjunge
    Münchnerjunge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.07.2014
    Beiträge
    289
    Danke
    66
    Erhielt 33 Danke für 19 Beiträge

    Standard

    Weiß keiner Rat?
    Freundliche Grüße aus München, der Stadt mit Herz


    There are 2#10 kinds of people, those who do the work & those who take the credit.

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    S7-300/400:
    ANY-Parameter können nicht von IN/IN_OUT zu Bausteinaufrufen durchgereicht werden. Sie müssen vorher in TEMP umkopiert werden. Diese Parameter-Kopien in TEMP können dann an den Bausteinaufruf geschrieben werden.

    Hier ein Beispielcode mit 2 Varianten für das Umkopieren in classic-Step7-AWL
    ANY-Parameter von IN/IN_OUT in TEMP umkopieren in Multiinstanz-FB

    Für mehr Beispiele mal googlen mit "any an fb übergeben"

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Münchnerjunge (07.02.2015)

  5. #4
    Avatar von Münchnerjunge
    Münchnerjunge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.07.2014
    Beiträge
    289
    Danke
    66
    Erhielt 33 Danke für 19 Beiträge

    Standard

    Hallo PN/DP,

    danke für den Hinweis.

    Hatte das ganze in der Zwischenzeit auf SCL umgeswitcht und da habe ich merkwürdigerweise bei gleicher Deklaration keine Probleme mehr.

    Hier mein Code:
    Code:
      
       ///////////////////////    
       ////(*Sendebefehl*)////
       ///////////////////////
    
    
    IF #Do_Send AND NOT #F_Trig_Send THEN
        #Send := True;
       ELSE
           #Send := false;
       END_IF;
       #F_Trig_Send := #Do_Send;
       
       //////////////////////////
       ////(*Empfangsbefehl*)////
       //////////////////////////
       
       IF #Do_Receive AND NOT #F_Trig_Receive THEN
           #Receive := True;
       ELSE
           #Receive := false;
       END_IF;
       #F_Trig_Receive := #Do_Receive;
       
       
       
       //////////////////////
       ///(*Daten_Senden*)///
       //////////////////////
       
       #PUT_Instance(REQ := #Send,
                     ID := #ID_Verbindung,
                     STATUS => #Status_Send,
                     ADDR_1 := #Send_Data_DB,
                     SD_1 := #Partner_Send_Data_DB)
       ;
       
       
        /////////////////////////
        ///(*Daten_Empfangen*)///
        /////////////////////////
    
    
       #GET_Instance(REQ:= #Receive,
                     ID := #ID_Verbindung ,
                  STATUS => #Status_Receive,
                  ADDR_1 := #Receive_Data_DB ,
                  RD_1 := #Partner_Receive_Data_DB)
    ;
                  
        /////////////////////////////////
        ///(*Senden_Empfangen_Fehler*)///
        /////////////////////////////////
    
    
    #Error_Se_Rec := #GET_Instance.ERROR
    OR #PUT_Instance.ERROR;

    Ist SCL einfach nur "dumm" und erkennt den Fehler nicht, oder funktioniert das ganze so? Kann es leider erst am Montag wieder testen, wenn ich die ganze Hardware habe.

    Würde mich aber wirklich mal interessieren, vielleicht weiß ja jemand spontan ob das so funktionieren kann, oder ob ich die hier auch in Temp umkopieren muss?
    Freundliche Grüße aus München, der Stadt mit Herz


    There are 2#10 kinds of people, those who do the work & those who take the credit.

  6. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Ich glaube, daß SCL zumindest in diesem Punkt mal nicht "dumm" ist, sondern automatisch den ANY in eine unsichtbare TEMP-Variable umkopiert.

    Bei S7-300 kann man sehen, welchen AWL-Code der SCL-Compiler erzeugt, indem man den erzeugten Baustein (FB) in einen anderen Bausteine-Ordner kopiert und da normal öffnet.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #6
    Avatar von Münchnerjunge
    Münchnerjunge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.07.2014
    Beiträge
    289
    Danke
    66
    Erhielt 33 Danke für 19 Beiträge

    Standard

    Das wäre mir aber neu. Wir reden hier von TIA V13, nicht Step 7 5.5. Hier übernimmt er ja die SCL Quellen mit, wenn ich den kopiere. Oder täusche ich mich etwa?
    Freundliche Grüße aus München, der Stadt mit Herz


    There are 2#10 kinds of people, those who do the work & those who take the credit.

  8. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Zitat Zitat von Münchnerjunge Beitrag anzeigen
    Das wäre mir aber neu. Wir reden hier von TIA V13, nicht Step 7 5.5. Hier übernimmt er ja die SCL Quellen mit, wenn ich den kopiere. Oder täusche ich mich etwa?
    Ich verstehe nicht, was Du mit kopieren und Quellen mitnehmen meinst...

    Das classic-SCL kopiert den IN/IN_OUT-ANY direkt in den IN_OUT-ANY der PUT-Instanz ohne Umweg über TEMP. Der SCL-Compiler darf solchen Code erzeugen, der kennt ja die Adressen und setzt die normalerweise (*) automatisch richtig ein, falls sich Adressen ändern.

    (*) für TIA-SCL will ich nicht garantieren, da sind noch zu viele unglaubliche Bugs drin...

    Nachtrag: Compiler Beispiel
    Das classic-SCL V5.3 macht aus dem hier:
    Code:
    FUNCTION_BLOCK FBxxx
    
    VAR_INPUT
      ID_Verbindung : WORD ;
    END_VAR
    VAR_IN_OUT
      Partner_Send_Data_DB : ANY ;
      Send_Data_DB : ANY ;
    END_VAR
    VAR_TEMP
      Status_Send : WORD ;
    END_VAR
    VAR
      // statische Variablen
      PUT_Instance : PUT ;
      Send : BOOL ;
    END_VAR
    
      PUT_Instance(REQ := Send,
                   ID := ID_Verbindung,
    //               STATUS => Status_Send,  // geht so erst ab TIA
                   ADDR_1 := Send_Data_DB,
                   SD_1 := Partner_Send_Data_DB)
      ;
      Status_Send := PUT_Instance.STATUS;
     
    END_FUNCTION_BLOCK
    diesen AWL-Code (Leerzeilen von mir):
    Code:
          SET   
          SAVE  
          =     L      2.1
    
          U     #Send
          =     #PUT_Instance.IN4
    
          L     #ID_Verbindung
          T     #PUT_Instance.IN5
    
          L     DID [AR2,P#12.0]
          T     DID [AR2,P#30.0]
          L     DID [AR2,P#16.0]
          T     DID [AR2,P#34.0]
          L     DIW [AR2,P#20.0]
          T     DIW [AR2,P#38.0]
    
          L     DID [AR2,P#2.0]
          T     DID [AR2,P#40.0]
          L     DID [AR2,P#6.0]
          T     DID [AR2,P#44.0]
          L     DIW [AR2,P#10.0]
          T     DIW [AR2,P#48.0]
    
          +AR2  P#22.0
          UC    FB    15
          +AR2  P#8170.0
    
          L     #PUT_Instance.OUT8
          T     #Status_Send
    
          U     L      2.1
          SAVE  
          BE
    Harald
    Geändert von PN/DP (07.02.2015 um 13:03 Uhr) Grund: Beispielcode zugefügt
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #8
    Avatar von Münchnerjunge
    Münchnerjunge ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.07.2014
    Beiträge
    289
    Danke
    66
    Erhielt 33 Danke für 19 Beiträge

    Standard

    Zitat Zitat von Münchnerjunge Beitrag anzeigen
    Das wäre mir aber neu. Wir reden hier von TIA V13, nicht Step 7 5.5. Hier übernimmt er ja die SCL Quellen mit, wenn ich den kopiere. Oder täusche ich mich etwa?
    War auf

    Zitat Zitat von PN/DP Beitrag anzeigen
    indem man den erzeugten Baustein (FB) in einen anderen Bausteine-Ordner kopiert und da normal öffnet.

    Harald
    bezogen..
    Freundliche Grüße aus München, der Stadt mit Herz


    There are 2#10 kinds of people, those who do the work & those who take the credit.

  10. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Ach so... Mit TIA kenne ich mich nicht genug aus. Ich weiß nicht ob man den erzeugten FB ohne Quelle kopieren kann?

    Bei S7-300 kann man aber zum Glück das TIA umgehen/kontrollieren, indem man den FB in eine CPU oder in PLCSIM lädt und mit Step7 V5.x wieder herauslädt. Schau mal hier

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Das classic-SCL V5.3 macht aus dem hier:
    Wäre mal interessant zu sehen, welchen AWL-Code das TIA-SCL daraus erzeugt.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. PUT / GET in SCL
    Von Carsten77 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 17.12.2012, 23:09
  2. Antworten: 3
    Letzter Beitrag: 08.09.2011, 00:22
  3. PUT GET Fehler
    Von Bensen83 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 04.09.2011, 13:29
  4. Put/get S74142dp
    Von Ahnungsloser im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 05.08.2008, 22:30
  5. PUT und Get
    Von Farinin im Forum Simatic
    Antworten: 20
    Letzter Beitrag: 19.01.2007, 15:40

Lesezeichen

Berechtigungen

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