Springen naar inhoud


- - - - -

eigen basic

basic VB

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

#1 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 14 februari 2011 - 14:49

Ik heb betrekkelijk veel zelfbouw electronica aan de computer hangen....

Nu heb ik een systeem waar bij aan de computer diverse kaarten hangen, elk met een eigen adres, ik kan dus 254 kaarten aanspreken.

Dan kan ik een byte naar zo'n kaart toe sturen, of een byte van zo'n kaart lezen..

en dan heb ik als kaarten: 8 input, 8 output, ADC (8 bits breed), en een Dac (8 bits breed) , en een kaart waarmee ik 8 RC servo kan besturen...

oke dit even als informatie....

Nu wil ik eigenlijk in visual basic 2010 een soort besturings systeem voor deze hardware ontwikkelen.....

beetje PLC achtig.... het liefst helemaal vrij te configureren en te programmeren...

en eigenlijk lijkt me leuk als je ergens iets kon kiezen als "kaart configuratie "... en dat daar een lijn getekend staat, waar je op kan klicken, en dan een nieuw kaartje aan de bus kan hangen... adres nummer in kan geven... kiezen uit het soort kaart.... enz enz enz....

en helemaal mooi lijkt me dat de hardware aangestuurd kan worden via soort eigen basic....

is dit te doen in visualbaisc?

of een soort grafische taal  beetje Ladder of functie blokken achtig?

dus iets van een blokje wat een AND poort voorsteld,  en een blokje dat een OR poort is....  en dat je die via lijntjes aan elkaar kan knopen?

iemand wel eens zo iets gemaakt?
is dit te doen in visual basic

enig idee hoe en waar ik starten moet? is er ergens informatie te vinden....

#2 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 16 februari 2011 - 11:50

niemand.... veel bekeken, maar geen antwoorden... jammer?

#3 RedThread

RedThread

    Beheerder VBIB

  • Beheerder
  • 3598 berichten
    Laatst bezocht 25 jul 2019 15:42
  • LocatieTongeren,Belgium.
Inzender

Geplaatst op 16 februari 2011 - 12:09

Ik denk niet dat er heel veel forumleden zijn die de link electronica - .net maken en daarom dat er weinig tot geen reacties op komen.

Om een eigen besturingssysteem te maken in combinatie met hardware.. een zeer grote challenge zou ik zeggen.
Ik zal het www eens afschuimen in de hoop je verder te helpen maar ik vrees voor enig resultaat..

Greetzz
RedThread

#4 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 16 februari 2011 - 12:39

Ja..

Oke   maar een eigen Basic, dus is eigenlijk een eigen script taal...

Dus ik denk dat ik eerst commando's moet verzinnen..  bijvoorbeeld voor een output, het commando OUTPUT(kaartadress,kanaal)...
en een GOTO label zo wel makkelijk zijn...  en iets van for_next    enz enz...

dit in een ascii file opslaan?  

Dat inlezen in Visualbasic,    en als je RUN geeft, dit realtime vertalen en uitvoeren?  zou dat iets zijn???

misschien  met regelnummers ervoor net als basic vroeger?  zodat ik precies weet waar een nieuwe regel begint?

#5 Vozzie

Vozzie

    Moderator

  • Leden
  • PipPipPipPipPipPipPip
  • 1855 berichten
    Laatst bezocht 12 jul 2017 13:15
Inzender

Geplaatst op 16 februari 2011 - 13:54

Hallo,

Om van een flowchart code te maken zou ik je kunnen helpen,... (grafisch gedeelte heb ik niet maar omzetting eventueel wel). Dus als dat je kan helpen laat het weten,... (omzetting op min of meer 2 manieren en zeker 1 eenvoudig te automatiseren...)

Heb ooit een basis elektronica gehad en weet nog min of meer wat and/or poorten en schakelingen zijn maar dat is te lang geleden, jammer genoeg... ;)

Groeten

#6 Vozzie

Vozzie

    Moderator

  • Leden
  • PipPipPipPipPipPipPip
  • 1855 berichten
    Laatst bezocht 12 jul 2017 13:15
Inzender

Geplaatst op 16 februari 2011 - 14:16

Swets zei:

Ja..

Oke   maar een eigen Basic, dus is eigenlijk een eigen script taal...

Dus ik denk dat ik eerst commando's moet verzinnen..  bijvoorbeeld voor een output, het commando OUTPUT(kaartadress,kanaal)...
en een GOTO label zo wel makkelijk zijn...  en iets van for_next    enz enz...

dit in een ascii file opslaan?  

Dat inlezen in Visualbasic,    en als je RUN geeft, dit realtime vertalen en uitvoeren?  zou dat iets zijn???

misschien  met regelnummers ervoor net als basic vroeger?  zodat ik precies weet waar een nieuwe regel begint?

- Hiervoor kan je de Script control eventueel gebruiken, ... (her wel problemen ervaren op 64 bit... )
- Third party library
- Ik geloof met classes in de System.Reflection kan je "at runtime" code genereren ook,
- Script uitvoeren door process te starten,...
- ...?

der is hier ergens een post waar dit over gaat en nog andere .Net libraries gebruikt worden voor jscript,...

het één is wat moeilijker dan het ander

Groeten

#7 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 16 februari 2011 - 23:32

ja alles waar ik eventueel iets aan zou hebben is welkom....

#8 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 16 februari 2011 - 23:35

bestaat trouwens MDI  en CHILD forms nog in Visual basic 2010?

want ik denk wel dat het leuk/mooi is als de script taal straks in een ander venstertje draait...
en misschien nog iets van een Debug schermpje,   en een config schermpje...  

maar dan moet het nog wel bestaan....

#9 pascalbianca

pascalbianca

    Webmaster/Admin

  • Webmaster
  • 4382 berichten
    Laatst bezocht 28 mei 2019 18:00
  • LocatieSusteren, Nederland, Midden Limburg.
Inzender

Geplaatst op 17 februari 2011 - 08:59

Natuurlijk bestaan die nog ;)

#10 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 17 februari 2011 - 13:58

dan ga ik nog eens zoeken in dat Visual basic 2010 pakket....   want kon het zo snel niet vinden....

#11 josk79

josk79

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 614 berichten
    Laatst bezocht 16 aug 2018 17:25

Geplaatst op 18 februari 2011 - 17:47

Je kunt het natuurlijk zo gek maken als je wilt, maar een assembler-achtige taal is het eenvoudigst te maken (om mee te beginnen!).

Begin met bedenken hoe je geheugen wilt gebruiken. Bijv: Je programma heeft 10000 bytes geheugen en je noemt ze %MB0 t/m %MB9999.
Je kunt een byte bijvoorbeeld weer onderverdelen in bits (%MB0.0 t/m %MB0.7).
En bepaalde geheugengebieden kun je koppelen aan I/O. (Bijv: %MB0.0 t/m %MB0.7 zijn output kaartje 1).

De taal zou er bijv. zo uit kunnen zien:

Code:
'Variabelen definieeren
DEF var1, %MB0		'var1 verwijst naar byte 0 (8 bits)
DEF var2, %MW2		'var2 verwijst naar woord 0 (16 bits)

'Voorbeeldprogrammaatje
MOV var1, 0		   'Zet waarde var1 (dus: %MB0) op 0
MOV var2, 1		   'Zet waarde var2 op 1 (dus: %MW2)
:0					'Label waar we naartoe kunnen jumpen
ADD var1, 1		   'Tel 1 op bij var1
ADD var2, var2		'Tel var2 op bij var2 (oftewel: verdubbelen)
CMP var1, 10		  'Vergelijk var1 met 10
JBE :0				'Spring naar :0 als var1 <= 10 (below or equal)

'Programma is klaar
END



Mooier zou zijn:

Code:
DEF var1 = %MB0
DEF var2 = %MW2
FOR var1 = 0 TO 10
  var2 += var2
NEXT var1
END


Maar het is veel moeilijker om een interpreter voor deze code te schrijven. Ik zou niet te ingewikkeld beginnen als ik jou was.

Vragen? Hoor het graag, want vind dit een leuk onderwerp.

#12 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 25 maart 2011 - 00:18

Vragen.... tja....   lol  ik weet niet waar ik beginnen moet....

Ik heb wel nu een luek stuk elektronica, welke via USB aam de computer hangt....

tis een print, met een USB connector (ja echt), en een 34 polige lintkabel connector... (zie links onderaan)

Op deze 34polige kabel kunnen connectors worden gemaakt, waarop we diverse kaarten kunnen bevestigen....

Elke kaart krijgt een nummer , dus in theorie zouden er 255 printen aan de BUS gehangen kunnen worden....

Er zijn verschillende soorten kaarten.....  
- 8 inputs
- 8 outputs (normaal)
- 8 outpouts (bi)
- ADC8 + 6 outputs (analoog -> digitaal converter 8bits)
- DDAC8 -  2 8 bits analoge outputs
- adc12  12 bits analoge input
- dac12  12 bits analoge
- 16 kanaals multiplexer

en (bijna klaar) een kaart waarmee je 8 (modelbouw) servo's kan besturen...

... oke dat zijn de kaarten....

zat als eerste te denken  aan een soort configuratie pagina...
waarop de "bus" getekend is, en als je daar op klik, kan je via een menuutje (ofzo) met add en delete en move  zeg maar wat  kaarten toevoegen,verwijderen, veranderen?

tja... ik zeg zo maar iets... hoor... zit eigelijk hardop te dromen....
dacht ook aan zo scherm welke verdeeld is in meerdere vakken (die je ook zo groter en kleiner kan maken, en verschuiven enzo)
met aan de linkerkant bijvoorbeeld zo;n Project navigator... zo'n boom, met allemaal incoontjes... met configratie, programma...

tja.. ik heb eigenlijk geen idee...lol :D




(het is eigenlijk het oude uniface verhaal van PTCC
http://www.arjan-swe..._uniface_N.html
http://www.arjan-swe...ce/uniface1.pdf
http://www.arjan-swe...ce/uniface2.pdf
t/m
http://www.arjan-swe...e/uniface39.pdf

http://www.arjan-swe...unifaceboek.pdf

voor als je je verveel in het weekend)

#13 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 28 april 2011 - 23:21

Ik heb de electronica af.... en ik kan nu via USB praten met mij electronica-BUS...

Het test programmaatje komt van deze pagina:
http://www.oshonsoft...usbsupport.html

Het is een visual basic 6 programma.... maar ik wilde het eigenlijk gaan schrijven in VB 2010 (want anders blijf ik voor eeuwig in VB6.0 hangen)

het programmaatje wat ik nu heb is :
Visual Basic Code:
[code=visualbasic]
Option Explicit

Private Declare Function HID_Detected Lib "hidterm.dll" () As Long
Private Declare Function HID_VendorID Lib "hidterm.dll" () As Long
Private Declare Function HID_ProductID Lib "hidterm.dll" () As Long
Private Declare Function HID_ManufacturerString Lib "hidterm.dll" () As Long
Private Declare Function HID_ProductString Lib "hidterm.dll" () As Long
Private Declare Function HID_SerialNumberString Lib "hidterm.dll" () As Long
Private Declare Function HID_VersionNumber Lib "hidterm.dll" () As Long
Private Declare Function HID_InputReportLength Lib "hidterm.dll" () As Long
Private Declare Function HID_OutputReportLength Lib "hidterm.dll" () As Long
Private Declare Function HID_FeatureReportLength Lib "hidterm.dll" () As Long
Private Declare Function Set_HID_VendorID Lib "hidterm.dll" (ByVal newvalue As Long) As Long
Private Declare Function Set_HID_ProductID Lib "hidterm.dll" (ByVal newvalue As Long) As Long
Private Declare Function HIDConnect Lib "hidterm.dll" () As Long
Private Declare Function HIDSendReport Lib "hidterm.dll" (ByVal byte0 As Byte, ByVal byte1 As Byte, ByVal byte2 As Byte, ByVal byte3 As Byte, ByVal byte4 As Byte, ByVal byte5 As Byte, ByVal byte6 As Byte, ByVal byte7 As Byte) As Long
Private Declare Function HIDReadReport Lib "hidterm.dll" (ByRef byte0 As Byte, ByRef byte1 As Byte, ByRef byte2 As Byte, ByRef byte3 As Byte, ByRef byte4 As Byte, ByRef byte5 As Byte, ByRef byte6 As Byte, ByRef byte7 As Byte) As Long
Private Declare Function HIDSendFeature Lib "hidterm.dll" (ByVal byte0 As Byte, ByVal byte1 As Byte, ByVal byte2 As Byte, ByVal byte3 As Byte, ByVal byte4 As Byte, ByVal byte5 As Byte, ByVal byte6 As Byte, ByVal byte7 As Byte) As Long
Private Declare Function HIDReadFeature Lib "hidterm.dll" (ByRef byte0 As Byte, ByRef byte1 As Byte, ByRef byte2 As Byte, ByRef byte3 As Byte, ByRef byte4 As Byte, ByRef byte5 As Byte, ByRef byte6 As Byte, ByRef byte7 As Byte) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function lstrlenA Lib "kernel32" (ByVal lpString As Long) As Long

Private Function getstringfrompointer(ByVal stringpointer As Long) As String
Dim stringtemp As String
Dim stringlen As Long
If stringpointer <= 0 Then Exit Function
stringlen = lstrlenA(stringpointer)
If stringlen <= 0 Then Exit Function
stringtemp = Space(stringlen)
CopyMemory ByVal stringtemp, ByVal stringpointer, stringlen
getstringfrompointer = stringtemp
End Function

Private Sub Command1_Click()
If HID_Detected = 1 Then Exit Sub
Set_HID_VendorID dec4(Text1)
Set_HID_ProductID dec4(Text2)
If HID_VendorID < 0 Or HID_VendorID > 65535 Or HID_ProductID < 0 Or HID_VendorID > 65535 Then Exit Sub
HIDConnect
If HID_Detected = 0 Then
	printline "HID (VendorID:" + hex4(HID_VendorID) + ";ProductID:" + hex4(HID_ProductID) + ") not detected or could not be accessed..."
	printline ""
Else
	printline "HID detected!"
	printline "VendorID: " + hex4(HID_VendorID)
	printline "ProductID: " + hex4(HID_ProductID)
	printline "ManufacturerString: " + getstringfrompointer(HID_ManufacturerString)
	printline "ProductString: " + getstringfrompointer(HID_ProductString)
	printline "SerialNumberString: " + getstringfrompointer(HID_SerialNumberString)
	printline "VersionNumber: " + hex4(HID_VersionNumber)
	printline "InputReportLength: " + Trim(Str(HID_InputReportLength))
	printline "OutputReportLength: " + Trim(Str(HID_OutputReportLength))
	printline "FeatureReportLength: " + Trim(Str(HID_FeatureReportLength))
	printline ""
End If
End Sub

Private Sub Command2_Click()
Dim data(7) As Byte
If HID_Detected = 0 Then Exit Sub
Randomize
data(0) = Int(Val(Text3.Text))

HIDSendReport data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7)
printline "Output Report sent...(data)"
printline hex2(data(0)) + " " + hex2(data(1)) + " " + hex2(data(2)) + " " + hex2(data(3)) + " " + hex2(data(4)) + " " + hex2(data(5)) + " " + hex2(data(6)) + " " + hex2(data(7))
End Sub

Private Sub Command3_Click()
Dim data(7) As Byte
If HID_Detected = 0 Then Exit Sub
HIDReadReport data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7)
printline "Input Report received..."
printline hex2(data(0)) + " " + hex2(data(1)) + " " + hex2(data(2)) + " " + hex2(data(3)) + " " + hex2(data(4)) + " " + hex2(data(5)) + " " + hex2(data(6)) + " " + hex2(data(7))
End Sub

Private Sub Command4_Click()
Dim data(7) As Byte
If HID_Detected = 0 Then Exit Sub
Randomize
data(0) = Int(Val(Text4.Text))
HIDSendFeature data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7)
printline "Feature Report sent... (adress)"
printline hex2(data(0)) + " " + hex2(data(1)) + " " + hex2(data(2)) + " " + hex2(data(3)) + " " + hex2(data(4)) + " " + hex2(data(5)) + " " + hex2(data(6)) + " " + hex2(data(7))
End Sub

Private Sub Command5_Click()
Dim data(7) As Byte
If HID_Detected = 0 Then Exit Sub
HIDReadFeature data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7)
printline "Feature Report received...(status)"
printline hex2(data(0)) + " " + hex2(data(1)) + " " + hex2(data(2)) + " " + hex2(data(3)) + " " + hex2(data(4)) + " " + hex2(data(5)) + " " + hex2(data(6)) + " " + hex2(data(7))
End Sub

Private Sub Command6_Click()
Dim data(7) As Byte
If HID_Detected = 0 Then Exit Sub
Text4.Text = Text4.Text + 1

data(0) = Int(Val(Text4.Text))
HIDSendFeature data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7)
printline "Feature Report sent... (adress+1)"
printline hex2(data(0)) + " " + hex2(data(1)) + " " + hex2(data(2)) + " " + hex2(data(3)) + " " + hex2(data(4)) + " " + hex2(data(5)) + " " + hex2(data(6)) + " " + hex2(data(7))

End Sub

Private Sub Command7_Click()
Dim data(7) As Byte
If HID_Detected = 0 Then Exit Sub
Text4.Text = Text4.Text - 1

data(0) = Int(Val(Text4.Text))
HIDSendFeature data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7)
printline "Feature Report sent... (adress-1)"
printline hex2(data(0)) + " " + hex2(data(1)) + " " + hex2(data(2)) + " " + hex2(data(3)) + " " + hex2(data(4)) + " " + hex2(data(5)) + " " + hex2(data(6)) + " " + hex2(data(7))

End Sub

Private Sub Form_Load()
'
Text3.Text = 0
Text4.Text = 0
End Sub

Private Sub printline(ByVal inputline As String)
board.Text = board.Text + inputline + vbCrLf
board.SelStart = 1000000
End Sub

Private Function hex2(ByVal decnum As Long) As String
hex2 = Right("0" + Hex(decnum), 2)
End Function

Private Function hex4(ByVal decnum As Long) As String
hex4 = Right("000" + Hex(decnum), 4)
End Function

Private Function dec2(ByVal hexstring As String) As Long
Dim i As Long
Dim flag As Boolean
If Len(hexstring) <> 2 Then
	dec2 = -1
	Exit Function
End If
For i = 0 To 255
	If hex2(i) = hexstring Then
		flag = True
		Exit For
	End If
Next i
If flag = False Then
	dec2 = -1
Else
	dec2 = i
End If
End Function

Private Function dec4(ByVal hexstring As String) As Long
Dim d1 As Long
Dim d2 As Long
If Len(hexstring) <> 4 Then
	dec4 = -1
	Exit Function
End If
d1 = dec2(Left(hexstring, 2))
d2 = dec2(Right(hexstring, 2))
If d1 > -1 And d2 > -1 Then
	dec4 = d1 * 256 + d2
Else
	dec4 = -1
End If
End Function



is dit makkelijk om te zetten naar visual basic 2010?

#14 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 29 april 2011 - 00:17

ik had net VB2008 geinstalleerd, omdat ik wist dat die VB6 projecten kan importeren....

maar ook dat gaat fout....   kan de DLL niet vinden?  morgen eens verder zoeken...

ik heb 2 veries vanhet VB6 programma.... eentje met een OCX en eentje met een DLL

welke kan ik nu het beste proberen?

#15 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 29 april 2011 - 23:02

Ik heb geprobeerd het VB6 verhaal om te zetten naar VB2008....  maar het gaat fout in deze regel:

Visual Basic Code:
Private Declare Sub CopyMemory Lib "kernel32"  Alias "RtlMoveMemory"(ByRef Destination As Any, ByRef Source As Any, ByVal Length As Integer)


'As Any'is not supported in 'Declare' statement.

wat moet ik dan maken van dat any ?
ik heb er integer van gemaakt... en dan kan ik het programma starten....

maar als ik contakt wil maken met me electronica krijg ik de volgende fout:
Kan DLL hidterm.dll niet laden: Kan opgegeven module niet vinden. (Uitzondering van HRESULT: 0x8007007E)

ooke raar... ?  moet ik die Dll tovoegen ofzo?

#16 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 03 mei 2011 - 19:47

niemand....  jammer.... of is een dll voor VB6 niet te gebruiken in VB2010?

#17 josk79

josk79

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 614 berichten
    Laatst bezocht 16 aug 2018 17:25

Geplaatst op 03 mei 2011 - 19:57

Ik weet het niet zeker hoor, maar probeer eens As Object.

#18 Vozzie

Vozzie

    Moderator

  • Leden
  • PipPipPipPipPipPipPip
  • 1855 berichten
    Laatst bezocht 12 jul 2017 13:15
Inzender

Geplaatst op 03 mei 2011 - 23:13

Hallo,

Je gebruikt de VB6 declaratie in .Net daarom werkt het niet,...

  • Je kan attributes gebruiken om een "Object" naar "AsAny" te "casten".
    Zie Attribute: System.Runtime.InteropServices.MarshalAs
  • Je kan de AsAny parameters declareren als IntPtr, Integer(pointer) of ik geloof een byte array ook
  • Deze functie "CopyMemory" bestaat in de System.Runtime.Interopservices.Marshal class
    namelijk: System.Runtime.Interopservices.Marshal.Copy()

Groeten

#19 Vozzie

Vozzie

    Moderator

  • Leden
  • PipPipPipPipPipPipPip
  • 1855 berichten
    Laatst bezocht 12 jul 2017 13:15
Inzender

Geplaatst op 03 mei 2011 - 23:22

Hallo,

Heb deze declaraties eens vlug aangepast, maar ik denk dat je omwille van x64 compatible te werken bij lstrlenA best met IntPtr werkt,... maar daar je hidterm.dll waarschijnlijk 32bit is moet je je programma markeren als 32 bit en niet standaard cpu onafhankelijk laten,...

dus het is nog niet perfect vrees ik...

Visual Basic Code:
	Private Declare Function HID_Detected Lib "hidterm.dll" () As Integer
	Private Declare Function HID_VendorID Lib "hidterm.dll" () As Integer
	Private Declare Function HID_ProductID Lib "hidterm.dll" () As Integer
	Private Declare Function HID_ManufacturerString Lib "hidterm.dll" () As Integer
	Private Declare Function HID_ProductString Lib "hidterm.dll" () As Integer
	Private Declare Function HID_SerialNumberString Lib "hidterm.dll" () As Integer
	Private Declare Function HID_VersionNumber Lib "hidterm.dll" () As Integer
	Private Declare Function HID_InputReportLength Lib "hidterm.dll" () As Integer
	Private Declare Function HID_OutputReportLength Lib "hidterm.dll" () As Integer
	Private Declare Function HID_FeatureReportLength Lib "hidterm.dll" () As Integer
	Private Declare Function Set_HID_VendorID Lib "hidterm.dll" (ByVal newvalue As Integer) As Integer
	Private Declare Function Set_HID_ProductID Lib "hidterm.dll" (ByVal newvalue As Integer) As Integer
	Private Declare Function HIDConnect Lib "hidterm.dll" () As Integer
	Private Declare Function HIDSendReport Lib "hidterm.dll" (ByVal byte0 As Byte, ByVal byte1 As Byte, ByVal byte2 As Byte, ByVal byte3 As Byte, ByVal byte4 As Byte, ByVal byte5 As Byte, ByVal byte6 As Byte, ByVal byte7 As Byte) As Integer
	Private Declare Function HIDReadReport Lib "hidterm.dll" (ByRef byte0 As Byte, ByRef byte1 As Byte, ByRef byte2 As Byte, ByRef byte3 As Byte, ByRef byte4 As Byte, ByRef byte5 As Byte, ByRef byte6 As Byte, ByRef byte7 As Byte) As Integer
	Private Declare Function HIDSendFeature Lib "hidterm.dll" (ByVal byte0 As Byte, ByVal byte1 As Byte, ByVal byte2 As Byte, ByVal byte3 As Byte, ByVal byte4 As Byte, ByVal byte5 As Byte, ByVal byte6 As Byte, ByVal byte7 As Byte) As Integer
	Private Declare Function HIDReadFeature Lib "hidterm.dll" (ByRef byte0 As Byte, ByRef byte1 As Byte, ByRef byte2 As Byte, ByRef byte3 As Byte, ByRef byte4 As Byte, ByRef byte5 As Byte, ByRef byte6 As Byte, ByRef byte7 As Byte) As Integer

	'Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Any, ByVal Source As Any, ByVal Length As Integer)
	 <System.Runtime.InteropServices.DllImport("Kernel32.dll", EntryPoint:="RtlMoveMemory")> _
	Private Shared Sub CopyMemory( _
		ByVal Destination As IntPtr, _
		ByVal Source As IntPtr, _
		ByVal length As Integer
		)
	End Sub

	Private Declare Function lstrlenA Lib "kernel32" (ByVal lpString As Integer) As Integer


En hier wat voorbeeld code hoe je kan kopiëren van het een naar het ander,...


Visual Basic Code:
<System.Runtime.InteropServices.DllImport("Kernel32.dll", EntryPoint:="RtlMoveMemory")> _
	Private Shared Sub CopyMemory( _
		ByVal Destination As IntPtr, _
		ByVal Source As IntPtr, _
		ByVal length As Integer
		)
	End Sub

	Friend Shared Sub Main()
		' Hello world naar een byte array converteren
		Dim bString1() As Byte = System.Text.Encoding.ASCII.GetBytes("Hello world")
		' byte array bString2 van zelfde lengte als bString1 maken
		Dim bString2(bString1.Length - 1) As Byte
		' byte array bString1 door Array.CopyTo naar byte array bString2 copiëren
		bString1.CopyTo(bString2, 0)
		' byte array bString2 als string tonen
		MsgBox(System.Text.Encoding.ASCII.GetString(bString2))
		Try
			' 100 bytes memory reserveren
			Dim pString1 As IntPtr = Marshal.AllocHGlobal(100)
			Try
				' byte array bString2 door Marshal.Copy copiëren naar memory pointer pString1
				Marshal.Copy(bString2, 0, pString1, bString2.Length)
				' pointer pString1 als string tonen
				MsgBox(Marshal.PtrToStringAnsi(pString1, bString2.Length))
				' 100 bytes memory reserveren
				Dim pString2 As IntPtr = Marshal.AllocHGlobal(100)
				Try
					' pointer pString1 door copymemory copiëren naar pointer pString2 
					CopyMemory(pString2, pString1, 100)
					' pointer pString2 als string tonen
					MsgBox(Marshal.PtrToStringAnsi(pString2, bString2.Length))
					' pointer pString2 door Marshal.Copy copiëren naar byte array bString1
					Marshal.Copy(pString2, bString1, 0, bString2.Length)
					' byte array bString1 als string tonen
					MsgBox(System.Text.Encoding.ASCII.GetString(bString1))
				Finally
					Marshal.FreeHGlobal(pString2)
				End Try
			Finally
				Marshal.FreeHGlobal(pString1)
			End Try
		Catch ex As Exception
			MsgBox(ex.ToString(), MsgBoxStyle.Exclamation, "Shit went wrong,...")
		End Try
	End Sub



#20 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 07 mei 2011 - 23:23

Vozzie zei:

Hallo,

Je gebruikt de VB6 declaratie in .Net daarom werkt het niet,...

Groeten

Ik?dat doet VB2008...  die heb ik speciaal gedownload, en gebruikt om hem eerst aan 2008 over te zetten, en daarna dacht ik naar 2010 om te zetten.... maar wilde allemaal niet lukken.....


@Vossie:  en dat moet ik ik in dat bestaande project kopieren, watnu niet werk?

sorry hoor vossie... ik weet echt niet wat ik er mee moet....
jammer....

#21 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 07 mei 2011 - 23:40

josk79 zei:

Ik weet het niet zeker hoor, maar probeer eens As Object.

Kan DLL hidterm.dll niet laden: Kan opgegeven module niet vinden. (Uitzondering van HRESULT: 0x8007007E)

dat krijg ik... en dan heb ik deze regel gewijzigd:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Object, ByRef Source As Object, ByVal Length As Integer)

die 2x Object was 2x Any

#22 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 07 mei 2011 - 23:49

Ik heb die Met de OCX door VB2008 gehaald, en die doet het wel.....
althans in VB2008,  maar die kan ik weer niet in lezen VB2010...


Maar in VB2010 mag je toch eigenlijk OCX meer gebruiken...

wat een gedoe dat VB2010....   ik zal die gozer van dat VB6 programma eens vragen of hij geen VB2010 versie heeft

#23 Vozzie

Vozzie

    Moderator

  • Leden
  • PipPipPipPipPipPipPip
  • 1855 berichten
    Laatst bezocht 12 jul 2017 13:15
Inzender

Geplaatst op 08 mei 2011 - 00:49

Hallo,

Als je de HIDTerm.dll bij je exe plaatst moet het werken. Met deze code hoef je geen verwijzing te maken ofzo, gewoon zorgen dat je programma de dll kan vinden,...

(extra info: De plaatsen waar het programma zoekt heet "dll search order" en kan je vinden in de msdn. zie: http://msdn.microsof...s682586(v=vs.85).aspx )

CopyMemory heb je het nodig, de functie die gebruik maakt van copymemory kan vervangen worden door Marshal.PtrToStringAnsi of Marshal.PtrToStringUni. VervangVisual Basic Code:
Private Function getstringfrompointer(ByVal stringpointer As Long) As String
Dim stringtemp As String
Dim stringlen As Long
If stringpointer <= 0 Then Exit Function
stringlen = lstrlenA(stringpointer)
If stringlen <= 0 Then Exit Function
stringtemp = Space(stringlen)
CopyMemory ByVal stringtemp, ByVal stringpointer, stringlen
getstringfrompointer = stringtemp
End Function
DoorVisual Basic Code:
Private Function getstringfrompointer(ByVal stringpointer As Integer) As String
	Return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(New IntPtr(stringpointer))
End Function


(Je kan ook de getstringfrompointer weglaten en Marshal.PtrToStringAnsi rechtstreeks aanroepen daar waar nodig,... Je hoeft dan niet telkens die "System.Runtime.InteropServices" ervoor te tikken als je deze Namespace aka naamruimte importeerd. Dan zijn alle classes, dus ook Marshal, binnen die namespace gekend.)Visual Basic Code:
Imports System.Runtime.InteropServices

Groeten

#24 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 08 mei 2011 - 22:04

Oke, dat is gelukt,  ik heb dat stuk vervangen, en de DLL in de map geplaatst waar de project1.vshost.exe  in stond, en nu werkt het.....

maar heb ik toch nog een vraagje .... kan ik nu ook de hele zooi naar VB2010 kopieren?   of is er iets van een export functie... ofof?

edit:  Tis gelukt, ik heb nu dat visualbasic 6 verhaaltje in VB2010.....

ik ben blij... :)

#25 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 08 mei 2011 - 23:01

Oke, dus ik heb de koppeling tussen de PC en de Electronica  weer aan de gang ..  nu de rest....

ik weet ff niet hoe ik beginnen moet.....

Ik heb dus electronca printen (kunnen er max 255 worden) aan een adress en een databus hangen....

dus ik moet iets maken , wat die bus scaned, en de data naar/van de printen lees...  

kan ik dit het besten via een timer doen?  of een (sneller?) do while lus ofzo?

En nog iets... ik heb nu 8 soorten printen....  die ik aan die bus kan hangen.....   dus ik zat te denken aan iets van een array van 255 bytes lang.... die ik af schan... en in die array op de plek van het adres een getal zetten wat overeenkomt met een soort kaart... dus bijvoorbeeld een 1 voor een 8bits brede inputkaart.....

of weet ik veel.... weet eigenlijk dus eigenlijk niet hoe ik begin....

ik heb dockpanel verhaal maar even vergeten.... :)    misschien iemand ideeen om me een zetje in de goede richting te geven...

#26 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 09 mei 2011 - 00:06

ik had even iets gemaakt op een timer, die 255 adressen af scan.... maar dat is (nu ik 255 adress scan) een beetje langzaam...   dan wordt elke kaart 2 a 3 seconde een keer gescand....

is er iets om het sneller te maken?

en toen dacht ik ik maak een array van 255 bytes....    en dan ga ik alleen de adressen scannen waar een kaart aan hangt....  maar de array wil al niet lukken?
Ik heb  onder Class Form1  de Dim KaartAdress(255) as Byte  staan.....   en 1 regel daaronder KaartAdress(32)=1   maar er blijven van die blauwe golfjes onder KaartAdress staan, en als ik met me muis er op gaat staat zegt die: Declaration expected   ?  maar dat heb ik toch gedaan met die Dim?

begint al lekker... :)

#27 Jark

Jark

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 560 berichten
    Laatst bezocht 30 jul 2012 13:56

Geplaatst op 09 mei 2011 - 10:27

Hallo,

Heb je KaartAdress(32) = 1 wel in een Sub/Function gezet? Anders gaat dat natuurlijk niet werken.

Mvg,

Jark

#28 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 09 mei 2011 - 14:03

Jark zei:

Hallo,

Heb je KaartAdress(32) = 1 wel in een Sub/Function gezet? Anders gaat dat natuurlijk niet werken.

Mvg,

Jark

nee... althans , ben nu op me werk,maar ik denk het niet....
moet het bij form_load ofzo neer zetten...

stom zeg... (maar ut was al laat)

#29 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 09 mei 2011 - 22:31

Ja dat heeft geholpen....

nog een stomme vraag....

ik heb een sub routine wel gestart wordt door een timer....

in die subroutine heb ik een for-next lus van 0 tot 254....

nu de vraag, wordt deze lus nu elke tick van de timer door lopen?

trouwens moet je tijdens het schrijven van je programma in VB2101 , bij build , steeds build of rebuild kiezen?

pfff  ik weet niet wat ik fout doe.... maar gaat niet lekker...

ik heb bij form_load dit staan:

Visual Basic Code:
 For tel = 0 To 254
			Kaart_Adress(tel) = 0
		Next


		Kaart_Adress(32) = 1
		Kaart_Adress(124) = 2
		Kaart_Adress(125) = 2
		Kaart_Adress(126) = 2
		Kaart_Adress(127) = 2

		Kaart_Adress(190) = 3

		Kaart_Adress(111) = 4

		Kaart_Adress(223) = 5

		Kaart_Adress(236) = 6
		Kaart_Adress(237) = 6
		Kaart_Adress(238) = 6
		Kaart_Adress(239) = 6



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

		Dim data(7) As Byte
		Dim kaart_gezien As Byte


		kaart_gezien = 0
		If HID_Detected = 0 Then Exit Sub


		Do While scan_adress < 254
			If Kaart_Adress(scan_adress) <> 0 Then

				data(0) = Kaart_Adress(scan_adress)
				HIDSendFeature(data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7))
				' printline_Renamed("Feature Report sent... (adress+1)")
				'printline_Renamed(hex2(data(0)) & " " & hex2(data(1)) & " " & hex2(data(2)) & " " & hex2(data(3)) & " " & hex2(data(4)) & " " & hex2(data(5)) & " " & hex2(data(6)) & " " & hex2(data(7)))
			End If
		   
		Loop


	End Sub


maar met dit kan ik geen knop meer bedienen?  dus ik denk dat die dan in een lus hangt....

shit, ik vergeet te tellen in scan_adress..

maar toch een vraag...

ik heb op het formulier een button, waar deze code aan hangt...:

Visual Basic Code:
 Private Sub Command6_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command6.Click
		Dim data(7) As Byte
		If HID_Detected = 0 Then Exit Sub
		Text4.Text = CStr(CDbl(Text4.Text) + 1)

		data(0) = Int(Val(Text4.Text))
		HIDSendFeature(data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7))
		printline_Renamed("Feature Report sent... (adress+1)")
		printline_Renamed(hex2(data(0)) & " " & hex2(data(1)) & " " & hex2(data(2)) & " " & hex2(data(3)) & " " & hex2(data(4)) & " " & hex2(data(5)) & " " & hex2(data(6)) & " " & hex2(data(7)))

	End Sub

en dat werkt, en ik heb op elk kaartje dat ik op de bus heb aangesloten en gele led zitten als hij geadresseerd is.....

als ik bij 1 begin, en ik druk steeds op die knop, als ik dan bij 32 ben gaat er een kaart branden... bij 111, 124,125,126....  enz enz...

maar nu wil ik dat hij vanzelf die adressen langs scan....  ik heb nu dit... maar volgens mij werkt dat niet....
althans ik zie de ledjes op de kaarten niet snel knipperen (maar misschien gaat het te snel), maar ook de geadresserde kaart neem niet de data over wat op de databus staat...  dus volgens my werkt dit niet goed....

maar ik snap niet waarom....

ik heb het ook al met een for-next lus gedaan.... lukte ook niet...

nu heb ik dus dit...

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

		Dim data(7) As Byte
		Dim kaart_gezien As Byte


		kaart_gezien = 0
		If HID_Detected = 0 Then Exit Sub


		Do While scan_adress < 254
			If Kaart_Adress(scan_adress) <> 0 Then

				data(0) = Kaart_Adress(scan_adress)
				HIDSendFeature(data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7))
				' printline_Renamed("Feature Report sent... (adress+1)")
				'printline_Renamed(hex2(data(0)) & " " & hex2(data(1)) & " " & hex2(data(2)) & " " & hex2(data(3)) & " " & hex2(data(4)) & " " & hex2(data(5)) & " " & hex2(data(6)) & " " & hex2(data(7)))
			End If
			scan_adress = scan_adress + 1
			For tel = 1 To 255

			Next
		Loop

		scan_adress = 0
	End Sub

ik heb ook nog 8 leds op de adressbus , en das ook zo gek, ik zie alleen de eerste 3 leds maar knipperen....  

dus dat zou betekenen dat ik door 1 of andere rede geen adress groter dan 7 of 8 op de bus zet?

ik had een tellertje gezet na de "If Kaart_Adress(scan_adress) <> 0 Then"
en die teld wel tot 12,  dus hij heeft wel de 12 kaarten gezien die ik geadresserd heb bij form_load...

Help......

ik weet echt niet hoe ik het moet doen....
als ik aan een timer_tick het adres verhoog... dan gaat het veel te langzaam, zelfs als ik hem op 1 zet.....

maar zo als nu werkt het ook niet...

#30 Swets

Swets

    Professional Developer

  • Leden
  • PipPipPipPip
  • 367 berichten
    Laatst bezocht 22 feb 2018 16:36
  • LocatieKrimpen a/d IJssel

Geplaatst op 09 mei 2011 - 23:56

hmm  gevonden ... dom foutje....
Visual Basic Code:
 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

		Dim data(7) As Byte
		scan_adress = 0
		If HID_Detected = 0 Then Exit Sub
		Do While scan_adress < 254
			If Kaart_Adress(scan_adress) <> 0 Then

				data(0) = scan_adress
				HIDSendFeature(data(0), data(1), data(2), data(3), data(4), data(5), data(6), data(7))
				' printline_Renamed("Feature Report sent... (adress+1)")
				'printline_Renamed(hex2(data(0)) & " " & hex2(data(1)) & " " & hex2(data(2)) & " " & hex2(data(3)) & " " & hex2(data(4)) & " " & hex2(data(5)) & " " & hex2(data(6)) & " " & hex2(data(7)))
			End If
			scan_adress = scan_adress + 1
			TextBox1.Text = scan_adress

		Loop
	End Sub


data(0) moet natuurlijk het adres (van 0 tot 254)worden, en niet het getal wat ik in de Array gezet had (soort kaart)....
nu werkt het wel....  ik zie op al de kaarten de ledjes branden/ heel snel knipperen....

maar nog steeds , als ik hem alle adressen af laat scannen op timer_tick... dan duurt het iets van 0,5 sec dat een kaart gescand wordt...
maar dat komt niet door de timer? toch?  want in 1 tick worden de 255 adressen gescand....  

denk dat dat verzend via USB gewoon teveel tijd gebruikt om 255 getallen te verzenden.... dus dan maar alleen de kaarten die er aan hangen....  dat gaat goed op een timer_tick.





Ook met taq basic, VB 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)