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

Ergebnis 1 bis 8 von 8

Thema: B&R Datenobjekte

  1. #1
    Registriert seit
    08.03.2010
    Ort
    BaWü
    Beiträge
    131
    Danke
    10
    Erhielt 13 Danke für 11 Beiträge

    Cool


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich versuche mich gerade in die Datenobjekte bei B&R einzuarbeiten. Leider will das so wirklich nicht gelingen. Kennt jemand eine online verfügbare Anleitung? Oder kann mir das Trainingsmodul, TM250 - Speichermanagement und Datenhaltung, zukommen lassen?
    Wie ich ein Datenobjekt manuell erstelle ist kein Problem. Für mich stellt der lesende und schreibende Zugriff ein Problem da.
    Hab schon festgestellt das das wohl nicht so simpel wird wie bei ner s7.

    Vielleicht hat auch jemand ein einfaches Progrämmchen umfahren, bei der ich mir das mal abschauen kann.

    Vielen Dank für die Hilfe

    Edit:
    Hab die Funktion DatObjWrite bzw Write bereits gefunden. DatObjWrite (enable, ident, Offset, adr(Source), len, status) ist die syntax. enable ist klar (=1), ident soll ne Nummer des Objekts sein aus der Objektverwaltung ( Da weiß ich nicht woher ich die bekomme), Offset ( kann bei mir erstmal =0 sein, adr(Source) habe ich ein Udint-Array für erstellt, len sind 10 UDint werte im erstellten Array, wobei mir es es erst mal reichen würde wenn einer der werte übertragen wird, Status ist ausgang (fehlermeldung)
    Geändert von Sera (08.03.2010 um 11:54 Uhr)
    Zitieren Zitieren B&R Datenobjekte  

  2. #2
    Registriert seit
    25.05.2006
    Ort
    Hagen in Westfalen
    Beiträge
    17
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Sera Beitrag anzeigen
    Hallo,

    ich versuche mich gerade in die Datenobjekte bei B&R einzuarbeiten. Leider will das so wirklich nicht gelingen. Kennt jemand eine online verfügbare Anleitung? Oder kann mir das Trainingsmodul, TM250 - Speichermanagement und Datenhaltung, zukommen lassen?
    Wie ich ein Datenobjekt manuell erstelle ist kein Problem. Für mich stellt der lesende und schreibende Zugriff ein Problem da.
    Hab schon festgestellt das das wohl nicht so simpel wird wie bei ner s7.

    Vielleicht hat auch jemand ein einfaches Progrämmchen umfahren, bei der ich mir das mal abschauen kann.

    Vielen Dank für die Hilfe

    Edit:
    Hab die Funktion DatObjWrite bzw Write bereits gefunden. DatObjWrite (enable, ident, Offset, adr(Source), len, status) ist die syntax. enable ist klar (=1), ident soll ne Nummer des Objekts sein aus der Objektverwaltung ( Da weiß ich nicht woher ich die bekomme), Offset ( kann bei mir erstmal =0 sein, adr(Source) habe ich ein Udint-Array für erstellt, len sind 10 UDint werte im erstellten Array, wobei mir es es erst mal reichen würde wenn einer der werte übertragen wird, Status ist ausgang (fehlermeldung)
    Ich weiß zwar nicht wofür Du Datenobjekte brauchst ...

    An den Ident kommt der Ident des DatObjCreate dran

    in Basic:

    DatObjWrite.ident = DatObjCreate.ident

    Das muss so sein, weil die Funktion DatObjWrite sonst nicht weiß wo es die Daten hinschreiben soll.

    Steht aber auch alles in der Hilfe, solltest Du mal lesen

    Die ist wirklich gut.

  3. Folgender Benutzer sagt Danke zu Interceptor für den nützlichen Beitrag:

    Sera (10.03.2010)

  4. #3
    Sera ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.03.2010
    Ort
    BaWü
    Beiträge
    131
    Danke
    10
    Erhielt 13 Danke für 11 Beiträge

    Standard

    Ich will DO dazu nutzen um einen Baustein mit unterschiedlichen vorkonfektionierter Datensätzen zu füttern, und je nach Inhalt des Datensatzes unterschiedliche Funktionen im Baustein aufzurufen. Dabei sollen die Eingangsdaten vom Nutzer später an eine bestimmte Stelle im DO geschrieben werden und die Ausgangsdaten vom Baustein ebenfalls an bestimmte Stellen geschrieben werden.
    Sprich das DO soll später als Interface der Daten dienen. Diese kann ich nicht als feste Ein und Ausgangsdaten des Bausteins festlegen, da die je nach Datensatz unterschiedlich sind.

    Ja das der Ident da dran kommt weiß ich schon. Wenn ich das aber richtig verstanden habe kann ich den so jedoch nur herausbekommen wenn ich ein DO im Programm erzeuge. Ich möchte jedoch vorgefertigte DO nutzen. Wie ich von diesem DO den Ident bekomme ist die Frage.

    So sieht es im om aus als test:

    write_data[0]:=1;
    write_data[1]:=2;
    write_data[2]:=3;
    write_data[3]:=4;
    write_data[4]:=5;
    write_data[5]:=6;
    write_data[6]:=7;
    write_data[7]:=8;
    write_data[8]:=9;
    write_data[9]:=10;
    daten.enable:=1;
    daten.pName:=ADR('daten');
    dwident:=daten.ident;
    DatObjWrite_0(enable:=1, ident:=dwident, Offset:=0, pSource:=write_data[4], len:=10);

    Woebei: write_data als UDint[10] , daten als DatObjInfo und dwident als UDint definiert sind.
    Kompeliert wird es fehlerlos, aber im onlinemod ändert sich nichts im DO mit Namen daten der so aussieht:

    0;
    0;
    0;
    0;
    0;
    0;
    0;
    0;
    0;
    0;
    Geändert von Sera (08.03.2010 um 13:19 Uhr)

  5. #4
    Registriert seit
    25.05.2006
    Ort
    Hagen in Westfalen
    Beiträge
    17
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Sera Beitrag anzeigen
    Ich will DO dazu nutzen um einen Baustein mit unterschiedlichen vorkonfektionierter Datensätzen zu füttern, und je nach Inhalt des Datensatzes unterschiedliche Funktionen im Baustein aufzurufen. Dabei sollen die Eingangsdaten vom Nutzer später an eine bestimmte Stelle im DO geschrieben werden und die Ausgangsdaten vom Baustein ebenfalls an bestimmte Stellen geschrieben werden.
    Sprich das DO soll später als Interface der Daten dienen. Diese kann ich nicht als feste Ein und Ausgangsdaten des Bausteins festlegen, da die je nach Datensatz unterschiedlich sind.

    Ja das der Ident da dran kommt weiß ich schon. Wenn ich das aber richtig verstanden habe kann ich den so jedoch nur herausbekommen wenn ich ein DO im Programm erzeuge. Ich möchte jedoch vorgefertigte DO nutzen. Wie ich von diesem DO den Ident bekomme ist die Frage.

    So sieht es im om aus als test:

    write_data[0]:=1;
    write_data[1]:=2;
    write_data[2]:=3;
    write_data[3]:=4;
    write_data[4]:=5;
    write_data[5]:=6;
    write_data[6]:=7;
    write_data[7]:=8;
    write_data[8]:=9;
    write_data[9]:=10;
    daten.enable:=1;
    daten.pName:=ADR('daten');
    dwident:=daten.ident;
    DatObjWrite_0(enable:=1, ident:=dwident, Offset:=0, pSource:=write_data[4], len:=10);

    Woebei: write_data als UDint[10] , daten als DatObjInfo und dwident als UDint definiert sind.
    Kompeliert wird es fehlerlos, aber im onlinemod ändert sich nichts im DO mit Namen daten der so aussieht:

    0;
    0;
    0;
    0;
    0;
    0;
    0;
    0;
    0;
    0;
    Sorry das ich so spät antworte, ich bin nicht so oft hier ...

    Ich kann es jetzt leider nicht ausprobieren, sitze nicht am AS.
    daten müsste meiner Meinung nach vom Typ DatObjCreate sein.

    Beispiel aus der Hilfe:

    IF (bCreate) THEN (* Initialize create structure *)
    DOCreate.enable = 1
    DOCreate.grp = 0
    DOCreate.pName = ADR(strName)
    DOCreate.len = 100
    DOCreate.MemType = doUSRRAM
    DOCreate.Option = 0
    DOCreate.pCpyData = 0
    (* Call FUB *)
    DOCreate FUB DatObjCreate()

    (* Get FUB output information *)

    wStatus = DOCreate.status

    dwIdent = DOCreate.ident
    dwData = DOCreate.pDatObjMem

    (* Verify status *)
    IF (wStatus = 0) THEN
    bCreate = 0 bWrite = 1
    ELSE IF (wStatus <> $FFFF) THEN
    bCreate = 0 byErrorLevel = 1
    (* Set error level for DatObjCreate *)
    ENDIF
    ENDIF

    IF (bWrite) THEN
    bWrite = 0
    (* Initialize write structure *)
    DOWrite.enable = 1
    DOWrite.ident = dwIdent ; Das ist der Ident von DoCreate
    DOWrite.Offset = 0
    DOWrite.pSource = ADR(byWriteData[0])
    DOWrite.len = SIZEOF(byWriteData)
    (* Call FUB *)
    DOWrite FUB DatObjWrite()
    (* Get status *)
    wStatus = DOWrite.status
    (* Verify status *)
    IF (wStatus = 0) THEN
    bRead = 1
    ELSEbyErrorLevel = 2
    (* Set error level for DatObjWrite *)

    ENDIF
    ENDIF

    Deine Daten wären dann "byWriteData".
    Ich würde an Deiner Stelle bei DOWrite.len immer die Sizeof Variante wählen, so brauchst Du nur Dein Array vergrößern wenn Du mehr Daten verarbeiten willst.

  6. Folgender Benutzer sagt Danke zu Interceptor für den nützlichen Beitrag:

    Sera (10.03.2010)

  7. #5
    Sera ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.03.2010
    Ort
    BaWü
    Beiträge
    131
    Danke
    10
    Erhielt 13 Danke für 11 Beiträge

    Standard

    Danke für die Antwort
    Hab es mitlerweile hinbekommen:

    Datinfo.enable:=1;
    Datinfo.pName:=ADR('daten');
    Datinfo();

    Datinfo.status;
    ident:=Datinfo.ident;

    IF Datinfo.status=0
    THEN
    write:=1;
    END_IF;

    write_data[0]:=1;
    write_data[1]:=2;
    write_data[2]:=3;
    write_data[3]:=4;
    write_data[4]:=5;
    write_data[5]:=6;
    write_data[6]:=7;
    write_data[7]:=8;
    write_data[8]:=9;
    write_data[9]:=10;

    read_data[0]:=0;
    read_data[1]:=0;
    read_data[2]:=0;
    read_data[3]:=0;
    read_data[4]:=0;
    read_data[5]:=0;
    read_data[6]:=0;
    read_data[7]:=0;
    read_data[8]:=0;
    read_data[9]:=0;

    IF write AND NOT done
    THEN
    Datwrite.enable:=1;
    Datwrite.ident:=ident;
    Datwrite.Offset:=0;
    Datwrite.pSource:=ADR(write_data[0]);
    Datwrite.len:=SIZEOF(write_data);

    Datwrite();
    done:=1;
    END_IF
    Datwrite.status;

    IF Datwrite.status=0
    THEN
    Datread.enable:=1;
    Datread.ident:=ident;
    Datread.Offset:=0;
    Datread.pDestination:=ADR(read_data[0]);
    Datread.len:=SIZEOF(write_data);
    Datread();
    END_IF

    Datread.status;
    read_data[0];
    read_data[1];
    read_data[2];
    read_data[3];
    read_data[4];
    read_data[5];
    read_data[6];
    read_data[7];
    read_data[8];
    read_data[9];

    write_data, read_data : INT
    Datread : DatObjread
    Datwrite : DatObjwrite
    Datinfo : DatObjinfo
    done, write : bool
    ident : UDInt

    Inhalt des DO bei Erstellung:

    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0

    Wenn ich bereits bei der Erstellung des Programms ein Datenobjekt habe kann ich dies mit Datobjinfo den ident auslesen, diesen kann ich dann beim schreib bzw. beim leseauftrag verwenden.

    Hast mich auf den richtigen Weg gebracht dank dir

  8. #6
    Registriert seit
    24.04.2007
    Beiträge
    10
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    DataObj - DatObjInfo

    Mit DatObjInfo hat der Benutzer die Möglichkeit, Informationen über ein Datenobjekt auszulesen.

    Z.B.
    OUT ident UDINT Ident des Datenobjektes

  9. Folgender Benutzer sagt Danke zu dewenni für den nützlichen Beitrag:

    Sera (10.03.2010)

  10. #7
    Sera ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    08.03.2010
    Ort
    BaWü
    Beiträge
    131
    Danke
    10
    Erhielt 13 Danke für 11 Beiträge

    Standard

    Für mich ist meine Frage beantwortet, kann geclosed werden (außer hat noch nen anderer Frage zu)

  11. #8
    Registriert seit
    25.05.2006
    Ort
    Hagen in Westfalen
    Beiträge
    17
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Sera Beitrag anzeigen
    Danke für die Antwort
    Hab es mitlerweile hinbekommen:

    [...]
    Wenn ich bereits bei der Erstellung des Programms ein Datenobjekt habe kann ich dies mit Datobjinfo den ident auslesen, diesen kann ich dann beim schreib bzw. beim leseauftrag verwenden.

    Hast mich auf den richtigen Weg gebracht dank dir
    Kein Problem ...
    Freut mich das ich helfen konnte.

    Bis zum nächsten Mal

Ähnliche Themen

  1. B&R: Sys. Werte (Datenobjekte, rem. Variable)
    Von fighter im Forum Sonstige Steuerungen
    Antworten: 15
    Letzter Beitrag: 29.05.2009, 15:46

Lesezeichen

Berechtigungen

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