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

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

Thema: Anypointer in UDT?

  1. #1
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    hat schon mal jemand einen Anypointer per UDT in den Lokaldatenbereich gepackt?

    Hintergrund wäre ein besser lesbarer Code, z.B.

    Code:
          L     B#16#10                     
          T     #Source.S7_ID            //statt LB0
    
          L     B#16#2                     
          T     #Source.DatenTyp         //statt LB1
    
          L     10                             
          T     #Source.Wiederholfaktor  //statt LW2
    
          L     255                      //DBNr
          T     #Source.DB_Nr            //statt LW4
    
    //Hier kommen meine Probleme, da das LD6 den Pointer auf die Daten und den Speicherbreich-Codierung
    //enthällt
          L     P#228.0                  //Pointer Byte.Bit  
          T     #Source.???              //statt LD6
    
          L     B#16#84                  //Speicherbereich DB
          T     #Source.???              //statt LB6
    Wie könnte man den Pointer in ein UDT packen?
    Danke.

    Gruß
    Zitieren Zitieren Anypointer in UDT?  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.204
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Code:
          L     P#DBX 228.0              //Pointer Bereich:Byte.Bit
          T     #Source.Adr              //LD6
    
    oder
    
          L     B#16#84                  //Speicherbereich DB
          TAD
          L     P#228.0                  //Pointer Byte.Bit
          OD
          T     #Source.Adr              //LD6
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    ssound1de (22.05.2013)

  4. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    du kannst hier keinen neuen Datentyp (3 Byte Länge erschaffen).
    Du kannst den "LD6"-Bereich entweder als DWORD oder als 4 BYTE oder als 2 WORD's betrachten. Lediglich in SCL hättest du da die Möglichkeit mit der AT-Sicht ...

    Gruß
    Larry

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

    ssound1de (22.05.2013)

  6. #4
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.493
    Danke
    1.142
    Erhielt 1.243 Danke für 974 Beiträge

    Standard

    Zitat Zitat von ssound1de Beitrag anzeigen
    Hi,

    hat schon mal jemand einen Anypointer per UDT in den Lokaldatenbereich gepackt?

    Hintergrund wäre ein besser lesbarer Code, z.B.
    Dann wird es Zeit auf SCL umzusteigen.
    Wie Larry schon schrieb gibt es dort sogenannte Views oder Sichten.
    Damit kann man dein Problem (und noch viele andere) wunderbar lösen.

    Gruß
    Dieter

  7. Folgender Benutzer sagt Danke zu Blockmove für den nützlichen Beitrag:

    ssound1de (22.05.2013)

  8. #5
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Danke für Eure Antworten.

    Werde mich auf die Schnelle wohl für die Methode von Harald entscheiden

    Mit SCL hab ich mich bisher leider überhaupt nicht beschäftigt.
    Für welche Gegebenheiten rentiert sich SCL? Sicher nicht für gewöhnliche Ablaufsteuerungen.
    Eher für Berechnungen o.ä.? Hätte ich sicher schon öfter gebrauchen können.

    Wenn ich das richtig sehe ist SCL Pascal ähnlich.

  9. #6
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.621
    Danke
    777
    Erhielt 649 Danke für 494 Beiträge

    Standard

    Zitat Zitat von ssound1de Beitrag anzeigen
    Mit SCL hab ich mich bisher leider überhaupt nicht beschäftigt.
    Für welche Gegebenheiten rentiert sich SCL? Sicher nicht für gewöhnliche Ablaufsteuerungen.
    Eher für Berechnungen o.ä.? Hätte ich sicher schon öfter gebrauchen können.
    Bei Berechnungen (ellenlange Formeln) spielt SCL natürlich seine Stärke aus.
    Allerdings ich benutze es mittlerweile schon für alles mögliche. Denn auch bedingungsgebundene Konstruktionen sehen in SCL IMHO wesentlich übersichtlicher aus.

    mfG René

  10. #7
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.493
    Danke
    1.142
    Erhielt 1.243 Danke für 974 Beiträge

    Standard

    Zitat Zitat von ssound1de Beitrag anzeigen
    Danke für Eure Antworten.

    Werde mich auf die Schnelle wohl für die Methode von Harald entscheiden

    Mit SCL hab ich mich bisher leider überhaupt nicht beschäftigt.
    Für welche Gegebenheiten rentiert sich SCL? Sicher nicht für gewöhnliche Ablaufsteuerungen.
    Eher für Berechnungen o.ä.? Hätte ich sicher schon öfter gebrauchen können.

    Wenn ich das richtig sehe ist SCL Pascal ähnlich.
    SCL ist recht universell.
    Manche machen alles damit, inklusive aller Abläufe, andere nur Berechnungen, Datenhandling und Kommunikation.
    Ich denke dass muss jeder selber rausfinden und natürlich auch entsprechend den Kundenvorgaben einsetzen.

    Aber sobald natürlich indirekte Adressierung, Anypointer und dergleichen ins Spiel kommen ist SCL sehr gut.
    Du sparst immens Zeit und man macht - meiner Erfahrung nach - weniger Fehler.
    Richtig zur Tragen kommen die Vorteile wenn du sauber symbolisch programmierst und deine Daten in Structuren und / oder UDTs hast.

    Gruß
    Dieter

  11. Folgender Benutzer sagt Danke zu Blockmove für den nützlichen Beitrag:

    ssound1de (22.05.2013)

  12. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    ... Aber sobald natürlich indirekte Adressierung, Anypointer und dergleichen ins Spiel kommen ist SCL sehr gut.
    Du sparst immens Zeit und man macht - meiner Erfahrung nach - weniger Fehler.
    Im Grunde hat Dieter das Wesentliche ja schon genannt. Vielleicht nur noch mal zu dem Zitierten : Bei richtiger Vorgehensweise kannst du dir durch SCL (eine Mischung aus Basic und Pascal) das ganze Pointer-Gedöns i.d.R. komplett ersparen.
    Was allerdings den Einsatz und die Einsatzmöglichkeiten von SCL angeht : da bist du dann schnell wieder bei einer Grundsatz-Diskussion.

    Gruß
    Larry

  13. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    ssound1de (22.05.2013)

  14. #9
    Avatar von ssound1de
    ssound1de ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.06.2003
    Ort
    Im Staub ...
    Beiträge
    337
    Danke
    115
    Erhielt 26 Danke für 23 Beiträge

    Standard

    Hallo,

    muss hier leider nochmal nachhaken und Euch um Hilfe bitten.

    Hab mich ja auf die Schnelle für die Methode von Harald entschieden.
    Hab nen UDT angelegt und wie im Bild zu sehen eingebunden.

    UDT.JPG

    Gefüllt wird der Any-Pointer wie folgt...
    Code:
          L     B#16#10                     //S7 ID
          T     #Source.S7ID
          L     B#16#2                      //Datentyp Byte
          T     #Source.DataType
          L     22                          //Wiederholfaktor
          T     #Source.Len
          L     255                         //DBNr
          T     #Source.DBNr
          L     P#DBX 50.0                  //Pointer DB.Byte.Bit
          T     #Source.Adr
    
    //Senden
    Send: CALL  FC   5                    //AG_SEND (CP343-1Lean)
           ACT   :=#SendAct
           ID    :=1
           LADDR :=W#16#140
           SEND  :=#Source
           LEN   :=#Source.Len
           DONE  :=#SendDone
           ERROR :=#SendError
           STATUS:=#SendState
    Der FC5 liefert beim Senden den Status 8185H -> Parameter LEN größer als Quell-Bereich SEND.
    Wenn ich statt dem UDT einen AnyPointer anlege und die Lokaldaten zuweise...
    Code:
          L     B#16#10                     //S7 ID
          T     LB 0
          L     B#16#2                      //Datentyp Byte
          T     LB 1
          L     22                          //Wiederholfaktor
          T     LW 2
          L     255                         //DBNr
          T     LW 4
          L     P#DBX 50.0                  //Pointer DB.Byte.Bit
          T     LD 6
    dann funktioniert das Senden mit dem FC5.

    Das komische ist, in beiden Fällen sehen die Werte der 10 Lokaldatenbytes identisch aus.
    Mit einfachem ANY-Pointer geht es, mit UDT nicht.

    Habt ihr irgendeine Idee warum? Was mach ich falsch?

    Danke im Voraus.
    Gruß

  15. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    der Unterschied ist die übergebene Variable und deren Typ.
    Im einen Fall übergibst du als Adresse den Lokaldatenbereich von Source - Source ist hier kein ANY sondern einfach ein Speicherbereich mit einer Größe von 10 Byte. In den bekommst du die 22 zu übertragenden Bytes nicht hinein.
    In dem anderen Fall übergibst du als Datentyp einen ANY und hier wird dann dessen Inhalt verwendet.

    Hast du den Unterschied verstanden ?

    Gruß
    Larry

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

    ssound1de (14.08.2013)

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 15.01.2013, 11:25
  2. Anypointer SCL/AWL - INT kopieren
    Von pirat im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 22.11.2012, 08:46
  3. AnyPointer erste Zeile?
    Von PhilippGleich im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 04.10.2011, 08:36
  4. Anypointer auf InstanzDB
    Von thomasgull im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 15.05.2010, 11:17
  5. Antworten: 8
    Letzter Beitrag: 30.11.2009, 15:28

Lesezeichen

Berechtigungen

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