AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ableitungsproblem (Welcher Vorfahr?) für neue Klasse
Thema durchsuchen
Ansicht
Themen-Optionen

Ableitungsproblem (Welcher Vorfahr?) für neue Klasse

Ein Thema von guidok · begonnen am 8. Aug 2007 · letzter Beitrag vom 8. Aug 2007
Antwort Antwort
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#1

Ableitungsproblem (Welcher Vorfahr?) für neue Klasse

  Alt 8. Aug 2007, 08:25
Hallo,

ich bin gerade dabei eine Schnittstellenklasse für die Kommunikation mit einer Siemens Steuerung (S7) zu erstellen. Dazu gibt es eine Fremdhersteller-DLL, die die notwendigen Funktionalitäten bereits zur Verfügung stellt und die ich etwas komfortabler in eine Klasse kapseln möchte.

Ich brauche jetzt einen kleinen Denkanstoß, ob und von welchem Vorfahren ich meine Klasse ableiten soll.

Das wäre z.B. denkbar (ist noch nicht komplett):
Delphi-Quellcode:
  TComDrvS7 = class
  private
    FHandle: Integer;
    FIPAdresseStr: array [0..255] of char;
    FCPUSlotNr: Integer;
    FConnected: Boolean;
    FErrorCode: Word;
    function GetDLLErrorString(Error: Word):String;
    function GetErrorString:String;
  protected
    //
  public
    constructor Create;
    destructor Destroy;
    function Connect: Boolean;
    procedure Disconnect;
    property ErrorString: String read GetErrorString;
  end;
oder

Delphi-Quellcode:
  TComDrvS7 = class(TObject)
  private
    FHandle: Integer;
    FIPAdresseStr: array [0..255] of char;
    FCPUSlotNr: Integer;
    FConnected: Boolean;
    FErrorCode: Word;
    function GetDLLErrorString(Error: Word):String;
    function GetErrorString:String;
  protected
    //
  public
    constructor Create;
    destructor Destroy;
    function Connect: Boolean;
    procedure Disconnect;
    property ErrorString: String read GetErrorString;
  end;
Mir ist schon klar, dass ich im Üblichen einen Vorfahren aussuche, der von mir benötigte Funktionalitäten bereitsstellt und die ich nur noch ergänzen muss, aber bei den etwas grundlegenderen Klassen habe ich nicht mehr so viel Ahnung, welche Funktionalitäten überhaupt notwendig sind (wegen Speicherverwaltung oder so).

Grundsätzlich wird es so sein, dass in der Software, die meine Klasse verwenden soll, mehrere Instanzen von TComDrvS7 erstellt werden (für jede Steuerung eine).

Naja, ich hoffe ihr versteht was ich meine.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse

  Alt 8. Aug 2007, 08:34
Der einzige Unterschied zwischen Variante a) und b) ist doch die Zeile "TComDrvS7 = class" bzw. "TComDrvS7 = class(TObject)"
Und das ist für den Compiler exakt dasselbe

Jede Klasse hat als Vorfahr mindestens TObject. Du könntest natürlich noch überlegen, ob du aus der VCL, der JVCL oder den Indys, etc noch etwas brauchst, was allerdings nicht so aussieht.


Edit: Du könntest noch überlegen, ob du noch einen Schritt zurückgehst und ohne TObject auskommen willst.
Delphi-Quellcode:
type TComDrvS7 = object
//...
end;
Aber ich wüsste dafür derzeit keinen Grund.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse

  Alt 8. Aug 2007, 08:35
class und class(TObject) sind ein und das selbe.
Die spannendste Frage ist ob man automatisch erkennen kann wie viele S7 angeschlossen sind und ob Hotplugging moeglich ist, sprich ob man erkennen kann wenn eine S7 an- bzw. abgesteckt wird.
Es bietet sich an eine Komponente zur Verwaltung der S7-Geraete zu erstellen. Diese handhabt dann das Erkennen der einzelnen Geraete und bietet eine Array-Property fuer die Liste der Geraete. Dieses waeren dann die angedachten TComDrvS7-Objekte.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#4

Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse

  Alt 8. Aug 2007, 08:37
Kauf Dir lieber eine Komponente, die schon die komplette S7 Ansteuerung kapselt.
Es ist billiger, als selber Wochenweise Zeit da rein zu investieren, und man kann sich ganz auf Logik der Ansteuerung konzentrieren, als sich mit Netzwerkpaketen auseinanderzusetzen. Ich spreche da aus Erfahrung

Im Übrigen sind Deine beiden Codestücke Identisch: Alles was nicht explizit von einer anderen Klasse abgeleitet ist, ist automatisch von TObject abgeleitet.

Ansonsten wäre wohl TPersistent eine gute Alternative, weil Du dann Einstellungen (z.B. CPU / RACK / SLOT) direkt abspeichern kannst.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#5

Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse

  Alt 8. Aug 2007, 08:59
Die Ansteuerung der S7 steckt bereits in einer DLL, ich muss mich also nicht mit Protokollen herumschlagen. Ich möchte nur die Funktionsaufrufe etwas komfortabler gestalten und konkreter auf mein Problem anpassen, darum diese Klasse.

Zitat:
class und class(TObject) sind ein und das selbe
Jetzt, wo ich das lese, glaube ich, dass ich das auch schon mal irgendwo gelesen hatte



Damit stellt sich mir die Frage, brauche ich, was mir TObject bereitsstellt überhaupt? Letztendlich möchte ich ja nur ein Object haben, das mir für den Aufbau und Betrieb einer Datenkommunikation notwendigen Eigenschaften und Methoden bereitstellt.


Danke soweit!
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#6

Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse

  Alt 8. Aug 2007, 09:03
Zitat von guidok:
Damit stellt sich mir die Frage, brauche ich, was mir TObject bereitsstellt überhaupt? Letztendlich möchte ich ja nur ein Object haben, das mir für den Aufbau und Betrieb einer Datenkommunikation notwendigen Eigenschaften und Methoden bereitstellt.
Ja, brauchst Du. Du willst schliesslich mindestens einen Constructor und wahrscheinlich auch einen Destruktor haben.
Ausserdem ist TObject die allerunterste hierarchie. Tiefer geht nicht, ausser Du nimmst einen Record.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse

  Alt 8. Aug 2007, 09:04
Welche DLL benutzt du denn? Prodave, Accon??

Kennst du das freie LibNoDave? Dazu existiert eine gute Delphikomponente. Kommunikation geht damit über Ethernet, MPI, usw...
Marc
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#8

Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse

  Alt 8. Aug 2007, 09:17
Ich wollte die DLL von MHJ verwenden, aber da ich bisher nur die Demoversion habe schaue ich mir auch mal LibNoDave an. Danke für die Info!
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse

  Alt 8. Aug 2007, 09:20
Ich hab selbst erst ein Projekt mit LibNoDave erledigt, ging echt einfach.

Kannst alles auslesen und schreiben, DB's, E/A's, M's, Systemdaten... als INT, BYTE, WORD, DWORD, BIT, usw.

Bei Fragen kann ich dir gerne etwas weiterhelfen.
Marc
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz