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

Ergebnis 1 bis 9 von 9

Thema: libnodave Byte in Wert umwandeln VB.Net

  1. #1
    Registriert seit
    26.08.2015
    Beiträge
    16
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Abend,

    ich bin auf der Suche nach Hilfe beim umwandel von den Werten die libnodave von der Logo8 bekommt,
    in das jeweilig richtige Format.

    Zb. hatte ich im VM die Zeit einer Einschaltverzögerung hinterlegt, diese steht auf 3 Sec.
    Nun bekomme ich den Wert 44.
    Wie bekomme ich dort 3 Sec. raus??

    Ich möchte auch an dieser Stelle ganz ehrlich sein. Ich verstehe von diesen ganzen Bit´s und Byte´s kein Stück.
    Das bekomm ich nicht in meinen Schädel.

    kiter20
    Geändert von kiter20 (04.09.2015 um 22:44 Uhr)
    Zitieren Zitieren libnodave Byte in Wert umwandeln VB.Net  

  2. #2
    kiter20 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.08.2015
    Beiträge
    16
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Okay,
    also "Word" muss ich mir mit

    (dc.getU16)

    holen ? Ist das korrekt?

    Da bekomme ich dann bei 3 sec. einen Wert von 11504.
    Wie wird das jetzt zu 3 sec. ?

    kiter20

  3. #3
    Registriert seit
    25.02.2010
    Beiträge
    618
    Danke
    35
    Erhielt 121 Danke für 110 Beiträge

    Standard

    Einen 16bit Integer holt man sich mit
    Code:
    Public Shared Function getS16from(ByVal b() As Byte, ByVal pos As Integer) As Integer
    aus dem Buffer.

    Ob du aus dem V- Memory der Logo überhaupt lesen kannst, weiß ich nicht.
    in der Datei "area.html" sind die Speicherbereiche dargestellt. Orientiere dich mal an einer S7-200 V-Memory.
    Poste doch mal die Variablendeklaration aus Logosoft und deinen Code von .Net zum lesen.

    Holger

  4. #4
    kiter20 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.08.2015
    Beiträge
    16
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Die Variablen:
    VMemory.jpg

    Code:
       dc.readBytes(daveDB, 1, 0, 1, readByte)
                    TextBox1.Text += CStr(dc.getS16At(0)) & vbCrLf
    In diesem Fall bekomme ich 496


    Ein leises: aaaaaahhhhhhhh ich dreh durch
    So viele Möglichkeiten. Wann soll ich nur was nehmen. Gibt es dazu eine Doku?

    Geändert von kiter20 (06.09.2015 um 09:50 Uhr)

  5. #5
    Registriert seit
    25.02.2010
    Beiträge
    618
    Danke
    35
    Erhielt 121 Danke für 110 Beiträge

    Standard

    Versuche mal folgendes:
    Code:
    Dim VM_Wert As Integer
    Dim Buffer(9999) As Byte
    
    res = dc.readBytes(libnodave.daveDB, 1, 0, 2, Buffer)
    VM_Wert = libnodave.getS16from(Buffer, 0)
    Holger

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

    kiter20 (06.09.2015)

  7. #6
    kiter20 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.08.2015
    Beiträge
    16
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also war der Hauptgund für meinen Eiertanz, dass ich

    len: The number of bytes to read

    auf "1" hatte und somit nicht die benötigten 2 byte gelesen habe?

  8. #7
    kiter20 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.08.2015
    Beiträge
    16
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So,weiter geht´s.

    Wie kann ich denn ein integer in word umwandeln?
    Ich möchte jetzt gerne einen Wert in den vm Berreich schreiben.

    kiter20

  9. #8
    Registriert seit
    25.02.2010
    Beiträge
    618
    Danke
    35
    Erhielt 121 Danke für 110 Beiträge

    Standard

    Wie kann ich denn ein integer in word umwandeln?
    Eigentlich nur bedingt.
    Ein Integer stellt eine Ganzzahl dar. Wobei bei .NET ein Integer eine 32bit Zahl ist. In der SPS Welt ist ein Integer meistens nur 16bit lang.
    Ein Word ist eigentlich keine Zahl sondern eine Ansammlung von einzelnen Bit's. Normalerweise 16bit lang.
    Wenn du also in der Logo von einem Integer sprichst ist das Gegenstück in .NET ein Short.
    Mal ein Link zu Datentypen in .NET https://msdn.microsoft.com/de-de/library/47zceaw7.aspx

    Umwandlung einer Zahl in ein Word
    Code:
    Dim Var_Short as Short = 1234
    Dim Var_Word as UShort
    Var_Word = CUShort(Var_Short)
    Geändert von holgermaik (25.10.2015 um 23:15 Uhr)

  10. #9
    kiter20 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.08.2015
    Beiträge
    16
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Aber wie pack ich das denn nun in ein array?
    Damit ich das schreiben kann?

    Code:
                    Dim Var_Short As Short = 30
                    Dim Var_Word As UShort
                    Var_Word = CUShort(Var_Short)
    
                    dc.writeBytes(libnodave.daveDB, 1, 0, 2, Var_Word)

Ähnliche Themen

  1. Step 7 Byte in INT umwandeln
    Von ertrinkender im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 16.10.2013, 11:48
  2. LibNoDave unter VB.Net ohne libnodave.net.dll
    Von Earny im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 09.03.2010, 18:57
  3. Antworten: 20
    Letzter Beitrag: 14.06.2009, 00:39
  4. Umwandeln von INT nach Byte u Byte + n
    Von Gerold im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 07.04.2009, 10:07
  5. REAL in BYTE umwandeln
    Von Terence_Hill im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 18.01.2008, 20:03

Lesezeichen

Berechtigungen

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