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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: 1500er Get / Put

  1. #11
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von vollmi Beitrag anzeigen
    INOUT landet ja sowieso in keiner Instanz müssen also zwingend beschalten werden.
    Aha, das wußte ich nicht. Bei S7-300/400 (und Step7 classic) liegt der IN_OUT in der Instanz.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. #12
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.647
    Danke
    788
    Erhielt 654 Danke für 497 Beiträge

    Standard

    Ne sorry mein fehler landet doch in der instanz, hatte ich irgendwie ausgeblendet. Aber nichtsdestotrotz. muss beschaltet werden zumindest addr_1 und sd_1

  3. #13
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Ne sorry mein fehler landet doch in der instanz, hatte ich irgendwie ausgeblendet. Aber nichtsdestotrotz. muss beschaltet werden zumindest addr_1 und sd_1
    Ich meine den IN_OUT des FB, der den GET aufruft, an den Du den ADDR_1 des GET herausgezogen hast (also den IN_OUT den Du beim Aufruf des GET an ADDR_1 dranschreibst).

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #14
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.862
    Danke
    78
    Erhielt 805 Danke für 548 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Was willst du denn mit dem Remotezeiger im Temp machen? Da kannst du doch nix zuweisen.

    Bis jetzt bin ich kein stück weiter als Remote und Variant des PUT/GET über die INOUT Schnittstelle des Aufrufenden Bausteins nach draussen zu geben.

    Ich habs nicht fertiggebracht irgendwie einen ANY auf den REMOTE oder VARIANT Zeiger zu kopieren. Noch REMOTE oder VARIANT irgendwie zu verändern.
    REMOTE und VARIANT kann man auch nicht in TEMP oder STAT deklarieren wenn der Baustein optimiert angelegt ist, warum auch immer.
    ???

    Als mein FB ist nicht Optimiert. Der FB wird in einem anderen FB als Multiinstanz aufgerufen.

    Also ich habe im Temp den Any durch Remote ersetzt und wie für den Any auch das indirekt kopiert.
    Remote und Any haben ja den gleichen Aufbau. Behaute ich jetzt mal einfach so den der Get akzeptiert am addr_1 einen ganz normalen any-zeiger wenn ich es direkt eingebe.
    z.b. P#DB10.DBX0.0 BYTE 32

    Also denke ich, das an ADDR_1 genau das gleiche stehen wird wie früher
    Code:
     Quellzeiger Remote 0.0     
    // Zusammenstellung des Quellzeigers
          LAR1  P##Quellzeiger       //zeiger ins adressregister laden
          L     W#16#10              //SyntaxID. bei AWL immer 10
          T LB [ AR1 , P#0.0 ]
          L     W#16#2               //Typ BYTE
          T LB [ AR1 , P#1.0 ]
          L     #Laenge              //Anzahl Bytes
          T LW [ AR1 , P#2.0 ]
          L     #Quell_DB            //Quell-DB
          T LW [ AR1 , P#4.0 ]
          L     #Anfangsadresse_Quelle//Anfangsadresse
          SLD   3
          T LD [ AR1 , P#6.0 ]
          L     B#16#84              //Speicherbereich (hier DB)
          T LB [ AR1 , P#6.0 ]
    Zitat Zitat von vollmi Beitrag anzeigen
    Nur nützt einem das nix. denn die Instanz von PUT und von GET sind im IDB schlicht nicht sichtbar zum editieren. Man sieht nur das was über die Schnittstelle geht in der Instanz. Also IN OUT und INOUT.
    Muss ich doch auch gar nicht editieren. der remote-zeiger wird ja indirekt durch durch die eingangsparameter erzeugt.
    genausowenig muss ich einen IN Any auf ein Temp Remote kopieren
    oder versteh ich hier was falsch?
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  5. #15
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.647
    Danke
    788
    Erhielt 654 Danke für 497 Beiträge

    Standard

    Zitat Zitat von volker Beitrag anzeigen
    ???

    Als mein FB ist nicht Optimiert. Der FB wird in einem anderen FB als Multiinstanz aufgerufen.

    Also ich habe im Temp den Any durch Remote ersetzt und wie für den Any auch das indirekt kopiert.
    Remote und Any haben ja den gleichen Aufbau. Behaute ich jetzt mal einfach so den der Get akzeptiert am addr_1 einen ganz normalen any-zeiger wenn ich es direkt eingebe.
    z.b. P#DB10.DBX0.0 BYTE 32
    Tatsache du hast recht. Der Remote sieht wirklich so aus wie ein Any im gegensatz zum Variant.
    Mich hat immer irritiert das am Remote wie auch am Variant ein anyzeiger erlaubt ist: z.b. P#DB10.DBX0.0 BYTE 32
    Direkt eingegeben. Aber der Variant keinerlei speicherbereich für sich beansprucht



    muss ich doch auch gar nicht editieren. der remote-zeiger wird ja indirekt durch durch die eingangsparameter erzeugt.
    genausowenig muss ich einen IN Any auf ein Temp Remote kopieren
    oder versteh ich hier was falsch?
    Ich dachte du willst sowohl Addr wie auch sd durchreichen und wie ein any bearbeiten. Bei addr könnte das ja sogar gehen bei sd aber wohl nicht. Bin gespannt.

  6. #16
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.862
    Danke
    78
    Erhielt 805 Danke für 548 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Ich dachte du willst sowohl Addr wie auch sd durchreichen und wie ein any bearbeiten. Bei addr könnte das ja sogar gehen bei sd aber wohl nicht. Bin gespannt.
    Nee. Will ich gar nicht.
    Quell / und Zieladresse werden im FB indirekt über die Eingangsparameter erzeugt.
    Einen Any(Remote) direkt an einen move oder ähnliches anzulegen habe ich bisher nie gemacht.

    Ich meine getestet zu haben, dass ich einen remote als InOut deklariert habe den der Get (put) auch an ADDR_1 akzeptiert hat.
    RD_1 (SD_1) (also beim mir im code der #empfangszeiger / #euellzeiger)(siehe awl-quelle im post 1) ist ja ein any der ohne probs funktioniert hat


    --- das jetzt mal nur am rande ----
    Ein Test eben mal zu hause unter s7 classic (hab hier nicht das komlette eq)
    Ein Any als IN bzw als INOUT deklariert und versucht das an den sfc20 zu legen. Geht nicht.

    Hab auch mal kurz probiert einen any als IN / INOUT in den FB zu übergeben.
    Dort habe mal einen Zeiger auf den IN / INOUT gelegt und über das AR zu laden.
    Beim beobachten habe ich aber bei allen über die mit AR angesprochenen Vars eine 0.
    also
    L p##InOutAny
    LAR1
    L LW[ar1,p#0.0] //hier steht beim beobachten 0
    übergeben habe ich an den InOutAny p#db10.dbx10.0 byte 10
    Im db10 habe ich dort entsprechende werte eingetragen.
    ich hätte jetzt eigentlich erwartet, dass ich im ar die werte sehe die ich im db eingetragen habe


    cpu meldet fehler für ob121 und ob88 (das hatte ich noch nie (muss ich mir mal genauer anschauen))

    Hab das auch nur kurz getestet ohne mir da jetzt weitere Gedanken zu zu machen.
    1. ist hier jetzt auch nicht relevant
    2. irgendwann muss ja auch mal Feierabend sein

    ------------------------------
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  7. #17
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.647
    Danke
    788
    Erhielt 654 Danke für 497 Beiträge

    Standard

    Ich hab da mal was gebastelt So funktionierts mit ANY am Eingang des aufrufenden Bausteins. damit werden sowohl SD wie auch addr belegt und funktionieren tuts auch. Natürlich nur nicht optimierte Daten.

    Code:
    TYPE "ANY_POINTER"
    VERSION : 0.1
       STRUCT
          SyntaxID : Byte;
          Bereichstyp : Byte;
          Anzahl_Werte : Int;
          DB_Nr : Int;
          Startadresse : DWord;
       END_STRUCT;
    
    
    END_TYPE
    
    FUNCTION_BLOCK "PUTGET"
    { S7_Optimized_Access := 'FALSE' }
    VERSION : 0.1
       VAR_INPUT 
          Sendebereich : Any;
          Empfangsbereich : Any;
          ID : Word;
       END_VAR
    
    
       VAR 
          PUT_Instance {OriginalPartName := 'PUT_SFB_PART'; LibVersion := '1.3'} : PUT;
          GET_Instance {OriginalPartName := 'GET_SFB_PART'; LibVersion := '1.3'} : GET;
          save_status_Put : Word;
          save_status_Get : Word;
          Put_Reset {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
          Get_Reset {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
          Put_set {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
          Get_set {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;
       END_VAR
    
    
       VAR_TEMP 
          SndADDR : Remote;
          pSndADDR AT SndADDR : "ANY_POINTER";
          SndSD : Any;
          pSndSD AT SndSD : "ANY_POINTER";
          GetADDR : Remote;
          pGetADDR AT GetADDR : "ANY_POINTER";
          GetSD : Any;
          pGetSD AT GetSD : "ANY_POINTER";
       END_VAR
    
    
    
    
    BEGIN
        #SndSD := #Sendebereich; // in Temp kopieren für überlagerung
        #GetSD := #Empfangsbereich;
        
        // anypointer als udt im ganzen zugewisen
        #pGetADDR := #pSndADDR;
        
        // anypointer einzeln zugewiesen
        #pSndADDR.Anzahl_Werte := #pSndSD.Anzahl_Werte;
        #pSndADDR.Bereichstyp := #pSndSD.Bereichstyp;
        #pSndADDR.DB_Nr := #pSndSD.DB_Nr;
        #pSndADDR.Startadresse := #pSndSD.Startadresse;
        #pSndADDR.SyntaxID := #pSndSD.SyntaxID;
        
        // zeug Senden
        #PUT_Instance(ID:=#ID,
                      ADDR_1:=#SndADDR,
                      SD_1:=#SndSD);
        
        #PUT_Instance.REQ := (#PUT_Instance.ERROR OR #PUT_Instance.DONE OR #Put_set.Q) AND NOT #Put_Reset.Q;
        
        
        IF #PUT_Instance.ERROR THEN
            #save_status_Put := #PUT_Instance.STATUS;
        END_IF;
        
        #Put_Reset(IN:=#PUT_Instance.REQ,
                   PT:=t#10s);
        
        #Put_set(IN:=NOT #PUT_Instance.REQ,
                 PT:=t#10s);
        
        // zeug Zeug holen
        #GET_Instance(ID:=#ID,
                      ADDR_1:=#GetADDR,
                      RD_1:=#GetSD);
        
        #GET_Instance.REQ := (#GET_Instance.ERROR OR #GET_Instance.NDR OR #Get_set.Q) AND NOT #Get_Reset.Q;
        
        IF #GET_Instance.ERROR THEN
            #save_status_Get := #GET_Instance.STATUS;
        END_IF;
        
        #Get_Reset(IN := #GET_Instance.REQ,
                   PT := t#10s);
        
        #Get_set(IN := NOT #GET_Instance.REQ,
                 PT := t#10s);
    END_FUNCTION_BLOCK
    Feierabend is langweilig

    Edit: Ich bin mir ziemlich sicher dass ich als ich die 1500er frisch hatte. Ewigs versucht hab denn variant gegen einen any zu ersetzen und keinen Erfolg damit habe. Und jetzt geht es auf einmal. Keinen Plan was ich vorher falsch gemacht habe.
    Jetzt werde ich dasselbe noch bei der Offenen Kommunikation ausprobieren. Da nerven nämlich die Variant genauso.

    Edit2: Hab s Anstossen noch vergessen falls man automatisch kommunikation starten will.
    Geändert von vollmi (22.01.2016 um 10:38 Uhr)

  8. #18
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.647
    Danke
    788
    Erhielt 654 Danke für 497 Beiträge

    Standard

    So habs mit BSEND/RECV auch probiert. Funktioniert mit ANY einwandfrei. Ich weiss echt nicht was ich anders mach das man statt variant auch any anhängen kann.

  9. #19
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von vollmi Beitrag anzeigen
    So habs mit BSEND/RECV auch probiert. Funktioniert mit ANY einwandfrei. Ich weiss echt nicht was ich anders mach das man statt variant auch any anhängen kann.
    Neuere Version und Firmware?
    Da ändert sich immer so viel, dass man gar nciht alles mitbekommt.
    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

Ähnliche Themen

  1. TIA Safety ET200SP an 1500er
    Von volker im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 18.01.2016, 16:42
  2. TIA Strommessung mit S7-1500er
    Von jusaca im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 26.09.2014, 19:32
  3. TIA OPC für 1500er
    Von Jochen Kühner im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 11.04.2014, 23:01
  4. Antworten: 12
    Letzter Beitrag: 04.12.2013, 15:17
  5. TIA Beschriftungsstreifen 1500er Baugruppen
    Von georg28 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 03.05.2013, 14:46

Lesezeichen

Berechtigungen

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