Guten Abend,
Ich möchte gerne wissen wie ich die Zähler vom K8055 USB Board auslesen kann.. Danke in Voraus
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:
#include<Array.au3>
#include-once
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 Version: 3.3.0.0
Author: myName
Script Function:
handles the k8055d.dll 2009.10.19
#ce ----------------------------------------------------------------------------
Func USB_DLLOpen()
If $bK8055Debug Then ConsoleWrite("Dll wird geöffnet" & @CRLF)
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)
$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"
Else
MsgBox(0, "ERROR", "fehler bei initialisierung des USB board's" & $address)
MsgBox(0, "ERROR", "Programm wird beendet! mit " & $result)
Exit
Return "0"
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)
$result = DllCall($sDLL, "long", "OpenDevice", "long", $address)
If Not @error Then
If $result[0] = $address Then
Return "1"
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]Func CloseAllDevice()
If $bK8055Debug Then ConsoleWrite("entlade DLL " & @CRLF)
$res = DllCall($sDLL, "none", "CloseDevice")
DllClose(@ScriptDir & "\" & $sDLL) ; öffnen der DLL
EndFunc ;==>CloseAllDevice
[/autoit] [autoit][/autoit] [autoit];---------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func SearchDevices()
If $bK8055Debug Then ConsoleWrite("suche Boards" & @TAB)
$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
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]Func ClearAllDigital($address)
SetCurrentDevice($address)
$res = DllCall($sDLL, "int", "ClearAllDigital")
EndFunc ;==>ClearAllDigital
;----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]Func SetCurrentDevice($address)
[/autoit] [autoit][/autoit] [autoit]$begin = TimerInit()
Do
$result = DllCall($sDLL, "long", "OpenDevice", "int", $address)
[/autoit] [autoit][/autoit] [autoit];ToolTip($address&"="&$result[0],0,0)
$dif = TimerDiff($begin)
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])
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]Func ClearDigitalChannel($address, $channel)
SetCurrentDevice($address)
DllCall($sDLL, "none", "ClearDigitalChannel", "int", $channel)
EndFunc ;==>ClearDigitalChannel
;---------------------------------------------------------------------------
[/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]Func ReadAllDigital($address)
SetCurrentDevice($address)
$alldigit = DllCall($sDLL, "int", "ReadAllDigital")
Return $alldigit[0]
EndFunc ;==>ReadAllDigital
;---------------------------------------------------------------------------
Func ReadDigitalChannel($address, $sellect)
Dim $channel[6]
$channel[1] = 0
$channel[2] = 0
$channel[3] = 0
$channel[4] = 0
$channel[5] = 0
$wert = ReadAllDigital($address)
[/autoit] [autoit][/autoit] [autoit];MsgBox(0,"",$alldigit[0] & " " & $wert)
Select
Case $wert = 0
$channel[1] = 0
$channel[2] = 0
$channel[3] = 0
$channel[4] = 0
$channel[5] = 0
Case $wert = 1
;I1
$channel[1] = 1
Case $wert = 2
;I2
$channel[2] = 1
Case $wert = 3
;I1 + I2
$channel[1] = 1
$channel[2] = 1
Case $wert = 4
;I3
$channel[3] = 1
Case $wert = 5
;I3 + I1
$channel[1] = 1
$channel[3] = 1
Case $wert = 6
;I3 + I2
$channel[2] = 1
$channel[3] = 1
Case $wert = 7
;I3 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
Case $wert = 8
;I4
$channel[4] = 1
Case $wert = 9
;I4 + I1
$channel[1] = 1
$channel[4] = 1
Case $wert = 10
;I4 + I2
$channel[2] = 1
$channel[4] = 1
Case $wert = 11
;I4 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[4] = 1
Case $wert = 12
;I4 + I3
$channel[3] = 1
$channel[4] = 1
Case $wert = 13
;I4 + I3 + I1
$channel[1] = 1
$channel[3] = 1
$channel[4] = 1
Case $wert = 14
;I4 + I3 + I2
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
Case $wert = 15
;I4 + I3 * I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
Case $wert = 16
;I5
$channel[5] = 1
Case $wert = 17
;I1
$channel[1] = 1
$channel[5] = 1
Case $wert = 18
;I2
$channel[2] = 1
$channel[5] = 1
Case $wert = 19
;I1 + I2
$channel[1] = 1
$channel[2] = 1
$channel[5] = 1
Case $wert = 20
;I3
$channel[3] = 1
$channel[5] = 1
Case $wert = 21
;I3 + I1
$channel[1] = 1
$channel[3] = 1
$channel[5] = 1
Case $wert = 22
;I3 + I2
$channel[2] = 1
$channel[3] = 1
$channel[5] = 1
Case $wert = 23
;I3 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
$channel[5] = 1
Case $wert = 24
;I4
$channel[4] = 1
$channel[5] = 1
Case $wert = 25
;I4 + I1
$channel[1] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 26
;I4 + I2
$channel[2] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 27
;I4 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 28
;I4 + I3
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 29
;I4 + I3 + I1
$channel[1] = 1
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 30
;I4 + I3 + I2
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 31
;I4 + I3 * I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case Else
[/autoit] [autoit][/autoit] [autoit]$channel[1] = 0
$channel[2] = 0
$channel[3] = 0
$channel[4] = 0
$channel[5] = 0
EndSelect
[/autoit] [autoit][/autoit] [autoit]If $channel[$sellect] = 1 Then
; MsgBox(0,"","return 1")
Return 1
Else
; MsgBox(0,"","return 0")
Return 0
EndIf
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>ReadDigitalChannel
;--------------------------
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:
#include <k8055udf.au3>
#include <GuiStatusBar.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
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
;##########################################
$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)
$bK8055Debug = True
USB_DLLOpen()
initial_board($iBoard)
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
mfg autoBert
Die Digitalen und Analoge Eingänge und Ausgänge verstehe ich schon ![]()
Ich benutze diese UDF:
;;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
;;Private Declare Sub CloseDevice Lib "k8055d.dll" ()
[/autoit] [autoit][/autoit] [autoit]Func USBCloseDevice()
$result = DLLCall("k8055d.dll", "none", "CloseDevice")
Return ;;$result[0]
EndFunc
;;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
;;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)
Func USBOutputAnalogChannel($Channel, $Data)
$result = DLLCall("k8055d.dll", "none", "OutputAnalogChannel", "int", $Channel, "int", $Data)
EndFunc
;;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
;;Private Declare Sub ClearAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer)
[/autoit] [autoit][/autoit] [autoit]Func USBClearAnalogChannel()
$result = DLLCall("k8055d.dll", "none", "ClearAnalogChannel")
EndFunc
;;Private Declare Sub SetAllAnalog Lib "k8055d.dll" ()
[/autoit] [autoit][/autoit] [autoit]Func USBSetAllAnalog()
$result = DLLCall("k8055d.dll", "none", "SetAllAnalog")
EndFunc
;;Private Declare Sub ClearAllAnalog Lib "k8055d.dll" ()
[/autoit] [autoit][/autoit] [autoit]Func USBClearAllAnalog()
$result = DLLCall("k8055d.dll", "none", "ClearAllAnalog")
EndFunc
;;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
;;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
;;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
;;Private Declare Sub ClearAllDigital Lib "k8055d.dll" ()
[/autoit] [autoit][/autoit] [autoit]Func USBClearAllDigital()
$result = DLLCall("k8055d.dll", "none", "ClearAllDigital")
EndFunc
;;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
;;Private Declare Sub SetAllDigital Lib "k8055d.dll" ()
[/autoit] [autoit][/autoit] [autoit]Func USBSetAllDigital()
$result = DLLCall("k8055d.dll", "none", "SetAllDigital")
EndFunc
;;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
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
$alldigit = DLLCall("K8055D.DLL", "int", "ReadAllDigital")
[/autoit] [autoit][/autoit] [autoit]$wert = $alldigit[0]
[/autoit] [autoit][/autoit] [autoit];MsgBox(0,"",$alldigit[0] & " " & $wert)
Select
Case $wert = 0
$channel[1] = 0
$channel[2] = 0
$channel[3] = 0
$channel[4] = 0
$channel[5] = 0
Case $wert = 1
;I1
$channel[1] = 1
Case $wert = 2
;I2
$channel[2] = 1
Case $wert = 3
;I1 + I2
$channel[1] = 1
$channel[2] = 1
Case $wert = 4
;I3
$channel[3] = 1
Case $wert = 5
;I3 + I1
$channel[1] = 1
$channel[3] = 1
Case $wert = 6
;I3 + I2
$channel[2] = 1
$channel[3] = 1
Case $wert = 7
;I3 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
Case $wert = 8
;I4
$channel[4] = 1
Case $wert = 9
;I4 + I1
$channel[1] = 1
$channel[4] = 1
Case $wert = 10
;I4 + I2
$channel[2] = 1
$channel[4] = 1
Case $wert = 11
;I4 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[4] = 1
Case $wert = 12
;I4 + I3
$channel[3] = 1
$channel[4] = 1
Case $wert = 13
;I4 + I3 + I1
$channel[1] = 1
$channel[3] = 1
$channel[4] = 1
Case $wert = 14
;I4 + I3 + I2
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
Case $wert = 15
;I4 + I3 * I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
Case $wert = 16
;I5
$channel[5] = 1
Case $wert = 17
;I1
$channel[1] = 1
$channel[5] = 1
Case $wert = 18
;I2
$channel[2] = 1
$channel[5] = 1
Case $wert = 19
;I1 + I2
$channel[1] = 1
$channel[2] = 1
$channel[5] = 1
Case $wert = 20
;I3
$channel[3] = 1
$channel[5] = 1
Case $wert = 21
;I3 + I1
$channel[1] = 1
$channel[3] = 1
$channel[5] = 1
Case $wert = 22
;I3 + I2
$channel[2] = 1
$channel[3] = 1
$channel[5] = 1
Case $wert = 23
;I3 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
$channel[5] = 1
Case $wert = 24
;I4
$channel[4] = 1
$channel[5] = 1
Case $wert = 25
;I4 + I1
$channel[1] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 26
;I4 + I2
$channel[2] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 27
;I4 + I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 28
;I4 + I3
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 29
;I4 + I3 + I1
$channel[1] = 1
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 30
;I4 + I3 + I2
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case $wert = 31
;I4 + I3 * I2 + I1
$channel[1] = 1
$channel[2] = 1
$channel[3] = 1
$channel[4] = 1
$channel[5] = 1
Case Else
[/autoit] [autoit][/autoit] [autoit]$channel[1] = 0
$channel[2] = 0
$channel[3] = 0
$channel[4] = 0
$channel[5] = 0
EndSelect
[/autoit] [autoit][/autoit] [autoit]If $Channel[$sellect] = 1 Then
; MsgBox(0,"","return 1")
Return 1
Else
; MsgBox(0,"","return 0")
Return 0
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
;;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
;;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
;;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
Hier sind auch alle Befehle aufgelistet:
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
:
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:
; *** 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>
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
;##########################################
$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)
$bK8055Debug = True
USB_DLLOpen()
initial_board($iBoard)
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
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
mfg autoBert