Nefunkční přístup na LPT (pouze u jednoho programu)

Počítačové periferie a další kategorie hardwaru, které nemají samostatnou sekci

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod ns_Navara 27. 8. 2017 14:15

Zdravím,
mám takovýto problém: Jeden trošku obstarožnější program určený k přenosu souborů přes LPT do ještě obstarožnějšího zařízení (lze to nazvat "Prehistorický flash disk" - dotyčné zařízení následně nahrává soubor do palubních počítačů určitých vozidel) má problém s přístupem na LPT. Ostatní programy které LPT používají, ho obsluhují bez problému, poruchu přímo na portu nebo řadiči lze tedy vyloučit. Zařízení je také funkční, vyzkoušeno i se stejným propojovacím kabelem na jiném počítači a tam shledáno funkčním.

Program při startu napíše hlášku "LPT1 opened succesfully", stav jednotlivých pinů se nezmění (vyzkoušeno LEDkovým testérem portu). Při příkazu k detekci zařízení se na port nezapíše také nic, na změnu vstupních stavových bitů program také nereaguje (u jiných progrmů se tlačítky na testeru povedlo přes stavové piny "zblbnout" nebo spíše nasimulovat přítomnost požadovaného zařízení).

Výrobce doporučuje použití knihovny DLPortIO.dll, soubory DLPortIO.sys a DLPortIO.dll jsou nainstalovány programem Port95NT, přítomny v \Windows\System32(\Drivers u .sys souboru).

Přes ProcMon zjištěno že program při spuštění loví v registrech následující větve:
Kód: Vybrat vše
HKLM\Hardware\DeviceMap\Parallel ports  [kde je klíč: \Device\Parallel0 - \DosDevices\LPT1]
HKLM\Hardware\DeviceMap\Parallel ports\\Device\Parallel0

a následně větev
Kód: Vybrat vše
HKLM\Hardware\ResourceMap\LOADED PARALLEL DRIVER RESOURCES\Parport

která neexistuje (Name not found). Nelze ji ani ručně vytvořit, registr si na toto místo zapisovat nenechá (a ani to ve vlastním zájmu radši dělat nebudu).

Výrobcem je doporučeno knihovnu DLPortIO.dll kromě System32 umístit taky do složky s programem. Ani jedno umístění však program při startu nevyhledává. Když LPT1 paradoxně zakážu ve správci zařízení, program při startu náhle DLportIO ve vlastní složce sice najde a načte ale ihned potom se program ukončí. "v aplikaci DT01w.exe došlo k problému a je třeba ji zavřít, ohlaste tento problém...atd".

OS: Windows XP Pro SP3.
PC: ASUS P5KPL SE
v BIOSu port povolen, adresa 378, IRQ7, mode ECP (vyzkoušeno i EPP, BiDirectional, Normal - všechno se stejným výsledkem).

...nevěděl by někdo, jak programu "domluvit", např. přes ty registry, aby si tu zatrolenou DLL vyhledal a používal ji?
Děkuji.
ns_Navara
Kolemjdoucí

Odeslat příspěvekod hunter21 28. 8. 2017 11:15

Vyskusaj nastavit najzakladnejsiu podporu LPT bez ECP/EPP. Pre prenos pomocou ECP/EPP je potrebny inak zapojeny kabel. Je mozne to najst po nazvom "Direct Cable Connection). Standardny paralelny Laplink prenasa data 4-bitovo, ECP/EPP prenos je 8-bitovy. Tiez by som doporucil pohladat pre aky typ prenosu je urcena tak kniznica. Aby to bolo este zlozitejsie, tak aj ECP ma tusim dva rozne druhy prenosov.
hunter21
Pokročilý

Odeslat příspěvekod soban 28. 8. 2017 21:22

Přesně jak píše standartní LPT má piny pouze výstupní a nové LPT můžou přepnout piny i na vstupní takže se dá číst/zapisovat naráz 8b.

Takže v BIOSu přepni port na jednostranou komunikaci (vypnout rozšířené režimy EPP/ECP) případně to nastavit v ovladači LPT v windows.
/----------------------------------------\
| Petr Šobáň |
| Olomouc |
\----------------------------------------/
soban
Pokročilý

Odeslat příspěvekod ns_Navara 3. 9. 2017 11:45

Vyzkoušel jsem všelijaké kombinace a nic.

Celý problém možná visí ještě na něčem jiném:
Při instalaci Port95NT (s oprávněními administrátora) se kromě DLL a SYS objevilo také testovací SW psané ve VB a C kde lze číst a zapisovat hodnoty na port a při pokusu o zápis nebo čtení se objeví:
"DLPORTIO.SYS not loaded. PortI/O will have no effect."

Vygooglil jsem si různá řešení, která doporučují změnit hodnotu v registru
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DLPortIO" - položku "Start" na "1"
(čili systémový ovladač - http://windowsitpro.com/windows/what-ar ... es-subkeys) a restartovat systém.

Nepomohlo...

Ostatní aplikace mají různé své vlastní ovladače ke čtečkám karet na LPT ve svých složkách (mcr68.dll) a ve svých aplikcích pod Delphi7 používám InpOut.dll - též vždy umístěné ve složkách s exe a žádný problém s používáním portu se nekoná. Různé další googlení většinou tvrdí že staré aplikace, které potřebují přímý přístup na port, se holt musí přepsat - což nelze protože je to originální program výrobce zařízení. Zkoušel jsem aplikaci pod Windows98 na sterém počítači a tam nejde ani spustit (což je trošku logické - tak stará aplikace to zase není rok cca 2000, psáno v Delphi).

Celý problém se tedy nejspíše překlápí k nefunkčnímu driveru DLportIO.sys.
Je tedy možné nějakým způsobem vnutit XP načtení tohoto ovladače?
ns_Navara
Kolemjdoucí

Odeslat příspěvekod hunter21 3. 9. 2017 13:44

Skusat to na starsom hardware je celkom dobry napad. Viac jadrove (multi procesorove) systemy a ich obsluzny software musi byt specialne upraveny aby fungoval bez problemov. Mozno preto: DLportIO ve vlastní složce sice najde a načte ale ihned potom se program ukončí.

-- 3. 9. 2017 14:49 --

Aplikacie (aj ovladace) pre multi-procesorove systemy (viac-jadrove) musia pouzivat synchronizcne mechanizmy bez ktorych moze software vykazovat chybne spravanie.
Bez tychto mechanizmov, ktore musia byt do starsieho kodu dodatocne vlozne moz program fungovat aj takto:
a = 0
a = a + 1
vysledok moze byt: 0
hunter21
Pokročilý

Odeslat příspěvekod hunter21 3. 9. 2017 14:52

Este by som doporucil pozriet do logu, ci tam nieje nieco viac o tom, preco nejde nahrat ten diver. Mozno nieje podpisany.
hunter21
Pokročilý

Odeslat příspěvekod ns_Navara 3. 9. 2017 17:12

Tento driver jsem provozoval i pod Windows 7 32 bit na dvoujádru a nebyly s tím problémy.
Teď se snažím o zprovoznění na jiném počítači se dvoujádrem a ve Windows XP Prof - neúspěšně - přitom jsem si jist že na OS XP jsem zmíněný program i tyto ovladače používal bez problému - ale byl to jiný počítač (a nejpíše jednojádro). Že bych musel do sklepa pro to starý železo kvůli jedné aplikaci mi dělá opravdu "radost" - ale zprovoznit to potřebuji celkem nutně, takže nezbývá než vyzkoušet.

To načtení a následné ukončením aplikace se to stane když zakážu ve Správci zařízení LPT port (trošku styl pokusu-omylu - paradoxně přesto že ho chci používat. Měl jsem v plánu ho následně po spuštění opět povolit). Pokud je povolený a pro ostatní aplikace normálně funkční, tak se tu knihovnu nepokouší ani při startu načíst (ale zato se spustí "korektně" a nepadá).

Vyzkouším ten starý PC s jednojádrem a uvidíme. Díky.
ns_Navara
Kolemjdoucí

Odeslat příspěvekod hunter21 3. 9. 2017 18:04

WinXP nema podporu na multiprocesoroch, Win7 uz ano, preto to moze fungovat. Problem s tou synchronizaciou je taky, ze chyba programu sa vyskytuje celkom nahodne. Aj neosetreny program moze fugnovat cele mesiace v pohode pokial nenastane situacia, ktora zapricini chybnu funkcnost. Mozno ste sa len nestretol s tym, ze to havarovalo. Uzivatelske programy nemusia fungovat korektne, pripadne padnu. S ovladacmi je to horsie, tie mozu zapricit aj zatuhnutie systemu. Mam to trocha nastudovane, programujem ovladace pre hardware. Uz som sa stretol s tym ked mi ovladac sposobil zahadne tuhnutia systemu.
hunter21
Pokročilý

Odeslat příspěvekod ns_Navara 3. 9. 2017 18:39

Tak v tomto případě to náhodné není, prostě se to tváří na monitoru funkčně a na portu mrtvě. Nahoře huj, vespod fuj :) nicméně to nijak nepopírá Váš příspěvek.

Začínám tedy vážně uvažovat o přechodu na W7 (a XP podle potřeby provozovat už skutečně jen ve virtuálce kterou už stejně mám vytvořenou).

Ten počítač je jen "vedlejší, pracovní" - právě na takové věci jako jsou starší programy které potřebují pracovat s periferiemi jako jsou PCMCIA SRAM čtečky na LPT nebo všelijaká zařízení na COM portu + právě toto zařízení, takže je nakonec celkem jedno jestli na něm budou XP nebo 7 (nebo rovnou oboje), navíc celkově W7 s ovladači nemá takový problém, a ostatní potřebné aplikace podle předchozích zkušeností s W7 problém také neměly. Tak snad... Myslím že tam někde mám volné místo bez oddílů na disku, zkusím přidat a když to poběží, prostě to - až bude čas - předělám celé na 7 a "nazdar".

Pro to staré železo jsem si do sklepa skutečně došel a seznal jsem že je celkem vyrabované (jen HDD s prapůvodními Win2000 zůstal - a celé se to zarazilo na chybějícím zdroji se starým kratším napájecím konektorem MB. Stihl jsem mu znárodnit konektor do MB pro jiné použití a teď jiný nepoškozený zdroj s takovým konektorem nemám). Na reinkarnaci se vykašlu, to radši vyzkouším ty Sedmy.
ns_Navara
Kolemjdoucí

Odeslat příspěvekod ns_Navara 3. 9. 2017 22:00

Instalace Windows7 na volný partition skutečně zabrala.
21322948_1646932325317418_1476506982_n.jpg


"programovací jednotka" přes LPT přehrána a následně palubní počítač poprvé pokusně přeprogramován.
Oboje úspěšně.
15941549_1396018173742169_165722198_n.jpg


Je to tedy vopičárna, instalovat kvůli jednomu prográmku celý další OS, ale hlavní je že to funguje a holt tedy se bude přecházet celkově na 7 a doufám že mě nepotká něco podobného u ostatních podobných aplikací zase ze strany 7.
Děkuji za spolupráci - XP, dvoujádro a tento prográmek, nejspíše to vážně nešlo dohromady a popravdě by mě to nenapadlo, asi bych se ještě dlouho snažil tomu domluvit... (a samozřejmě marně).

Ještě jednou díky.
N.
ns_Navara
Kolemjdoucí


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků