AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Ansteuerung eines Controllers (umscheiben VB --> delphi7)
Thema durchsuchen
Ansicht
Themen-Optionen

Ansteuerung eines Controllers (umscheiben VB --> delphi7)

Ein Thema von tkone · begonnen am 31. Aug 2010 · letzter Beitrag vom 31. Aug 2010
Antwort Antwort
tkone

Registriert seit: 2. Okt 2009
Ort: Sachsen
63 Beiträge
 
Delphi 7 Professional
 
#1

Ansteuerung eines Controllers (umscheiben VB --> delphi7)

  Alt 31. Aug 2010, 12:19
Delphi-Version: 2005
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
Angehängte Dateien
Dateityp: zip Controller LED.zip (39,3 KB, 6x aufgerufen)
Dateityp: zip WR64.zip (355,0 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 31. Aug 2010, 12:22
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';

...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 31. Aug 2010, 12:24
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 31. Aug 2010, 12:28
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#5

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

  Alt 31. Aug 2010, 12:30
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
Marvin
  Mit Zitat antworten Zitat
tkone

Registriert seit: 2. Okt 2009
Ort: Sachsen
63 Beiträge
 
Delphi 7 Professional
 
#6

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

  Alt 31. Aug 2010, 16:01
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.
  Mit Zitat antworten Zitat
tkone

Registriert seit: 2. Okt 2009
Ort: Sachsen
63 Beiträge
 
Delphi 7 Professional
 
#7

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

  Alt 31. Aug 2010, 18:25
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz