Hygrosens 32IO Karte Eingänge lesen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Hygrosens 32IO Karte Eingänge lesen

    Hallo freunde der Sonne;)

    ich bin nun besitzer einer USB I/O karte mit je 32 ein und ausgängen. Die Dokumentation ist leider etwas sehr knapp bemessen. Hier die Produktseite

    Mein Problem ist nun, die Eingänge der Karte abzufragen. Beim Starten des Timers funktioniert es einmal die Werte abzufragen. Theoretisch sollte dies ja bei jeden Tick des Timers gehen, die Werte ändern sich aber nicht (ich stecke einfach ein kabel an/aus)

    Die Ausgänge zu beschalten funktioniert dagegen problemlos.

    Anbei mal mein aktueller Quellcode (bissle unsauber, aber zum testen reichts allemal.)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports USB
    2. Public Class Form1
    3. Dim devicenum
    4. Dim deviceID
    5. Dim myIOs As New clsUSB32IO
    6. Dim deviceErr
    7. Dim cardID
    8. Dim Err_0
    9. Dim outarray(5) As Byte
    10. Dim _InReg(5) As Byte
    11. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    12. devicenum = 255
    13. '1st card
    14. Dim iCardCounter As Integer = 0
    15. Dim usbDD As USB.UsbDeviceDescriptor
    16. usbDD = New USB.UsbDeviceDescriptor()
    17. For i As Byte = 0 To 31
    18. deviceID = myIOs.OpenDevice(i, "EZUSB", "", "")
    19. deviceErr = myIOs.GetDeviceError(i)
    20. For j As Integer = 0 To 31
    21. cardID = 512 + j
    22. If deviceErr = Err_0 Then
    23. If cardID = deviceID Then
    24. devicenum = i
    25. iCardCounter += 1
    26. myIOs.SetDeviceEnabled(devicenum, MC_Modi.IMode_1)
    27. myIOs.GetDeviceDescriptor(devicenum, usbDD)
    28. cboxDevice.Items.Add("Karten-Nr.: " & (deviceID).ToString())
    29. cboxDevice.SelectedIndex = 0
    30. Exit For
    31. End If
    32. End If
    33. Next
    34. Next
    35. If devicenum = 255 Then
    36. MessageBox.Show("no USB devices found.")
    37. Exit Sub
    38. End If
    39. myIOs.SetDeviceEnabled(devicenum, MC_Modi.IMode_1)
    40. deviceErr = myIOs.GetDeviceError(devicenum)
    41. If deviceErr <> 0 Then
    42. MessageBox.Show("err=" & deviceErr)
    43. End If
    44. Timer1.Interval = 50
    45. Timer1.Start()
    46. testoausgsenge()
    47. MessageBox.Show("gesendet!!" & vbCrLf & "Fehler: " & myIOs.GetDeviceError(devicenum))
    48. End Sub
    49. Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    50. myIOs.PB_ReadInc(devicenum, 0, _InReg)
    51. Label1.Text = _InReg(0)
    52. Label2.Text = _InReg(1)
    53. Label3.Text = _InReg(2)
    54. Label4.Text = _InReg(3)
    55. Label5.Text = _InReg(4)
    56. Dim lolz = myIOs.GetDeviceError(devicenum)
    57. If lolz <> 0 Then
    58. Timer1.Stop()
    59. MessageBox.Show("Fehler: " & lolz)
    60. End If
    61. End Sub
    62. Private Sub testoausgsenge()
    63. Dim outarray(5) As Byte
    64. outarray(0) = 0
    65. outarray(1) = 0
    66. outarray(2) = 0
    67. outarray(3) = 0
    68. For i As Integer = 0 To 10
    69. outarray(0) = i
    70. myIOs.PB_WriteInc(devicenum, 0, outarray)
    71. Threading.Thread.Sleep(50)
    72. Next
    73. End Sub
    74. End Class



    Die dazugehörige DLL steck ich einfach mal als anhang rein. Dazu noch ne kleine beschreibung die ich im inet gefunden habe.

    Wäre echt super wenn mir jemand helfen könnte :love:
    Dateien
    Ich verstehe das so, dass statt

    VB.NET-Quellcode

    1. myIOs.PB_ReadInc(devicenum, 0, _InReg)


    VB.NET-Quellcode

    1. myIOs.PB_ReadBlockInc(devicenum, 0, _InReg(0),4)


    genutzt werden muss. Genau wie es beim Schreiben

    VB.NET-Quellcode

    1. PB_WriteBlockInc(DevNumber, 0, outarray(0), 6)

    sein sollte
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Danke für Deine antwort ;)

    das mit

    VB.NET-Quellcode

    1. myIOs.PB_ReadBlockInc(devicenum, 0, _InReg(0),4)


    hab ich bereits probiert. Diese Funktion hab ich nicht (nur PB_WriteInc, PB_Write und ReadInc)

    wenn ich Readinc versuche, muss ich ein array übergeben. also _InReg(0) geht nicht. wenn ich noch die 4 dahinter schreibe, sinds zuviele argumente ;)
    Die Funktionen PB_WriteBlock und PB_ReadBlock sind in der AN21XX.dll.
    Dort im Worddokument wird statt PB I2C genutzt. (Auch in der AN21XX.dll)

    Die im Beispielordner enthaltene USB32IO.dll hat die im Bild angehangenen Funktionen.

    Edit: Es gibt auch im Example USB-Karten Ordner eine .bas Datei mit den nötigen Befehlen.
    Bilder
    • Zwischenablage01.jpg

      103,22 kB, 953×362, 169 mal angesehen
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „peterfido“ ()

    Also, ich hab mir jetzt mal die AN21XX.dll heruntergeladen. ich kann die nicht als verweis hinzufügen: Stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass sie eine gültige Assembly oder COM-Komponente ist.

    Derselbe spaß mit der USB32IO.dll

    hast du dir die 2 dll´s von dieser webseite runtergeladen? ( USB-Treiber und Dokumentation (12.11.2005) ) Das ist ja alles von 2005. ich nutze ja visual basic 2010

    Die .bas datei hab ich bereits gesehen, aber kp was ich damit machen soll.
    UPDATE:

    Okay, bitte hau mich nicht, aber ich habs herausgefunden.... name der dll in google eingegeben, ca 14 seiten vorwärts geblättert und siehe da: Nach jeden Lesevorgang muss ein Write ausgeführt werden, da sonst der Watchdog abschmiert und sich die karte vom system trennt.

    also einfach bei den timer das bytearray übertragen und schon gehts ohne probleme^^

    VB.NET-Quellcode

    1. myIOs.PB_ReadInc(devicenum, 0, _InReg)
    2. myIOs.PB_WriteInc(devicenum, 0, outarray)


    man man man... und wegen sowas sitzt man seit donnerstag nachmittag dran...
    Ja, hatte ich von dort runtergeladen. Demnach lässt die Produktpflege dort doch stark zu wünschen übrig...

    Ausprobiert habe ich es natürlich nicht, da ich die Karte nicht besitze. Schön, dass es nun funzt.
    Gruß
    Peterfido

    Keine Unterstützung per PN!