viktor8313
Level-1
- Beiträge
- 11
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Ich habe ein kleines Problem. Es ist mir klar, dass es schon genug Beiträge gab, die sich mit dem Thema Zeiger
und inderekte Registeradressierung beschäftigten. Ich benötige paar Antworten von erfahrenen Fachleuten
Ich habe mir Zwar ein schönes Buch besorg, welches sich mit dem Thema SPS-Programmierung beschäftigt.
In diesem Buch wird leider nicht alles gut genug erklär so, dass sich noch eine oder andere Frage ungeklärt bleibt.
Ich versuche gerade eine Art Rezeptverwaltung als Funktion zu programmieren.
Es gibt 4 Rezeptbausteine(vorerst) sowie einen Ziel DB, diese sollen über IN Variablen von Typ Block_DB übergeben werden.
über eine Variable Rezept NR möchte ich daten aus dem gewählten Rezept DB bestimte anzahl von Bytes in eienen Ziel DB kopieren.
Ziel- und Rezept-DBs sind gleich groß und mit gleicher Struktur.
Im buch werden nur Beispiele mit fest vorgegebenen DBs bzw. Beispiele wo ich aus DB Nummer mir eine Adresse baue und in den Adressregister lade aufgeführt.
Wie kann ich Adresse der Quelle als Parameter übergeben? Wie kann ich am besten daten in schleife Byte für Byte kopieren?
Meine adressierung klappt ebenfalls nicht?
Kann mir jemad ein paar Tipps geben?
Ich programmiere sonst Mikrocontroller in C, deshalb erscheinen mir einige Sachen höchst ungewöhnlich.
und inderekte Registeradressierung beschäftigten. Ich benötige paar Antworten von erfahrenen Fachleuten
Ich habe mir Zwar ein schönes Buch besorg, welches sich mit dem Thema SPS-Programmierung beschäftigt.
In diesem Buch wird leider nicht alles gut genug erklär so, dass sich noch eine oder andere Frage ungeklärt bleibt.
Ich versuche gerade eine Art Rezeptverwaltung als Funktion zu programmieren.
Es gibt 4 Rezeptbausteine(vorerst) sowie einen Ziel DB, diese sollen über IN Variablen von Typ Block_DB übergeben werden.
über eine Variable Rezept NR möchte ich daten aus dem gewählten Rezept DB bestimte anzahl von Bytes in eienen Ziel DB kopieren.
Ziel- und Rezept-DBs sind gleich groß und mit gleicher Struktur.
Im buch werden nur Beispiele mit fest vorgegebenen DBs bzw. Beispiele wo ich aus DB Nummer mir eine Adresse baue und in den Adressregister lade aufgeführt.
Wie kann ich Adresse der Quelle als Parameter übergeben? Wie kann ich am besten daten in schleife Byte für Byte kopieren?
Meine adressierung klappt ebenfalls nicht?
Kann mir jemad ein paar Tipps geben?
Ich programmiere sonst Mikrocontroller in C, deshalb erscheinen mir einige Sachen höchst ungewöhnlich.
Code:
IN_VAR
PRG_LOAD BOOL //Programm laden
REZEPT_NR INT //Rezeptnummer 1..4
BLOCK_GR INT //Anzahl zu kopierender Bytes
DEST_DB BLOCK_DB //Ziel DB
REZEPT1 BLOCK_DB //Rezept DB1
REZEPT2 BLOCK_DB //Rezept DB2
REZEPT5 BLOCK_DB //Rezept DB3
REZEPT4 BLOCK_DB //Rezept DB4
TEPM_VAR
QADR_DB DWORD //Speichert die Adresse des gewählten Quell DBs
Zaehler INT //Schleifenzähler
U #PRG_LOAD //bei 1 Signal Rezept übertragen
SPBN M099
S #BUSY //Übertragung beginnt, BUSY auf TRUE
//#####[Rezeptnummer 1]#####################################################
L #REZEPT_NR
L 1
==I
SPB M001
//#####[Rezeptnummer 2]#####################################################
L #REZEPT_NR
L 2
==I
SPB M002
//#####[Rezeptnummer 3]#####################################################
L #REZEPT_NR
L 3
==I
SPB M003
//#####[Rezeptnummer 4]#####################################################
L #REZEPT_NR
L 4
==I
SPB M004
//##########################################################################
//# Adresse des REZEPT DBs sichern
//##########################################################################
M001: AUF #REZEPT1 //Adresse des 1. Rezept DBs sichern
TAR1
T #QADR_DB
SPA M005
M002: AUF #REZEPT2 //Adresse des 2. Rezept DBs sichern
TAR1
T #QADR_DB
SPA M005
M003: AUF #REZEPT3 //Adresse des 3. Rezept DBs sichern
TAR1
T #QADR_DB
SPA M005
M004: AUF #REZEPT4 //Adresse des 4. Rezept DBs sichern
TAR1
T #QADR_DB
SPA M005
//##########################################################################
//# Programmschleife
//#
//# Übertrage Daten anzahl Bytes(BLOCK_GR) aus Rezept-DB(REZEPT#) in Ziel-DB
//##########################################################################
M005: L #BLOCK_GR
T #Zaehler
LAR1 #QADR_DB
AUF #DEST_DB
M006: L B [AR1,P#0.0]
T B [AR2,P#0.0]
+AR1 P#1.0
+AR2 P#1.0
L #Zaehler
LOOP M006
M099: R #BUSY //Programm beendet, BUSY auf FALSE
Zuletzt bearbeitet: