Springen naar inhoud


- - - - -

Aanspreken K8000 met VB2005 express edition

Velleman K8000 VB2005

  • Log in a.u.b. om te beantwoorden
Er zijn 15 reacties in dit onderwerp

#1 viezueelbeeziec

viezueelbeeziec

    Starting Developer

  • Leden
  • 12 berichten
    Laatst bezocht 02 feb 2009 20:47

Geplaatst op 21 oktober 2008 - 20:11

Hallo,

Ik probeer een K8000 van Velleman aan te sturen met VB2005.
Ik heb reeds de topic gelezen die Repi3 in 2006 heeft gepost, maar slaag er nog steeds niet in om de kaart aan te spreken.
Wanneer ik de applicatie start, verschijnt de K8E.exe niet in de task manager.
Als ik de test software van Velleman draai, start de K8E.exe wel.
De code is vrijeenvoudig en begint met
Visual Basic Code:

Option Explicit On
Public Class Form1

#Region "Declare DLL Subs "

	'IO CONFIGURATION PROCEDURES
	Private Declare Sub ConfigAllIOasInput Lib "k8d.dll" ()

en dan een hele hoop declaraties,
gevolgd door
Visual Basic Code:
Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs)
		Start_K8000()
		SelectI2CprinterPort(1)
		ConfigAllIOasOutput()
		ClearAllIO()
		ClearAllDAC()
		ClearAllDA()
	End Sub

Wat moet ik doen om de K8E.exe file te starten.
Ik plaatste reeds alle Dll en exe files in de bin/Debug folder, maar de K8000 wordt nog steed niet gestuurd.

Thx

Mich

#2 Yannou

Yannou

    VBIB Godfather

  • Leden
  • PipPipPipPipPipPipPipPip
  • 2465 berichten
    Laatst bezocht 24 apr 2020 19:41
  • Locatiehttp://www.fablab-brussels.be

Geplaatst op 21 oktober 2008 - 22:13

hoi viezueelbeeziec, welkom op het forum!

Net zelf eens de weinige documentatie die Velleman beschikbaar stelt doorgenomen, en daar zeggen ze niet duidelijk waar die K8E.exe file voor dient... moet je die zelf starten, als achtergrondservice (fake printerstuurprogramma)? En wat doet die k8d.dll library dan?

Een proces starten in VB doe je zo:
Visual Basic Code:
Dim xProc As New System.Diagnostics.Process()
xProc.StartInfo.FileName = "k8e.exe"
xProc.Start()

Groetjes

#3 viezueelbeeziec

viezueelbeeziec

    Starting Developer

  • Leden
  • 12 berichten
    Laatst bezocht 02 feb 2009 20:47

Geplaatst op 25 oktober 2008 - 18:58

Hallo,

Srry voor late reply, maar had het een paar dagen te druk.
Ondertussen o.a. naar de ongelooflijk grappige show van Freddy Dekerpel geweest.
Maar goed, zelfs met de code die een proces start, wordt K8E.exe nog steeds niet opgestart (niet te zien via TaskManager - Processen)
En toch is de K8000 goed ineengestoken, want hij werkt met vb6, opde zelfde PC.
Ik heb de exe en dll files in de solution explorer staan (via Add new item), en heb ook nog eens al deze files in de Bin/Debug folder geplaatst, maar nog steeds geen sturing van de Leds van de K8000.
Heeft iemand nog advies?

Thx

#4 Yannou

Yannou

    VBIB Godfather

  • Leden
  • PipPipPipPipPipPipPipPip
  • 2465 berichten
    Laatst bezocht 24 apr 2020 19:41
  • Locatiehttp://www.fablab-brussels.be

Geplaatst op 25 oktober 2008 - 19:23

Ik snap eigenlijk nog steeds de functie van K8E.exe niet in feite... alle routines zitten toch in k8d.dll, waar je inderdaad vanuit je programma een referntie naar legt... het zou dus moeten werken normaal gezien, als k8d.dll correct werkt althans.

Kijk eens in de handleiding voor een SelfTest functie, op de meeste hardware zit wel zo'n routine die je van eender waar in je code kan oproepen, en bvb alle leds aanschakelt etc. Dan weet je ten minste toch al dat de hardwarekoppeling werkt.

Groetjes

#5 viezueelbeeziec

viezueelbeeziec

    Starting Developer

  • Leden
  • 12 berichten
    Laatst bezocht 02 feb 2009 20:47

Geplaatst op 25 oktober 2008 - 19:49

Ok het is niet de bedoeling dat K8E.exe in de code komt, dit proces dient te worden gestart door de dll routine K8D.dll.
In de declaraties
Visual Basic Code:
Private Declare Sub Start_K8000 Lib "k8d.dll" () 

In de code
Visual Basic Code:
Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
		Start_K8000()
		SelectI2CprinterPort(1)
		ConfigAllIOasOutput()

	End Sub

Maar om te zien of inderdaad de routine is gestart, kijk ik in de task manager, en daar moet normaal de K8E.exe in te zien zijn.
Maar dit is dus niet het geval.
Ik heb een programmatje gecompileerd van VB6 code naar vb2005, en als ik dit run, dan zie ik de K8E.exe in de task manager en dan kan ik Leds laten branden op de interface.
Wat doe ik verkeerd?

#6 Yannou

Yannou

    VBIB Godfather

  • Leden
  • PipPipPipPipPipPipPipPip
  • 2465 berichten
    Laatst bezocht 24 apr 2020 19:41
  • Locatiehttp://www.fablab-brussels.be

Geplaatst op 25 oktober 2008 - 19:58

Gebruik je in je VB6 code identiek dezelfde dll?

#7 viezueelbeeziec

viezueelbeeziec

    Starting Developer

  • Leden
  • 12 berichten
    Laatst bezocht 02 feb 2009 20:47

Geplaatst op 25 oktober 2008 - 20:14

Ja, het is de dll die van vb_install Zip file komt van Velleman

#8 Ronneke

Ronneke

    VBIB Godfather

  • Leden
  • PipPipPipPipPipPipPipPip
  • 2234 berichten
    Laatst bezocht 29 okt 2012 02:21

Geplaatst op 25 oktober 2008 - 20:15

hoi

Je met wel rekening houden dat long integers in VB6  in feite integers zijn in VB.Net. Een ander punt kan ook zijn dat het woordje "any" bij de API declaraties niet voorkomt in VB.Net

Groeten

#9 viezueelbeeziec

viezueelbeeziec

    Starting Developer

  • Leden
  • 12 berichten
    Laatst bezocht 02 feb 2009 20:47

Geplaatst op 25 oktober 2008 - 20:24

Alle declaraties zijn "as Integer"
Wat doe ik met "any"? :?

#10 Ronneke

Ronneke

    VBIB Godfather

  • Leden
  • PipPipPipPipPipPipPipPip
  • 2234 berichten
    Laatst bezocht 29 okt 2012 02:21

Geplaatst op 25 oktober 2008 - 20:29

Dat hangt er vanaf: meestal is het een array van strings of integers. Anders post eens die declaratie.

#11 viezueelbeeziec

viezueelbeeziec

    Starting Developer

  • Leden
  • 12 berichten
    Laatst bezocht 02 feb 2009 20:47

Geplaatst op 25 oktober 2008 - 20:35

Hier is de volledige code
Visual Basic Code:
[code] 
Imports System
Imports System.Diagnostics
Public Class Form1

#Region "Declare DLL Subs "

	'IO CONFIGURATION PROCEDURES
	Private Declare Sub ConfigAllIOasInput Lib "k8d.dll" ()
	Private Declare Sub ConfigAllIOasOutput Lib "k8d.dll" ()
	Private Declare Sub ConfigIOchipAsInput Lib "k8d.dll" (ByVal Chip_no As Integer)
	Private Declare Sub ConfigIOchipAsOutput Lib "k8d.dll" (ByVal Chip_no As Integer)
	Private Declare Sub ConfigIOchannelAsInput Lib "k8d.dll" (ByVal Channel_no As Integer)
	Private Declare Sub ConfigIOchannelAsOutput Lib "k8d.dll" (ByVal Channel_no As Integer)

	'OUTPUT PROCEDURES
	Private Declare Sub IOoutput Lib "k8d.dll" (ByVal Chip_no As Integer, ByVal Data As Integer)
	Private Declare Sub UpdateAllIO Lib "k8d.dll" ()
	Private Declare Sub ClearAllIO Lib "k8d.dll" ()
	Private Declare Sub SetAllIO Lib "k8d.dll" ()
	Private Declare Sub UpdateIOchip Lib "k8d.dll" (ByVal Chip_no As Integer)
	Private Declare Sub ClearIOchip Lib "k8d.dll" (ByVal Chip_no As Integer)
	Private Declare Sub SetIOchip Lib "k8d.dll" (ByVal Chip_no As Integer)
	Private Declare Sub SetIOchannel Lib "k8d.dll" (ByVal Channel_no As Integer)
	Private Declare Sub ClearIOchannel Lib "k8d.dll" (ByVal Channel_no As Integer)

	'INPUT FUNCTIONS AND PROCEDURES
	Private Declare Function ReadIOchip Lib "k8d.dll" (ByVal Chip_no As Integer) As Integer
	Private Declare Function ReadIOchannel Lib "k8d.dll" (ByVal Channel_no As Integer) As Boolean
	Private Declare Sub ReadIOconficArray Lib "k8d.dll" (ByRef Array_Pointer As Integer)
	Private Declare Sub ReadIOdataArray Lib "k8d.dll" (ByRef Array_Pointer As Integer)
	Private Declare Sub ReadDACarray Lib "k8d.dll" (ByRef Array_Pointer As Integer)
	Private Declare Sub ReadDAarray Lib "k8d.dll" (ByRef Array_Pointer As Integer)
	'How to use these calls:
	' ReadIOconficArray IOconfig(0)
	' ReadIOdataArray IOdata(0)
	' ReadDACarray DAC(1)
	' ReadDAarray DA(1)

	'6 BIT DAC CONVERTER PROCEDURES
	Private Declare Sub OutputDACchannel Lib "k8d.dll" (ByVal Channel_no As Integer, ByVal Data As Integer)
	Private Declare Sub ClearDACchannel Lib "k8d.dll" (ByVal Channel_no As Integer)
	Private Declare Sub SetDACchannel Lib "k8d.dll" (ByVal Channel_no As Integer)
	Private Declare Sub ClearDACchip Lib "k8d.dll" (ByVal Chip_no As Integer)
	Private Declare Sub SetDACchip Lib "k8d.dll" (ByVal Chip_no As Integer)
	Private Declare Sub ClearAllDAC Lib "k8d.dll" ()
	Private Declare Sub SetAllDAC Lib "k8d.dll" ()

	'8 BIT DA CONVERTER PROCEDURES
	Private Declare Sub OutputDAchannel Lib "k8d.dll" (ByVal Channel_no As Integer, ByVal Data As Integer)
	Private Declare Sub ClearDAchannel Lib "k8d.dll" (ByVal Channel_no As Integer)
	Private Declare Sub SetDAchannel Lib "k8d.dll" (ByVal Channel_no As Integer)
	Private Declare Sub ClearAllDA Lib "k8d.dll" ()
	Private Declare Sub SetAllDA Lib "k8d.dll" ()

	'8 BIT AD CONVERTER FUNCTION
	Private Declare Function ReadADchannel Lib "k8d.dll" (ByVal Channel_no As Integer) As Integer

	'GENERAL PROCEDURES
	Private Declare Sub SelectI2CprinterPort Lib "k8d.dll" (ByVal port As Integer)
	Private Declare Sub Start_K8000 Lib "k8d.dll" ()
	Private Declare Sub Stop_K8000 Lib "k8d.dll" ()

	'COMMON USED GLOBALS
	Const MaxIOcard As Integer = 3
	Const MaxIOchip As Integer = 7
	Const MaxDACchannel As Integer = 32
	Const MaxDAchannel As Integer = 4

	'Declare variables
	Dim IOconfig(MaxIOchip) As Integer
	Dim IOdata(MaxIOchip) As Integer
	Dim DAC(MaxDACchannel) As Integer
	Dim DA(MaxDAchannel) As Integer

#End Region

	Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs)
		Start_K8000()
		SelectI2CprinterPort(1)
		ConfigAllIOasOutput()
		ClearAllIO()
		ClearAllDAC()
		ClearAllDA()
	End Sub

	Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
		Stop_K8000()
		ClearAllIO()
	End Sub

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

	End Sub

	Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
		ClearIOchannel(1)
		ClearIOchannel(2)

	End Sub

End Class



#12 viezueelbeeziec

viezueelbeeziec

    Starting Developer

  • Leden
  • 12 berichten
    Laatst bezocht 02 feb 2009 20:47

Geplaatst op 27 oktober 2008 - 20:16

Hallo,

Op het velleman forum kreeg ik volgend antwoord.

1)You may first try to put the K8E.exe and K8D.dll to the bin subfolder of your VB2005 project.

2)You may also download my VB2005 project from: http://vel255.diinow...8000_VB2005.zip

3)The code starts K8000, selects LPT port and generates all the indexed controls first.
This is done because the array of controls is missing from the VB2005.

Puntje 1) Deed ik en mijn applicatie laat nog steeds de K8000 niet starten.
Puntje 2) Het gedownloade project werkt
Puntje 3) Is mij niet direct duidelijk.

De code bestaat uit gewoon dezelfde declaraties, en dan Region "Windows Form Designer generated code" en de gewone subs buttons, checkBoxen, form Load, enz.
Wat er nu precies in slaagt om de K8D.dll te laden, begrijp ik niet, maar dat zal wel aan mij liggen :?

Blijkbaar kan je niet gewoon met vb2005 de kaart aanspreken, maar is vb.net nodig (vanwaar komt die Region "Windows Form Designer generated code" anders vandaan?

Grtn

#13 Yannou

Yannou

    VBIB Godfather

  • Leden
  • PipPipPipPipPipPipPipPip
  • 2465 berichten
    Laatst bezocht 24 apr 2020 19:41
  • Locatiehttp://www.fablab-brussels.be

Geplaatst op 27 oktober 2008 - 20:44

"Windows Form Designer Generated Code" is VB.NET code die aangemaakt wordt door Visual Studio als je in de designer je form bouwt. Bijvoorbeeld, als je in de designer een Button naar je form sleept, dan voegt Visual Studio volgende code toe aan die region:
Visual Basic Code:
Friend Button1 As New Button
Button1.Name = "Button1"
Button1.Size = New Size(75, 23)
Button1.Location = New Point(10, 10)
Me.Controls.Add(Button1)

De beste raad die ik je kan geven is dat werkend demo project eens helemaal te ontleden. De code ziet er vrij eenvoudig uit (op de declaraties na) dus best is om daarmee verder te werken, dus geleidelijk aan de werkende code om te vormen tot waar je naartoe wilt.

Groetjes

#14 viezueelbeeziec

viezueelbeeziec

    Starting Developer

  • Leden
  • 12 berichten
    Laatst bezocht 02 feb 2009 20:47

Geplaatst op 27 oktober 2008 - 21:23

Yannou,

Misschien heb je de code reeds bekeken, maar wat ik niet begrijp is dat in de Form1.vb design view ik slechts een paar buttons heb, en als ik de applicatie run-debug, dan verschijnt een form met 16 checkboxen + 16 trackbarss + 32 radiobuttons . + 2 buttons
Weer begrijp ik niet hoe dit mogelijk is.
Waarom staan deze niet in de code en zijn deze niet te zien in de design view?


Grtn

#15 Yannou

Yannou

    VBIB Godfather

  • Leden
  • PipPipPipPipPipPipPipPip
  • 2465 berichten
    Laatst bezocht 24 apr 2020 19:41
  • Locatiehttp://www.fablab-brussels.be

Geplaatst op 27 oktober 2008 - 21:34

In de Form1_Load Sub (Mybase.Load) vind je 3 For Loops die deze controls at runtime aanmaken en toevoegen aan de form :?

Groetjes

#16 viezueelbeeziec

viezueelbeeziec

    Starting Developer

  • Leden
  • 12 berichten
    Laatst bezocht 02 feb 2009 20:47

Geplaatst op 27 oktober 2008 - 21:41

OK.
Dat is het.
Ongelooflijk bedankt.
Nu kan ik beginnen. :?





Ook met taq Velleman, K8000, VB2005 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


Untitled 1

Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)