Casa / Servizio Online / Driver per lpt su Windows 7. Porte (COM e LPT). Installazione del driver per lavorare con la porta LPT

Driver per lpt su Windows 7. Porte (COM e LPT). Installazione del driver per lavorare con la porta LPT

Tutti coloro che tentano di collegare qualsiasi dispositivo alla porta LPT devono affrontare questo problema. Non appena dici al programma "usa LPT", riceverai un errore: è mostrato nello screenshot a destra. Quindi, proviamo a capirlo e risolverlo.

Mi sono imbattuto in questo quando ho aggiunto una scheda controller con porte 1-LPT e 2-COM. C'era una precisa necessità di questo: collegare il decodificatore di banda RU -005A. Questo sarà discusso nel prossimo articolo. Nel frattempo, vorrei ottenere una porta LPT correttamente funzionante in Win -Test in Windows -7 (64 bit).

I computer moderni non hanno una porta parallela da un po' di tempo ormai. In alternativa, puoi inserire un controller aggiuntivo. Non aver paura di questa parola, non c'è niente di terribile in essa. Il motivo per cui si verifica l'errore precedente è semplice: il driver e la libreria DriverLINX (DLPortIO.sys + DLPortIO.dll) non esistono per le versioni di Windows con architettura x86-64 (AMD64, Intel64). Lo sviluppatore Scientific Software Tools Inc ha smesso di supportare il driver, trasferendolo a un'altra società e ha optato solo per la versione a 32 bit. Microsoft alza le spalle e lo invia al produttore. Tuttavia, c'è un buon pacchetto: questo è InpOut32 (hwinterface.sys + inpout32.dll) e persino una versione a 64 bit di InpOutx64 con il driver hwinterfacex64.sys.

Passiamo dalla teoria all'attuazione pratica. Disponibile:

  • Win-Test versione 4.10 aggiornata alla Revisione: 524 versione datata 13 luglio 2013.
  • Windows 7 Ultimate (64 bit) con tutti gli aggiornamenti.
  • Intel Core i7-3770 (3,4 GHz) + PC3-10700 (667 MHz) 8x2=16 Gb + Asus P8Z77-V LX
  • Controller * PCI COM/LPT (2+1) porta WCH353 bulk

Installazione del controller

Il controller in sé non è niente di interessante in effetti e il suo nome fornisce un quadro quasi completo: due porte COM e una LPT, è installato in PCI. Il dispositivo stesso è economico e costa 360 rubli (circa $ 12), prodotto in Cina.

La confezione era OEM. Sono inclusi due cavi con porte COM su una staffa e un disco con presunti driver. Non li ho installati, perché sapevo già in anticipo: non si adattano. Tutte le strade portavano al sito del produttore. Per ogni evenienza, do un collegamento e pubblico lo stesso driver nell'archivio.


La procedura per l'installazione del controller non ha causato problemi: tutto è abbastanza semplice. Spegniamo il computer, lo installiamo in uno slot PCI libero, lo accendiamo, installiamo il driver. Il pacchetto include un programma di installazione. La sua interfaccia non è complicata e comprensibile. Tutto è andato bene per me sul rilevamento automatico del tipo di scheda ed è bastato cliccare solo su Installa driver. Il processo di installazione è accompagnato da una striscia mobile sull'interfaccia, tutto è molto chiaro.

Il programma consente di riassegnare le porte, se necessario. Ad esempio, se sono presenti porte COM virtuali. A tale scopo, dopo l'installazione, fare clic su Informazioni e sul pulsante Modifica nome porta.

Gli screenshot forniti non hanno bisogno di commenti speciali, fai clic e le immagini diventeranno più grandi. Tutto è nelle tue mani: configura le nuove porte che sono apparse a tua discrezione e per le tue esigenze.

Il risultato finale che l'installazione ha avuto successo dovrebbe essere la presenza di questi dispositivi in ​​Gestione dispositivi sul computer. Vai lì e controlla. Nel mio caso, la scheda madre aveva già una porta COM integrata (beh .. ne ho bisogno). Di conseguenza, l'elenco delle porte risultava così:

È possibile che tu debba conoscere l'indirizzo di questa porta e specificarlo correttamente nelle impostazioni del programma in cui verrà utilizzata questa porta. Gli indirizzi di porta predefiniti dovrebbero essere:

LPT -1 - 378

LPT-2 - 278

LPT -3 - 3BC

Nel nostro caso, differiranno dai soliti valori, perché queste porte non sono integrate sulla scheda madre e il modo per comunicare con esse avviene tramite il bus PCI. Nella mia versione ha funzionato D010(usiamo il primo valore). Pertanto, prima di installare (acquistare) un tale controller, verifica se il tuo programma ha la capacità di impostare altri intervalli di I/O.

Tuttavia, i driver contengono una piccola utilità che consente di riassegnare tali indirizzi (non l'ho capito, non ce n'è bisogno).

Circa 10-15 anni fa, la porta parallela era un'interfaccia abbastanza popolare per la comunicazione tra dispositivi. Oggi i produttori di vari dispositivi preferiscono le interfacce seriali. Tuttavia, oggi è ancora possibile trovare la porta LPT. E alcuni sviluppatori scrivono ancora programmi per esso (o supportano quelli scritti durante il periodo d'oro delle interfacce parallele). Ma nei computer ora la porta LPT è piuttosto una rarità. Ci sono, ovviamente, schede di espansione per computer che implementano l'interfaccia LPT. Sono fondamentalmente schede sul bus PCI. Sfortunatamente, non tutto il software che è stato scritto per le porte LPT integrate nella scheda madre funzionerà con le schede LPT-PCI.

Viene proposta una soluzione a questo problema: una classe di programma scritta in .NET e una libreria dinamica che funziona con LPT. Questa implementazione è stata testata su Windows XP, Windows 7, 8 e 10 a 32 e 64 bit, entrambi con porte LPT integrate e implementate come schede di espansione sul bus PCI o PCI-Express. È possibile scaricare il driver per la porta LPT dal collegamento seguente dopo l'articolo.

1 Installazione del driver per lavorare con la porta LPT

L'archivio allegato contiene due cartelle: per le versioni a 32 bit e per le versioni a 64 bit di Windows. Una delle cartelle contiene un file InstallDriver.exe. Per prima cosa esegui questo file, installerà le librerie dinamiche sul sistema. Successivamente, il computer dovrebbe essere riavviato.

Per utilizzare il driver suggerito, i file input32.dll e inputx64.dll deve trovarsi nella stessa directory del file eseguibile del programma.

2 Classe di programma che utilizza le librerie funziona con la porta LPT

Ho scritto una classe per .NET che utilizza librerie dinamiche input32.dll e inputx64.dll e consente di leggere i dati dalla porta parallela e di scrivere i dati nei suoi registri.

Le librerie citate non sono scritte da me. Propongo una comoda classe wrapper che semplifica il lavoro con queste librerie. Inoltre, l'autore delle librerie nel file leggimi.txt segnala che il suo driver non supporta i dispositivi PCI. Sono riuscito a farlo funzionare per funzionare sia con la porta parallela integrata che con la porta LPT implementata come scheda di espansione sul bus PCI-Express. Inoltre, il port funziona bene sia sui moderni Windows10 x64 che sui sistemi meno recenti.

Ecco il codice della classe LPT in VB.NET:

Codice classe LPT in VB.NET(si espande) Importa System.Runtime.InteropServices """ """ Lavorare con la porta LPT. Durante la creazione, rileva la presenza di un driver e seleziona la libreria appropriata. """ Public Const 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" """ """ Registri porta parallela. """ Registro enum pubblico come intero """ """ Registro dati SPP/EPP. """ DATI = 0 """ """ Registro stato SPP/PPE. """ STATO = DATI + 1 """ """ Registro di controllo SPP/EPP. """ CONTROLLO = DATI + 2 """ """ Registro indirizzi EPP. La lettura o la scrittura su di esso genera un ciclo di lettura o scrittura associato dell'indirizzo EPP. """ INDIRIZZO_PPE = DATI + 3 """ """ Registro dati EPP. Lettura (scrittura) genera un ciclo di dati EPP di lettura (scrittura) associato. """ EPP_DATA = DATI + 4 """ """ Registro di abilitazione modalità EPP. """ """ """ Se solo misto "ECP + EPP" o "Extended" - molto probabilmente dovrai anche scrivere il byte 0x80 """ sulla porta ECR (ECR è il registro della modalità ECP, ECR=BASE_ADDR+0x402, BASE_ADDR è il indirizzo di base della porta LPT """ ECR = DATA + &H402 "TEST End Enum #End Region"/CONST #Region "DllImport" Funzione condivisa privata IsInpOutDriverOpen() come funzione di fine byte Funzione condivisa privata IsInpOutDriverOpen_x64() come funzione finale UInt64 Funzione condivisa privata Inp32 (PortAddress As UInt32) come funzione di fine byte Sub condiviso privato Out32(portAddress As UInt32, data As UInt32) End Sub Funzione condivisa privata Inp64 (PortAddress As UInt64) come funzione di fine byte Private Shared Sub Out64(PortAddress As UInt64, Data As UInt64) End Sub #End Region "/DllImport #Region "CTOR" """ """ Verifica se è possibile utilizzare il driver x86 o x64. In caso contrario, genera un'eccezione "driver non installato". """ 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 ("Driver per la porta LPT non installato.") End If Sottotitoli """ """ Inizializzazione porta - impostazione XXXX0100"b nel registro di controllo. """ Private Shared Sub InitLpt(port As ULong) Write(port, Register.ECR, &H80) Write(port, Register.CONTROL, &H4) End Sub #End Region "/CTOR #Region "PROPS" """ """ Se il driver è a 64 bit. """ Restituisce NULL se il driver non è installato. """ Proprietà pubblica condivisa di sola lettura IsX64DriverUsed as Boolean? Ottieni Ritorno _IsX64DriverUsed End Ottieni End Proprietà Privato Condiviso Sola lettura _IsX64DriverUsed As Boolean? = Niente #End Region "/PROPS #Region "METHODS" """ """ Specifica se il driver è a 32 bit. """ Funzione condivisa privata CheckIsDriverX86() As Boolean Try Dim res As Byte = IsInpOutDriverOpen() Restituisce True Catch ex As Exception Restituisce False End Try End Function """ """ Specifica se il driver è a 64 bit. """ Funzione condivisa privata CheckIsDriverX64() As Boolean Prova Dim nResult As ULong = IsInpOutDriverOpen_x64() Return (nResult<>0) Cattura ex come eccezione Ritorna False End Prova End Funzione #End Region "/METHODS #Region "Leggi/Scrivi porta LPT" """ """ Legge 1 byte di dati dal registro LPT della porta specificato. """ """ Numero di porta. """ registro di porto. Funzione condivisa pubblica Read(port As ULong, Optional reg 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) )) End If Restituisce i dati End Function """ """ Scrive un numero nel registro LPT della porta specificato. """ """ Indirizzo della porta. """ registro di porto. """ Public Shared Sub Write(porta 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 """ """ Verifica la presenza di una porta LPT all'indirizzo specificato. """ """ Indirizzo della porta parallela. Funzione condivisa pubblica CheckPortPresent(lptAddress As ULong) As Boolean Dim portPresent As Boolean = False Prova 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 ) )) Scrivi(lptAddress, Register.DATA, &HAA) portPresent = portPresent And (&HAA = Read(lptAddress, Register.DATA)) Scrivi(lptAddress, Register.DATA, data) dati se la porta non viene trovata (in caso di una porta unidirezionale) If (Not portPresent) Then data = Read(lptAddress, Register.CONTROL) portPresent = ((data<>0) E anche (dati<>&HFF)) "Not null? => Porta presente. If (Not portPresent) Then data = Read(lptAddress, Register.STATUS) portPresent = ((data<>0) E anche (dati<>&HFF)) End If End If Catch ex As Exception Return False End Try Return portPresent End Function End Class "/LPT

Codice classe LPT in C#:

Codice classe LPT in C#(si espande) utilizzando il sistema; utilizzando System.Diagnostics; utilizzando System.Runtime.InteropServices; namespace LPTIO ( /// Classe per lavorare con una porta LPT. Quando viene creata, determina la presenza di un driver e il suo bit. LPT pubblico di classe sigillata( private const string DLL32 = "inpout32.dll"; private const string DLL64 = "inpoutx64.dll"; private static bool _IsX64DriverUsed; /// Se il driver è public static bool a 64 bit IsX64DriverUsed ( get ( return LPT._IsX64DriverUsed ; ) ) LPT statico()( if (LPT.getIsDriverX86()) ( LPT._IsX64DriverUsed = false; ) else ( if (!LPT.getIsDriverX64()) genera una nuova SystemException ("Driver per la porta LPT non installato."); LPT._IsX64DriverUsed = true; ) ) public LPT() ( ) byte esterno statico privato IsInpOutDriverOpen(); esterno statico privato ulong IsInpOutDriverOpen_x64(); byte esterno statico privato Inp32(uint PortAddress); private static extern void Out32(uint portAddress, uint data); byte esterno statico privato Inp64(ulong PortAddress); void esterno statico privato Out64(ulong PortAddress, ulong Data); /// Determina se il driver è per Windows a 32 bit. privato statico bool getIsDriverX86()( bool flag; try ( LPT.IsInpOutDriverOpen(); flag = true; ) catch (Exception ex) ( ProjectData.SetProjectError(ex); flag = false; ProjectData.ClearProjectError(); ) return flag; ) /// Determina se il driver è per Windows a 64 bit. privato statico bool 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(); ) flag di ritorno; ) /// Legge 1 byte di dati dalla porta LPT. /// Numero di porta. /// registro di porto. byte statico pubblico Read(porta ulong, 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 Decimal(port), new Decimal((int) reg)))); ) /// Scrive un numero sulla porta LPT. /// Indirizzo della porta. /// registro di porto. /// Il numero da scrivere. Nei sistemi a 32 bit, l'argomento non deve essere maggiore del valore massimo per il tipo UInt32. public static void Write (porta ulong, LPT.Register reg, dati ulong)( if (LPT.IsX64DriverUsed) ( LPT.Out64(checked (port + (ulong) (uint) reg), data); ) else ( if (data > (ulong) uint.MaxValue) throw new ArgumentException("In 32- nei sistemi a bit, l'argomento deve essere a 32 bit (tipo UInt32).", "data"); LPT.Out32(Convert.ToUInt32(Decimal.Add(new Decimal(port), new Decimal((int) reg)) ), verificato ((uint) data)); ) ) /// Registri porta LPT. enum pubblico Registro( DATI, STATO, CONTROLLO, ) ) )

3 Applicazione di una classe .NET per lavorare con la porta LPT

Se guardiamo l'elenco delle funzioni di libreria esportate input32.dll con uno strumento meraviglioso Visualizzatore di esportazione DLL da NirSoft, vedremo la seguente immagine:

Questo è un elenco di funzioni che possiamo utilizzare. In effetti, tutti sono usati nella classe LPT, ma l'implementazione è nascosta e dei metodi pubblici solo due metodi e una proprietà sono disponibili per l'utente (ne verranno discussi un po' più avanti).

Durante la creazione di un'istanza, la classe stessa determinerà quale libreria di bit utilizzare - input32.dll o inputx64.dll. Pertanto, all'utente non è richiesto di intraprendere alcuna azione per inizializzare o determinare la profondità di bit dell'utilizzato dll. È possibile scrivere o leggere immediatamente dalla porta LPT. Un "Ma": se il driver non è installato, l'accesso a uno qualsiasi dei metodi della libreria dinamica genererà un'eccezione, quindi consiglio di utilizzare i blocchi Prova a prendere per catturare e gestire le eccezioni.

Alcuni esempi di utilizzo della classe LPT.

Per determinare se viene utilizzata una versione del driver a 64 bit (inpoutx64.dll se True) o a 32 bit (inpout32.dll se False) (infatti, non è necessario saperlo, la classe utilizza esattamente la libreria di cui hai bisogno, ma improvvisamente tu per qualcosa che devi scoprire dal tuo programma):

bool is64bitDriver = LPT.IsX64DriverUsed;

Per scrivere il numero "123" nel registro di controllo LPT della porta, chiama dalla tua classe:

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

Per leggere un byte dal registro dati LPT della porta e leggere il registro di stato:

Byte b = LPT.Read(currentPort, LPT.Register.DATA); byte s = LPT.Read(currentPort, LPT.Register.STATUS);

Qui porta corrente - Indirizzo della porta LPT. Inoltre, se hai una porta LPT integrata, molto probabilmente sarà il suo indirizzo 378 ore. E se hai una porta LPT sulla scheda di espansione, l'indirizzo sarà diverso, ad esempio, D100h o C100h.

Per scoprire l'indirizzo della porta LPT, vai su Gestione dispositivi di Windows, trova la sezione Porte COM e LPT, seleziona la porta parallela utilizzata e nella finestra delle proprietà (facendo clic con il pulsante destro del mouse su di essa) osserva quali risorse utilizza la porta selezionata (devi prendere il primo valore dall'intervallo).


Ad esempio, in questo caso, è necessario utilizzare il numero di porta C100.

Scarica allegati:

  • Scarica il driver per la porta LPT (3281 download)

Collegamento del controller tramite un adattatore USB-LPT

1 Configurazione per Mach3 per funzionare con l'adattatore USB-LPT

1.1 Quando si utilizza un adattatore USB-LPT, è necessario copiare il file mach3usb.dll nella cartella c:\mach3\plugins.

1.2 Affinché il dispositivo funzioni, dovrai anche installare un driver.

Per fare ciò, collegare l'adattatore a USB porta del computer.

Stiamo aspettando che il sistema operativo rilevi il dispositivo connesso.

Apertura del "Pannello di controllo" →"Gestione dispositivi", lo troviamo nella sezione "Altri dispositivi" - Controller CNC, figura 1.

Immagine 1.

Cliccandoci sopra con il tasto destro e selezionando " DA proprietà", fare clic sul pulsante "Aggiorna driver S".

Nella finestra che si apre, seleziona la voce "Cerca driver su questo computer (Cerca e installa driver manualmente)".

Specificare il percorso della cartella con i driver, Figura 2.


Figura 2.

1.3 Quando si avvia il programma di controllo macchina MACH3, sarà necessario selezionare dall'elenco dei dispositivi, Figura 3

Figura 3

1.4 Configurazione del plug-in mach3usb per adattatore USB-LPT.

Premi il pulsante "Ripristina", Mach3 si collega con adattatore. P Configuriamo il plugin. Per fare ciò, selezionare nel menu “Config” la voce “Config pl u gins”, Figura 4.


Figura 4

Premere il pulsante "Config" di fronte a "mach3usb", si apre la finestra di configurazione del plugin, figura 5 .

Figura 5

1.5 Configurazione del pannello “Software microstep” (interpolazione software step).

Software l'interpolazione del passo del motore consente un controllo della temporizzazione più preciso, specialmente quando lavorare a basse velocità. D il movimento sarà più fluido loro e con livelli di rumorosità inferiori. Quando si utilizza il software cartoon e plicatore di passi motori in "Plugin Motion", M ach3 funzionerà come se parametro " Passo per"nelle impostazioni del motore passo-passosuperiore a quella fisica, senza ridurre la velocità massima. Per N = 1 parametri di funzionamento dei motori passo passo della macchina Insieme a tvuyut installato a p nel menu “Moto Tuning”.

accedere fattore di moltiplicazione N > 1 e moltiplicare per il fattore parametro N " Passo per"nelle impostazioni del motore Motor Tuning) Mach3, figura 6.

Figura 6

Dopo aver terminato di impostare i parametri,chiudere la finestra delle impostazioni del plug-in. Ulteriore premere "EStop" (Reset) vai a Modalità "Stop" e rientrare nella modalità "Start", per ricaricare i parametri dell'adattatore.

2 Impostazioni aggiuntive del plug-in Adattatore da USB a LPT

2.1 Disattivazione automatica del segnale "Abilitazione".

Spegnimento automatico della segnalazione di “Abilitazione”, dopo un determinato periodo di tempo, durante il quale non sono stati effettuati movimenti. Se il campo è impostato su 0, viene utilizzato il parametro predefinito: 500 ms. Quando questa funzione è disabilitata, il segnale "Abilita" viene disattivato premendo il pulsante "E-Stop" (Reset).

2.2 Ritorno da finecorsa base (Home ).

Figura 7

Imposta il ritorno del portale dal momento in cui viene attivato il finecorsa durante la ricerca automatica delle basi in tutti gli assi. (Per escludere il falso

la ricerca di base scatta se un segnale di ingresso viene utilizzato per più finecorsa).

2.3 Utilizzo dei pulsanti "Cycle Start", "Feed Hold", "Stop". .

Figura 8

Quando il plugin è in esecuzione:

La pressione del pulsante "Stop" porta ad un rapido arresto del programma, con la perdita di tutti i G- codice contenuto nel buffer di dati

Premendo il pulsante "Feed Hold", l'esecuzione del programma proseguirà fino all'esaurimento del contenuto del buffer del programma.

Dopo aver premuto "Feed Hold ", per continuare il lavoro correttamente, premere il pulsante " Rigenera percorso utensile", quindi " Correre ", eh Ciò garantisce che il programma continui correttamente.

Figura 9

2.4 Timer.

Figura 10.

Attività: tempo di pre-buffer all'inizio

Inattività : tempo di rilevamento dello statoferma/pausa,così come la risincronizzazione degli impulsi di indice

Risposta : tempo di trasmissione dei comandi di stato.Utilizzato per una corretta implementazionestati stop, movimento, sincronizzazione.

Quando si utilizzano valori predefiniti, i dati inseriti nei campi valore non vengono utilizzati. I valori utilizzati sono 100/300/300.

Il timer non si applica ai comandi di spostamento. I comandi di spostamento vengono sempre eseguiti immediatamente.

2.5 Pannello delle impostazioni di input dell'indice, Figura 23.

Figura 11.

L'adattatore ha un indice input-output 12 configurabile.
input di indice supporta le seguenti funzioni:
- Misurazione RPM mandrino e indicazione in Mach3 - “Misurazione RPM”.

Sincronizza pausa/avvio in codice G quando viene visualizzato un impulso di sincronizzazione
pulsazioni” (anche premendo i pulsanti Pausa/Avvio della schermata principale di Mach3.)
- Sincronizzazione dell'avanzamento utensile con la velocità del mandrino - “Sincronizza adattatore
velocità con RPM".
La sincronizzazione della velocità di avanzamento con il numero di giri del mandrino avviene tramite mezzi
adattatore e corrisponde alla formula:
A=(A1*B)/B1.
Dove: A - fornitura in un dato momento;
A1 - alimentazione normale indicata nel codice G;
B - valore misurato del numero di giri al minuto del mandrino;
B1 - il numero di giri del mandrino ad avanzamento normale;
Il campo RPM è il numero di giri all'avanzamento normale, il campo % è la quantità di numero in eccesso
RPM oltre il setpoint che può essere monitorato. Se il campo % è zero, allora il feed
è sempre minore o uguale al feed normale indicato nel codice G.

2.6 Buffer.

Figura 12.

A volte potrebbe esserci una mancata corrispondenza temporanea tra la riga del codice G visualizzata come eseguita in Mach3 e la riga effettivamente eseguita, nonché il ritardo nell'esecuzione dei comandi Stop, Feed Hold. Ciò è dovuto al buffer dei comandi dell'adattatore.
Il buffer stabilizza il funzionamento in caso di problemi di comunicazione a breve termine tra l'adattatore e il computer e quando il calcolo di Mach3 rallenta. Da un lato, più grande è il buffer, più stabile è il lavoro, ma poiché la dimensione del buffer può raggiungere decine di kilobyte, potrebbero esserci ritardi nell'esecuzione dei comandi FeedHold, Stop fino a diversi secondi. È possibile aumentare la velocità di risposta riducendo il valore del buffer a 0, ma la possibilità di crash aumenterà.

Consigliamo vivamente di conoscerlo. Lì troverai molti nuovi amici. È anche il modo più rapido ed efficiente per contattare gli amministratori del progetto. La sezione Aggiornamenti antivirus continua a funzionare: aggiornamenti gratuiti sempre aggiornati per Dr Web e NOD. Non hai avuto il tempo di leggere qualcosa? Il contenuto completo del ticker è disponibile a questo link.

Lavorare con la porta LPT in Win NT/2000/XP

Porta LPT (l ine P rin T er) è una porta di interfaccia parallela, originariamente creata per il collegamento di una stampante. Il BIOS fornisce il supporto della porta LPT richiesta per l'output Centronics. Lo spazio degli indirizzi della porta occupa l'intervallo &H378-&H37F

La porta LPT ha 12 linee di uscita e 5 linee di ingresso. Un numero così elevato di linee consente di collegare alla porta semplici apparecchiature, magari anche senza un proprio microcontrollore. Pertanto, questa porta, nonostante la scomparsa delle stampanti con interfaccia LPT, viene utilizzata attivamente per collegare semplici programmatori di chip di memoria, interfacce JTAG per il flashing (sostituzione del software) ricevitori satellitari, lettori DVD e altre apparecchiature elettroniche. La porta LPT è anche popolare tra i modder, perché consente di collegare display LCD al computer senza creare complesse schede di interfaccia.

Windows 2000/XP non consente alle applicazioni di accedere direttamente alle porte I/O. Per fare ciò, è necessario utilizzare un driver che funzioni in modalità KERNEL (nella modalità kernel del sistema operativo).

La limitazione dell'accesso alle porte I/O per i normali programmi applicativi (in esecuzione in modalità utente) rende il sistema operativo più stabile. Anche se, d'altra parte, nessuno impedisce al programmatore di scrivere un driver che acceda alle porte.

È interessante notare che per il processore Intel x86, puoi scrivere un driver che utilizza uno dei due approcci fondamentalmente diversi. La prima opzione è che il driver stesso acceda alle porte e il programma applicativo dice solo al driver cosa fare. Questa opzione è generalmente standard e preferita.

Per risolvere il problema, esistono quattro popolari opzioni di driver che consentono a un programma applicativo di accedere alle porte I/O: DLPortIO, autista Porta utente, autista GiveIO.sis, autista Port95nt.

Tutte e quattro le opzioni sono quasi equivalenti.

Driver DLPortIO

DLportIO - driver di accesso alla porta dal pacchetto DriverLINX di Scientific Software Tools, Inc. (http://www.sstnet.com) in forma abbreviata (senza descrizione e documentazione non necessaria). Per il normale funzionamento dei programmi di manutenzione LCD, si consiglia di farlo questa versione del driver.

Il driver stesso è costituito da due componenti:
. DLPortIO.dll - DLL Win32 che fornisce I/O hardware e
. DLPortIO.sys - driver per WinNT che opera in modalità kernel del sistema operativo (non richiesto per Win95/98)

Nel pacchetto di installazione dei driver, oltre a questi due componenti, è presente anche il file Install.exe, che sposta i due precedenti nella cartella dei driver di Windows e li registra nel sistema.

Non c'è altro da scrivere su questo driver. Nessuna configurazione richiesta. Scarica, installa, usa. Non dimenticare di guardare la fine dell'articolo e leggere le prestazioni della porta LPT.

L'installazione è elementare: esegui il file Install.exe, installa. Al termine dell'installazione, cerca nella cartella C:\Windows\System32\drivers e verifica la presenza di due file di driver (DLPortIO.sys e DLPortIO.dll). Se vediamo che questi file non sono stati copiati, li prendiamo dal pacchetto di installazione e li copiamo manualmente. Non preoccuparti, non accadrà nulla di male al tuo computer. Riavviamo il computer e lavoriamo con la porta LPT.

Se improvvisamente, a seguito di manipolazioni con l'apparecchiatura, ricevi un messaggio dal driver come questo: "dlportio.sys driver del dispositivo non caricato. Port I / O non avrà alcun effetto", niente panico. Questo problema viene risolto in questo modo:
. Iniziamo regedit.
. Andiamo nel registro alla filiale HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.
. Nella cartella dlportio, modificare il valore del parametro inizio sul 1 .
. Riavviamo il computer.

Driver della porta utente

Autista Porta utente apre l'accesso alle porte in Win NT/2000/XP per i programmi. Questa versione del driver della porta LPT è spesso utilizzata da "tecnici" che lavorano con programmatori e JTAG, poiché il driver ha almeno alcune impostazioni di configurazione.Può anche essere utilizzato per eseguire programmi di manutenzione degli indicatori LCD.

Ci sono tre file nell'archivio del driver:
. UserPort.sys - driver per WinNT, operante in modalità kernel del sistema operativo,
. UserPort.exe - programma per la configurazione del driver e
. UserPort.pdf - file di descrizione.

Impostazione della porta utente:
. 1. Decomprimere l'archivio in una cartella separata.
. 2. Copiare il file UserPort.sys in C:\Windows\System32\drivers

Impostazione porta utente:
. Esegui UserPort.exe.
. Di fronte a noi apparirà un pannello con 2 finestre.

La finestra di sinistra si riferisce al funzionamento del programma nella finestra DOS, quella di destra è a schermo intero. Per impostazione predefinita, contengono numeri di porta LPT: tutti possono essere rimossi utilizzando il pulsante "Rimuovi". In entrambe le finestre è necessario inserire i numeri di porta desiderati che si prevede di utilizzare.

Per l'uso dal driver con la maggior parte dei programmatori, JTAG e programmi di servizio di visualizzazione, aggiungere le seguenti opzioni alla colonna di sinistra:
378 , 379 e 37A per LPT1
278 , 279 e 27A per LPT2(Se l'indirizzo della porta LPT viene riassegnato nel BIOS).

Lascia che ti spieghi cosa significano i numeri. 0x378è l'indirizzo della porta.
. Indirizzo 0x378 chiamato di base ed è usato per scrivere e leggere dati da e verso la porta, tramite il bus dati D0-D7.
. Indirizzo 0x379 (base+1) creato per un po' di lettura stato dal dispositivo collegato alla porta LPT.
. Indirizzo 0x37A (base+2) serve per record di bit controllo del dispositivo collegato alla porta LPT.

Aggiungi in questo modo:
0x378-0x378
0x37A-0x37A



È necessario aggiungere gli indirizzi delle porte all'elenco tramite la finestra di immissione e utilizzando il pulsante "Aggiungi". Indirizzo 0x379 il più delle volte non è necessario e può essere omesso, poiché è destinato un po' di lettura stati del dispositivo collegato alla porta LPT, e la maggior parte dei dispositivi (programmatori, JTAG" e indicatori LCD, tanto più) non generano segnali di stato. Se lo desideri, puoi, al contrario, inserire l'intero range di indirizzi assegnati dal sistema per la porta LPT 0x378-0x37F.

Andiamo a Pannello di controllo, Sistema, selezionare la scheda Hardware, Gestore dispositivi, vai su Porte (COM e LPT) e guarda le proprietà della porta LPT su cui vuoi stabilire una connessione. In Proprietà, apri la scheda Risorse e osserva il valore del parametro Intervallo di ingresso/uscita (I/O). (Di solito in Windows XP lo è 378-37F)

Dopo aver generato l'elenco degli indirizzi, è necessario premere il pulsante "Start", il driver verrà avviato e verrà visualizzato un messaggio:



Quindi fare clic sul pulsante "Aggiorna", il driver verrà registrato nel sistema, quindi "Esci". Naturalmente, non è necessario premere il pulsante "Stop" mentre stiamo utilizzando il driver.

Se il sistema si riavvia quando fai clic sul pulsante "Aggiorna", dovresti provare ad avviare la registrazione del driver sul sistema con diritti di amministratore o provare a disabilitare temporaneamente il firewall o l'antivirus, che può bloccare l'interferenza con i processi di sistema. Se qualcosa non funziona, leggi UserPort.pdf

Per verificare se è apparso l'accesso alle porte, puoi eseguire il programma "lpt test.exe".

Dopo aver avviato il programma, apparirà una finestra con il seguente contenuto:



L'assenza del messaggio "Porta LPT in fase di test (Indirizzo XXXh)" e le righe successive indica che il driver non funziona.

Questo programma invia semplicemente vari numeri al registro dati Dx e al registro di controllo Ux della porta LPT, quindi li legge. Il registro di stato Sx della porta LPT è di sola lettura. Il numero e l'indirizzo della porta LPT testata vengono visualizzati sullo schermo. Se la porta è integra, non devono essere emessi messaggi per i registri Dx e Ux.



LPT-TEST v1.03 1995-2003 Copyright (C) S. B. Alemanov. "BINAR" di Mosca.
Durante il test, nessun dispositivo periferico deve essere collegato alle porte.
Dx - reg. dati (out), Ux - reg. controllo (fuori), Sx - reg. stato (inp).

La porta LPT1 è in fase di test (indirizzo 378h)
2° contatto (D0) - no "1"
3° pin (D1) - no "1"
4° pin (D2) - no "1"
5° pin (D3) - no "1"
6° pin (D4) - no "1"
7° pin (D5) - no "1"
8° pin (D6) - no "1"
9° pin (D7) - no "1"
1° contatto (U0) - no "1"
14° pin (U1) - no "1"
17° pin (U3) - no "1"
1° contatto (U0) - no "0"
14° contatto (U1) - no "0"
17° contatto (U3) - no "0"
15° contatto (S3) - no "0"


Se i registri Dx o Ux sono difettosi, viene visualizzato il messaggio "no 0" o "no 1" e viene indicato il numero di pin sul connettore LPT (i segnali su questo pin possono essere visualizzati con un oscilloscopio). L'ingresso del registro di stato Sx può essere "0" o "1", ma di solito, quando nulla è collegato alla porta LPT, tutti gli ingressi del registro di stato hanno un "1". La comparsa del registro di stato "0" all'ingresso può essere un segno che l'ingresso è stato interrotto, se prima c'era sempre un "1" lì.
Su alcune macchine, se il registro dati o il registro di controllo è difettoso, l'accesso alla porta LPT non viene visualizzato affatto. Apparentemente, quando il computer è acceso, il BIOS testa la porta LPT e, se è difettosa, la disabilita.

Se si verificano problemi, è possibile che alcuni driver interferiscano con il lavoro, inviando periodicamente impulsi alla porta LPT (questo può essere visto con un oscilloscopio). Ad esempio, è possibile disconnettersi dalla porta LPT nelle impostazioni della stampante:
disabilitare LPT1: porta stampante
abilita FILE: stampa su file

Dopo che tutti i problemi sono stati risolti e il test è stato superato, dovrebbe apparire l'accesso alle porte ed è possibile eseguire un programma utilizzando la porta LPT. In caso contrario, il dispositivo collegato alla porta su tale macchina non funzionerà.

Driver GiveIO.sys

Nel 1996, il programmatore americano Dale Roberts condusse una serie di esperimenti, che sfociarono in un driver GiveIO.sys. Fino ad ora, questo driver rimane uno degli strumenti più diffusi che consentono a un programma applicativo di accedere alle porte I/O.

L'autore stesso del driver consiglia vivamente di utilizzare questo driver solo a scopo di debug. La versione finale del programma applicativo dovrebbe, invece di accedere in modo indipendente alle porte I/O, affidare questa attività a un driver scritto appositamente per questo scopo. Il driver dovrebbe comportarsi "correttamente" controllando se il dispositivo è già utilizzato da qualche altra applicazione.

Tuttavia, se sei assolutamente sicuro che nessun altro utilizzi le porte I/O richieste (ad esempio, non hai una stampante collegata all'LPT), puoi tranquillamente utilizzare il driver GiveIO.sys.

Installazione del driver:

1. Scaricare l'archivio, decomprimere e copiare il file GiveIO.sys nella directory C:\Windows\System32\Drivers (si presume che Windows sia installato nella directory C:\Windows).
. 2. Eseguire il file install.reg. Sullo schermo apparirà il seguente messaggio:


. 3. Rispondiamo affermativamente. Verrà visualizzato un messaggio che informa che le informazioni sono state inserite correttamente nel registro. Se lo desideri, puoi verificarlo. Lanciamo l'editor del registro regedit.exe e nel ramo HKEY_LOCAL_MACHINE\Sistema\CurrentControlSet\Servizi\giveio controlla le seguenti voci:


. 4. Riavviamo il computer e controlliamo il funzionamento dei programmi che utilizzano il driver.

autista GiveIO.sys le persone usano attivamente e, nel tempo, sono apparse e altre opzioni di installazione.

Ad esempio, un autista GiveIO.sys se è presente un file con "informazioni hardware" GiveIO.inf può essere installato tramite l'applet "Install Hardware".




Mostreremo il driver GiveIO.sys al sistema operativo in modo che creda nell'esistenza dell'hardware "GiveIO".

Scarica un set di file per questa opzione di installazione del driver GiveIO.sys(giveio_sys_v2.rar - 78 kb). L'archivio contiene i file GiveIO.sys e GiveIO.inf, nonché istruzioni dettagliate per l'installazione con illustrazioni.

Oltre alle opzioni per l'installazione "manuale" del driver, sono state scritte diverse opzioni di installazione che eseguono l'installazione in modalità automatica.

Scarica una serie di file per l'installazione automatica del driver GiveIO.sys(giveio_sys_install.rar - 28 kb). L'archivio contiene i file GiveIO.sys e instdrv.exe, nonché il file remove-giveio.cmd, con il quale il driver GiveIO.sys può essere rimosso dal sistema.

Driver Port95nt

Il termine " autista Port95nt" non sarà del tutto corretto qui. In effetti, questo è lo stesso driver DLPortIO dal pacchetto DriverLINX da Strumenti software scientifici, Inc., solo nella sua versione completa, con un paio di utilità di gestione delle porte, con una descrizione e molti esempi per i programmatori. Per un utente normale, non vi è alcun vantaggio da componenti aggiuntivi e i componenti del driver DLPortIO.sys e DLPortIO.dll sono esattamente gli stessi della versione ridotta.

Menzionato Port95nt come pilota per due motivi. Il primo riguarda la completezza dell'elenco dei riferimenti ai driver di porta LPT trovati su Internet.

Il secondo motivo è che in alcuni casi potrebbero verificarsi problemi durante l'installazione di una versione ridotta di DLPortIO in WinXP. Di solito, ma raramente, ciò accade nelle build "author" ridotte di WinXP. In questo caso, puoi prendere la versione completa del programma di installazione (1,5 MB). Anche se, secondo me, sarà più veloce inserire manualmente DLPortIO.sys e DLPortIO.dll nella cartella giusta piuttosto che preoccuparsi della selezione di un programma di installazione che possa farlo per te.

Misure aggiuntive

Oltre ad installare uno dei driver di cui sopra, per il normale funzionamento della porta LPT in WinXP, è necessario modificare il registro utilizzando un file REG xp_stop_polling.reg(xp_stop_polling.rar - 0.48kb)

In WinXP, i dispositivi che utilizzano la porta LPT a volte funzionano in modo instabile. Il motivo di tali errori potrebbe essere il lavoro del sottosistema Plug-and-Play (PnP) in Windows, che esegue periodicamente il polling dell'LPT per rilevare i dispositivi collegati. Tale poll viene eseguito all'avvio del sistema, ma può verificarsi anche durante il funzionamento. Sfortunatamente, il driver DLportIO.sys e altre opzioni del driver non bloccano l'accesso a LPT da altri programmi quando si lavora con la porta client di questo driver e il sottosistema PnP è sicuro che la porta non sia occupata, vi accede e interrompe il funzionamento di dispositivi esterni. Per risolvere il problema e utilizzare il file .reg xp_stop_polling.reg. Questo file imposta una chiave nel registro di Windows che vieta tale poll (sondaggio) mentre il sistema è in esecuzione.

Oltre a installare il driver e limitare l'accesso simultaneo alla porta per i programmi, al fine di garantire la compatibilità hardware e il normale funzionamento delle apparecchiature con una porta LPT, è necessario impostare il BIOS su Indirizzo corretto e modalità operativa della porta("Normale", SPP o EPP, ma non ECP).

I seguenti parametri sono soggetti a configurazione tramite BIOS Setup:

Indirizzo di base, che può essere 378h, 278h e 3BCh. Durante l'inizializzazione, il BIOS verifica la presenza di porte agli indirizzi in questo ordine e, di conseguenza, assegna i nomi logici LPT1, LPT2, LPT3 alle porte rilevate. L'indirizzo 3BCh ha un adattatore di porta situato sulla scheda MDA o HGC (i precursori delle moderne schede grafiche). La maggior parte delle porte è configurata per l'indirizzo 378h per impostazione predefinita e può essere commutata a 278h.

La linea di richiesta di interruzione utilizzata, IRQ7 è solitamente utilizzata per LPT1, IRQ5 per LPT2. Molte applicazioni "desktop" non utilizzano gli interrupt della stampante e questa scarsa risorsa del PC può essere risparmiata. Tuttavia, quando si utilizzano le modalità di velocità ECP (Fast Centronics), l'operazione di interruzione può aumentare notevolmente le prestazioni e ridurre il carico del processore.

Allo stesso tempo, la modalità ECP non può essere utilizzata con dispositivi che richiedono tempi stretti (programmatori e interfacce JTAG).

In conclusione, un po' di terminologia:

. SPP(Porta parallela standard - porta parallela standard). Spesso, per facilità di comprensione, nel BIOS, "e" è indicata dal termine " Normale".
. PPE(Porta parallela avanzata - porta parallela estesa) - opzione interfaccia bidirezionale ad alta velocità. È stato modificato lo scopo di alcuni segnali, è stata introdotta la possibilità di indirizzare più dispositivi logici ed è stata introdotta l'immissione di dati a 8 bit, è stato introdotto un buffer FIFO hardware a 16 byte. Il tasso di cambio massimo è fino a 2 Mb/s.
. ECP(Enhanced Capability Port) è una versione intelligente di EPP. È stata introdotta la possibilità di dividere le informazioni trasmesse in comandi e dati, il supporto per DMA e la compressione dei dati trasmessi utilizzando il metodo RLE (Run-Length Encoding).


Quindi, consideriamo la seguente opzione per lavorare con le porte di I/O in Windows NT. Questa "opzione" sarà un driver speciale GiveIO.sys, che consente all'applicazione che l'ha lanciato di funzionare liberamente con qualsiasi porta. Questo autista ha scritto Dale Roberts Dio sa quando, ma non ha perso la sua rilevanza fino ad oggi.



In breve, ti spiego come funziona: all'inizio del nostro programma per comunicare con i porti, devi contattare l'autista GiveIO.sys. In tal modo, imposterà la bitmap del sistema I/O Permission Map per la nostra applicazione su un valore tale da consentire l'accesso diretto a qualsiasi porta. Mappa dei permessi di I/Oè parte integrante del sistema di protezione I/O di Windows NT. È una bitmap, ogni bit corrisponde a una porta I/O. Se bit = 1, l'accesso alla porta è chiuso, se 0, l'accesso è aperto. Per qualsiasi applicazione utente, tutti i bit sono impostati su 1 e quindi non possiamo interferire direttamente con il funzionamento della porta. GiveIO.sys "irrompe" sfacciatamente in questo array e imposta 0 ovunque, ad es. otteniamo la possibilità di accedere a qualsiasi porta dall'applicazione.



Per prima cosa, scarica l'archivio con il driver e il file di installazione:


Ora dobbiamo registrarci e installare il driver nel sistema. Per fare ciò, è necessario eseguire una serie di operazioni. Per prima cosa, copia il file del driver GIVEIO.sys nella cartella C:\Windows\system32\drivers\ se, ovviamente, il tuo sistema è installato su un disco DA:\ e non hai cambiato i percorsi di installazione di Windows.

Clic . In questo caso, riceverai un messaggio sull'inserimento corretto delle informazioni nel registro. Puoi verificarlo. Nel programma dell'editor del registro regedit.exe nel ramo HKEY_LOCAL_MACHINE\Sistema\CurrentControlSet\Servizi\giveio puoi vedere quanto segue:

Affinché le modifiche apportate abbiano effetto, è indispensabile RIAVVIARE IL COMPUTER.


È ora di iniziare a programmare. Nel nostro codice di programma port.exe(vedi ) apporteremo alcune modifiche che gli consentiranno di accedere alle porte non solo in Windows 9x come era prima, ma anche in Windows NT. Il codice finale sarà simile a:

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

Tutto. Compila, corri. Clicchiamo 1-0: tutto dovrebbe funzionare. Se è apparso un messaggio errore! Impossibile aprire il driver! Premere un tasto qualsiasi per uscire..., l'installazione del driver non è riuscita ed è necessario reinstallarlo di nuovo.

Grazie a giveio.sys anche i seguenti script assembler funzioneranno correttamente:

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

© Dmitrij Ivanov
2005-2006