Variable Datenlänge über TRCV_C

Lord Cartman

Level-1
Beiträge
71
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe ein kleines Problem beim Empfangen eines Arrays über TRCV_C.
Der komplette Array hat jedes Mal unterschiedliche LÄngen und schwankt zwischen 45 und 62 Byte. (Das ganze läuft auf S7 V10.5)
Zum besseren Verständniss: Von einer Applikation kommt ein Array, der in den ersten 11 Byte bestimmte Werte aufweist wie z.b. Byte,byte,int, char, etc. Ab der Adresse 12 befindet sich ein Array of char. Dieser Àrray ist bei jedem Vorgang unterschiedlich lang.
Das Problem ist jetzt, wenn ich bei dem TRCV_C Baustein über ANY den Empfangsbereich festlege, die Bytelänge der zu erwartenden Daten angeben muss. Sind die Daten anschließend genauso lang, wie angegeben, klappt auch alles und sie werden in den DB geschrieben. Ist der Array aber kürzer müssen die Daten zweimal empfangen werden, damit sie in dem Array of Char auftauchen. Beim erneuten Scannen verschieben sich die Daten und werden so unbrauchbar.

Meine Idee war zuerst den Baustein einfach über "COM-RST" neu zu starten, aber da traten nur ungewollte Fehler in der Kommunikationsverbindung auf.

Hat jemand vlt noch eine Idee wie das klappen könnte?

Gruß
Lord Cartman
 
Dieser Àrray ist bei jedem Vorgang unterschiedlich lang.
Hi Lord Cartman (Adel ist auch vorhanden), :ROFLMAO:

kannst du nicht dafür sorgen dass das Array immer gleich lang ist, sprich mit Leerzeichen auffüllen?

Oder kannst du die Länge beim senden eingeben?
Ich kenne den TRCV_C jetzt nicht.

Beim normalen Send-Baustein (FC5) wird ja auch der Bereich angegeben (über den Anyzeiger) und explizit wie viel Byte davon gesendet werden sollen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hehe, aber mehr schein als sein :p

Die Idee mit den Leerzeichen auffüllen hatte ich schon, das lief auch einwandfrei. Leider sollte aber die Lösung flexibel gestaltet werden für spätere eventuelle Änderungen.

Die Länge kann ich beim Senden leider nicht angeben, selbst wenn das gehen würde, weigert sich die SPS/der baustein irgendwelche Daten zu empfangen, bis die geforderte LÄnge erreicht wurde.
Es gibt ja diesen Ad-hoc Modus mit dem genau dies möglich sein sollte, aber als ich das ausprobieren wollte, is mir aufgefallen dass ich die ganze zeit schon mit diesem modus arbeite.

also wenn die länge letztendlich immer die gleiche und zudem bekannt ist, is alles kein problem, nur mit dieser variablen länge haperts...

Gruß
Lord Cartman
 
Hallo Verpolt,

in dem "großen" Benutzerhandbuch steht auf seite 1001 dass bei LEN=0 die Daten sofort verfügbar sind, solang die Länge der Date unter der maximalen angegebenen Länge liegt.

Leider hatte ich die ganze Zeit bereits diese Einstellung, aber ohne Erfolg.
Echt merkwürdig dass die Daten nicht angezeigt werden...

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Lord Cartman,

wie wäre es denn, wenn Du noch ein weiteres Telegramm schickst, in dem nur die Länge steht,
dann kannst Du Dir für Dein Empfangsfach den Any mit der richtigen Länge zusammenbasteln.

Grüße
Gebs
 
Hallo Gebs,

an sich ne gute Idee. Leider soll/kann wirklich nur dieses eine Telegramm gesendet werden, deswegen müssen die Daten direkt nach jedem Senden angezeigt werden.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Bimbo,

falls du am Eingang LEN den wert 1 setzen meinst, das funktioniert auch nicht. Die Idee hatte ich auch schon. Zwar werden dann sofort alle Daten empfangen, aber der gesamte Array wird dann nur in die erste speicherstelle geschrieben.

hmm. vlt lässt sich aber mit ner passenden auswertung noch was zusammenbauen...
ich probier mal :)
 
Kannst du in deine Telegramme am Anfang die Länge eintragen?
So eine Art Header.
In der SPS einen Aufruf der nur die Länge ausliest (mit fester LEN nur für Header) und im 2. Aufruf wird bei LEN die Länge des Header eingetragen.

Evtl vorher die Headerlänge noch abziehen so dass nur die Nutzdaten geholt werden.
 
Hallo Zefix,

leider kann auch kein Header extra noch voran gestellt werden. Es können wirklich nur die Daten wie am Anfang beschrieben, gesendet werden.


Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kurzes Update:
Laut einem Kollegen von Siemens ist es mit der Firmware 1.0.1 überhaupt nicht möglich den Ad-hoc modus zu verwenden. Erst mit der neuen Version 1.0.2 Können die empfangenen Daten sofort angezeigt werden, ohne zu warten bis die maximale Länge erreicht ist. Um die neue Version auf die CPU überspielen zu können brauch man aber eine Siemens-Speicherkarte für 200€ :(
 
Ag_lrecv

Hallo Lord Cartman,

ich hatte ähnliches Problem bei AG_LRECV

um die länge des Antwortdaten zu bestimmen hatte ich meinen
Empfangspuffer 1 Byte lang gemacht . Nach meinem Anforderung
hatte ich hintereinander "n" Telegramme bekommen, Diese Telegramme hatte ich entprechend abgelegt. "n" war die byte-laenge der Daten, die
ich insgesamt bekomen habe.

danach habe ich meine Empfanspuffer vergrößert.

Gruß

ahe
 
Hallo ahe,

hatte mir auch schon überlegt einfach jedes Byte einzeln auszulesen und dann nacheinander in einen array zu schreiben. könnteste vlt ein kleines beispiel posten, wie du dieses "byteweise-schreiben" gelöst hast?

gruß
 
Danke für dein Beispiel.
Leider gibts bei S7 V10.5 ja nur noch FUP und KOP, deswegen komm ich trotz deiner Lösung nich weiter.
Wird wohl letztendlich doch eine Speicherkarte her müssen...
 
Zurück
Oben