2k Aufrufe
Gefragt in Tabellenkalkulation von kauz Mitglied (291 Punkte)
Hallo liebe Helfergemeinde,

Weiß jemand eine Möglichkeit per VBA Daten an die parallele Schnittstelle zu senden, und dabei den Druckertreiber zu umgehen?

Ich möchte Werte zwischen 1 und 255 an den Port schicken, und es sollen damit auch nur einmalig die entsprechenden Bits auf High gesetzt werden.

Also ohne die ganzen Einstellparameter, die ein Druckertreiber zum Einstellen der Druckereigenschaften senden würde.

Weiß jemand einen Trick?
Vielleicht einen Treiber, der einfach alles 1 zu 1 weitergibt?

Gruß
Kauz

5 Antworten

0 Punkte
Beantwortet von snoopie Experte (3.2k Punkte)
Hallo Kauz,

das sollte über ins Programm eingebundenen Assemblercode möglich sein. Wie man das allerdings unter VBA macht, entzieht sich leider meiner Kenntnis. Ich würde an Deiner Stelle mal entsprechend googeln.

Übrigens, ich steuere hier in Turbo Basic (uralte Software unter DOS) auf diese Weise den LPT1 bitweise an und schalte damit Frequenzen in einem dort angeschlossenen Empfänger um.

Gruss,
Snoopie
0 Punkte
Beantwortet von snoopie Experte (3.2k Punkte)
Hi Kauz,

habe eben selbst mal gegoogelt und auf Anhieb etwas Interessantes gefunden: Unter der URL
http://www.activevb.de/tutorials/tut_asm/asm.html
gibt es eine recht ausführliche Beschreibung. Ich kenne mich mit VBA nicht aus, aber auf alle Fälle wird gezeigt, dass die Einbindung von Assemblercode in VBA möglich ist.

Gruss,
Snoopie
0 Punkte
Beantwortet von Experte (3.2k Punkte)
assembler einbinden ist insofern problematisch, da das betriebssystem (kp, ab welchem, unter 98 müsste es noch gehn ;) zugriffe auf hardwareregister (lpt1 normalerweise 0x378) verwehrt. gibt dann ne schöne exception, sollte man versuchen mit den programmierspracheneigenen befehlen zur setzung eines hw-registers auf die hw zuzugreifen. kann dadurch halt zu kritischen systemabstürzen führen, daher wird der zugriff nurnoch über die Winapi erlaubt.

aber es gibt hoffnung! treiber können nämlich sehr wohl auf die hw-register zugreifen. (nein, du musst keinen treiber schreiben ;). genau dieses macht sich die inpout32.dll zu nutze. sie implementiert einen treiber, der dann bequem aus beinahe jeder programmiersprache genutzt werden kann.
(hier wollte ich eig nen downloadlink mit ner beschreibung posten, hab aber über google was noch besseres gefunden: hier)
sollte auch in vba funktionieren (excel makros).

diese funktion tut also genau, was du willst. einfach "Out32 &H378, bitmask" und die pegel liegen am datenregister des lpt an. (mit 0x379 und 0x37A lassen sich auch noch status und kontrollregister lesen und schreiben)

aber drauf achten, port nicht kurzschließen oder zu viel strom ziehen. das macht den (angeblich, spreche nicht aus erfahrung!) recht schnell kaputt

Ele
0 Punkte
Beantwortet von kauz Mitglied (291 Punkte)
Hallo,
Danke für die ausfühlichen Antworten.

Ich werde es ausprobieren.. wird allerdings etwas dauern:

Mich hat's erwischt.. Erkältung.

Zu Hause speichere ich mir noch die Links ab... und wenn ich wieder fit bin geht's los...

Danke und
Gruß
Kauz
0 Punkte
Beantwortet von kauz Mitglied (291 Punkte)
Hallo,
... bin nu wieder halbwegs fit:

@ Snoopie
Deine Variante mit Assembler war nicht was ich suchte... trotzdem Danke für Deine Antwort.

@Ele
Hab mir die Seite angeschaut und es erfolgreich in VBA umsetzen können!

Kann jetzt mein Vorhaben in Excel realisieren...Danke!

Gruß
Kauz
...