Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Ansteuerung eines Controllers (umscheiben VB --> delphi7) (https://www.delphipraxis.net/154182-ansteuerung-eines-controllers-umscheiben-vbulletin-delphi7.html)

tkone 31. Aug 2010 11:19

Delphi-Version: 2005

Ansteuerung eines Controllers (umscheiben VB --> delphi7)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Also mein Programm bezieht sich auf folgenden Thread von mir
http://www.delphipraxis.net/154064-w...mentieren.html

Habe einen Controller für 64 LEDs und möchte den über ein Delphiprogramm ansteuern.
Das mitgelieferte Visual Basic Programm liefert nur eine beispielhafte Anwendung und nicht komplexe Programmabläufe.
Ich möchte gern, dass mein Programm eine Textdatei(Inhalt: binäre schreibweise für alle 64 LEDs an/aus).
Diese wird eingelesen und entsprechend des Inhaltes werden die Programmroutinen der Reihe nach abgearbeitet.
Dies habe ich zwar noch nicht implementiert, aber habe schon aus anderen Projekten von mir die entsprechenden Prozeduren. Das sollte also kein Problem sein.

Ich habe aber ein großes Problem mit der Integration der RSCOM.dll(für serielle Schnittstelle).
Die Prozeduren, welche das VB Programm nutzt sind alle darin enthalten und nur durch eigene Deklarationen ist die Verknüpfung hergestellt. Diese Deklarationen möchte ich gern für Delphi adaptieren.
leider kann ich mein bisheriges Programm noch nicht testen, da der Compiler immer meckert "Deklaration erwartet, aber uses gefunden".
Leider wird dadurch mein gesamtes Programm nicht nachvollziehbar und compilierbar.
Hat jemand eine Ahnung, wie ich dass ohne großen Aufwand beheben kann?
Ich bitte um Verständnis, dass die Verwendung komplett anderer Routinen zur Ansteuerung der seriellen Schnittstelle nicht gewünscht ist.

Lg

mkinzler 31. Aug 2010 11:22

AW: Ansteuerung eines Controllers (umscheiben VB --> delphi7)
 
Delphi-Quellcode:
Das sollte reichen:

unit Controller;

interface

procedure OPENCOM (OpenString:string); stdcall; external 'RSCOM.dll';
procedure TIMEOUTS (b:integer); stdcall; external 'RSCOM.dll';
procedure BUFFERSIZE (b:integer); stdcall; external 'RSCOM.dll';
procedure CLOSECOM (); stdcall; external 'RSCOM.dll';
procedure SENDBYTE (Dat:string); stdcall; external 'RSCOM.dll';
function READBYTE (): Integer; stdcall; external 'RSCOM.dll';
procedure SENDSTRING (Dat:string); stdcall; external 'RSCOM.dll';
function READSTRING (): String; stdcall; external 'RSCOM.dll';
procedure CLEARBUFFER (); stdcall; external 'RSCOM.dll';
function INBUFFER (): Integer; stdcall; external 'RSCOM.dll';
function OUTBUFFER (): Integer; stdcall; external 'RSCOM.dll';
procedure DTR (b:integer); stdcall; external 'RSCOM.dll';
procedure RTS (b:integer); stdcall; external 'RSCOM.dll';
procedure TXD (b:integer); stdcall; external 'RSCOM.dll';
function CTS (): Integer; stdcall; external 'RSCOM.dll';
function DSR (): Integer; stdcall; external 'RSCOM.dll';
function RI (): Integer; stdcall; external 'RSCOM.dll';
function DCD (): Integer; stdcall; external 'RSCOM.dll';
function INPUTS (): Integer; stdcall; external 'RSCOM.dll';
procedure TIMEINIT (); stdcall; external 'RSCOM.dll';
function TIMEREAD (): Double; stdcall; external 'RSCOM.dll';
procedure DELAY (ms: Double); stdcall; external 'RSCOM.dll';
procedure REALTIME (); stdcall; external 'RSCOM.dll';
procedure NORMALTIME (); stdcall; external 'RSCOM.dll';

...

Bernhard Geyer 31. Aug 2010 11:24

AW: Ansteuerung eines Controllers (umscheiben VB --> delphi7)
 
Zitat:

Zitat von mkinzler (Beitrag 1046294)
Delphi-Quellcode:
Das sollte reichen:

unit Controller;

interface

procedure OPENCOM (OpenString:string); stdcall; external 'RSCOM.dll';
...
...

String als Widestring oder doch nur AnsiString? Es soll ja für Delphi7 sein wo String = AnsiString ist.

mkinzler 31. Aug 2010 11:28

AW: Ansteuerung eines Controllers (umscheiben VB --> delphi7)
 
Da das Beispielprogramm ja VB ist und auch die Ansi-Variante von ShellExecute (ShellExecuteA) gewrapt wird, würde ich auf Ansi tippen. Also könnte man aus Kompatibilitätsgründen für spätere D-Versionen auch AnsiString nehmen.

implementation 31. Aug 2010 11:30

AW: Ansteuerung eines Controllers (umscheiben VB --> delphi7)
 
Zitat:

Zitat von tkone (Beitrag 1046293)
leider kann ich mein bisheriges Programm noch nicht testen, da der Compiler immer meckert "Deklaration erwartet, aber uses gefunden".

Also in dem Thread schreibst hattest du das "uses" nach den External-Deklarationen.
Versuch es mal, indem du die uses-Klausel davor stellst :gruebel:

tkone 31. Aug 2010 15:01

AW: Ansteuerung eines Controllers (umscheiben VB --> delphi7)
 
die uses vor die deklarationen zu setzen, scheint es gebracht zu haben.
ich hatte es schonmal probiert, aber blöderweise die uses vor interface gesetzt, was nichts brachte.

so und jetzt kasper ich die datentypen durch.

tkone 31. Aug 2010 17:25

AW: Ansteuerung eines Controllers (umscheiben VB --> delphi7)
 
juhu, es funktioniert.
wichtig ist die richtigen datentypen zu verwenden.
jetzt kann ich weitere funkionen implementieren.

Delphi-Quellcode:
unit Controller;

interface

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

function OPENCOM (OpenString: ansistring): longint; stdcall; external 'RSCOM.dll';
procedure TIMEOUTS (b: longint); stdcall; external 'RSCOM.dll';
procedure BUFFERSIZE (b: longint); stdcall; external 'RSCOM.dll';
procedure CLOSECOM (); stdcall; external 'RSCOM.dll';
procedure SENDBYTE (Dat: longint); stdcall; external 'RSCOM.dll';
function READBYTE (): longint; stdcall; external 'RSCOM.dll';
procedure SENDSTRING (Dat: ansistring); stdcall; external 'RSCOM.dll';
function READSTRING (): ansiString; stdcall; external 'RSCOM.dll';
procedure CLEARBUFFER (); stdcall; external 'RSCOM.dll';
function INBUFFER (): longint; stdcall; external 'RSCOM.dll';
function OUTBUFFER (): longint; stdcall; external 'RSCOM.dll';
procedure DTR (b: longint); stdcall; external 'RSCOM.dll';
procedure RTS (b: longint); stdcall; external 'RSCOM.dll';
procedure TXD (b: longint); stdcall; external 'RSCOM.dll';
function CTS (): longint; stdcall; external 'RSCOM.dll';
function DSR (): longint; stdcall; external 'RSCOM.dll';
function RI (): longint; stdcall; external 'RSCOM.dll';
function DCD (): longint; stdcall; external 'RSCOM.dll';
function INPUTS (): longint; stdcall; external 'RSCOM.dll';
procedure TIMEINIT (); stdcall; external 'RSCOM.dll';
function TIMEREAD (): Double; stdcall; external 'RSCOM.dll';
procedure DELAY (ms: Double); stdcall; external 'RSCOM.dll';
procedure REALTIME (); stdcall; external 'RSCOM.dll';
procedure NORMALTIME (); stdcall; external 'RSCOM.dll';

function ShellExecuteA (hwnd: Longint; lpOperation: String; lpFile: String;
         lpParameters: String; lpDirectory: String; nShowCmd: Longint): Longint;
         stdcall; external 'shell32.dll';

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Label1: TLabel;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Label2: TLabel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    ScrollBar1: TScrollBar;
    Label3: TLabel;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Timer1: TTimer;

    procedure Button6Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

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

var
  Form1: TForm1;
  Adr, Delaytime: longint;

implementation

{$R *.dfm}

procedure TForm1.Button6Click(Sender: TObject);
begin
  SENDBYTE (Adr);
  SENDBYTE (9);
  SENDBYTE (Delaytime);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i: longint;
begin
Randomize;
i:= OPENCOM('COM1:9600,N,8,1');
If i = 0 Then
  begin
  i:= OPENCOM('COM2:9600,N,8,1');
  if i = 0 then
    begin
    i:= OPENCOM('COM3:9600,N,8,1');
    if i = 0 then
      begin
      i:= OPENCOM('COM4:9600,N,8,1');
      if i = 0 then
      showmessage('Kein Gerät erkannt')
      else DTR (4);
      end
    else DTR (3);
    end
  else DTR (2);
  end
else DTR (1);

TIMEINIT;
TIMEOUTS (300);
Delaytime:= 10;
Adr:= 0;
Timer1.Enabled:= False;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
If Adr = 0 then Adr:= 1;
If Adr = 1 then Adr:= 0;
If Adr = 2 then Adr:= 12;
If Adr = 12 then Adr:= 2;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
If Adr = 0 then Adr:= 2;
If Adr = 1 then Adr:= 12;
If Adr = 2 then Adr:= 1;
If Adr = 12 then Adr:= 1;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CLOSECOM;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i: longint;
begin
CLOSECOM;
i:= OPENCOM('COM1:9600,N,8,1');
If i = 0 Then
  showmessage('COM Interface Error');
TIMEOUTS (300);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
i: longint;
begin
CLOSECOM;
i:= OPENCOM('COM2:9600,N,8,1');
If i = 0 Then
  showmessage('COM Interface Error');
TIMEOUTS (300);
end;

procedure TForm1.Button4Click(Sender: TObject);
var
i: longint;
begin
CLOSECOM;
i:= OPENCOM('COM3:9600,N,8,1');
If i = 0 Then
  showmessage('COM Interface Error');
TIMEOUTS (300);
end;

procedure TForm1.Button5Click(Sender: TObject);
var
i: longint;
begin
CLOSECOM;
i:= OPENCOM('COM4:9600,N,8,1');
If i = 0 Then
  showmessage('COM Interface Error');
TIMEOUTS (300);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
Timer1.Enabled:= True;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
Timer1.Enabled:= False;
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
Delaytime:= scrollbar1.Position;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var n, d : longint;

begin
For n:=1 To 8 do
  begin
  SENDBYTE (1);
  SENDBYTE (n);
  d:= Random (254) +1;
  SENDBYTE (d);
  end;
Timer1.Interval:= scrollbar1.position;
end;

End.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz