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

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

Thema: Anhand FB2 (P_RCV) Nutzdaten des Strings bestimmen

  1. #1
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Abend.

    Hab wieder mal ein kleineres/größeres (wird sich hier nun rausstellen) Problem mit meiner Programmierung bzw. meiner Strategie.

    Folgende Vorgabe:
    Habe eine CP340, parametriert für ASCII, an welche in unregelmäßigen Abständen Strings in variierender Länge übergeben werden.
    Hier, für meinen Versuch über eines der vielzähligen RS232-Programme (lookRS 232).
    Grundlegend funktioniert das Senden und Empfangen der Strings, bzw. werden diese in ihre entsprechenden DB geschrieben.
    Der empfangene String wird auf ein TP 170B ausgegeben.

    Mein Problem ist nun aber das Handle des FB2 (P_RCV).
    Code:
          CALL  "P_RCV" , "DB_P_RCV"
           EN_R  :=M100.7
           R     :=
           LADDR :=500
           DB_NO :=50
           DBB_NO:=6
           NDR   :="Player-DB".RCV_NDR         //DB50.DBX62.0
           ERROR :=
           LEN   :="Player-DB".RCV_Length     //DB50.DBW60
           STATUS:=
    Da ich eben in unregelmäßigen Abständen Daten erhalte, dachte ich mir ich nehme einen Taktmerker (in diesem Falle den M100.7)
    Geschrieben wird der empfangene String in den DB50.DBB4 (ab DBB6 46 Zeichen).
    Byte 4 trägt den Wert 46, Byte 5 ist sofern ich nicht Byte 4 lade und in Byte 5 kopiere, immer 0.
    Daher erhalte ich auf meinem TP auf keine Ausgabe des Strings, da Nutzdaten ja 0. (bitte korrigieren, wenn ich mich täusche)

    Ich verstehe das Handbuch und das Zeitdiagramm des FB2 so....
    Setze ich EN_R durch meinen Taktmerker, werden die Daten eingelesen.
    Wurden alle Daten empfangen, so wird NDR gesetzt und LEN stellt mir gleichzeitig die Länge der empfangenen Daten bereit.

    In meinem Fall wird aber NDR nicht 1 und auch an LEN wird nichts außer 0 ausgegeben. Im DB stehen aber alle übetragenen Zeichen bereit.

    Sollte ich eventuell EN_R immer setzen, außer wenn NDR 1 ist?

    Welcher Schritt fehlt mir, dass ich die Länge des Strings per LEN bestimmen kann?

    mfg,
    Andy
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<
    Zitieren Zitieren Anhand FB2 (P_RCV) Nutzdaten des Strings bestimmen  

  2. #2
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Blinzeln

    Hallo,

    setze zuerst mal den "EN_R" konstant auf Logisch "1", dann schauen wir mal weiter...

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Machen wir mal einen Anfang ...  

  3. #3
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Beitrag

    Hallo,

    Zitat Zitat von Andy082
    In meinem Fall wird aber NDR nicht 1 und auch an LEN wird nichts außer 0 ausgegeben. Im DB stehen aber alle übetragenen Zeichen bereit.
    Dazu muss man wissen, dass diese Informationen nur für einen Zyklus bereitstehen. Ein Fehler, der gerne von Programmierern im Zusammenhang mit den Standard-Kommunikationsbausteinen in der S7 gemacht wird, ist es nun mal, diese Tatsache nicht zu wissen oder einfach zu ignorieren.
    Man sollte direkt nach dem Aufruf dieser Bausteine die zurückgegebenen Werte (also die OUT-Parameter) mit einer Flankenauswertung auswerten...

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Zeig doch mal mehr Code ...  

  4. #4
    Avatar von Andy082
    Andy082 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Reden

    .....5 Fehler unterscheiden den linken vom rechten Code.

    Nein, Scherz beiseite.....

    Gesagt getan, aber das Ergeniss bleibt leider das selbe.

    Code:
          CALL  "P_RCV" , "DB_P_RCV"
            EN_R  :=TRUE
            R     :=
            LADDR :=500
            DB_NO :=50
            DBB_NO:=6
            NDR   :=#RCV_NDR
            ERROR :=
            LEN   :=#RCV_LEN
            STATUS:=
     
          FP    #RCV_NDR
          L     #RCV_LEN
          T     "Player-DB".RCV_LEN
    Ich hoffe wir verstehen unter Flankenauswerung das selbe.
    Wenn man meine Beiträge liest, merkt man, dass ich erst seit 3 Monaten programmiere, nur zu meiner Verteidigung.

    mfg,
    Andy


    P.S.: mehr Code ist da nicht....
    Geändert von Andy082 (08.06.2009 um 23:26 Uhr)
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<
    Zitieren Zitieren besser wirds aber net... wo is da Fehler versteht.  

  5. #5
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Beitrag

    Hallo,

    Zitat Zitat von Andy082
    Wenn man meine Beiträge liest, merkt man, dass ich erst seit 3 Monaten programmiere,
    ich glaube Dir, dass Du erst seit 3 Monaten programmierst, weil :

    Zitat Zitat von Andy082
    FP #RCV_NDR
    L #RCV_LEN
    T "Player-DB".RCV_LEN
    Mach es mal einfach so :

    UN #RCV_NDR
    SPB=M001
    // do something

    M001 :

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren ...  

  6. Folgender Benutzer sagt Danke zu Question_mark für den nützlichen Beitrag:

    Andy082 (08.06.2009)

  7. #6
    Avatar von Andy082
    Andy082 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Daumen hoch

    Klar, dass ich über diesen Klotz wieder stolpern musste und vergessen hab, dass gewisse Operationen auch ohne VKE ablaufen.

    So sieht das Ganze nun aus.....

    Code:
          
       CALL  "P_RCV" , "DB_P_RCV"
           EN_R  :=TRUE
           R     :=
           LADDR :=500
           DB_NO :=50
           DBB_NO:=6
           NDR   :=#RCV_NDR
           ERROR :=
           LEN   :=#RCV_LEN
           STATUS:=
     
         UN    #RCV_NDR
         SPB   REND
     
         FP    #RCV_NDR
         L     #RCV_LEN
         T     DB50.DBB    5
     
    REND: NOP   0
    ...und funktionieren tut's wie erwarten auch.

    Großes Danke an dieser Stelle.


    mfg,
    Andy
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<
    Zitieren Zitieren Big thx  

  8. #7
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Blinzeln

    Hallo,

    Zitat Zitat von Andy082
    FP #RCV_NDR
    Na klar funktioniert das, aber die obige Anweisung in deinem Programmcode ist so überflüssig wie die Klöten vom Papst

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Dann optimieren wir das mal ...  

  9. #8
    Avatar von Andy082
    Andy082 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard

    mach pls mal ein Bsp wie du es denn schreiben würdest.....


    mfg
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<

  10. #9
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Lächeln

    Hallo,

    Zitat Zitat von Andy082
    mach pls mal ein Bsp wie du es denn schreiben würdest....
    Dein Code war schon ok, nur die vom mir zitierte Zeile

    FP #RCV_NDR
    ist eigentlich überflüssig, das meinte ich mit optimieren..
    Diese Zeile einfach rausstreichen, hat keine Wirkung.
    Ansonsten hast Du sehr schnell verstanden, auf was ich hinauswollte und das in Eigeninitiative verfolgt, da antwortet man gerne.

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Einfach nur optimieren ..  

  11. #10
    Avatar von Andy082
    Andy082 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.05.2007
    Ort
    M nähe Sbg in AUT
    Beiträge
    159
    Danke
    35
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ok, war nur etwas verwundert was du mit überflüssig meintest....

    Dass eine Abfrage auf eine steigende Flanke zB FP E0.0 unnötig ist, wenn ich zuvor auf ein VKE=1 zB UN E0.0 warte und rausspringe ,scheint logisch.


    Trotzdem nochmals danke....


    mfg,
    Andy
    Geändert von Andy082 (09.06.2009 um 00:29 Uhr)
    >> Gefährlich wird es für Andere erst dann, wenn die Dummen fleißig werden! <<

Ähnliche Themen

  1. Sollwerte anhand Klimakurve ermitteln
    Von langer711 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 19.06.2011, 19:10
  2. FU anhand Inkremente runterfahren
    Von Waelder im Forum Simatic
    Antworten: 52
    Letzter Beitrag: 21.04.2010, 00:40
  3. Diagnose Profinet-Teilnehmer anhand der IP
    Von Hawkster im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 08.02.2010, 16:39
  4. Antworten: 1
    Letzter Beitrag: 07.07.2009, 10:07
  5. Antworten: 11
    Letzter Beitrag: 06.10.2007, 16:28

Stichworte

Lesezeichen

Berechtigungen

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