![]() |
Ableitungsproblem (Welcher Vorfahr?) für neue Klasse
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:
oder
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;
Delphi-Quellcode:
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).
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; 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. |
Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse
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 :zwinker: 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:
Aber ich wüsste dafür derzeit keinen Grund.
type TComDrvS7 = object
//... end; |
Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse
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. |
Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse
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. |
Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse
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:
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! |
Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse
Zitat:
Ausserdem ist TObject die allerunterste hierarchie. Tiefer geht nicht, ausser Du nimmst einen Record. |
Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse
Welche DLL benutzt du denn? Prodave, Accon??
Kennst du das freie LibNoDave? Dazu existiert eine gute Delphikomponente. Kommunikation geht damit über Ethernet, MPI, usw... |
Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse
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!
|
Re: Ableitungsproblem (Welcher Vorfahr?) für neue Klasse
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. :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz