[DELPHI]
Delphi-Quellcode:
var
a: TMessgerät;
b: ISchreibenLesen;
begin
a := TMessgerät2.Create;
b := a as ISchreibenLesen;
b.readStuff;
end;
(Wobei das Objekt nach der Methode durch das Interface freigegeben wird.)
Ein solcher Aufruf ist mir noch nicht geläufig. Wo liegt der Unterschied wenn ich stattdessen mit dem Objekt a arbeite? Also a.readStuff.
@sx2008
Also der Datentransport ist schon in ein eigenen Klasse mit direktem Zugriff auf den GPIB-Bus.
Delphi-Quellcode:
procedure send (addr : integer; s : AnsiString; var status : integer);
procedure enter (var s : Ansistring; maxlen : word; var len : word;
addr : integer; var status : integer);
procedure ieee488_send (addr : longint; c : Pointer; len : longint; var status : longint) stdcall;
external 'IEEE_32M.DLL' name 'IEEE488_SEND';
procedure ieee488_enter (c : Pointer; maxlen : longint; var len : longint;
addr : longint; var status : longint) stdcall;
Also diese Klasse TGPIB weiß auch nichts von anderen Klassen.
Nur sind eben die Befehle für die Messgeräte unterschiedlich, z.B. Agilent und Keithley.
Delphi-Quellcode:
procedure send (22, 'ID?', status); //Agilent
procedure send (22, 'IDN?', status); //Keithley
Für jede Unterklasse muss man also fast alle Methoden implementieren. Den Vorteil den ich sehe, ist dass man einmal Methodennamen festlegt (auf Höhe der abstrakten TMessgeräte-Klasse), die dann immer wieder gebraucht werden und man so eine einheitliche Syntax über alle Messgeräte hat.
Vergleichen kann man das vielleicht mit der IVIDmm Klasse zur Ansteuerung von Messgeräten. Die besitzt auch ganz allgemeine Methoden Initialize, Close, Configure und Propertys Measurement.Read usw. Was am Ende für ein Messgerät dran hängt ist egal.
Ob es sich bei mir wirklich so allgemeingültig durchführen lässt, bin ich gerade am probieren.