TIA String Verarbeitung und Zebra Drucker

Tara_new

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

Software: TIA V16,
Programmiersprache:SCL

Hardware: Windows 10, CPU 1515F-2PN, Drucker ZEBRA 411

ich habe ein Problem und zwar:
1)
ich lese gerade ein String-Daten( Text) aus meinem Programm , aber sie ist zu lang. Ich möchte die länge des Stringes prüfen und wenn größer als 20 ist, dann wird den Rest in der nächsten Zeile reingeschrieben.

Wie mache ich ein Zeilenumbruch in Scl?

2) ich habe eine Variable mit den DatenTyp Word (W16#0)
wie kann ich den Inhalts dieser Variable Bitweise lesen? (immer in SCL)

3) Im Handbuch vom Drucker Zebra 411 sind paar Befehle zur Steuerung oder zum Ablesen des Druckerstatus.
Nun sende ich das Befehl ~HS an den Drucker und der Drucker sendet mich drei Strings-Daten (verschieden Länge und Inhalt) mit Informationen.

Nur ich möchte aus dieser 3 String-Daten nur den Bit 10 vom String 2 die Informationen in SPS ablesen oder aufrufen. Dieser Bit hat den Datentyp Bool.


Könnte Jemand mir dabei helfen?

Ich weiße aber, nicht, ob ich an der richtigen Stelle veröffentlicht habe. ich bin noch neu hier.

Danke im Voraus!
 
Zuletzt bearbeitet von einem Moderator:
Nanu, noch keine qualifizierte Antwort? Anscheinend feiern alle noch Haralds Geburtstag ;)

Dann versuche ich's mal mit einer improvisierten, ungetesteten Antwort.
Code:
// Zu 1.:

sCRLF := CONCAT (IN1:= CHAR#13, IN2:= CHAR#10) ; // die Zeichen CR (=13 ='carriage return') und LF (=10 ='line feed') in den String sCRLF
sText2 := INSERT (IN1:= sText1, IN2:=sCRLF, P:= 21) ; // den String sCRLF ab Position 21 in den "zu langen" String sText1 einfügen

// Zu 2.:

Bit0  := Wort AND 2#0000000000000001 ; // 'Bit0' u.s.w. vom Typ BOOL, 'Wort' vom Typ WORD
Bit1  := Wort AND 2#0000000000000010 ;
Bit2  := Wort AND 2#0000000000000100 ;
Bit3  := Wort AND 2#0000000000001000 ;
Bit4  := Wort AND 2#0000000000010000 ;
Bit5  := Wort AND 2#0000000000100000 ;
Bit6  := Wort AND 2#0000000001000000 ;
Bit7  := Wort AND 2#0000000010000000 ;
Bit8  := Wort AND 2#0000000100000000 ;
Bit9  := Wort AND 2#0000001000000000 ;
Bit10 := Wort AND 2#0000010000000000 ;
Bit11 := Wort AND 2#0000100000000000 ;
Bit12 := Wort AND 2#0001000000000000 ;
Bit13 := Wort AND 2#0010000000000000 ;
Bit14 := Wort AND 2#0100000000000000 ;
Bit15 := Wort AND 2#1000000000000000 ;

// alternativ zu 2. mit etwas weniger Schreiberei:

Bit0  := Wort AND 16#0001 ;
Bit1  := Wort AND 16#0002 ;
Bit2  := Wort AND 16#0004 ;
Bit3  := Wort AND 16#0008 ;
Bit4  := Wort AND 16#0010 ;
Bit5  := Wort AND 16#0020 ;
Bit6  := Wort AND 16#0040 ;
Bit7  := Wort AND 16#0080 ;
Bit8  := Wort AND 16#0100 ;
Bit9  := Wort AND 16#0200 ;
Bit10 := Wort AND 16#0400 ;
Bit11 := Wort AND 16#0800 ;
Bit12 := Wort AND 16#1000 ;
Bit13 := Wort AND 16#2000 ;
Bit14 := Wort AND 16#4000 ;
Bit15 := Wort AND 16#8000 ;
Zu 3.:

Kommt ganz drauf an, wie das mit "Bit 10 vom String 2" gemeint ist.
Bitte mal ein Beispiel von String 2 posten. Oder die entsprechende Zebra-Doku.
Könnte mir vorstellen, dass die Information in Form von ASCII-Zeichen als Dual-Zahl (z.B. '0000010000000000') oder Hexadezimal-Zahl (z.B. '0400') dargestellt ist.
Aus wie vielen Zeichen besteht String 2?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
"WORD AND Bitmaske" ergibt wieder WORD (mit allen Bits = 0 die in der Bitmaske = 0 sind und höchstens den Bits = 1 die in der Bitmaske = 1 sind). Wenn nur das Bit (als BOOL) benötigt wird, dann noch das Ergebnis auf <> 0 vergleichen.

Bei S7-1500 kann man die Bits auch direkt per Slice-Zugriff ansprechen: BitstringVariable.%X..
Code:
Bit1 := (Wort AND 2#0000000000000010) <> 0 ;
Bit2 := (Wort AND 16#0004) <> 0 ;
Bit3 := Wort.%X3 ;  //Slice

Harald
 
"WORD AND Bitmaske" ergibt wieder WORD ... dann noch das Ergebnis auf <> 0 vergleichen.
Absolut, Harald!
Ich fange wohl an, senil zu werden. Bevor ich mit dem Eintippen angefangen hatte, hatte ich genau den Vergleich auf <>0 im Kopf, aber nach dem Tippen der vielen vorlaufenden Nullen muss ich schon so erschöpft gewesen sein, dass die Kraft nicht mehr reichte. :oops: ;)

Sorry vielstmals!
 
Zurück
Oben