7. Überblick DDE¶
DDE ist die Abkürzung für Dynamic Data Exchange (Dynamischer Datenaustausch). DDE ist ein Verfahren um Daten zwischen Programmen auszutauschen und Kommandos in anderen Programmme auszuführen, andere Programme also „fern zu steuern“. Dabei können mit Hilfe des Netzwerk-DDEs sogar Programme auf anderen Rechnern im Netzwerk gesteuert werden. Beispiele für den Einsatz von DDE sind das Abfragen einer Datenbank oder das Konvertieren von Daten in andere Formate. Bei der Verbindung (Konversation) zweier Programme über DDE unterscheidet man die Client-Seite und die Server-Seite. Der Client ist das Programm, das die Konversation einleitet, das Programm das einen Service leistet ist der Server. UniPlot kann sowohl Server sein als auch Client. Beispielsweise kann ein einfaches Messwerterfassungssystem die Möglichkeiten der Diagrammausgabe von UniPlot verwenden (UniPlot als Server) und UniPlot verwendet dabei gleichzeitig einen anderen Server zur Datenkonvertierung (UniPlot als Client).
7.1. UniPlot als Client¶
Das Programm das eine DDE-Konversation einleitet wird als Client bezeichnet. UniScript stellt dazu die folgenden sechs Funktionen zur Verfügung.
DDE-Client |
|
---|---|
DdeInitiate leitet eine DDE-Konversation zwischen UniPlot (Client) und einer anderen Anwendung (Server) ein. |
|
DdeExecute führt ein Makro im Server aus. |
|
DdePoke sendet Daten an einen Server. |
|
DdeRequest erfragt Daten von einem Server. |
|
DdeAdvise startet oder beendet einen DDE Nachrichtenschleife (Hot-Link). Aufforderung an den Server, den Client bei Datenänderung zu informieren. |
|
DdeTerminate schließt einen durch DdeInitiate geöffneten DDE-Kanal. |
|
DdeTerminateAll schließt alle offenen DDE-Kanäle. |
Beispiel
Wir wollen UniPlot als Client an einem Beispiel betrachten:
system("c:/msoffice/excel/excel.exe", SW_HIDE, 1);
hConv = DdeInitiate("Excel", "System");
ssFile = GetRootDirectory() + "samples\map-data.xls";
DdeExecute(hConv, "[OPEN(\"" + ssFile + "\")]")
hConvTab = DdeInitiate("Excel", "map-data.xls");
ssData = DdeRequest(hConvTab, "z1s1:z16384s255");
DdeExecute(hConv, "[QUIT()]");
DdeTerminateAll();
hedit = EdCreate();
EdSetText(hedit, ssData);
Wenn Sie diese Zeilen in einen Editor eingeben, werden folgende Aktionen durchgeführt:
Das Tabellenkalkulationsprogramm Excel wird gestartet.
Excel lädt die Datei
Samples\map-data.xls
aus dem UniPlot-Verzeichnis.Excel überträgt den Inhalt der Tabelle in eine UniPlot-Variable.
Der Inhalt der Tabelle wird in einem UniPlot-Editor angezeigt.
Es soll nicht näher auf das Skript eingegangen werden, schauen Sie sich die Beschreibungen der verwendeten Funktionen an.
7.2. UniPlot als Server¶
UniPlot kann auch als Server verwendet werden. Dazu stehen die folgenden sechs Funktionen zur Verfügung, die der Anwender von UniScript selbst schreiben muss.
DDE-Server |
|
---|---|
Die Funktion DdeCallback_Connect wird aufgerufen, wenn ein Client einen Kanal zu UniScript öffnet. |
|
Die DdeCallback_ConnectConfirm Funktion wird direkt hinter der DdeCallback_Connect-Funktion aufgerufen. |
|
Die DdeCallback_Execute Funktion wird vom Client aufgerufen, wenn ein Kommando in UniScript ausgeführt werden soll. |
|
Die DdeCallback_Poke Funktion wird vom Client aufgerufen um Daten an UniScript zu senden. |
|
Die DdeCallback_Request Funktion wird vom Client aufgerufen um Daten von UniPlot zu erfragen. |
|
Die DdeCallback_Advise Funktion wird vom Server aufgerufen um Daten an UniScript zu senden. |
|
Die Funktion DdeCallback_Disconnect wird aufgerufen, wenn der Client die Konversation schließt. |
Beispiel
Als Beispiel soll ein Basic-Programm in dem Textverarbeitungsprogramm Word geschrieben werden. Das Basic-Programm soll mit Hilfe von UniPlot ein Diagramm erzeugen.
Beginnen wir jedoch zunächst mit der UniPlot-Seite (der Server-Seite). Geben Sie das folgende Programm in einem UniPlot-Editor ein und übersetzen Sie das Programm, indem Sie den Menü-Befehl UniScript=>Speichern/Ausführen auswählen.
def DdeCallback_Poke(hConv, ssItem, ssTopic, ssData)
{
ss = strtok(ssData, ",")
rvData = strtod(ss)
plot(1:len(rvData), rvData);
return TRUE;
}
Aus Gründen der Übersichtlichkeit, sind hier keine Fehlerkontrollen durchgeführt worden, d.h. die Argumente der Parameter hConv, ssItem, ssTopic werden einfach ignoriert.
Betrachten wir nun die Client-Seite. Wir starten dazu Word und geben das folgende Makro ein (Befehl: Extras=>Makro=>Makro erstellen):
Sub Main
chan = DDEInitiate("UniPlotSL", "xydata")
DDEPoke chan, "xydata", "1, 5, 3, 4, 8, 12"
DDETerminate(chan)
End Sub
Wenn Sie nun die Basic-Funktion Main
in Word ausführen, wird ein
Diagramm in UniPlot erzeugt.
Siehe auch
id-1535155