B&R Datenobjekt richtig auslesen/erstellen

Tress

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich habe ein Problem mit den Datenobjekten bei B&R. Ich versuche grade eine Benutzerverwaltung mit hilfe von einem Datenobjekt zu Programmieren. Also habe ich ein Datenobjekt erstellt, wie dieses aussieht sieht man unten auf dem Foto. Desweiteren habe ich eine Struktur angelegt mit entsprechenden Datentypen um die ausgelesenen Daten dort hineinschreiben zu können. Jedoch schreibt mir das Programm immer nur das erste Element aus dem Datenobjekt in meine Struktur, kann mir jemand helfen?


Struktur:
Struktur.JPG

Datenobjekt:
Datenobjekt.JPG

Variablen Liste:
variablen.JPG

Programm:
Source.JPG

Ausgabe:
Ausgabe.JPG


Edit1:
Ich habe nochwas ausprobiert und habe es geschafft das es funktioniert. Indem ich die Stringlängen in der Struktur auf [9] begrenzt habe.
Gibt es noch eine andere möglichkeit denn ich würde dort gerne auch im laufendem Betrieb neue Benutzer anlegen können (über die Visualisierung) und dafür bräuchte ich dann ja noch Reserve in der Struktur.
 
Zuletzt bearbeitet:
Hi Tress,

wenn du das so 'einfach' lösen willst indem du eigentlich die Zielvariable direkt 'über' den Inhalt des Datenmoduls legst dann musst du darauf achten dass auch im Datenmodul die Struktur - also sprich die String-Länge genau eingehalten wird.

Einfacher ist es wenn du die Datenmodul-Adresse als Startadresse für eine Reihe von Speicheroperationen verwendest

Schematisch würde das so aussehen

  1. next_adress = strcpy (adr(Benutzer1), pDataModul)
  2. next_adress = strcpy (adr(Passwort1), next_adress)
  3. dyn_usint access next_adress + 1
  4. zugangslevel1 = dyn_usint
  5. next_adress = strcpy (adr(Benutzer2), next_adress +1)
  6. next_adress = strcpy (adr(Passwort2), next_adress)
  7. usw.
  8. usf.

Wie du siehst kannst du das in einer Loop machen bis die Datenmodul-Länge erreicht ist oder ähnlich.

Reinschreiben kannst du mit dem selben Prinzip.

BG
BB
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tress

Wie bits'bytes schon geschrieben hat, gibt es andere Wege das Datenobjekt zu lesen. Schreiben wird allerdings so nicht funktionieren, da du anscheinend dein Datenobjekt mit dem Automation Studio erstellst und es somit eine Checksumme hat. Direktes Schreiben in das Datenobjekt ist also nicht erlaubt. Es müssen die dataobj Funktionsblöcke verwendet werden.

Das Problem ist, dass die Datenlängen zwischen deiner Struktur und deinem Datenobjekt passen nicht zusammen.

Du liest mit dem DatObjRead 44 Byte aus und schreibst diese über deine Struktur. Das erste Element deiner Struktur ist ein STRING[80] also steht der komplette Datenobjektinhalt im ersten Element. Im Watch wird dir nur "benutzer1" angezeigt, da du danach die 0 Terminierung erreichst.

Meiner Meinung nach ist es am Einfachsten fixe Datenlängen pro Eintrag zu definieren und die Strukturelemente entsprechend zu deklarieren.

Würde deine Struktur so aussehen, würde dein Task für die erste Zeile funktionieren:

Benutzer1 STRING[9]
Passwort1 STRING[9]
Zugangslevel USINT
 
Hi
wenn vom Runtime der Inhalt des Datenmoduls verändert ist die Datenquelle auch nicht das AS, dann existiert das DO sowieso nur in der Runtime im Speicher.

Das Modul kann auch ohne Checksum-Prüfung eingebunden werden (soweit ich mich erinnere..... siehe Parameter zur Erstellung).

BR
BB
 
Zurück
Oben