Grundlagen Frage zu Automation Basic

SimUser

Level-2
Beiträge
49
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,

Ich bin noch relativ neu im B&R Bereich. Mein Programm ist mit Automation Basic erstellt worden. Ich versuche mich langsam einzuarbeiten. Bisher hab ich nur mit dem TIA Portal gearbeitet.

Bei Automation Basic gibt es z B die Anweisung ADR. Damit adressiert man Variablen per Datenspeicher Adressen. Aber ich kann mir das nur schlecht vorstellen. Was bedeutet es, bzw was ist der Unterschied zwischen den Anweisungen..

Var1 = ADR(Var2)

Und

Var1 = Var2

Ein anderes Beispiel : wenn ich Strings kopieren will, dann muss ich strcpy(ADR(Var3, Var)) schreiben. Warum ist ADR erforderlich?

Ich würde mich über ein genaues Beispiel freuen, ich kann mir wirklich wenig darunter vorstellen.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, ich frage deswegen.... Ich will das vorliegende Programm nicht stark abändern. Meine Aufgabe ist es kleine Funktionen einzubauen. Es gibt auch zahlreiche Pointer. Wie, bzw wo kann ich neue Variablen einbauen ohne Pointer Verweise zu ändern? Ich dachte daran alle Variablen die ich hinzugefügen möchte in die allgemeine Globalvar Tabelle einzufügen.
 
Danke, ich verwende KOP und SCL.

Wenn ich die Speicheradresse verwende, warum muss ich z. B. strcpy(ADR(Var3, Var)) schreiben, wenn ich den Inhalt des Strings Var nach Var3 kopieren will? Nach dem, was du geschrieben hast, würde ich die Speicheradresse von Var3 nach Var kopieren.
 
Schau dir nochmal die Hilfe für die entsprechende Funktion an. Strcpy wird so verwendet: strcpy(ADR(VarZiel),ADR(VarQuelle)). die Adressen der Variablen werden lediglich verwendet, weil die Funktion es so verlangt um auf die Adressen der Strings zuzugreifen. Das heißt nicht, dass die Adressen von einem String in den Anderen kopiert werden. Wie auch die Hilfe sagt, geht es um den Inhalt, ich zitiere: "Kopiert eine Zeichenkette in eine andere").

Ansonsten, meine Empfehlung (ist aber auch Geschmackssache): Für kleinere Funktionen verwende am besten ST oder C.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was an dieser Stelle wichtig ist zu wissen, wie die Stringverarbeitung bei jedem einzelnen System funktioniert - unabhängig von der Programmiersprache.

Siemens arbeitet bei seinem String-Format mit fixer Speicherallokation und Maximallängen. Die Variable besitzt den Aufbau
[1 Byte max. Länge z][1 Byte tatsächliche Länge y][z Byte für die Zeichen x]
Innerhalb von x sind nur die ersten y Bytes relevant, der Rest enthält Müll.

B&R arbeitet mit Nullterminierten Strings, d.h. ein String geht von einer Anfangsadresse x bis zur ersten Speicherstelle wo der Dezimalwert 0 drinnen steht. D.h. es gibt keine Maximallängen. Daher wird bei Stringfunktionen immer die Anfangsadresse mitgegeben - es gibt keinerlei Längenkontrolle - um die muss man sich extern kümmern.


Zum Thema adr()
Bei B&R kann man in Automation Basic sehr einfach mit dynamischen Variablen arbeiten, und das schon seit 25 Jahren. Das Äquivalent in TIA sind die Referenzen. Deklariert man z.B.
Code:
VAR
   a : DINT;
END_VAR

VAR_DYNAMIC
  b : DINT;
END_VAR_DYNAMIC

BEGIN
b access adr(a);
b = 1;
dann steht in a die Zahl 1

In TIA SCL:
Code:
VAR
  a : DINT;
END_VAR
VAR_TEMP
  b : Ref_To DINT
END_VAR_TEMP

BEGIN
b := ref(a);
b^ := 1;


PS: man verzeihe mir einzelne Schlüsselwort-Fehler, ich bin schon ein paar Jährchen von AB weg.
 
Zurück
Oben