Einzelnen Beitrag anzeigen

Smeik

Registriert seit: 21. Mär 2016
Ort: Thüringen
6 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Problem mit Klassenerstellung

  Alt 13. Dez 2016, 13:16
Hallo,
ich möchte eine Sensor-Steuerung per OOP abbilden.
Eine Steuerung kann unterschiedliche Art und Anzahl von Sensoren (NTC-Sensor, Druck-Sensor) und Aktoren (Relais) besitzen .
Für diese habe ich jeweils eigene Klassen erstellt, die dann in eine Steuerung eingebunden werden.
Die einzelnen Sensoren besitzen widerum Schwellwerte die einstellbar sind und bei Überschreiten und unterschreiten Fehler auslösen. Die Aktoren widerum können nur Ein/Aus geschalten werden. Wie kann ich nun in der Klasse TSteuerung die Verknüfung zwischen meinen Sensoren und Aktoren am besten herstellen bzw. konfigurierbar machen. Bsp. Die Steuerung besitzt 2 Ntc-Sensoren mit Minimal-/Maximaltemperaturüberwachung und 1 Drucksensor mit entspr. Minimal/Maximaldrucküberwachung und 2 Relais die bei einem Fehler zugeschalten werden können. Wie kann ich nun in der Klasse TSteuerung am besten die Beziehung zwischen Sensor und Aktor konfigurierbar machen. Ich stelle mir eine Art Matrix (Array) vor in der die Fehlerzustände der Sensoren mit den Eingängen der Aktoren verknüft werden können. Damit möchte ich dann mittels GUI zb. den SensNTC[1].MaxError und SensDruck[1].MinError mit Relais[2] und den SensDruck[1].MaxError mit Relais[1] verknüpfen. Das ganze habe ich in der Steuerung momentan mit dynamischen Arrays aufgebaut um flexibel die Anzahl der Sensoren und Aktoren festlegen zu können.

Fragen:
1. Wie verküpfe ich einen Sensor.Alarm mit einm Aktor.Eingang?
2. Sollte man die Sensoren lieber von einer Klasse TSensor ableiten und das Relais von einer Klasse TAktor um dann ein mehrdimensionales Array (TAlarmConfig) zu erstellen? Hier fehlt mir leider noch die zündende Idee bzw. die Erfahrung mit OOP.


Delphi-Quellcode:
type
  TSensNtc = class(Tobject)
  private
    FTmpIs: single;
    FErrMin: boolean;
    FErrMax: boolean;
    FLimitMax: smallint;
    FLimitMin: smallint;
    procedure SetErrMin(const Value: boolean);
    procedure SetErrMax(const Value: boolean);
    procedure SetLimitMax(const Value: smallint);
    procedure SetLimitMin(const Value: smallint);
    procedure SetTmpIst(const Value: single);
  public
    property TmpIst: single read FTmpIs write SetTmpIst; // IsValue
    property ErrMin: boolean read FErrMin write SetErrMin; // IsValue
    property ErrMax: boolean read FErrMax write SetErrMax; // IsValue
    property LimitMax: smallint read FLimitMax write SetLimitMax;
    // SetValue
    property TmpLimitMin: smallint read FLimitMin write SetLimitMin;
    // SetValue
    constructor Create;
    destructor Destroy; override;
  end;

type
  TSensPress = class(Tobject)
  private
    FErrMin: boolean;
    FPressureIst: single;
    FLimitMax: smallint;
    FLimitMin: smallint;
    FErrMax: boolean;
    procedure SetErrMax(const Value: boolean);
    procedure SetErrMin(const Value: boolean);
    procedure SetLimitMax(const Value: smallint);
    procedure SetLimitMin(const Value: smallint);
    procedure SetPressureIst(const Value: single);
  public
    property PressureIst: single read FPressureIst write SetPressureIst;
    // IsValue
    property ErrMin: boolean read FErrMin write SetErrMin; // IsValue
    property ErrMax: boolean read FErrMax write SetErrMax; // IsValue
    property LimitMax: smallint read FLimitMax write SetLimitMax;
    // SetValue
    property LimitMin: smallint read FLimitMin write SetLimitMin;
    // SetValue
    constructor Create;
    destructor Destroy; override;
  end;

type
  TRelay = class(TObject)
  private
    FSetOn: boolean;
    procedure SetSetOn(const Value: boolean);
  public
    property SetOn: boolean read FSetOn write SetSetOn;
  end;

type
  TSteuerung = class(Tobject)
  private
    FSensNtcCount: integer;
    FSensPCount: integer;
    FRelayCount: integer;
    FSensNtc: array of TSensNtc;
    FSensP: array of TSensPress;
    FRelay: array of TRelay;
  public
    constructor Create;
    destructor Destroy; override;
  end;

constructor TSteuerung.Create;
var
  i: integer;
begin
  inherited;
  FSensNtcCount := 2;
  FSensPCount := 3;
  FRelayCount := 2;
  for i := 0 to FSensNtcCount - 1 do
    FSensNtc[i] := TSensNtc.Create;
  for i := 0 to FSensPCount - 1 do
    FSensP[i] := TSensPress.Create;
  for i := 0 to FRelayCount - 1 do
    FRelay[i] := TRelay.Create;
end;
Jan
  Mit Zitat antworten Zitat