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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 34

Thema: AG_RECV und Pointer(SCL)

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hmm das gibts doch nicht dass ich das einfach nicht verstehe...


    ich habe nun leider doch wieder Probleme mit der Ausführung mit der ich das versucht habe umzusetzen..
    nun steh ich quasi wieder am Anfang..

    Ist es denn überhaupt möglich, wenn ich im DB1 ab Addresse 0 eine int Variable reinmache, und der sps immer eine dreistellige Integerzahl schicke, dass diese Intergerzahl immer auch in der angelegten Variablen von DB1 landet?
    Ich bekomms beim besten Willen nicht hin...

    Gruß

  2. #22
    Registriert seit
    29.03.2004
    Beiträge
    5.792
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard

    Zitat Zitat von ditj_vitja Beitrag anzeigen
    ich habe nun leider doch wieder Probleme mit der Ausführung mit der ich das versucht habe umzusetzen..
    nun steh ich quasi wieder am Anfang..

    Ist es denn überhaupt möglich, wenn ich im DB1 ab Addresse 0 eine int Variable reinmache, und der sps immer eine dreistellige Integerzahl schicke, dass diese Intergerzahl immer auch in der angelegten Variablen von DB1 landet?
    Ich bekomms beim besten Willen nicht hin...
    Doch klar geht das. Aber der AG_RECV nimmt keinen Any-Pointer vom Typ INT, das solltest du aber dann am Status-Ausgang des Bausteins erkennen können.
    Ich würde die Daten immer in eine Struktur packen, und diese Struktur dann symbolisch an den Baustein schreiben. Dann ist der Datentyp des Any-Pointers immer BYTE und man bekommt keine Probleme.

    Zum AG_RECV gehört aber immer ein korrespondierender AG_SEND auf der Gegenseite. Wie sieht dort denn der Aufruf auf? Vielleicht liegt der Fehler ja auf der Seite.

  3. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    ditj_vitja (25.09.2010)

  4. #23
    Registriert seit
    23.02.2007
    Ort
    Regensburg
    Beiträge
    53
    Danke
    18
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo,

    Dein Sender schickt Dir den Wert "102" in drei Bytes. Das deutet daraufhin, dass diese Zahl BCD kodiert übergeben wird. Das hast Du auch festgestellt, nachdem Du den Empfangsbuffer vergrößert hast. Der Sender muss den Wert "102" nach INT konvertieren, damit er in einem WORT untergebracht werden kann.
    Gruß

    BiBi

    Alle Menschen sind klug - die einen vorher, die anderen nachher. (Voltaire)


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

    Standard

    Ich schicke über ein Javatool den Integerwert an die SPS und da kann ja nichts falsch laufen, immer dreistellig...

    jetzt hab ichs mal mit:

    VAR
    rein : ARRAY[1..3] OF BYTE;
    END_VAR

    AG_RECV(ID := 1 // IN: INT
    ,LADDR := w#16#0100 // IN: WORD
    ,RECV := rein // IN: ANY
    ,NDR := recv_done // OUT: BOOL
    ,ERROR := recv_error// OUT: BOOL
    ,STATUS := recv_status // OUT: WORD
    ,LEN := recv_len // OUT: INT
    ); // VOID

    Bei dem ersten Integerwert den die sps bekommt packt er die Werte in das rein array[16#31, 16#30, 16#32] das ist ja auch voll ok denn das steht ja für die Zahl 102, wenn ich nun im nächsten Schritt nochmal was schicke, dann bekommt die SPS [16#30, 16#33, 16#0D] und das ist doch wieder blödsinn.. man ich kapier das Prinzip wohl so garnicht..
    oder muss ich nach jedem erfolgreichen einlesen das array erst wieder leeren? wenn ja wie? einfach mit 16#00 füllen?

    Gruß und danke für die Geduld mit mir

  6. #25
    Registriert seit
    23.02.2007
    Ort
    Regensburg
    Beiträge
    53
    Danke
    18
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo,

    wie schon vermutet empfängst Du KEINE Integerzahl, sondern drei Bytes mit ASCII (vermutlich - ich hab grad keine ASCII Tabelle zur Hand) Zeichen 1=HEX31=ASC49, 0=HEX30=ASC48, 2=HEX32=ASC50.
    Das muss der Sender in eine INT Zahl konvertieren und Du kanst mit einem WORT die INT Zahl 102 empfangen.
    Geändert von BiBi (25.09.2010 um 12:51 Uhr) Grund: ASCII und HEX verwechselt
    Gruß

    BiBi

    Alle Menschen sind klug - die einen vorher, die anderen nachher. (Voltaire)


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

    Standard

    Zitat Zitat von ditj_vitja Beitrag anzeigen
    oder muss ich nach jedem erfolgreichen einlesen das array erst wieder leeren? wenn ja wie? einfach mit 16#00 füllen?
    Nein, musst du nicht.
    Aber du musst dein Empfangsfach so groß machen das das gesendet Packet platz hat.
    Was für ein Format und vor allem wie viel sendet denn dein Javatool (Byte, Long, Charact) ?
    Für mich schaut das aus als ob das Tool mit dem senden noch nicht fertig ist und 0D vielleicht die Endekennung ist.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  8. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    ditj_vitja (25.09.2010)

  9. #27
    Registriert seit
    23.02.2007
    Ort
    Regensburg
    Beiträge
    53
    Danke
    18
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo,

    ich bin mir ziemlich sicher, dass das Übertragungsprotokoll ASCII ist.
    Und 0D ist die Endekennung (ein Teil von "CR" - Line Feed und Return).
    Der Empgangspuffer muss auf jeden Fall vergrößert werden, damit diese Zeichen ebenfall empfangen werden können. Die Zeichen vor "0D" sind die ASCII Werte für 0 und 3.
    Gruß

    BiBi

    Alle Menschen sind klug - die einen vorher, die anderen nachher. (Voltaire)


  10. Folgender Benutzer sagt Danke zu BiBi für den nützlichen Beitrag:

    ditj_vitja (25.09.2010)

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

    Standard

    sauber.. danke an alle...

    ich habe im javatool mit println(int) gearbeitet... dieses ln am ende hat mir das Genick gebrochen ohne funzt perfekt..

    vielen Dank nochmal an alle, wenn noch was sein sollte weiß ich jawo ich gute Hilfe erwarten kann


    Gruß
    Viktor

  12. #29
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.788
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    ... es tut mir leid ... ich kann es mir nicht verkneifen ...
    Das Ergebnis hättest du auch schon 25 Beiträge vorher erzielt haben können. Naja ...

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ja das ist mir klar.. nur kann ich mir nicht erklären warum das mit dem array Puffer was du mir vorgeschlagen hast aufeinmal funktioniert... vorher hatte ich beim übertragen des Programms auf die cpu immer ein fehler und die sfleuchte ging an.. und aufmal funktioniert das.. und ich hab keine Ahnung warum..
    naja nun gehts ja

Ä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
  •