Zeitstempel und Logdatei

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von udgesbou.

    Zeitstempel und Logdatei

    Servus zusammen,
    ich bin komplett neu in der Materie was VB angeht und hoffen dennoch, dass ihr mir behilflich sein könnt.

    Aktuell bin ich am testen einer Zeitnahmesoftware die mittels RFID-Tag und RFID-Reader die Rundenzeiten mist.

    Ich habe bereits eine SDK vom Hersteller erhalten, die ansatzweise geeignet scheint.

    Diese stellt die gelesenen Tags dann wie folgt dar:



    Nun bräuchte ich vor der Tag-ID noch das Datum und die Uhrzeit in folgendem Format dargestellt (Datum, Uhrzeit, Tag-ID):

    16.04.2021 11:12:13,384 E28011700000020A3E012563

    Und im besten Fall werden die gelesenen Tags dann fortlaufend in einer Logdatei als .txt gespeichert.

    Habe mein Projekt mal als .zip angehängt. Ich hoffe dass ich nicht zu viel erwarte und ihr mir helfen könnt :)

    Ich bin auf jeden Fall schon einmal sehr dankbar für jede Hilfe und wünscht noch einen schönen Abend ^^


    Grüße

    Anhang mit ausführbaren Dateien entfernt
    Thema verschoben; Das Thema wird automatisch dort erstellt, wo man sich befindet, wenn man auf [✱ Neues Thema] klickt. ~VaporiZed

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Willkommen im Forum.

    Ausführbare Dateien in Anhängen sind außerhalb des Showrooms nicht gestattet, siehe Boardregeln. Der Anhang wurde entfernt.
    Das Projekt bitte ohne bin-, obj-, .vs- und .git-Ordner und gezippt über [+ Erweiterte Antwort] hochladen.

    Arbeitest Du mit VS 2008? Aktuell ist 2022. Das Projekt musste erstmal bei mir geupgradet werden, bevor ich es laden konnte.
    Die Codequalität überspring ich mal.
    Stecken die gewünschten Daten in den Rohdaten oder geht es um den aktuellen Zeitpunkt?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Willkommen im Forum.

    Dank dir und vor allem dank dir für die schnelle Rückmeldung :D

    VaporiZed schrieb:


    <span style="color: #FF0000">Ausführbare Dateien in Anhängen sind außerhalb des Showrooms nicht gestattet, siehe Boardregeln. Der Anhang wurde entfernt.</span>
    Das Projekt bitte <code class="inlineCode">ohne</code> bin-, obj-, .vs- und .git-Ordner und gezippt über [+ Erweiterte Antwort] hochladen.

    Okay sorry, gleich zu Beginn schon alles falsch gemacht :whistling:
    Hab gedacht, mal so viele Informationen wie möglich liefern :)

    Jetzt habe ich die .vbproj nochmal gezippt angehängt, hoffe das passt?

    VaporiZed schrieb:


    Arbeitest Du mit VS 2008? Aktuell ist 2022. Das Projekt musste erstmal bei mir geupgradet werden, bevor ich es laden konnte.

    Mit VS 2022

    VaporiZed schrieb:


    Stecken die gewünschten Daten in den Rohdaten oder geht es um den aktuellen Zeitpunkt?

    Es geht um den Zeitpunkt zu dem der RFID-Tag gelesen wird.
    Dateien

    VaporiZed schrieb:

    Das Projekt bitte ohne bin-, obj-, .vs- und .git-Ordner und gezippt über [+ Erweiterte Antwort] hochladen.
    Es wird schon der ganze Projektordner benötigt, nur eben ohne die Unterordner .VS, OBJ, BIN und GIT (falls vorhanden) ;) . Da stecken Dateien drin, die die Zip-Dateigröße aufblähen, aber normalerweise für uns nicht nützlich sind.
    Den Zeitpunkt des Imports bekommst Du über Date.Now. Sobald Du schreibst Date.Now.ToString(", hilft Dir VS bei der genauen Formatangabe, damit es so wird, wie Du es wünsch
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    VaporiZed schrieb:

    Das Projekt bitte ohne bin-, obj-, .vs- und .git-Ordner und gezippt über [+ Erweiterte Antwort] hochladen.
    Es wird schon der ganze Projektordner benötigt, nur eben ohne die Unterordner .VS, OBJ, BIN und GIT (falls vorhanden) ;) . Da stecken Dateien drin, die die Zip-Dateigröße aufblähen, aber normalerweise für uns nicht nützlich sind.

    Okay, dann hoffentlich jetzt nochmal richtig gezippt und hochgeladen :saint:

    VaporiZed schrieb:


    Den Zeitpunkt des Imports bekommst Du über Date.Now. Sobald Du schreibst Date.Now.ToString(", hilft Dir VS bei der genauen Formatangabe, damit es so wird, wie Du es wünsch

    Das habe ich gerade mal eingegeben und tatsächlich erscheinen ein paar Hilfestellungen, die ich aber leider nicht wirklich verstehe ?(

    Ich habe in der "Form.vb" ja bereits folgende Zeilen auskommentiert:

    VB.NET-Quellcode

    1. 'str2 = str2 + "Type:" + str1 + " " 'Tag Type


    und

    VB.NET-Quellcode

    1. 'str2 = str2 + "Ant:" + str1 + " Tag:" 'Ant


    Das stande jeweils vor der Tag-ID, wird von mir aber nicht benötigt, stattdessen würde sich davor Datum und Uhrzeit gut machen, vielleicht kann man das einfach entsprechend ersetzen?


    Grüße
    Die Vorschlagsliste in VS so sooo lang, siehe Anhang. Und nix dabei? Ich denk mal doch ;) , da man die Bezeichner ja kombinieren kann:

    VB.NET-Quellcode

    1. Date.Now.ToString("dd.MM.yyyy HH:mm:ss,fff")

    Bilder
    • DateToString.png

      28,87 kB, 668×357, 47 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Die Vorschlagsliste in VS so sooo lang, siehe Anhang. Und nix dabei? Ich denk mal doch ;) , da man die Bezeichner ja kombinieren kann:

    VB.NET-Quellcode

    1. Date.Now.ToString("dd.MM.yyyy HH:mm:ss,fff")

    Prima, dank dir, das sieht auf jeden Fall schon einmal sehr gut aus <3



    Was jetzt aus Sicht der Darstellung und Protokollierung im Log super wäre, wenn zwischen der Zeit und der Tag-ID noch ein Leerzeichen wäre, wie bekomme ich das hin?
    Und dann habe ich noch das Problem, dass mir nur 20 Stellen vom RFID-Tag angezeigt werden, der Tag hat aber 24 Zeichen. In der mitgelieferten Software des Readers werden auch alle 24 Zeichen dargestellt, sprich der Reader liest 24 Zeichen, allerdings in meinem kleinen Programm werden vier "0-en" ausgeblendet und dazu habe ich im Code noch nicht die richtige Stelle gefunden, welche mir erlaubt 24 Zeichen dazustellen.

    Der Tag hat die ID: E280110520007185E62D0A68 dargestellt wird - wie im obrigen Screenshot zu sehen - allerdings nur E2801152007185E62DA68 ?(

    Anbei noch einmal die aktuelle Projektdatei.


    Grüße
    Dateien
    Das hier produziert deine Ausgabe, ich hoffe soweit hast du das erfasst, falls ja brauchst du nicht zwangsläufig das ganze Projekt anhängen, sondern nur copy&paste, wie ich hier:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim ret As Byte
    3. Dim arrBuffer(1024 * 64) As Byte
    4. Dim iTagNumber As Integer
    5. Dim iTotalLen As Integer
    6. ret = CFHid_GetTagBuf(arrBuffer, iTotalLen, iTagNumber)
    7. 'ret = 2 DataComing ret = 1 DevOut
    8. If ret = 2 Then
    9. If iTagNumber <> 0 Then
    10. Dim bPackLength As Short
    11. Dim i As Short
    12. Dim iIndex As Short
    13. Dim iLength As Short
    14. Dim str2 As String
    15. Dim str1 As String
    16. Dim str3 As String
    17. iIndex = 0
    18. Dim bIDLen As Byte
    19. iLength = 0
    20. str2 = ""
    21. For iIndex = 0 To iTagNumber - 1
    22. bPackLength = arrBuffer(iLength)
    23. 'str2 = ""
    24. 'str1 = ""
    25. 'str1 = Hex(arrBuffer(1 + iLength + 0))
    26. If (arrBuffer(1 + iLength + 0) And 128) = 128 Then
    27. bIDLen = bPackLength - 7 ' with TimeStamp , last 6 bytes is time
    28. Else
    29. bIDLen = bPackLength - 1
    30. End If
    31. 'str2 = str2 + "Type:" + str1 + " " 'Tag Type
    32. 'str1 = Hex(arrBuffer(1 + iLength + 1))
    33. 'str2 = str2 + "Ant:" + str1 + " Tag:" 'Ant
    34. str3 = ""
    35. For i = 2 To bIDLen - 1 'TagID
    36. str1 = Hex(arrBuffer(1 + iLength + i))
    37. str3 = str3 + str1 + " "
    38. Next i
    39. str2 = Date.Now.ToString("dd.MM.yyyy HH:mm:ss,fff") + str3 & vbCrLf
    40. str1 = Hex(arrBuffer(1 + iLength + i))
    41. 'str2 = str2 + "RSSI:" + str1 & vbCrLf 'RSSI
    42. iLength = iLength + bPackLength + 1
    43. Next iIndex
    44. If RichTextBox1.Text.Length > 1000 Then
    45. RichTextBox1.Text = ""
    46. End If
    47. RichTextBox1.Text = RichTextBox1.Text + str2
    48. End If
    49. 'RichTextBox1.Text = RichTextBox1.Text + "Success"
    50. End If
    51. End Sub

    Machst du Leerzeichen:
    str2 = $"{Date.Now:dd.MM.yyyy HH:mm:ss,fff} i bims 1 Leerzeichen {str3}{vbCrLf}"

    Ich hoffe ich gehe recht in der Annahme, dass RFID Hexwerte immer zweistellig angegeben werden und deshalb die Diskrepanz mit den Nullen besteht...
    10 ist halt Hex A und nicht 0A, und 0 ist Hex 0, nicht 00
    Musst du selbst führende Nullen angeben:
    str1 = Hex(arrBuffer(1+iLength + i)).PadLeft(2, "0"c)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Haudruferzappeltnoch schrieb:

    Das hier produziert deine Ausgabe, ich hoffe soweit hast du das erfasst, falls ja brauchst du nicht zwangsläufig das ganze Projekt anhängen, sondern nur copy&paste, wie ich hier:


    Ja das hatte ich bereits durchblickt, aber trotzdem danke für den Hinweis mit den Dateien. :)

    Haudruferzappeltnoch schrieb:


    Machst du Leerzeichen:
    str2 = $"{Date.Now:dd.MM.yyyy HH:mm:ss,fff} i bims 1 Leerzeichen {str3}{vbCrLf}"

    Sind die geschwungenen Klammern hier bewusst gewählt, wenn ja, welchen Zweck erfüllen die im Gegensatz zu den Runden Klammern?

    Haudruferzappeltnoch schrieb:


    Ich hoffe ich gehe recht in der Annahme, dass RFID Hexwerte immer zweistellig angegeben werden und deshalb die Diskrepanz mit den Nullen besteht...
    10 ist halt Hex A und nicht 0A, und 0 ist Hex 0, nicht 00
    Musst du selbst führende Nullen angeben:
    str1 = Hex(arrBuffer(1+iLength + i)).PadLeft(2, "0"c)

    Jawoll, das werden ich testen.

    petaod schrieb:

    Haudruferzappeltnoch schrieb:

    str1 = Hex(arrBuffer(1+iLength + i)).PadLeft(2, "0"c)
    Ich werfe dann doch mal .ToString("X2") in die Runde.

    Kannst du mir sagen wie die Zeile dann lauten müsste und was genau der Unterschied zu der Zeile von @Haudruferzappeltnoch ist?

    Grüße

    udgesbou schrieb:

    Sind die geschwungenen Klammern hier bewusst gewählt, wenn ja, welchen Zweck erfüllen die im Gegensatz zu den Runden Klammern?
    Jo, sind bewusst gewählt, probier runde klammern doch aus. (Stichwort Stringinterpolation, die geschweiften Klammern sind in diesem Kontext Identifier)

    udgesbou schrieb:

    Kannst du mir sagen wie die Zeile dann lauten müsste und was genau der Unterschied zu der Zeile von @Haudruferzappeltnoch ist?
    Der Unterschied ist, dass diese Methode beide Anweisungen in einem macht also Hex und PadLeft (dieses von dir beabsichtigte Format ist ein Sonderfall, wo das möglich ist).
    Die Hex() Funktion ist aus dem Microsoft.VisualBasic Namespace, und darüber wird meist nur die Nase gerümpft. Daher werden die generell gerne anders abgebildet.
    Da das aber vermutlich nicht die einzige Nutzung dieses Namespaces in deinem Projekt ist, habe ich es auch hier erstmal dabei belassen.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Erstmal dank dir für die Erklärung @Haudruferzappeltnoch :thumbup:


    Haudruferzappeltnoch schrieb:


    Machst du Leerzeichen:
    <code class="inlineCode">str2 =</code>…

    Das mit dem Leerzeichen funktioniert prima, danke dafür. :thumbup:
    Aber leider bringt der Code für die 24 Zeichen keine Veränderung, die Tag-ID ist immernoch 20-stellig.

    petaod schrieb:

    Zitat von Haudruferzappeltnoch: „str1 = Hex(arrBuffer(1+iLength + i)).PadLeft(2, &quot;0&quot;c)“Ich werfe dann doch mal <code class="inlineCode">.ToString(&quot;X2&quot;)</code> in die Runde.

    Wenn ich diese Variante versuche, stürzt das Programm mit folgenden Fehler ab:
    "System.InvalidCastException: "Das Objekt des Typs "System.String" kann nicht in Typ "System.IFormatProvider" umgewandelt werden.""


    Grüße

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „udgesbou“ ()

    udgesbou schrieb:

    Wenn ich diese Variante versuche, stürzt das Programm mit folgenden Fehler ab:
    "System.InvalidCastException: "Das Objekt des Typs "System.String" kann nicht in Typ "System.IFormatProvider" umgewandelt werden.""
    Kannst du mal die Code-Zeile posten, die das verursacht.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    udgesbou schrieb:

    Aber leider bringt der Code für die 24 Zeichen keine Veränderung, die Tag-ID ist immernoch 20-stellig
    Ich hab da schon eine Vermutung, aber momentan kannst du weder coden, noch kannst du sinngemäß Informationen bereitstellen, mit denen man dir gut helfen kann.

    Machs wie ich gesagt habe in Post 8: Poste die ganze Methode, wie sie jetzt is:
    Im Projekt den Code-Bereich markieren, Strg+C, dann drückst du hier im Editor auf den vb.net-Knopf (der vorletzte), dann erscheint im Editor [vbnet][/vbnet] und zwischen diese Blöcke setzt du den Cursor und drückst Strg+V

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim ret As Byte
    3. Dim arrBuffer(1024 * 64) As Byte
    4. Dim iTagNumber As Integer
    5. Dim iTotalLen As Integer
    6. ret = CFHid_GetTagBuf(arrBuffer, iTotalLen, iTagNumber)
    7. 'ret = 2 DataComing ret = 1 DevOut
    8. If ret = 2 Then
    9. If iTagNumber <> 0 Then
    10. Dim bPackLength As Short
    11. Dim i As Short
    12. Dim iIndex As Short
    13. Dim iLength As Short
    14. Dim str2 As String
    15. Dim str1 As String
    16. Dim str3 As String
    17. iIndex = 0
    18. Dim bIDLen As Byte
    19. iLength = 0
    20. str2 = ""
    21. For iIndex = 0 To iTagNumber - 1
    22. bPackLength = arrBuffer(iLength)
    23. 'str2 = ""
    24. 'str1 = ""
    25. 'str1 = Hex(arrBuffer(1 + iLength + 0))
    26. If (arrBuffer(1 + iLength + 0) And 128) = 128 Then
    27. bIDLen = bPackLength - 7 ' with TimeStamp , last 6 bytes is time
    28. Else
    29. bIDLen = bPackLength - 1
    30. End If
    31. 'str2 = str2 + "Type:" + str1 + " " 'Tag Type
    32. 'str1 = Hex(arrBuffer(1 + iLength + 1))
    33. 'str2 = str2 + "Ant:" + str1 + " Tag:" 'Ant
    34. str3 = ""
    35. For i = 2 To bIDLen - 1 'TagID
    36. str1 = Hex(arrBuffer(1 + iLength + i))
    37. str3 = str3 + str1 + " "
    38. Next i
    39. str2 = $"{Date.Now:dd.MM.yyyy HH:mm:ss,fff} {str3}{vbCrLf}"
    40. str1 = Hex(arrBuffer(1 + iLength + i)).PadLeft(2, "0"c)
    41. 'str2 = str2 + "RSSI:" + str1 & vbCrLf 'RSSI
    42. iLength = iLength + bPackLength + 1
    43. Next iIndex
    44. If RichTextBox1.Text.Length > 1000 Then RichTextBox1.Text = ""
    45. End If
    46. RichTextBox1.Text = RichTextBox1.Text + str2
    47. End If
    48. 'RichTextBox1.Text = RichTextBox1.Text + "Success"
    49. End If
    50. End Sub
    51. End Class


    So ist es aktuell und da bekomme ich den o. g. Fehler und das Programm stürzt ab. :/

    Wie gesagt, wenn ich in Zeilt 40 folgendes schreibe:

    VB.NET-Quellcode

    1. str1 = Hex(arrBuffer(1+iLength + i)).PadLeft(2, "0"c)


    Bekomme ich keine Änderung und die Tag-ID bleibt 20-stellig.

    @petaod und @Haudruferzappeltnoch danke auf jeden Fall dass ihr mir versucht unter die Arme zu greifen :saint:

    Grüße

    Haudruferzappeltnoch schrieb:


    Vergleiche mal Zeile 40 und Zeile 36.

    Also entweder ich bin schon Zeichenblind, aber der einzige Unterschied ist doch dass die eine Zeile weiter eingerückt ist als die andere oder? ?(
    Und eben noch um

    VB.NET-Quellcode

    1. .PadLeft(2, "0"c)
    ergänzt wurde?

    Kann natürlich sein, dass ich mich jetzt auch komplett blamier :S


    Grüße
    Jaja und wer hat das PadLeft da hingeschrieben?
    Da wirst dich wohl noch daran erinnern, dass du das vor nicht allzu kurzer Zeit warst.
    Dann wäre das bei der anderen Zeile, die haargenau so aussieht vielleicht n Versuch wert, dieselbe Änderung vorzunehmen.

    Zeile 36 wird immer wieder dem Hauptstring hinzugefügt, (For-Schleife), das ist also der Hauptteil deiner Hexwerte, die du in der Ausgabe findest.
    Du kannst das untersuchen, indem du mal in Zeile 36 str1 = "Foo" schreibst und in Zeile 40 str1 = "Bar"

    Haudruferzappeltnoch schrieb:

    Dann wäre das bei der anderen Zeile, die haargenau so aussieht vielleicht n Versuch wert, dieselbe Änderung…

    Einfach nur bockstark, vielen vielen Dank, jetzt wird die Tag-ID mit 24 Zeilen dargestellt, mega mega cool :thumbup: :thumbup: :thumbsup: :thumbsup: <3 <3

    Das Einzige was jetzt noch prima wäre, dass - wie bereits im Eingangspost beschrieben - beispielsweise wenn ich auf die Schaltfläche "Reading" klicke, eine ".txt"-Datei (Logdatei) erstellt wird, die fortlaufend mit dem Inhalt der "RichTextBox" beschrieben wird. Als Dateiname wäre theoretisch Datum und Uhrzeit des Klickens auf "Reading" denkbar oder Ähnliches :)


    Grüße