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;