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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Libnodave / HB LB / Byte drehen / DB incl. DB in PC einlesen

  1. #1
    Registriert seit
    30.06.2006
    Ort
    Deutschland
    Beiträge
    157
    Danke
    24
    Erhielt 9 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusmmane,

    wir möchten aus einer CPU 319 einen DB incl. einiger UDTs über Libnodave einlesen bzw. bearbeiten der ganze Baustein soll in einer Oberfläche dargestellt werden.

    Doch nun das leidige Problem mit Siemens und dem dreher (HighByte LowByte)

    Bei Beckhoff gibt es die Möglichkeit die Daten in der einen oder anderen Art bereitzustellen. wie löst man das am beisten bei der S7 mit Libnodave?

    Weiteres Problem wenn ich den DB komplett eingelesen habe und stoße auf "einfache" Datentypen dann ist das kein Problem diese zu zerlegen, doch was mache ich wenn ich auf eine Struktur UDT stoße?


    Grüßle Softi
    Zitieren Zitieren Libnodave / HB LB / Byte drehen / DB incl. DB in PC einlesen  

  2. #2
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Beitrag

    Hallo,

    Zitat Zitat von Softi79
    doch was mache ich wenn ich auf eine Struktur UDT stoße?
    Die Tags in der SPS werden doch sowieso von den Kommunikationstools wie LibNoDave oder AGLink über absolute Adressen angesprochen. Und auch einzelne Elemente in einer UDT haben eine absolute Adresse (und auch einen definierten Datentyp). Also ich kann da kein Problem erkennen...

    Zitat Zitat von Softi79
    Doch nun das leidige Problem mit Siemens und dem dreher (HighByte LowByte)
    AG-Link von Deltalogic hat entsprechende Funktionen für die Anpassung der unterschiedlichen Datenformate. Einfach das Handbuch lesen und die entsprechenden Beispiele ansehen und anwenden. Und alles wird gut

    Gruß

    Question_mark
    Geändert von Question_mark (08.10.2008 um 22:50 Uhr)
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Little endian und big endian  

  3. #3
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Das Problem bei der Darstellung ist allerdings, dass man kontextsensitiv interpretieren muss. Ist das Wort jetzt 2 x 8 Bits, zwei Bytes, ein Wort, das HighWord oder das LowWord eines Doppelwortes etc. Diese Info (einschließlich UDTs und deren Aufbau) ist im S7-Projekt enthalten und kann z.B. mit AGLink-Symbolik-Pro aus diesem gelesen werden.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  4. #4
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    In welcher Programmiersprache ist/wird die Oberfläche programmiert?
    Für Delphi habe ich mir eine Unit geschrieben die die Zahlen dreht.

    bike

  5. #5
    Softi79 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.06.2006
    Ort
    Deutschland
    Beiträge
    157
    Danke
    24
    Erhielt 9 Danke für 7 Beiträge

    Standard

    Die Oberfläche wird in C# programmiert.... kann man aus dem Code trozdem irgendwie was ableiten? wenn ja kannst du mir das mailen?

    Gruß Softi

  6. #6
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Die Zahlen zu drehen ist eigentlich einfach. Und hilft auch nur, wenn man sicher ist, dass es sichum ein Wort oder Int handelt. Woran wird aber erkannt, ob es sich um ein Doppelwort handelt? Dort sieht dann die Drehung anders aus.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  7. #7
    Softi79 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.06.2006
    Ort
    Deutschland
    Beiträge
    157
    Danke
    24
    Erhielt 9 Danke für 7 Beiträge

    Standard

    Das sollte man eben an der Struktur erkennen, es gäbe z.B. die Möglichkeit aus dem Kommunikations DB eine Quelle zu generierern und diese dann beim PC einzuspielen. Doch so wie ich das sehe spilet einem da die S7 einen Streich, denn wenn ich dem DB einen UDT übergeben und diese Struktur dann als ARRAY [1...5] ausführe und daraus eine Quelle generiere dann wird in der Quelle die Sturktur nur einmal angegeben obwohl ich Sie als 1 bis 5 ausführe

    Gruß Softi

  8. #8
    Registriert seit
    25.09.2005
    Ort
    Neuss
    Beiträge
    278
    Danke
    11
    Erhielt 31 Danke für 29 Beiträge

    Standard

    Codeausschnitt als Beispiel Real (in c# float):
    Code:
     ...
                
                byte[] buffer = new byte[4];
                byte[] swapBuffer = new byte[4];
    
                res = dc.readBytes(libnodave.daveDB, DBNo, DBBStart, 4, buffer);
                if (res == 0)
                {
                    byte[] swapBuffer = new byte[4];
                    swapBuffer = (byte[]) buffer.Clone();
    
                        buffer[0] = swapBuffer[3];
                        buffer[1] = swapBuffer[2];
                        buffer[2] = swapBuffer[1];
                        buffer[3] = swapBuffer[0];
                        return BitConverter.ToSingle(buffer, 0);
                }
    und noch Int (c# Int16)

    Code:
     ....
                
                byte[] buffer = new byte[2];
                byte[] swapBuffer = new byte[2];
    
                res = dc.readBytes(libnodave.daveDB, DBNo, DBBStart, 2, buffer);
                if (res == 0)
                {
                    swapBuffer = (byte[])buffer.Clone();
                    buffer[0] = swapBuffer[1];
                    buffer[1] = swapBuffer[0];
                    return BitConverter.ToInt16(buffer, 0);
                }
    lässt sich aber ggf. noch optimieren.

  9. #9
    Softi79 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.06.2006
    Ort
    Deutschland
    Beiträge
    157
    Danke
    24
    Erhielt 9 Danke für 7 Beiträge

    Standard

    Ok, so in der Art haben wir das Programm auch geschriíeben, funktioniert auch. Doch das Problem ist der Aufbau des DB´s denn ich kann sehr Wohl den DB auslesen

    Das Problem ist nicht, wenn ich das für eine Bestimmte Struktur mache. Die Schwirigkeit ist das zu verallgemeinern
    Wenn ich die Struktur vorher nicht weiß. Dann weiß ich auch nicht wie viele bytes ich drehen muss.
    Weil ich bekomme von der S7 nur byte array ohne Info was für Typen daa sind.Wir haben uns schon überlegt den DB imt einem Header auszustatten.

    z.B.
    HEADER of DB12 Kommunikation
    0.0 Länge DB INT
    2.0 OFFSET bis Bit
    --> Länge Bereich Bit
    4.0 OFFSET bis BYTE
    -- Länge Bereich Byte
    6.0 OFFSET bis WORD
    8.0 OFFSET bis DWORD


    Die Quelle dss DBs könnte man generieren und an den PC übertragen und der muss sich dann aus der Quelle die Formate zusammen bauen. doch was macht man bei UDTs?


    Oder welche Möglichkeit gibt es sonst noch bei einer Hardware wie

    SPS S7 319 WinCC flex MP 277 Touch
    mit einem PC symbolisch auf Xbelibige Daten zuzugreifen.

    mit libnodave kann ich ja nur auf absolute Adressen zugreifen, es sollte aber eine Möglichkeit geben z.B. einen kompletten DB auszulesen und die INfos über den Aufbau braucht man natürlich auch um entsprechend die Daten richtig zu wandeln

    Wäre eine OPC Server einfacher? was ksotet so ein teil oder ist das auf einer 319er schon vorhanden?

    Grüßle Softi


    aber naja schön wäre das nicht und vorallem wäre man eine Feste Struktur gebunden

  10. #10
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ein OPC-Server ist ein Programm, das auf dem POC (und nicht auf der SPS) läuft. OPC kommt von Ole for Process Control. Und mit OLE ist wieder einmal die Technologie meines Freundes Bill Object Linking and Embedding gemeint. So, jetzt genug der Verwirrung.
    Es gibt OPC-Server, die direkt auf das S7-Projekt zugreifen und dann die symbolischen Operanden zur Auswahl bringen (wir haben auch so einen ). Für die Kommunikation werden dann aber die symbolischen Operanden wieder in absolute Operanden übersetzt. Und dann passiert das gleiche wie bei libnodave und zusätzlich die korrekte Wandlung gemäß Datentyp (in real, DWord, ..).
    Bei OPC-Servern ist zu beachten, dass das Gegenstück (ein OPC-Client) auch erst in das eigene Programm eingebunden werden muss.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

Ähnliche Themen

  1. libnodave: Drehen von Bytes nicht immer nötig?!
    Von poppycock im Forum Hochsprachen - OPC
    Antworten: 9
    Letzter Beitrag: 03.06.2011, 18:37
  2. B: Komplette CPU 416-2 Incl, CPs u.s.w.
    Von Unimog-HeizeR im Forum Suche - Biete
    Antworten: 6
    Letzter Beitrag: 25.01.2011, 17:55
  3. STEP 7 V5.4 incl.SP2
    Von lungi im Forum PC- und Netzwerktechnik
    Antworten: 0
    Letzter Beitrag: 01.07.2009, 22:28
  4. Antworten: 4
    Letzter Beitrag: 08.07.2008, 08:52
  5. Hgh Low byte drehen
    Von skyracer im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 09.05.2007, 15:01

Lesezeichen

Berechtigungen

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