Maison / Un service en ligne / Pilote pour lpt sous Windows 7. Ports (COM et LPT). Installation du pilote pour travailler avec le port LPT

Pilote pour lpt sous Windows 7. Ports (COM et LPT). Installation du pilote pour travailler avec le port LPT

Tous ceux qui essaient de connecter des périphériques au port LPT sont confrontés à ce problème. Dès que vous dites au programme " utiliser LPT", Vous obtiendrez une erreur - elle est indiquée dans la capture d'écran à droite. Alors, essayons de le comprendre et de le réparer.

J'ai rencontré ce problème lors de l'ajout d'une carte contrôleur avec des ports 1-LPT et 2-COM. Il y avait un besoin certain pour cela - bande de connexion -décodeur RU -005A. Cela sera discuté dans le prochain article. En attendant, j'aimerais obtenir un port LPT fonctionnant correctement dans Win -Test sous Windows -7 (64 bits).

Les ordinateurs modernes n'ont plus de port parallèle depuis un certain temps déjà. Alternativement, vous pouvez y mettre un contrôleur supplémentaire. N'ayez pas peur de ce mot, il n'y a rien de terrible là-dedans. La raison pour laquelle l'erreur ci-dessus se produit est simple - le pilote et la bibliothèque DriverLINX (DLPortIO.sys + DLPortIO.dll) n'existent pas pour les versions Windows sous l'architecture x86-64 (AMD64, Intel64). Le développeur Scientific Software Tools Inc a cessé de prendre en charge le pilote, le transférant à une autre société, et ils ne se sont arrêtés qu'à la version 32 bits. Microsoft hausse les épaules et l'envoie au fabricant. Néanmoins, il existe un bon bundle - c'est InpOut32 (hwinterface.sys+inpout32.dll), et même une version 64 bits de InpOutx64 avec le pilote hwinterfacex64.sys.

Passons de la théorie à la mise en pratique. En stock:

  • Win-Test version 4.10 mise à jour vers la révision : 524 version du 13 juillet 2013.
  • Windows 7 Ultimate (64 bits) avec toutes les mises à jour.
  • Intel Core i7-3770 (3,4 GHz) + PC3-10700 (667 MHz) 8x2=16 Go + Asus P8Z77-V LX
  • Contrôleur * Port PCI COM/LPT (2+1) WCH353 en vrac

Installation du contrôleur

Le contrôleur lui-même n'a rien d'intéressant en fait et son nom donne une image presque complète - deux ports COM et un port LPT, il est installé en PCI. L'appareil lui-même est peu coûteux et coûte 360 ​​roubles (environ 12 dollars), fabriqué en Chine.

L'emballage était OEM. Inclus sont deux câbles avec des ports COM sur un support et un disque avec des soi-disant pilotes. Je ne les ai pas installés, car je le savais déjà à l'avance - ils ne correspondent pas. Tous les chemins menaient au site du constructeur. Juste au cas où, je donne un lien et poste le même pilote dans l'archive.


La procédure d'installation du contrôleur n'a pas posé de problèmes - tout est assez simple. Nous éteignons l'ordinateur, l'installons dans un emplacement PCI libre, l'allumons, installons le pilote. Le package comprend un programme d'installation. Son interface n'est pas compliquée et compréhensible. Tout s'est bien passé pour moi sur la détection automatique du type de carte et il suffisait de cliquer uniquement sur Installer le pilote. Le processus d'installation est accompagné d'une bande mobile sur l'interface, tout est très clair.

Le programme vous permet de réaffecter les ports, si nécessaire. Par exemple, s'il existe des ports COM virtuels. Pour ce faire, après l'installation, cliquez sur À propos et sur le bouton Modifier le nom du port.

Les captures d'écran données n'ont pas besoin de commentaires spéciaux, cliquez et les images deviendront plus grandes. Tout est entre vos mains - configurez les nouveaux ports qui sont apparus à votre discrétion et selon vos besoins.

Le résultat final que l'installation a réussi devrait être la présence de ces périphériques dans le Gestionnaire de périphériques sur l'ordinateur. Allez-y et vérifiez. Dans mon cas, la carte mère avait déjà un port COM intégré (enfin .. j'en ai besoin). En conséquence, la liste des ports s'est avérée comme suit :

Il est possible que vous ayez besoin de connaître l'adresse de ce port et de la spécifier correctement dans les paramètres du programme où ce port sera utilisé. Les adresses de port par défaut doivent être :

LPT -1 - 378

LPT-2 - 278

LPT-3 - 3BC

Dans notre cas, elles seront différentes des valeurs habituelles, car ces ports ne sont pas intégrés sur la carte mère et la façon de communiquer avec eux se fait par le bus PCI. Dans ma version ça fonctionnait D010(nous utilisons la première valeur). Par conséquent, avant d'installer (d'acheter) un tel contrôleur, vérifiez si votre programme a la capacité de définir d'autres plages d'E / S.

Néanmoins, les pilotes contiennent un petit utilitaire qui permet de réattribuer de telles adresses (je n'ai pas compris, il n'y en a pas besoin).

Il y a environ 10 à 15 ans, le port parallèle était une interface assez populaire pour la communication entre les appareils. Aujourd'hui, les fabricants de divers appareils préfèrent les interfaces série. Cependant, aujourd'hui, le port LPT est toujours disponible. Et certains développeurs écrivent encore des programmes pour cela (ou prennent en charge ceux écrits à l'apogée des interfaces parallèles). Mais dans les ordinateurs maintenant, le port LPT est assez rare. Il existe, bien sûr, des cartes d'extension informatiques qui implémentent l'interface LPT. Ce sont essentiellement des cartes sur le bus PCI. Malheureusement, tous les logiciels écrits pour les ports LPT intégrés à la carte mère ne fonctionneront pas avec les cartes LPT-PCI.

Une solution à ce problème est proposée : une classe programme écrite sous .NET et une bibliothèque dynamique qui fonctionne avec LPT. Cette implémentation a été testée sur Windows XP 32 bits et 64 bits, Windows 7, 8 et 10 avec des ports LPT intégrés et implémentée en tant que cartes d'extension sur le bus PCI ou PCI-Express. Vous pouvez télécharger le pilote du port LPT à partir du lien ci-dessous après l'article.

1 Installation du pilote pour travailler avec le port LPT

L'archive jointe contient deux dossiers - pour les versions 32 bits et 64 bits de Windows. Un des dossiers contient un fichier InstallDriver.exe. Exécutez d'abord ce fichier, il installera les bibliothèques dynamiques sur le système. Après cela, l'ordinateur doit être redémarré.

Pour utiliser le pilote suggéré, les fichiers inpout32.dll et inpoutx64.dll doit se trouver dans le même répertoire que le fichier exécutable de votre programme.

2 Classe de programme utilisant des bibliothèques travailler avec le port LPT

J'ai écrit une classe pour .NET qui utilise des bibliothèques dynamiques inpout32.dll et inpoutx64.dll et vous permet de lire les données du port parallèle et d'écrire des données dans ses registres.

Les bibliothèques mentionnées ne sont pas écrites par moi. Je propose une classe wrapper pratique qui simplifie le travail avec ces bibliothèques. De plus, l'auteur des bibliothèques du fichier lisezmoi.txt signale que son pilote ne prend pas en charge les périphériques PCI. J'ai réussi à le lancer pour qu'il fonctionne à la fois avec le port parallèle intégré et le port LPT implémenté comme carte d'extension sur le bus PCI-Express. De plus, le port fonctionne bien à la fois sur Windows10 x64 moderne et sur les systèmes plus anciens.

Voici le code de la classe LPT dans VB.NET :

Code de classe LPT dans VB.NET(développe) Importe System.Runtime.InteropServices """ """ Fonctionne avec le port LPT. Lors de la création, il détecte la présence d'un pilote et sélectionne la bibliothèque appropriée. """ Public NotInheritable Class LPT #Region "CONST" Public Const DLL32 As String = "c:\temp\inpout32.dll" Public Const DLL64 As String = "c:\temp\inpoutx64.dll" Public Const DLL32DRV As String = "c: \temp\inpoutx32drv.dll" """ """ Registres de port parallèle. """ Public Enum Register As Integer """ """ Registre de données SPP/EPP. """ DONNÉES = 0 """ """ Registre d'état SPP/EPP. """ ETAT = DONNEES + 1 """ """ Registre de contrôle SPP/EPP. """ CHAMP = DONNEES + 2 """ """ Registre d'adresse EPP. La lecture ou l'écriture dans ce registre génère un cycle associé de lecture ou d'écriture de l'adresse EPP. """ EPP_ADDRESS = DONNÉES + 3 """ """ Registre de données EPP. La lecture (écriture) génère un cycle de données EPP de lecture (écriture) associé. """ EPP_DATA = DONNEE + 4 """ """ Registre d'activation du mode EPP. """ """ """ Si seulement "ECP + EPP" ou "Extended" sont mélangés - vous devrez probablement également écrire l'octet 0x80 """ sur le port ECR (ECR est le registre de mode ECP, ECR=BASE_ADDR+0x402, BASE_ADDR est le adresse de base du port LPT """ ECR = DATA + &H402 "TEST End Enum #End Region "/CONST #Region "DllImport" Fonction partagée privée IsInpOutDriverOpen() en tant que fonction de fin d'octet Fonction partagée privée IsInpOutDriverOpen_x64() en tant que fonction de fin UInt64 Fonction partagée privée Inp32 (PortAddress As UInt32) en tant que fonction de fin d'octet Private Shared Sub Out32(portAddress As UInt32, data As UInt32) End Sub Fonction partagée privée Inp64 (PortAddress As UInt64) en tant que fonction de fin d'octet Private Shared Sub Out64(PortAddress As UInt64, Data As UInt64) End Sub #End Region "/DllImport #Region "CTOR" """ """ Vérifie si le pilote x86 ou x64 peut être utilisé. Si ce n'est pas le cas, génère une exception "pilote non installé". """ Shared Sub New() Dim x86 As Boolean = CheckIsDriverX86() Dim x64 As Boolean = CheckIsDriverX64() If x64 Then _IsX64DriverUsed = True ElseIf x86 Then _IsX64DriverUsed = False Else Throw New SystemException("Le pilote pour le port LPT n'est pas installé.") End If Fin du sous-titre """ """ Initialisation du port - réglage XXXX0100"b dans le registre de contrôle. """ Private Shared Sub InitLpt(port As ULong) Write(port, Register.ECR, &H80) Write(port, Register.CONTROL, &H4) End Sub #End Region "/CTOR #Region "PROPS" """ """ Si le pilote est 64 bits. """ Renvoie NULL si le pilote n'est pas installé. """ La propriété publique partagée en lecture seule IsX64DriverUsed As Boolean ? Get Return _IsX64DriverUsed End Get End Property Private Shared ReadOnly _IsX64DriverUsed As Boolean? = Rien #End Region "/PROPS #Region "METHODS" """ """ Spécifie si le pilote est 32 bits. """ Fonction partagée privée CheckIsDriverX86() As Boolean Try Dim res As Byte = IsInpOutDriverOpen() Return True Catch ex As Exception Return False End Try End Function """ """ Spécifie si le pilote est 64 bits. """ Fonction partagée privée CheckIsDriverX64() As Boolean Try Dim nResult As ULong = IsInpOutDriverOpen_x64() Return (nResult<>0) Catch ex As Exception Return False End Try End Function #End Region "/ METHODS #Region "Lire / Ecrire Port LPT" """ """ Lit 1 octet de données à partir du registre LPT du port spécifié. """ """ Numéro de port. """ registre portuaire. Public Shared Function Read(port As ULong, reg en option As Register = Register.DATA) As Byte Dim data As Byte = 0 If IsX64DriverUsed Then data = Inp64(CULng(port + reg)) Else data = Inp32(CUInt(port + reg )) Fin Si Donnée de retour Fin Fonction """ """ Écrit un nombre dans le registre LPT du port spécifié. """ """ Adresse du port. """ registre portuaire. """ Public Shared Sub Write(port As ULong, reg As Register, data As ULong) If IsX64DriverUsed Then Out64(port + CULng(reg), data) Else If (data<= UInteger.MaxValue) Then Out32(CUInt(port + reg), CUInt(data)) Else Throw New ArgumentException("В 32-разрядных системах аргумент должен быть 32-разрядным (тип UInt32).", "data") End If End If End Sub #End Region "/Read / Write LPT Port """ """ Teste la présence d'un port LPT à l'adresse spécifiée. """ """ Adresse du port parallèle. Fonction partagée publique CheckPortPresent(lptAddress As ULong) As Boolean Dim portPresent As Boolean = False Try InitLpt(lptAddress) Dim data As ULong = Read(lptAddress, Register.DATA) ? Write(lptAddress, Register.DATA, &H0) portPresent = portPresent And (&H0 = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, &H55) portPresent = portPresent And (&H55 = Read(lptAddress, Register.DATA) ) )) Write(lptAddress, Register.DATA, &HAA) portPresent = portPresent And (&HAA = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, data) données si le port n'est pas trouvé (en cas de un port unidirectionnel) If (Not portPresent) Then data = Read(lptAddress, Register.CONTROL) portPresent = ((data<>0) EtAussi(données<>&HFF)) "Non null ? => Port présent. Si (Non portPresent) Then data = Read(lptAddress, Register.STATUS) portPresent = ((data<>0) EtAussi(données<>&HFF)) End If End If Catch ex As Exception Return False End Try Return portPresent End Function End Class "/LPT

Code de classe LPT en C# :

Code de classe LPT en C#(développe) en utilisant Système ; en utilisant System.Diagnostics ; en utilisant System.Runtime.InteropServices ; namespace LPTIO ( /// Classe pour travailler avec un port LPT. Une fois créée, elle détermine la présence d'un pilote et sa profondeur de bits. public étanche classe LPT( chaîne const privée DLL32 = "inpout32.dll"; chaîne const privée DLL64 = "inpoutx64.dll"; bool statique privé _IsX64DriverUsed; /// Si le pilote est 64 bits. bool statique public IsX64DriverUsed ( get ( return LPT._IsX64DriverUsed ; ) ) LPT statique()( if (LPT.getIsDriverX86()) ( LPT._IsX64DriverUsed = false; ) else ( if (!LPT.getIsDriverX64()) throw new SystemException ("Pilote pour le port LPT non installé."); LPT._IsX64DriverUsed = true; ) ) public LPT() ( ) octet externe statique privé IsInpOutDriverOpen(); privé statique externe ulong IsInpOutDriverOpen_x64(); octet externe statique privé Inp32(uint PortAddress); vide externe statique privé Out32(uint portAddress, uint data); octet externe statique privé Inp64 (jusqu'à PortAddress); vide externe statique privé Out64 (ulong PortAddress, ulong Data); /// Détermine si le pilote est pour Windows 32 bits. bool statique privé getIsDriverX86()( bool flag; try ( LPT.IsInpOutDriverOpen(); flag = true; ) catch (Exception ex) ( ProjectData.SetProjectError(ex); flag = false; ProjectData.ClearProjectError(); ) return flag; ) /// Détermine si le pilote est pour Windows 64 bits. bool statique privé getIsDriverX64()( bool flag; try ( flag = Decimal.Compare(new Decimal(LPT.IsInpOutDriverOpen_x64()), Decimal.Zero) != 0; ) catch (Exception ex) ( ProjectData.SetProjectError(ex); flag = false; ProjectData. ClearProjectError(); ) indicateur de retour; ) /// Lit 1 octet de données à partir du port LPT. /// Numéro de port. /// registre portuaire. octet statique public Lire (ulong port, LPT.Register reg = LPT.Register.DATA)( return !LPT.IsX64DriverUsed ? LPT.Inp32(Convert.ToUInt32(Decimal.Add(new Decimal(port), new Decimal((int) reg)))) : LPT.Inp64(Convert.ToUInt64(Decimal.Add(new Décimal(port), nouveau Décimal((int) reg)))); ) /// Écrit un numéro sur le port LPT. /// Adresse du port. /// registre portuaire. /// Le nombre à écrire. Sur les systèmes 32 bits, l'argument ne doit pas être supérieur à la valeur maximale du type UInt32. public static void Write (port ulong, LPT.Register reg, données ulong)( if (LPT.IsX64DriverUsed) ( LPT.Out64(checked (port + (ulong) (uint) reg), data); ) else ( if (data > (ulong) uint.MaxValue) throw new ArgumentException("In 32- sur les systèmes binaires, l'argument doit être 32 bits (type UInt32).", "data"); LPT.Out32(Convert.ToUInt32(Decimal.Add(new Decimal(port), new Decimal((int) reg)) ), vérifié ((uint) data)); ) ) /// Registres de port LPT. registre public enum( DONNÉES, ÉTAT, CONTRÔLE, ) ) )

3 Appliquer une classe .NET pour travailler avec le port LPT

Si nous regardons la liste des fonctions de bibliothèque exportées inpout32.dll avec un merveilleux outil Visionneuse d'exportation DLL de NirSoft, nous verrons l'image suivante :

Ceci est une liste de fonctions que nous pouvons utiliser. En fait, tous sont utilisés dans la classe TPL, mais l'implémentation est masquée, et parmi les méthodes publiques, seules deux méthodes et une propriété sont accessibles à l'utilisateur (elles sont abordées un peu plus loin).

Lors de l'instanciation, la classe elle-même déterminera quelle bibliothèque de bits utiliser - inpout32.dll ou inpoutx64.dll. Par conséquent, l'utilisateur n'est pas tenu de prendre des mesures pour initialiser ou déterminer la profondeur de bits du dll. Vous pouvez immédiatement écrire ou lire à partir du port LPT. Un "mais": si le pilote n'est pas installé, l'accès à l'une des méthodes de la bibliothèque dynamique lèvera une exception, je recommande donc d'utiliser des blocs Essayez... Attrapez pour intercepter et gérer les exceptions.

Quelques exemples d'utilisation de la classe TPL.

Pour déterminer si une version 64 bits du pilote est utilisée (inpoutx64.dll si True) ou 32 bits (inpout32.dll si False) (en fait, vous n'avez pas besoin de le savoir, la classe utilise exactement la bibliothèque dont vous avez besoin, mais tout à coup vous avez besoin de quelque chose que vous devez trouver dans votre programme) :

booléen is64bitDriver = LPT.IsX64DriverUsed ;

Pour écrire le nombre "123" dans le registre de contrôle LPT du port, appelez depuis votre classe :

LPT.Write(currentPort, LPT.Register.CONTROL, 123);

Pour lire un octet du registre de données LPT du port et lire le registre d'état :

Octet b = LPT.Read(currentPort, LPT.Register.DATA); octet s = LPT.Read(currentPort, LPT.Register.STATUS);

Ici port actuel - Adresse du port LPT. De plus, si vous avez un port LPT intégré, son adresse sera très probablement 378h. Et si vous avez un port LPT sur la carte d'extension, l'adresse sera différente, par exemple, J100h ou C100h.

Pour connaître l'adresse du port LPT, rendez-vous dans le gestionnaire de périphériques Windows, recherchez la section Ports COM et LPT, sélectionnez le port parallèle à utiliser, et dans la fenêtre des propriétés (en faisant un clic droit dessus) regardez quelles ressources le port sélectionné utilise (vous devez prendre la première valeur de la plage).


Par exemple, dans ce cas, vous devez utiliser le numéro de port C100.

Télécharger les pièces jointes :

  • Télécharger le pilote pour le port LPT (3281 téléchargements)

Connexion du contrôleur à l'aide d'un adaptateur USB-LPT

1 configuration pour que Mach3 fonctionne avec un adaptateur USB-LPT

1.1 Lorsque vous utilisez un adaptateur USB-LPT, vous devez copier le fichier mach3usb.dll dans le dossier c:\mach3\plugins.

1.2 Pour que l'appareil fonctionne, vous devrez également installer un pilote.

Pour ce faire, connectez l'adaptateur à USB prise informatique.

Nous attendons que le système d'exploitation détecte l'appareil connecté.

Ouvrir le "Panneau de configuration" →"Gestionnaire de périphériques", on retrouve dans la rubrique "Autres périphériques" - Contrôleur CNC, figure 1.

Image 1.

En faisant un clic droit dessus et en sélectionnant " DE propriétés", cliquez sur le bouton "Mettre à jour le pilote s".

Dans la fenêtre qui s'ouvre, sélectionnez l'élément "Rechercher des pilotes sur cet ordinateur (Rechercher et installer les pilotes manuellement)".

Spécifiez le chemin d'accès au dossier avec les pilotes, Figure 2.


Figure 2.

1.3 Lors du démarrage du programme de contrôle de la machine MACH3, vous devrez sélectionner dans la liste des appareils, Figure 3

figure 3

1.4 Configuration du plug-in mach3usb pour adaptateur USB-LPT.

Appuyez sur le bouton "Réinitialiser", Mach3 se connecte avec adaptateur. P Configurons le plugin. Pour cela, sélectionnez dans le menu « Config » l'item « Config pl u gins », Figure 4.


Figure 4

Appuyez sur le bouton "Config" en face de "mach3usb", la fenêtre de configuration du plugin s'ouvre, figure 5 .

Figure 5

1.5 Paramétrage du panneau « Micropas logiciel » (interpolation pas à pas logiciel).

Logiciel l'interpolation des pas du moteur permet un contrôle plus précis de la synchronisation, en particulier lorsque travailler à basse vitesse.le mouvement sera plus fluide eux et avec des niveaux de bruit inférieurs. Lors de l'utilisation d'un logiciel de dessin animé et plicateur pas à pas moteur dans "Plug-in Motion", M ach3 fonctionnera comme si paramètre " Pas à pas"dans les paramètres du moteur pas à pasplus élevé que physiquement, sans réduire la vitesse maximale. Pour N = 1 paramètres de fonctionnement des moteurs pas à pas de la machine Avec tvuyut installé dans p dans le menu "Réglage du moteur".

Entrer facteur de multiplication N > 1 et multiplier par le facteur Paramètre N " Pas à pas"dans les paramètres du moteur Réglage du moteur) Mach3, figure 6.

Figure 6

Après avoir terminé le réglage des paramètres,fermez la fenêtre des paramètres du plug-in. Plus loin appuyer sur "EStop" (Reset) aller à mode "Stop" et entrez de nouveau dans le mode "Start", pour recharger les paramètres de l'adaptateur.

2 paramètres de plug-in supplémentaires Adaptateur USB vers LPT

2.1 Désactivation automatique du signal "Enable"

Arrêt automatique du signal "Enable", après une période de temps définie, pendant laquelle aucun mouvement n'a été effectué. Si le champ est défini sur 0, le paramètre par défaut est utilisé - 500 ms. Lorsque cette fonction est désactivée, le signal "Activer" est désactivé en appuyant sur le bouton "E-Stop" (Réinitialiser).

2.2 Retour du fin de course de base (Home ).

Figure 7

Définit le retour du portail à partir du moment où le fin de course est déclenché lors de la recherche automatique des bases dans tous les axes. (Pour exclure les faux

déclenchements de recherche de base si un signal d'entrée est utilisé pour plusieurs interrupteurs de fin de course).

2.3 Utilisation des boutons "Cycle Start", "Feed Hold", "Stop" .

Figure 8

Lorsque le plugin est en cours d'exécution :

L'appui sur le bouton "Stop" entraîne un arrêt rapide du programme, avec la perte de tous les G- code contenu dans le tampon de données

En appuyant sur le bouton "Feed Hold", l'exécution du programme se poursuivra jusqu'à ce que le contenu de la mémoire tampon du programme soit épuisé.

Après avoir appuyé sur "Feed Hold ", pour continuer le travail correctement, appuyez sur le bouton " Regen toolpath" puis " Courir ", euh Cela garantit que le programme se poursuit correctement.

Figure 9

2.4 Minuterie.

Figure 10.

Activité : temps de pré-tampon au début

Inactivité : temps de détection d'étatarrêt/pause,ainsi que la resynchronisation des impulsions d'index

Réponse : l'heure de transmission des commandes d'état.Utilisé pour une mise en œuvre correcteétats stop, mouvement, synchronisation.

Lorsque vous utilisez des valeurs par défaut, les données saisies dans les champs de valeur ne sont pas utilisées. Les valeurs utilisées sont 100/300/300.

La minuterie ne s'applique pas aux commandes de déplacement. Les commandes de déplacement sont toujours exécutées immédiatement.

2.5 Panneau des paramètres d'entrée d'index, Figure 23.

Figure 11.

L'adaptateur dispose d'un indice entrée-sortie paramétrable 12.
l'entrée d'index prend en charge les fonctions suivantes :
- Mesure et indication du régime de la broche en Mach3 - "Mesure RPM".

Sync pause/start on en G-code lorsqu'une impulsion de synchronisation apparaît - « Sync pause/start on
pulse" (y compris en appuyant sur les boutons Pause / Start de l'écran principal de Mach3.)
- Synchronisation de l'avance de l'outil avec la vitesse de la broche - "Sync adaptor
vitesse avec RPM".
La synchronisation de l'avance avec le nombre de tours de la broche s'effectue au moyen
adaptateur et correspond à la formule :
A=(A1*B)/B1.
Où : A - approvisionnement à un instant donné ;
A1 - alimentation normale indiquée dans le code G ;
B - valeur mesurée du nombre de tours par minute de la broche ;
B1 - le nombre de tours de la broche à avance normale;
Le champ RPM est le nombre de tours à l'alimentation normale, le champ % est la quantité de nombre excédentaire
RPM au-dessus du point de consigne qui peut être suivi. Si le champ % est égal à zéro, le flux
est toujours inférieure ou égale à l'avance normale indiquée dans le code G.

2.6 Tampon.

Figure 12.

Parfois, il peut y avoir une discordance temporaire entre la ligne de code G affichée comme étant exécutée dans Mach3 et la ligne réellement exécutée, ainsi que le retard dans l'exécution des commandes Stop, Feed Hold. Cela est dû au propre tampon de commande de l'adaptateur.
Le tampon stabilise le fonctionnement en cas de pannes de communication à court terme entre l'adaptateur et l'ordinateur et lorsque le calcul de Mach3 ralentit. D'une part, plus le tampon est grand, plus le travail est stable, mais du fait que la taille du tampon peut atteindre des dizaines de kilo-octets, il peut y avoir des retards dans l'exécution des commandes FeedHold, Stop jusqu'à plusieurs secondes. Vous pouvez augmenter la vitesse de réponse en réduisant la valeur de la mémoire tampon à 0, mais le risque de plantage augmentera.

Nous vous recommandons vivement de faire sa connaissance. Vous y trouverez de nombreux nouveaux amis. C'est également le moyen le plus rapide et le plus efficace de contacter les administrateurs de projet. La section Mises à jour antivirus continue de fonctionner - mises à jour gratuites toujours à jour pour Dr Web et NOD. Vous n'avez pas eu le temps de lire quelque chose ? Le contenu complet du ticker est disponible sur ce lien.

Travailler avec le port LPT sous Win NT/2000/XP

Port LPT (L ine P rin J er) est un port d'interface parallèle, créé à l'origine pour connecter une imprimante. Le BIOS fournit la prise en charge du port LPT requise pour la sortie Centronics. L'espace d'adressage du port occupe la plage &H378-&H37F

Le port LPT a 12 lignes de sortie et 5 lignes d'entrée. Un si grand nombre de lignes permet de connecter un équipement simple au port, peut-être même sans son propre microcontrôleur. Par conséquent, ce port, malgré la disparition des imprimantes avec une interface LPT, est activement utilisé pour connecter de simples programmeurs de puces mémoire, des interfaces JTAG pour flasher (remplaçant le logiciel) des récepteurs satellites, des lecteurs DVD et d'autres équipements électroniques. Le port LPT est également populaire auprès des moddeurs, car il vous permet de connecter des écrans LCD à votre ordinateur sans créer de cartes d'interface complexes.

Windows 2000/XP ne permet pas aux applications d'accéder directement aux ports d'E/S. Pour ce faire, vous devez utiliser un pilote qui fonctionne en mode KERNEL (en mode noyau du système d'exploitation).

Restreindre l'accès aux ports d'E/S pour les programmes d'application réguliers (s'exécutant en mode utilisateur) rend le système d'exploitation plus stable. Bien que, d'un autre côté, personne n'empêche le programmeur d'écrire un pilote qui accède aux ports.

Fait intéressant, pour le processeur Intel x86, vous pouvez écrire un pilote qui utilise l'une des deux approches fondamentalement différentes. La première option est que le pilote lui-même accède aux ports et que le programme d'application indique uniquement au pilote ce qu'il doit faire. Cette option est généralement standard et préférée.

Pour résoudre le problème, il existe quatre options de pilote populaires qui permettent à un programme d'application d'accéder aux ports d'E/S : DLPortIO, chauffeur UserPort, chauffeur GiveIO.sis, chauffeur Port95nt.

Les quatre options sont presque équivalentes.

Pilote DLPortIO

DLportIO - pilote d'accès au port du package PiloteLINX par Scientific Software Tools, Inc. (http://www.sstnet.com) sous une forme abrégée (sans description et documentation inutile). Pour le fonctionnement normal des programmes de maintenance LCD, il est recommandé de cette version du pilote.

Le pilote lui-même se compose de deux composants :
. DLPortIO.dll - DLL Win32 qui fournit des E/S matérielles et
. DLPortIO.sys - pilote pour WinNT fonctionnant en mode noyau du système d'exploitation (non requis pour Win95/98)

Dans le package d'installation du pilote, en plus de ces deux composants, il y a aussi le fichier Install.exe, qui déplace les deux ci-dessus dans le dossier des pilotes Windows et les enregistre dans le système.

Il n'y a rien de plus à écrire sur ce pilote. Aucune configuration requise. Téléchargez, installez, utilisez. N'oubliez pas de regarder à la fin de l'article et de lire les performances du port LPT.

L'installation est élémentaire - exécutez le fichier Install.exe, installez. À la fin de l'installation, regardez dans le dossier C:\Windows\System32\drivers et vérifiez la présence de deux fichiers de pilote (DLPortIO.sys et DLPortIO.dll). Si nous constatons que ces fichiers n'ont pas été copiés, nous les prenons du package d'installation et les copions manuellement. Ne vous inquiétez pas, rien de mal n'arrivera à votre ordinateur. Nous redémarrons l'ordinateur et travaillons avec le port LPT.

Si soudainement, à la suite de manipulations avec l'équipement, vous recevez un message du pilote comme celui-ci : "pilote de périphérique dlportio.sys non chargé. Le port I/O n'aura aucun effet", pas de panique. Ce problème est résolu comme ceci :
. Nous commençons regedit.
. On va dans le registre à la branche HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.
. Dans le dossier dlportio, modifiez la valeur du paramètre début sur le 1 .
. Nous redémarrons l'ordinateur.

Pilote de port utilisateur

Chauffeur UserPort ouvre l'accès aux ports dans Win NT/2000/XP pour les programmes. Cette version du pilote de port LPT est le plus souvent utilisée par les "techniciens" qui travaillent avec des programmeurs et des JTAG, car le pilote possède au moins certains paramètres de configuration.Il peut également être utilisé pour exécuter des programmes de service LCD.

Il y a trois fichiers dans l'archive du pilote :
. UserPort.sys - pilote pour WinNT, fonctionnant en mode noyau du système d'exploitation,
. UserPort.exe - programme de configuration du pilote et
. UserPort.pdf - fichier de description.

Définition du port utilisateur :
. 1. Décompressez l'archive dans un dossier séparé.
. 2. Copiez le fichier UserPort.sys dans C:\Windows\System32\drivers

Paramètre du port utilisateur :
. Exécutez UserPort.exe.
. Un panneau avec 2 fenêtres apparaîtra devant nous.

La fenêtre de gauche fait référence au fonctionnement du programme dans la fenêtre DOS, celle de droite est en plein écran. Par défaut, ils contiennent des numéros de port LPT - tous peuvent être supprimés à l'aide du bouton "Supprimer". Dans les deux fenêtres, vous devez entrer les numéros de port souhaités que vous prévoyez d'utiliser.

Pour une utilisation à partir du pilote avec la plupart des programmeurs, des JTAG et des programmes de service d'affichage, ajoutez les options suivantes à la colonne de gauche :
378 , 379 et 37A pour LPT1
278 , 279 et 27A pour LPT2(Si l'adresse du port LPT est réaffectée dans le BIOS).

Laissez-moi vous expliquer ce que signifient les chiffres. 0x378 est l'adresse du port.
. Adresse 0x378 appelé de base et est utilisé pour écrire et lire Les données vers et depuis le port, sur le bus de données D0-D7.
. Adresse 0x379 (base+1) créé pour peu de lectureétat de l'appareil connecté au port LPT.
. Adresse 0x37A (base+2) sert pour enregistrements de bits contrôle de l'appareil connecté au port LPT.

Ajouter comme ceci :
0x378-0x378
0x37A-0x37A



Vous devez ajouter des adresses de port à la liste via la fenêtre de saisie et en utilisant le bouton "Ajouter". Adresse 0x379 le plus souvent, il n'est pas nécessaire et peut être omis, car il est destiné à peu de lectureétats d'un appareil connecté au port LPT, et la plupart des appareils (programmateurs, JTAG "et plus encore les indicateurs LCD) ne génèrent pas de signaux d'état. Si vous le souhaitez, vous pouvez au contraire saisir toute la plage d'adresses attribuées par le système pour le port LPT 0x378-0x37F.

Nous allons à Panneau de commande, Système, sélectionnez l'onglet Matériel, Gestionnaire de périphériques, allez dans Ports (COM et LPT) et regardez les propriétés du port LPT sur lequel vous souhaitez établir une connexion. Dans Propriétés, ouvrez l'onglet Ressources et regardez la valeur du paramètre Plage d'entrée/sortie (E/S). (Généralement sous Windows XP, c'est 378-37F)

Après avoir généré la liste des adresses, vous devez appuyer sur le bouton "Démarrer", le pilote sera lancé et un message apparaîtra :



Cliquez ensuite sur le bouton "Mettre à jour", le pilote sera enregistré dans le système, puis "Quitter". Bien sûr, il n'est pas nécessaire d'appuyer sur le bouton "Stop" pendant que nous utilisons le pilote.

Si le système redémarre lorsque vous cliquez sur le bouton "Mettre à jour", vous devez essayer de commencer à enregistrer le pilote sur le système avec des droits d'administrateur ou essayer de désactiver temporairement le pare-feu ou l'antivirus, ce qui peut bloquer les interférences avec les processus du système. Si quelque chose ne fonctionne pas, lisez UserPort.pdf

Pour vérifier si l'accès aux ports est apparu, vous pouvez exécuter le programme "lpt test.exe".

Après le démarrage du programme, une fenêtre apparaîtra avec le contenu suivant :



L'absence du message "Le port LPT est en cours de test (Adresse XXXh)" et les lignes qui le suivent indiquent que le pilote ne fonctionne pas.

Ce programme envoie simplement divers nombres au registre de données Dx et au registre de contrôle Ux du port LPT, puis les lit. Le registre d'état Sx du port LPT est en lecture seule. Le numéro et l'adresse du port LPT testé s'affichent à l'écran. Si le port est sain, aucun message ne doit être émis pour les registres Dx et Ux.



LPT-TEST v1.03 1995-2003 Copyright (C) S. B. Alemanov. Moscou "BINAR".
Pendant les tests, aucun périphérique ne doit être connecté aux ports.
Dx - rég. données (sortie), Ux - reg. contrôle (sortie), Sx - reg. état (inp).

Le port LPT1 est en cours de test (adresse 378h)
2ème contact (D0) - pas de "1"
3ème broche (D1) - pas de "1"
4ème broche (D2) - pas de "1"
5ème broche (D3) - pas de "1"
6ème broche (D4) - pas de "1"
7ème broche (D5) - pas de "1"
8ème broche (D6) - pas de "1"
9ème broche (D7) - pas de "1"
1er contact (U0) - pas de "1"
14ème broche (U1) - pas de "1"
17ème broche (U3) - pas de "1"
1er contact (U0) - pas de "0"
14ème contact (U1) - pas de "0"
17ème contact (U3) - pas de "0"
15ème contact (S3) - pas de "0"


Si les registres Dx ou Ux sont en défaut, alors le message "no 0" ou "no 1" est affiché et le numéro de la broche sur le connecteur LPT est indiqué (les signaux sur cette broche sont visualisables avec un oscilloscope). L'entrée du registre d'état Sx peut être "0" ou "1", mais généralement, lorsque rien n'est connecté au port LPT, toutes les entrées du registre d'état ont un "1". L'apparition du registre d'état "0" à l'entrée peut être un signe que l'entrée a été cassée, si auparavant il y avait toujours un "1".
Sur certaines machines, si le registre de données ou le registre de contrôle est défaillant, alors l'accès au port LPT n'apparaît pas du tout. Apparemment, lorsque l'ordinateur est allumé, le BIOS teste le port LPT et, s'il est défectueux, le désactive.

Si des problèmes surviennent, il est possible que certains pilotes interfèrent avec le travail, envoyant périodiquement des impulsions au port LPT (cela peut être vu avec un oscilloscope). Par exemple, vous pouvez vous déconnecter du port LPT dans les paramètres de l'imprimante :
désactiver LPT1 : port d'imprimante
activer FICHIER : Imprimer dans un fichier

Une fois tous les problèmes résolus et le test réussi, l'accès aux ports devrait apparaître et vous pouvez exécuter un programme à l'aide du port LPT. Sinon, le périphérique connecté au port d'une telle machine ne fonctionnera pas.

Pilote GiveIO.sys

En 1996, le programmeur américain Dale Roberts a mené une série d'expériences, qui ont abouti à un pilote GiveIO.sys. Jusqu'à présent, ce pilote reste l'un des outils populaires permettant à un programme d'application d'accéder aux ports d'E / S.

L'auteur du pilote lui-même recommande fortement que ce pilote soit utilisé uniquement à des fins de débogage. La version finale du programme d'application devrait, au lieu d'accéder indépendamment aux ports d'E / S, confier cette activité à un pilote écrit spécifiquement à cet effet. Le pilote doit se comporter "correctement" en vérifiant si le périphérique est déjà utilisé par une autre application.

Cependant, si vous êtes absolument sûr que personne d'autre n'utilise les ports d'E / S requis (par exemple, vous n'avez pas d'imprimante connectée au LPT), vous pouvez utiliser en toute sécurité le pilote GiveIO.sys.

Installation du pilote:

1. Téléchargez l'archive, décompressez et copiez le fichier GiveIO.sys dans le répertoire C:\Windows\System32\Drivers (on suppose que votre Windows est installé dans le répertoire C:\Windows).
. 2. Exécutez le fichier install.reg. Le message suivant apparaîtra à l'écran :


. 3. Nous répondons par l'affirmative. Un message apparaîtra indiquant que les informations ont été saisies avec succès dans le registre. Si vous le souhaitez, vous pouvez le vérifier. Nous lançons l'éditeur de registre regedit.exe et dans la branche HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveio vérifiez les entrées suivantes :


. 4. Nous redémarrons l'ordinateur et vérifions le fonctionnement des programmes qui utilisent le pilote.

chauffeur GiveIO.sys les gens utilisent activement et, au fil du temps, sont apparus et autres possibilités d'installation.

Par exemple, un conducteur GiveIO.sys s'il existe un fichier avec des "informations sur le matériel" GiveIO.inf peut être installé via l'applet "Install Hardware".




Nous allons montrer le pilote GiveIO.sys au système d'exploitation afin qu'il croie en l'existence du matériel "GiveIO".

Télécharger un ensemble de fichiers pour cette option d'installation du pilote GiveIO.sys(donnezio_sys_v2.rar - 78kb). L'archive contient les fichiers GiveIO.sys et GiveIO.inf, ainsi que des instructions d'installation détaillées avec des illustrations.

En plus des options d'installation "manuelle" du pilote, plusieurs options d'installation ont été écrites pour effectuer l'installation en mode automatique.

Télécharger un ensemble de fichiers pour l'installation automatique du pilote GiveIO.sys(giveio_sys_install.rar - 28kb). L'archive contient les fichiers GiveIO.sys et instdrv.exe, ainsi que le fichier remove-giveio.cmd, avec lequel le pilote GiveIO.sys peut être retiré du système.

Pilote Port95nt

Le terme " chauffeur Port95nt" ne sera pas tout à fait correct ici. En fait, c'est le même pilote DLPortIO du paquet PiloteLINX de Outils logiciels scientifiques, Inc., uniquement dans sa version complète, avec quelques utilitaires de gestion de ports, avec une description et de nombreux exemples pour les programmeurs. Pour un utilisateur ordinaire, les composants supplémentaires ne présentent aucun avantage et les composants des pilotes DLPortIO.sys et DLPortIO.dll sont exactement les mêmes que dans la version réduite.

Mentionné Port95nt comme pilote pour deux raisons. La première concerne l'exhaustivité de la liste des références aux pilotes de port LPT trouvées sur Internet.

La deuxième raison est que dans certains cas, il peut y avoir des problèmes lors de l'installation d'une version réduite de DLPortIO sous WinXP. Habituellement, mais rarement, cela se produit dans les versions "auteur" simplifiées de WinXP. Dans ce cas, vous pouvez prendre la version complète du programme d'installation (1,5 Mo). Bien que, à mon avis, il sera plus rapide de placer manuellement DLPortIO.sys et DLPortIO.dll dans le bon dossier que de s'embêter avec la sélection d'un programme d'installation qui peut le faire pour vous.

Mesures supplémentaires

En plus d'installer l'un des pilotes ci-dessus, pour le fonctionnement normal du port LPT sous WinXP, vous devez modifier le registre à l'aide d'un fichier REG xp_stop_polling.reg(xp_stop_polling.rar - 0.48kb)

Sous WinXP, les appareils utilisant le port LPT fonctionnent parfois de manière instable. La raison de ces échecs peut être le travail du sous-système Plug-and-Play (PnP) de Windows, interrogeant périodiquement le LPT afin de détecter les périphériques connectés. Une telle interrogation est effectuée lorsque le système démarre, mais elle peut également se produire pendant le fonctionnement. Malheureusement, le pilote DLportIO.sys et les autres options du pilote ne bloquent pas l'accès à LPT à partir d'autres programmes lorsque vous travaillez avec le port client de ce pilote, et le sous-système PnP est sûr que le port n'est pas occupé, y accède et perturbe le fonctionnement de périphériques externes. Pour résoudre le problème et utiliser le fichier .reg xp_stop_polling.reg. Ce fichier définit une clé dans le registre Windows qui interdit une telle interrogation (sondage) pendant que le système est en cours d'exécution.

En plus d'installer le pilote et de restreindre l'accès simultané au port pour les programmes, afin d'assurer la compatibilité matérielle et le fonctionnement normal de l'équipement avec un port LPT, il est nécessaire de régler le BIOS sur adresse correcte et mode de fonctionnement des ports("Normal", SPP ou EPP, mais pas ECP).

Les paramètres suivants sont sujets à configuration via la configuration du BIOS :

Adresse de base, qui peut être 378h, 278h et 3BCh. Lors de l'initialisation, le BIOS vérifie la présence de ports aux adresses dans cet ordre et, en conséquence, attribue les noms logiques LPT1, LPT2, LPT3 aux ports détectés. L'adresse 3BCh a un adaptateur de port situé sur la carte MDA ou HGC (les précurseurs des cartes graphiques modernes). La plupart des ports sont configurés pour adresser 378h par défaut et peuvent être commutés sur 278h.

La ligne de demande d'interruption utilisée, IRQ7 est généralement utilisée pour LPT1, IRQ5 pour LPT2. De nombreuses applications "de bureau" n'utilisent pas les interruptions d'imprimante, et cette ressource PC rare peut être épargnée. Cependant, lors de l'utilisation des modes de vitesse ECP (Fast Centronics), l'opération d'interruption peut augmenter considérablement les performances et réduire la charge du processeur.

Dans le même temps, le mode ECP ne peut pas être utilisé avec des appareils nécessitant des délais serrés (programmateurs et interfaces JTAG).

En conclusion, un peu de terminologie:

. PSP(Port parallèle standard - port parallèle standard). Souvent, pour faciliter la compréhension, dans le BIOS, "e" est désigné par le terme " Normal".
. PPE(Port parallèle amélioré - port parallèle étendu) - option d'interface bidirectionnelle à haut débit. Le but de certains signaux a été modifié, la possibilité d'adresser plusieurs dispositifs logiques et une entrée de données 8 bits a été introduite, un tampon FIFO matériel de 16 octets a été introduit. Le taux de change maximum est de 2 Mb/s.
. ECP(Enhanced Capability Port) est une version intelligente d'EPP. La possibilité de diviser les informations transmises en commandes et données, la prise en charge du DMA et la compression des données transmises à l'aide de la méthode RLE (Run-Length Encoding - codage de séries répétées) ont été introduites.


Considérons donc l'option suivante pour travailler avec les ports d'E/S dans Windows NT. Cette "option" sera un pilote spécial GiveIO.sys, qui permet à l'application qui l'a lancé de fonctionner librement avec n'importe quel port. Ce pilote a écrit Dale Robert Dieu sait quand, mais il n'a pas perdu sa pertinence à ce jour.



Bref, je vais vous dire comment ça marche : au début de notre programme pour communiquer avec les ports, il faut contacter le chauffeur GiveIO.sys. Ce faisant, il définira le bitmap du système I/O Permission Map pour notre application sur une valeur telle qu'elle sera autorisée à accéder directement à tous les ports. Carte des autorisations d'E/S fait partie intégrante du système de protection des E/S de Windows NT. Il s'agit d'un bitmap dont chaque bit correspond à un port d'E/S. Si bit = 1, alors l'accès au port est fermé, si 0, alors l'accès est ouvert. Pour toute application utilisateur, tous les bits sont définis sur 1, et nous ne pouvons donc pas directement interférer avec le fonctionnement du port. GiveIO.sys "s'introduit" impudemment dans ce tableau et définit 0 partout - c'est-à-dire nous avons la possibilité d'accéder à n'importe quel port depuis l'application.



Tout d'abord, téléchargez l'archive avec le pilote et le fichier d'installation :


Nous devons maintenant enregistrer et installer le pilote dans le système. Pour ce faire, vous devez effectuer un certain nombre d'opérations. Tout d'abord, copiez le fichier du pilote GIVEIO.sys dans le dossier C:\Windows\system32\drivers\ si, bien sûr, votre système est installé sur un disque DE:\ et vous n'avez pas modifié les chemins d'installation de Windows.

Cliquez sur Oui. Dans ce cas, vous recevrez un message sur l'entrée réussie des informations dans le registre. Vous pouvez vérifier cela. Dans le programme de l'éditeur de registre regedit.exe dans la branche HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\giveio vous pouvez voir ce qui suit :

Pour que les modifications que nous avons apportées prennent effet, vous devez impérativement REDÉMARRER L'ORDINATEUR.


Il est temps de commencer la programmation. Dans notre code de programme port.exe(voir ) nous apporterons quelques modifications qui lui permettront d'accéder aux ports non seulement sous Windows 9x comme c'était le cas auparavant, mais aussi sous Windows NT. Le code final ressemblera à :

#include "iostream.h" #include "conio.h" #include "stdlib.h" #include "windows.h" int main() ( int Adresse = 888; cout<<"Test LPT port with GiveIO.sys"<

Tout. Compilez, exécutez. On clique sur 1-0 : tout devrait fonctionner. Si un message apparaît Erreur! Impossible d'ouvrir le pilote ! Appuyez sur n'importe quelle touche pour quitter..., l'installation du pilote a échoué et vous devez le réinstaller à nouveau.

Grâce à giveio.sys les scripts assembleur suivants fonctionneront également correctement :

Asm ( mov dx, 378h mov al, 1 out dx, al )

© Dmitri Ivanov
2005-2006