Forum: PC-Programmierung ComPort mit Turbo Delphi


von Delphi User (Gast)


Lesenswert?

Hi,

ich nutze Turbo Delphi Explorer, nun möchte ich gerne den ComPort
ansprechen, aber leider gestaltet sich das Ganze irgendwie recht
kompliziert.
Ich habe zwar diverse Tutorials gefunden, aber irgendwie habe die mich
alle nicht wirklich weiter gebracht.
Leider funktioniert mit der Turbo Explorer das Einbinden von
Komponenten von 3. Anbietern wie zum Beispiel SerialNG nicht.
Ich habe zwar auf
http://www.the-starbearer.de/Praxis/ElektronikamPC/RS232/portdll.htm
eine Port.dll gefunden, die man für die RS232 und Delphi nutzen kann,
aber leider gibt es da nicht so richtig viele Infos, wie ich diese nun
in Delphi einbinden und nutzen kann.
Ich würde mich sehr freuen, wenn jemand eine kurze Anleitung für mich
hätte, wie ich diese dll nutzen kann.

Vielen Dank

von Robert (Gast)


Lesenswert?

Kannst du mit einer DLL + Delphi beispielcode etwas anfangen?

von Delphi User (Gast)


Lesenswert?

Hi,

ich habe nach langem suchen zu der Port.dll eine Referenz gefunden:
http://www.b-kainka.de/referenz.txt

Damit war es mir jetzt schon möglich die Funktionen zu deklarieren.

Port Unit Code:


unit Port;

interface

implementation
  Function OPENCOM(S:PCHAR):Integer; stdcall; external 'Port.dll';
  Procedure CLOSECOM; stdcall; external 'port.dll';
  Function READBYTE: WORD; stdcall; external 'port.dll';
  Procedure SENDBYTE(Wert: WORD); stdcall; external 'port.dll';
  Function DSR: WORD; stdcall; external 'port.dll';
  Function CTS: WORD; stdcall; external 'port.dll';
  Function RI: WORD; stdcall; external 'port.dll';
  Function DCD: WORD; stdcall; external 'port.dll';
  Procedure RTS(Wert: WORD); stdcall; external 'port.dll';
  Procedure TXD(Wert: WORD); stdcall; external 'port.dll';
  Procedure DTR(Wert: WORD); stdcall; external 'port.dll';
  Procedure TIMEOUT(Wert: WORD); stdcall; external 'port.dll';
  Procedure DELAY(ms: WORD); stdcall; external 'port.dll';
  Procedure TIMEINIT; stdcall; external 'port.dll';
  Function TIMEREAD: WORD; stdcall; external 'port.dll';
  Procedure DELAYUS(ms: WORD); stdcall; external 'port.dll';
  Procedure TIMEINITUS; stdcall; external 'port.dll';
  Function TIMEREADUS: WORD; stdcall; external 'port.dll';
  Procedure REALTIME(d: WORD); stdcall; external 'port.dll';


end.


Danach wollte ich versuchen die Schnittstelle zu öffnen, dabei habe ich
mich ein wenig an dieser Seite orientiert:
http://www.b-kainka.de/delphi.htm

Leider ohne Erfolg, denn der Compiler haut mir da leider einen fehler
raus, mit dem ich nichts anfangen kann:

[Pascal Fehler] Unit2.pas(43): E2003 Undefinierter Bezeichner:
'OPENCOM'
[Pascal Fataler Fehler] RS232.dpr(6): F2063 Verwendete Unit
'Unit2.pas' kann nicht compiliert werden

Hier noch mein Code des Formulars:

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
  Dialogs, Port, ExtCtrls, StdCtrls, Menus;

type
  TForm2 = class(TForm)
    MainMenu1: TMainMenu;
    Da1: TMenuItem;
    Info1: TMenuItem;
    Beenden1: TMenuItem;
    est1: TMenuItem;
    procedure Info1Click(Sender: TObject);
    procedure Beenden1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;


implementation

{$R *.dfm}



procedure TForm2.Beenden1Click(Sender: TObject);
begin
Close();
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
OPENCOM(Pchar('com2:19200,N,8,1'));
end;

procedure TForm2.Info1Click(Sender: TObject);
begin
ShowMessage('XXX');
end;

end.


Ich würde mich sehr freuen, wenn jemand einen Tipp hätte...

Vielen Dank

von Robert (Gast)


Lesenswert?

deine declarationen gehören ins interface.

von Robert (Gast)


Lesenswert?

Bei Bedarf könnte ich eine DLL mit Delphi 5 Beispiel zur Verfügung
stellen.

von Delphi User (Gast)


Lesenswert?

Hi Robert,

danke für den Tipp Robert, jetzt macht der Compiler zumindest schonmal
keine Zicken mehr, aber irgendwie funktioniert das ganze immer noch
nicht so ganz, wenn ich versuche etwas an einen MC zusenden, kommt da
leider nix an.
An dem MC Programm kann es nicht liegen, da es mit einer C# Software
problemlos klappt.

So sieht der Delphi Code aus:

procedure TForm2.FormCreate(Sender: TObject);
begin
OPENCOM(Pchar('com2:2400,N,8,1'));
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
SendByte(2);
end;

Die MC Software empfängt für gewöhnlich das Zeichen "1" und zeigt den
Empfang an, in dem dann an Portd.5 eine Led leuchtet.

Ich würde mich sehr freuen, wenn du mir die DLL und den Beispiel Code
zur Verfügung stellen würdest.

von Weinga-Unity (Gast)


Lesenswert?

http://sourceforge.net/projects/comport/

sollte das sein, was du suchts.

von Delphi User (Gast)


Lesenswert?

Hi,
man kann leider bei den Turbo Versionen keine externen Komponenten
einbinden, deshalb bleibt nur eine Lösung mit einer DLL.

von Robert (Gast)


Lesenswert?

Bevor ich dich mit einer weiteren DLL zuschütte, schau mal du sendest
eine binäre 2. Wenn du eine "1" senden willst, musst du in pascal $31
schreiben.

von Delphi User (Gast)


Lesenswert?

Hallo Robert,

ok dann ist natürlich klar, das das nicht klappt, gibt es irgendwo eine
Tabelle oder so, wo ich sehen kann, wie ich die ASCII Zeichen in
Delphi/Pascal schreiben muss?...

Danke

von Robert (Gast)


Lesenswert?

ASCII Tabellen gibt es überall im Netz, aber du kannst auch schreiben
ord('1');

von Delphi User (Gast)


Lesenswert?

Hi,

mit dem ord(X); klappt das ganze jetzt ohne Probleme, dafür vielen
Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.