VBA Beispiel
Moderator: Guido Körber
VBA Beispiel
Hallo Warior Gemeinde
ich habe meinen ersten IO-Warrier 24 mit der Steuerplatine von Onlinesteuerung erfolgreich zum laufen gebracht und suche nun für meine Anwendung ein prakatisches Beispiel in VBA, damit ich mein Problem lösen kann.
Das Ziel ist es, bei einem VBA-Ereignisses (Mail trifft ein) einen Ausgang ansteuern zu können. Dabei möchte ich die Anbindung möglichst solide machen und nicht über r.exe gehen. Die Sensoren will ich auch auslesen können.
Im Forum und auf der Seite habe ich noch nichts gefunden, welches ich unter MS-Access zum laufen gebracht habe.
Danke für eures hirnen und Antworten
Higa
ich habe meinen ersten IO-Warrier 24 mit der Steuerplatine von Onlinesteuerung erfolgreich zum laufen gebracht und suche nun für meine Anwendung ein prakatisches Beispiel in VBA, damit ich mein Problem lösen kann.
Das Ziel ist es, bei einem VBA-Ereignisses (Mail trifft ein) einen Ausgang ansteuern zu können. Dabei möchte ich die Anbindung möglichst solide machen und nicht über r.exe gehen. Die Sensoren will ich auch auslesen können.
Im Forum und auf der Seite habe ich noch nichts gefunden, welches ich unter MS-Access zum laufen gebracht habe.
Danke für eures hirnen und Antworten
Higa
-
- Posts: 389
- Joined: Sun Feb 13, 2005 1:22 pm
- Location: Gerblingerode / Duderstadt
- Contact:
Re: VBA Beispiel
@higa
Gruss Ralf
? ... bitte genauerDabei möchte ich die Anbindung möglichst solide machen und nicht über r.exe gehen
Gruss Ralf
Re: VBA Beispiel
Hallo Ralf
besten Dank der Nachfrage.
Es gibt unter http://onlinesteuerung.de/Software/ASE_Excel.zip ein Beispiel mit VBA. Dort wird aber unter VBA nur das Hilfsprogramm r.exe angesteuert. So verliert man viel Kontrolle über das Programm.
Ich suche ein einfaches Beispiel, wie man mit VBA direkten Zugriff hat und evtl auch die Verbindung selber überwachen kann und die Sensoren auslesen kann.
besten Dank der Nachfrage.
Es gibt unter http://onlinesteuerung.de/Software/ASE_Excel.zip ein Beispiel mit VBA. Dort wird aber unter VBA nur das Hilfsprogramm r.exe angesteuert. So verliert man viel Kontrolle über das Programm.
Ich suche ein einfaches Beispiel, wie man mit VBA direkten Zugriff hat und evtl auch die Verbindung selber überwachen kann und die Sensoren auslesen kann.
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: VBA Beispiel
Also ich hab da mal was ausgearbeitet. Die DLL MUSS sich im System32 Ordner (unter Windows 32 Bit) oder im SysWOW64 (unter Windows 64 Bit, der Ort für 32Bit DLLs) befinden.
Ich habe das ganze nur unter LibreOffice getestet und da gibt es so einige Probleme. Sobald auch nur ein Argument falsch ist oder die DLL nicht vorhanden oder ich das CloseDevice() aufrufe stürzt mein LibreOffice ab. Ich kann es leider nicht mit einem Microsoft Office testen, da ich das nicht besitze. Der Weg mit der r.exe ist warscheinlich der "gesündere" zwecks Absturzsicherheit.
Ich habe das ganze nur unter LibreOffice getestet und da gibt es so einige Probleme. Sobald auch nur ein Argument falsch ist oder die DLL nicht vorhanden oder ich das CloseDevice() aufrufe stürzt mein LibreOffice ab. Ich kann es leider nicht mit einem Microsoft Office testen, da ich das nicht besitze. Der Weg mit der r.exe ist warscheinlich der "gesündere" zwecks Absturzsicherheit.
Code: Select all
REM ***** BASIC *****
' Attribute VB_Name = "iow"
' Required kernel32 functions
Public Declare Function GetLastError _
Lib "kernel32" () _
As Long
' IOW SDK V1.5
' IO-Warrior vendor & product IDs
Public Const IOWKIT_VENDOR_ID As Long = &H7C0
Public Const IOWKIT_VID As Long = IOWKIT_VENDOR_ID
' IO-Warrior 40
Public Const IOWKIT_PRODUCT_ID_IOW40 As Long = &H1500
Public Const IOWKIT_PID_IOW40 As Long = IOWKIT_PRODUCT_ID_IOW40
' IO-Warrior 24
Public Const IOWKIT_PRODUCT_ID_IOW24 As Long = &H1501
Public Const IOWKIT_PID_IOW24 As Long = IOWKIT_PRODUCT_ID_IOW24
' IO-Warrior PowerVampire
Public Const IOWKIT_PRODUCT_ID_IOWPV1 As Long = &H1511
Public Const IOWKIT_PID_IOWPV1 As Long = IOWKIT_PRODUCT_ID_IOWPV1
Public Const IOWKIT_PRODUCT_ID_IOWPV2 As Long = &H1512
Public Const IOWKIT_PID_IOWPV2 As Long = IOWKIT_PRODUCT_ID_IOWPV2
' IO-Warrior 56
Public Const IOWKIT_PRODUCT_ID_IOW56 As Long = &H1503
Public Const IOWKIT_PID_IOW56 As Long = IOWKIT_PRODUCT_ID_IOW56
' Max number of pipes per IOW device
Public Const IOWKIT_MAX_PIPES As Long = 2
' pipe names
Public Const IOW_PIPE_IO_PINS As Long = 0
Public Const IOW_PIPE_SPECIAL_MODE As Long = 1
' Max number of IOW devices in system
Public Const IOWKIT_MAX_DEVICES As Long = 16
' IOW Legacy devices open modes
Public Const IOW_OPEN_SIMPLE As Long = 1
Public Const IOW_OPEN_COMPLEX As Long = 2
' first IO-Warrior revision with serial numbers
Public Const IOW_NON_LEGACY_REVISION = &H1010
' IO-Warrior low-level library API functions
Public Declare Function IowKitOpenDevice _
Lib "iowkit" () _
As Long
Public Declare Sub IowKitCloseDevice _
Lib "iowkit" _
(ByVal iowHandle As Long)
Public Declare Function IowKitWrite _
Lib "iowkit" _
(ByVal iowHandle As Long, _
ByVal numPipe As Long, _
ByRef buffer As Byte, _
ByVal length As Long _
) _
As Long
Public Declare Function IowKitRead _
Lib "iowkit" _
(ByVal iowHandle As Long, _
ByVal numPipe As Long, _
ByRef buffer As Byte, _
ByVal length As Long _
) _
As Long
Public Declare Function IowKitReadNonBlocking _
Lib "iowkit" _
(ByVal iowHandle As Long, _
ByVal numPipe As Long, _
ByRef buffer As Byte, _
ByVal length As Long _
) _
As Long
Public Declare Function IowKitReadImmediate _
Lib "iowkit" _
(ByVal iowHandle As Long, _
ByRef Value As Long) _
As Long
' Get number of IOW devices
Public Declare Function IowKitGetNumDevs _
Lib "iowkit" () _
As Long
' Get Nth IOW device handle
Public Declare Function IowKitGetDeviceHandle _
Lib "iowkit" _
(ByVal numDevice As Long) _
As Long
Public Declare Function IowKitSetLegacyOpenMode _
Lib "iowkit" _
(ByVal openMode As Long) _
As Long
Public Declare Function IowKitGetProductId _
Lib "iowkit" _
(ByVal iowHandle As Long) _
As Long
Public Declare Function IowKitGetRevision _
Lib "iowkit" _
(ByVal iowHandle As Long) _
As Long
Public Declare Function IowKitGetThreadHandle _
Lib "iowkit" _
(ByVal iowHandle As Long) _
As Long
Public Declare Function IowKitGetSerialNumber _
Lib "iowkit" _
(ByVal iowHandle As Long, ByRef serialNumber As Byte) _
As Long
Public Declare Function IowKitSetTimeout _
Lib "iowkit" _
(ByVal iowHandle As Long, ByVal TimeOut As Long) _
As Long
Public Declare Function IowKitSetWriteTimeout _
Lib "iowkit" _
(ByVal iowHandle As Long, ByVal TimeOut As Long) _
As Long
Public Declare Function IowKitCancelIo _
Lib "iowkit" _
(ByVal iowHandle As Long, _
ByVal numPipe As Long) _
As Long
' IO-Warrior handles
Dim iowHandles(IOWKIT_MAX_DEVICES) As Long
' Number of IOWs
Dim numIows As Long
' Data buffer
' Basic data buffer is 8 bytes long: 1 byte for report id, max 7 bytes for data
Dim data(8) As Byte
Sub Main
Dim I As Long
' Serialnumber of IO-Warrior
Dim S(18) As Byte
' ProductID of IOWarrior
Dim Pid As Long
' Initialize everything
' Open device
iowHandles(0) = IowKitOpenDevice()
' Fail if can't open
If iowHandles(0) = 0 Then
' Barf and exit from program
MsgBox "Can not open device!", 0, "Error"
End
Else
MsgBox "Device Open", 0, "Sucess"
Pid = IowKitGetProductId(iowHandles(0)
' I = IowKitGetSerialNumber(iowHandles(0), S(0))
MsgBox Pid, 0, "ProductID"
End If
IowKitCloseDevice(iowHandles(0))
End Sub
Re: VBA Beispiel
Hallo Christoph
Danke für deine Bemühungen.
Am Schluss der Zeile fehlt eine schliessende Klammer, sonst läuft das Programm soweit unter Access 2010. Es liest mir eine Seriennummer aus.
Wie funktioniert das nun mit den Ein- und Ausgängen?
"r.exe" liest sicher keine Eingänge aus :(
Danke für deine Bemühungen.
Am Schluss der Zeile
Code: Select all
Pid = IowKitGetProductId(iowHandles(0)
Wie funktioniert das nun mit den Ein- und Ausgängen?
"r.exe" liest sicher keine Eingänge aus :(
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: VBA Beispiel
Hmmm da fehlt keine Klammer soweit ich das sehen kann, oder ich bin blind....
Aber wenns unter Office nicht abstürzt ists ja gut. Ich weiß nicht wie stabil VBA unter OpenOffice und LibreOffice ist. Bei mir aber nicht wirklich stabil leider.
Naja da es sich hier im Visual Basic handelt einfach mal in das Beispiel "SimpleIO" für Visual Basic schauen. Da werden Eingänge gesetzt und gelesen.
Hier mal eine Beispielfunktion fürs schreiben:
Beim Lesen wichtig IowKitSetTimeout() zu setzten oder ReadNonBlocking verwenden, sonst kann es sein das das Programm "hängt" weil es auf neue Daten wartet. IowKitRead() hierfür am besten mit dem Special-Mode 0xFF nutzen (Liest den aktuellen Port-Status aus egal ob neue Daten da sind oder die alten drin sind).
Der Code ist nicht getestet und ist NUR für den IO-Warrior24 gültig (im bezug auf die zurückgelesenen Bytes)
Über Special Mode ungefähr so:
Wie gesagt der Code ist nicht getestet, sollte aber klappen. Nicht vergessen IowKitOpenDevice() bei Programmstart aufrufen und IowKitCloseDevice() beim beenden (Aber UNBEDINGT aufrufen, weil sonst die DLL nicht entladen und beendet wird).
Aber wenns unter Office nicht abstürzt ists ja gut. Ich weiß nicht wie stabil VBA unter OpenOffice und LibreOffice ist. Bei mir aber nicht wirklich stabil leider.
Naja da es sich hier im Visual Basic handelt einfach mal in das Beispiel "SimpleIO" für Visual Basic schauen. Da werden Eingänge gesetzt und gelesen.
Hier mal eine Beispielfunktion fürs schreiben:
Code: Select all
Private Sub WriteBytes()
' Number of bytes written
Dim nWritten As Long
Dim data(8) As Byte
' Sicherheitshalber alles auf NULL setzen
' Set up Report ID
data(0) = 0
' Set up bytes
data(1) = &HFF
data(2) = &HFF
data(3) = &HFF
data(4) = &HFF
data(5) = &HFF
data(6) = &HFF
data(7) = &HFF
' First byte
data(1) = &H01
' If more data() needed, insert after here
' data(2) = &HAA
' data(3) = &H1F
' Write to IOW 24
nWritten = IowKitWrite(iowHandles(I), IOW_PIPE_IO_PINS, data(0), 3)
End Sub
Der Code ist nicht getestet und ist NUR für den IO-Warrior24 gültig (im bezug auf die zurückgelesenen Bytes)
Code: Select all
Private Sub ReadBytes()
' Number of bytes written
Dim nRead As Long
Dim data(8) As Byte
IowKitSetTimeout(iowHandles(0), 1000)
nRead = IowKitRead(iowHandles(0), IOW_PIPE_IO_PINS, data(0), 3)
' Oder alternativ
' nRead = IowKitReadNonBlocking(iowHandles(0), IOW_PIPE_IO_PINS, data(0), 3)
End Sub
Code: Select all
Private Sub ReadSpecialBytes()
' Number of bytes written
Dim nRead As Long
Dim nwrite As Long
Dim data(8) As Byte
' Sicherheitshalber alles auf NULL setzen
' Set up Report ID
data(0) = 0
' Set up bytes
data(1) = &HFF
data(2) = &HFF
data(3) = &HFF
data(4) = &HFF
data(5) = &HFF
data(6) = &HFF
data(7) = &HFF
IowKitSetTimeout(iowHandles(0), 1000)
' First byte is controlling standard LED
data(1) = &HFF
nWrite = IowKitWrite(iowHandles(0), IOW_PIPE_SPECIAL_MODE, data(0), 8) ' IO-Warrior sagen "ICH WILL DATEN"
nRead = IowKitRead(iowHandles(0), IOW_PIPE_SPECIAL_MODE, data(0), 8) ' Lesen
' Daten sind in data() gespeichert
End Sub
Re: VBA Beispiel
Hallo Christoph
(Die Programmzeile hat mehr öffnende Klammern als schliessende, bei mir ein Problem)
ich bin am versuchen:
- Schreiben kann ich nur Out3 und Out4 auf der Karte. Alle Werte verändert, keine weiteren Reaktionen
- Der Befehl "IowKitSetTimeout(iowHandles(0), 1000)" geht nicht
- Lesen kann ich mit "IowKitRead" nur Nullwerte
Die Zeile
sollte doch etwas anzeigen?
- Der Befehl "IowKitReadNonBlocking"stürzt ganz Access ab!
Ich bin, wie du merkst, nicht gerade der VBA - Hirsch. Deshalb suche ich ein Beispiel zum anpassen. So geht nämlich ganz ordentlich! Aber bis jetzt bin ich von einer Lösung noch weit weg.
(Die Programmzeile hat mehr öffnende Klammern als schliessende, bei mir ein Problem)
ich bin am versuchen:
- Schreiben kann ich nur Out3 und Out4 auf der Karte. Alle Werte verändert, keine weiteren Reaktionen
- Der Befehl "IowKitSetTimeout(iowHandles(0), 1000)" geht nicht
- Lesen kann ich mit "IowKitRead" nur Nullwerte
Die Zeile
Code: Select all
"Debug.Print data(0) & "-" & data(1) & "-" & data(2) & "-" & data(3) & "-" & data(4) & "-" & data(5) & "-" & data(6) & "-" & data(7) & "-" & data(8)
sollte doch etwas anzeigen?
- Der Befehl "IowKitReadNonBlocking"stürzt ganz Access ab!
Ich bin, wie du merkst, nicht gerade der VBA - Hirsch. Deshalb suche ich ein Beispiel zum anpassen. So geht nämlich ganz ordentlich! Aber bis jetzt bin ich von einer Lösung noch weit weg.
-
- Posts: 389
- Joined: Sun Feb 13, 2005 1:22 pm
- Location: Gerblingerode / Duderstadt
- Contact:
Re: VBA Beispiel
@higa
Du musst nur eine Socketverbindung über VB zum Server aufbauen, danach kannst du mit einfachen Text basierten Befehlen alle möglichen IOWs steuern/abfragen/verwalten ...
Gruss Ralf
ich könnte Dir da den IOWSocketServer anbieten :-) ... ist auf jeden Fall Stress freier.Ich bin, wie du merkst, nicht gerade der VBA - Hirsch. Deshalb suche ich ein Beispiel zum anpassen.
Du musst nur eine Socketverbindung über VB zum Server aufbauen, danach kannst du mit einfachen Text basierten Befehlen alle möglichen IOWs steuern/abfragen/verwalten ...
Gruss Ralf
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: VBA Beispiel
Hmm ich schau mir das morgen mal genauer an. Ich kann nämlich auch nicht wirklich schreiben.
Das VBA skript schreib zwar Daten, aber es kommt nix an. Ich prüf das morgen mal genauer.
Das VBA skript schreib zwar Daten, aber es kommt nix an. Ich prüf das morgen mal genauer.
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: VBA Beispiel
Also ich habe mir jetzt die Testversion von Office 2010 besorgt und folgendens Skript ausgeführt:
Der Obere Teil ist der selbe wie gehabt. Im unteren Teil (die Main) ist es jetzt auf den IOW24 zugeschnitten.
Bei mir funktioniert es in Word also Makro ohne Fehler.
Die Daten data(1) und data(2) enthalten die Bytes für die Pins / Ports.
Kontrollieren kann man das ganze mit dem SimpleHIDWrite und dem Special Mode 0xFF.
Dasmit ließt man den Port Status aus.
Code: Select all
Rem ***** BASIC *****
' Attribute VB_Name = "iow"
' Required kernel32 functions
Public Declare Function GetLastError _
Lib "kernel32" () _
As Long
' IOW SDK V1.5
' IO-Warrior vendor & product IDs
Public Const IOWKIT_VENDOR_ID As Long = &H7C0
Public Const IOWKIT_VID As Long = IOWKIT_VENDOR_ID
' IO-Warrior 40
Public Const IOWKIT_PRODUCT_ID_IOW40 As Long = &H1500
Public Const IOWKIT_PID_IOW40 As Long = IOWKIT_PRODUCT_ID_IOW40
' IO-Warrior 24
Public Const IOWKIT_PRODUCT_ID_IOW24 As Long = &H1501
Public Const IOWKIT_PID_IOW24 As Long = IOWKIT_PRODUCT_ID_IOW24
' IO-Warrior PowerVampire
Public Const IOWKIT_PRODUCT_ID_IOWPV1 As Long = &H1511
Public Const IOWKIT_PID_IOWPV1 As Long = IOWKIT_PRODUCT_ID_IOWPV1
Public Const IOWKIT_PRODUCT_ID_IOWPV2 As Long = &H1512
Public Const IOWKIT_PID_IOWPV2 As Long = IOWKIT_PRODUCT_ID_IOWPV2
' IO-Warrior 56
Public Const IOWKIT_PRODUCT_ID_IOW56 As Long = &H1503
Public Const IOWKIT_PID_IOW56 As Long = IOWKIT_PRODUCT_ID_IOW56
' Max number of pipes per IOW device
Public Const IOWKIT_MAX_PIPES As Long = 2
' pipe names
Public Const IOW_PIPE_IO_PINS As Long = 0
Public Const IOW_PIPE_SPECIAL_MODE As Long = 1
' Max number of IOW devices in system
Public Const IOWKIT_MAX_DEVICES As Long = 16
' IOW Legacy devices open modes
Public Const IOW_OPEN_SIMPLE As Long = 1
Public Const IOW_OPEN_COMPLEX As Long = 2
' first IO-Warrior revision with serial numbers
Public Const IOW_NON_LEGACY_REVISION = &H1010
' IO-Warrior low-level library API functions
Public Declare Function IowKitOpenDevice _
Lib "iowkit" () _
As Long
Public Declare Sub IowKitCloseDevice _
Lib "iowkit" _
(ByVal iowHandle As Long)
Public Declare Function IowKitWrite _
Lib "iowkit" _
(ByVal iowHandle As Long, _
ByVal numPipe As Long, _
ByRef buffer As Byte, _
ByVal length As Long _
) _
As Long
Public Declare Function IowKitRead _
Lib "iowkit" _
(ByVal iowHandle As Long, _
ByVal numPipe As Long, _
ByRef buffer As Byte, _
ByVal length As Long _
) _
As Long
Public Declare Function IowKitReadNonBlocking _
Lib "iowkit" _
(ByVal iowHandle As Long, _
ByVal numPipe As Long, _
ByRef buffer As Byte, _
ByVal length As Long _
) _
As Long
Public Declare Function IowKitReadImmediate _
Lib "iowkit" _
(ByVal iowHandle As Long, _
ByRef Value As Long) _
As Long
' Get number of IOW devices
Public Declare Function IowKitGetNumDevs _
Lib "iowkit" () _
As Long
' Get Nth IOW device handle
Public Declare Function IowKitGetDeviceHandle _
Lib "iowkit" _
(ByVal numDevice As Long) _
As Long
Public Declare Function IowKitSetLegacyOpenMode _
Lib "iowkit" _
(ByVal openMode As Long) _
As Long
Public Declare Function IowKitGetProductId _
Lib "iowkit" _
(ByVal iowHandle As Long) _
As Long
Public Declare Function IowKitGetRevision _
Lib "iowkit" _
(ByVal iowHandle As Long) _
As Long
Public Declare Function IowKitGetThreadHandle _
Lib "iowkit" _
(ByVal iowHandle As Long) _
As Long
Public Declare Function IowKitGetSerialNumber _
Lib "iowkit" _
(ByVal iowHandle As Long, ByRef serialNumber As Byte) _
As Long
Public Declare Function IowKitSetTimeout _
Lib "iowkit" _
(ByVal iowHandle As Long, ByVal TimeOut As Long) _
As Long
Public Declare Function IowKitSetWriteTimeout _
Lib "iowkit" _
(ByVal iowHandle As Long, ByVal TimeOut As Long) _
As Long
Public Declare Function IowKitCancelIo _
Lib "iowkit" _
(ByVal iowHandle As Long, _
ByVal numPipe As Long) _
As Long
Public Sub Main()
' IO-Warrior handles
Dim iowHandles(IOWKIT_MAX_DEVICES) As Long
' ProductID of IOWarrior
Dim Pid As Long
'Return for IowKitSetTimeout
Dim to AS Long
' Initialize everything
' Open device
iowHandles(0) = IowKitOpenDevice()
' Fail if can't open
If iowHandles(0) = 0 Then
' Barf and exit from program
MsgBox "Can not open device!", 0, "Error"
End
Else
'MsgBox "Device Open", 0, "Sucess"
to = IowKitSetTimeout(iowHandles(0), 1000)
Pid = IowKitGetProductId(iowHandles(0))
If Pid = IOWKIT_PID_IOW24 Then
MsgBox "IO-Warrior24 gefunden", 0, "IO-Warrior"
Else
MsgBox Pid, 0, "Product ID"
End If
Dim nWritten As Long
Dim data(8) As Byte
' Sicherheitshalber alles auf NULL setzen
data(0) = &H00
' Set up bytes
data(1) = &H0
data(2) = &H0
data(3) = &H0
data(4) = &H0
data(5) = &H0
data(6) = &H0
data(7) = &H0
' Set up Report ID
data(0) = &H0
' Set up bytes
data(1) = &H1A
data(2) = &H2B
' Write to IOW 24
nWritten = IowKitWrite(iowHandles(0), IOW_PIPE_IO_PINS, data(0), 3)
' Write must return 3 Bytes by writing IO
If nWritten = 3 Then
Debug.Print "Schreiben:" & data(0) & "-" & data(1) & "-" & data(2) & "-" & data(3) & "-" & data(4) & "-" & data(5) & "-" & data(6) & "-" & data(7) & "-" & data(8)
Else
Debug.Print "Fehler, irgendwas stimmt nicht"
End If
data(0) = &HFF
' Write to IOW 24
nWritten = IowKitWrite(iowHandles(0), IOW_PIPE_SPECIAL_MODE, data(0), 8)
' Read from IOW 24
nWritten = IowKitRead(iowHandles(0), IOW_PIPE_SPECIAL_MODE, data(0), 8)
Debug.Print "Lesen:" & data(0) & "-" & data(1) & "-" & data(2) & "-" & data(3) & "-" & data(4) & "-" & data(5) & "-" & data(6) & "-" & data(7) & "-" & data(8)
End If
IowKitCloseDevice (iowHandles(0))
End Sub
Bei mir funktioniert es in Word also Makro ohne Fehler.
Die Daten data(1) und data(2) enthalten die Bytes für die Pins / Ports.
Kontrollieren kann man das ganze mit dem SimpleHIDWrite und dem Special Mode 0xFF.
Dasmit ließt man den Port Status aus.
Re: VBA Beispiel
Hallo Christoph
ich danke allen, die sich dahinter gesetzt haben ganz herzlich für die Mühe, welche sie sich gemacht haben.
Ich stelle aber fest, dass der Code unter VBA bei weitem weder unter MS-Access noch MS-Word zum Laufen bringen ist. Erste f ehlerhafte Zeilen sind schon bei den Definitionen zu finden :(
Auch erfolgreiche Muster-Programme unter VB, wie das Muster auf der Homepage bringen keine umsetzbaren Aussagen:
Es ist mir unverständlich, welches Bit welche Aus- und Eingänge darstellen soll. Eigentlich wären ja je 8Bit Ein- und Ausgänge zwei Hex-Zeichen und nicht 4x8 "HEXereien". Wäre ja nicht so schlimm, wenn man die entsprechenden Bit noch extrahieren könnte, aber ich habe teilweise die entsprechen, funktionierenden Bit gar nicht gefunden.
Ich werde deshalb nun versuchen mich mit r.exe durchschlagen zu können.
Nochmals besten Dank. Vielleicht finde ich mal noch was und schaue aber weiterhin auf den Post.
Gruss Higa
ich danke allen, die sich dahinter gesetzt haben ganz herzlich für die Mühe, welche sie sich gemacht haben.
Ich stelle aber fest, dass der Code unter VBA bei weitem weder unter MS-Access noch MS-Word zum Laufen bringen ist. Erste f ehlerhafte Zeilen sind schon bei den Definitionen zu finden :(
Auch erfolgreiche Muster-Programme unter VB, wie das Muster auf der Homepage bringen keine umsetzbaren Aussagen:
Es ist mir unverständlich, welches Bit welche Aus- und Eingänge darstellen soll. Eigentlich wären ja je 8Bit Ein- und Ausgänge zwei Hex-Zeichen und nicht 4x8 "HEXereien". Wäre ja nicht so schlimm, wenn man die entsprechenden Bit noch extrahieren könnte, aber ich habe teilweise die entsprechen, funktionierenden Bit gar nicht gefunden.
Ich werde deshalb nun versuchen mich mit r.exe durchschlagen zu können.
Nochmals besten Dank. Vielleicht finde ich mal noch was und schaue aber weiterhin auf den Post.
Gruss Higa
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: VBA Beispiel
Um was für Fehler handelt es sich denn? Ich hab das durch einen Richtigen Compiler gejagt und der hat nicht gemeckert.
Ein Byte entspricht einem IO-Port und jedes Bit entspricht einem Pin und somit einem Ein-/Ausgang.
Beim einfachen Input / Output sind alle Bits der Ports Ein- und Ausgänge.Es ist mir unverständlich, welches Bit welche Aus- und Eingänge darstellen soll. Eigentlich wären ja je 8Bit Ein- und Ausgänge zwei Hex-Zeichen und nicht 4x8 "HEXereien". Wäre ja nicht so schlimm, wenn man die entsprechenden Bit noch extrahieren könnte, aber ich habe teilweise die entsprechen, funktionierenden Bit gar nicht gefunden.
Ein Byte entspricht einem IO-Port und jedes Bit entspricht einem Pin und somit einem Ein-/Ausgang.
Re: VBA Beispiel
der Chip von Onlinesteuerung hat folgendes Schema:
dort sind die Ein- und Ausgänge gesondert ausgeführt. Welcher Chip ist dann das? Auch die Demosoftware zeigt die Möglichkeit einen Schrittschalter im Eingang auf einen Ausgang zu programmieren. Leider ist der Zugriff per VBA für mich unverständlich. Eine Light-Variante mir r.exe habe ich nun zum laufen gebracht. Es wäre aber für mein Projekt sinnvoll die Eingänge auch verwenden zu können.
wie heisst dieser Chip auf der Webseite von Codemercs überhaupt?
dort sind die Ein- und Ausgänge gesondert ausgeführt. Welcher Chip ist dann das? Auch die Demosoftware zeigt die Möglichkeit einen Schrittschalter im Eingang auf einen Ausgang zu programmieren. Leider ist der Zugriff per VBA für mich unverständlich. Eine Light-Variante mir r.exe habe ich nun zum laufen gebracht. Es wäre aber für mein Projekt sinnvoll die Eingänge auch verwenden zu können.
wie heisst dieser Chip auf der Webseite von Codemercs überhaupt?
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: VBA Beispiel
Wenn ich jetzt wüsst, was für ein Chip gemeint ist, dann wäre es leichter zu helfen.
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: VBA Beispiel
Nach dem Pinout ist das ein IOW24