dynamischer Datenbaustein

S-Victor

Member
Beiträge
17
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Leute bin neu hier und hoffe Ihr könnt mir helfen.
Mein Problem:
Über die Zähler Z1 (Zählerstand Z1 = x) soll der DB[x] aufgerufen werden.
Jeden der DB[x] hat für den Anfang eine Struktur (s. Anhang).
Über den zweiten Zähler Z2 (Zählerstand Z2 = y) sollen alle Werte in den DB gespeichert werden.

Das heißt, mit y=1 sollen alle Werte und für den zweiten Prozesschritt (y=2) nur (ab Druck_K_SOLL bis Temp6) gespeichert werden.
Es soll pro Prozess immer andere Werte in den selben DB.

Ich habe es mit Pointer versuch, leider ohne Erfolg.

Könnt Ihr mir helfen?
 

Anhänge

  • DB60.pdf
    28,4 KB · Aufrufe: 35

dtsclipper

Well-known member
Beiträge
945
Punkte Reaktionen
219
Da würde ich Dir erst mal raten für den Anfang den DB sauber zu erstellen, am einfachsten im 100 Byte Raster. Stichwort: UDT.

Dann brauchst Du nur noch mit einem Zeiger + Offset Die Daten zu übertragen.
 

bike

Well-known member
Beiträge
6.464
Punkte Reaktionen
794
Deine Zähler mit dem Abstand multilizieren.
ALso Zähler -1 mal Länge des Datenfeldes. + Startadresse
ZB:
Startadresse = 46
Zähler ist 2
2-1 * 32 + 46

Dann hast du deine Adresse und dann mit Schieben ein Pointer bauen und alles kommt an den richtigen Platz.
Wenn du den SFC20 nimmst musst du dir noch den Pointer manuell zusammenstricken.

Und es ist auch egal wie groß dein Abstand ist wenn du rechnet



bike
 

dtsclipper

Well-known member
Beiträge
945
Punkte Reaktionen
219
Wie ist das mit den Rastern gemeint?

Na ja, wie schon erwähnt, ich hätte mir einen UDT Zusammengesetzt mit den Daten und eine Menge Reservebytes, so das der UDT dann 100 Bytes lang ist.

Dann die Kopfzeilen aus dem DB an ENDE gestellt.

Dann ist der erste Druckwert das DBD0, der zweite das DBD100 usw.
Ich finde das rechnet sich leichter.
Apropos Rechnung:

Auch in dieser Version gilts bikes Formel, halt mit anderen Zahlen.
 
OP
S

S-Victor

Member
Beiträge
17
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Danke dtsclipper, danke bike für eure schnelle Antwort.

habe gemerkt, dass ich mit den Zeigern nicht umgehen kann.
Habe es auf einer anderen Art versuch und es klappt auch nicht so.

Es soll eigentlich so ablaufen
- Werte werden in den Datenbaustein DB1 gespeichert, über Taste "Weiter" werden die ersten Werte in ein DB2 kopiert.
- neue Werte werden in DB1 gespeichert, jetzt aber sollen die Werte den Werten in DB2 angehängt werden über die Taste "Weiter" usw.

könnt ihr mir bitte helfen?

Mein zusammengestelltes Programm:
---
L MW12
L 1
>=I
SPB SCH
---
U "Weiter"
SPBNB END
CALL "BLKMOV"
SRCBLK :=P#DB1.DBX0.0 BYTE 78
RET_VAL:=MW200
DSTBLK :=P#DB2.DBX0.0 BYTE 78
END: NOP 0
---
SCH: U "Weiter"
SPBNB WER
CALL FC 12
Bereichsanfang :=DBX0.0
Offset :=78
Datentyp :=B#16#8
Datenmenge :=9
DB_Nr :=2
Bereichs_Zeiger:=#Bereich

CALL "BLKMOV"
SRCBLK :=P#DB1.DBX0.0 BYTE 78
RET_VAL:=MW200
DSTBLK :=#Bereich
WER: NOP 0
 

Anhänge

  • DB1.pdf
    17,2 KB · Aufrufe: 5
  • DB2.pdf
    19,4 KB · Aufrufe: 3
OP
S

S-Victor

Member
Beiträge
17
Punkte Reaktionen
0
die Funktion lautet:
L P##Bereichs_Zeiger
LAR1
L W#16#10
T B [AR1,P#0.0]
L #Datentyp
T B [AR1,P#1.0]
L #Datenmenge
T W [AR1,P#2.0]
L #DB_Nr
T W [AR1,P#4.0]
L P##Bereichsanfang
LAR2
L #Offset
SLD 3
+D /
L DW#16#FFFFFFF8
UD
LAR2
T D [AR1,P#6.0]
BEA
 
Oben