K8055 USB Interface Board Zähler

  • Guten Abend,

    Ich möchte gerne wissen wie ich die Zähler vom K8055 USB Board auslesen kann.. Danke in Voraus

  • Hallo

    du benötigst dazu diese UDF:

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    #include-once

    [/autoit] [autoit][/autoit] [autoit]

    Global $sDLL = "k8055D_multi.dll"
    ; Original Vellemann.Dll in diesen Namen umbenennen
    ;lt. vivus https://autoit.de/index.php?page…7621#post117621
    ;von dem auch das Original dieser UDF stammt
    Global $bK8055Debug = False
    #cs ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version: 3.3.0.0
    Author: myName

    [/autoit] [autoit][/autoit] [autoit]

    Script Function:
    handles the k8055d.dll 2009.10.19

    [/autoit] [autoit][/autoit] [autoit]

    #ce ----------------------------------------------------------------------------
    Func USB_DLLOpen()
    If $bK8055Debug Then ConsoleWrite("Dll wird geöffnet" & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    DllOpen(@ScriptDir & "\" & $sDLL) ; öffnen der DLL

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>USB_DLLOpen

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func initial_board($address)
    If $bK8055Debug Then ConsoleWrite("Board wird initialisiert" & @CRLF)
    $begin = TimerInit()
    Do
    $result = USBOpenDevice($address)
    Sleep(250)

    [/autoit] [autoit][/autoit] [autoit]

    $dif = TimerDiff($begin)

    [/autoit] [autoit][/autoit] [autoit]

    If $dif > "4000" Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    Until $result = 1

    [/autoit] [autoit][/autoit] [autoit]

    ClearAllDigital($address)

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(250)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ SetDigitalChannel($address, "4")

    [/autoit] [autoit][/autoit] [autoit]

    If $result = 1 Then
    If $bK8055Debug Then ConsoleWrite("Board wurde initialisiert" & @CRLF)
    Return "1"

    [/autoit] [autoit][/autoit] [autoit]

    Else
    MsgBox(0, "ERROR", "fehler bei initialisierung des USB board's" & $address)
    MsgBox(0, "ERROR", "Programm wird beendet! mit " & $result)
    Exit
    Return "0"

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>initial_board

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func USBOpenDevice($address)
    If $bK8055Debug Then ConsoleWrite("USBDevice " & $address & " wird geöffnet" & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    $result = DllCall($sDLL, "long", "OpenDevice", "long", $address)
    If Not @error Then

    [/autoit] [autoit][/autoit] [autoit]

    If $result[0] = $address Then
    Return "1"

    [/autoit] [autoit][/autoit] [autoit]

    Else
    If $bK8055Debug Then ConsoleWrite("Öffnen von USBDevice " & $address & " nicht erfolgreich!" & @CRLF)
    Exit
    EndIf
    Else
    If $bK8055Debug Then ConsoleWrite("Öffnen von USBDevice " & $address & " nicht erfolgreich!" & @CRLF)
    Exit
    EndIf
    EndFunc ;==>USBOpenDevice

    [/autoit] [autoit][/autoit] [autoit]

    ;---------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func CloseAllDevice()
    If $bK8055Debug Then ConsoleWrite("entlade DLL " & @CRLF)
    $res = DllCall($sDLL, "none", "CloseDevice")
    DllClose(@ScriptDir & "\" & $sDLL) ; öffnen der DLL

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>CloseAllDevice

    [/autoit] [autoit][/autoit] [autoit]

    ;---------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func SearchDevices()
    If $bK8055Debug Then ConsoleWrite("suche Boards" & @TAB)

    [/autoit] [autoit][/autoit] [autoit]

    $result = DllCall($sDLL, "long", "SearchDevices")
    if not @error Then
    If $bK8055Debug Then ConsoleWrite("OK" & @CRLF)
    Return $result[0]
    Else
    If $bK8055Debug Then ConsoleWrite("Failed" & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>SearchDevices

    [/autoit] [autoit][/autoit] [autoit]

    ;---------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func USBCloseDevice($address)
    SetCurrentDevice($address)
    $res = DllCall($sDLL, "none", "CloseDevice")
    ;Return ;;$result[0]
    EndFunc ;==>USBCloseDevice

    [/autoit] [autoit][/autoit] [autoit]

    ;---------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func ClearAllDigital($address)
    SetCurrentDevice($address)
    $res = DllCall($sDLL, "int", "ClearAllDigital")
    EndFunc ;==>ClearAllDigital

    [/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func SetCurrentDevice($address)

    [/autoit] [autoit][/autoit] [autoit]

    $begin = TimerInit()
    Do

    [/autoit] [autoit][/autoit] [autoit]

    $result = DllCall($sDLL, "long", "OpenDevice", "int", $address)

    [/autoit] [autoit][/autoit] [autoit]

    ;ToolTip($address&"="&$result[0],0,0)
    $dif = TimerDiff($begin)

    [/autoit] [autoit][/autoit] [autoit]

    If $dif > "4000" Then ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    Until $address = $result[0]

    [/autoit] [autoit][/autoit] [autoit]

    ;ToolTip("",0,0)

    [/autoit] [autoit][/autoit] [autoit]

    If $address = $result[0] Then
    ;nix
    Else
    MsgBox(0, "", "adresse = " & $address & " result = " & $result[0])

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>SetCurrentDevice

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func SetDigitalChannel($address, $channel)
    SetCurrentDevice($address)
    DllCall($sDLL, "none", "SetDigitalChannel", "int", $channel)
    EndFunc ;==>SetDigitalChannel

    [/autoit] [autoit][/autoit] [autoit]

    ;---------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func ClearDigitalChannel($address, $channel)
    SetCurrentDevice($address)
    DllCall($sDLL, "none", "ClearDigitalChannel", "int", $channel)
    EndFunc ;==>ClearDigitalChannel

    [/autoit] [autoit][/autoit] [autoit]

    ;---------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func ReadAnalogChannel($address, $channel)
    SetCurrentDevice($address)
    $result = DllCall($sDLL, "int", "ReadAnalogChannel", "int", $channel)
    Return $result[0]
    EndFunc ;==>ReadAnalogChannel

    [/autoit] [autoit][/autoit] [autoit]

    ;---------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func ReadAllDigital($address)
    SetCurrentDevice($address)
    $alldigit = DllCall($sDLL, "int", "ReadAllDigital")
    Return $alldigit[0]
    EndFunc ;==>ReadAllDigital
    ;---------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func ReadDigitalChannel($address, $sellect)
    Dim $channel[6]
    $channel[1] = 0
    $channel[2] = 0
    $channel[3] = 0
    $channel[4] = 0
    $channel[5] = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $wert = ReadAllDigital($address)

    [/autoit] [autoit][/autoit] [autoit]

    ;MsgBox(0,"",$alldigit[0] & " " & $wert)
    Select

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 0
    $channel[1] = 0
    $channel[2] = 0
    $channel[3] = 0
    $channel[4] = 0
    $channel[5] = 0

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 1
    ;I1
    $channel[1] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 2
    ;I2
    $channel[2] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 3
    ;I1 + I2
    $channel[1] = 1
    $channel[2] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 4
    ;I3
    $channel[3] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 5
    ;I3 + I1
    $channel[1] = 1
    $channel[3] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 6
    ;I3 + I2
    $channel[2] = 1
    $channel[3] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 7
    ;I3 + I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[3] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 8
    ;I4
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 9
    ;I4 + I1
    $channel[1] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 10
    ;I4 + I2
    $channel[2] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 11
    ;I4 + I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 12
    ;I4 + I3
    $channel[3] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 13
    ;I4 + I3 + I1
    $channel[1] = 1
    $channel[3] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 14
    ;I4 + I3 + I2
    $channel[2] = 1
    $channel[3] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 15
    ;I4 + I3 * I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[3] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 16
    ;I5
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 17
    ;I1
    $channel[1] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 18
    ;I2
    $channel[2] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 19
    ;I1 + I2
    $channel[1] = 1
    $channel[2] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 20
    ;I3
    $channel[3] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 21
    ;I3 + I1
    $channel[1] = 1
    $channel[3] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 22
    ;I3 + I2
    $channel[2] = 1
    $channel[3] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 23
    ;I3 + I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[3] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 24
    ;I4
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 25
    ;I4 + I1
    $channel[1] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 26
    ;I4 + I2
    $channel[2] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 27
    ;I4 + I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 28
    ;I4 + I3
    $channel[3] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 29
    ;I4 + I3 + I1
    $channel[1] = 1
    $channel[3] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 30
    ;I4 + I3 + I2
    $channel[2] = 1
    $channel[3] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 31
    ;I4 + I3 * I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[3] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case Else

    [/autoit] [autoit][/autoit] [autoit]

    $channel[1] = 0
    $channel[2] = 0
    $channel[3] = 0
    $channel[4] = 0
    $channel[5] = 0

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    If $channel[$sellect] = 1 Then
    ; MsgBox(0,"","return 1")
    Return 1
    Else
    ; MsgBox(0,"","return 0")
    Return 0

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>ReadDigitalChannel
    ;--------------------------

    [/autoit]

    die du im include-Ordner von AutoIt unter k8055udf.au3 speicherst und mit

    [autoit]

    #include <k8055udf.au3>

    [/autoit]

    in dein Skript einbindest. Hier ein kleines Testskript:

    Spoiler anzeigen
    [autoit]

    #include <k8055udf.au3>
    #include <GuiStatusBar.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $iBoard = 0 ;Board mit dem verbnden werden soll
    Global $idChkDigitIn[6] ;für ControlIDs der Checkboxen Digitale Eingänge Element 0 ist nicht belegt
    Global $idChkDigitOut[9] ;für ControlIDs der Checkboxen Digitale Ausgänge Element 0 ist nicht belegt

    [/autoit] [autoit][/autoit] [autoit]

    ;##########################################
    $frmMain = GUICreate("K8055 Board Test", 519, 412, 187, 121)
    $idStatus = _GUICtrlStatusBar_Create($frmMain)
    Dim $idStatus_PartsWidth[2] = [439, -1]
    _GUICtrlStatusBar_SetParts($idStatus, $idStatus_PartsWidth)
    _GUICtrlStatusBar_SetText($idStatus, "", 0)
    _GUICtrlStatusBar_SetText($idStatus, "Verbunden", 1)
    GUICtrlCreateGroup("Digitale Eingänge", 8, 0, 169, 41)
    For $i = 1 To 5
    $idChkDigitIn[$i] = GUICtrlCreateCheckbox("I" & $i, -16 + $i * 32, 16, 25, 17)
    Next
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Digitale Ausgänge", 184, 0, 329, 41)
    For $i = 1 To 8
    $idChkDigitOut[$i] = GUICtrlCreateCheckbox("O" & $i, 152 + $i * 40, 16, 33, 17)
    Next
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $ListView1 = GUICtrlCreateListView("Aktionen", 8, 48, 506, 310)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 502)
    $beenden = GUICtrlCreateButton("Beenden", 432, 360, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    $bK8055Debug = True
    USB_DLLOpen()
    initial_board($iBoard)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg ;um die Events dieser GUI zu unterscheiden
    Case $GUI_EVENT_CLOSE, $beenden
    CloseAllDevice()
    Exit
    Case $idChkDigitOut[1] To $idChkDigitOut[8]
    $iChannel = $nMsg - $idChkDigitOut[1] + 1
    ConsoleWrite($iChannel & @CRLF)
    If BitAND(GUICtrlRead($idChkDigitOut[1]), $GUI_CHECKED) Then
    SetDigitalChannel($iBoard, $iChannel)
    Else
    ClearDigitalChannel($iBoard, $iChannel)
    EndIf
    Case $idChkDigitIn[1] to $idChkDigitIn[5]
    For $i = 1 To 5
    If ReadDigitalChannel($iBoard, $idChkDigitIn[$i]) Then
    GUICtrlSetState($idChkDigitIn[$i], $GUI_CHECKED)
    Else
    GUICtrlSetState($idChkDigitIn[$i], $GUI_UNCHECKED)
    EndIf
    Next
    EndSwitch
    WEnd

    [/autoit]

    mfg autoBert

  • Die Digitalen und Analoge Eingänge und Ausgänge verstehe ich schon ;)
    Ich benutze diese UDF:

    Spoiler anzeigen
    [autoit]

    ;;Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Integer) As Integer

    [/autoit] [autoit][/autoit] [autoit]

    Func USBOpenDevice($CardAddress)
    $result = DLLCall("k8055d.dll", "int", "OpenDevice", "int", $CardAddress)
    Return $result[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub CloseDevice Lib "k8055d.dll" ()

    [/autoit] [autoit][/autoit] [autoit]

    Func USBCloseDevice()
    $result = DLLCall("k8055d.dll", "none", "CloseDevice")
    Return ;;$result[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Function ReadAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer) As Integer

    [/autoit] [autoit][/autoit] [autoit]

    Func USBReadAnalogChannel($Channel)
    $result = DLLCall("k8055d.dll", "int", "ReadAnalogChannel", "int", $Channel)
    Return $result[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub ReadAllAnalog Lib "k8055d.dll" (ByRef Data1 As Integer, ByRef Data2 As Integer)
    ;;; Cannot convert to DLLCall syntax. If i remember correctly, you cannot pass things by reference.
    ;;Private Declare Sub OutputAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer, ByVal Data As Integer)

    [/autoit] [autoit][/autoit] [autoit]

    Func USBOutputAnalogChannel($Channel, $Data)
    $result = DLLCall("k8055d.dll", "none", "OutputAnalogChannel", "int", $Channel, "int", $Data)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub OutputAllAnalog Lib "k8055d.dll" (ByVal Data1 As Integer, ByVal Data2 As Integer)

    [/autoit] [autoit][/autoit] [autoit]

    Func USBOutputAllAnalog($Data1, $Data2)
    $result = DLLCall("k8055d.dll", "none", "OutputAllAnalog", "int", $Data1, "int", $Data2)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub ClearAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer)

    [/autoit] [autoit][/autoit] [autoit]

    Func USBClearAnalogChannel()
    $result = DLLCall("k8055d.dll", "none", "ClearAnalogChannel")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub SetAllAnalog Lib "k8055d.dll" ()

    [/autoit] [autoit][/autoit] [autoit]

    Func USBSetAllAnalog()
    $result = DLLCall("k8055d.dll", "none", "SetAllAnalog")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub ClearAllAnalog Lib "k8055d.dll" ()

    [/autoit] [autoit][/autoit] [autoit]

    Func USBClearAllAnalog()
    $result = DLLCall("k8055d.dll", "none", "ClearAllAnalog")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub SetAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer)

    [/autoit] [autoit][/autoit] [autoit]

    Func USBSetAnalogChannel($Chanel)
    $result = DLLCall("k8055d.dll", "none", "SetAnalogChannel", "int", $Channel)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub WriteAllDigital Lib "k8055d.dll" (ByVal Data As Integer)

    [/autoit] [autoit][/autoit] [autoit]

    Func USBWriteAllDigital($Data)
    $result = DLLCall("k8055d.dll", "none", "WriteAllDigital", "int", $Data)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub ClearDigitalChannel Lib "k8055d.dll" (ByVal Channel As Integer)

    [/autoit] [autoit][/autoit] [autoit]

    Func USBClearDigitalChannel($Channel)
    $result = DLLCall("k8055d.dll", "none", "ClearDigitalChannel", "int", $Channel)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub ClearAllDigital Lib "k8055d.dll" ()

    [/autoit] [autoit][/autoit] [autoit]

    Func USBClearAllDigital()
    $result = DLLCall("k8055d.dll", "none", "ClearAllDigital")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub SetDigitalChannel Lib "k8055d.dll" (ByVal Channel As Integer)

    [/autoit] [autoit][/autoit] [autoit]

    Func USBSetDigitalChannel($Channel)
    $result = DLLCall("k8055d.dll", "none", "SetDigitalChannel", "int", $Channel)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub SetAllDigital Lib "k8055d.dll" ()

    [/autoit] [autoit][/autoit] [autoit]

    Func USBSetAllDigital()
    $result = DLLCall("k8055d.dll", "none", "SetAllDigital")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Function ReadDigitalChannel Lib "k8055d.dll" (ByVal Channel As Integer) As Boolean

    [/autoit] [autoit][/autoit] [autoit]

    ;Func USBReadDigitalChannel($Channel)
    ;$result = DLLCall("k8055d.dll", "bool", "ReadDigitalChannel", "int", $Channel)
    ;Return $result[0]
    ;EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    func USBReadDigitalChannel($sellect)

    [/autoit] [autoit][/autoit] [autoit]

    dim $channel[6]
    $channel[1] = 0
    $channel[2] = 0
    $channel[3] = 0
    $channel[4] = 0
    $channel[5] = 0

    [/autoit] [autoit][/autoit] [autoit]

    $alldigit = DLLCall("K8055D.DLL", "int", "ReadAllDigital")

    [/autoit] [autoit][/autoit] [autoit]

    $wert = $alldigit[0]

    [/autoit] [autoit][/autoit] [autoit]

    ;MsgBox(0,"",$alldigit[0] & " " & $wert)
    Select

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 0
    $channel[1] = 0
    $channel[2] = 0
    $channel[3] = 0
    $channel[4] = 0
    $channel[5] = 0

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 1
    ;I1
    $channel[1] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 2
    ;I2
    $channel[2] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 3
    ;I1 + I2
    $channel[1] = 1
    $channel[2] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 4
    ;I3
    $channel[3] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 5
    ;I3 + I1
    $channel[1] = 1
    $channel[3] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 6
    ;I3 + I2
    $channel[2] = 1
    $channel[3] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 7
    ;I3 + I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[3] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 8
    ;I4
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 9
    ;I4 + I1
    $channel[1] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 10
    ;I4 + I2
    $channel[2] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 11
    ;I4 + I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 12
    ;I4 + I3
    $channel[3] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 13
    ;I4 + I3 + I1
    $channel[1] = 1
    $channel[3] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 14
    ;I4 + I3 + I2
    $channel[2] = 1
    $channel[3] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 15
    ;I4 + I3 * I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[3] = 1
    $channel[4] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 16
    ;I5
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 17
    ;I1
    $channel[1] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 18
    ;I2
    $channel[2] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 19
    ;I1 + I2
    $channel[1] = 1
    $channel[2] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 20
    ;I3
    $channel[3] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 21
    ;I3 + I1
    $channel[1] = 1
    $channel[3] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 22
    ;I3 + I2
    $channel[2] = 1
    $channel[3] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 23
    ;I3 + I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[3] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 24
    ;I4
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 25
    ;I4 + I1
    $channel[1] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 26
    ;I4 + I2
    $channel[2] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 27
    ;I4 + I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 28
    ;I4 + I3
    $channel[3] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 29
    ;I4 + I3 + I1
    $channel[1] = 1
    $channel[3] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 30
    ;I4 + I3 + I2
    $channel[2] = 1
    $channel[3] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case $wert = 31
    ;I4 + I3 * I2 + I1
    $channel[1] = 1
    $channel[2] = 1
    $channel[3] = 1
    $channel[4] = 1
    $channel[5] = 1

    [/autoit] [autoit][/autoit] [autoit]

    Case Else

    [/autoit] [autoit][/autoit] [autoit]

    $channel[1] = 0
    $channel[2] = 0
    $channel[3] = 0
    $channel[4] = 0
    $channel[5] = 0

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    If $Channel[$sellect] = 1 Then
    ; MsgBox(0,"","return 1")
    Return 1
    Else
    ; MsgBox(0,"","return 0")
    Return 0

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Function ReadAllDigital Lib "k8055d.dll" () As Integer

    [/autoit] [autoit][/autoit] [autoit]

    Func USBReadAllDigital()
    $result = DLLCall("k8055d.dll", "int", "ReadAllDigital")
    Return $result[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Function ReadCounter Lib "k8055d.dll" (ByVal CounterNr As Integer) As Integer

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func USBReadCounter()
    $result = DLLCall("k8055d.dll", "int", "ReadCounter")
    Return $result[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub ResetCounter Lib "k8055d.dll" (ByVal CounterNr As Integer)

    [/autoit] [autoit][/autoit] [autoit]

    Func USBResetCounter($count)
    $result = DLLCall("k8055d.dll", "none", "ResetCounter", "int", $count)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;;Private Declare Sub SetCounterDebounceTime Lib "k8055d.dll" (ByVal CounterNr As Integer, ByVal DebounceTime As Integer)

    [/autoit] [autoit][/autoit] [autoit]

    Func USBSetCounterDebounceTime($count, $detime)
    $result = DLLCall("k8055d.dll", "none", "SetCounterDebounceTime", "int", $count,"int", $detime)
    EndFunc

    [/autoit]

    Hier sind auch alle Befehle aufgelistet:

    Spoiler anzeigen

    USBOpenDevice($CardAddress)

    USBCloseDevice()

    USBReadAnalogChannel($Channel)

    USBOutputAnalogChannel($Channel, $Data)

    USBOutputAllAnalog($Data1, $Data2)

    USBClearAnalogChannel()

    USBSetAllAnalog()

    USBClearAllAnalog()

    USBSetAnalogChannel($Chanel)

    USBWriteAllDigital($Data)

    USBClearDigitalChannel($Channel)

    USBClearAllDigital()

    USBSetDigitalChannel($Channel)

    USBSetAllDigital()

    USBReadDigitalChannel($sellect)

    USBReadAllDigital()

    USBReadCounter()

    USBResetCounter($count)

    USBSetCounterDebounceTime($count, $detime)

    Aber was mich brennend interessiert ;) :

    Spoiler anzeigen

    USBReadCounter()

    USBResetCounter($count)

    USBSetCounterDebounceTime($count, $detime)

    Wie ich den Wert der beiden Counter auslesen kann.. Hab schon einige Möglichkeiten getestet aber es kommt nur ein Error raus. ^^

  • Hallo Domi94 ,

    teste dieses Skript:

    Spoiler anzeigen
    [autoit]

    ; *** Start added by AutoIt3Wrapper ***
    #include <EditConstants.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <k8055udf.au3>
    #include <GuiStatusBar.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $iBoard = 0 ;Board mit dem verbnden werden soll
    Global $idChkDigitIn[6] ;für ControlIDs der Checkboxen Digitale Eingänge Element 0 ist nicht belegt
    Global $idChkDigitOut[9] ;für ControlIDs der Checkboxen Digitale Ausgänge Element 0 ist nicht belegt
    Global $idInpZaehler[3] ;für ControlIDs Entprellzeit der Zählwerke Element 0 ist nicht belegt
    Global $idBtnZaehler[3] ;für ControlIDs Buttons Prellzeit setzen Zählwerke Element 0 ist nicht belegt
    Global $idBtnReset[3] ;für ControlIDs Buttons Prellzeit Zählwerke RESETen Element 0 ist nicht belegt
    Global $idLblZaehler[3] ;für ControlIDs Werte der Zählwerke Element 0 ist nicht belegt
    Global $iZaehler[3] ;abgefragte Werte aus der DllCall Element 0 ist nicht belegt

    [/autoit] [autoit][/autoit] [autoit]

    ;##########################################
    $frmMain = GUICreate("K8055 Board Test", 519, 185, 187, 121)
    $idStatus = _GUICtrlStatusBar_Create($frmMain)
    Dim $idStatus_PartsWidth[2] = [439, -1]
    _GUICtrlStatusBar_SetParts($idStatus, $idStatus_PartsWidth)
    _GUICtrlStatusBar_SetText($idStatus, "", 0)
    _GUICtrlStatusBar_SetText($idStatus, "Verbunden", 1)
    GUICtrlCreateGroup("Digitale Eingänge", 8, 0, 169, 41)
    For $i = 1 To 5
    $idChkDigitIn[$i] = GUICtrlCreateCheckbox("I" & $i, -16 + $i * 32, 16, 25, 17)
    Next
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Digitale Ausgänge", 184, 0, 329, 41)
    For $i = 1 To 8
    $idChkDigitOut[$i] = GUICtrlCreateCheckbox("O" & $i, 152 + $i * 40, 16, 33, 17)
    Next
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("Zähler 1", 8, 55, 220, 75)
    GUICtrlCreateLabel("Entprellteit (0-5000):",15,72)
    $idInpZaehler[1] = GUICtrlCreateInput("",110,70,30,20,$ES_Number)
    $idBtnZaehler[1] = GUICtrlCreateButton("setzen",150,70,70,20)
    $idBtnReset[1] = GUICtrlCreateButton("Reset",150,95,70,20)
    $idLblZaehler[1] = GUICtrlCreateLabel("TEST",15,95,110,30, $ES_RIGHT)
    GUICtrlSetFont(-1,14,1400)
    GUICtrlCreateGroup("Zähler 2", 278, 55, 220, 75)
    GUICtrlCreateLabel("Entprellteit (0-5000):",285,72)
    $idInpZaehler[2] = GUICtrlCreateInput("",380,70,30,20,$ES_Number)
    $idBtnZaehler[2] = GUICtrlCreateButton("setzen",420,70,70,20)
    $idBtnReset[2] = GUICtrlCreateButton("Reset",420,95,70,20)
    $idLblZaehler[2] = GUICtrlCreateLabel("TEST",285,95,110,30, $ES_RIGHT)
    GUICtrlSetFont(-1,14,1400)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $beenden = GUICtrlCreateButton("Beenden", 432, 135, 75, 25)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    $bK8055Debug = True
    USB_DLLOpen()
    initial_board($iBoard)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg ;um die Events dieser GUI zu unterscheiden
    Case $GUI_EVENT_CLOSE, $beenden
    CloseAllDevice()
    Exit
    Case $idChkDigitOut[1] To $idChkDigitOut[8]
    $iChannel = $nMsg - $idChkDigitOut[1] + 1
    ConsoleWrite($iChannel & @CRLF)
    If BitAND(GUICtrlRead($idChkDigitOut[1]), $GUI_CHECKED) Then
    SetDigitalChannel($iBoard, $iChannel)
    Else
    ClearDigitalChannel($iBoard, $iChannel)
    EndIf
    Case $idChkDigitIn[1] to $idChkDigitIn[5]
    For $i = 1 To 5
    If ReadDigitalChannel($iBoard, $idChkDigitIn[$i]) Then
    GUICtrlSetState($idChkDigitIn[$i], $GUI_CHECKED)
    Else
    GUICtrlSetState($idChkDigitIn[$i], $GUI_UNCHECKED)
    EndIf
    Next
    Case $idBtnZaehler[1]
    USBSetCounterDebounceTime(1, GuiCtrlRead($idInpZaehler[1]))
    Case $idBtnZaehler[2]
    USBSetCounterDebounceTime(2, GuiCtrlRead($idInpZaehler[2]))
    Case $idBtnReset[1]
    $iZaehler[1] = USBResetCounter(1)
    Case $idBtnReset[2]
    $iZaehler[2] = USBResetCounter(2)
    EndSwitch
    for $i = 1 to 2 ;Werte auslesen und setzen
    $iZaehler[$i] = USBReadCounter($i)
    if $iZaehler[$i] <> GUICtrlRead($idLblZaehler[$i]) then GUICtrlSetData($idLblZaehler[$i],$iZaehler[$i])
    Next
    WEnd

    [/autoit]

    ausserdem gehe ich davon aus dass die UDf einen Fehler enthält. Ich würde die Funktion USBReadCounter so anpassen, bin aber was DLL-Calls betrifft Laie und habe auch kein K8055 um es testen zu können:

    [autoit]

    Func USBReadCounter($count)
    $result = DllCall("k8055d.dll", "none", "ReadCounter", "int", $count)
    Return $result[0]
    EndFunc ;==>USBReadCounter

    [/autoit]

    mfg autoBert