unit Elevator;
interface
uses
System.SysUtils, System.Classes,
Vcl.Controls, graphics, dialogs;
type
//Anfang Mengentyp SPS_Modbus_Adressen
TSPS_Modbus_Adressen =
Class(TPersistent)
private
FAdr_Meldung_Motorschutz: Integer;
FAdr_Meldung_Motor_Ein: Integer;
FAdr_Meldung_Stern_Ein: Integer;
FAdr_Meldung_Dreieck_Ein: Integer;
FAdr_Meldung_Schieflauf_Oben: Integer;
FAdr_Meldung_Schieflauf_Unten: Integer;
FAdr_Meldung_Drehzahlwaechter: Integer;
published
property Adresse_Motorschutz: Integer
read FAdr_Meldung_Motorschutz
write FAdr_Meldung_Motorschutz;
property Adresse_Motor_Ein: Integer
read FAdr_Meldung_Motor_Ein
write FAdr_Meldung_Motor_Ein;
property Adresse_Stern_Ein: Integer
read FAdr_Meldung_Stern_Ein
write FAdr_Meldung_Stern_Ein;
property Adresse_Dreieck_Ein: Integer
read FAdr_Meldung_Dreieck_Ein
write FAdr_Meldung_Dreieck_Ein;
property Adresse_Schieflauf_Oben: Integer
read FAdr_Meldung_Schieflauf_Oben
write FAdr_Meldung_Schieflauf_Oben;
property Adresse_Schieflauf_Unten: Integer
read FAdr_Meldung_Schieflauf_Unten
write FAdr_Meldung_Schieflauf_Unten;
property Adresse_Drehzahlwächter: Integer
read FAdr_Meldung_Drehzahlwaechter
write FAdr_Meldung_Drehzahlwaechter;
End;
//Ende Mengentyp SPS_Modbus_Adressen
//Anfang Mengentyp SPS_Zustände
TSPS_Zustaende =
Class(TPersistent)
private
FMeldung_Motorschutz: boolean;
FMeldung_Motor_Ein: boolean;
FMeldung_Stern_Ein:boolean;
FMeldung_Dreieck_Ein:boolean;
FMeldung_Schief_o:boolean;
FMeldung_Schief_u:boolean;
FMeldung_Drehzahl:boolean;
published
property Meldung_Motorschutz: boolean
read FMeldung_Motorschutz
write FMeldung_Motorschutz;
property Meldung_Motor_Ein : boolean
read FMeldung_Motor_Ein
write FMeldung_Motor_Ein;
property Meldung_Stern_Ein : boolean
read FMeldung_Stern_Ein
write FMeldung_Stern_Ein;
property Meldung_Dreieck_Ein : boolean
read FMeldung_Dreieck_Ein
write FMeldung_Dreieck_Ein;
property Meldung_Schieflauf_oben : boolean
read FMeldung_Schief_o
write FMeldung_Schief_o;
property Meldung_Schieflauf_unten : boolean
read FMeldung_Schief_u
write FMeldung_Schief_u;
property Meldung_Drehzahl : boolean
read FMeldung_Drehzahl
write FMeldung_Drehzahl;
End;
TSPS_Options =
class(TPersistent)
private
FFreigabe:boolean;
FZeit_Stern : integer;
FZeit_Nachlauf: integer;
FStern_Dreieck_Schaltung: boolean;
FAktiv :boolean;
published
property Freigabe : boolean
read FFreigabe
write FFreigabe;
property Zeit_Stern :Integer
read FZeit_Stern
write FZeit_Stern
default 10;
property Zeit_Nachlauf: integer
read FZeit_Nachlauf
write FZeit_Nachlauf
default 30;
property Stern_Dreieck_Schaltung: boolean
read FStern_Dreieck_Schaltung
write FStern_Dreieck_Schaltung;
property Aktiv: boolean
read FAktiv
write FAktiv;
end;
TElevator =
class(TGraphicControl)
private
{ Private-Deklarationen }
//Eingänge nur lesen
FModbus_Adressen: TSPS_Modbus_Adressen;
FSPS_Zustaende : TSPS_Zustaende;
FSPS_Options : TSPS_Options;
protected
{ Protected-Deklarationen }
procedure Paint;
override;
public
{ Public-Deklarationen }
constructor Create(AOwner: TComponent);
override;
destructor Destroy;
override;
published
{ Published-Deklarationen }
//hiermit wird das im Obkektinspektor angezeigt
property onclick;
property SPS_Modbus_Adressen : TSPS_Modbus_Adressen
read FModbus_Adressen
write FModbus_Adressen;
property SPS_Zustände : TSPS_Zustaende
read FSPS_Zustaende
write FSPS_Zustaende;
property SPS_Optionen : TSPS_Options
read FSPS_Options
write FSPS_Options;
procedure starten(
var starten,motorschutz,stern_ein,
dreieck_ein,motor_ein,schief_oben,schief_unten,drehzahl: boolean);
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
SPS', [TElevator]);
end;
constructor TElevator.Create(AOwner: TComponent);
begin
inherited;
FModbus_Adressen := TSPS_Modbus_Adressen.Create;
FSPS_Zustaende := TSPS_Zustaende.Create;
FSPS_Options := TSPS_Options.Create;
end;
destructor TElevator.Destroy;
begin
inherited;
end;
procedure TElevator.Paint;
begin
inherited;
// <--- Wichtig!!!
width := 70;
height := 400;
with canvas
do
begin
//Silo-Körper
pen.Color := clblack;
Brush.Color := clgray;
Brush.Style := bsSolid;
rectangle(0,0,30,300);
end;
//noch nicht fertig
end;
procedure TElevator.starten(
var starten,motorschutz,stern_ein,
dreieck_ein,motor_ein,schief_oben,schief_unten,drehzahl: boolean);
begin
//das wird noch vereinfacht
FSPS_Zustaende.FMeldung_Motorschutz := motorschutz;
FSPS_Zustaende.FMeldung_Motor_Ein := motor_ein;
FSPS_Zustaende.FMeldung_Stern_Ein := stern_ein;
FSPS_Zustaende.FMeldung_Dreieck_Ein := dreieck_ein;
FSPS_Zustaende.FMeldung_Schief_o:= schief_oben;
FSPS_Zustaende.FMeldung_Schief_u:= schief_unten;
FSPS_Zustaende.FMeldung_Drehzahl:= drehzahl;
if (FSPS_Zustaende.FMeldung_Motorschutz = false)
and
(FSPS_Zustaende.FMeldung_Schief_O = false)
and
(FSPS_Zustaende.FMeldung_Schief_u = false)
and
(FSPS_Zustaende.Fmeldung_Drehzahl = false)
then
begin
//do something going on
end;
end;
end.