unit VT_Funktionen;
interface
uses
Windows, SysUtils, Hilfsfunktionen, ExtCtrls, Dialogs;
// Eventdeklaration
type TFehlerevent =
procedure(
const iFehlercode: integer)
of object;
// TV_Tische-Klassendeklaration
type TV_Tische =
class
Fehlerevent: TFehlerevent;
private
// Deklaration aller verwendeten Variablen die nur intern in dieser Unit
// verwendet werden können
//Tischbmp: TBitmap;
TischDLL: TDLL_Datei;
DLL_Handle: THandle;
//bBewegung, bkalibriert,bAngeschlossen: boolean;
//iaktuelleTischposition, iZielTischposition: integer;
iComport, iKanal: integer;
Bewegungsueberwachung: TTimer;
// Deklaration aller für die Initialisierung verwendeten und nur in dieser Unit
// verwendeten Funktionen
function DLLHandle_zuweisen: boolean;
function DLLFunktionen_laden: boolean;
function ComPort_ermitteln: boolean;
function Verfuegbarkeit: boolean;
// Deklaration aller für die Bewegung verwendeten und nur in dieser Unit
// verwendeten Funktionen
function Geschwindigkeit_festlegen(
const iGeschwindigkeit: integer): boolean;
function Beschleunigung_festlegen(
const iBeschleunigung: integer): boolean;
function Bremsen: boolean;
// Deklaration aller für die Überprüfung des Tischstatus und nur in dieser Unit
// verwendeten Funktionen
function Bewegtsich(
const Kanal: integer): boolean;
procedure BewegungsueberwachungTimer(Sender: TObject);
procedure Fehlermeldung(
const iFehler: integer);
public
// Deklaration aller für die Initialisierung verwendeten und auch in anderen Units
// zur Verfügungstehenden Funktionen
constructor create;
function Initialising: boolean;
destructor Destroy;
override;
//function init(const iKanal: integer): boolean;
// Deklaration aller für die Bewegung verwendeten und auch in anderen Units
// zur Verfügungstehenden Funktionen
//function Kalibrierung(const Kanal: integer): boolean;
function BewegenABS(dneuPos: double): boolean;
overload;
function BewegenABS(
const KaliPos:
string): boolean;
overload;
function BewegenABS(dneuPos: double; iGeschwindigkeit: integer): boolean;
overload;
function BewegenABS(dneuPos: double; iGeschwindigkeit, iBeschleunigung: integer):boolean;
overload;
// Deklaration aller verwendeten Variablen die auch in anderen Units
// zur Verfügungstehenden Funktionen
property Handle: THandle
read DLL_Handle;
property Verfuebar: boolean
read Verfuegbarkeit;
property Fehlerevent_ausloesen: TFehlerevent
read Fehlerevent
write Fehlerevent;
property Kanal: integer
read iKanal
write iKanal;
end;
// Typdeklaration für die aus der dynamisch eingebundenen MMC.DLL zu ladenen
// Funktionen.
type TMMC_COM_open =
function(portnumber,bautrate: integer):integer;
stdcall;
type TMMC_close =
function: integer;
stdcall;
type TMMC_sendCommand =
function(pCmd: pChar): integer;
stdcall;
type TMST_moving =
function: integer;
stdcall;
type TMMC_setDevice =
function(NewAxis: integer): integer;
stdcall;
// Variablendeklaration der aus der dynamisch eingebundenen MMC.DLL zu ladenen
// Funktionen
var MMC_COM_open: TMMC_COM_open;
MMC_close: TMMC_close;
MMC_sendCommand: TMMC_sendCommand;
MST_moving: TMST_moving;
MMC_setDevice: TMMC_setDevice;
implementation
{////////////////////////////////////////////////////////////////////////////////////}
{/ Funktionen für Komunikationsaufbau bzw. -terminierung und /}
{/ und Statusüberprüfung /}
{////////////////////////////////////////////////////////////////////////////////////}
constructor TV_Tische.create;
begin
inherited create;
// Der Überwachungstimer wird initialisiert und aktiviert. Dieser überwacht rein
// ob sich der Tisch bewegt oder steht. Wenn der Tisch sich bewegt soll später
// die Beschleunigung und die Geschwindigkeit berechnet werden.
Fehlermeldung(100);
Bewegungsueberwachung := TTimer.Create(
nil);
Bewegungsueberwachung.OnTimer := BewegungsueberwachungTimer;
Bewegungsueberwachung.Enabled := true;
end;
... etliche Proceduren und Funktionen aus der Tisch-Klasse
procedure TV_Tische.Fehlermeldung(
const iFehler: Integer);
begin
// Diese Fehlermeldung funktioniert allerdings scheint er nicht durch die
// if-Anweisung zu gehen, warum?
if assigned(Fehlerevent)
then Fehlerevent(iFehler); <--- hier vermute ich einen Fehler, weil ab hier die Fehlermeldung verschwindet
end;
end.