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

Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 56

Thema: TCP/IP Telegrammaustausch mit PC variable Telegrammlänge

  1. #1
    Registriert seit
    07.07.2008
    Beiträge
    20
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Ihr, die Ahnung habt,


    hab schon mehrmals eine Kommunikation realisiert, bei der meine SPS (CPU315-2DP mit CP343-1 Lean) mit einem PC über TCP-Verbindung Telegramme austauscht. Da waren die Telegramme aber immer gleich lang und ich konnt sie schön nacheinander in den gleichen Datenbereich im DB kopieren.

    Jetzt stellt sich aber der PC Fuzie quer und will die Telegrammlängen nicht mehr anpassen. D.h. es kommen jetzt Telegramme mit Längen zwischen 10 Byte und 37 Byte bei mir an.

    Prinzipiell ist das Telegramm so aufgebaut: Header mit 8 Byte--> Seperator--> Information--> CR LF (Jedes Zeichen 1 Byte)

    Bsp.:

    I N H E A D E R > 1 - 0 0 - 1 1 CR LF (insg. 18 Byte)

    Mein Problem ist jetzt, dass der Receive-Baustein FC6 einen gewissen Datenbereich für die empfangenen Daten verlangt, der ja logischer Weise so groß sein muss, dass das längste Telegramm darin gespeichert werden kann. Kommt aber ein Telegramm, dass kürzer ist, verschiebt es die Zeichen um die Bytes im DB wie das Telegramm kürzer ist. D.h. meine Bytes im DB in denen ich die Informationen erwarte sind nicht mehr da, wo ich sie erwarte.

    Gibt es eine Möglichkeit (so ne Art Schieberegister) die Zeichen des Telegramms vom Header an zu lesen und dann in einen weiteren DB zu kopieren, indem die Telegrammzeichen dann wieder an der Stelle sind, wo ich sie erwarte?


    Vielen Dank im Voraus für Eure Bemühungen!!


    Gruß

    3DA
    Zitieren Zitieren TCP/IP Telegrammaustausch mit PC variable Telegrammlänge  

  2. #2
    Registriert seit
    22.05.2005
    Ort
    sonniges Maifeld
    Beiträge
    1.067
    Danke
    77
    Erhielt 205 Danke für 159 Beiträge

    Standard

    Prinzipiell ist es möglich Telegramme mit variabler Länge zu empfangen, wenn in dem Telegramm vom PC (am Besten im Header), die Anzahl der noch folgenden Bytes stehen.
    In der S7 machst du 2 AG-Recieve aufrufe die du gegeneinander verriegelst. Mit dem ersten empfängst du den Header mit fester Länger, mit der Längeninformation baust du dir einen Any-Pointer zusammen den du dann an den zweiten AG-Recieve anlegst. So kannst du dann den Rest des Telegramms empfangen.
    Geändert von Lars Weiß (16.06.2009 um 19:58 Uhr)
    "Man kann auf seinem Standpunkt stehen, aber man sollte nicht darauf sitzen" - Erich Kästner

  3. #3
    Registriert seit
    01.01.2009
    Ort
    Niedersachsen
    Beiträge
    813
    Danke
    180
    Erhielt 79 Danke für 75 Beiträge

    Standard

    Hallo,

    mir würden da spontan zwei Dinge einfallen.

    1. Die Zahl die die Anzahl der Bytes angibt, als Variable anlegen (wenn möglich und wenn die Anzahl der Bytes, die kommen bekannt ist).

    2. Den Bereich mit 37 Bytes anlegen. Dann alle Bytes abfragen, ob sie ungleich 0 sind (geht nur, wenn kein Zeichen 0000 0000 hat), ist das erste Byte = 0, dann "schiebe" alle Bytes um ein Byte (auf die Reihenfolge achten, damit man sich nicht seine Bytes überschreibt). Ist das erste und das zweite Byte = 0, dann schiebe alle Bytes um zwei Byte, u.s.w..

    Ich hoffe Du kannst etwas mit dem Ansatz anfangen.

    Gruß Jan

  4. #4
    Registriert seit
    01.01.2009
    Ort
    Niedersachsen
    Beiträge
    813
    Danke
    180
    Erhielt 79 Danke für 75 Beiträge

    Standard

    Da war Lars Weiß schneller (und genauer).

  5. #5
    3DA ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.07.2008
    Beiträge
    20
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Geb ich dir vollkommen recht.

    Aber leider ist das Telegramm schon fest vorgegeben und der PC Progger ändert nichts mehr an seiner Version mit der Begründung das schon andere SPS Programmierer dieses Problem gelöst haben, die ich natürlich auch nicht fragen kann, weil die von der Konkurrenz sind.

    Gibt's ne Möglichkeit den Speicherbereich anhand der "LEN" Telegrammlängen Information variabel zu verändern? oder kommt die Längen Info erst nachdem das Telegramm schon gespeichert ist?

    Könnte man vielleicht auch eventuell nach den 8 Zeichen (die ja bekannt sind) im DB suchen und ab da im neuen DB von Adresse 0 an speichern?

  6. #6
    Registriert seit
    01.01.2009
    Ort
    Niedersachsen
    Beiträge
    813
    Danke
    180
    Erhielt 79 Danke für 75 Beiträge

    Standard

    Was für 8 zeichen meinst du?

  7. #7
    3DA ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.07.2008
    Beiträge
    20
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Sorry... die 8 Zeichen des Headers meine ich...

    man könnte vllt. nach den 8 zusammenhängenden Zeichen suchen und dann von da an 37 Bytes in einen neuen DB von Adresse 0 an Speichern. Dann hätte ich alle Zeichen an der richtigen Stelle und was dann hinten raus steht... who cares...

    Noch ne Frage:

    Wie kann ich 37 Bytes byteweise verschieben? mit SHL_L gehen doch nur 4 oder?


    Danke schon mal..

  8. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Ich würde dem Heini eine Reinhauen, ehrlich! Wenn Dummheit und Ignoranz quitschen würden ... Hatten "Die Anderen" das auch mit einer S7 gelöst, da kenn ich erstmal keinen anderen Weg, als den von Lars.
    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

  9. #9
    Registriert seit
    01.01.2009
    Ort
    Niedersachsen
    Beiträge
    813
    Danke
    180
    Erhielt 79 Danke für 75 Beiträge

    Standard

    Schieben würde ich step by step mit MOVE.
    Über den genauen Programmaufbau müste man sich dann mal genauer gedanken machen.
    Aber ich denke, wenn deine Idee funktioniert, ist das wesentlich einfacher, schneller und weniger aufwendig als das schieben.

  10. #10
    Registriert seit
    22.05.2005
    Ort
    sonniges Maifeld
    Beiträge
    1.067
    Danke
    77
    Erhielt 205 Danke für 159 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hm, wie wäre es denn mit zwei mal AG-Recieve die sich beim empfangen abwechseln ? Jeweils mit verschiedenen Empfangsbereichen.
    "Man kann auf seinem Standpunkt stehen, aber man sollte nicht darauf sitzen" - Erich Kästner

Ähnliche Themen

  1. S7 Variable in Java Variable umwandeln
    Von maxi81 im Forum HMI
    Antworten: 0
    Letzter Beitrag: 26.11.2010, 17:55
  2. Telegrammlänge Ethernet/IP
    Von Michitronik im Forum Feldbusse
    Antworten: 2
    Letzter Beitrag: 16.04.2010, 20:12
  3. INT Variable
    Von snowkopp im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 21.09.2009, 22:59
  4. Antworten: 7
    Letzter Beitrag: 05.03.2008, 07:38
  5. OP7 Variable
    Von godi im Forum HMI
    Antworten: 5
    Letzter Beitrag: 25.04.2006, 22:09

Stichworte

Lesezeichen

Berechtigungen

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