Beckhoff String Daten in ASCII umwandeln

Tobi04

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich habe eine Beckhoffsteuerung mit einem Panel PC 6606 dazu noch mehrere Eingangs- und Ausgangsklemmen und eine serielle Schnittstellenklemme KL6001 über die möchte ich gerne einen ASCII-Code versenden. Dazu muss ich meine Daten die sich in einen String habe in den ASCII-Code umwandeln. Bei Beckhoff gibt es eine Funktion die nennt sich F_ToASC (String). Jedoch schneidet diese Funktion immer nur die erste Zahl vorne weg und rechnet diese in ASCII um. Ich möchte jedoch den ganzen String in ASCII umgewandelt haben. Gibt es eine Funktion oder ähnliches wie ich dies programmieren kann. Oder hat schon jemand so etwas programmiert?

Danke im Voraus für jegliche Hilfestellung.

Gruß
Tobi04
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke zunächst für die schnelle Antwort Harald.

Mein String sieht wie folgt aus : 13,31;ltr.;0,31;bar;7,56;ltr;
Dieser ändert sich selbst verständlich immer aber die Lange bleibt gleich.

Wie kann ich denn im String jedes Zeichen einzeln umwandeln in ASCII?


Gruß
Tobi04
 
ASCII ist in einem String die Umrechnung eines seiner Zeichen in einen Zahlenwert.
Wenn du mit etwas wie z.B. MID das jeweilige Zeichen ausliesst und es einem Byte zuweisst dann enthält dieses Byte den ASCII-Zahlenwert des jeweiligen Zeichens ...

Gruß
Larry
 
ASCII ist in einem String die Umrechnung eines seiner Zeichen in einen Zahlenwert.
Wenn du mit etwas wie z.B. MID das jeweilige Zeichen ausliesst und es einem Byte zuweisst dann enthält dieses Byte den ASCII-Zahlenwert des jeweiligen Zeichens ...

Das hat soweit geklappt danke schon mal dafür.

Folgendes Problem weißt sich jetzt auf:
Ich will die jeweiligen Ascii-Codes mit der Kl6001 versenden. Zurzeit nutzte ich den Funktionblock SendByte, damit kann ich auch einen Ascii-Code zum Beispiel 16#33 versenden.
Wie kann ich mehrere Ascii-Codes hintereinander weg versenden, so dass jeder einzelne Ascii-Code nacheinander am Empfänger ankommt?

Gruß
Tobi04
 
Das hat soweit geklappt ...
Kann Dir nicht folgen. Mit MID hat es geklappt? Klingt so nach BASIC und dem Isolieren eines (oder mehrerer) Bytes aus einen String.
Dabei ist es jedoch egal, ob die Bytes bereits ASCII-Codes enthalten oder nicht - in beiden Fällen reicht das nicht, um eine Umwandlung in ASCII bzw. aus ASCII zu bewirken.
Kannst Du die Klemme denn nicht den kompletten String ausgeben lassen?
Anhang anzeigen Real2ASCII.pdf
Hilft Dir das?
Gruss, Heinileini

PS: laut Beckhoff hat die KL6001 einen "16-Byte-Sendepuffer"
SendByte scheint nicht die richtige Wahl zu sein - siehe https://infosys.beckhoff.com/index....com/html/TcPlcLibSerCom_FB_SendString.htm&id=
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Heinileini:
Ein String enthält (wie ich schon geschrieben habe) Zeichen (Charakter). Jedes Zeichen im String hat einen ASCII-Wert. Wenn der TE also mit MID jeweils ein Zeichen ausschneidet/ausliesst und von diesen den Bytewert nimmt (das hat er ja anscheinend getan) so ist dieser Bytewert der ASCII-Code des jeweiligen Zeichens.
Ich verstehe da dein Problem also gerade nicht ...

Gruß
Larry
 
Ich will die jeweiligen Ascii-Codes mit der Kl6001 versenden. Zurzeit nutzte ich den Funktionblock SendByte, damit kann ich auch einen Ascii-Code zum Beispiel 16#33 versenden.
Wie kann ich mehrere Ascii-Codes hintereinander weg versenden, so dass jeder einzelne Ascii-Code nacheinander am Empfänger ankommt?

Du musst dir hierfür eine Schleifen-Routine bauen. Hier liesst du das jeweilige Zeichen an Index-Position und übergibst es. Nun wartest du ggf. eine gewisse Zeit , erhöhst den Index um 1 und wiederholst das Ganze bis du am String-Ende angekommen bist. Aber Achtung : Dies kann KEINE FOR ... TO ... BY - Schleife werden, denn du musst das Ganze über mehrere Programmzyklen machen.
Kannst du das Umsetzen ?
Wenn nicht dann solltest du deinen bisherigen Code hier posten und wir schauen uns das dann an ...

Gruß
Larry
 
@Larry
Ich verstehe da dein Problem also gerade nicht ...
Ich habe das Problem nicht. Wenn von String die Rede ist, denke ich auch automatisch an eine Folge von ASCII-Zeichen und zwar vorzugsweise an die "druckbaren", also 20h ... 7Eh bzw. 7Fh.
Wenn ich aber "Den String habe ich selber aus verschiedenen REAL-Werten erstellt." unter der Überschrift "Beckhoff String Daten in ASCII umwandeln" oder ähnliches lese, dann denke ich "Moment mal - hier liegt ein Missverständnis vor."
Ich habe versucht, etwas genauer zu erfahren, was der (vermeintlich) umzuwandelnde String tatsächlich beinhaltet und ob er tatsächlich bereits ASCII-Zeichen enthält, so dass keine Wandlung erforderlich wäre.
Die Info "Mein String sieht wie folgt aus : 13,31;ltr.;0,31;bar;7,56;ltr;" ist für mich insofern missverständlich, weil ich nicht weiss, ob dies die bereits vorliegende ASCII-Darstellung ist (die keiner weiteren Umwandlung bedarf) oder nur das angestrebte Ziel, also "WunschDenken".
Mein Hinweis auf "SendString" statt "SendByte" ist hoffentlich auch nicht total am Thema vorbei.
Gruss, Heinileini
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mein String sieht wie folgt aus : 13,31;ltr.;0,31;bar;7,56;ltr;
Dieser ändert sich selbst verständlich immer aber die Lange bleibt gleich.

Wie kann ich denn im String jedes Zeichen einzeln umwandeln in ASCII?
Wie Heinileini bin ich ebenfalls von Anfang an von einem Missverständnis des TE Tobi04 ausgegangen.

Ich bin der Meinung, daß da überhaupt nichts gewandelt werden muß, sondern direkt und ganz einfach der String mittels dem Kommunikations-FB "SendString" gesendet werden kann, weil der gezeigte String schon nur ASCII-Zeichen enthält.

Allerdings schweigt sich die Beckhoff Dokumentation darüber aus was das Senden des String-Endezeichens 16#00 betrifft - wird es mitgesendet oder nicht? Falls ja und es stört oder falls nein und es wird benötigt, dann müsste "SendData" oder "SendByte" verwendet werden.

Für die COMlib mit den Kommunikations-FBs gibt es ein Beispielprogramm von Beckhoff.

Harald
 
Zurück
Oben