USB-relay per USB ein und ausschalten

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von johannes 123456.

    Hallo,

    da sind ganz andere ICs verbaut. Unter Anderem ein FTDI-Chip. Da lässt sich im Treiber der VCP aktivieren. Bei dem, was Du hast, ist ein Atmel-IC verbaut. Die Software von Sigma passt also nicht.

    C++-Projekte kann man z.B. mit Visual Studio > C++ bearbeiten. Ich gehe davon aus, dass die Express-Versionen nich kostenlos zu haben sind. Ansonsten mal bissel in Api-Programmierung einlesen und wie man DLLs anspricht. Dann geht das auch mit VB.

    Ob da wirklich ein ComPort von der Relais-Platine eingerichtet wird, siehst Du, wenn Du den Gerätemanager ohne angeschlossene Platine ansiehst. Ist Com1 dann immer noch da, ist es ein anderer.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

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

    Ich schaffe es einfach nicht komme nicht weiter.

    Wenn mir das jemand von euch machen könnte das ich es benutzen kann würde ich euch auch etwas dafür Bezahlen.
    Das ist für mich zu schwierig. Bitte um Hilfe!!!

    Das ist der Link zu dem Projekt was ich nicht in vb bekomme.
    m5.img.dxcdn.com/CDDriver/CD/sku.289998.rar

    Mfg
    Johannes

    Edit: Bin so am Verzweifeln:(

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

    Hallo,

    Deine HomeAutomation vom April letzten Jahres wird doch einige API-Aufrufe haben. Ich habe mir mal Deine 40 Posts durchgelesen. Von geben und nehmen hier im Forum kann ich leider nix erkennen.

    Selbst wenn sich jemand findet, der das macht, dann sollte dieser auch eine solche Platine besitzen oder Deine während der Programmierphase zur Verfügung haben. Er wird bei den Enums nur auf "keinen gefunden" stossen und kann die restlichen Funktionen nicht testen können. Ansonsten installier Dir VC++ und passe das Programm so an, dass es sich von einer VB-Anwendung steuern lässt / mit dieser Kommuniziert. Visual Studio Express 2012 ist kostenlos zu bekommen. Das 2015 für Windows 10 Apps ist nicht geeignet.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

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

    Hallo,

    als VB6 Programmierer ist das für mich auch nicht einfach. Ich würde erstmal alles nach VB2012 (oder so) übersetzen. Danach Fehler suchen und beseitigen. Das ist nicht mal eben schnell gemacht.

    Die usb_relay_device.h könnte z.B. so aussehen (Bestimmt nich Fehler drin):

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Enum usb_relay_device_type As Byte
    3. USB_RELAY_DEVICE_ONE_CHANNEL = 1
    4. USB_RELAY_DEVICE_TWO_CHANNEL = 2
    5. USB_RELAY_DEVICE_FOUR_CHANNEL = 4
    6. USB_RELAY_DEVICE_EIGHT_CHANNEL = 8
    7. End Enum
    8. Structure usb_relay_device_info
    9. Public serial_number As String
    10. Public device_path As String
    11. Public usb_relais_device_type As Byte
    12. Public usb_relais_device_info As String
    13. End Structure
    14. Module mdlRelais
    15. <DllImport("usb_relay_device.dll")> _
    16. Public Sub usb_relay_init()
    17. End Sub
    18. Public Sub usb_relay_exit()
    19. End Sub
    20. Public Sub usb_relay_device_enumerate(ByRef array() As usb_relay_device_info)
    21. End Sub
    22. Public Sub usb_relay_device_free_enumerate(ByRef usb_relay_device_info As usb_relay_device_info)
    23. End Sub
    24. Public Sub usb_relay_device_open_with_serial_number(ByRef serial_number As String, ByRef len As Byte)
    25. End Sub
    26. Public Sub usb_relay_device_open(ByRef usb_relay_device_info As usb_relay_device_info)
    27. End Sub
    28. Public Sub usb_relay_device_close(ByRef hHandle As Integer)
    29. End Sub
    30. Public Sub usb_relay_device_open_one_relay_channel(ByRef hHandle As Integer, ByRef index As Integer)
    31. End Sub
    32. Public Sub usb_relay_device_open_all_relay_channel(ByRef hHandle As Integer)
    33. End Sub
    34. Public Sub usb_relay_device_close_one_relay_channel(ByRef hHandle As Integer, ByRef index As Integer)
    35. End Sub
    36. Public Sub usb_relay_device_close_all_relay_channel(ByRef hHandle As Integer)
    37. End Sub
    38. Public Sub usb_relay_device_get_status(ByRef hHandle As Integer, ByRef status As Integer)
    39. End Sub
    40. End Module


    In der Form dann die Initialisierung machen und schauen, was läuft und wo noch korrigiert werden muss.

    VB.NET-Quellcode

    1. Public Class frmRelais
    2. Shared USB_Relais() As usb_relay_device_info
    3. Protected Overrides Sub Finalize()
    4. MyBase.Finalize()
    5. Try
    6. usb_relay_exit()
    7. Catch ex As Exception
    8. MsgBox("Fehler beim Schließen der DLL")
    9. End Try
    10. End Sub
    11. Public Sub New()
    12. ' Dieser Aufruf ist für den Designer erforderlich.
    13. InitializeComponent()
    14. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
    15. Try
    16. usb_relay_init()
    17. Catch ex As Exception
    18. MsgBox("Fehler beim öffnen der DLL")
    19. Exit Sub
    20. End Try
    21. Try
    22. usb_relay_device_enumerate(USB_Relais)
    23. Catch ex As Exception
    24. MsgBox("Fehler beim Auflisten der Relais")
    25. Exit Sub
    26. End Try
    27. Try
    28. MsgBox(UBound(USB_Relais))
    29. Catch ex As Exception
    30. MsgBox("Keine Relais gefunden")
    31. Try
    32. usb_relay_exit()
    33. Catch ex1 As Exception
    34. Application.DoEvents()
    35. End Try
    36. Endzeit.Enabled = True 'Beenden per Timer. (Quick n Dirty) Die Form muss erst zuende geladen werden, sonst Fehler.
    37. End Try
    38. End Sub
    39. Private Sub Endzeit_Tick(sender As Object, e As EventArgs) Handles Endzeit.Tick
    40. Application.Exit()
    41. End Sub
    42. End Class


    Weiter kommt man ohne Relais nicht. - Und nein, ich mache da auch nicht weiter. Das sollte Dir aber schon mal helfen, um zu beginnen. Für den Rest würde ich einzelne Fragen im Forum stellen. Z.B. weiß ich nicht, ob ich das mit den Strukturen richtig gemacht habe, ob die DLL per ByRef ansprechbar ist, dllimport jedesmal neu angegeben werden muss und eine Funktion statt Sub benötigt wird, und und und.

    Edit:

    Als Funktionen würde das so aussehen. Was nun richtig ist, weiß ich nicht.

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Enum usb_relay_device_type As Byte
    3. USB_RELAY_DEVICE_ONE_CHANNEL = 1
    4. USB_RELAY_DEVICE_TWO_CHANNEL = 2
    5. USB_RELAY_DEVICE_FOUR_CHANNEL = 4
    6. USB_RELAY_DEVICE_EIGHT_CHANNEL = 8
    7. End Enum
    8. Structure usb_relay_device_info
    9. Public serial_number As String
    10. Public device_path As String
    11. Public usb_relais_device_type As Byte
    12. Public usb_relais_device_info As String
    13. End Structure
    14. Module mdlRelais
    15. <DllImport("usb_relay_device.dll")> _
    16. Public Function usb_relay_init()
    17. End Function
    18. <DllImport("usb_relay_device.dll")> _
    19. Public Function usb_relay_exit()
    20. End Function
    21. <DllImport("usb_relay_device.dll")> _
    22. Public Function usb_relay_device_enumerate(ByRef array() As usb_relay_device_info)
    23. End Function
    24. <DllImport("usb_relay_device.dll")> _
    25. Public Function usb_relay_device_free_enumerate(ByRef usb_relay_device_info As usb_relay_device_info)
    26. End Function
    27. <DllImport("usb_relay_device.dll")> _
    28. Public Function usb_relay_device_open_with_serial_number(ByRef serial_number As String, ByRef len As Byte)
    29. End Function
    30. <DllImport("usb_relay_device.dll")> _
    31. Public Function usb_relay_device_open(ByRef usb_relay_device_info As usb_relay_device_info)
    32. End Function
    33. <DllImport("usb_relay_device.dll")> _
    34. Public Function usb_relay_device_close(ByRef hHandle As Integer)
    35. End Function
    36. <DllImport("usb_relay_device.dll")> _
    37. Public Function usb_relay_device_open_one_relay_channel(ByRef hHandle As Integer, ByRef index As Integer)
    38. End Function
    39. <DllImport("usb_relay_device.dll")> _
    40. Public Function usb_relay_device_open_all_relay_channel(ByRef hHandle As Integer)
    41. End Function
    42. <DllImport("usb_relay_device.dll")> _
    43. Public Function usb_relay_device_close_one_relay_channel(ByRef hHandle As Integer, ByRef index As Integer)
    44. End Function
    45. <DllImport("usb_relay_device.dll")> _
    46. Public Function usb_relay_device_close_all_relay_channel(ByRef hHandle As Integer)
    47. End Function
    48. <DllImport("usb_relay_device.dll")> _
    49. Public Function usb_relay_device_get_status(ByRef hHandle As Integer, ByRef status As Integer)
    50. End Function
    51. End Module


    Da es nun Funktionen sind, müssen die Aufrufe im Formular angepasst werden.

    Visual Basic-Quellcode

    1. Ergebnis = Funktion(bla)

    Gruß
    Peterfido

    Keine Unterstützung per PN!

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

    Wow wirklich Danke dafür.

    Das mit der usb_relay_device.h habe ich nicht so ganz kapiert. Wo und wie erstelle ich die ?

    Erstelle ich die in meinem Program ? Vll steh ich auch nur gerade voll auf dem Schlauch.


    Den unteren Code mit den Funktionen könnte ich doch ganz normal in meiner Form nutzen und dann die jeweilige Funktion zB per Button verwenden oder ?

    Edit:
    Hätte gestern probiert die dll ins program zu importieren da hat er mir aber einen Fehler angezeigt.
    Hallo,

    Zeile 17 gibt den entsprechenden Hinweis. Das ist ein Modul. Sollte aber auch in der Form laufen. Module haben den Vorteil, dass man diese in anderen Projekten weiternutzen kann. Nutzt man nur FORM, dann muss man sich das nötige immer wieder neu raus suchen.

    Auch möglich, dass es jedesmal die dllimport braucht und dann auf SUBs gehen muss. Es gibt halt viele Möglichkeiten.

    Edit:
    das Ganze kannst Du Dir (fast) sparen. Im Download ist doch ein Kommandozeilenprogramm enthalten. Das kannst Du mit jedem Programm fernsteuern. Dazu einfach mal die Readme.txt lesen.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

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

    Weil ich das nicht verstehe wie ich das machen soll.

    vll könntest du mir helfen.


    Habe das jetzt mit der CommandApp ausprobiert schaffe es aber nicht.

    in der readme steht:
    1. Open the first relay of the device serial number is afEd5
    CommandApp_USBRelay afEd5 open 01
    Wie mache ich das kann mir da bitte jemand helfen?

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