# Daten aus DB lesen / in DB schreiben



## Supervisor (29 Juni 2006)

Hallo Experten,

ich möchte gerne Daten von bestimmten Adressen aus einem DB lesen und diese entweder mit Merkern weiterverarbeiten oder in einen anderen DB auf eine bestimmte Adresse kopieren.

Ich habe mal folgendes kurzes Beispielprogramm gemacht:

Der Datenbaustein *DB 1* hat in der Datenansicht folgende Struktur:
(5 Datenfelder mit vorbelegten Anfangswerten)

```
0.0  "D1"  DWORD   DW#16#123
4.0  "D2"  BYTE    B#16#8
5.0  "D3"  BYTE    B#16#1A
6.0  "D4"  BYTE    B#16#2B
7.0  "D5"  BYTE    B#16#3C
```
Die *FC* hat folgenden AWL-Code:

```
L 0                 //Wert 0 laden für Adresse 0
SLD 3               //3 Bit links schieben
LAR1                //ins Adressregister 1 laden
AUF DB 1            //DB 1 öffnen
L DBD [AR1,P#0.0]   //DWORD laden in DB 1 von Adresse 0.0
T #Puffer           //Wert in Variable "PUFFER" speichern (Datentyp: DWORD)
```
 
Leider funktioniert das aber nicht! :sb8: 

Wenn ich unter Step 7 die FC beobachte, dann bekomme ich immer nur Nullen als Daten angezeigt. Die Adresse im AR1 stimmt aber.
Warum funktioniert das nicht?
Was mache ich falsch?

Danke für eure Hilfe im vorraus!


----------



## volker (29 Juni 2006)

der code ist ok.

was steht denn im aktualwert?
geh im db mal auf datenansicht. dann auf bearbeiten/db-initialisieren.
damit werden die anfangswerte in die aktualwerte kopiert. dann ins ag übertragen.


----------



## Supervisor (29 Juni 2006)

Hallo Volker,

ich hab das grad mal ausprobiert und nun funktioniert es! DANKE!!!!

Die Aktualwerte hatten alle den Wert 0. Ich dachte bis jetzt, die Aktualwerte werden automatisch mit den Anfangswerten beschrieben. Muss man die eigentlich immer manuell aktualisieren oder geht das auch irgendwie automatisch?
Nebenbei gefragt: Was meinst du mit ag ?


----------



## Rainer Hönle (29 Juni 2006)

Supervisor schrieb:
			
		

> Nebenbei gefragt: Was meinst du mit ag ?


AG = Automatisierungsgerät = SPS


----------



## Unregistrierter gast (29 Juni 2006)

Supervisor schrieb:
			
		

> Die Aktualwerte hatten alle den Wert 0. Ich dachte bis jetzt, die Aktualwerte werden automatisch mit den Anfangswerten beschrieben. Muss man die eigentlich immer manuell aktualisieren oder geht das auch irgendwie automatisch?
> Nebenbei gefragt: Was meinst du mit ag ?




Ein AG ist ein "Arbeitsgerät",
 Siemens - Deutsch für SPS.

Die Anfangswerte werden nicht automatisch in die Aktualwerte kopiert.
Das musst du händisch machen.

Wichtig: Bei durchführen der Funktion "Bausteinkonsistenz prüfen" werden die Aktualwerte auf die Anfangswerte gesetzt!

Bedenke folgendes:
Der Baustein wird nur DANN mit den Anfansgwerten genutzt, wenn er jungfräulich in das AG eingespielt wurde, z.B. nach Urlöschen.

Wurde der Aktualwert einmal versorgt, z.B. im zyklischen Programm, dann behält dieser DB auch diese Werte !

Bei den neuen C - CPU wird der DB sogar bei Spannungsausfall im Flash gespeichert, so das bei Neustart die (richtigen) Aktualwerte drinnstehen.

Einen DB über seine Startwerte initialisieren macht eigendlich nur Sinn, wenn die Werte keine Änderungen mehr erfahren müssen.

Sonst am besten die Aktualwerte immer im zyklischen Programm versorgen!


----------



## Unregistrierter gast (29 Juni 2006)

Rainer Hönle schrieb:
			
		

> AG = Automatisierungsgerät = SPS




Ups,

in meinen ersten S5 - Lehrgang (der jetzt 16 Jahre her ist) hies es,
"Arbeitsgerät", weil es ja "die Arbeit macht", nun denn...


----------



## Supervisor (29 Juni 2006)

Ach so, jetzt weiß ich bescheid!
Das ist ja fast wie der AFDBW = Abkürzungsfimmel der Bundeswehr !
(Schenkelklopfer :sm26: )

*Danke* an alle für eure Hilfe! :s17:


----------

