Avatar billede sbay Nybegynder
28. maj 2003 - 10:33 Der er 33 kommentarer og
2 løsninger

I/O port - komponent

Hejsa

Jeg kan ikke finde en ordentlig Delphi komponenet til portstyring - både parallel og seriel!

Er der nogen der har sådan en eller ved hvor man kan downloade den??? Desuden ønskes et lille eksempel, hvis det ikke er lige til at bruge!!

Jeg vil helst have en komponent hvor man kan sende decimalværdier og IKKE skal bruge hex.
Avatar billede mysitesolution Nybegynder
28. maj 2003 - 13:57 #1
Jeg har selv lavet et udfra et andet... jeg kan sende det til dig hvis det er...

det komponent kan både bruge seriel og pa... og også andre fx til computer højttaleren...
28. maj 2003 - 14:18 #2
Hey sbay.
Det du har gang i lyder interessant, jeg går og fumler med lidt fjernstyring af et musikanlæg, med mixerpult og lignende, samt fjernstyrring af pc fra mixerpulten, men jeg mangler alt, lige fra det komponent du efterlyser, til det hardware der skal sidde imellem porten på pc'en og de forskellige musik enheder.
Kan du indvie mig i den løsning du får?
Avatar billede dkn Nybegynder
28. maj 2003 - 14:54 #3
Jeg bruger io.dll.
http://www.ustr.net/epromer5/io.dll


procedure PortOut(Port: Word; Data: Byte); stdcall; external 'io.dll';
function PortIn(Port: Word): Byte; stdcall; external 'io.dll';


så kan man eller bare bruge:
PortOut(StrToInt('$' + '378'), longword(strtoint('0x10')));
til at sende.

var
DataRead: Byte;
begin
DataRead := PortIn(StrToInt('$' + Edit2.Text));
end;
til at læse fra porten
Avatar billede sbay Nybegynder
28. maj 2003 - 15:00 #4
mysitesolution>>> det lyder spændende - min mail: bay@cool.dk - så vil jeg da lige prøve det!

dkn>>> hmmm, det er noget med dll'er - det ved jeg ikke om jeg er så meget for!!! - virker det under XP????

anton_kruse_andersen >>>>> Det hardware jeg vil bruge er bare 8 elektroniske relæer koblet på parallelporten - senere vil jeg bruge et interface fra www.brinck.dk varenr.: Br 847.
Avatar billede dkn Nybegynder
28. maj 2003 - 15:05 #5
ja det virker under nt.

Den er meget nem at bruge, har endda skrevet hvad du skal :)

Bruger den selv sammen med det interface kort fra brinck.
Avatar billede mysitesolution Nybegynder
28. maj 2003 - 15:14 #6
min er fuldstændig det samme som dkn´s  mit er dog et komponent og ikke en dll... sender den lige
Avatar billede mysitesolution Nybegynder
28. maj 2003 - 15:19 #7
ResetPort:
Du sætter PortAddress ( word ) som portens nummer og skriver komponent.Reset;

Send data:
Du sætter PortAddress ( word ) som portens nummer, PostData ( byte ) som hvad der skal sendes og skriver komponent.Write;

Modtag data:
Du sætter PortAddress ( word ) som portens nummer og skriver komponent.Read;

resultatet kommer nu ind i PortData


ps brugen er på eget ansvar
Avatar billede sbay Nybegynder
28. maj 2003 - 15:28 #8
ok - jeg vil prøve begge her i løbet af ferien og så vender jeg tilbage! (måske før hvis jeg har problemer ;-) )
Avatar billede sbay Nybegynder
31. maj 2003 - 11:19 #9
dkn>>>> hmm - hvad gør jeg så med den dll-fil????

mysitesolution>>>> når jeg installere den component du har sendt til mig, kan jeg ikke finde den nogen steder, så den er lidt svær at bruge!!!!!
Avatar billede mysitesolution Nybegynder
31. maj 2003 - 12:18 #10
du ligger pas filen ind i "lib" i borland delphi mappen... og åbner den derfra og trykker "install component"
Avatar billede dkn Nybegynder
31. maj 2003 - 16:00 #11
dll filen skal bare ligge i system32 mappen eller i samme mappe som din exefil.

så skirver du:
procedure PortOut(Port: Word; Data: Byte); stdcall; external 'io.dll';
function PortIn(Port: Word): Byte; stdcall; external 'io.dll';

over implementation

Du kan så bare bruge kaldende:

PortOut();
PortIn();
Avatar billede sbay Nybegynder
31. maj 2003 - 16:23 #12
dkn >>>> lad mig lige forstå det ret! Jeg skal altså bare putte .dll-filen ind i systemfolderen, og så skrive koden - ikke noget med at indsætte en komponent eller noget på formen?????

Hvis jeg så vil lave henholdvis en procedure og en function - der sender data (f.eks tænde ben 1) til porten, skriver jeg:

procedure PortOut(Port: Word; Data: Byte); stdcall; external 'io.dll';
begin
og hvad så her?
end

har du eventuelt en lille stump kode med uses, var osv. jeg kan studere????
Avatar billede mysitesolution Nybegynder
31. maj 2003 - 16:27 #13
hmm... har du fået mit komponent installeret... jeg ved altså det virker
Avatar billede sbay Nybegynder
31. maj 2003 - 16:35 #14
mysitesolution>>> nej desværre - der skulle da komme sådan et ekstra faneblad - ikke???? det kan jeg ikke få det til!
Avatar billede mysitesolution Nybegynder
31. maj 2003 - 16:38 #15
nej,,, den ligger i fanebladet system
Avatar billede sbay Nybegynder
31. maj 2003 - 16:47 #16
mysitesolution>>>  ja det hjalp jo gevaldigt - hehe....


Det er ved at være et godt stykke tid siden jeg har kodet i Delphi - er der en mulighed for at du har en stump "demokode"???? Eller er det bare sådan her:

procedure TForm1.Button1Click(Sender: TObject);
begin
PortAddress:=378;
PostData:=1;
PortReader1.Write;
end;
Avatar billede mysitesolution Nybegynder
31. maj 2003 - 16:57 #17
ja det der er rigtigt.. det er til at skrive 1 til porten
Avatar billede sbay Nybegynder
31. maj 2003 - 17:06 #18
jeg får en fejl i komponenten - er det ikke rigtigt nok at LPT1 hedder 378???? Det er noget med en "Privileged Instruction"
Avatar billede dkn Nybegynder
31. maj 2003 - 17:30 #19
ja du har næsten forstået det :)

Dll skal programmet bare have adgang til, det fås ved at smide den i samme mappe som exe filen eller i windows/system.

Dernæst i de to functions declareret og så kan du ellers sende data.

uden nogen component!

bare brug dem som de ser ud :)

PortOut($378, 123);
showmessage(inttostr(PortIn($378));

btw hvis de andet component siger Privileged Instructions, så er det fordi den ikke har fået adgang til hardwaren pga windows. Det component virker altså kun i 98 så
Avatar billede mysitesolution Nybegynder
31. maj 2003 - 18:12 #20
hmm... virker det kun i 9x... der er vidst noget jeg må have rettet så
Avatar billede dkn Nybegynder
31. maj 2003 - 18:18 #21
ja eller også er han ikke logget ind som administrator, nu får vi lige at se om den dll kan.
Avatar billede sbay Nybegynder
31. maj 2003 - 20:51 #22
type
  TForm1 = class(TForm)
    PortReader1: TPortReader;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure PortOut(Port: Word; Data: Byte); stdcall; external 'io.dll';
    function PortIn(Port: Word): Byte; stdcall; external 'io.dll';

Så får jeg en fejl på STDCALL!!!!!
Avatar billede sbay Nybegynder
31. maj 2003 - 20:51 #23
PS. er logget ind som admin!
Avatar billede dkn Nybegynder
31. maj 2003 - 21:25 #24
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  procedure PortOut(Port: Word; Data: Byte); stdcall; external 'io.dll';
  function PortIn(Port: Word): Byte; stdcall; external 'io.dll';

var
  Form1            : TForm1;

implementation
Avatar billede sbay Nybegynder
31. maj 2003 - 22:56 #25
dkn >>> nu får jeg noget skrevet ud i en messagebox!

portnummeret $378 er i hex - eller hvad??? Hvad så hvis det er COM1???

123: er vel bare en parameter -> kunne lige så godt være 1 eller 2 eller 4 eller.....???

Og hvad er historien med $ - den bruges både i in og out???
Avatar billede dkn Nybegynder
01. juni 2003 - 13:42 #26
Når der skal skrives til porten:
PortOut(StrToInt('$' + Edit1.Text), data);

Hvor edit1 indeholder port nummer, fx 378 til lpt.

Læsning fra port:
var
  data              : byte;
begin
  data := PortIn(StrToInt('$' + Edit12.Text));
end;
Avatar billede sbay Nybegynder
03. juni 2003 - 15:41 #27
ok - nu skal jeg bare have tjekket at det virker på mit interface - går nok lige et par dage!!!
Avatar billede sbay Nybegynder
08. juni 2003 - 15:52 #28
ØV - det virker ikke. Jeg får en permanent spænding på PC'ens LPTport på 1,5 volt. Det er lige fra den starter op - og så sker der ikke noget når jeg prøver at sende til porten!

procedure TForm1.Button5Click(Sender: TObject);  //LEFT
begin
PortOut($378, 1);
end;
Avatar billede dkn Nybegynder
08. juni 2003 - 16:37 #29
Ok du bliver vidst nødt til at læse mere om det....
Hvis du endelig skulle bruge byte værdi direkte skulle det være
PortOut($378, 10000000);

men det er bedre at converte din byte til en hex værdi, ellers virker det simpelthen for usikkert har jeg lagt mærke til
Avatar billede sbay Nybegynder
08. juni 2003 - 16:46 #30
hmmm, jeg bliver nok nødt til at finde en anden komponent! Den jeg brugte sidste gang virkede (2 år siden)!! Interfacekortet ved jeg også virker!
Avatar billede dkn Nybegynder
08. juni 2003 - 16:48 #31
ok giv op det er nok bedst...bruger selv den dll fil til mit interface kort og det virker fint.
Avatar billede sbay Nybegynder
08. juni 2003 - 16:56 #32
bare for at være helt sikker - kunne du så ikke lave en demokode, bare hvor man tænder alle 8 dioder på en knap og slukker dem på en anden - det kan være jeg har lavet noget ged!!! Det der står efter $378, skal det være i hex??? - i så fald er det der fejlen er!
Avatar billede dkn Nybegynder
08. juni 2003 - 17:00 #33
var
  data              : Longword;
begin

  data := Longword(StrToInt('0x01')) + Longword(StrToInt('0x02')) +
    Longword(StrToInt('0x04')) + Longword(StrToInt('0x08')) +
    Longword(StrToInt('0x10')) + Longword(StrToInt('0x20')) +
    Longword(StrToInt('0x40')) + Longword(StrToInt('0x80')) and $FF;
    PortOut($378, data);

end;


ikke testet, men burde tænde alle
Avatar billede sbay Nybegynder
08. juni 2003 - 17:17 #34
Delphi 3 kender ikke Longword :-(
Avatar billede sbay Nybegynder
08. juni 2003 - 19:08 #35
Det virker!!!!!!! Det er parallelporten på min laptop der er færdig! På min stationære virker det perle!

Mange takker!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester