Hallo,
ich hab eine ähnliche Frage bereits erfolglos bei ActiveVB gestellt, und per Google gesucht. Dabei ist nichts brauchbares rausgekommen, ich hoffe das mir hier vielleicht jemand helfen kann.
Ich hab einen Vier-Phasigen-Schrittmotor, der über ein wenig Elektronik mit meinem Parallel-Port am Notebook verbunden ist. Auf dem Notebook verwende ich für die Anwendung ein WindowsXP (Service Pack 1) und Visual Basic 6. Ich möchte jetzt über den Computer den Schrittmotor ansteuern. Dazu muss ich 4 verschiedene Signale an den Parallel-Port in einer bestimmten Reihenfolge ausgeben. Basierend auf einem Tutorial (http://www.activevb.de/tutorials/tut_parallel/parallel.html) habe ich das passende Programm geschrieben, dass einfach nur in einer Schleife die Signale mit ein wenig Pause dazwischen ausgibt. Das Programm ist ziemlich sicher fehlerfrei, und basiert auf der inpout32.dll. Wenn ich das Programm starte und einen Button betätige, soll der Schrittmotor 200 Schritte machen, das entspricht vier Umdrehungen in meinem Fall. Das funktioniert problemlos.
Jetzt ist es aber so, dass alle 5s der Schrittmotor "stottert", d. h. er ruckelt kurz. Am Ende ist dadurch die Positionierung ungenau, was unter keinen Umständen sein darf. Ich habe keinen Drucker-Treiber auf den Parallel-Port eingerichtet, lediglich für USB. Nach etwas Suche mit Google habe ich bei http://www.lvr.com/jansfaq.htm folgendes gefunden:
------------------------------------------------------------------
Q: If a logic 1 is written to the Control Port, bit 0, (Strobe), the PC clears all of the port bits once every five seconds for about a minute.
A: Some versions of Windows XP look for devices by periodically writing to the port. A registry key can disable this behavior.
The following registry setting disables the port writes:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Parameters]
"DisableWarmPoll"=dword:00000001
The following registry setting enables the port writes:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Parameters]
"DisableWarmPoll"=dword:00000000
You can make these changes in Windows' regedit utility. Or to make the changes automatically, create and save the following text files:
DisableWarmBoot.reg contains the following text:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Parameters]
"DisableWarmPoll"=dword:00000001
EnableWarmBoot.reg contains the following text:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Parameters]
"DisableWarmPoll"=dword:00000000
To change a registry key, run the program.
As always, use caution when working with the registry, which contains critical values for configuring and running the PC.
After making a change, reboot the PC.
Disabling the port writes can also eliminate port timeout errors received in some applications.
------------------------------------------------------------------
Die erste genannte Registry-Einstellung habe ich gemacht, obwohl bei mir ursprünglich nichtmal das Unterverzeichnis "Parameters" exisiterte. Nach einem Neustart hat sich nichts an der Situation geändert.
Weil ich dachte, die inpout32.dll würde direkt auf dem Port schreiben, habe ich im Geräte-Manager den Parallel-Port deaktiviert und gehofft das Windows oder was auch immer da Blödsinn macht dann da nichtmehr hinschreibt. Nur mein Programm ging dann auch nichtmehr... (Wieso? Wenn die DLL direkt auf den Port schreibt dürfte Windows doch da nichts zu sagen haben?)
Mir ist bewusst das die sauberste Lösung eine externe Elektronik zur Ansteuerung wäre. Das stellt für mich aber einen ziemlichen Mehraufwand dar, weil ich für sowas zu planlos auf diesem Gebiet bin. Ich gehe davon aus dass der Fehler softwareseitig bei irgendeinem Treiber oder einem "Feature" von Windows NT/2k/XP zu suchen ist, und hoffe das jemand, der ein ähnliches Problem schonmal hatte, mir einen Tipp geben kann, wie ich das deaktivieren oder den Parallel-Port für mein Programm reservieren/"locken" kann.
Vielen Dank
Julian
--
"Hex is for sissies. Real men use binary. And the most hardcore types use only z
eros - uppercase zeros and lowercase zeros." - Tomasz Sowinski