Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: B&R Datenobjekt richtig auslesen/erstellen

  1. #1
    Registriert seit
    19.07.2014
    Ort
    Hennef
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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.
    Geändert von Tress (19.07.2014 um 16:56 Uhr) Grund: neue erkentniss
    Zitieren Zitieren B&R Datenobjekt richtig auslesen/erstellen  

  2. #2
    Registriert seit
    12.04.2010
    Beiträge
    300
    Danke
    22
    Erhielt 54 Danke für 52 Beiträge

    Standard

    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

  3. #3
    Registriert seit
    05.05.2014
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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

  4. #4
    Registriert seit
    12.04.2010
    Beiträge
    300
    Danke
    22
    Erhielt 54 Danke für 52 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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

Ähnliche Themen

  1. Antworten: 16
    Letzter Beitrag: 16.01.2012, 12:33
  2. Fehler-OBs richtig auslesen
    Von williwuff im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 06.12.2011, 22:30
  3. Lib richtig erstellen
    Von Vogei im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 10.01.2011, 16:56
  4. Negative Zahl richtig auslesen (AGLink)
    Von MikeJ im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 23.11.2010, 19:12
  5. FB richtig erstellen?
    Von Poldi007 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 29.03.2010, 10:23

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •