Step 7 Einer String Variable eine Konstante zuweisen in AWL

RMS007

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

um einige FBs zu testen, will ich einen String, der maximal aus 16 Ziffer (16 Bytes) entstehen kann, in einen globalen DB schreiben.

Dafür kann ich natürlich SFC20 BLKMOV einsetzen. Wie kann ich in AWL einer Variable eine Konstante zuweisen?

einString:= 'Beispiel12345678'//das geht nicht in AWL!:confused:

CALL SFC 20
SRCBLK :=#einString //'Beispiel12345678'
RET_VAL:=MW50
DSTBLK :=P#DB102.DBX56.0 BYTE 16

Ich bin C++ Profi und leider kein AWL-Profi.:? Kann jemand mir bitte weiterhelfen? Vielleicht ist mein Ansatz vollkommen daneben...

Gruß Ronald
 
Das geht so nicht in AWL, du mußt jedem Byte seinen Char-Wert zuweisen und das geht dann nur über direkte Adressierung des Lokal-DW oder über indirekte Adressierung.
Da das doch ziemlich umständlich ist, nehme ich in so einem Fall einfach einen DB, deklariere dort den String und weise ihm einen Defaultwert zu.
Nach dem Übertragen in die SPS schreibe ich den DB-String dann an Blockmove.
Verändern kann man diesen String dann über die Variablentabelle, aber auch hier nur Byte bzw. maximal DOWRD-Weise als "Zeichen".
Hat den Vorteil, dass man für eine Änderung des Stringinhaltes nicht immer das Programm neu in die SPS schieben muß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Man muss auch bei der Variablentabelle daran denken, immer im zweiten Byte im Kopf die Stringlänge passend mitzusetzen. Ich meine die Variablentabelle von Jochen Kühner kann auch mit Strings umgehen.

Ansonsten sind Strings in AWL wirklich unhandlich. Um deinen Beispielstring in AWL zusammenzusetzen wäre maximal das möglich, (mit tmpString16 als 16 Zeichen String im temp-Bereich):
Code:
      LAR1  P##tmpString16
// Max. Länge des Strings setzen
      L     16
      T     LB [AR1,P#0.0]
// Aktuelle Länge: "Beispiel12345678" = 16 Zeichen 
      L     16
      T     LB [AR1,P#1.0]
// Max. 4 Zeichen am Stück.
// Achtung! Es müssen auf jeden Fall immer 4 Zeichen sein.
      L     'Beis'
      T     LD [AR1,P#2.0]
      L     'piel'
      T     LD [AR1,P#6.0]
      L     '1234'
      T     LD [AR1,P#10.0]
      L     '5678'
      T     LD [AR1,P#14.0]
und dann den tmpString per Blockmove in einen DB kopieren.
 
Stand auch schon vor dem selben Problem. Leider ist String und AWL ein Krux.

Hatte vor ein paar Tagen als Übung versucht so ein HD44780-basiertes 2x16 Zeichen Text-LCD mit 6 DOs anzusteuern. Hatte es zuerst schnell
mal in AWL geschrieben, funktioniert auch. Musste dann aber schnell feststellen das es mit dem definieren von Zeichenketten zum senden ans Display
in AWL schlecht aussieht. Die einzigen mir bekannten Methoden wurden auch schon genannt.

Was soll's. Die Sache mit dem Text-LCD war sowieso als Übungsprojekt für den Einstieg in SCL gedacht (Wegen S7-1200).

Wie löst der SCL-Compiler eine String-Konstante eigentlich auf?
 
Zurück
Oben