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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: WINCC Real zurück in Rohdaten

  1. #11
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Es gibt durchaus Anwendungen bei der das Handling durch die Verwendung von Rohdatenvariablen wesentlich einfacher wird.

    Ich hatte mal eine Anwendung bei der ein Messwert in der SPS ca. alle 100ms mit Zeitstempel in einen DB geschrieben wurde. War die Messung fertig, hat die SPS dieses an WinCC gemeldet, und in eine Header eingetragen wie viele Einträge das Archiv hat. In WinCC habe ich dann 10 Rohdatenblöcke mit max. Größe angelegt. In einem getriggerten Skript hat dann WinCC die entsprechende Anzahl Rohdatenblöcke gelesen, die Bytes in Zeitstempel und Real-Wert aufgedröselt und das Ganze als CSV-Datei gespeichert.

    Der Vorteil ist hier dass die große Datenmenge nur einmal bei Bedarf gelesen wird. Zeitstempel kann WinCC aber eh nicht verarbeiten, darum wäre es ganz ohne Skript nicht gegangen.
    Zur Rechenzeit:
    Bei meinem C-Skript wird garnicht gerechnet, sondern es wird ein Speicherbereich einfach anders interpretiert. Und gegenüber der Zeit die das Lesen des Rohdatenblockes benötigt ist diese Zeit vernachlässigbar.

  2. #12
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    @Thomas:
    Ich meinte auch nicht dein Beispiel - ich habe da (auch als Nicht-C-Programmierer) schon gesehen, dass du da eine Art AT-Sicht erzeugt hast. Ich meinte das VB-Beispiel des TE ...

    Gruß
    Larry

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

    Standard

    Hallo Leute,

    tut mir leid das ich mich jetzt erst wieder melde aber hatte gerade viel um die ohren.

    Also sinn und zweck ist es 10 Realwerte bei änderung zurück in die
    SPS zu schreiben.

    1. Ich bereite die Rohdatenbytes auf und übergib diese der Internen Variable.
    2. hat sich die Interne Variable im letzten zyklus geändert schreib ich diese zurück in die SPS.

    Bei Word/ DWord funktioniert das einwandfrei, nur eben beim Real geht das nicht.

    Liegt das eventuell daran das ich in einer Aktion die Variablen aufbereite und falls sich was in der Internen variable geändert hat zurückschreibe?

    Ich kann leider hier kein komplettes Script posten.( Firma und so )

    Ich danke euch im voraus.

  4. #14
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Zitat Zitat von K-SYSTEM-D Beitrag anzeigen
    Bei Word/ DWord funktioniert das einwandfrei, nur eben beim Real geht das nicht.

    Liegt das eventuell daran das ich in einer Aktion die Variablen aufbereite und falls sich was in der Internen variable geändert hat zurückschreibe?
    Deine Frage beantwortet sich, wenn du dir den Aufbau einer REAL einmal ansiehst (Bit-Plazierung und Wertung von Exponent und Mantisse). Vielleicht siehst du dir das einmal an.
    Du kannst eine REAL nur byteweise auflösen wenn du dir eine "andere Sicht" darauf erstellst. Das wäre dann der Vorschlag von Thomas oder die von Ralle angedeutete Vorgehensweise ... oder du umgehst hier die Reals irgendwie - vielleicht kannst du ja auch das Gleiche mit einem DINT und einer festen Skalierung erreichen ...

    Gruß
    Larry

  5. #15
    Registriert seit
    27.04.2009
    Beiträge
    51
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für deine Antwort.

    also grundsätzlich könnte ich DINT schon hernehmen.

    da aber meine ganzen Bausteine in Real geschrieben sind, wollte ich logischerweise auch Real benutzen.

    egal, werd dann mal mit DINT probieren.

    Ich danke euch für eure hilfe.

    Eine Frage hätte ich noch und zwar passt das nicht in dieses Thema, aber egal.

    Ich kann in der Runtime Benutzer anlegen, das funktioniert schon!
    Aber kann mir jemand ein Beispiel posten wo ich auch Benutzer löschen kann!?

  6. #16
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von K-SYSTEM-D Beitrag anzeigen
    also grundsätzlich könnte ich DINT schon hernehmen.

    da aber meine ganzen Bausteine in Real geschrieben sind, wollte ich logischerweise auch Real benutzen.

    egal, werd dann mal mit DINT probieren.
    Und du bist dir sicher dass die Bytereihenfolge eines DINT in der SPS und im PC identisch ist? Ich meine nämlich bei Rohdaten musst du die immer drehen.

  7. #17
    Registriert seit
    27.04.2009
    Beiträge
    51
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage

    Hallo zusammen, also meine lage hat sich erheblih gebessert.

    nun ein anderes problem aber ich finds trotzdem nicht.

    ne Real von 8.125733 ist in der SPS

    byte 0 = 65
    byte 1 = 2
    byte 2 = 3
    byte 4 = 1

    aber in diesem code kommt was anderes raus und zwar

    byte 0 = 65
    byte 1 = 2
    byte 2 = 3
    byte 4 = 0 //und hier liegt nun mein Problem

    hier der Code von der Function

    Code:
    Function Real2Bytes (Realwert) 
    Dim arrSend, strSend
    Dim i, j, k, Anz, Prefix
    Dim sign :    sign = 0                ' Vorzeichen 
    Dim Exp :    Exp = 127                ' Offset für Single entspr. IEEE 754
    Dim dblFract :    dblFract = 1
    Dim arrResult :    arrResult = Array (0,0,0,0)
    Dim invar
    Dim V
    '==============================================================================
    ' IEEE 754 Single (Float32) in ein Byte-Array entspr. der internen
    ' PLC-Darstellung wandeln.
    ' BEACHTE! Denormalisierte Zahlen werden (noch) nicht unterstützt.
    '==============================================================================
                
    ' Initialisierungswerte vorbelegen
    sign = 0
    Exp = 127
    dblFract = 1
    arrResult = Array (0,0,0,0)
            
    invar = Realwert
            
    If invar < 0 Then    invar = invar * -1 :    sign = 1
            
    ' Normalisieren
    Do While invar >= 2 :    invar = invar / 2 :    Exp = Exp + 1 :    Loop
    Do While invar < 1 :    invar = invar * 2 :    Exp = Exp -1 :    Loop
            
        If (Exp And 1) = 0 Then invar = invar - 1
        arrResult(0) = sign * 128 + Exp \ 2
                
                For i=1 To 3
                    For j=7 To 0 Step -1
                        If invar > dblFract Then
                            arrResult(i) = arrResult(i) + 2^j
                            invar = invar - dblFract
                        End If
                        dblFract = dblFract/2
                    Next
                Next
            
          '  End If
                
            ' Temporäres Array übergeben
            
     Real2Bytes = Array(arrResult(0), arrResult(1), arrResult(2), arrResult(3))
    End Function
    und hier die aktion mit der ichs probiert hab

    Code:
    Function action
    Dim TestReal
    Dim Byte_wert
    Dim bytes
    Dim byte1
    Dim byte2
    Dim byte3
    Dim byte4
    Dim k
    k = 0
    TestReal = 8.125733
    bytes = Real2Bytes(TestReal)
    MsgBox bytes(0)
    MsgBox bytes(1)
    MsgBox bytes(2)
    MsgBox bytes(3)
    End Function
    Ich wäre euch echt dankbar wenn ihr mir nochmal helfen könntet.

    Ich danke euch im voraus

  8. #18
    Registriert seit
    27.04.2009
    Beiträge
    51
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    also ich hab jetzt festgestellt hat im Byte(3)
    entweder um 1 zu viel oder 1 zu wenig rin steht aber ich komme nicht drauf warum!

    jemand eine Idee?

Ähnliche Themen

  1. WinCC VB Rohdaten
    Von Raydien im Forum HMI
    Antworten: 9
    Letzter Beitrag: 15.10.2010, 10:57
  2. WinCC: UserArchiv mit Rohdaten
    Von WalterF im Forum HMI
    Antworten: 4
    Letzter Beitrag: 08.10.2009, 09:19
  3. Umwandlung real -> hex und zurück
    Von Flo im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 20.08.2008, 22:34
  4. WinCC String als Rohdaten...
    Von Jochen Kühner im Forum HMI
    Antworten: 0
    Letzter Beitrag: 04.06.2008, 15:20
  5. WinCC Rohdaten
    Von Jochen Kühner im Forum HMI
    Antworten: 0
    Letzter Beitrag: 16.07.2007, 12:58

Lesezeichen

Berechtigungen

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