-> Hier kostenlos registrieren
Hallo zusammen!
Bei folgendem Szenario habe ich Probleme mit der Umsetzung:
Ich habe ein Array of Bool mit 15 Einträgen. Nennen wir dieses Array mal TestArrayBool[0..14]. Ich möchte gerne einzelne Bits lesen, setzen und rücksetzen können. Der Zugriff auf die Einträge soll mittels einer Indexvariable (Index) bestimmt werden können.
Mein erster Ansatz wäre folgender gewesen:
Der Ansatz hat natürlich nicht funktioniert (Syntaxfehler) und ich habe in diesem Forum einige ähnliche Beispiele dazu gefunden. Wie in den Artikel beschrieben, ist diese Aufgabe in AWL nicht ganz so einfach zu lösen. Um den indirekten Zugriff auf ein Arrayelemt zu ermöglichen, muss mit Pointern gearbeitet werden.
Ich konnte mit Hilfe des Beitrages über Pointer Zeiger die Aufgabenstellung zumindest für ein Array of Int lösen.
Funktion fürs Laden
Funktion fürs Schreiben:
Anschließend habe ich versucht die Funktion auf ein Array of Bool anzupassen:
Danke im Voraus!
Bei folgendem Szenario habe ich Probleme mit der Umsetzung:
Ich habe ein Array of Bool mit 15 Einträgen. Nennen wir dieses Array mal TestArrayBool[0..14]. Ich möchte gerne einzelne Bits lesen, setzen und rücksetzen können. Der Zugriff auf die Einträge soll mittels einer Indexvariable (Index) bestimmt werden können.
Mein erster Ansatz wäre folgender gewesen:
Code:
// Variablen:
// TrayIndex als INT
// TestArrayBool als Array [0..14] of Bool
// Eintrag prüfen
U TestArrayBool[Index]
// Bit setzen
S TestArrayBool[Index]
// Bit rücksetzen
R TestArrayBool[Index]
Der Ansatz hat natürlich nicht funktioniert (Syntaxfehler) und ich habe in diesem Forum einige ähnliche Beispiele dazu gefunden. Wie in den Artikel beschrieben, ist diese Aufgabe in AWL nicht ganz so einfach zu lösen. Um den indirekten Zugriff auf ein Arrayelemt zu ermöglichen, muss mit Pointern gearbeitet werden.
Ich konnte mit Hilfe des Beitrages über Pointer Zeiger die Aufgabenstellung zumindest für ein Array of Int lösen.
Funktion fürs Laden
Code:
// Funktion: Laden eines Arrayeintrages
// Variablen:
// TrayIndex als INT
// TestArrayInt als Array [0..14] of Int
// TrayIndex testweise beschreiben
L 4
T TrayIndex
L P##TestArrayInt //Pointer auf Array laden
LAR1 //ins Adressregister AR1 speichern
L #TrayIndex // TrayIndex laden
L 2
*I // mit 2 multiplizieren da Typ: int
SLD 3 // Pointer bauen
+AR1 // zum Adressregister hinzuaddieren
L W [AR1,P#0.0] // Syntax läd den Wert von #TestArrayInt[4]
Funktion fürs Schreiben:
Code:
// Funktion: Schreiben eines Arrayeintrages
// Variablen:
// TrayIndex als INT
// TestArrayInt als Array [0..14] of Int
// TrayIndex testweise beschreiben
L 4
T TrayIndex
L P##TestArrayInt //Pointer auf Array laden
LAR1 //ins Adressregister AR1 speichern
L #TrayIndex // TrayIndex laden
L 2
*I // mit 2 multiplizieren da Typ: int
SLD 3 // Pointer bauen
+AR1 // zum Adressregister hinzuaddieren
L 50 // Intwert von 50 laden
T W [AR1,P#0.0] // Syntax schreibt den Wert 50 in den Arrayeintrag #TestArrayInt[4]
Anschließend habe ich versucht die Funktion auf ein Array of Bool anzupassen:
Code:
// Funktion: Lesen eine Arrayeintrages
// Variablen:
// TrayIndex als INT
// TestArrayBool als Array [0..14] of Bool
// TrayIndex testweise beschreiben
L 4
T TrayIndex
L P##TestArrayBool //Pointer auf Array laden
LAR1 //ins Adressregister AR1 speichern
L #TrayIndex // TrayIndex laden
L 8
/I // durch 8 multiplizieren da Typ: Bool
SLD 3 // Pointer bauen
+AR1 // zum Adressregister hinzuaddieren
// Bit lesen
U ??????? // Welcher Syntax muss hier stehen, damit ich das Bit TestArrayBool[TrayIndex] abfragen kann bzw. geht das überhaupt so einfach, wie ich mir das vorstelle?
Wie würde der Syntax aussehen, wenn ich beschreiben (S) bzw. rücksetzen (R) will?
Danke im Voraus!