TIA ASCII Zeichenfolge Start

Martin2XK

Active member
Beiträge
33
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

ich möchte eine Zeichenfolge bestehend aus dem Datentyp CHAR (also ich nehme an, dass CHAR sinnvoll ist) einlesen und weiterverarbeiten. Als "Startzeichen" wird ein Dollarzeichen $ vorgegeben.

Hierfür habe ich im TIA Portal einen neuen Datenbaustein erstellt und für das Übertragen verwende ich ein Array of Char. Mir ist leider unklar wie das mit dem Startzeichen gemeint ist, denn wenn ich z B im Datenbaustein bei Startwert eine 0 eintrage, dann wird "$00" geschrieben (Spalte Startwert im DB). Darin wäre ja schon das geforderte Startzeichen enthalten. Oder soll ich beim ersten CHAR mit dem Index [0] ein Dollarzeichen eintragen? Alle anderen Zeichen sind Zahlen, der Startwert soll nur ganz am Anfang stehen, ich verstehe das so, das dieses bei Index[0] stehen solle.

Dürfen bei dem Array of CHAR auch leere Felder enthalten sein? Ich möchte das ganze gerne nach string konvertieren, dazu verwende ich den Baustein Chars to string .. dieser ist beim simulieren blau gestrichelt. Kann es damit zusammenhängen, dass mein Array of Chars zu groß ist? Es hat eine Größe von 0 bis 254 und enthält leere Felder.

Ich freue mich über Hilfe

Gruß
 
Zuletzt bearbeitet:

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
17.562
Punkte Reaktionen
5.166
Als "Startzeichen" wird ein Dollarzeichen $ vorgegeben.
Wo wird das vorgegeben? Wo kommt die Zeichenfolge her? Wie heißt das Gerät, und wo findet man das Handbuch des Gerätes?

Mir ist leider unklar wie das mit dem Startzeichen gemeint ist, denn wenn ich z B im Datenbaustein bei Startwert eine 0 eintrage, dann wird "$00" geschrieben (Spalte Startwert im DB). Darin wäre ja schon das geforderte Startzeichen enthalten.
Da ist kein $-Zeichen enthalten, das $-Zeichen in '$00' steht dafür, daß die nächsten 2 Ziffern der Hexadezimalcode des ASCII-Zeichens sind - hier '$00' = BYTE#16#00

Oder soll ich beim ersten CHAR mit dem Index [0] ein Dollarzeichen eintragen?
Du müsstest '$$' oder '$24' eintragen, damit das ASCII-Zeichen '$' in den CHAR geschrieben wird.
Wieso willst Du das Zeichen '$' in das Array schreiben? Willst Du eine Zeichenfolge empfangen oder senden??

Dürfen bei dem Array of CHAR auch leere Felder enthalten sein? Ich möchte das ganze gerne nach string konvertieren, dazu verwende ich den Baustein Chars to string .. dieser ist beim simulieren blau gestrichelt. Kann es damit zusammenhängen, dass mein Array of Chars zu groß ist? Es hat eine Größe von 0 bis 254 und enthält leere Felder.
Ein STRING kann nur 254 Zeichen aufnehmen. Ein CHAR-Array 0 bis 254 enthält 255 Zeichen. Das ist zu groß.
Wenn Du den Name der Anweisung "Chars_TO_Strg" richtig schreibst, dann kannst Du die Beschreibung der Anweisung in der TIA-Hilfe finden.
Ein CHAR-Array kann keine leeren Felder enthalten, lediglich der Wert eines CHARs kann 0 sein.

Was für eine SPS-CPU hast DU? Welche TIA-Version verwendest Du?

Harald
 
OP
M

Martin2XK

Active member
Beiträge
33
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Ich verwende:
CPU 1511-1 PN
TIA V16

Das ist die Zeichenfolge eines Sende bzw Empfangstelegramms eines externen Gerätes (ähnlich wie ein Drucker). Ein Beispiel Befehl lautet: $007. Daher meine Idee den Datentyp CHAR zu verwenden, jede Zahl separat in ein Feld. Diese Zeichenfolge möchte ich senden. Das Array habe ich auf 106 geändert, die blau gestrichelten Linien sind immer noch zu sehen, heißt dass es keine leeren Felder geben darf (damit meine ich ' '). Ich trage jetzt mal überall etwas ein ($00 ist glaube ich auch nicht zulässig, da es als String Ende erkannt wird).
 
Zuletzt bearbeitet:

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
17.562
Punkte Reaktionen
5.166
($00 ist glaube ich auch nicht zulässig, da es als String Ende erkannt wird).
Glaube nicht, sondern informiere Dich in der TIA Hilfe über die Datentypen CHAR und STRING und die Anweisung Chars_TO_Strg
'$00' ist für CHAR und STRING zulässig und bedeutet in einer S7-CPU traditionell nichts besonderes.

Abweichend davon interpretiert die TIA-Erfindung Chars_TO_Strg ein Zeichen '$00' als String-Ende und kopiert nur bis zu dem Zeichen, das '$00' selber wird nicht mitkopiert. Was Chars_TO_Strg macht, wenn gleich das erste zu kopierende CHAR den Wert '$00' hat, hat Siemens TIA-typisch bis V15.1 nicht dokumentiert. Oder steht in der Hilfe Deines TIA V16 etwas dazu?

Wenn Du "$007" senden willst, dann müsstest Du in das CHAR-Array eintragen:
Array[0] : '$$'
Array[1] : '0'
Array[2] : '0'
Array[3] : '7'
Array[4] : '$00'
Dann erzeugt Chars_TO_Strg den String "$007"

Du könntest auch mit der Anweisung S_MOVE direkt '$$007' in Deinen Ausgabestring kopieren.

Mit welcher Anweisung willst Du Deine Zeichenfolge( n ) an das externe Gerät senden? Will die Anweisung ein CHAR-Array oder einen STRING?

Harald
 
OP
M

Martin2XK

Active member
Beiträge
33
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Danke, aber Harald hat meine Frage beantwortet, in der TIA Hilfe stand das so nicht drin. Ich habe mich für einen anderen Weg entschieden. Ich verwende einen String (Startwert $007) und kopiere diesen in ein Char Array, das benötigt die Anweisung -> klappt.
 
Zuletzt bearbeitet:
Oben