Array indirekt beschreiben

Airpower

Level-2
Beiträge
33
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo der Prog-Gemeinde

Ich brauche eine Erklärung für Anfänger

Ich bastle gerade an einem Übungsbeispiele mit Array´s umher
Es besteht ein Array mit 60 Feldern in einem Globalen DB
Die Array Felder sollen im Sekundentakt weitergesschalten werden
Dabei soll der Anzahl der pos. Flanken des Eingang 0.1 in das aktuale
Arrayfeld übertagen werden.
D.h.
Ist der Sekundenwert gerade bei 3 soll die Anzahl der Pos.Flanken von E0.1 in das Arrayfeld 3 übertragen werden usw.
Bei jedem Sekundentakt wird die Anzahl der Pos.Flanken von E0.1 auf null gesetzt
Bei Sekundenwert 60 wird wird Sekundenwert auf 0 gesetzt und von vorne begonnen.

Ich möchte mir so ein Zeitfenster von 60 sec. erstellen und somit die durchschnittlichen Impulse pro minute errechnen

.. wenn dies überhaupt so möglicht ist.
 
Zum indirekten beschreiben gibt es zwei Möglickeiten, einmal die indirekte Adressierung oder mit Pointern:

Indirekte Adressierung:
Code:
L MD 0 //da steht das 1. Byte in das dein Wert geschrieben werden soll
SLD 3 // mit 8 multiplizieren bzw. die Bits um 3 Stellen nach links schieben
T #Addr //lokalte Variable vom Typ DINT
 
AUF DB 100 // Ziel-Datenbaustein muss vorher geöffnet werden
L #Wert // den Wert, den du hineinschreiben willst
T DBD[#Addr]

Pointer:
Code:
L MD 0 //da steht das 1. Byte in das dein Wert geschrieben werden soll
SLD 3 // mit 8 multiplizieren bzw. die Bits um 3 Stellen nach links schieben
LAR1 // Lade AKKU1 in Adressregister1
 
AUF DB 100 // Ziel-Datenbaustein muss vorher geöffnet werden
L #Wert  // den Wert, den du hineinschreiben willst
T DBD[AR1,P#0.0] //Wert auf DBD schreiben auf Adresse im Adressregister 1 und dem Offset P#0.0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke an Human

Die Lösung mit der Registerindirekten Parametrirung (mit Pointer) habe
ich gesucht.
Habe selbst viel damit versucht jedoch habe ich es mit "AUF DB"
nicht verucht.

Warum muss eigentlich der DB zuerst geöffnet werden
Warum kann nicht mit T DB1.DBB [AR1,P#0.0] geschrieben werden
 
Warum du T DB1.DBB [AR1,P#0.0] nicht schreiben kannst ist mir nicht wirklich klar, auf jeden Fall was ich weiß dass wenn du
Code:
T DB1.DBB1
schreibst das genau so übersetzt wird als wenn du
Code:
AUF DB 1
T DBB1
schreiben würdest! ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum du T DB1.DBB [AR1,P#0.0] nicht schreiben kannst ist mir nicht wirklich klar, ...

Weil Du bei der Bereichsübergreifenden Registerindirekten Adressierung die Bereichskennung mit übergeben kannst:

Bereichskennungen:
000 Peripherie
010 Ausgänge
100 Daten im DB
110 Lokaldaten
001 Eingänge
011 Merker
Also die Vorbelegung von AR1: 1000 0001 0000 0000 0000 0000 0101 0000 == EW 10
Die erste 1 steht für Bereichsübergreifend
Im nächsten Byte steht die Bereichskennung (001 = Eingänge)
Da ist kein Platz mehr für einen DB Aufruf :D
 
Zurück
Oben