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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 34

Thema: AG_RECV und Pointer(SCL)

  1. #11
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
    ,STATUS := recv_status // OUT: WORD
    ,LEN := recv_len // OUT: INT
    ); // VOID
    
    AG_SEND(ACT := sende // IN: BOOL
    ,ID := 1 // IN: INT
    ,LADDR := w#16#0100 // IN: WORD
    ,SEND := db1.dbb9 // IN: ANY
    ,LEN := 1 // IN: INT
    ,DONE := snd_done // OUT: BOOL
    ,ERROR := snd_error // OUT: BOOL
    ,STATUS := snd_status // OUT: WORD
    ); // VOID
    Stimmt das denn so?

  2. #12
    Registriert seit
    07.05.2010
    Beiträge
    32
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ja das senden funktioniert schon aber es hackt jetzt eben an dem send baustein und dem dazugehörigen pointer denke ich mal...

    ich habe einen DB1 mit einem INT und möchte diese variable füllen..

    jedoch weiss ich wiegesagt nicht, wie ich den AG_RECV baustein aufrufen muss mit dem richtigen Pointer...
    in AWL ist P#DB1.DBX0.0 BYTE 2 nun muss ich diesen Pointer in scl überführen.. aber weiss nicht wie...

    gruß

  3. #13
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    ------------------------------
    Gelöscht!
    ------------------------------
    Habe nicht zu ende gelesen, das ging ja noch weiter
    Geändert von Paule (24.09.2010 um 14:37 Uhr) Grund: Habe nicht zu ende gelesen, das ging ja noch weiter
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  4. #14
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    Kannst den Puffer auch für send anlegen


    Code:
    snd_done:BOOL;
    snd_error:BOOL;
    snd_status: WORD;
    sende: BOOL;
    END_VAR
    VAR
    // statische Variablen
    recv_len :INT ;
    Puffer : Array [0..255] of byte ;
    
    send_len :INT ;
    Puffer2 : Array [0..255] of byte ;
    END_VAR
    
    
    IF vor2in = true THEN
    sende := true;
    END_IF;
    IF snd_done = true THEN
    sendemerker := true;
    END_IF;
    
    IF sendemerker = true THEN
    sende := false;
    sollte doch genauso gehen

  5. #15
    Registriert seit
    07.05.2010
    Beiträge
    32
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    aber fürs senden funktioniert mein coding doch habe ich gesagt... das ist der receive der nicht so will wie ich das will..

  6. #16
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard

    OK


    Code:
    STATUS := recv_status // OUT: WORD
    Steht hier denn was drinne?

  7. #17
    Registriert seit
    07.05.2010
    Beiträge
    32
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ich bekomme das telegramm empfangen, jedoch nur 2 von 3 stellen....
    und genau dafür brauche ich den pointer p#db1.dbx0.0 byte 2, denke ich zumindest..

    ich will einen int wert von 102 an die sps schicken und er bekommt nur die 10

  8. #18
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.341
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Zitat Zitat von ditj_vitja Beitrag anzeigen
    ich bekomme das telegramm empfangen, jedoch nur 2 von 3 stellen.... [...]
    ich will einen int wert von 102 an die sps schicken und er bekommt nur die 10
    Das ist bei einem INT-Format nicht möglich.

    Entweder Du empfängst noch garnichts,
    oder Du sendest nicht 102 im INT-Format,
    oder Du beobachtest falsch.

    Wenn Du sicher bist, daß Dein AG_RECV nun fehlerfrei genau 2 Byte empfängt, dann
    untersuche den Datensender, dann sendet der was anderes als eine 102 im INT-Format.

    Und benutze zum Test der Übertragung besser den INT-Wert 12345, damit lassen sich
    eventuelle Übertragungsprobleme besser analysieren.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #19
    Registriert seit
    07.05.2010
    Beiträge
    32
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hey ho,

    ob du es glaubst oder nicht aber ich bekomme anstatt der 102 wirklich nur die 10.. nun habe ich anstatt des pointers bei dem ag_recv baustein einfach den datenbereich größer gemacht mit db1.dbd0 und schon bekomme ich in den ersten 3 stellen 102 die letzten stellen sind zwar Murks, aber ich greif mit db1.dbb0 -2 einfach die ersten 3 stellen raus und alles ist super.. danke für die Hilfe, auch wenn keiner von euch mir nun den gewünschten Pointer gegeben hat


    Gruß
    Viktor

  10. #20
    Registriert seit
    29.03.2004
    Beiträge
    5.802
    Danke
    144
    Erhielt 1.712 Danke für 1.242 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von ditj_vitja Beitrag anzeigen
    Hey ho,

    ob du es glaubst oder nicht aber ich bekomme anstatt der 102 wirklich nur die 10.. nun habe ich anstatt des pointers bei dem ag_recv baustein einfach den datenbereich größer gemacht mit db1.dbd0 und schon bekomme ich in den ersten 3 stellen 102 die letzten stellen sind zwar Murks, aber ich greif mit db1.dbb0 -2 einfach die ersten 3 stellen raus und alles ist super.. danke für die Hilfe, auch wenn keiner von euch mir nun den gewünschten Pointer gegeben hat
    Weil du dafür ein SCL keinen Any Pointer brauchst.
    Wenn du an den AG_RECV Baustein in SCL ein "DB1.DBW0" heranschreibst, macht er dir daraus einen Any-Pointer vom Typ:
    P#DB1.DBX0.0 WORD 1

    Wenn du im DB1 an Adresse 0 eine Integer-Variable anlegst, und dann in SCL symbolisch darauf zugreifst wie z.B. "DatenDB1".iVar1 dann macht dir SCL wenn du das so am AG_RECV anschaltest einen Any-Pointer vom Typ:
    P#DB1.DBX0.0 INT 1

    Den Unterschied sollte man gerade bei den Bausteinen zum Datenaustausch beachten, da es einige Bausteine gibt die bei unterschiedlichen Datentypen auf beiden Seiten nicht korrekt arbeiten. Auch wenn die Länge der Daten in beiden Fällen gleich ist (2 Byte).

Ähnliche Themen

  1. Probleme mit AG_SEND und AG_RECV
    Von -Melanie- im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 26.05.2011, 14:10
  2. Problem mit AG_Recv
    Von SPS-freak1 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 15.04.2011, 17:21
  3. AG_Recv /Datenstring Splitten
    Von s_alpen im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 20.10.2010, 10:26
  4. Datenkonsistenz von AG_RECV
    Von oid im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 19.07.2009, 18:42
  5. Datenübernahme beim FC6 AG_RECV
    Von Florian_Niedermaier im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 11.11.2007, 13:37

Lesezeichen

Berechtigungen

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