Toon posts:

[C++] LPT poort aansturen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik gebruik Borland C++ 5.02 en wil hiermee de parallelle poort direct aansturen. ;)
Nu weet ik dat dit vanuit Windows XP niet kan zonder een DLL te gebruiken, maar ik weet nog niet waar ik die van daan moet halen en zoja, waar te plaatsen (windows dir misschien :/ ).

De aansturing is PER PIN, deze pinnen wil ik koppelen aan de ingang van een PLC (Festo FPC-202).

Doel van programma is, om bij bepaalde voorwaarden een signaal op 1 pin uit te geven. Dit is dan het ingangssignaal voor de PLC.

Ik heb verstand van C++, maar niet van assemblers maken, hoorde namelijk dat je dat moest doen, dat is volgens mij ook de moeilijke manier.

Ook iets gehoord of MFC ofzo, weet niet wat dat is en hoe te gebruiken.

Heb al WEL een software matige BreakOutBox. Kan dus zien of de aansturing lukt.

Help gevraagd bij het aansturen van de pinnen graag... ;(


Heb al heel wat gegoogled en hier op GoT gezocht, zonder resultaat helaas.

Verwijderd

ik weet zelf niet veel van poorten aansturen enzo, maar tijdens het surfen op c++ sites heb ik genoeg voorbeelden daarvan gezien. Gebruik google en je vindt genoeg info erover.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik heb verstand van C++, maar niet van assemblers maken, hoorde namelijk dat je dat moest doen, dat is volgens mij ook de moeilijke manier.
assemblers maken heeft er weinig mee te maken, je bedoelt waarschijnlijk assembly programmeren. En ook dat heb je niet nodig

En de dll die je nodig hebt is DlPortIo

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MisterData
  • Registratie: September 2001
  • Laatst online: 18:25
DLPortIO moet je maar es op zoeken idd :) De reden is trouwens dat in Windows XP programma's niet zomaar meer naar de LPT mogen schrijven (seriele poorten trouwens ook niet). Drivers mogen dit echter wel. DLPortIO doet net alsof het een driver is (of .vxd geloof ik zelfs, een 'virtual device driver') en kan zo de poort wel bedienen.

[ Voor 69% gewijzigd door MisterData op 29-10-2003 18:40 ]


Verwijderd

Ik heb zelf goede ervaringen met inpout32.dll, werkt goed onder XP. Voor downloadlocatie ed: De Parallelle poort FAQ: Hoe programmeer ik de parallelle poort?. In het zip bestand staan ook code voorbeelden voor C.

Je plaatst de dll gewoon in je system map.
MisterData schreef op 29 oktober 2003 @ 18:39:
DLPortIO moet je maar es op zoeken idd :) De reden is trouwens dat in Windows XP programma's niet zomaar meer naar de LPT mogen schrijven (seriele poorten trouwens ook niet). Drivers mogen dit echter wel. DLPortIO doet net alsof het een driver is (of .vxd geloof ik zelfs, een 'virtual device driver') en kan zo de poort wel bedienen.
Daar komt het wel op neer ja, het gaat erom dat alleen programma's op kernel niveau rechtstreeks toegang tot de meeste IO hebben.

[ Voor 47% gewijzigd door Verwijderd op 29-10-2003 18:45 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

DLPortIO doet net alsof het een driver is
nou ja, het is gewoon een driver ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
MisterData schreef op 29 October 2003 @ 18:39:
DLPortIO doet net alsof het een driver is (of .vxd geloof ik zelfs, een 'virtual device driver') en kan zo de poort wel bedienen.
DLportIO is een echte driver en maakt gebruik van een ongedocumenteerde kernel functie die het complete io bereik in zijn eigen addressspace mapt.

Overigens, vxd's zijn drivers die voor Win9X zijn bestemd, WinXP en Win2k maken gebruik van het WDM ( Windows Driver Model ).

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Andre-85
  • Registratie: April 2003
  • Niet online

Andre-85

Sid

Ik liep eigenlijk met dezelfe vraag rond. Waar kan ik informatie vinden over het programeren van een parallepoort? Via google en De Parallelle poort FAQ: Hoe programmeer ik de parallelle poort? kom ik niet verder dan een paar vage voorbeelden van source code. Ik wil graag informatie over hoe ik doelgericht een poort kan programeren. Het gaat mij dus niet direct om code (daar kan je natuurlijk ook van leren) maar om de uitleg hoe het nou moet, zodat ik mijn code begrijp. Is er iemand die weet waar ik dat kan vinden? Of heeft iemand dit voor mij?

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


Verwijderd

die faq is toch de plaats om te zoeken. maar ik zal proberen beetje uit te leggen. (hou de schema's uit de faq bij de hand, vooral de pinout en welke pin op welk register zit).

pinnen op de parpoort kunnen dus hoog of laag worden (0 (0V) of 1 (5V)) (met uitzondering van de inverted pinnen die zijn, je raad het al, juist andersom). zoals je in de schemas ziet zitten data-pinnen D0-D7 op base-adres.

stel ik wil pin 2 (d0) hoog hebben, binair zou ik dan dit naar het base-adres sturen:

pin-nr:987654321
hoog/laag:000000001

dus stuur ik (decimaal) 1 naar base-adres (888)

ik hoop dat je het snapt en dat het correct is (heb er al een tijdje niet meer mee gewerkt)

[ Voor 19% gewijzigd door Verwijderd op 29-10-2003 22:46 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:02

.oisyn

Moderator Devschuur®

Demotivational Speaker

farlane schreef op 29 oktober 2003 @ 20:53:
DLportIO is een echte driver en maakt gebruik van een ongedocumenteerde kernel functie die het complete io bereik in zijn eigen addressspace mapt.
beetje vaag, RING 0 apps zijn in principe gewoon priveleged om in en out instructies (en aanverwanten) te gebruiken. Waarom zouden ze dan die poortjes mappen in een adressspace dmv een undocumented kernel functie?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18-08 21:00

Creepy

Tactical Espionage Splatterer

.oisyn schreef op 30 oktober 2003 @ 16:51:
[...]


beetje vaag, RING 0 apps zijn in principe gewoon priveleged om in en out instructies (en aanverwanten) te gebruiken. Waarom zouden ze dan die poortjes mappen in een adressspace dmv een undocumented kernel functie?
Zodat de applicatie daarna zonder enige vorm van tussenkomst van de driver rechtstreekste I/O kan doen. Leuk om te proberen: Nadat je met behulp van DLPortI/O 1 keer een poort hebt benadert, kan je het draarna ook met outb() varianten rechtstreeks.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 29 oktober 2003 @ 18:13:
Heb al heel wat gegoogled en hier op GoT gezocht, zonder resultaat helaas.
P&W FAQ - C en C++ :?

Professionele website nodig?


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 18:33
.oisyn schreef op 30 oktober 2003 @ 16:51:
[...]


beetje vaag, RING 0 apps zijn in principe gewoon priveleged om in en out instructies (en aanverwanten) te gebruiken. Waarom zouden ze dan die poortjes mappen in een adressspace dmv een undocumented kernel functie?
De dll kan daarna overal bij zoals Creepy al aangaf ( Niet echt aan te raden trouwens :) ). Het is ook mogelijk om die poorten een voor een te MmMapper en daarna weer te MmUnmappen, zoals in het genport voorbeeld van de ntddk gedaan wordt.

Dat mappen gebeurd bijvoorbeeld in dit voorbeeld : http://www.beyondlogic.org/porttalk/porttalk.htm

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1