Velleman K8055 och VB

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
MSV
Inlägg: 232
Blev medlem: 11 juni 2006, 19:21:25
Ort: Borgholm

Velleman K8055 och VB

Inlägg av MSV »

Vet att detta har avandlats tidigare, men jag gav nog upp innan jag fick någon klarhet i det hela.

Jag har Vellemans usb i/o-kort som jag försöker programmera med Visual Basic 2005 express ed. och lyckas inte med detta. Är det någon här som vet om det går med express versionen, eller ska man använda någon annan version?

Tacksam för alla tips!
Användarvisningsbild
Mathias@Åland
Inlägg: 241
Blev medlem: 22 juni 2006, 20:19:11
Ort: Åland
Kontakt:

Inlägg av Mathias@Åland »

Ett exempel:

Kod: Markera allt

Public Class Form1

    Private Declare Function OpenDevice Lib "k8055d.dll" (ByVal CardAddress As Integer) As Integer
    Private Declare Sub CloseDevice Lib "k8055d.dll" ()
    Private Declare Function ReadAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer) As Integer
    Private Declare Sub ReadAllAnalog Lib "k8055d.dll" (ByRef Data1 As Integer, ByRef Data2 As Integer)
    Private Declare Sub OutputAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer, ByVal Data As Integer)
    Private Declare Sub OutputAllAnalog Lib "k8055d.dll" (ByVal Data1 As Integer, ByVal Data2 As Integer)
    Private Declare Sub ClearAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer)
    Private Declare Sub SetAllAnalog Lib "k8055d.dll" ()
    Private Declare Sub ClearAllAnalog Lib "k8055d.dll" ()
    Private Declare Sub SetAnalogChannel Lib "k8055d.dll" (ByVal Channel As Integer)
    Private Declare Sub WriteAllDigital Lib "k8055d.dll" (ByVal Data As Integer)
    Private Declare Sub ClearDigitalChannel Lib "k8055d.dll" (ByVal Channel As Integer)
    Private Declare Sub ClearAllDigital Lib "k8055d.dll" ()
    Private Declare Sub SetDigitalChannel Lib "k8055d.dll" (ByVal Channel As Integer)
    Private Declare Sub SetAllDigital Lib "k8055d.dll" ()
    Private Declare Function ReadDigitalChannel Lib "k8055d.dll" (ByVal Channel As Integer) As Boolean
    Private Declare Function ReadAllDigital Lib "k8055d.dll" () As Integer
    Private Declare Function ReadCounter Lib "k8055d.dll" (ByVal CounterNr As Integer) As Integer
    Private Declare Sub ResetCounter Lib "k8055d.dll" (ByVal CounterNr As Integer)
    Private Declare Sub SetCounterDebounceTime Lib "k8055d.dll" (ByVal CounterNr As Integer, ByVal DebounceTime As Integer)
    Private Declare Sub Version Lib "k8055d.dll" ()
    Private Declare Function SearchDevices Lib "k8055d.dll" () As Byte
    Private Declare Function SetCurrentDevice Lib "k8055d.dll" (ByVal CardAddress As Integer) As Byte

    Const CARD_ADDRESS As Byte = 0              'Card address = 0

    Private Sub test()

        OpenDevice(CARD_ADDRESS)                'Connect to card

        SetAllDigital()                         'All digital outputs ON
        OutputAllAnalog(50, 255)                'Analog output 1 = 50, analog output 2 = 255

        System.Threading.Thread.Sleep(1000)     'Wait 1s

        ClearAllDigital()                       'All digital outputs OFF
        ClearAllAnalog()                        'Both analog outputs OFF

        CloseDevice()                           'Disconnect

    End Sub

    Private Sub testButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles testButton.Click
        test()
    End Sub

    Private Sub exitButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles exitButton.Click
        Me.Close()
    End Sub

End Class
Velleman har den senaste DLL-filen här.

Lägg K8055D.DLL i samma mapp som programmet eller i systemmappen.
MSV
Inlägg: 232
Blev medlem: 11 juni 2006, 19:21:25
Ort: Borgholm

Inlägg av MSV »

Tackar!
villken version är det skrivet i, vet du om det funkar med express?

/Micke
Användarvisningsbild
Mathias@Åland
Inlägg: 241
Blev medlem: 22 juni 2006, 20:19:11
Ort: Åland
Kontakt:

Inlägg av Mathias@Åland »

Koden är skriven i VB.NET 2005 Express. :)
MSV
Inlägg: 232
Blev medlem: 11 juni 2006, 19:21:25
Ort: Borgholm

Inlägg av MSV »

Nu börjar det lossna, har lyckats få det fungera mer än sist jag provade!
Har bara kört fast på en detalj, har du lust att ge mig ett exempel på att läsa en ingång t.ex. tänd utgång 5 när ingång 1 påverkas.
Khaki
Inlägg: 268
Blev medlem: 12 januari 2007, 01:04:13
Ort: Mölndal

Inlägg av Khaki »

Lägg till en Timer som läser av ingång1

Kod: Markera allt

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        If ReadDigitalChannel(1) = True Then
            SetDigitalChannel(5)
        Else
            ClearDigitalChannel(5)
        End If

    End Sub
Nånting sånt?
MSV
Inlägg: 232
Blev medlem: 11 juni 2006, 19:21:25
Ort: Borgholm

Inlägg av MSV »

Tackar, men varför timer? Får något konstigt felmeddelande när jag provar koden, vad kan det vara?
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Nog för att MS är som dom är, men står det verkligen "Något konstigt felmeddelande" när du kör koden?
MSV
Inlägg: 232
Blev medlem: 11 juni 2006, 19:21:25
Ort: Borgholm

Inlägg av MSV »

:lol: Förlåt mig, så här står det:
Handles clause requires a WithEvents variable defined in the containing type or one of its base types.

Vad menas??
Khaki
Inlägg: 268
Blev medlem: 12 januari 2007, 01:04:13
Ort: Mölndal

Inlägg av Khaki »

Har du lagt till en Timer från Toolboxen till din "Form"?
Eller har du bara lagt till koden?
MSV
Inlägg: 232
Blev medlem: 11 juni 2006, 19:21:25
Ort: Borgholm

Inlägg av MSV »

Tidigare har Mathias testprogram fungerat perfekt, nu helt plötsligt så reagerar programmet jättelångsamt, det tar 5 sek fråndet att jag klickar tills utgångarna tänds. När jag avslutar programmet så får jag meddelandet "Runtime Error 210 at 00009C34"

...orkar snart inte mer..... :evil:
grubs
Inlägg: 257
Blev medlem: 6 juni 2007, 01:34:39
Ort: Göteborg

Inlägg av grubs »

Jag är dålig på VB, men spontant:

Programmet reagerar långsamt för att du har satt timern för snabbt, om du kör timern på högsta hastighet så kommer programmet inte att hinna med annat än att kolla ingång 1.

Om du avslutar programmet utan att stänga av timern så kan jag tänka mig att du får något felmeddelande.
MSV
Inlägg: 232
Blev medlem: 11 juni 2006, 19:21:25
Ort: Borgholm

Inlägg av MSV »

Har provat samma program i en annan dator, då fungerar det utmärkt!
Det får väl ligga till sig under natten så kanske det fungerar :?
grubs
Inlägg: 257
Blev medlem: 6 juni 2007, 01:34:39
Ort: Göteborg

Inlägg av grubs »

Var det en snabbare dator du testade på sen/annan ver. på operativsystem?
Körde du en kompilerad fil eller var det i "utvecklingsmiljön" och var det samma i båda fallen?
Khaki
Inlägg: 268
Blev medlem: 12 januari 2007, 01:04:13
Ort: Mölndal

Inlägg av Khaki »

>Om du avslutar programmet utan att stänga av timern så kan jag tänka mig att du får något felmeddelande.

Nej, det får man inte men däremot får du felmeddelande om du inte "stänger" kontakten med kortet med hjälp av "CloseDevice()".
Lägg till en Avsluta-knapp så slipper du det irritationsmomentet i alla fall.

Kod: Markera allt

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        CloseDevice()

    End Sub
Skriv svar