unit VT_Funktionen;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls;
const maxComPort = 100;
Bautrate = 9600;
ExtLib = '
MMC.DLL';
constMillimeter = 6400;
type TV_Tische =
class
private
Tischbmp: TBitmap;
function Bewegtsich(
const Kanal: integer): boolean;
function Bremsen: boolean;
function Geschwindigkeit_festlegen(
const iGeschwindigkeit: integer): boolean;
function Beschleunigung_festlegen(
const iBeschleunigung: integer): boolean;
public
DLL_Handle: THandle;
bBewegung, bkalibriert: boolean;
iaktuelleTischposition, iZielTischposition, iComport, iFehlercode: integer;
bAngeschlossen: boolean;
constructor create;
reintroduce;
destructor Destroy;
override;
function VTische_verbinden(Comport: integer): boolean;
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;
end;
{***********************************************************************************
* allgemeine Funktionen für Verschiebetische *
***********************************************************************************}
{**********************************Ende Funktionen**********************************}
{***********************************************************************************
* Funktionen für Verschiebetische *
***********************************************************************************}
function MMC_COM_open(portnumber,baudrate:integer):integer;
stdcall external ExtLib;
function MMC_COM_close:integer;
stdcall external ExtLib;
//
function MMC_COM_setBuffer:integer;
stdcall external ExtLib;
//
function MMC_sendString(pCmd:pChar):integer;
stdcall external ExtLib;
//
function MMC_sendCommand(pCmd:pChar):integer;
stdcall external ExtLib;
//
function MMC_getPos:integer;
stdcall external ExtLib;
//
function MDC_getPosErr:integer;
stdcall external ExtLib;
//
function MMC_getVal(
query:integer):integer;
stdcall external ExtLib;
//
function MMC_getReport(pCmd,psRead:PChar):integer;
stdcall external ExtLib;
//
function MMC_getStringCR(psRead:PChar):integer;
stdcall external ExtLib;
//
function MDC_moving:integer;
stdcall external ExtLib;
//
function MST_moving:integer;
stdcall external ExtLib;
//
function MMC_initNetwork(maxaxis:integer):integer;
stdcall external ExtLib;
//
function MMC_select(newaxis:integer):integer;
stdcall external ExtLib;
//
function MMC_setDevice(newaxis:integer):integer;
stdcall external ExtLib;
//
function MMC_COM_clear:integer;
stdcall external ExtLib;
//
function MMC_COM_EOF:integer;
stdcall external ExtLib;
//
function MMC_getSTB(byteno:integer):integer;
stdcall external ExtLib;
//
function MDC_waitStop:integer;
stdcall external ExtLib;
//
function MST_waitStop:integer;
stdcall external ExtLib;
//
function MMC_getDLLversion:integer;
stdcall external ExtLib;
function MMC_moveA(axis,position:integer):integer;
stdcall external ExtLib;
function MMC_moveR(axis,shift:integer):integer;
stdcall external ExtLib;
function MMC_getMacro(macno:integer;content:PChar):integer;
stdcall external ExtLib;
function MMC_globalBreak:integer;
stdcall external ExtLib;
{**********************************Ende Funktionen**********************************}
implementation
constructor TV_Tische.create;
begin
inherited create;
bBewegung := false;
bkalibriert := false;
bAngeschlossen := false;
end;
function TV_Tische.Geschwindigkeit_festlegen(
const iGeschwindigkeit: Integer): boolean;
begin
try
MMC_sendCommand(PAnsiChar('
SV'+inttostr(iGeschwindigkeit)));
result := true;
except
result := false;
end;
end;
function TV_Tische.Beschleunigung_festlegen(
const iBeschleunigung: Integer): boolean;
begin
try
MMC_sendCommand(PAnsiChar('
SA'+inttostr(iBeschleunigung)));
result := true;
except
result := false;
end;
end;
function TV_Tische.Bremsen: boolean;
begin
try
Geschwindigkeit_festlegen(0);
Beschleunigung_festlegen(0);
MMC_sendCommand('
AB')
except
end;
end;
function TV_Tische.BewegenABS(dneuPos: double): boolean;
begin
Geschwindigkeit_festlegen(500);
Beschleunigung_festlegen(500);
MMC_sendCommand(PAnsiChar('
MA' + inttostr(round(dneuPos*constMillimeter))));
end;
function TV_Tische.BewegenABS(
const KaliPos:
string): boolean;
begin
Geschwindigkeit_festlegen(1000);
Beschleunigung_festlegen(1000);
MMC_sendCommand(PAnsiChar(KaliPos));
end;
function TV_Tische.BewegenABS(dneuPos: double; iGeschwindigkeit: integer): boolean;
begin
Geschwindigkeit_festlegen(iGeschwindigkeit);
Beschleunigung_festlegen(500);
MMC_sendCommand(PAnsiChar('
MA' + inttostr(round(dneuPos*constMillimeter))));
end;
function TV_Tische.BewegenABS(dneuPos: Double; iGeschwindigkeit: Integer; iBeschleunigung: Integer): boolean;
begin
Geschwindigkeit_festlegen(iGeschwindigkeit);
Beschleunigung_festlegen(iBeschleunigung);
MMC_sendCommand(PAnsiChar('
MA' + inttostr(round(dneuPos*constMillimeter))));
end;
function TV_Tische.VTische_verbinden(Comport: integer): boolean;
begin
try
MMC_COM_open(Comport, Bautrate);
BewegenABS('
FE2');
if MST_moving = 1
then
begin
Bremsen;
end
except
result := false;
end;
end;
function TV_Tische.Kalibrierung(
const Kanal: integer): boolean;
begin
try
MMC_setDevice(Kanal);
BewegenABS('
FE2');
except
end;
end;
function TV_Tische.Bewegtsich(
const Kanal: integer): boolean;
begin
MMC_setDevice(Kanal);
if MST_moving = 1
then result := true
else result := false;
end;
destructor TV_Tische.Destroy;
begin
Bremsen;
MMC_COM_close;
inherited Destroy;
end;
end.