Einzelnen Beitrag anzeigen

josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Noch mal zu neuen Komponenten - Neue Events - Methoden

  Alt 30. Aug 2017, 16:47
Habe jetzt mal ein paar Mengentypen gemacht

Delphi-Quellcode:

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.

Geändert von josef-b (30. Aug 2017 um 17:06 Uhr)
  Mit Zitat antworten Zitat