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

Ergebnis 1 bis 10 von 10

Thema: WinCC VB Rohdaten

  1. #1
    Registriert seit
    24.04.2006
    Ort
    NRW
    Beiträge
    211
    Danke
    9
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo werte Gemeinde, eins vorweg im VB bin ich absoluter Neuling und hänge mit meiner aufgabe grade fest.

    Folgendes. ich will einen Rohdatenblock als Integer lesen und es auf Ein/ausgabe felder ausgeben.

    Als ich soweit war habe ich herausgefunden das WinCC den Rohdatenblock als Byte liest. irgendwo hier im Forum habe ich einen Code gefunden das er das Format auf Int wandelt.
    ich habe versuch den Code einzubinden doch irgendwie bekomme ich den nicht ans laufen. ich habe das gefühl das ich was vo nder Setzung der Ausgabe was falsch gemacht habe, denn wenn ich den Code einfüge kann ich noch nicht mal mehr eine Constante am Ausgabefeld defieren.

    Zusätzlich wollte ich euch fragen, wo es gute Literatur darüber gibt, ich habe mir zwar nen Buch "Windows Scripting VBS" gekauft dennoch habe ich festgestellt das das Müll und für das WinCC nicht zu gebrauchen ist.

    Ich hoffe ihr könnt mir weiterhelfen

    Hier mein Code:

    Option Explicit
    Function action
    'Deklaration Rohdaten Variabel (Wort 0-199)
    Dim dw0_199
    'lokale Variable als Variant
    Dim db0
    Dim dw0(800)
    Dim index
    'Deklaration Ein/Ausgabe Felder
    Dim Wert01_1
    Set Wert01_1 = HMIRuntime.Tags("Wert01_1")
    Dim Wert01_2
    Set Wert01_2 = HMIRuntime.Tags("Wert01_2")
    Dim Wert01_3
    Set Wert01_3 = HMIRuntime.Tags("Wert01_3")
    Dim Wert01_4
    Set Wert01_4 = HMIRuntime.Tags("Wert01_4")

    Set dw0_199 = HMIRuntime.Tags("Rohdaten")
    'Rohdaten Lesen
    dw0_199.Read

    db0 = dw0_199.Value

    'Wandel nach Int
    For index = 0 To 4
    dw0_199.Value = dw0_199.Value + Chr(dw0(index)\&h100) + Chr(dw0(index) And &hff)
    Next

    Wert01_1.Write dw0(0)
    Wert01_2.Write dw0(1)
    Wert01_3.Write dw0(3)
    Wert01_4.Write dw0(4)


    Gruß

    Raydien
    Geändert von Raydien (23.01.2007 um 12:14 Uhr)
    Zitieren Zitieren WinCC VB Rohdaten  

  2. #2
    Registriert seit
    18.05.2005
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,
    das Skript bricht nach dem ersten Fehler ab. Deshalb wird das Schreiben der Ausgabewerte nicht ausgeführt.
    Um die Fehlermeldungen zu sehen, solltest du das Tool ...\Siemens\WinCC\uTools\apdiag.exe starten und "Output Window" aktivieren.
    In dieses Fenster kannst du auch Debug-Ausschriften nach folgendem Muster ausgeben:
    HMIRuntime.Trace "Beliebiger Text oder (String-)Variable" & vbCrLf
    Wenn ich es richtig verstanden habe, möchtest du 200 Integerwerte (400 Bytes) von S7 in ein (Integer-)Array transferieren. Bis zur Zeile
    db0 = dw0_199.Value
    sollte es funktionieren, auch wenn das Array dw0(800) etwas reichlich dimensioniert ist. Ein maximaler Index von 199 (200 Werte) würde reichen.

    Da bei Integer-Werten mit Motorola-Byteorder das H-Byte zuerst steht, befinden sich in dem Array db0 abwechselnd H- und L-Bytes. Um die Integer-Werte zu rekonstruieren, könnte die For-Schleife wie folgt aussehen:
    For index=0 To 4
    dw0(index) = 256*db0(2*index) + db(2*index+1)
    Next
    Damit würden 5 Integer-Werte im Array dw0 gespeichert.

    Mit Literatur zu den Siemens-Spezifischen Objekten (HmiRuntime, Screens etc.) sind wir auf die Siemens-Hilfe und den Support angewiesen.
    Das MS-VBScript-Tutorium (VBSCRIP5.CHM), welches mit WinCC installiert wird , sollte als Sprachreferenz ständig in Reichweite sein. Für darüber
    hinaus gehende Anforderungen ist das ScriptCenter von Microsoft eine gute Adresse: http://www.microsoft.com/technet/scr...r/default.mspx

  3. #3
    Registriert seit
    23.08.2004
    Beiträge
    565
    Danke
    73
    Erhielt 19 Danke für 18 Beiträge

    Standard

    gehts auch in C#?

  4. #4
    Raydien ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    24.04.2006
    Ort
    NRW
    Beiträge
    211
    Danke
    9
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Astrein!!!

    Danke, wenn ich dich ma treffe gibts nen bier

    hat funktioniert.

    Wenn ich das wieder in Byte zurückschreiben und dann senden möchte (gleiche funktion nur in Send)
    sollte ich die Formel einfach nur umdrehen
    dh.

    For index=0 To 4
    dw0(index) = 256/db0(2/index)-db0(2/index-1)
    Next

    Müsste doch klappen oder?

  5. #5
    Registriert seit
    18.05.2005
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Fast ...

    Eine Möglichkeit wäre:
    For index=0 To 4
    db0(2*index) = Int(dw(index)/256) AND &hFF
    db0(2*index+1) = dw(index) AND &hFF
    Next
    Der ganzzahlige Divisionsoperator "\" ist als Ersatz für Bitverschiebung mit Vorsicht zu geniessen. Der Term Int(x/y) ist berechenbarer.

  6. #6
    Registriert seit
    01.05.2009
    Beiträge
    74
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    moin,

    dachte meine frage passt zum thema.

    ich hab in einem DB in der SPS ein array angelegt sagen wir mal Temperatur[0..9].Ich möchte dieses Array jetzt in Win CC flex über ein VB script beschreiben.Das möchte ich mit einem variablen index machen z.b.

    Temperatur[i] so in der Art.

    Aber irgendwie scheint das mit VBS nicht möglich.mit alt + -> krieg ich das nur so hin : smarttags("DB X.Temperatur[0]") also feste indices.

    weiss jmd wie man das hinbiegen kann oder ist das nicht möglich

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Irgendwo in der Online-Hilfe zum SmartTag-Objekt steht sinngemaß geschrieben:
    Zum Zugreifen auf den Wert eines Array-Elements schreiben Sie: SmartTags("Array-Variable")(Index), z.B. SmartTags("DB X.Temperatur")(0)

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #8
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von santero Beitrag anzeigen
    moin,

    dachte meine frage passt zum thema.

    ich hab in einem DB in der SPS ein array angelegt sagen wir mal Temperatur[0..9].Ich möchte dieses Array jetzt in Win CC flex über ein VB script beschreiben.Das möchte ich mit einem variablen index machen z.b.

    Temperatur[i] so in der Art.

    Aber irgendwie scheint das mit VBS nicht möglich.mit alt + -> krieg ich das nur so hin : smarttags("DB X.Temperatur[0]") also feste indices.

    weiss jmd wie man das hinbiegen kann oder ist das nicht möglich
    also da es im Thema um WinCC ging und nicht um flexible, denke Ich wäre ein neues sinvoller gewesen!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  9. #9
    Registriert seit
    04.07.2007
    Beiträge
    147
    Danke
    6
    Erhielt 13 Danke für 13 Beiträge

    Standard

    Zitat Zitat von Ulri Beitrag anzeigen
    Hallo,
    das Skript bricht nach dem ersten Fehler ab. Deshalb wird das Schreiben der Ausgabewerte nicht ausgeführt.
    Um die Fehlermeldungen zu sehen, solltest du das Tool ...\Siemens\WinCC\uTools\apdiag.exe starten und "Output Window" aktivieren.
    In dieses Fenster kannst du auch Debug-Ausschriften nach folgendem Muster ausgeben:
    HMIRuntime.Trace "Beliebiger Text oder (String-)Variable" & vbCrLf
    Wenn ich es richtig verstanden habe, möchtest du 200 Integerwerte (400 Bytes) von S7 in ein (Integer-)Array transferieren. Bis zur Zeile
    db0 = dw0_199.Value
    sollte es funktionieren, auch wenn das Array dw0(800) etwas reichlich dimensioniert ist. Ein maximaler Index von 199 (200 Werte) würde reichen.

    Da bei Integer-Werten mit Motorola-Byteorder das H-Byte zuerst steht, befinden sich in dem Array db0 abwechselnd H- und L-Bytes. Um die Integer-Werte zu rekonstruieren, könnte die For-Schleife wie folgt aussehen:
    For index=0 To 4
    dw0(index) = 256*db0(2*index) + db(2*index+1)
    Next
    Damit würden 5 Integer-Werte im Array dw0 gespeichert.

    Mit Literatur zu den Siemens-Spezifischen Objekten (HmiRuntime, Screens etc.) sind wir auf die Siemens-Hilfe und den Support angewiesen.
    Das MS-VBScript-Tutorium (VBSCRIP5.CHM), welches mit WinCC installiert wird , sollte als Sprachreferenz ständig in Reichweite sein. Für darüber
    hinaus gehende Anforderungen ist das ScriptCenter von Microsoft eine gute Adresse: http://www.microsoft.com/technet/scr...r/default.mspx
    Auch wenn das Thema schon etwas älter ist greife ich es jetzt mal auf. Ich habe die Lösung mit Integerwerten soweit am laufen. Nun möchte ich dies aber auch noch mit DINT machen und bin da etwas am verzweifeln. Wie muss da die Konvertierungszeile aussehen?

  10. #10
    Registriert seit
    04.07.2007
    Beiträge
    147
    Danke
    6
    Erhielt 13 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hab gerade eine Lösung gefunden:
    Code:
    For index=0 To 9 Step 2
    dw0(index) = 256*db0(2*index) + db0(2*index+1)
    dw0(index+1)= 256*db0(2*index+2) + db0(2*index+3)
    DINTValue =CLng("&H" & (Hex(dw0(index))+Hex(dw0(index+1))))
     
    HMIRuntime.Trace  DINTValue &vbCrLf
    Next

Ähnliche Themen

  1. WINCC Real zurück in Rohdaten
    Von K-SYSTEM-D im Forum HMI
    Antworten: 17
    Letzter Beitrag: 01.03.2011, 21:32
  2. WinCC: UserArchiv mit Rohdaten
    Von WalterF im Forum HMI
    Antworten: 4
    Letzter Beitrag: 08.10.2009, 09:19
  3. WinCC String als Rohdaten...
    Von Jochen Kühner im Forum HMI
    Antworten: 0
    Letzter Beitrag: 04.06.2008, 15:20
  4. WinCC Rohdaten
    Von Jochen Kühner im Forum HMI
    Antworten: 0
    Letzter Beitrag: 16.07.2007, 12:58
  5. WinCC-Variabelen in S7 über Rohdaten
    Von mortontower im Forum HMI
    Antworten: 12
    Letzter Beitrag: 11.07.2006, 17:02

Lesezeichen

Berechtigungen

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