DIAdem - National Instruments
Transcrição
DIAdem - National Instruments
Die PC-Werkstatt DIAdem ™ Script-DAC-Treiber *323077B-01* 323077B-01 Aug01 C This document represents a commitment from National Instruments to the environment. © Copyright 1995-2001 National Instruments (Ireland) Limited. All rights reserved. Product and company names listed are trademarks or trade names of their respective companies. ni.com/diadem ™ DIAdem Script-DAC-Treiber-Beschreibung Ausgabe November 2003 Deutschsprachige Niederlassungen National Instruments Germany GmbH Konrad-Celtis-Straße 79 81369 München Tel. (089) 741 31 30 Fax (089) 714 60 35 National Instruments Ges.m.b.H. Plainbachstraße 12 5101 Salzburg-Bergheim Tel. (0662) 45 79 90 0 Fax (0662) 45 79 90 19 National Instruments Switzerland Sonnenbergstraße 53 CH-5408 Ennetbaden Tel. (056) 200 51 51, (022) 980 05 11 (Genf) Fax (056) 200 51 55 Lokaler technischer Support Deutschland: Österreich: Schweiz: [email protected] [email protected] [email protected] www.ni.com/germany www.ni.com/austria www.ni.com/switzerland Technischer Support und Produktinformation weltweit ni.com National Instruments Corporate Firmenhauptsitz 11500 North Mopac Expressway Austin, Texas 78759-3504 USA Tel: 001 512 683 0100 Internationale Niederlassungen Australien 03 9879 5166, Belgien 02 757 00 20, Brasilien 011 284 5011, China (Shanghai) 021 6555 7838, China (ShenZhen) 0755 3904939, Dänemark 45 76 26 00, Finnland 09 725 725 11, Frankreich 01 48 14 24 24, Griechenland 30 1 42 96 427, Großbritannien 01635 523545, Hongkong 2645 3186, Indien 91805275406, Israel 03 6120092, Italien 02 413091, Japan 03 5472 2970, Kanada (Calgary) 403 274 9391, Kanada (Montreal) 514 288 5722, Kanada (Ottawa) 613 233 5949, Kanada (Québec) 514 694 8521, Kanada (Toronto) 905 785 0085, Korea 02 596 7456, Malaysia 603 9596711, Mexiko 5 280 7625, Neuseeland 09 914 0488, Niederlande 0348 433466, Norwegen 32 27 73 00, Polen 0 22 528 94 06, Portugal 351 1 726 9011, Schweden 08 587 895 00, Singapur 2265886, Spanien 91 640 0085, Taiwan 02 2528 7227 Weitere Informationen finden Sie im Anhang unter Technischer Support. Wenn Sie Vorschläge oder Kritik zur Dokumentation haben, senden Sie diese per E-Mail an: [email protected] Copyright © 2003 National Instruments (Ireland) Limited. Alle Rechte vorbehalten. Wichtige Informationen Garantie Für die Datenträger, auf denen Sie die Software von National Instruments erhalten, wird für den Zeitraum von 90 Tagen nach Erhalt der Lieferung (nachweisbar durch Lieferschein oder andere Dokumente) garantiert, dass sie keine Material- oder Verarbeitungsfehler aufweisen, die die Ausführung der Programmieranweisungen behindern. Wird National Instruments während der Garantiezeit über bestehende Schäden informiert, so wird National Instruments nach eigener Wahl Software-Datenträger, auf denen die Ausführung der Programmieranweisungen nicht möglich ist, entweder reparieren oder ersetzen. National Instruments leistet keine Gewähr dafür, dass die Ausführung der Software zu jeder Zeit oder fehlerfrei erfolgen kann. Einsendungen werden nur dann zur Garantiebearbeitung angenommen, wenn sie deutlich auf der Außenseite durch eine Autorisierungsnummer für die Rücksendung, eine sogenannte RMA-Nummer (Return Material Authorization), gekennzeichnet sind. National Instruments übernimmt die Versandkosten für Teile, die im Rahmen einer Garantieleistung an den Kunden zurückgesandt werden. National Instruments geht davon aus, dass die Informationen in diesem Dokument korrekt sind. Die technischen Angaben in diesem Dokument wurden sorgfältig überprüft. Falls trotzdem technische oder typographische Fehler vorhanden sein sollten, behält sich National Instruments das Recht vor, in nachfolgenden Auflagen dieses Dokuments Änderungen ohne vorherige Mitteilung an die Benutzer dieser Auflage vorzunehmen. Leser, die der Meinung sind, dass ein Fehler vorliegt, sollten sich direkt an National Instruments wenden. National Instruments übernimmt unter keinen Umständen eine Haftung für Schäden, die aufgrund dieses Dokuments beziehungsweise der darin enthaltenen Informationen oder im Zusammenhang damit entstehen. Soweit in dieser Garantieerklärung nicht ausdrücklich vorgesehen, übernimmt National Instruments weder ausdrücklich noch stillschweigend irgendeine Gewähr. Insbesondere wird keine Gewähr für marktgängige Qualität oder die Eignung für einen bestimmten Zweck übernommen. Schadenersatzansprüche für Schäden, die durch Verschulden oder Fahrlässigkeit von National Instruments verursacht werden, sind auf die Höhe des Kaufpreises beschränkt, den der Kunde für das Produkt bezahlt hat. National Instruments ist nicht haftbar für Schäden, die durch den Verlust von Daten, entgangenen Gewinn, durch die Einschränkung der Verwendbarkeit der Produkte oder durch mittelbare Schäden oder Folgeschäden entstehen. Dies gilt auch dann, wenn National Instruments auf die Möglichkeit solcher Schäden hingewiesen wurde. Diese Einschränkung der Haftung von National Instruments gilt für alle Arten von Schadenersatzansprüchen, sei es aufgrund Vertrags oder unerlaubter Handlung, und gilt auch bei Verschulden. Gerichtliche Schritte gegen National Instruments müssen innerhalb eines Jahres nach Entstehen des Anspruchs eingeleitet werden. National Instruments ist nicht für die Verzögerung von Leistungen haftbar, die durch Vorgänge verursacht werden, über die National Instruments bei vernünftiger Betrachtung keine Kontrolle ausüben kann. Vorliegende Garantieerklärung erstreckt sich nicht auf Schäden, Defekte, Fehlfunktionen oder Funktionsausfälle, die dadurch verursacht werden, dass der Benutzer die Anleitungen von National Instruments für die Installation, den Betrieb und die Wartung nicht einhält. Dieser Garantieausschluss gilt ebenso für Schäden, die durch Veränderungen des Produkts, durch Missbrauch oder fahrlässiges Verhalten aufseiten des Benutzers, durch Stromausfälle oder Spannungsstöße, durch Brand, Überschwemmungen, Unfälle, Handlungen Dritter oder andere Vorfälle verursacht werden, die bei vernünftiger Betrachtung nicht kontrolliert werden können. Copyright Diese Veröffentlichung ist urheberrechtlich geschützt. Sie darf weder teilweise noch insgesamt auf irgendeine Weise, sei es elektronisch oder mechanisch, sei es durch Fotokopieren, Aufzeichnen oder Speichern in einem Informationsabrufsystem oder im Wege der Übersetzung, ohne vorherige schriftliche Genehmigung von National Instruments Corporation vervielfältigt oder übertragen werden. Marken Citadel™, DIAdem™, LabVIEW™, National Instruments™, NI™ und ni.com™ sind Marken der National Instruments Corporation. Produkt- und Firmenbezeichnungen die hierin genannt wurden sind Marken oder Handelsnamen der jeweiligen Gesellschaft. Patente Patent-Informationen für National Instruments Produkte erhalten Sie auf folgende Weise: Über die Menüoption Hilfe»Patente in Ihrer Software, in der Datei patents.txt auf der jeweiligen CD und/oder im Internet unter www.ni.com/patents. Warnung bezüglich des Gebrauchs von National Instruments Produkten (1) Die Softwareprodukte von National Instruments wurden nicht mit Komponenten und Tests für ein Sicherheitsniveau entwickelt, welches für eine Verwendung bei oder in Zusammenhang mit chirurgischen Implantaten oder als kritische Komponenten von lebenserhaltenden Systemen, deren Fehlfunktion bei vernünftiger Betrachtungsweise zu erheblichen Verletzungen von Menschen führen kann, geeignet ist. (2) Bei jeder Anwendung, einschließlich der oben genannten, kann die Zuverlässigkeit der Funktion der Softwareprodukte durch entgegenwirkende Faktoren, einschließlich zum Beispiel Spannungsunterschieden bei der Stromversorgung, Fehlfunktionen der Computer-Hardware, fehlende Eignung der Software für das Computerbetriebssystem, fehlende Eignung von Übersetzungs- und Entwicklungssoftware, die zur Entwicklung einer Anwendung eingesetzt werden, Installationsfehler, Probleme bei der Software- und Hardwarekompatibilität, Funktionsstörungen oder Ausfall der elektronischen Überwachungs- oder Kontrollgeräte, vorübergehende Fehler der elektronischen Systeme (Hardware und/oder Software) unvorhergesehener Einsatz oder Missbrauch sowie Fehler des Anwenders oder des Anwendungsentwicklers (entgegenwirkende Faktoren wie diese werden nachstehend zusammenfassend ”Systemfehler” genannt) beeinträchtigt werden. Jede Anwendung, bei der ein Systemfehler ein Risiko für Sachwerte oder Personen darstellt (einschließlich der Gefahr körperlicher Schäden und Tod), sollte aufgrund der Gefahr von Systemfehlern nicht lediglich auf eine Form von elektronischem System gestützt werden. Um Schäden und unter Umständen tödliche Verletzungen zu vermeiden, sollte der Nutzer oder Anwendungsentwickler angemessene Sicherheitsmaßnahmen ergreifen, um Systemfehlern vorzubeugen. Hierzu gehören unter anderem Sicherungs- oder Abschaltmechanismen. Da jedes Endnutzersystem den Kundenbedürfnissen angepasst ist und sich von dem Testumfeld unterscheidet, und da ein Nutzer oder Anwendungsentwickler Softwareprodukte von National Instruments in Verbindung mit anderen Produkten in einer von National Instruments nicht getesteten oder vorhergesehenen Form einsetzen kann, trägt der Nutzer beziehungsweise der Anwendungsentwickler die letztendliche Verantwortung für die Überprüfung und Bewertung der Eignung von National Instruments Produkten, wenn Produkte von National Instruments in ein System oder eine Anwendung integriert werden. Dies erfordert unter anderem die entsprechende Entwicklung und Verwendung sowie Einhaltung einer entsprechenden Sicherheitsstufe bei einem solchen System oder einer solchen Anwendung. Inhaltsverzeichnis Inhaltsverzeichnis 1 Einleitung 2 Installation und Voraussetzungen VBScript Laufzeitumgebung..................................................................................... 2-1 2.2 Benutzeroberfläche ....................................................................................................... 2-1 2.3 Scriptprozeduren ........................................................................................................... 2-5 Prozeduren eines Eingangsblockes......................................................................... 2-5 Prozeduren eines Ausgangsblockes ........................................................................ 2-6 3 Prozeduren des Script DAC Treibers 3.1 Prozeduren zur Erfassung und Ausgabe von Daten...................................................... 3-1 Die Prozedur SFD_GetScan .................................................................................... 3-1 Die Prozedur SFD_ReadChannel ............................................................................ 3-1 Die Prozedur SFD_WriteChannel ............................................................................ 3-2 Die Prozedur SFD_SendScan ................................................................................. 3-3 3.2 Prozeduren zur Initialisierung und Deinitialisierung der Geräte und Signale................. 3-4 Die Prozedur SFD_Init ............................................................................................. 3-4 Die Prozedur SFD_DeInit......................................................................................... 3-5 Die Prozedur SFD_InitInChannel............................................................................. 3-5 Die Prozedur SFD_DeInitInChannel ........................................................................ 3-6 Die Prozedur SFD_InitOutChannel .......................................................................... 3-7 Die Prozedur SFD_DeInitOutChannel ..................................................................... 3-8 Die Prozedur SFD_FinalInit ..................................................................................... 3-8 3.3 Prozeduren die während Start bzw. Ende der Messung aufgerufen werden................. 3-9 Die Prozedur SFD_Start .......................................................................................... 3-9 Die Prozedur SFD_FinalStop................................................................................... 3-9 4 Das UDI-Control 4.1 Funktionen zum Auf- und Abbau der Verbindung.......................................................... 4-2 Die Funktion Open ................................................................................................... 4-2 Die Funktion Close................................................................................................... 4-2 © National Instruments (Ireland) Limited v Script-DAC-Treiber Inhaltsverzeichnis 4.2 Funktionen zur Datenübertragung ................................................................................. 4-3 Die Funktion Write.................................................................................................... 4-3 Die Funktion Read ................................................................................................... 4-3 4.3 Änderung schnittstellenspezifischer Parameter............................................................. 4-4 Die Funktion ParamSet............................................................................................ 4-4 Die Funktion ParamGet ........................................................................................... 4-5 4.4 Hilfsfunktionen ............................................................................................................... 4-5 Die Funktion ErrorTextGet........................................................................................ 4-5 Die Funktion Parse .................................................................................................. 4-5 Die Funktion Append................................................................................................ 4-7 Die Funktion Sleep................................................................................................... 4-7 Die Funktion NamedValueSet .................................................................................. 4-8 Die Funktion NamedValueGet.................................................................................. 4-8 Das Attribute ByteSwap ........................................................................................... 4-8 Das Attribute Version ............................................................................................... 4-9 Das Attribute IsOpen................................................................................................ 4-9 4.5 Unterstützte Schnittstellen............................................................................................. 4-9 Serielle Schnittstelle (RS-232) ............................................................................... 4-10 GPIB (IEEE-488).................................................................................................... 4-11 TCP/IP ................................................................................................................... 4-12 5 Arbeitsweise 5.1 Gültigkeit von Variablen................................................................................................. 5-1 5.2 Zugriff auf DIAdem Variablen ........................................................................................ 5-2 5.3 Betriebsmodi des Script DAC Treibers .......................................................................... 5-2 Synchron zum Messtakt........................................................................................... 5-3 Asynchron zum Messtakt......................................................................................... 5-3 5.4 Beeinflussung anderer Treiber ...................................................................................... 5-4 6 Beispiele 6.1 Namenskonventionen.................................................................................................... 6-1 6.2 Beispiele ohne Mess-Hardware..................................................................................... 6-2 Beispiel Simulationsblock......................................................................................... 6-2 Beispiel für eine serielle Maus ................................................................................. 6-5 DIAdem-DAC-Treiberbeschreibung vi ni.com Inhaltsverzeichnis 6.3 Beispiele mit dem Gerätesimulator.............................................................................. 6-10 Vorbereitungen....................................................................................................... 6-10 Einfache Beispiele mit dem Gerätesimulator ......................................................... 6-13 Einfluss des Datenformats auf die Ausführungsgeschwindigkeit ........................... 6-15 Parametrierung und Skalierung ............................................................................. 6-19 Optimierung durch Ausnutzen des Befehlssatzes.................................................. 6-22 Parametrierung der Kanäle.................................................................................... 6-28 6.4 Geräte-Beispiele.......................................................................................................... 6-30 Initialisierung des Funktionsgenerator HP 33120A ................................................ 6-30 Online-Parametrierung des Funktionsgenerator HP 33120A................................. 6-32 Auslesen eines GPS Empfängers (Motorola Binärformat) ..................................... 6-35 Flüssigkeitsstandanzeige mit einem Sensor der Firma TEMIC.............................. 6-40 CO2 Messgerät NGA 2000 der Firma FISHER-ROSEMOUNT .............................. 6-43 Kraftstoffwaage 733 S der Firma AVL .................................................................... 6-46 7 Der Gerätesimulator 7.1 Allgemeines ................................................................................................................... 7-1 7.2 Systemvoraussetzungen ............................................................................................... 7-2 7.3 Inbetriebnahme des Gerätesimulators........................................................................... 7-2 7.4 Bedienung ..................................................................................................................... 7-3 7.5 Funktionstest des Simulators......................................................................................... 7-5 7.6 Ausgabeformate ............................................................................................................ 7-5 ASCII........................................................................................................................ 7-5 ASCII mit Status....................................................................................................... 7-6 Binär, 1 Byte............................................................................................................. 7-6 Binär, 1 Byte mit Status............................................................................................ 7-6 Binär, 2 Byte MSB-LSB............................................................................................ 7-7 Binär, 2 Byte MSB-LSB mit Status ........................................................................... 7-7 Binär, 2 Byte LSB-MSB............................................................................................ 7-7 Binär, 2 Byte LSB-MSB mit Status ........................................................................... 7-8 Binär, 8 Byte MSB-LSB............................................................................................ 7-8 Binär, 8 Byte LSB-MSB............................................................................................ 7-8 Binär, 8 Byte LSB-MSB mit Status ........................................................................... 7-9 7.7 Befehlssatz .................................................................................................................... 7-9 Der Befehl ACH........................................................................................................ 7-9 Der Befehl ACH?.................................................................................................... 7-10 Der Befehl AMP ..................................................................................................... 7-10 © National Instruments (Ireland) Limited vii Script-DAC-Treiber Inhaltsverzeichnis Der Befehl AMP? ................................................................................................... 7-11 Der Befehl COF ..................................................................................................... 7-11 Der Befehl COF? ................................................................................................... 7-11 Der Befehl DCL...................................................................................................... 7-12 Der Befehl ENU ..................................................................................................... 7-12 Der Befehl ENU? ................................................................................................... 7-12 Der Befehl EST? .................................................................................................... 7-13 Der Befehl FRE...................................................................................................... 7-13 Der Befehl FRE?.................................................................................................... 7-14 Der Befehl IDN?..................................................................................................... 7-14 Der Befehl ICR....................................................................................................... 7-14 Der Befehl ICR?..................................................................................................... 7-14 Der Befehl MSV? ................................................................................................... 7-15 Der Befehl RUN ..................................................................................................... 7-15 Der Befehl STP ...................................................................................................... 7-15 Der Befehl TRG ..................................................................................................... 7-15 Der Befehl WAV ..................................................................................................... 7-16 Der Befehl WAV? ................................................................................................... 7-16 8 Literatur Dokumentation zu VBScript ..................................................................................... 8-1 Windows-Scripting Host........................................................................................... 8-1 Script-Debugger....................................................................................................... 8-1 DIAdem-DAC-Treiberbeschreibung viii ni.com Script-DAC-Treiber 1 Einleitung Der Script DAC Treiber ist eine Komponente innerhalb des Gerätes DIAdem-DAC. Er bietet die Möglichkeit, externe Messgeräte die über eine Kommunikationsschnittstelle mit dem Rechner verbunden sind, schnell und ohne großen Programmieraufwand in DIAdem einzubinden. Der gesamte Script DAC Treiber besteht aus drei Teilkomponenten: Dem Treiber selbst, der in Form eines Blockes innerhalb des Gerätes DAC angesprochen wird. Diese Teilkomponente ist für alle Geräte gleich und wird in DIAdem als GPI-DLL eingebunden. Die DLL ist Bestandteil der DIAdem Installation. Einer Scriptdatei, die vom Anwender definiert wird und die eigentliche Logik der Geräteanbindung beschreibt. Diese Datei wird für jeden Gerätetyp erstellt um damit die Besonderheiten des Gerätes wie z.B. die verwendeten Protokolle zu berücksichtigen. Einem Active-X Control, über das die Schnittstellen des Rechners (serielle, GPIB und TCP/IP angesprochen werden können. Dieses Control wird im Folgenden auch als UDI-Control bezeichnet. UDI steht für „Universal Device Interface“, eine Softwareschnittstelle mit der die unterschiedlichen Kommunikationsschnittstellen des Rechners gleichartig angesprochen werden können. Diese Teilkomponente ist für alle Geräte gleich. Dieses Active-X Control ist Bestandteil der DIAdem Installation. Durch die Verwendung von Microsoft Visual Basic Script, kurz VBS, als Scriptsprache können sowohl einfache Geräteanbindungen schnell und leicht erstellt werden als auch komplexe Protokolle realisiert werden. Sie sollten dieses Dokument zusammen mit der neuesten Version der folgenden Komponenten erhalten haben: Script DAC Treiber(GfSVBSDR.DLL, GfSVBSDR.G5D) UDI-Active-X Control (SFD_OBJECTS.OCX) Beispieldateien. Die Dateien des Script DAC Treibers sollten Sie in das Verzeichnis ADDINFO unter dem DIAdem-Installationsverzeichnis kopieren. DIAdem-DAC-Treiberbeschreibung 1-2 ni.com Script-DAC-Treiber Das UDI-Active-X Control kopieren Sie bitte in das DIAdemInstallationsverzeichnis und die Beispieldateien in das DAC Verzeichnis und dem „User“-Verzeichnis von DIAdem. Diese, in sich abgeschlossene Einführung wird ihnen die ersten Schritte mit dem Script DAC Treiber erleichtern. Sollten Sie bereits frühere Versionen dieses Dokumentes in Händen gehalten haben, beachten Sie bitte besonders Kapitel 8 „Änderungsnachweis“. © National Instruments (Ireland) Limited 1-3 Script-DAC-Treiber DIAdem Data Organization 2 Installation und Voraussetzungen Der Script DAC Treiberwird als DIAdem GPI-Treiber angemeldet. Zur Anmeldung wählen Sie bitte im Dialog zur Registrierung eines GPI-Treibers den Treiber mit dem Namen „GfSVBSDR.DLL“ aus dem Verzeichnis DIAdem\Addinfo aus. Näheres zur Installation eines GPI Treibers entnehmen Sie bitte der DIAdem Online-Hilfe. Nachdem der Treiber in DIAdem registriert und geladen ist, können die Ikonen für Ein- und Ausgabeblöcke auf die Bau- und Funktionsgruppenleiste von DIAdem-DAC gelegt werden. Dazu muss zunächst der bestehende Schaltplan gelöscht werden. Danach wir über das Menü Einstellungen » Einzelwertverarbeitung » Treiber konfigurieren » Neuer Eintrag der Treiber mit dem Namen VBScript ausgewählt. Anschließend stehen auf der Bau- und Funktionsgruppenleiste die Blöcke „ScriptIn“ und „ScriptOut“ zur Auswahl für Schaltpläne zur Verfügung. VBScript Laufzeitumgebung Zum Betrieb des Script DAC Treibers ist es erforderlich, dass die Laufzeitumgebung von VBScript auf Ihrem Rechner installiert ist. Diese Komponente wird automatisch bei der Installation von Windows 2000 installiert. Für Windows 95, Windows 98 und Windows NT wird es mit dem Internet Explorer (ab Version 4) installiert. Ist die Komponente nicht installiert, können Sie VBScript von der Webseite http://msdn.microsoft.com/scripting/ kostenfrei herunterladen. 2.2 Benutzeroberfläche Nachdem ein Ein- oder Ausgabeblock in einen Schaltplan eingefügt wurde, wird mit einem Doppelklick darauf folgender Dialog zur Parametrierung des Treibers angezeigt Script-DAC-Treiber 2-1 ni.com Script-DAC-Treiber Der Dialog zum DIAdem Script DAC Treiber enthält eine Reihe von Parametern, die sich in zwei Gruppen unterteilen lassen : Auf der einen Seite gibt es Parameter, die zum Betrieb des Treibers zwingend erforderlich sind. Zu diesen Parametern gehören die Parameter Dateiname, Betriebsmodus und Signalname. Die übrigen Parameter sind optional. Diese Parameter stehen dem Entwickler des betreffenden Scripts frei zur Verfügung. Ihre Bedeutung wird vom Entwickler des Scripts festgelegt und sollte von ihm ausführlich dokumentiert werden. Weiterhin obliegt ihm die Aufgabe, im Script eine Überprüfung der benötigten Parameter vorzunehmen und ggf. aussagekräftige Fehlermeldungen vom Script auszugeben. Nachfolgend wird die Bedeutung der einzelnen Parameter des Dialogs erläutert. Signalparameter: Im oberen Teil des Dialogs befindet sich die Signalliste, in der die einzelnen Signale mit ihren Parametern aufgelistet sind. Die einzelnen Spalten dieser Liste enthalten folgende Informationen: Nr Hier wird eine laufende Nummer des Signals angezeigt. Diese dient nur zur Information des Anwenders und kann nicht geändert werden. DIAdem-DAC-Treiberbeschreibung 2-2 ni.com Script-DAC-Treiber Signalname In dieser Spalte werden die Namen der einzelnen Signale angezeigt, die auch im Schaltplan verwendet werden. Diese Signalnamen müssen innerhalb eines Schnittstellentreiberblocks eindeutig sein und dürfen eine Länge von 16 Zeichen nicht überschreiten. Anschl.-Nr Hierbei handelt es sich um einen frei verfügbaren Parameter, der der Identifikation einer Messstelle im Script dient. Dieser Parameter wird im allgemeinen verwendet, um einen Einoder Ausgang eines angeschlossenen Geräts zu spezifizieren. Als Wert für diesen Parameter sind ganzzahlige Werte zulässig. Aktiv In dieser Spalte ist es möglich, gezielt einzelne Kanäle für die bevorstehende Messung zu aktivieren bzw. zu deaktivieren. Kanäle die deaktiviert sind, dienen innerhalb des Dialogs als Platzhalter. Sie werden bei der Messung nicht berücksichtigt und es werden bei der Messung keinerlei Informationen über diese Kanäle an das zugehörige Script übergeben. Parameter Hier kann zu jedem Kanal ein beliebiger Parameter an das Script übergeben werden. Die Bedeutung dieser Parameter wird im zugehörigen Script festgelegt und ist der Dokumentation zum Script zu entnehmen. Listenlänge Über das Feld Listenlänge kann die Anzahl der Signale festgelegt werden. Die Anzahl kann zwischen 1 und 255 liegen. Scriptauswahl In der Mitte des Dialogs befindet sich ein Eingabefeld, in dem der Name des zu verwendenden Scripts anzugeben ist. Durch Anklicken des Button "..." gelangt man in einen Dialog zur Auswahl des gewünschten Scripts. Geräteparameter Im unteren Teil des Dialogs werden die Geräteparameter eingegeben. Hierbei handelt es sich um zwei Parameter, die an das Script übergeben werden und einen Parameter zur Einstellung des Betriebsmodus des Treibers. Parameter 1 und 2 sind optionale Parameter, deren Bedeutung vom Entwickler des zugehörigen Scripts festgelegt werden. Über den Parameter "Betriebsmodus" wird festgelegt, in welchem Modus der Treiber betrieben werden soll. Näheres zu den Betriebsmodi des Treibers ist der Seite Betriebsmodi des Script DAC Treibers zu entnehmen. © National Instruments (Ireland) Limited 2-3 Script-DAC-Treiber Script-DAC-Treiber Script-Vorlage Die Taste "Script-Vorlage" generiert eine Vorlage für eine Scriptdatei und kopiert diese Vorlage in das Clipboard. Nach Anklicken dieses Button wird ein weitere Dialog zur Parametrierung der Inhalte der neuen Scriptdatei angezeigt : In der Auswahlliste “Schnittstelle” können die folgenden Begriffe ausgewählt werden : Begriff keine Serielle GFS-GPIB NI-GPIB TCP/IP Generierte Scriptinhalte Es werden keine Vorlagen für den Zugriff auf eine Schnittstelle generiert. Es wird eine Beispiel für die Parametrierung und das Öffnen einer seriellen Schnittstelle generiert Es wird eine Beispiel für die Parametrierung und das Öffnen eines GPIB-Devices mit NEC µPD 7210 Prozessor generiert Es wird eine Beispiel für die Parametrierung und das Öffnen eines GPIB-Devices von National Instruments generiert Es wird eine Beispiel für die Parametrierung und das Öffnen eine TCP/IP Ports generiert In der Auswahlliste “Prozeduren” kann der Begriff “nur notwendige” oder „Alle“ generiert werden. Wird „nur notwendige“ gewählt, so werden nur die Prozeduren generiert, die unbedingt notwendig sind. Andernfalls werden alle Prozeduren generiert, die von DIAdem aufgerufen werden. Unter „Bibliotheken“ können die Basisbibliothek sowie die Bibliothek für das AK-Protokoll ausgewählt werden. Die erzeugte Vorlage kann in einem beliebigen Texteditor durch "Einfügen" aus dem Clipboard übernommen werden. Die vorbereiteten Prozeduren, die von DIAdem vor, während und unmittelbar nach der Messung aufgerufen werden, können vom Anwender mit DIAdem-DAC-Treiberbeschreibung 2-4 ni.com Script-DAC-Treiber der notwendigen Funktionalität versehen werden. Die Funktionen, die der Script DAC Treiber nicht benötigt, können im Script gelöscht werden. 2.3 Scriptprozeduren Die in der Scriptdatei enthaltenden Prozeduren werden von DIAdem während der verschiedenen Phasen der Messung nacheinander aufgerufen. Die folgende Tabelle listet alle von DIAdem aufgerufenen Funktion auf : Prozeduren eines Eingangsblockes Phase Prozedur Verwendung INIT SFD_Init Initialisierung des angeschlossenen Geräts Initialisierung eines Eingangskanals SFD_InitInChannel Optional Ja Ja START SFD_Start Start der Messung oder Wechsel einer Triggerfolge Ja MESSUNG SFD_GetScan Ja SFD_ReadChannel Einlesen eines kompletten Scans vom angeschlossenen Gerät Übergabe eines einzelnen Messwerts vom Script an den Schnittstellentreiber STOP SFD_FinalStop Ende der Messung Ja DEINIT SFD_DeInit Deinitialisierung des angeschlossenen Geräts Deinitialisierung eines Eingangskanals Ja SFD_DeInitInChannel Nein Ja Das Script eines Eingangsblockes muss somit mindestens die Prozedur „SFD_ReadChannel“ in der Werte vom Script an DIAdem zurückgegeben werden enthalten. © National Instruments (Ireland) Limited 2-5 Script-DAC-Treiber Script-DAC-Treiber Prozeduren eines Ausgangsblockes Phase Prozedur Verwendung INIT SFD_Init Initialisierung des angeschlossenen Geräts Initialisierung eines Ausgangskanals SFD_InitOutChannel START SFD_Start MESSUNG SFD_SendScan SFD_WriteChannel STOP SFD_FinalStop DEINIT SFD_DeInit Start der Messung oder Wechsel einer Triggerfolge Optional Ja Ja Ja Übertragung eines gesam- Nein ten Scans an das angeschlossene Gerät Übergabe eines einzelnen Nein Messwerts vom Script DAC Treiberan das Script Ende der Messung Deinitialisierung des angeschlossenen Geräts SFD_DeInitOutChannel Deinitialisierung eines Ausgangskanals Ja Ja Ja Das Script eines Ausgangsblockes muss somit mindestens die Prozeduren „SFD_SendScan“ und „SFD_WriteChannel“ enthalten. Parameter mit gleichem Namen haben für die Funktion immer die gleiche Bedeutung. So wird z.B. der Parameter ErrorP dazu benutzt, ggf. eine Fehlermeldung vom Script an den Script DAC Treiber zu übergeben. Dies gilt für alle Prozeduren in denen die Variable ErrorP verwendet wird. Wird diesem Parameter innerhalb einer Funktion ein Text zugewiesen, so wird die laufende Messung beendet und vom Script DAC Treiber wird eine Fehlermeldung ausgegeben, in der Wert des Parameters ErrorP ausgegeben wird. DIAdem-DAC-Treiberbeschreibung 2-6 ni.com DIAdem Data Organization 3 Prozeduren des Script DAC Treibers 3.1 Prozeduren zur Erfassung und Ausgabe von Daten Die Prozedur SFD_GetScan Die Funktion SFD_GetScan() wird einmal pro Messzyklus aufgerufen. Ihre Aufgabe besteht darin, die Messdaten eines kompletten Scans (die Daten aller Kanäle, die an der Messung beteiligt sind) beim angeschlossenen Gerät anzufordern und die Daten in global definierten Variablen des Scripts zu speichern. Mit dieser Funktion ist es möglich Daten von einem Messgerät zu empfangen, welches die Daten immer für einen kompletten Scan liefert. Syntax : SFD_GetScan( ErrorP ) Parameter: ErrorP: Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Hinweis: Optionale Funktion für die Datenerfassung Die Prozedur SFD_ReadChannel Mit der Prozedur SFD_ReadChannel() werden die Messdaten eines einzelnen Kanals vom Script an DIAdem übergeben. Diese Prozedur wird mit jedem Messzyklus für jeden aktiven Messkanal des Scripts einmal aufgerufen. Bei dieser Funktion ist zu beachten, dass der Wert ParamP, der von der Funktion an den Script DAC Treiberzurückgegeben wird, immer von VT_Empty verschieden sein muss. Wird hier der Wert VT_Empty (z. B. eine nicht initialisierte Variable) zurückgegeben, so geht der Script DAC Treiber davon aus, dass diese Funktion noch nicht beendet wurde. Deshalb wird SFD_ReadChannel nicht mehr aufgerufen und der Treiber kann keine Werte mehr liefern. Script-DAC-Treiber 3-1 ni.com Script-DAC-Treiber Die laufende DIAdem Messung kann dann nicht mehr ordnungsgemäß beendet bzw. abgebrochen werden. Syntax : SFD_ReadChannel( ChannelNumberP, ParamP, DataP, ErrorP ) Parameter: ChannelNumberP: In diesem Parameter wird der Funktion die Anschlußnummer des Signals aus dem Dialog des Script DAC Treibers übergeben (falls diese nicht durch andere Funktionen des Scripts geändert wurde). Dieser Parameter dient zur Identifizierung des gewünschten Messkanals. ParamP: In diesem Parameter wird der Signalparameter aus der Bedienoberfläche des Script DAC Treibers an die Funktion übergeben (sofern dieser nicht durch andere Funktionen des Scripts geändert wurde). DataP: Über den Parameter DataP werden die Messdaten vom Script an den Script DAC Treiberübergeben. Hierbei ist es zwingend erforderlich, dass diesem Parameter bei jedem Aufruf dieser Prozedur ein Wert zugewiesen wird, da diese Prozedur andernfalls nicht abgeschlossen gilt und der Treiber blockiert. ErrorP: Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Hinweis: Die Implementierung dieser Funktion im Script ist zur Datenerfassung mit dem Script DAC Treiberzwingend erforderlich. Die Prozedur SFD_WriteChannel Mit der Funktion SFD_WriteChannel() werden vom Script DAC Treiber Daten zur Ausgabe an das Script übergeben. Diese Daten können entweder in dieser Funktion direkt an das angeschlossene Gerät übergeben werden oder aber in entsprechenden Variablen des Scripts gespeichert werden, damit sie später mit der Funktion SFD_SendScan() als kompletter Scan an das Gerät übertragen werden. Diese Funktion wird mit jedem Messzyklus einmal für jeden aktiven Ausgabekanal aufgerufen. Syntax : DIAdem-DAC-Treiberbeschreibung 3-2 ni.com Script-DAC-Treiber SFD_WriteChannel( ChannelNumberP, ParamP, DataP, DoneP, ErrorP ) Parameter: ChannelNumberP: In diesem Parameter wird der Funktion die Anschlussnummer des Signals aus dem Dialog des Script DAC Treibers übergeben (falls diese nicht durch andere Funktionen des Scripts geändert wurde). Dieser Parameter dient zur Identifizierung des gewünschten Ausgabekanals. ParamP: In diesem Parameter wird der Signalparameter aus der Bedienoberfläche des Script DAC Treibers an die Funktion übergeben (sofern dieser nicht durch andere Funktionen des Scripts geändert wurde). DataP: Über den Parameter DataP werden die Messdaten vom Script DAC Treiber an das Script übergeben. Diese Daten können direkt an das Gerät übertragen werden oder zur Übertragung in der Funktion SFD_SendScan in entsprechenden Variablen des Scripts gespeichert werden. DoneP: Über den Parameter DoneP wird dem Script DAC Treibersignalisiert, dass die Bearbeitung dieser Funktion abgeschlossen ist. Aus diesem Grund ist es zwingend erforderlich, dass diesem Parameter am Ende der Funktion ein beliebiger Wert zugewiesen wird. Wird diesem Parameter kein Wert zugewiesen, so wird diese Prozedur nicht wieder aufgerufen und der Treiber blockiert. ErrorP: Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Die Implementierung dieser Funktion ist für Scripte, die Daten ausgeben sollen, zwingend erforderlich. Die Prozedur SFD_SendScan Mit der Funktion SFD_GetScan() können die Daten eines kompletten Scans auf einmal an ein Gerät übertragen werden. Diese Funktion wird einmal pro Messzyklus aufgerufen. Syntax: SFD_SendScan( DoneP, ErrorP ) © National Instruments (Ireland) Limited 3-3 Script-DAC-Treiber Script-DAC-Treiber Parameter: DoneP Über den Parameter DoneP wird dem Script DAC Treibersignalisiert, dass die Bearbeitung dieser Funktion abgeschlossen ist. Aus diesem Grund ist es zwingend erforderlich, dass diesem Parameter am Ende der Funktion ein beliebiger Wert zugewiesen wird. Wird diesem Parameter kein Wert zugewiesen, so wird diese Funktion vom Script DAC Treiber nicht wieder aufgerufen und der Treiber hängt. ErrorP Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Diese Funktion ist optional für die Ausgabe von Daten. 3.2 Prozeduren zur Initialisierung und Deinitialisierung der Geräte und Signale Die Prozedur SFD_Init Die Funktion SFD_Init() kann zur grundlegenden Initialisierung und zum Verbindungsaufbau zum Gerät benutzt werden. Die Funktion wird einmal während der Messvorbereitung aufgerufen. Syntax: SFD_Init( DeviceParam1V, DeviceParam2V, ErrorP ) Parameter: DeviceParam1V, DeviceParam2V Diese beiden Parameter entsprechen den Geräteparametern "Parameter 1" und "Parameter 2" aus dem Dialog zum Schnittstellentreiber. In diesen Parametern können z.B. Informationen über die zu verwendende Schnittstelle oder zu Einstellungen des angeschlossenen Geräts an das Script übergeben werden. ErrorP Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Para- DIAdem-DAC-Treiberbeschreibung 3-4 ni.com Script-DAC-Treiber meter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Hinweis: Optionale Funktion Initialisierung. zur grundlegenden Die Prozedur SFD_DeInit Die Funktion SFD_DeInit() kann zur Deinitialisierung der angeschlossenen Geräte und zum Verbindungsabbau benutzt werden. Die Funktion wird einmal während der Messnachbereitung aufgerufen. Syntax: SFD_DeInit( ErrorP ) Parameter: ErrorP Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Hinweis: Optionale Funktion zur Deinitialisierung Die Prozedur SFD_InitInChannel Die Funktion SFD_InitInChannel() dient zur Initialisierung der benötigten Messkanäle. Sie wird während der Messvorbereitung einmal für jeden aktiven Messkanal aufgerufen. In dieser Funktion können die einzelnen Messkanäle initialisiert werden (z.B. Einstellung des Messbereiches) und bei Bedarf Skalierungen für den Script DAC Treiberdefiniert werden. Syntax: SFD_InitInChannel( ChannelNumberP, ParamP, ErrorP [, ScalingFactorP, ScalingOffsetP] [, ChannelCountV]) Parameter: ChannelNumberP Hier wird dem Script die Anschlussnummer des Eingangs aus dem Dialog zum Script DAC Treiber übergeben. Dieser Parameter kann im Script als Verweis auf den physikalischen Eingang des angeschlossenen Geräts verwendet werden. ParamP In diesem Parameter wird der Signalparameter ("Parameter im Dialog zum Schnittstellenparameter") an das Script über- © National Instruments (Ireland) Limited 3-5 Script-DAC-Treiber Script-DAC-Treiber geben. Dieser Parameter kann im Script dazu verwendet werden, um z.B. den Messbereich eines Eingangs einzustellen. ErrorP Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. ScalingFactorP Über diesen Parameter kann vom Script ein Skalierfaktor an den Script DAC Treiberzurückgegeben werden, mit dem die Messwerte des Kanals bei der Messung automatisch verrechnet werden. Dieser Parameter ist optional, kann aber nur in Verbindung mit dem Parameter ScalingOffsetP verwendet werden. ScalingOffsetP Über diesen Parameter kann vom Script ein Skalieroffset an den Script DAC Treiberzurückgegeben werden, mit dem die Messwerte des Kanals bei der Messung automatisch verrechnet werden. Dieser Parameter ist optional, kann aber nur in Verbindung mit dem Parameter ScalingFactorP verwendet werden. ChannelCountV Mit diesem optionalen Parameter wird dieser Funktion mitgeteilt, wie viele aktive Kanäle vorhanden und vom Script bearbeitet werden müssen. Dieses Information kann z.B. benutzt werden, um ausreichend große Felder für die Aufnahme von Messdaten anzulegen. Hinweis: Optionale Funktion zur Initialisierung der Eingänge Die Prozedur SFD_DeInitInChannel Die Funktion SFD_DeInitInChannel() dient zur Deinitialisierung der benutzten Eingänge. Diese Funktion wird während der Messnachbereitung einmal für jeden aktiven Messkanal aufgerufen. Syntax: SFD_DeInitInChannel( ChannelNumberV, ErrorP ) Parameter: ChannelNumberV Hier wird dem Script die Anschlussnummer des Eingangs aus dem Dialog zum Script DAC Treiber übergeben (sofern dieser nicht durch andere Funktionen des Scripts geändert wurde). Dieser Parameter kann im Script als Verweis auf den physikalischen Eingang des angeschlossenen Geräts verwendet werden. DIAdem-DAC-Treiberbeschreibung 3-6 ni.com Script-DAC-Treiber ErrorP Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Hinweis: Optionale Funktion zur Deinitialierung der Eingänge Die Prozedur SFD_InitOutChannel Die Funktion SFD_InitOutChannel() dient zur Initialisierung der benötigten Ausgänge. Sie wird während der Messvorbereitung einmal für jeden aktiven Ausgang aufgerufen. In dieser Funktion können die einzelnen Ausgänge initialisiert werden (z.B. Einstellung des Ausgabebereichs) und bei Bedarf Skalierungen für den Script DAC Treiberdefiniert werden. Syntax: SFD_InitOutChannel( ChannelNumberP, ParamP, ErrorP [, ScalingFactorP, ScalingOffsetP] [, ChannelCountV]) Parameter: ChannelNumberP Hier wird dem Script die Anschlussnummer des Ausgangs aus dem Dialog zum Script DAC Treiber übergeben. Dieser Parameter kann im Script als Verweis auf den physikalischen Ausgang des angeschlossenen Geräts verwendet werden. ParamP In diesem Parameter wird der Signalparameter ("Parameter im Dialog zum Schnittstellenparameter") an das Script übergeben. Dieser Parameter kann im Script dazu verwendet werden, um z.B. den Ausgabebereich eines Ausgangs einzustellen. ErrorP Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. ScalingFactorP Über diesen Parameter kann vom Script ein Skalierfaktor an den Script DAC Treiberzurückgegeben werden, mit dem die auszugebenden Werte des Kanals bei der Messung automatisch verrechnet werden. Dieser Parameter ist optional, kann aber nur in Verbindung mit dem Parameter ScalingOffsetP verwendet werden. ScalingOffsetP Über diesen Parameter kann vom Script ein Skalieroffset an den Script DAC Treiberzurückgegeben werden, mit dem die auszugebenden Werte des Kanals bei der Messung automatisch verrechnet werden. Dieser Parameter ist optional, © National Instruments (Ireland) Limited 3-7 Script-DAC-Treiber Script-DAC-Treiber kann aber nur in Verbindung mit dem Parameter ScalingFactorP verwendet werden. ChannelCountV Mit diesem optionalen Parameter wird dieser Funktion mitgeteilt, wie viele aktive Kanäle vorhanden und vom Script bearbeitet werden müssen. Dieses Information kann z.B. benutzt werden, um ausreichend große Felder für die Aufnahme von Ausgabedaten anzulegen. Hinweis: Optionale Funktion zur Initialisierung der Ausgänge Die Prozedur SFD_DeInitOutChannel Mit dieser Funktion kann ein aktiver Ausgabekanal wieder deinitialisiert werden. Sie wird während der Messnachbereitung einmal für jeden aktiven Ausgang aufgerufen. Syntax: SFD_DeInitOutChannel( ChannelNumberV, ErrorP ) Parameter: ChannelNumberV Hier wird dem Script die Anschlussnummer des Ausgangs aus dem Dialog zum Script DAC Treiber übergeben (sofern dieser nicht durch andere Funktionen des Scripts geändert wurde). Dieser Parameter kann im Script als Verweis auf den physikalischen Ausgang des angeschlossenen Geräts verwendet werden. ErrorP Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Hinweis: Optionale Funktion zur Deinitialisierung der Ausgänge Die Prozedur SFD_FinalInit Die Funktion SFD_FinalInit() kann zur abschließenden Initialisierung des angeschlossenen Geräts und der Variablen des Scripts verwendet werden. Die Funktion wird einmal beim Beenden der Messvorbereitung aufgerufen. Syntax: SFD_FinalInit( ErrorP ) Parameter: ErrorP Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Para- DIAdem-DAC-Treiberbeschreibung 3-8 ni.com Script-DAC-Treiber meter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Hinweis: Optionale Funktion zur abschließenden Initialisierung des Scripts und des angeschlossenen Geräts. 3.3 Prozeduren die während Start bzw. Ende der Messung aufgerufen werden Die Prozedur SFD_Start Diese Funktion wird bei jedem Wechsel in der Triggerfolge aufgerufen. Sie ermöglicht es, bei jedem Wechsel der Triggerfolge die Messung auf dem angeschlossenen Gerät erneut zu starten. Syntax: SFD_Start( SamplingRateV, ErrorP ) Parameter: SamplingrateV In diesem Parameter wird die eingestellte Abtastrate an das Script übergeben. Sie kann benutzt werden, um eine Messung mit der gewünschten Abtastrate auf dem angeschlossenen Gerät zu starten. ErrorP Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Hinweis: Optionale Funktion zum Starten einer Messung auf dem angeschlossenen Gerät. Die Prozedur SFD_FinalStop Die Funktion SFD_FinalStop() wird einmal aufgerufen, wenn das zugehörige Taktsystem beendet wird. Diese Funktion kann verwendet werden, um die Kommunikation zu einem Gerät oder eine laufende Messung auf einem Gerät zu beenden, wenn dieses für die weitere Messung nicht mehr benötigt wird. Syntax: SFD_FinalStop( ErrorP ) © National Instruments (Ireland) Limited 3-9 Script-DAC-Treiber Script-DAC-Treiber Parameter: ErrorP Dieser Parameter dient der Rückgabe einer Fehlermeldung an den Script DAC Treiber von DIAdem. Wird diesem Parameter ein Text zugewiesen, so wird die Messung sofort mit einer Fehlermeldung beendet, die diesen Fehlertext enthält. Hinweis: DIAdem-DAC-Treiberbeschreibung Optionale Funktion die am Ende einer Messung aufgerufen wird. 3-10 ni.com DIAdem Data Organization 4 Das UDI-Control Das UDI Control (UDI steht für „Universal Device Interface“) bildet eine neutrale Softwareschnittstelle zu den Kommunikationsschnittstellen des Rechners (RS-232, GPIB etc.). Hierbei sind Funktionen zum Lesen und Schreiben von Daten sowie die die Parameter der einzelnen Funktionen unabhängig von der verwendeten Kommunikationsschnittstelle, so dass beim Wechsel der Kommunikationsschnittstelle keine Änderungen an den Aufrufen der Kommunikationsfunktionen notwendig sind. Nachfolgend werden die UDI-Funktionen beschrieben, die aus dem Script heraus genutzt werden können. Parameter, die in [ ] angegeben sind, sind optional und können bei Bedarf weggelassen werden. Um die UDI-Funktionen im TreiberScript nutzen zu können, muss am Anfang der Scriptdatei eine Objekt vom Typ UDI-Control angelegt werden. Dies geschieht mit folgenden Zeilen : Dim oUDI Set oUDI = CreateObject("DIAdem.SFD.UDI") Anschließend kann über das Objekt „oUDI“ auf die Funktionen von UDI zugegriffen werden. Beispiel : SBuffer = oUDI.Read( Count, Mode ) Call oUDI.Open( "COM", "COM1") Hinweis: Script-DAC-Treiber In den Beispielen wird das Objekt vom Typ „UDIControl“ meist mit „oUDI“ bezeichnet. Diese Bezeichnung ist frei gewählt und kann je nach Aufgabe angepasst werden. Wird das Gerät beispielsweise über die serielle Schnittstelle angesprochen, könnte das Objekt mit „oSerialPort“ bezeichnet werden. 4-1 ni.com Script-DAC-Treiber 4.1 Funktionen zum Auf- und Abbau der Verbindung Die Funktion Open Die Funktion „Open“ öffnet einen Kommunikationskanal zu einer Schnittstelle und sorgt für dessen Initialisierung mit den aktuellen Schnittstellenparametern. Syntax Open( DriverName, DeviceName ) Parameter: DriverName Name des Treibers für die zu verwendende Kommunikationsschnittstelle. (siehe Kap. 3.5) DeviceName Name des zu verwendenden Kommunikationskanals. (siehe Kap. 3.5) Beispiel: Call oUDI.Open( "COM", "COM2") Die Funktion Close Mit der Funktion „Close“ wird eine Schnittstelle, die zuvor mit „Open“ geöffnet wurde, wieder geschlossen. Syntax Close() Parameter Keine Beispiel: Call oUDI.Close() DIAdem-DAC-Treiberbeschreibung 4-2 ni.com Script-DAC-Treiber 4.2 Funktionen zur Datenübertragung Die Funktion Write Mit der Funktion „Write()“ können Daten über eine Kommunikationsschnittstelle an ein angeschlossenes Gerät gesendet werden. Syntax Write(Data[, Count[, Mode]]) Parameter: Data Der Inhalt dieser Variablen wird auf das UDI-Device ausgegeben. Diese Stringvariable auch binäre Elemente enthalten. Count Anzahl Bytes die ausgegeben werden sollen. Dieser Parameter ist optional. Wird der Parameter nicht angegeben wird der gesamte Inhalt der Variablen Data ausgegeben. Mode Modus, in dem die Daten übertragen werden sollen (optional) Folgende Werte sind möglich0: Die Daten werden übertragen, ohne dass ein Delimiter angehängt wird. 1: An die Daten wird vor dem Senden ein Delimiter angehängt. Wird der Parameter nicht angegeben, so wird der Defaultwert 1 verwendet. Beispiel: Call oUDI.Write( "Hallo", 5, 1 ) Die Funktion Read Mit der Funktion Read() werden Daten von der Kommunikationsschnittstelle eingelesen. Syntax Read([Count[, Mode]]) Parameter: Count Anzahl Bytes die gelesen werden sollen (Optional). Wird dieser Parameter nicht angegeben, werden alle Bytes die im Puffer des UDI-Device vorhanden sind, ausgelesen. Mode Modus, in dem die Daten übertragen werden sollen (optional) Folgende Werte sind möglich:0 : Lesen, bis die gewünschte Anzahl Zeichen erreicht ist (Binärübertragung)1 : Lesen, bis der definierte Delimiter oder die gewünschte Anzahl Zeichen erreicht ist. Wird der Parameter nicht angegeben, wird der Defaultwert 1 verwendet. © National Instruments (Ireland) Limited 4-3 Script-DAC-Treiber Script-DAC-Treiber Rückgabewert: Die von UDI gelesenen Bytes in Form eines Strings. Dieser String kann auch binäre Elemente enthalten, die dann mit der Methode "Parse" weiterverarbeitet werden können. Beispiel: Empfangen = oUDI.Read( 5, 7 ) 4.3 Änderung schnittstellenspezifischer Parameter Bei diesen Prozeduren ist zu beachten, dass über den Aufruf der Prozedur Parameter verändert werden, deren Bedeutung von der verwendeten Kommunikationsschnittstelle abhängig sind. Insbesondere gilt hier, dass viele Parameter nur für spezielle Kommunikationsschnittstellen existieren (Der Parameter "BAUDRATE" macht Sinn in Verbindung mit einer seriellen Schnittstelle, ergibt jedoch keinen Sinn in Verbindung mit GPIB). Eine detaillierte Auflistung der Parameter die zu einem Schnittstellentyp angesprochen werden können, finden Sie in Kapitel 3.5 Die Funktion ParamSet Setzen eines schnittstellenspezifischen Parameters (z.B. Baudrate) für das UDI-Device. Hierbei ist zu beachten, dass sowohl die Namen der Parameter als auch deren Inhalte von UDI grundsätzlich als Strings erwartet werden und dass aus diesem Grund in "" eingeschlossen werden müssen. Weiterhin ist hier die Groß- und Kleinschreibung zu beachten. Da die einzelnen Parameter abhängig von der eingesetzten Kommunikationsschnittstelle sind, werden die möglichen Parameter und deren Werte in der Dokumentation zu der betreffenden Kommunikationsschnittstelle beschrieben (siehe Kap. 3.5). Syntax ParamSet(Parameter, Value) Parameter: Parameter Name des Parameters, der geändert werden soll Value Neuer Parameterwert Beispiel: Call oUDI.ParamSet( "BAUDRATE", "9600" ) DIAdem-DAC-Treiberbeschreibung 4-4 ni.com Script-DAC-Treiber Die Funktion ParamGet Mit dieser Funktion kann ein schnittstellenspezifischer Parameter vom UDI-Device abgefragt werden. Syntax ParamGet(Parameter) Parameter: Parameter den soll. Name des Parameters, dessen Wert ermittelt wer- Rückgabewert String, der den Wert des abgefragten Parameters enthält. Beispiel: Baudrate = oUDI.ParamGet( "BAUDRATE" ) 4.4 Hilfsfunktionen Die Funktion ErrorTextGet Mit der Funktion ErrorTextGet() kann zu den Fehlern, die beim Aufruf einer UDI Funktion aufgetreten sind, eine Fehlerbeschreibung beim entsprechenden UDI-Device abgerufen werden. Syntax ErrorTextGet() Parameter: Keine Rückgabewert: String, der den Text der Fehlermeldung enthält. Die Funktion Parse Diese Funktion dient der Auswertung von binären und formatierten Daten, die zuvor mit dem Befehl Read eingelesen wurden. Syntax Parse(Data, FormatDescriptor) Parameter: Data den. Variable mit Daten, die zuvor mit "Read" gelesenen wur- FormatDescriptor Formatstring zur Beschreibung des Aufbaus der Daten: Der Formatstring besteht aus einer Formatbeschreibung für eine oder mehrere Variablen nach der die Daten im Parameter „Data“ © National Instruments (Ireland) Limited 4-5 Script-DAC-Treiber Script-DAC-Treiber zu interpretieren sind. Die verwendete Syntax für jede Variable ist wie folgt: % [ n] (U,L,D,S) [ <"Name">] Das "%"-Zeichen definiert den Anfang einer neuen Formatbeschreibung und muss angegeben werden. "n" steht für die Anzahl Bytes, die für die Variable interpretiert werden sollen. Von den Buchstaben U,L,D,S ist jeweils einer anzugeben. "U" steht für Unsigned Integer L" steht für Signed Integer "D" steht für eine Realzahl "S" steht für einen Text (String) <Name> steht für den Namen der Variablen. Wird der Name angegeben, kann nach dem Aufruf des Befehles "Parse" mit den Befehlen „NamedValueGet“ und „NamedValueSet“ auf den Wert der Variablen zugegriffen werden. Rückgabewert Wert(e) der Variablen Wird die Beschreibung einer Variablen in vFormat angegeben, so wird ein einzelner Wert zurückgegeben. Werden mehrere Beschreibungen angegeben (siehe Beispiel 2), so wird ein Feld von Werten zurückgegeben Wird die Prozedur „Parse“ zum Auswerten von formatierten Zahlen eingesetzt, so wird davon ausgegangen, dass das Dezimaltrennzeichen ein Punkt („.“) ist. Dies ist unabhängig davon, welche Vorgaben in den Ländereinstellungen gemacht werden. Sollte Sie die VBScript Funktion zur Konvertierung von Texten in Zahlen einsetzen, so reagieren diese auf die in den Ländereinstellungen gemachten Vorgaben. Beispiel 1: Dim vData, vValue vData = oUDI.Read() ' Lesen aller vorhandenen Daten ' vom UDI-Objekt vValue = Parse(vData,"%2L") ' Interpretation von 2 Bytes aus „vData“ ' und Rückgabe des gelesenen ' Wertes auf der Variablen vData Beispiel 2: Dim vData, vArray vData = oUDI.Read() 'Lesen aller vorhandenen Daten vom UDI-Objekt vArray = oUDI.Parse(vData,"%2L%4L") 'Auslesen von insgesamt 6 Bytes aus vData und 'Rückgabe von 2 Werten auf dem Feld vArray For L = 1 To UBound(vArray) 'Ausgabe der beiden Werte in einer MessageBox MsgBox(CStr(vArray(L)) Next L Beispiel 3: Anhängen des Inhaltes einer Variablen (Value) an den Ausgabepuffer Buffer unter Berücksichtigung des Dim vData, vArray, vScaledValue vData = oUDI.Read() ' Lesen aller vorhandenen Daten vom ' UDI-Objekt vArray = oUDI.Parse(vData,"%2L<Trigger>%4L<Temperature>") DIAdem-DAC-Treiberbeschreibung 4-6 ni.com Script-DAC-Treiber ' Auslesen von insgesamt 6 Bytes aus vData ' und Rückgabe von 2 Werten auf dem Feld ' vArray vScaledValue = oUDI.NamedValueGet("Temperature ")*0.01 MsgBox(vScaledValue) ' Direkter Zugriff auf den benannten Wert ' "Temperature" und Ausgabe des skalierten ' Wertes in einer Message-Box Die Funktion Append Formates Format. Syntax Append(Buffer, Value,Format) Parameter: Buffer Variable, an die der Inhalt der Variablen Value angehängt wird. Value Variable, deren Inhalt an die Variable Buffer angehängt werden soll. Format Beschreibung des Formates, in dem die Variable angehängt werden soll. Hinweis: Weitere Beschreibungen zum Format: siehe Parse Beispiel: siehe Beschreibung des Befehles „Parse()“ Die Funktion Sleep Mit diesem Befehl wird die Ausführung des Scriptes für eine angegebene Anzahl von Millisekunden unterbrochen. Syntax Sleep(MilliSeconds) Parameter: MilliSeconds Anzahl Millisekunden Beispiel: Sleep(100) ' Unterbricht die Ausführung des Scriptes ' für eine 1/10 Sekunde © National Instruments (Ireland) Limited 4-7 Script-DAC-Treiber Script-DAC-Treiber Die Funktion NamedValueSet Setzen des Wertes (Value) für die benannte Variable mit dem Bezeichner "Name". Syntax NamedValueSet(Name, Value) Parameter: Name Name der Variablen Value Wert der Variablen Beispiel: Siehe: NamedValueGet() Die Funktion NamedValueGet Lesen des Wertes (Value) der benannten Variable mit dem Namen "Name" Syntax NamedValueGet(Name) Parameter: Name Name der Variablen Rückgabewert Wert der Variablen Beispiel: Dim vScaledValue vScaledValue = oUDI.NamedValueGet("Temperature") ' Auslesen des Wertes der Variablen mit ' dem Namen "Temperature". Der Wert wird ' der lokalen Variablen vScaledValue ' zugewiesen vScaledValue = (vScaledValue-32.145) * 0.01 ' Offsetkorrektur und Skalierung ' der Variablen oUDI.NamedValueSet("Temperature",vScaledValue) ' Zurückschreiben des Wertes Das Attribute ByteSwap Die Byte-Reihenfolge (die Reihenfolge, in der die Binärdaten übertragen werden) kann über das Attribut "ByteSwap" des UDIObjekts eingestellt werden. Bei ByteSwap = False (default) werden die Binärdaten mit dem Befehl "Parse" in der Reihenfolge High Byte - Low Byte bearbeitet, während sie bei ByteSwap = True in DIAdem-DAC-Treiberbeschreibung 4-8 ni.com Script-DAC-Treiber der Reihenfolge Low Byte - High Byte bearbeitet werden. Zum Setzen der Byte-Reihenfolge wird dem Attribut ByteSwap entweder der Wert 0 (Falsch) oder 1 (Wahr) zugewiesen. Beispiel: oUDI.ByteSwap = 1 Das Attribute Version Die aktuelle Version des UDI-Controls kann über dieses Attribut ausgelesen werden. Die Version wird als Text in der Form „x.yy“ zurückgegeben. Dabei steht „x“ für die Hauptversionsnummer und „yy“ für die zweistellige Unterversion. Das Attribute IsOpen Mit diesem Attribut kann erfragt werden, ob für das aktuelle UDIControl eine Schnittstelle geöffnet wurde. Ist eine Schnittstelle geöffnet wird „true“ zurückgegeben, andernfalls „false“. 4.5 Unterstützte Schnittstellen Das UDI-Control unterstützt die folgenden Schnittstellen : Serielle Schnittstelle GPIB mit den beiden folgenden Untertypen : GPIB Karten von National Instruments. Voraussetzung ist, dass der NI-488.2 Treiber von National Instruments auf dem Rechner installiert ist. GPIB-Karten mit NEC µPD 7210, die Registerkompatibel zu PCII bzw. PCIIa von National Instruments sind. TCP/IP Jede dieser Schnittstellen kann über einen Satz von Parametern konfiguriert werden. Die Parameter werden mit dem Befehl „ParamSet“ an das UDI-Control übergeben. Die folgenden Kapitel beschreiben die vom UDI-Control unterstützen Schnittstellen bzw. deren Parameter. © National Instruments (Ireland) Limited 4-9 Script-DAC-Treiber Script-DAC-Treiber Serielle Schnittstelle (RS-232) Treiber zum Betrieb der seriellen Schnittstellen Treibername: COM Devicename: COM1 ... COM9 Unterstützte Parameter: BAUDRATE Baudrate, mit der die Schnittstelle betrieben werden soll. Beispiele für mögliche Werte sind 1200, 2400, 4800, 9600, 19200. Darüber hinaus sind auch andere Baudraten möglich, solange die Rate ganzzahlig ist. PARITY Parität Mögliche Werte sind NONE (keine Parität),ODD (ungerade Parität) und EVEN (gerade Parität) STOPBITS Anzahl der Stopbits, mit denen die Schnittstelle betrieben werden soll (1, 2). DATABITS Anzahl der Datenbits, mit der jedes Zeichen übertragen werden soll (7, 8). TIMEOUT Zeit in ms, die eine Übertragungsfunktion auf Daten wartet, bevor sie mit einem Timeoutfehler abbricht. DELIMITER Zeichenkette, die das Ende einer Zeile markiert. Diese Zeichenkette kann mehrere Zeichen lang sein. Der Delimiter wird als normale Zeichenkette übergeben. Sonderzeichen können hier in der Form \HH eingegeben werden. „HH“ steht für eine formatierte Beschreibung eines Hexadezimalwertes. So steht „\0D“ für „Carriage-Return“ (Dezimal 13). Bitte beachten Sie hierzu unbedingt die bereits in VBScript vordefinierten Textkonstanten wie z.B. vbCR, vbLF oder vbCRLF. Beispiel: Mit dem folgenden Befehl wird die Baudrate auf 9600 Baud gesetzt. Call oUDI.Open( "COM", ""COM1" ) Call oUDI.ParamSet( "BAUDRATE", "9600" ) DIAdem-DAC-Treiberbeschreibung 4-10 ni.com Script-DAC-Treiber GPIB (IEEE-488) GfS GPIB Treiber zum Betrieb von GPIB-Karten mit NEC µPD 7210, die Registerkompatibel zur PCII bzw. PCIIa von National Instruments sind. Treibername: GfS GPIB Devicename: Dev 1 ... Dev30 Unterstützte Parameter: BASEADDRESS Mit diesem Parameter wird die Basisadresse der GPIB-Karte angegeben, die in den Rechner eingebaut ist. Diese Basisadresse darf nicht mit der Geräteadresse der angeschlossenen Geräte verwechselt werden! Diese wird bei den Geräten und nicht auf der GPIB-Karte im Rechner eingestellt. (Siehe Einstellungen der Interfacekarte) BOARDTYPE „PCII“ (Die Karte ist registerkompatibel zur National Instruments PCII.)´„PCIIa“ (Die Karte ist registerkompatibel zur National Instruments PCIIa.) TIMEOUT Zeit in ms, die eine Übertragungsfunktion auf Daten wartet, bevor sie mit einem Timeoutfehler abbricht. DELIMITER Zeichenkette, die das Ende einer Zeile markiert. Diese Zeichenkette kann mehrere Zeichen lang sein. Der Delimiter wird als normale Zeichenkette übergeben. Sonderzeichen können hier in der Form \HH eingegeben werden. Beispiel: Call oUDI.Open( "GfS GPIB", "DEV 4" ) Call oUDI.ParamSet( "BOARDTYPE", "PCII" ) NI GPIB Treiber zum Betrieb der GPIB Karten von National Instruments. Dieser Treiber setzt voraus, dass der NI-488.2 Treiber von National Instruments auf dem Rechner installiert ist. Treibername: NI GPIB Devicename: Dev 1 ... Dev30 Unterstützte Parameter: TIMEOUT Zeit in ms, die eine Übertragungsfunktion auf Daten wartet, bevor sie mit einem Timeoutfehler abbricht. © National Instruments (Ireland) Limited 4-11 Script-DAC-Treiber Script-DAC-Treiber DELIMITER Zeichenkette, die das Ende einer Zeile markiert. Diese Zeichenkette kann mehrere Zeichen lang sein. Der Delimiter wird als normale Zeichenkette übergeben. Sonderzeichen können hier in der Form \HH eingegeben werden. Beispiel: Call oUDI.Open( "NI GPIB", "DEV14" ) Call oUDI.ParamSet( "TIMEOUT", "100" ) TCP/IP Treiber zur Kommunikation mit Geräten über das TCP/IP Protokoll. zum Dieser Treiber setzt voraus, dass TCP/IP als Protokoll auf dem Rechner installiert ist. Treibername: TCP/IP Devicename: <IP-Adresse>:<Portnummer> Die IP-Adresse kann als z.B „100.100.100.12“ oder angegeben werden Adresse in Punktnotation als symbolischer Name Unterstützte Parameter: DELIMITER Zeichenkette, die das Ende einer Zeile markiert. Diese Zeichenkette kann mehrere Zeichen lang sein. Der Delimiter wird als normale Zeichenkette übergeben. Sonderzeichen können hier in der Form \HH eingegeben werden. Beispiel: Call oUDI.Open("TCP/IP", "DSM3000:23") Call oUDI.ParamSet( "TIMEOUT", "100" ) DIAdem-DAC-Treiberbeschreibung 4-12 ni.com DIAdem Data Organization 5 Arbeitsweise Auf der einen Seite steht der DIAdem Treiber mit seiner Benutzerschnittstelle und auf der anderen Seite steht VBScript als Programmiersprache und Interpreter. Während der (offline) Parametrierung des Treibers ist nur der DIAdem Treiber aktiv und bildet die Schnittstelle zwischen dem Benutzer und dem Treiber. Während der Messvorbereitung wird VBScript in einem eigenen Programmfaden gestartet, die Scriptdatei wird vom Treiber an VBScript übergeben und auf Syntaxfehler hin überprüft. Wird in dieser Phase ein Fehler erkannt, so wird die weitere Messvorbereitung mit einer Fehlermeldung abgebrochen. Nach Korrektur des Fehlers kann die Messung erneut gestartet werden. Nach der Syntaxprüfung wird der globale Abschnitt des Scripts abgearbeitet. Zum globalen Abschnitt gehören alle Anweisungen und Variablendefinitionen die außerhalb der Prozeduren und Funktionen erfolgen. Anschließend werden vom DIAdem Treiber die Funktionen zur Initialisierung der Geräte und der Ein- und Ausgänge aufgerufen. Nach Abarbeitung der Messvorbereitung wird die Messung gestartet und die entsprechenden Funktionen im Script werden aufgerufen. Gleiches gilt für die Ausgabe von Daten und die anschließende Messnachbereitung. Wird bei der Abarbeitung einer Funktion im Script die Fehlervariable (ErrorP) gesetzt, so wird die Messung abgebrochen und eine Fehlermeldung mit dem Inhalt der Fehlervariablen ausgegeben. 5.1 Gültigkeit von Variablen Alle Scripte, die vom Script DAC Treiber abgearbeitet werden, werden in einem eigenen Kontext bearbeitet. Daraus folgt, dass die Gültigkeit von Variablen grundsätzlich auf den Rahmen des betreffenden Scripts beschränkt ist. Variablen, die innerhalb eines Scripts global definiert sind, sind im ganzen Script gültig und behalten ihre Werte auch zwischen den Aufrufen der einzelnen Funktionen. Variablen, die innerhalb einer Funktion definiert sind, sind nur innerhalb dieser Funktion gültig. Sie verlieren beim Verlassen der betreffenden Funktion ihre Gültigkeit. Die Bearbeitung der Scripte jeweils in einem eigenen Kontext bewirkt weiterhin, dass es nicht zu einem versehentlichen Über- Script-DAC-Treiber 5-1 ni.com Script-DAC-Treiber schreiben von Daten kommt, falls verschiedene Scripte Variablen mit gleichen Namen verwenden. Wird das gleiche Script in zwei verschiedenen DIAdem Blöcken eingesetzt, so bewirkt diese Isolation, dass sich diese Scripte nicht gegenseitig beeinflussen. So wird es vom Script DAC Treiberermöglicht, mehrere Geräte an unterschiedlichen Kommunikationsschnittstellen gleichzeitig zu betreiben und hierfür das selbe Script mit unterschiedlicher Parametrierung zu verwenden. 5.2 Zugriff auf DIAdem Variablen Innerhalb eines Scriptes kann auf alle DIAdem Variablen zugegriffen werden. Dabei ist Folgendes zu beachten : Für jede DIAdem-Variable auf die zugegriffen werden soll, ist im globalen Abschnitt des Scriptes eine Variable gleichen Namens anzulegen. Z. B.: Dim Autodrvuser Die Namen der Variablen sind der DIAdem Hilfe zu entnehmen. Auf die Variablen kann nur lesend zugegriffen werden. Während die Definition der Variablen im globalen Abschnitt des Scriptes erfolgt, kann der lesende Zugriff nur innerhalb der Prozeduren, die von DIAdem aufgerufen werden, erfolgen. 5.3 Betriebsmodi des Script DAC Treibers Der Script DAC Treiber unterscheidet zwei Betriebsmodi: "synchron zum Messtakt" und "asynchron zum Messtakt". Beide Betriebsmodi unterscheiden sich nur in der Art und Weise wie die Funktionen zum Erfassen und Ausgeben von Daten im Script vom Script DAC Treiberaufgerufen werden. Bei allen anderen Funktionen ist das Verfahren beim Aufruf der entsprechenden Funktionen unabhängig vom gewählten Betriebsmodus, da die Abarbeitung dieser Funktionen nicht zeitkritisch ist. Die Unterschiede der beiden Betriebsmodi werden nachfolgend beschrieben. DIAdem-DAC-Treiberbeschreibung 5-2 ni.com Script-DAC-Treiber Synchron zum Messtakt Zu Beginn des Messzyklus wird vom Script DAC Treiber im Script die Funktion SFD_GetScan() aufgerufen. Während der Bearbeitung dieser Funktion wartet der Script DAC Treiber bis diese Funktion bearbeitet wurde. Im Anschluss daran ruft der Script DAC Treiber für jeden aktiven Messkanal die Funktion SFD_ReadChannel() auf und wartet jeweils so lange, bis die Bearbeitung der Funktion abgeschlossen ist. Nachdem die Daten von allen Kanälen erfasst sind, werden sie vom Script DAC Treiber an den DIAdem Messkern übergeben. Hier zeigt sich, dass der Script DAC Treiber immer auf das Ende der Bearbeitung der Funktionen im Script wartet und damit für diese Zeit den DIAdem Messkern und andere Treiber blockiert. So lange der Script DAC Treiber der einzige aktive Treiber im DAC Schaltplan ist und die gewählte Abtastrate so gewählt ist, dass genügend Zeit zur Abarbeitung der Scriptfunktionen gegeben ist, treten keinerlei Probleme auf. Anders sieht der Fall aus, wenn die Bearbeitung der einzelnen Funktionen längere Zeit in Anspruch nimmt und gleichzeitig weitere DIAdem Treiber aktiv sind. Hier kann es dann durchaus vorkommen, dass der Script DAC Treiber die anderen Treiber oder den Messkern unzulässig lange blockiert und es somit zu Datenverlusten oder Bufferüberläufen bei den anderen Treibern kommt. Diese Probleme können durch Wahl des Betriebsmodus "asynchron zum Messtakt" umgangen werden. Asynchron zum Messtakt Anders als im Betriebsmodus "synchron zum Messtakt" wartet der Script DAC Treiber hier nicht darauf, dass die einzelnen Funktionen im Script abgearbeitet werden, sondern liest die Daten aus einem internen Buffer, in dem die Daten vom Script abgelegt werden, und gibt diese direkt an den DIAdem Messkern weiter. Im einzelnen sieht die Abarbeitung eines Messzyklus wie folgt aus: Zunächst prüft der Script DAC Treiber, ob alle Funktionen des Scripts zur Datenerfassung abgearbeitet sind (In der Funktion SFD_ReadChannel() wurde bei allen Aufrufen dem Parameter DataP ein Wert zugewiesen.). Ist dies der Fall, so werden im Script DAC Treiber die neuen Messwerte in einen internen Puffer kopiert. Anschließend ruft der Script DAC Treiber die Funktionen zur Messdatenerfassung im Script auf (SFD_GetScan() und für jeden aktiven Kanal SFD_ReadChannel()), ohne jedoch auf deren Rückkehr zu warten. Unabhängig vom Ergebnis der vorherigen Prüfung © National Instruments (Ireland) Limited 5-3 Script-DAC-Treiber Script-DAC-Treiber liest der Script DAC Treiber anschließend die Messwerte aus dem internen Buffer und übergibt diese an den DIAdem Messkern. Durch dieses Verfahren ist sichergestellt, dass bei jedem Aufruf der Messroutine des Script DAC Treibers gültige Messdaten verfügbar sind, die auch direkt an den Messkern übergeben werden können. Anders als beim Betriebsmodus "synchron zum Messtakt" ist hier jedoch nicht gewährleistet, dass mit jedem Messzyklus "neue" Messdaten an den DIAdem Messkern übergeben werden. Dafür kann der Script DAC Treiberin diesem Betriebsmodus mit beliebigen Abtastraten - ohne Berücksichtigung der Ausführungszeit der einzelnen Scriptfunktionen betrieben werden ohne dabei den Betrieb anderer Treiber oder des DIAdem Messkerns zu beeinflussen. 5.4 Beeinflussung anderer Treiber Durch die Verwendung eines eigenen Programmfadens zur Abarbeitung der Scripte ist es möglich, die Beeinflussung anderer Treiber und des Programmkerns auf ein Minimum zu reduzieren. Näheres hierzu ist der Seite Betriebsmodi des Script DAC Treibers zu entnehmen. Da alle Scripte in einem einzigen Programmfaden bearbeitet werden, ist es an dieser Stelle durchaus möglich, dass sich diese Scripte gegenseitig in ihrer Ausführung beeinflussen und ggf. blockieren. Hier ist bei der Erstellung der Scripte darauf zu achten, dass sie mit einer möglichst optimalen Geschwindigkeit abgearbeitet werden. DIAdem-DAC-Treiberbeschreibung 5-4 ni.com DIAdem Data Organization 6 Beispiele In diesem Kapitel werden Beispiele für Lösungen mit dem Script DAC Treiberaufgezeigt. Zu jedem Beispiel gibt es jeweils zwei Dateien auf die Bezug genommen wird : Die Datei mit dem DIAdemDAC Schaltplan und die Datei mit dem Script. Die Namen der Dateien werden am Beginn eines neuen Beispieles genannt. 6.1 Namenskonventionen Innerhalb von VBScript erfolgt eine vollkommen freie Vergabe der Prozedur- und Variablennamen. Alle Variablen sind vom Typ VARIANT. Ein VARIANT ist ein besonderer Datentyp der unterschiedliche Arten von Informationen speichern kann, je nachdem wie die Variable verwendet wird. (Weitere Informationen finden Sie in der Hilfe zu VBScript). Um die gewünschte Verwendung der Variablen bzw. ihren vorgesehenen Variablentyp bereits beim Lesen eines Scriptes besser erkennen zu können , werden in den Beispielen folgende Präfixe verwendet : „sg“ Text-Variable „d“ Double-Variable (64 Bit Realzahl) „l“ Integer-Variable (32 Bit) Zur weiteren Unterscheidung zwischen lokalen (genauer Prozedurlokalen) Variablen und globalen Variablen wird ein Postfix verwendet : „T“ lokale Variable „M“ globale Variable Beispiele : sgFilenameM globale Textvariable dNoValueT Script-DAC-Treiber lokale Real-Variable 6-1 ni.com Script-DAC-Treiber 6.2 Beispiele ohne Mess-Hardware Beispiel Simulationsblock Die verwendeten Dateien sind Simulation.vbs und Simulation.dac. In diesem Beispiel wird eine Script-Datei vorgestellt, die das Einlesen von Daten simuliert. Es werden bis zu 4 Signale zur Verfügung gestellt. Die Signale können aus dem DAC-Block mit dem Namen des Signaltypes angefordert werden. Der Name des Signaltypes wird in der Spalte “Parameter” angegeben. Die zur Verfügung stehenden Signale sind : Signaltypname Sinus Cosinus Zufall Zähler DIAdem-DAC-Treiberbeschreibung Funktion Sinusfunktion sin(t). “t” ist die Zeit seit Messungsbeginn. Cosinusfunktion cos(t). “t” ist die Zeit seit Messungsbeginn. Die “Random”-Funktion von VBScript. Eine Sägezahnfunktion die von 0 auf 50 anwächst und dann wieder bei 0 beginnt. Der Wert der Funktion wird bei jedem Messungstakt um den Wert 1 inkrementiert. 6-2 Bereich -1 bis 1 -1 bis 1 -1 bis 1 -1 bis 1 ni.com Script-DAC-Treiber Die folgende Tabelle enthält eine Auflistung des Scriptes (ScriptExample1.vbs)'---------------------------------------------------------------------------' DIAdem-Script-Driver for simulation device ' Implemented : 13.5.2000 (Ha) ' Tested : 13.5.2000 (Ha) '----------------------------------------------------------------------------Option Explicit '----------------------------------------------------------------------------' Global parameters '----------------------------------------------------------------------------' dStartTimeM | Variable to save time of Script start ' dNoValueM | Variable to hold NoValue ' lCounterM | Global counter, incremented during each scan '----------------------------------------------------------------------------Dim dStartTimeM,dNoValueM,lCounterM,sgErrWSigM '------------------------------------------------' Initialize global variables '------------------------------------------------dStartTimeM = Timer dNoValueM = 9.9E+34 lCounterM = 0 sgErrWSigM = vbCR +"Die gewählte Signalart >%1< wird nicht unterstützt" + vbCR sgErrWSigM = sgErrWSigM + "Bitte wählen Sie einen der folgenden Begriffe :" sgErrWSigM = sgErrWSigM + vbCR+vbCR+"Sinus, Cosinus,Zufall, Zähler" '----------------------------------------------------------------------------' SFD_InitInChannel ' Purpose : Called for each channel with user defined values for ' channel number and channel specific string. ' Used to check for valid parameters '----------------------------------------------------------------------------' lChannelNumberP | User defined channel number ' sgParamP | User defined string © National Instruments (Ireland) Limited 6-3 Allge mein Initialisierung Script-DAC-Treiber Script-DAC-Treiber ' sgErrorP | Text-variable to signal DIAdem that an error has occured '----------------------------------------------------------------------------Sub SFD_InitInChannel( lChannelNumberP, sgParamP, sgErrorP ) Dim bSuccessT '-----------------------------------------------' Check whether the user set sgParamP to one of ' the existing function types. User lowercase ' characters for comparison '-----------------------------------------------Select Case LCase(sgParamP) Case "sinus" bSuccessT = true Case "cosinus" bSuccessT = true Case "zufall" bSuccessT = true Case "zähler" bSuccessT = true Case Else bSuccessT = false End Select '-----------------------------------------------' Format error message if necessary '-----------------------------------------------if ( Not bSuccessT ) Then sgErrorP = Replace(sgErrWSigM,"%1",sgParamP) End Sub '----------------------------------------------------------------------------' SFD_ReadChannel ' Purpose : Read value for one channel ' The channel value is returned on variable "dDataP" '----------------------------------------------------------------------------' lChannelNumberP | User defined channel number ' sgParamP | User defined string ' dDataP | Variable to return value to return. ' | The variable type is "double" ' sgErrorP | Text-variable to signal DIAdem that an error has occured '----------------------------------------------------------------------------Sub SFD_ReadChannel( lChannelNumberP, sgParamP, dDataP, sgErrorP ) Dim dElapseTimeT '------------------------------------------------ DIAdem-DAC-Treiberbeschreibung 6-4 Daten lesen ni.com Script-DAC-Treiber ' Calculate time since measurement start ' the existing function types. User lowercase ' characters for comparison '-----------------------------------------------dElapseTimeT = Timer - dStartTimeM '-----------------------------------------------' Calculate value depending on the user defined ' parameter '-----------------------------------------------Select Case LCase(sgParamP) Case "sinus" dDataP = Sin(dElapseTimeT) Case "cosinus" dDataP = Cos(dElapseTimeT) Case "zufall" dDataP = ((CDbl(Rnd)-0.5)*2.) Case "zähler" lCounterM = (lCounterM+1) mod 50 dDataP = (CDbl(lCounterM)*.04)-1. Case Else dDataP = dNoValueM End Select End Sub Beispiel für eine serielle Maus Die in diesem Beispiel verwendeten Dateien sind Mouse.vbs und Mouse.dac. In diesem Beispiel wird die aktuelle Position und der aktuelle Zustand der Buttons einer Maus ausgelesen. Die Maus muss über die serielle Schnittstelle angeschlossen sein und MS-Mouse kompatibel sein. Die serielle Schnittstelle muss mit 1200 Baud, keine Parität,, 8 Datenbits und 1 Stopbit konfiguriert werden. Diese Parameter sind durch die Maus fest vorgegeben und werden deswegen im Script direkt eingetragen. Die Schnittstelle an der die Maus betrieben werden soll, kann im Schaltplan im Blockdialog eingetragen werden. Hinweis: Die Prozedur „SFDU_COMInit“ ist nicht mit aufgelistet, da diese Prozedur jederzeit automatisch über die Funktion „Neues Script“ aus dem Block heraus erzeugt werden kann © National Instruments (Ireland) Limited 6-5 Script-DAC-Treiber Script-DAC-Treiber '----------------------------------------------------------------------------' Define global data ' oUDIM : UDI object to communicate with serial mouse ' dMouseHM : Horizontal mouse position. Forced to a range of 0-1000 ' dMouseVM : Vertical mouse position. Forced to a range of 0-1000 ' dLButtonDownM : State info for left mouse button. 1=pressed, 0=not pressed ' dRButtonDownM : State info for right mouse button. 1=pressed, 0=not pressed '----------------------------------------------------------------------------Option Explicit Dim oUDIM,dMouseHM,dMouseVM,dLButtonDownM,dRButtonDownM,adB itByte1(24),cDataByteT(3) Dim dDeltaXM,dDeltaYM Set oUDIM = CreateObject( "DIAdem.SFD.UDI" ) '----------------------------------------------------------------------------' SFD_Init ' Purpose : Initialize UDI object ' Parameters for serial I/O set to 1200 Baud,No parity, ' 8 databits, 1 stopbit ' Name of parallel port coming from userdefinition in ' block parameters. Must be in the form "COM1", "COM2"... '----------------------------------------------------------------------------Sub SFD_Init( ByRef sgDeviceparam1, ByRef sgDeviceparam2, ByRef sgError ) ' Initialize serial I/O Call SFDU_COMInit(oUDIM,sgDeviceparam1+",1200,N,8,1") Call oUDIM.ParamSet("Timeout",100) Call oUDIM.Read(1000,0) ' Set timeout to 100 microseconds : Call oUDIM.ParamSet("Timeout",1000) ' Initialize mouse position and button state info dMouseHM = 500. dMouseVM = 500. dLButtonDownM = 0. dRButtonDownM = 0. End Sub DIAdem-DAC-Treiberbeschreibung 6-6 Allgemein Initialisierung ni.com Script-DAC-Treiber '----------------------------------------------------------------------------' SFD_GetScan ' Purpose : Read one scan of data ' Mouse data consist's of three bytes. First byte with ' button informations on bit's 4 and 5 (counting from 0) ' and dx in second byte dy in third byte ' ' Description of mouse data coming from serial port : ' ' The data packets are sent at 1200 baud with 1 stop bit and no parity. Each ' packet consists of 3 bytes. It is sent to the computer every time the mouse ' changes state (ie. the mouse is moved or the buttons are pressed/released). ' ' D7 D6 D5 D4 D3 D2 D1 D0 ' ---------------------------------------------' 1st byte | 1 1 LB RB Y7 Y6 X7 X6 ' 2nd byte | 1 0 X5 X4 X3 X2 X1 X0 ' 3rd byte | 1 0 Y5 Y4 Y3 Y2 Y1 Y0 ' 32 16 8 4 2 1 '----------------------------------------------------------------------------' ErrorP | Errortext '----------------------------------------------------------------------------Sub SFD_GetScan(ErrorP ) Dim bMouseDataT,dDeltaT,I,K,dValueT,lValueT ' Try to get three bytes of data cDataByteT(0) = 0 cDataByteT(1) = 0 cDataByteT(2) = 0 bMouseDataT = oUDIM.Read(3,0) dDeltaXM = 0. dDeltaYM = 0. Daten lesen if ( 3 = Len(bMouseDataT) ) Then dLButtonDownM = 0. © National Instruments (Ireland) Limited 6-7 Script-DAC-Treiber Script-DAC-Treiber dRButtonDownM = 0. dDeltaXM = 0. dDeltaYM = 0. cDataByteT(0) = AscB(Mid(bMouseDataT,1,1)) cDataByteT(1) = AscB(Mid(bMouseDataT,2,1)) and 63 cDataByteT(2) = AscB(Mid(bMouseDataT,3,1)) and 63 cDataByteT(1) = cDataByteT(1) + (cDataByteT(0) and 3)*64 cDataByteT(2) = cDataByteT(2) + (cDataByteT(0) and 12)*16 dDeltaXM = DbleFrom2Compl(cDataByteT(1)) dDeltaYM = DbleFrom2Compl(cDataByteT(2))*(-1.) dMouseHM = dMouseHM + dDeltaXM*.5 dMouseVM = dMouseVM + dDeltaYM*.5 ' Force a maximum range of 0 to 1000 for x and y if ( 0. > dMouseHM ) Then dMouseHM = 0. if ( 1000. < dMouseHM ) Then dMouseHM = 1000. if ( 0. > dMouseVM ) Then dMouseVM = 0. if ( 1000. < dMouseVM ) Then dMouseVM = 1000. ' Check whether a button was pressed if ( BitCheck(cDataByteT(0),5) ) Then dLButtonDownM = 1. if ( BitCheck(cDataByteT(0),4) ) Then dRButtonDownM = 1. End If End Sub '----------------------------------------------------------------------------' SFD_ReadChannel ' Purpose : Called from DIAdem to get one scan of data. The name ' of the channel is give in sgChannelParam. The ' parameter name is case sensitiv '----------------------------------------------------------------------------Sub SFD_ReadChannel(ByRef lChannelNumber,sgChannelParam,ByRef dValue,ErrorP ) DIAdem-DAC-Treiberbeschreibung 6-8 ni.com Script-DAC-Treiber Select Case sgChannelParam Case "Byte1" dValue CDbl(cDataByteT(0)) Case "Byte2" dValue CDbl(cDataByteT(1)) Case "Byte3" dValue CDbl(cDataByteT(2)) Case "DeltaX" dValue Case "DeltaY" dValue Case "MouseX" dValue Case "MouseY" dValue Case "LButtonDown" dValue Case "RButtonDown" dValue = = = = = = = = = dDeltaXM dDeltaYM dMouseHM dMouseVM dLButtonDownM dRButtonDownM Case Else dValue = 0. End Select End Sub '----------------------------------------------------------------------------' SFD_DeInit ' Purpose : "Shut down" communication. Called once at the end of ' a measurement task '----------------------------------------------------------------------------Sub SFD_DeInit(ErrorP ) oUDIM.Close() Set oUDIM = Nothing End Sub '----------------------------------------------------------------------------' DbleFrom2Compl ' Purpose : Convert a byte with number coded as two complement to ' a valid double value '----------------------------------------------------------------------------Function DbleFrom2Compl(TwoComplByte) DbleFrom2Compl = 0. Dim uByteT,lValueT uByteT = TwoComplByte and 255 uByteT = CByte(uByteT) lValueT = uByteT if ( CBool(uByteT and (2^7)) ) Then lValueT = CInt(uByteT) lValueT = Not lValueT lValueT = lValueT and 127 lValueT = lValueT + 1 lValueT = lValueT * (-1) End If DbleFrom2Compl = CDbl(lValueT) Exit Function End Function © National Instruments (Ireland) Limited 6-9 Deinitialisierung HilfsFunktionen Script-DAC-Treiber Script-DAC-Treiber '----------------------------------------------------------------------------' BitCheck ' Purpose : Check whether bit "BitNo" in variable "Value" is set ' Return true if bit is set '----------------------------------------------------------------------------Function BitCheck(Value,BitNo) BitCheck = CBool(Value and (2^BitNo)) Exit Function End Function 6.3 Beispiele mit dem Gerätesimulator Ziel dieses Dokuments ist es, den Benutzer des Script DAC Treibers in einigen Schritten in die Benutzung des Script DAC Treibers einzuführen. Hierbei sollen anhand einer Reihe von Beispielen die Möglichkeiten, die der Script DAC Treiber bietet, aufgezeigt werden. Die Beispiele zum Script DAC Treiber basieren auf dem Gerätesimulator dessen Beschreibung der entsprechenden Dokumentation zu entnehmen ist. Beginnend mit einem einfachen Beispiel soll dieses Beispiel schrittweise immer weiter ausgebaut werden, bis schließlich die gesamte Steuerung des Gerätesimulators vom Script DAC Treiber erfolgt. Es ist ratsam, sich die Dokumentation zum Script DAC Treiber und zum Gerätesimulator durchzulesen, um die Beispiele besser verstehen zu können. Vorbereitungen Zunächst einmal wird der DIAdem-Schaltplan gelöscht. Anschließend wählen Sie aus der Bau- und Funktionsgruppenleiste für die Eingänge einen Block für den Script DAC Treiber aus. Diesen Verbinden Sie mit einem Kurvenblock, den Sie der Bau- und Funktionsgruppenleiste für die Anzeige entnehmen. Ihr Schaltplan sollte anschließend etwa wie folgt aussehen: DIAdem-DAC-Treiberbeschreibung 6-10 ni.com Script-DAC-Treiber Nachdem Sie den Default Takt für diesen Schaltplan auf 20 Hz eingestellt haben (Menü Einstellungen - Einzelwert-Verarbeitung Default-Takt), können Sie diesen Schaltplan unter dem Namen "vorlage.dac" abspeichern. Dieser Schaltplan dient später als Grundlage für weitere Beispiele. Nach einem Doppelklick auf den Block DLL_In1 erhalten Sie folgenden Dialog zum Einstellen der Parameter für den Schnittstellentreiber: © National Instruments (Ireland) Limited 6-11 Script-DAC-Treiber Script-DAC-Treiber Hier drücken Sie zunächst die Taste "Script-Vorlage". Es wird der folgende Dialog angezeigt : Wählen Sie bitte folgende Einstellungen : Schnittstelle = „serielle“ Prozeduren = „Nur notwendige“ Klicken Sie anschließend auf den Button „OK“. Daraufhin wird eine Vorlage für ein VBScript in der Zwischenablage kopiert. Diese Vorlage können Sie nun in einem beliebigen ASCII Editor einfügen und bearbeiten. Diese Vorlage enthält Einsprünge für alle Funktionen, die vom DIAdem Script DAC Treiberaufgerufen werden können. Suchen Sie in der Datei die Funktion SFD_Init. Korrigieren Sie dort Zeile : Call SFDU_COMInit(oUDIM,"COM1,9600,N,8,1") zu Call SFDU_COMInit(oUDIM,"COM2,9600,N,8,1") Mit diesem Befehl wird die serielle Schnittstelle COM2 geöffnet. Sollten Sie mit einer anderen seriellen Schnittstelle arbeiten, so ist dieses Zeile entsprechend abzuändern. Zur Kommunikation mit dem Gerätesimulator werden die Einstellungen 9600 Baud, keine Parität, 8 Datenbits und 1 Stop Bit eingestellt. Nach Beenden der Messung sollte die serielle Schnittstelle wieder geschlossen werden. Dies geschieht in der Funktion SFD_DeInit mit folgender Zeile. call oUDIM.Close Diese Datei speichern Sie bitte unter dem Namen "vorlage.vbs" ab, da dies die Basis für alle Beispiele bildet DIAdem-DAC-Treiberbeschreibung 6-12 ni.com Script-DAC-Treiber Nachdem die Vorbereitungen abgeschlossen sind, soll nun das erste Beispiel zur Datenerfassung mit dem DIAdem Script DAC Treibererstellt werden. Einfache Beispiele mit dem Gerätesimulator Beispiel 1, Messen von Kanal 1 In diesem Beispiel sollen Messdaten mit dem DIAdem Script DAC Treiber von Kanal 1 des Gerätesimulators erfasst werden. Die Daten sollen vom Gerätesimulator im ASCII Format übertragen werden. Zur Bebarbeitung dieses Beispiels starten Sie zunächst DIAdem und laden Sie den Schaltplan "vorlage.dac", den Sie eben erstellt haben. Weiterhin laden Sie die Datei "vorlage.vbs" in einen beliebigen ASCII Editor und speichern Sie diese Datei unter dem Namen "beispiel1.vbs" ab. Wechseln Sie nun wieder ins DIAdem und öffnen Sie den Dialog zur Parametrierung des Script DAC Treibers durch einen Doppelklick auf den Block "DLL_In1". Im Feld "Dateiname" geben Sie jetzt den Namen "beispiel1.vbs" an. Suchen Sie in der Datei "beispiel1.vbs" im Editor die Funktion SFD_ReadChannel(). In dieser Funktion werden die Daten der einzelnen Messkanäle erfasst und an DIAdem übertragen. Ergänzen Sie bitte in der ersten Zeile die Definition der Variablen „sgAntwortT“ : Dim sgAntwortT Fügen Sie anschließend den Befehl zum Abfragen des Kanals 1 vom Gerätesimulatorein. Die Abfrage des Kanals 1 erfolgt mit der Zeile Call oUDIM.Write( "MSV?1") Im Anschluss daran wird die Antwort des Geräts mit sgAntwortT = oUDIM.Read() DataP = CDbl( oUDIM.Parse(sgAntwortT,"%AD")) eingelesen und in die Variable DataP konvertiert. Diese Antwort kann nun in der Funktion weiterverarbeitet und das Ergebnis an DIAdem übergeben werden. Das fertige Script können Sie jetzt unter dem Namen "beispiel1.vbs" speichern und anschließend den Gerätesimulator starten. Hier aktivieren Sie bitte den Kanal 1. Anschließend wechseln Sie ins DIAdem und starten dort die Mes- © National Instruments (Ireland) Limited 6-13 Script-DAC-Treiber Script-DAC-Treiber sung. Nachdem Sie die Messung beendet haben, können Sie den Schaltplan unter dem Namen "beispiel1.dac" abspeichern. Beispiel 2, Aktivieren der benötigten Messkanäle Aufbauend auf Beispiel 1, soll das Script dahingehend erweitert werden, dass nicht nur Daten von Kanal 1 des Gerätesimulators eingelesen werden, sondern die Daten von beliebigen Kanälen des Gerätesimulators abgefragt werden können. Hierzu sollen während der Messvorbereitung zunächst alle Kanäle deaktiviert werden und anschließend die benötigten Kanäle gezielt wieder aktiviert werden. Als Parameter, welche Kanäle gemessen werden sollen, soll der Parameter Anschl.-Nr. aus dem Dialog des Script DAC Treibers verwendet werden. Als Basis für diese Weiterentwicklung dient das Script "beispiel1.vbs". Die Umsetzung dieses Beispiels erfolgt in zwei Schritten. Zunächst werden in der Funktion SFD_InitInChannel() die benötigten Kanäle aktiviert. Hierzu fügen Sie bitte die Funktion SFD_InitInChannel() in Ihr Script ein. Sub SFD_InitInChannel( ChannelNumberP, ParamP, ErrorP ) End Sub In dieser Funktion wird der Aktivierungsbefehl an den Gerätesimulator übertragen. Call oUDIM.write("ACH" + CStr(ChannelNumberP)+",1" ) Da der Gerätesimulator auf den Befehl mit einer Statusmeldung antwortet, muss diese anschließend ausgelesen werden. oUDIM.Read() Diese Antwort kann anschließend noch weiter ausgewertet werden und ggf. zur Ausgabe einer Fehlermeldung benutzt werden. In diesem Beispiel soll die Antwort jedoch nicht weiter ausgewertet werden. Anschließend löschen Sie in der Funktion SFD_ReadChannel die Zeile Call oUDIM.Write( "MSV?1" ) und ersetzen diese durch folgende Zeile: Call oUDI.Write("MSV?"+CStr(ChannelNumberP)) Anschließend können Sie das Script unter dem Namen "beispiel2.vbs" abspeichern und im Block zum Script DAC Treiberin DIAdem anmelden. Jetzt können Sie die Liste der zu erfassenden Messkanäle im Block zum Script DAC Treibervergrößern und an- DIAdem-DAC-Treiberbeschreibung 6-14 ni.com Script-DAC-Treiber schließend eine Messung starten. Das fertige Beispiel können Sie sich in den Dateien "beispiel2.dac" und "beispiel2.vbs" ansehen. Aufgabe : Ergänzen Sie die Funktion SFD_Init() um eine Schleife, in der alle Kanäle zunächst deaktiviert werden. Lösung : Um zu Beginn einer Messung alle Messkanäle zu deaktivieren, fügen Sie einfach eine Schleife in die Funktion SFD_Init() ein, in der alle Kanäle des Gerätesimulators deaktiviert werden. For lKanalNummerT = 0 to 9 Call oUDIM.Write("ACH"+CStr(lKanalNummerT)+",0") Call oUDIM.Read() Next Vergessen Sie nicht am Beginn der Prozedur SFD_Init() die Definition der Variablen lKanalNummerT einzufügen : Dim lKanalNummerT Das Script mit der Lösung zu dieser Aufgabe heißt "loesung2.vbs", die Schaltplandatei „loesung2.dac“. Einfluss des Datenformats auf die Ausführungsgeschwindigkeit Betreibt man das letzte Beispiel mit mehreren Kanälen, so wird man schnell feststellen, dass die eingestellte Abtastrate von 20 Hz mit dem Script DAC Treiber nicht erreicht wird. Die Ursachen hierfür sollen in den folgenden Beispielen näher untersucht werden und es soll aufgezeigt werden, wie das Script zum Treiber optimiert werden kann. Ein Grund für die schlechte Performance des Script DAC Treibers ist zunächst einmal in dem angeschlossenen Gerät (hier der Gerätesimulator) zu suchen. Dieses Gerät kann ggf. die eingehenden Befehle nur mit einer bestimmten Geschwindigkeit verarbeiten. Diese Grenze ist geräteabhängig und kann vom Script DAC Treiber nicht weiter beeinflusst werden. Ein weiterer Punkt, der die Performance stark beeinflusst, ist die verwendete Schnittstelle, und deren Performance. Auch dieser Parameter kann vom Script DAC Treiber nur bedingt (z.B. durch Auswahl einer höheren Übertragungsrate) beeinflusst werden. Ein weiterer Parameter, der die maximale Arbeitsgeschwindigkeit stark beeinflussen kann, ist die Menge der zu übertragenden Daten. Der Einfluss der zu übertragenden Datenmenge auf die Performance des Treibers kann ggf. durch eine geschickte Nutzung des Befehlssatzes des Geräts beeinflusst werden. Im letzten Beispiel mussten pro Messwert 15 © National Instruments (Ireland) Limited 6-15 Script-DAC-Treiber Script-DAC-Treiber Byte zwischen dem Rechner und dem Gerätesimulator über die serielle Schnittstelle übertragen werden. (Der Messbefehl "MSV?x<CR><LF>" = 7 Zeichen und die Daten "x.xxxx<CR><LF> = 8 Zeichen). Bei der verwendeten Einstellung der seriellen Schnittstelle (8 Datenbits, 1 Stop Bit, 1 Start Bit) werden pro Byte 10 Bit über die serielle Schnittstelle übertragen. Daraus folgt, dass pro Messwert insgesamt 150 Bit übertragen werden müssen. Bei einer Übertragungsrate von 9600 Baud ergibt sich somit eine maximale Summenabtastrate von 64 Hz. Diese Grenze stellt die theoretische Obergrenze für die Summenabtastrate dar und kann bei den gegebenen Übertragungsparametern nicht überschritten werden. Die Einstellung einer höheren Summenabtastrate ist somit von vornherein sinnlos. Mit dem Schaltplan "abtastrate.dac" kann die aktuell erreichte Abtastrate online ermittelt werden. Hierbei nutzt der Schaltplan die Tatsache aus, dass bei Messprozessen, die im Vordergrund abgearbeitet werden, der langsamste Messprozess die maximale Abtastrate einer DAC Task bestimmt. Im Unterschaltplan wird die Zeitdifferenz zwischen 10 Messwerten bestimmt und daraus die aktuelle Abtastrate ermittelt und angezeigt. Dieser Schaltplan soll als Basis für die weiteren Beispiele dienen und zeigen, welchen Einfluss die folgenden Optimierungen des Scripts auf die erreichbare Abtastrate haben. Beispiel 3, Verwendung unterschiedlicher Formate A. ASCII Zunächst soll hier einmal untersucht werden, welchen Einfluss die Verwendung eines bestimmten Datenformats auf die erreichbare Abtastrate hat. Hierzu laden Sie bitte zunächst den Schaltplan "abtastrate.dac" und geben Sie im Block zum Script DAC Treiber, die Datei "beispiel2.vbs" als auszuführendes Script an. Ermitteln Sie nun die erreichte Abtastrate mit diesem Schaltplan. Da in den folgenden Beispielen das Ausgabeformat des Gerätesimulators verändert wird, sollten Sie in der Funktion SFD_Init() des Scripts einen Befehl aufnehmen, der das Ausgabeformat des Gerätesimulators auf das gewünschte Format einstellt. Hierzu fügen Sie in das Script "beispiel2.vbs" in der Funktion SFD_Init folgende Zeilen ein und speichern das Script anschließend unter dem Namen "beispiel3a.vbs": Call oUDIM.Write( "COF 0" ) DIAdem-DAC-Treiberbeschreibung 6-16 ni.com Script-DAC-Treiber Call oUDIM.Read() Durch diese Befehle wird nun das Ausgabeformat des Gerätesimulators auf "ASCII" eingestellt. B. ASCII mit Status Als nächstes soll nun das Ausgabeformat "ASCII mit Status" (COF 1) untersucht werden. Hierzu ändern Sie den Befehl zum Einstellen des Ausgabeformats in der Funktion SFD_Init() entsprechend ab und speichern das Script unter dem Namen "beispiel3b.vbs" ab. Das Ausgabeformat "ASCII mit Status" liefert zunächst die Nummer des Messkanals gefolgt von einem Semikolon. Im Anschluss daran folgt der eigentliche Messwert gefolgt von einem <CR><LF>. Aus diesem Grund muss die Funktion zur Datenerfassung (SFD_ReadChannel()) an das neue Datenformat angepasst werden. Nachdem die Antwort vom Gerät eingelesen wurde, muss nun der Messwert aus der Antwort herausgefiltert werden. Dies geschieht mit Antwort = Right( Antwort, Len(Antwort) - 2 ) Nachdem das Script "beispiel3b.vbs" gespeichert wurde, kann es mit DIAdem getestet werden. Hierzu wird im Block zum Script DAC Treiber das Script "beispiel3b.vbs" als auszuführendes Script angegeben. Bei der anschließenden Messung zeigt sich, dass dieses Script etwas langsamer als das Script "beispiel3a.vbs" läuft. Dies ist nicht unbedingt verwunderlich, da hier pro Messwert 2 Zeichen mehr übertragen werden müssen. C. Binäre Daten Als nächstes soll nun ein binäres Datenformat getestet werden. Hierzu wird das Ausgabeformat des Gerätesimulators auf "binär 2 Byte MSB-LSB mit Status" (COF 5) eingestellt. Bei diesem Format sendet der Gerätesimulator folgenden 3 Byte langen String pro Messwert: 1 Byte Kanalnummer, 2 Byte Messwert. Die Daten werden nicht durch <CR><LF> abgeschlossen. Aus diesem Grund wird die Einleseroutine in der Funktion SFD_Readchannel() wie folgt geändert: sgAntwortT = oUDIM.Read(3,0) ' Die Antwort liegt nun als <1-Byte Status> <2-Byte Messwert> vor © National Instruments (Ireland) Limited 6-17 Script-DAC-Treiber Script-DAC-Treiber aDataT = oUDIM.Parse(sgAntwortT,"%1L%2L") DataP = aDataT(1) In der Variablen Count wird zunächst einmal abgelegt wie viele Zeichen eingelesen werden sollen. Anschließend werden die Daten mit der Funktion oUDI.Read() eingelesen. Der zweite Parameter (Mode = 0) gibt an, dass die Daten hier binär (ohne Zeilenendezeichen) übertragen werden sollen. Nach dem Einlesen stehen die Binärdaten als 3 Zeichen lange Zeichenkette in der Variablen Antwort zur weiteren Bearbeitung zur Verfügung. Diese Binärdaten können von VBScript nicht direkt weiterverarbeitet werden, so dass sie zunächst mit einer Hilfsfunktion (oUDI.Parse) aufbereitet werden müssen. Als erstes wird hier die Kanalnummer (1. Byte) aus der Zeichenkette entfernt. Anschließend wird mit der Funktion oUDI.Parse der Messwert aus der Zeichenkette in ein für VBScript verwertbares Format umgewandelt, der Variablen DataP zugewiesen und anschließend an DIAdem übergeben Dieses Script speichern Sie unter dem Namen "beispiel3c.vbs" ab. Wenn Sie eine Messung mit dem Script ausführen, so werden Sie zwei Dinge beobachten: Erstens ist die erreichbare Abtastrate etwas höher als in der vorhergehenden Beispielen und zweitens laufend die Messdaten aus dem Darstellbereich der Kurvenanzeige heraus. Der Grund für letzteres Verhalten liegt darin, dass bei der Binärübertragung die Daten unskaliert übertragen werden. Der Wertebereich des Signals (-1 bis +1) wird hier auf den Bereich 32767 bis 32767 abgebildet. Nach einer Umskalierung der Anzeige werden die Messdaten wieder qualitativ richtig dargestellt. Dieses Beispiel hat gezeigt, dass die Auswahl des Übertragungsformats der Daten Einfluss auf die Performance des Script DAC Treibers haben kann. In diesem Fall ist dieser Einfluss jedoch vergleichsweise gering. Ein Vergleich der theoretisch möglichen Abtastrate mit der wirklich erreichbaren Summenabtastrate 64Hz/ca.12 Hz) zeigt jedoch, dass in diesem Fall die Datenübertragung wahrscheinlich nicht der bremsende Faktor ist. Bevor wir jedoch weitere Möglichkeiten zur Beschleunigung des Scripts analysieren, sollten wir zunächst das letzte Beispiel um folgende zwei Punkte ergänzen: Übertragung skalierter Werte bei binärer Datenübertragung Parametrierbares Datenformat für die Datenausgabe des Gerätesimulators DIAdem-DAC-Treiberbeschreibung 6-18 ni.com Script-DAC-Treiber Parametrierung und Skalierung Beispiel 4, Skalierung von Binärdaten Es bestehen einige verschiedene Möglichkeiten, um die eingelesenen Binärdaten auf die Messgrößen zu skalieren. Eine Möglichkeit besteht darin, die eingelesenen Daten im DIAdem Schaltplan über einen entsprechend konfigurierten Skalierblock zu skalieren. In diesem Fall müsste jedoch bei jeder Änderung des Messbereichs am Gerät eine entsprechende Anpassung der Parametrierung des Skalierblocks erfolgen. Eine weitere Alternative besteht darin, die Messdaten im Script vor der Übergabe an DIAdem mit einem entsprechenden Skalierfaktor zu multiplizieren. Auch bei dieser Vorgehensweise ist es notwendig, bei jeder Änderung des Messbereichs am Gerät entsprechende Änderungen im Script vorzunehmen. Eine elegantere Methode zur Skalierung besteht darin, in der Messvorbereitung (SFD_Init() oder SFD_InitInChannel()) den aktuellen Messbereich des entsprechenden Kanals beim Gerät abzufragen und daraus geeignete Skalierparameter zu ermitteln. Diese Parameter können in einem Feld geeigneter Größe abgelegt werden und in der Funktion SFD_ReadChannel() mit den gelesenen Binärdaten verrechnet werden. Eine weitere Möglichkeit besteht darin, zur Speicherung der Skalierparameter eines Kanals die optionalen Parameter FaktorP und OffsetP der Funktion SFD_InitInChannel() zu nutzen. Die letzte Möglichkeit soll nun in diesem Beispiel realisiert werden. Laden Sie hierzu das Beispiel "beispiel3c.vbs" in Ihren Editor und suchen Sie dort die Funktion SFD_InitInChannel(). Ergänzen Sie nun die Parameterliste dieser Funktion um die beiden Parameter FaktorP und OffsetP. Mit dem Befehl AMP? können Sie die Amplitude abfragen, die am Gerätesimulator für einen Kanal eingestellt ist. Den benötigten Skalierfaktor ermitteln Sie, indem Sie diesen Wert durch 32767 dividieren. Ergänzen Sie zunächst eine neue erste Zeile innerhalb von SFD_InitInChannel() : Dim dAmplitudeT Ergänzen Sie dann am Ende der Prozedur die folgenden Zeilen : Call oUDIM.Write("AMP?"+CStr(ChannelNumberP)) dAmplitudeT = CDbl(oUDIM.Read()) FaktorP = dAmplitudeT/32767. © National Instruments (Ireland) Limited 6-19 Script-DAC-Treiber Script-DAC-Treiber OffsetP = 0. Dieses Beispiel speichern Sie bitte unter dem Namen "beispiel4.vbs" ab. Bei diesem Beispiel ist zu beachten, dass hier der Messbereich (Amplitude) des Signals über die gesamte Messdauer hin konstant bleiben muss, da der Skalierfaktor nur einmal in der Messvorbereitung ermittelt wird. Falls es möglich sein soll, dass der Messbereich während einer laufenden Messung gewechselt wird (z.B. Autorange), so muss dieser während der Messung dauernd neu ermittelt und mit den Messdaten verrechnet werden. In diesem Fall ist es jedoch nicht sinnvoll ein solches unskaliertes Datenformat für die Datenübertragung zu verwenden, da die Vorteile des binären Datenformats (weniger zu übertragende Daten) durch die zusätzliche Abfrage des aktuellen Messbereichs wieder aufgehoben werden. Beispiel 5, Einstellung des Datenformats als Geräteparameter In diesem Beispiel soll gezeigt werden, wie die Geräteparameter des Script DAC Treibers zur Konfiguration des Treibers benutzt werden können. Hier soll anhand eines Parameters ein bestimmtes Datenformat für die Datenausgabe des Gerätesimulators eingestellt werden und bei einer ungültigen Eingabe soll ein Fehler ausgegeben werden. Als Basis für dieses Beispiel dient das Beispiel "beispiel4.vbs". Zunächst soll in der Funktion SFD_Init der Parameter "DeviceParam1V" ausgewertet werden und ggf. eine Fehlermeldung ausgegeben werden. Die Auswertung des Parameters könnte etwa wie folgt aussehen: '------------------------------------------------' Interpretation der vom Anwender definierten ' Formatbezeichnung '------------------------------------------------sgFormatTypeT = UCase(DeviceParam1V) lFormatM = 0 Select Case sgFormatTypeT Case "ASCII 1" lFormatM = 0 Case "ASCII 2" lFormatM = 1 Case "BINÄR" lFormatM = 5 Case Else ErrorP = "Es wurde ein ungültiger Parameter eingeben !" End Select Der Parameter DeviceParam1V wird auf die unterschiedlichen Schlüsselworte hin überprüft. Um Problemen mit Groß/Kleinschreibung vorzubeugen wird der Parameter „DeviceParam1V“ zunächst auf Großschreibung konvertiert. Wird ein gültiges DIAdem-DAC-Treiberbeschreibung 6-20 ni.com Script-DAC-Treiber Schlüsselwort gefunden, wird der Variablen „lFormatM“ das entsprechende Ausgabeformat des Gerätesimulators zugewiesen. Wird ein ungültiges Schlüsselwort angegeben, dann wird dem Parameter ErrorP eine Fehlermeldung zugewiesen. Anschließend muss noch der Befehl zur Einstellung des Ausgabeformats angepasst werden. Dies geschieht durch folgende Befehle: Call oUDIM.Write( "COF "+CStr(lFormatM)) Call oUDIM.Read() Da die Variable lFormatM auch in den Funktionen SFD_InitInChannel() und SFD_ReadChannel() noch benötigt wird, ist darauf zu achten, dass diese Variable global definiert ist. Dazu wird die Variable außerhalb der Prozeduren, im Kopf der Datei definiert. In der Funktion SFD_InitInChannel() muss noch überprüft werden, ob die Daten im Binärformat vorliegen. In diesem Fall muss der Skalierfaktor ermittelt und an DIAdem übergeben werden. FaktorP = 1 OffsetP = 0. if ( lFormatM = 5 ) Then ' Eingestellte Amplitude fuer den Kanal erfragen : Call oUDIM.Write("AMP?"+CStr(ChannelNumberP)) ' Lesen und Auswerten der Antwort : dAmplitudeT = CDbl(oUDIM.Read()) FaktorP = dAmplitudeT/32767. Endif In der Funktion SFD_ReadChannel() müssen abschließend noch die unterschiedlichen Funktionen zur Auswertung der unterschiedlichen Datenformate implementiert werden. Dies kann z.B. in folgender Select Case Anweisung erfolgen: DataP = 0. Select Case lFormatM Case 0 '------------------------------------------------' Die Daten werden ASCII eingelesen. Wenn "Parse" ' ohne den ersten Parameter aufgerufen wird und ' die Daten liegen ASCII vor, wird in "Parse" ' solange von der Schnittstelle gelesen bis der ' Delimiter erreicht wird '------------------------------------------------DataP = oUDIM.Parse(,"%AD") Case 1 '------------------------------------------------' Die Daten werden ASCII eingelesen. Es werden der ' Status und der Messwert, getrennt durch ein Semi' kolon eingelesen.Wenn "Parse" ohne den ersten ' Parameter aufgerufen wird und die Daten liegen ' ASCII vor, wird in "Parse" solange von der ' Schnittstelle gelesen bis der Delimiter erreicht ' wird '------------------------------------------------- © National Instruments (Ireland) Limited 6-21 Script-DAC-Treiber Script-DAC-Treiber aDataT = oUDIM.Parse(,"%AD%1C%AD") DataP = CDbl(aDataT(1)) Case 5 '------------------------------------------------' Die Antwort nun als 1-Byte Status 2-Byte Wert vor ' Der 1 Byte Status Wert wird als Kommentar ' definiert und übersprungen. Wenn "Parse" ohne ' den ersten Parameter aufgerufen wird, wird aus ' der Formatbeschreibung die Laenge des einzu' lesenden Datenblockes automatisch bestimmt und ' die Daten werden von der Schnittstelle eingelesen '------------------------------------------------DataP = CDbl(oUDIM.Parse(,"%1C%2L") ) End Select Nachdem Sie dieses Beispiel als "beispiel5.vbs" gespeichert haben, können Sie dieses Beispiel mit dem Schaltplan "abtastrate.dac" testen. Geben Sie im Block zum Script DAC Treiberals Parameter1 eines der Schlüsselworte "ASCII 1", "ASCII 2" oder "binär" ein und beobachten Sie die Reaktionen des Gerätesimulators. Unabhängig vom eingestellten Ausgabeformat des Gerätesimulators werden jetzt immer die korrekten Messdaten angezeigt. Optimierung durch Ausnutzen des Befehlssatzes Die vorhergehenden Beispiele haben gezeigt, dass - zumindest beim Gerätesimulator - durch Änderung des Datenformats für die Datenübertragung keine gravierende Verbesserung der Performance zu erreichen war. Beim Vergleich der theoretisch möglichen Abtastrate mit der wirklich erreichten Abtastrate (64/12) hat sich auch gezeigt, dass bei diesem Gerät der Flaschenhals nicht in der eigentlichen Datenübertragung zu suchen ist. Aus diesem Grund soll nun der Befehlssatz des Gerätesimulators dahingehend untersucht werden, ob es Möglichkeiten gibt, die Performance des Scripts durch geeignete Befehle des Gerätesimulators zu steigern. Das Gerät bietet die Möglichkeit, mit einem Befehl (TRG) die Messdaten aller aktiven Kanäle auf einmal anzufordern. Dies verspricht zunächst eine deutliche Reduktion der zu übertragenden Daten, da hier zum Anfordern der Daten nur noch 5 Byte pro Scan übertragen werden müssen (TRG<CR><LF>). In den vorhergehenden Beispielen waren es immerhin n*7 Zeichen (MSV?x<CR><LF>) pro Scan. Beispiel 6, Einstellung des Messmodus Hier soll das Script "beispiel5.vbs" dahingehend erweitert werden, dass über den Parameter2 des Blocks zum Script DAC Treiber der Messmodus eingestellt werden kann. Als Alternativen sollen hier DIAdem-DAC-Treiberbeschreibung 6-22 ni.com Script-DAC-Treiber der Modus "Einzelwert", der bereits realisiert ist, und der Modus "Scan" einstellbar sein. Zunächst wird deshalb in der Funktion SFD_Init() der Parameter2 überprüft und ggf. eine Fehlermeldung ausgegeben. Der aktive Messmodus wird in der globalen Variablen "Messmodus" gespeichert. Die Initialisierung der einzelnen Messkanäle bleibt unverändert. Bei der Erfassung der Messdaten sind jedoch einige Änderungen notwendig. Bei den bisherigen Beispielen wurden die Messdaten jeweils für einen Kanal in der Funktion SFD_ReadChannel() angefordert und ausgewertet. Dies bleibt auch für den Messmodus "Einzelwert" gleich. Dieser Programmteil wird in der Funktion SFD_ReadChannel() immer dann ausgeführt, wenn der Messmodus Einzelwert ausgewählt ist. Aus diesem Grund wird die Funktion SFD_ReadChannel() um folgende Anweisungen ergänzt: DataP = 0. if ( 0 = lMessModusM ) Then ' Anfordern eines Messwerts von Kanal1 Call oUDIM.Write("MSV?"+CStr(ChannelNumberP)) Select Case lFormatM Hier stehen die „alten“ Anweisungen End Select else End If Der else Zweig dieser Abfrage bleibt zunächst leer. Der Treiber arbeitet zunächst nur im Messmodus "Einzelwert". Im Messmodus "Scan" liefert der Treiber z. Zt. für alle Kanäle den Wert 0 (Initialisierungswert von DataP). Das Script können Sie jetzt unter dem Namen "beispiel6.vbs" abspeichern und z.B. mit dem Schaltplan "abtastrate.dac" testen. Der nächste Schritt besteht nun darin, die Datenerfassung im Messmodus "Scan" zu implementieren. Da der Befehl "TRG" den Gerätesimulator veranlasst, die Daten aller aktiven Kanäle gleichzeitig zu senden, sollte hier die Anforderung der Daten nicht in der Funktion SFD_ReadChannel() sondern in der Funktion SFD_GetScan() erfolgen. Im Gegensatz zur Funktion SFD_ReadChannel(), die pro Scan einmal pro Kanal aufgerufen wird, wird SFD-GetScan() nur einmal pro Scan aufgerufen. Der Aufruf von SFD_GetScan() erfolgt vor dem ersten Aufruf von SFD_ReadChannel(). Ergänzen Sie nun das Script um den Rumpf für die Funktion SFD_GetScan. Sub SFD_GetScan(ErrorP )End Sub © National Instruments (Ireland) Limited 6-23 Script-DAC-Treiber Script-DAC-Treiber Da diese Funktion nur für den Messmodus "Scan" bearbeitet werden soll, ist hier zunächst am Beginn der Prozedur folgende Zeile zu ergänzen : If ( 0 == lMessModusM ) Then Exit Sub Falls der Messmodus also nicht 1 (für „Scan“) ist, wird die Prozedur sofort wieder verlassen. Innerhalb der Prozedur muss zunächst der Messbefehl "TRG" an das Gerät übertragen werden. Anschließend werden die Messdaten vom Gerät eingelesen. Abhängig vom eingestellten Übertragungsformat müssen die Daten auf unterschiedliche Weise eingelesen und aufbereitet werden. Deshalb erfolgt die weitere Verarbeitung der Daten innerhalb einer Select Anweisung in der die unterschiedlichen Datenformate verarbeitet werden. ' Anforderung eines Scan : Call oUDIM.Write("TRG") ' Verarbeitung der Daten je nach Format Select Case lFormatM Case 0 Case 1 Case 5 End Select Die Messdaten sollen in dieser Funktion eingelesen und zur weiteren Bearbeitung aufbereitet werden. Die Daten sollen in einem Script-globalen Feld gespeichert und dann in der Prozedur ReadChannel an DIAdem zurückgegeben werden. Das Feld solll mit „dMessdatenM“ bezeichnet werden. Da das Format "ASCII mit Status" alle benötigten Daten überträgt, um die Messdaten in den Zwischenspeicher einzusortieren, soll dieses Format als erstes bearbeitet werden. Zunächst müssen die Messdaten (als ASCII-Text) eingelesen werden. Anschließend muss dieser Text ausgewertet werden. Je nachdem wie viele Signale aktiv sind und ob mit oder ohne Status gesendet wird, sind 1 oder mehr Werte auszuwerten. Um das Script übersichtlicher zu halten, wird eine zusätzliche Prozedur erstellt die diese Auswertung vornimmt : Sub Simulator_Werte(sgAntwort, aData) Dim sgaDataT Dim lCountT,lValueT '------------------------------------------------' Zuerst wird der eingelesene Text an den ' Trennzeichen (";") zerlegt '------------------------------------------------sgaDataT = Split(sgAntwort,";") '------------------------------------------------' Dann wird geprüft ob das Ergebnis ein einzelner ' Wert oder ein Feld von Werten ist : '------------------------------------------------if ( Not IsArray(sgaDataT) ) Then lCountT = 1 Redim aData(1) sgaDataT = Trim(sgaDataT) DIAdem-DAC-Treiberbeschreibung 6-24 ni.com Script-DAC-Treiber aData(0) = CDbl(sgaDataT) Else lCountT = UBound(sgaDataT) Redim aData(lCountT) For lValueT = 0 To lCountT sgaDataT(lValueT) = Trim(sgaDataT(lValueT)) aData(lValueT) = CDbl(sgaDataT(lValueT)) Next End If End Sub In der Prozedur „SFD_GetScan“ wird „Simulator_Werte“ aufgerufen und anschließend werden die konvertierten Werte in das Feld „dMessdatenM“ einsortiert : .. Case 1 sgAntwortT = oUDIM.Read() Call Simulator_Werte(sgAntwortT,aDataT) ' Umkopieren der Messdaten For lValueT = 0 To UBound(aDataT) Step 2 lIndexT = aDataT(lValueT) dMessdatenM(lIndexT) = CDbl(aDataT(lValueT+1)) Next Case 5 .. In der Funktion SFD_ReadChannel werden die Daten anschließend nur noch aus dem Zwischenspeicher ausgelesen und an DIAdem übergeben. else DataP = dMessdatenM(ChannelNumberP) end if Im Binärformat werden die gleichen Informationen übertragen, wie im Übertragungsformat "ASCII mit Status". Das Problem beim Binärformat besteht nun darin, dass das Script vor dem Einlesen der Messdaten ermitteln muss, wie viele Bytes vom Gerät gesendet werden und eingelesen werden müssen. Wird bei Lesebefehl die Anzahl Bytes zu groß angegeben, so läuft der Lesebefehl auf einen Timeout und die erreichbare Abtastrate bricht drastisch ein. Werden hingegen zu wenig Daten eingelesen, so werden die Messdaten in den Kanälen vertauscht und die Daten sind unbrauchbar. Für das Zählen der Messwerte ist zu beachten, dass möglicherweise der gleiche Kanal mehrfach gemessen wird. Das wiederum führt dann dazu, dass die Prozedur SFD_InitInChannel mehrfach mit der gleichen Kanalnummer aufgerufen wird. Entsprechend sorgfältig muss das Zählen der Kanäle erfolgen, die tatsächlich vom Gerät gesendet werden. Wir gehen in zwei Schritten vor: © National Instruments (Ireland) Limited 6-25 Script-DAC-Treiber Script-DAC-Treiber Im ersten Schritt sollen die Kanäle nur als aktiv markiert werden. Dazu wird im globalen Abschnitt des Scriptes das Feld bAktiveKanaele angelegt. Die Einträge dieses Feldes werden dann in der Prozedur „SFD_Init“ auf „false“ gesetzt : For lKanalNummerT = 0 to 9 Call oUDIM.Write("ACH"+CStr(lKanalNummerT)+",0") Call oUDIM.Read() ' Kanal als deaktiv markieren bAktiveKanaele(lKanalNummerT) = False Next Anschließend sollen die aktiven Kanäle markiert werden. Dazu wird in der Prozedur „SFD_InitInChannel“ folgende Zeile ergänzt : ' Kanal als aktiv markieren : bAktiveKanaele(ChannelNumberP) = True Anschließend fügen wir die neue Prozedur „SFD_FinalInit“ ein. Diese Prozedur wird einmal zum Abschluß der Initialisierungsphase aufgerufen. In dieser Prozedur können wir nun die aktiven Kanäle im Feld „bAktiveKanaele“ zählen und in eine globale variable „lAnzahlKanaeleM“ eintragen. Die Prozedur sieht dann wie folgt aus : Sub SFD_FinalInit( ErrorP ) ' Zaehlen der aktiven Kanaele lAnzahlKanaeleM = 0 For lKanalNummerT = 0 to 9 if ( bAktiveKanaele(lKanalNummerT) ) Then lAnzahlKanaeleM = lAnzahlKanaeleM + 1 Next End Sub In der Funktion SFD_GetScan() können nun die Daten gezielt eingelesen und ausgewertet werden. Zunächst wird hier berechnet, wie viele Daten eingelesen werden sollen. Diese Daten werden anschließend eingelesen und in Kanalinformationen und Messdaten zerlegt. Die Ergebnisse werden dann im Zwischenspeicher abgelegt. Case 5 '------------------------------------------------' Binaer '------------------------------------------------sgAntwortT = oUDIM.Read(lAnzahlKanaeleM*3,0) sgFormatT = CStr(lAnzahlKanaeleM)+"(%1L%2L)" aBinDataT = oUDIM.Parse(sgAntwortT,sgFormatT) ' Umkopieren der Messdaten For lValueT = 0 To UBound(aBinDataT) Step 2 lIndexT = aBinDataT(lValueT) dMessdatenM(lIndexT) = CDbl(aBinDataT(lValueT+1)) Next End Select DIAdem-DAC-Treiberbeschreibung 6-26 ni.com Script-DAC-Treiber Zuletzt soll hier die Datenerfassung für das Datenformat „ASCII ohne Status“ implementiert werden. Bei diesem Datenformat werden alle Messdaten, durch Semikolons getrennt, in einer Datenzeile übertragen. Bei diesem Format gibt es keinerlei Informationen darüber, zu welchen Kanälen die betreffenden Messdaten gehören. Der Gerätesimulator liefert einen Messwert zu jedem aktiven Messkanal. Werden also beispielsweise 5 Kanäle eingelesen, fehlt zur Zeit noch die Information um welche Kanäle es sich handelt. Diese Information lässt sich aber sehr leicht in der Prozedur „SFD_FinalInit“ bestimmen. Zunächst wird ein weiteres globales Feld „lKanalIndexM“ definiert. Anschließend wird die Prozedur „SFD_FinalInit“ so erweitert, das sich anschließend folgende Sequenz ergibt : Sub SFD_FinalInit( ErrorP ) ' Zaehlen der aktiven Kanaele lAnzahlKanaeleM = 0 For lKanalNummerT = 0 to 9 if ( bAktiveKanaele(lKanalNummerT) ) Then ' Zuerst wird der Kanalindex eingetragen : lKanalIndexM(lAnzahlKanaeleM) = lKanalNummerT lAnzahlKanaeleM = lAnzahlKanaeleM + 1 End If Next End Sub Die Funktion SFD_GetScan() wird wie folgt erweitert : Case 0 '------------------------------------------------' ASCII ohne Status '------------------------------------------------sgAntwortT = oUDIM.Read() Call Simulator_Werte(sgAntwortT,aDataT) ' Umkopieren der Messdaten For lValueT = 0 To UBound(aDataT) lIndexT = lKanalIndexM(lValueT) dMessdatenM(lIndexT) = CDbl(aDataT(lValueT)) Next Case 1 Durch den Aufruf von „Simulator_Werte“ werden die Messdaten aus der Geräteantwort extrahiert. Anschließend wird der Zwischenspeicher oDataT unter Berücksichtigung der Kanalindices in das Feld dMessDatenM umkopiert. Bewertung der Optimierungen Wenn Sie nun mit dem Schaltplan "abtastrate.dac" und dem Scipt "beispiel6.vbs" einige Messungen mit verschiedenen Einstellungen © National Instruments (Ireland) Limited 6-27 Script-DAC-Treiber Script-DAC-Treiber durchführen, so werden Sie feststellen, dass sich, je nach Kombination der Parameter, unterschiedliche Abtastraten erreichen lassen. Die langsamste Variante ist zweifellos die Variante "Einzelwert" mit dem Datenformat "ASCII 2", während die Variante "Scan" mit dem Datenformat "binär" die höchste Abtastrate ermöglicht. Während bei der Datenerfassung im Modus "Einzelwert" die Steigerung der Performance durch Auswahl eines geeigneten Datenformats mit ca. 10% vergleichsweise gering war, konnte bei der scanweisen Übertragung hierdurch mit ca. 35% doch eine deutliche Performancesteigerung erreicht werden. Die Vergleiche der unterschiedlichen Ergebnisse zeigen, dass in diesem Fall die größte Performancesteigerung durch eine Umstellung des Algorithmus zur Datenerfassung zu erzielen war. Die Tatsache, dass die Performance sich durch eine geeignete Auswahl des Übertragungsformats noch einmal deutlich steigern läßt, zeigt, dass oftmals nur eine Kombination geeigneter Optimierungsstrategien zu einer optimalen Lösung für einen konkreten Anwendungsfall führt. Parametrierung der Kanäle Die bisherigen Beispiele haben unter anderem gezeigt, wie die beiden Geräteparameter des DIAdem Script DAC Treibers verwendet werden können, um das generelle Verhalten eines Geräts zu steuern. Hier soll nun gezeigt werden, wie auch die einzelnen Kanäle eines Geräts vom DIAdem Script DAC Treiberparametriert werden können. Beispiel 7, Einstellung der Signalform In diesem Beispiel soll nun die Signalform eines Kanals des Gerätesimulators mit Hilfe des DIAdem Script DAC Treibers eingestellt werden. Am Gerätesimulator können die Signalformen "Sinus", "Rechteck" und "Dreieck" ausgewählt werden. Alternativ zur Einstellung der Signalform soll es auch möglich sein, die aktuell am Gerätesimulator eingestellte Signalform beizubehalten, wenn der Parameter leer ist. Hierzu ist in der Funktion SFD_InitInChannel() zunächst der Inhalt des Parameters ParamP zu analysieren. Wenn ein gültiges Schlüsselwort gefunden wurde, wird der entsprechende Befehl zum Setzen der Signalform generiert und anschließend an den Gerätesimulator übertragen. Ist der Parameter leer, wird auch kein Befehl an den Gerätesimulator übertragen. Wird kein gültiges Schlüsselwort gefunden, so wird eine Fehlermeldung generiert. Die entsprechende Erweiterung der Funktion SFD_InitInChannel() könnte etwa so aussehen: DIAdem-DAC-Treiberbeschreibung 6-28 ni.com Script-DAC-Treiber Befehl = "WAV" + CStr( ChannelNumberP ) + "," Select Case ParamP Case "Rechteck" Befehl = Befehl + "1" Case "Dreieck" Befehl = Befehl + "2" Case "Sinus" Befehl = Befehl + "0" Case "" Befehl = "" Case Else Befehl = "" ErrorP = "Als Parameter für Kanal " + CStr( ChannelNumberP ) + _ " wurde ein ungültiger Wert angegeben." + vbCrLf + _ "Gültige Werte sind:" + vbCrLf + "Sinus" + vbCrLf + _ "Rechteck" + vbCrLf + "Dreieck" end Select if Befehl <> "" then Call oUDI.Write( Befehl ) Antwort = oUDI.Read() end if Beispiel 8, Verwaltung mehrerer Parameter Die Tatsache, dass zu jedem Block des DIAdem Script DAC Treibers nur zwei Parameter und zu jedem Signal nur ein Parameter zur Einstellung zur Verfügung stehen, deutet zunächst auf eine große Einschränkung in der Parametrierbarkeit dieses Treibers hin. Das dies nicht so ist, soll anhand dieses Beispiels gezeigt werden. Bei allen Parametern, die im Block zum DIAdem Script DAC Treibereingegeben und an das Script übergeben werden, handelt es sich um Strings beliebiger Größe. Dies ermöglicht es, in jedem dieser Parameter mehrere Einstellparameter des angeschlossenen Geräts unterzubringen. In diesem Beispiel soll nun das Beispiel 7 so erweitert werden, dass neben der Signalform auch die Amplitude des Signals über die Parameter des Script DAC Treibers eingestellt werden können. Hierzu wird die Abfrage der Parameter zunächst um die Abfrage der Schlüsselworte "Signalform=" und "Amplitude=" erweitert. Die einzelnen Parameter werden durch ein Semikolon voneinander getrennt. Leerzeichen und Tabulatorzeichen sollen im Parameter nicht zulässig sein. Da die Amplitude, die an dem betreffenden Kanal eingestellt ist, im Laufe der Kanalinitialisierung beim Gerätesimulator abgefragt wird, sollte die Auswertung des Parameters zu Beginn der Kanalinitialisierung erfolgen. Die Realisierung dieses Beispiels können Sie sich im Script "beispiel8.vbs" ansehen. Hier erfolgt die Auswertung der Parameter eines Kanals direkt zu Beginn der Funktion SFD_InitInChannel(). © National Instruments (Ireland) Limited 6-29 Script-DAC-Treiber Script-DAC-Treiber Aufgabe: Erweitern Sie das "Beispiel8a.vbs" um die Einstellung der Parameter "Frequenz", und "Einheit". Lösung: Eine mögliche Lösung dieser Aufgabe finden Sie in der Datei "loesung8.vbs". 6.4 Geräte-Beispiele Die Beispiele in den folgenden Kapiteln zeigen Anbindungen von realen Messgeräten mit dem DIAdem Schnittstellentreiber. Jedem Beispiel wird eine kurze Erläuterung vorangestellt in der das Gerät und das Protokoll mit dem das Gerät angesprochen wird kurz beschrieben wird. Anschließend wird auf Besonderheiten zu jedem Script hingewiesen. Initialisierung des Funktionsgenerator HP 33120A In diesem sehr einfachen Beispiel soll ein Funktionsgenerator HP 33120A von Hewlett Packard zu Beginn der Messung auf folgende Parameter eingestellt werden : Signalform : Sinus Frequenz : 60 Hz Amplitude : 2.5 Das Gerät ist an die serielle Schnittstelle COM1 angeschlossen. Die Geräteseitig eingestellten Übertragungsparameter sind 9600 Baud, keine Parität und 8 Datenbits. Werkseitig fest vorgegeben sind ein Startbit und zwei Stopbits Der Befehl zur Initialisierung des Funktionsgenerators auf die oben angegebenen Werte lautet : "APPLy:Sin 60, 2.5". Informationen zu diesem Befehl sowie Angaben zu weiteren Einstellmöglichkeiten, Übertragungsparametern und der Belegung des Anschlusskabels finden sich im Handbuch zum Gerät. Der Treiber soll so erstellt werden, dass die serielle Schnittstelle aus der Oberfläche des Blockes eingestellt werden kann. Dazu soll auf dem ersten Parameter der Name der Schnittstelle (z.B. COM1) angegeben werden. DIAdem-DAC-Treiberbeschreibung 6-30 ni.com Script-DAC-Treiber Das Script wurde für einen Ausgabeblock definiert. Aus diesem Grund muss das Script die beiden Prozeduren SFD_SendScan und SFD_WriteChannel enthalten, auch wenn diese beiden Prozeduren keinerlei Funktion haben. Die Parametrierung des Gerätes erfolgt nur innerhalb der Funktion SFD_Init. Das folgende Listing zeigt das gesamte Script bis auf die Prozedur SFDU_COMInit, die über die Funktion „Neues Script“ automatisch generiert werden kann. Das Script mit der Lösung zu dieser Aufgabe heißt Hp33120a_init.vbs", die Schaltplandatei „Hp33120a_init.dac“. " '----------------------------------------------------------------------------' Global parameters '----------------------------------------------------------------------------Dim oUDIM '----------------------------------------------------------------------------' Funktion zur Initialisierung eines Gerätes '----------------------------------------------------------------------------'----------------------------------------------------------------------------' SFD_Init ' Purpose : Diese Prozedur wird waehrend des Messungsstartes aufgerufen '----------------------------------------------------------------------------' DeviceParam1V | Erster Parameter der vom Anwender im DAC-Block ' | eingegeben werden kann ' DeviceParam2V | ZweiterParameter der vom Anwender im DAC-Block ' | eingegeben werden kann ' ErrorP | Variable zur Rueckgabe einer Fehlermeldung. Wird diese ' | Variable gesetzt, stopt DIAdem die Messung '----------------------------------------------------------------------------Sub SFD_Init( sgCOMName, DeviceParam2V, ErrorP ) ' Anlegen des UDI-Objektes Set oUDIM=CreateObject("DIAdem.SFD.UDI" ) '------------------------------------------------' Oeffnen und Initialisieren der seriellen ' Schnittstelle '------------------------------------------------Call SFDU_COMInit(oUDIM,sgCOMName+",9600,N,8,2") ' Delimiter setzen Call oUDIM.ParamSet("DELIMITER",vbLF) ' Zuerst muss der Remote Befehl gesendet werden ! Call oUDIM.Write("System:Remote") ' Signalform, Frequenz (60 Hz) und Amplitude (2.5) einstellen : Call oUDIM.Write("APPLy:Sin 60, 2.5") ' Gerät wieder auf lokale Bedienung setzen Call oUDIM.Write("System:Local") ' Schnittstelle wieder schliessen oUDIM.Close() ' Objekt loeschen : Set oUDIM = Nothing End Sub '----------------------------------------------------------------------------- © National Instruments (Ireland) Limited 6-31 Script-DAC-Treiber Script-DAC-Treiber ' SFD_WriteChannel ' Zweck : Diese Methode bleibt in diesem Beispiel ohne Funktion '----------------------------------------------------------------------------' DoneP | Kenner der anzeigt, ob der Wert ausgegeben werden konnte '----------------------------------------------------------------------------Sub SFD_WriteChannel( ChannelNumberP, sgParamName, DataP, DoneP, ErrorP ) DoneP = 1 End Sub '----------------------------------------------------------------------------' SFD_SendScan ' Zweck : Diese Methode bleibt in diesem Beispiel ohne Funktion '----------------------------------------------------------------------------' DoneP | Kenner der anzeigt, ob der Wert ausgegeben werden konnte '----------------------------------------------------------------------------Sub SFD_SendScan( DoneP, ErrorP ) DoneP = 1 End Sub Online-Parametrierung des Funktionsgenerator HP 33120A In diesem zweiten Beispiel zum Funktionsgenerator HP 33120A von Hewlett Packard sollen während der laufenden Messung die folgenden Parameter durch den Anwender direkt von DIAdem in den angegebenen Bereichen aus einstellbar sein : Signalform : Sinus, Rechteck, Sägezahn, Dreieck Frequenz : 0-250 Hz Amplitude : 0-7 Das Gerät ist an die serielle Schnittstelle COM1 angeschlossen. Die geräteseitig eingestellten Übertragungsparameter sind 9600 Baud, keine Parität und 8 Datenbits. Werkseitig fest vorgegeben sind ein Startbit und zwei Stopbits Der Treiber soll so erstellt werden, dass die serielle Schnittstelle aus der Oberfläche des Blockes eingestellt werden kann. Dazu soll auf dem ersten Parameter der Name der Schnittstelle (z.B. COM1) angegeben werden. Das Script wurde für einen Ausgabeblock definiert. Das folgende Listing zeigt das gesamte Script, bis auf die Prozedur SFDU_COMInit, die über die Funktion „Neues Script“ automatisch generiert werden kann. DIAdem-DAC-Treiberbeschreibung 6-32 ni.com Script-DAC-Treiber Das Script mit der Lösung zu dieser Aufgabe heißt " Hp33120a_DAC.vbs", die Schaltplandatei „Hp33120a_DAC.dac“. '--------------------------------------------------------------------' Global parameters '--------------------------------------------------------------------Dim oUDIM Dim dFrequencyM Dim dAmplitudeM Dim bChangedValuesM Dim lWaveformM Dim sgaWaveformNames(3) ' Auf ungültige Werte initialisieren dFrequencyM = vbEmpty dAmplitudeM = vbEmpty lWaveformM = vbEmpty bChangedValuesM = true ' Namen der Signalformen vorbesetzen sgaWaveformNames(0) = "Sin" ' Sinus-Form sgaWaveformNames(1) = "SQU" ' Square (Rechteck) sgaWaveformNames(2) = "TRI" ' Dreieck sgaWaveformNames(3) = "RAMP"' Saegezahn '--------------------------------------------------------------------' Funktionen zur Ausgabe von Daten '--------------------------------------------------------------------' SFD_WriteChannel ' Zweck : Ausgabe eines Wertes fuer den Kanal Nummer "ChannelNumberP" '--------------------------------------------------------------------' ChannelNumberP | Kanalnummer aus dem Block-Dialog ' ParamP | Vom Anwender definierte Variable aus dem Block-Dialog ' DataP | Auszugebender Wert ' DoneP | Kenner der anzeigt, ob der Wert ausgegeben werden konnte ' | Diese Variable muss auf einen gueltigen Wert (z.B 1) ' | gesetzt werden. Andernfalls stopt DIAdem die Messung ' ErrorP | Variable zur Rueckgabe einer Fehlermeldung. Wird diese ' | Variable gesetzt, stopt DIAdem die Messung '--------------------------------------------------------------------Sub SFD_WriteChannel( ChannelNumberP, sgParamName, DataP, DoneP, ErrorP ) Select Case LCase(sgParamName) '------------------------------------------------' Neuer Wert fuer die Signalfrequenz '------------------------------------------------Case "frequency" if ( dFrequencyM <> DataP ) Then bChangedValuesM = true dFrequencyM = DataP End If '------------------------------------------------' Neuer Wert fuer die Signalamplitude '------------------------------------------------Case "amplitude" if ( dAmplitudeM <> DataP ) Then bChangedValuesM = true dAmplitudeM = DataP End If '------------------------------------------------' Neuer Wert fuer die Signalform '------------------------------------------------Case "waveform" © National Instruments (Ireland) Limited 6-33 Script-DAC-Treiber Script-DAC-Treiber if ( lWaveformM <> CInt(DataP) ) Then bChangedValuesM = true lWaveformM = CInt(DataP) lWaveformM = CInt(SFDU_Min(lWaveformM,3)) lWaveformM = CInt(SFDU_Max(lWaveformM,0)) End If End Select DoneP = 1 End Sub '--------------------------------------------------------------------' SFD_SendScan ' Zweck : Ausgabe eines "Scans". Fuer Mehrkanalige Geraete kann ' dieser Prozedur fuer das Schreiben eines Scan's aller ' Werte genutzt werden. Die daten wurden zuvor in der ' Prozedur SFD_WriteChannel von DIAdem an das ' Script uebergeben '--------------------------------------------------------------------' DoneP | Kenner der anzeigt, ob der Wert ausgegeben werden konnte ' | Diese Variable muss auf einen gueltigen Wert (z.B 1) ' | gesetzt werden. Andernfalls stopt DIAdem die Messung ' ErrorP | Variable zur Rueckgabe einer Fehlermeldung. Wird diese ' | Variable gesetzt, stopt DIAdem die Messung '--------------------------------------------------------------------Sub SFD_SendScan( DoneP, ErrorP ) Dim sgMessageT,sgWaveform ' Haben sich die Werte geaendert ? if ( bChangedValuesM ) Then sgMessageT = "APPLy:"+sgaWaveformNames(lWaveformM)+" "+CStr(dFrequencyM)+", "+CStr(dAmplitudeM) Call oUDIM.Write(sgMessageT) ' Jetzt sind die Werte wieder aktuell bChangedValuesM = false End If DoneP = 1 End Sub '--------------------------------------------------------------------' Funktion zur Initialisierung eines Gerätes '--------------------------------------------------------------------' SFD_Init ' Purpose : Diese Prozedur wird waehrend des Messungsstartes aufgerufen '--------------------------------------------------------------------' DeviceParam1V | Erster Parameter der vom Anwender im DAC-Block ' | eingegeben werden kann ' DeviceParam2V | ZweiterParameter der vom Anwender im DAC-Block ' | eingegeben werden kann ' ErrorP | Variable zur Rueckgabe einer Fehlermeldung. Wird diese ' | Variable gesetzt, stopt DIAdem die Messung '--------------------------------------------------------------------Sub SFD_Init( sgCOMName, DeviceParam2V, ErrorP ) '------------------------------------------------' Anlegen des UDI-Objektes '------------------------------------------------Set oUDIM=CreateObject("DIAdem.SFD.UDI" ) '------------------------------------------------' Oeffnen und Initialisieren der seriellen ' Schnittstelle ' Folgende Parameter sind geraeteseitig variabel ' - Übertragungsgeschwindigkeit DIAdem-DAC-Treiberbeschreibung 6-34 ni.com Script-DAC-Treiber ' - Anzahl Datenbits ' - Parität 'Folgende Parameter sind immer gleich ' - 1 Start-Bit ' - 2 Stop-Bits '------------------------------------------------Call SFDU_COMInit(oUDIM,sgCOMName+",9600,N,8,2") ' Call oUDIM.ParamSet("DELIMITER",vbLF) Call oUDIM.ParamSet("TIMEOUT" ,"1000") ' Zuerst muss der Remote Befehl gesendet werden ! Call oUDIM.Write("System:Remote") End Sub '--------------------------------------------------------------------' Prozedur zur Deinitialisierung der Geräte '--------------------------------------------------------------------' SFD_DeInit ' Purpose : '--------------------------------------------------------------------' ErrorP | Variable zur Rueckgabe einer Fehlermeldung. Wird diese ' | Variable gesetzt, stopt DIAdem die Messung '--------------------------------------------------------------------Sub SFD_DeInit(ErrorP ) ' Gerät auf Bedienung durch Panel zuruecksetzen Call oUDIM.Write("System:Local") ' Schnittstelle schliessen oUDIM.Close() ' Onjekt loeschen Set oUDIM = Nothing End Sub '--------------------------------------------------------------------' Zwei kleine Helfer-Funktionen (Min- und Max-Bestimmung) '--------------------------------------------------------------------Function SFDU_Min(Value1,Value2) SFDU_Min = CDbl(Value2) if ( CDbl(Value1) < CDbl(Value2) ) Then SFDU_Min = CDbl(Value1) End Function Function SFDU_Max(Value1,Value2) SFDU_Max = CDbl(Value2) if ( CDbl(Value1) > CDbl(Value2) ) Then SFDU_Max = CDbl(Value1) End Function Auslesen eines GPS Empfängers (Motorola Binärformat) In diesem Beispiel soll ein GPS der auf einem Motorola ONCORE aufgebaut ist Empfänger ausgelsen werden. Das Gerät sendet die Daten im Motorola Binär-Format. Die Übertragungsparameter sind 9600 Baud, keine Parität, 8 Datenbits, 1 Startbit und 1 Stopbit. In diesem Beispiel soll die Möglichkeit der Funktion „Parse“ ausgenutzt werden, den Werten während des Auslesens Namen zuzuordnen. Anschließend kann auf die Daten mit deren Namen zugegriffen werden. © National Instruments (Ireland) Limited 6-35 Script-DAC-Treiber Script-DAC-Treiber Der Treiber soll so aufgebaut sein, dass zunächst alle Informationen aus dem GPS Empfänger ausgelesen werden. Der Anwender kann dann im Parmetrierungsdialog des Script DAC Treibers die Daten, die er messen möchte, über deren Namen auswählen können. Während der Initialisierung der Messung wird die Formatbeschreibung für die Funktion „Parse“ wie folgt „zusammengebaut“ : vPFormat = "%1L<month>%1L<day>%2L<year>" vPFormat = vPFormat + "%1L<hours>%1L<minutes>%1L<seconds>%4L<fract.Seconds>" vPFormat = vPFormat + "%4L<latitude>%4L<longitude>%4L<GPS_Height>%4L<MSL_Height>" vPFormat = vPFormat + "%2U<velocity>%2L<heading>" vPFormat = vPFormat + "%2L<CurrentDOP>%1L<DOPType>" vPFormat = vPFormat + "%1L<SatVisible>%1L<SatTracked>" vPFormat = vPFormat + "8(%1L<SatID>%1L<ChnTrackMode>%1L<SignalStrength>%1L<ChannelStateFlag> )" Die Details des Formates sollen an einigen Beispielen näher erläutert werden : In der ersten Zeile wird der erste Abschnitt des Formates mit "%1L<month>%1L<day>%2L<year>" definiert. Wenn dieses Format von der Prozedur „Parse“ interpretiert wird um die Daten auszuwerten, dann wird das erste Daten-Byte („1L“) als Integerwert interpretiert und intern einer Variablen mit dem Namen „month“ zugeordnet. Das nächste Daten-Byte (1L) wird ebenfalls als Intergerwert interpretiert und der Variablen „day“ zugeordnet. Die folgenden beiden Daten-Bytes („2L“) werden wieder als Intergerwert interpretiert und der Variablen „year“ zugeordnet. Der letzte Teil des Formates "8(%1L<SatID>.....%1L<ChannelStateFlag>)". beschreibt den Abschnitt der Daten, der für jeden der maximal 8 ausgewerteten Satelliten gleich ist. Sich wiederholende Formatabschnitte können einfach mit Wiederholungsfaktor(Format) beschrieben werden. In diesem Fall wird also der Formatabschnitt innerhalb der Klammer acht mal wiederholt. Die angegebenen Variablennamen in der Klammer werden automatisch durch Anhängen einer Zahl zu eindeutigen Namen erweitert. Damit wird die ID des ersten Sateliten (Variablenname im Format mit „SatID“ angegeben) in der Variablen „SatID1“ abgelegt, die ID des zweiten Sateliten in der Variablen „SatID2“ usw. Das folgende Listing zeigt das gesamte Script bis auf die Prozedur SFDU_COMInit, die über die Funktion „Neues Script“ automatisch generiert werden kann. DIAdem-DAC-Treiberbeschreibung 6-36 ni.com Script-DAC-Treiber Das Script mit der Lösung „GPS_ONCORE_BINARY.vbs", „GPS_ONCORE_BINARY.DAC“. zu dieser die Aufgabe heißt Schaltplandatei '----------------------------------------------------------------------------' Global parameters '----------------------------------------------------------------------------Dim oUDIM Dim sgFormatM,aGlobalScanM '----------------------------------------------------------------------------' SFD_Init ' Purpose : Function called when starting measurement '----------------------------------------------------------------------------' sgCOMName | Name der seriellen Schnittstelle an die der GPS' | Empfänger angeschlossen ist ' DeviceParam2V | Ohne Funktion ' ErrorP | Variable mit der Fehlermeldungen an DIAdem zurueck' | gegeben werden können '----------------------------------------------------------------------------Sub SFD_Init( sgCOMName,DeviceParam2V, ErrorP ) ' Anlegen des UDI-Objektes Set oUDIM=CreateObject("DIAdem.SFD.UDI" ) ' Oeffnen und Initialisieren der Schnittstelle Call SFDU_COMInit(oUDIM,sgCOMName+",9600,N,8,1") '------------------------------------------------' Initialisieren der Formatbeschreibung '------------------------------------------------' Datum sgFormatM = "%1L<month>%1L<day>%2L<year>" ' Zeit sgFormatM = sgFormatM + "%1L<hours>%1L<minutes>%1L<seconds>%4L<fract.Seconds>" ' Postion sgFormatM = sgFormatM + "%4L<latitude>%4L<longitude>%4L<GPS_Height>%4L<MSL_Height>" ' geschwindigkeit sgFormatM = sgFormatM + "%2U<velocity>%2L<heading>" ' Geometrie sgFormatM = sgFormatM + "%2L<CurrentDOP>%1L<DOPType>" ' Sateliten Status sgFormatM = sgFormatM + "%1L<SatVisible>%1L<SatTracked>" ' Sateliten Daten sgFormatM = sgFormatM + "8(%1L<SatID>%1L<ChnTrackMode>%1L<SignalStrength>%1L<ChannelStateFlag> )" End Sub '----------------------------------------------------------------------------' SFD_GetScan ' Zweck : Lesen eines Datenblockes vom GPS-Empfänger '----------------------------------------------------------------------------' ErrorP | Variable zur Rueckgabe einer Fehlermeldung. Wird diese ' | Variable gesetzt, stopt DIAdem die Messung © National Instruments (Ireland) Limited 6-37 Script-DAC-Treiber Script-DAC-Treiber '----------------------------------------------------------------------------Sub SFD_GetScan(ErrorP ) Dim vData Call GPS_DataBlockRead(oUDIM,vData) CAll GPS_ProcessData(oUDIM,vData) End Sub '----------------------------------------------------------------------------' SFD_ReadChannel ' Purpose : Lesen eines Wertes '----------------------------------------------------------------------------' ChannelNumberP | Die Kanalnummer aus dem Dialog ' sgValuename | Der Name des vom Anwender gewünschten Wertes ' DataP | Die Variable auf der der Wert an DIAdem zurückgegeben ' | wird ' ErrorP | Variable mit der Fehlermeldungen an DIAdem zurueck' | gegeben werden können '----------------------------------------------------------------------------Sub SFD_ReadChannel( ChannelNumberP, sgValuename, DataP, ErrorP ) DataP = 0 '------------------------------------------------' Wenn kein Name für den Wert vorgegeben wurde, ' wird 0 zurückgegeben '------------------------------------------------if ( IsEmpty(sgValuename) ) Then Exit Sub ' Den Wert über den Namen vom UDI Objekt anfordern DataP = oUDIM.NamedValueGet(sgValuename) End Sub '----------------------------------------------------------------------------' Funktion zur Auwertung der GPS Daten '----------------------------------------------------------------------------'----------------------------------------------------------------------------' GPS_DataBlockRead ' Zweck : Lesen der Daten aus dem GPS-Empfänger ' Der Befehl "Ea" wird verwendet um die Daten vom ' Empfänger anzufordern '----------------------------------------------------------------------------' vData | Buffer auf dem die gelesenen Daten zurueckgegeben werden '----------------------------------------------------------------------------Sub GPS_DataBlockRead(oUDI,vData) Dim vCommand ' Befehl senden um die Daten anzufordern vCommand = "Ea"+chr(0) vCommand = "@@"+vCommand + chr(GPS_CheckSum(vCommand))+vbCR+vbLF Call oUDI.ParamSet("Delimiter","") Call oUDI.Write(vCommand) '------------------------------------------------' Solange lesen bis "@@Ea" den Beginn der neu ' gesendeten Daten anzeigt '------------------------------------------------Call oUDI.ParamSet("Delimiter","@@Ea") Call oUDI.Read() Call oUDI.ParamSet("Delimiter","") ' Den gesamten Datenblock (72 Byte) lesen vData = oUDI.Read(72,0) DIAdem-DAC-Treiberbeschreibung 6-38 ni.com Script-DAC-Treiber End Sub '----------------------------------------------------------------------------' GPS_ProcessData ' Zweck : Auswerten der gelesenen Daten mit der Prozedur "Parse" ' und anschließende Durchführung aller notwendigen ' Skalierungen. ' Die Skalierungsparameter (Offset, Faktor) sind der ' Dokumentation zum Derät entnommen worden '----------------------------------------------------------------------------' vData | Data read from I/O '----------------------------------------------------------------------------Sub GPS_ProcessData(oUDI,vData) Call oUDI.Parse(vData,vPFormat) '------------------------------------------------' Skalierung, Offsetverschiebung und Rundung der ' Dezimalstellen werden in der Funktion ' GPS_ScaleValue durchgeführt '------------------------------------------------Call GPS_ScaleValue(oUDI,"Latitude", 0.,(90./324000000.),2) Call GPS_ScaleValue(oUDI,"Longitude", 0.,(180./648000000.),2) Call GPS_ScaleValue(oUDI,"GPS_Height",0.,0.01,2) Call GPS_ScaleValue(oUDI,"MSL_Height",0.,0.01,2) Call GPS_ScaleValue(oUDI,"velocity", 0.,0.01,2) Call GPS_ScaleValue(oUDI,"heading", 0.,0.1, 1) Call GPS_ScaleValue(oUDI,"CurrentDOP",0.,0.1, 1) End Sub '----------------------------------------------------------------------------' GPS_ScaleValue ' Zweck : Skalierung, Offsetverschiebung und Rundung der Dezimal' stellen der eingelesenen Daten. '----------------------------------------------------------------------------' Name | Name der variablen die skaliert werden soll ' Offset | Offsetwert ' Scale | Skalierungsfaktor ' Digits | Anzahl Nachkommastellen auf die gerundet werden soll '----------------------------------------------------------------------------Sub GPS_ScaleValue(oUDI,Name,Offset,Scale,Digits) vValue = oUDI.NamedValueGet(Name) vValue = (vValue + Offset)*Scale vValue = Round(vValue,Digits) Call oUDI.NamedValueSet(Name,vValue) End Sub '----------------------------------------------------------------------------' GPS_CheckSum ' Zweck : Errechnen der für das Motorola Binärformat definierten ' Checksumme '----------------------------------------------------------------------------' vData | Daten für die die Checksumme berechnet werden soll '----------------------------------------------------------------------------Function GPS_CheckSum(vData) CharAct = Asc(Mid(vData,1,1)) © National Instruments (Ireland) Limited 6-39 Script-DAC-Treiber Script-DAC-Treiber For L = 2 to Len(vData) CharAct = CharAct Xor Asc(Mid(vData,L,1)) Next GPS_CheckSum = CharAct Exit Function End Function Flüssigkeitsstandanzeige mit einem Sensor der Firma TEMIC Die Flüssigkeitsstandanzeiger der Firma TEMIC werden unter anderem eingesetzt, um auf Prüfständen in der Automobilindustrie den Flüssigkeitsstand in den Kraftstofftanks kontinuierlich zu erfassen. Das Gerät wird über die serielle Schnittstelle angesprochen. Da die Parameter der seriellen Schnittstelle für eine Kommunikation mit diesem Gerät immer auf 14400 Baud, keine Parität, 8 Datenbits und ein Stopbit eingestellt sein müssen, sind diese Parameter als Konstanten in das Script eingetragen worden. Lediglich die Nummer der seriellen Schnittstelle über die das Gerät angesprochen werden soll kann vom Anwender über den Parameter1 der Geräteparameter in den Eigenschaften des Blockes im Schaltplan eingestellt werden (Mehr dazu im Kapitel 1.2 (Die Bedienung des Script DAC Treibers“) Die Initialisierung des Gerätes erfolgt durch Senden eines „R“. Die Daten (aktuelle Messwerte) müssen vom Gerät durch Senden eines „ „(Blank) angefordert werden. Das Gerät antwortet mit 8 Zeilen in der folgenden Form : U=1<Tab>T=0.001<Tab>L=0.002<Tab>Q=0.003<Tab>P=0.004<C RLF> Es sollen nur die beiden ersten Zeilen ausgewertet werden. Die Prozedur SFDU_COMInit wurde über die Funktion „Neues Script“ automatisch generiert. Diese Funktion ist in dem folgenden Ausdruck des Scriptes bewußt nicht enthalten. '----------------------------------------------------------------------------' Global parameters '----------------------------------------------------------------------------' oUDIM | UDI-Object to communicate with device '----------------------------------------------------------------------------Dim oUDIM,dValues1M(4),dValues2M(4),dNoValueM Set oUDIM = CreateObject( "DIAdem.SFD.UDI" ) dNoValueM = 9.9E+34 '----------------------------------------------------------------------------' SFD_Init DIAdem-DAC-Treiberbeschreibung 6-40 ni.com Script-DAC-Treiber ' Purpose : Initialize UDI object ' Parameters for serial I/O set to 14400 Baud,No parity, ' 8 databits, 1 stopbit ' Name of parallel port coming from userdefinition in ' block parameters. Must be in the form "COM1", "COM2"... '----------------------------------------------------------------------------' sgComName | Name of serial port (COM1, COM2...) defined in ' | DIAdem block dialog ' sgDeviceparam2 | not used ' sgError | not used '----------------------------------------------------------------------------Sub SFD_Init( ByRef sgComName, ByRef sgDeviceparam2, ByRef sgError ) Dim iValueT ' Initialize serial I/O Call SFDU_COMInit(oUDIM,sgComName+",14400,N,8,1") ' Read all remaining "junk" from port Call oUDIM.Read(1000,0) ' Set timeout to 100 microseconds : Call oUDIM.ParamSet("Timeout",1000) '------------------------------------------------' Set delimiter to carriage-return + linefeed '------------------------------------------------Call oUDIM.ParamSet("Delimiter",(vbCR+vbLF)) '------------------------------------------------' Request for data in relative mode ' Write one byte without delimiter ! '------------------------------------------------Call oUDIM.Write("R",,0) '------------------------------------------------' Read answer .... '------------------------------------------------Dim sgEchoT sgEchoT = oUDIM.Read(1000,0) '------------------------------------------------' Set desired time out '------------------------------------------------Call oUDIM.ParamSet("Timeout",1000) ' Initialize data For iValueT = 0 To 3 dValues1M(iValueT) = 0. dValues2M(iValueT) = 0. ' For Testing : dValues1M(iValueT) = CDbl(iValueT) dValues2M(iValueT) = dValues1M(iValueT) + 4. Next End Sub '----------------------------------------------------------------------------' SFD_DeInit ' Purpose : "Shut down" communication. Called once at the end of ' a measurement task '----------------------------------------------------------------------------Sub SFD_DeInit(ErrorP ) oUDIM.Close() ' Free active-x object Set oUDIM = Nothing End Sub '----------------------------------------------------------------------------' SFD_GetScan © National Instruments (Ireland) Limited 6-41 Script-DAC-Treiber Script-DAC-Treiber ' Purpose : Read one scan of data ' Mouse data consist's of three bytes. First byte with ' button informations on bit's 4 and 5 (counting from 0) ' and dx in second byte dy in third byte '----------------------------------------------------------------------------' ErrorP | Errortext '----------------------------------------------------------------------------Sub SFD_GetScan(ErrorP ) Dim sgLine1T,sgLine2T,sgNichtWeitergebenT Dim lCountT ' Request for data : Call oUDIM.Write(" ",,0) ' Read up to delimiter : sgLine1T = oUDIM.Read(1000,1) sgLine2T = oUDIM.Read(1000,1) '------------------------------------------------' Device sends 8 lines (one for each sensor) ' reading lines 3-8 '------------------------------------------------For lCountT = 3 To 8 sgNichtWeitergebenT = oUDIM.Read(1000,1) Next '------------------------------------------------' Convert strings to data '------------------------------------------------Call TEMIC_Values(sgLine1T, dValues1M, dNoValueM) Call TEMIC_Values(sgLine2T, dValues2M, dNoValueM) End Sub '----------------------------------------------------------------------------' TEMIC_Values ' Purpose : Parse values from string '----------------------------------------------------------------------------' sgTEMICData | String read from TEMIC device ' daValues | Array to put values in (size is 4) ' sgError | not used '----------------------------------------------------------------------------Sub TEMIC_Values(sgTEMICData, daValues, dNoValue) On Error resume Next Dim sgDataT,aArrayT,lSizeT,iTokenT,lPosT,sgTokenT ' sgDataT = Trim(sgTEMICData) if ( 0 >= Len(sgDataT) ) Then Exit Sub ' Split string into token : aArrayT = Split(sgDataT,vbTab, -1, 1) lSizeT = UBound(aArrayT) if ( 4 < lSizeT ) Then lSizeT =4 '------------------------------------------------' Initialize result '------------------------------------------------For iTokenT = 0 To 4 daValues(iTokenT) = dNoValue Next '------------------------------------------------' Loop through all tokens '------------------------------------------------For iTokenT = 0 To lSizeT '------------------------------------------------' Trim token and remove "??=" '------------------------------------------------sgTokenT = Trim(aArrayT(iTokenT)) DIAdem-DAC-Treiberbeschreibung 6-42 ni.com Script-DAC-Treiber lPosT = InStr(1,sgTokenT,"=") if ( 0 < lPosT ) Then sgTokenT = Right(sgTokenT,Len(sgTokenT)lPosT) '------------------------------------------------' Convert from string to double '------------------------------------------------daValues(iTokenT) = CDbl(sgTokenT) Next End Sub '----------------------------------------------------------------------------' SFD_ReadChannel ' Purpose : Called from DIAdem to get one scan of data. The name ' of the channel is give in sgChannelParam. The ' parameter name is case sensitiv '----------------------------------------------------------------------------Sub SFD_ReadChannel(ByRef lChannelNumber,sgChannelParam,ByRef dValue,ErrorP ) Select Case sgChannelParam Case "Temperature1" dValue = dValues1M(1) Case "Level1" dValue = dValues1M(2) Case "Quality1" dValue = dValues1M(3) Case "P1" dValue = dValues1M(4) Case "Temperature2" dValue = dValues2M(1) Case "Level2" dValue = dValues2M(2) Case "Quality2" dValue = dValues2M(3) Case "P2" dValue = dValues2M(4) Case Else dValue = dNoValueM End Select End Sub CO2 Messgerät NGA 2000 der Firma FISHER-ROSEMOUNT Mit dem Messgerät NGA 200 der Firma Fisher-Rosemount werden CO2 Konzentrationen erfasst. Das Gerät wird über die serielle Schnittstelle angesprochen. Die Kommunikation mit dem Gerät erfolgt über das genormte AK-Protokoll. Das Script zu diesem Beispiel findet sich in der Datei NGA2000_MLT.VBS. Die Prozeduren AK_Query, AK_Values, AK_ReplyRead, AK_HeaderStrip und SFDU_COMInit wurden über die Funktion „Neues Script“ automatisch generiert. Diese Funktionen sind in dem folgenden Ausdruck des Scriptes bewußt nicht enthalten : '----------------------------------------------------------------------------' Global parameters '----------------------------------------------------------------------------' vValueBuffer | Buffer for measured values ' | (0) = "Aktueller Füllstand" ' | (1) = "Füllrate" ' | (2) = "Verbrauch" ' vValueValid | Flags indicating whether the values in vValueBuffer ' | are valid '----------------------------------------------------------------------------- © National Instruments (Ireland) Limited 6-43 Script-DAC-Treiber Script-DAC-Treiber Dim daPressureM(),daTemperature(),daConcentration(),daFlowThrough(),dNoValueM Dim oUDI,STX,ETX,DontCare,oDBGList Dim ErrorState,ReplyData,dNoValue STX = Chr(2) ETX = Chr(3) DontCare = Chr(32) dNoValueM = 9.9E+34 '----------------------------------------------------------------------------' SFD_ReadChannel ' Purpose : Read one value (one channel) '----------------------------------------------------------------------------' ErrorP | Errortext ' ChannelNumberP | channelnumber (set from DIAdem, not used in this driver) ' ParamP | Parameter which is defined from the user for each channel ' | Used to access the measured values by name ' | valid values are "Temp(1)"-"Temp(4)","CO2(1)""Co2(4)" '----------------------------------------------------------------------------Sub SFD_ReadChannel( ChannelNumberP, ParamP, DataP, ErrorP ) ' This function must be implemented for data acquisition! DataP = dNoValueM Select Case ParamP Case "Temp(1)" DataP = daTemperature(0)-273. Case "Temp(2)" DataP = daTemperature(1)-273. Case "Temp(3)" DataP = daTemperature(2)-273. Case "Temp(4)" DataP = daTemperature(3)-273. Case "CO2(1)" DataP = daConcentration(0)/10000. Case "CO2(2)" DataP = daConcentration(1)/10000. Case "CO2(3)" DataP = daConcentration(2)/10000. Case "CO2(4)" DataP = daConcentration(3)/10000. Case "Flow(1)" DataP = daFlowThrough(0) Case "Flow(2)" DataP = daFlowThrough(1) Case "Flow(3)" DataP = daFlowThrough(2) Case "Flow(4)" DataP = daFlowThrough(3) Case "Press(1)" DataP = daPressureM(0)/1.E6 Case "Press(2)" DataP = daPressureM(1)/1.E6 Case "Press(3)" DataP = daPressureM(2)/1.E6 Case "Press(4)" DataP = daPressureM(3)/1.E6 End Select End Sub '----------------------------------------------------------------------------- DIAdem-DAC-Treiberbeschreibung 6-44 ni.com Script-DAC-Treiber ' SFD_GetScan ' Purpose : Read one scan of data '----------------------------------------------------------------------------' ErrorP | Errortext '----------------------------------------------------------------------------Sub SFD_GetScan(ErrorP ) Dim lErrorStateT,sgReplyDataT,sgMessageT ' Request for "Druck" : CALL AK_Query(oUDI,"ADRU",0,"",true,lErrorStateT,sgReplyDataT) Call AK_Values(sgReplyDataT, daPressureM,dNoValueM) ' Request for "Temperatur" : CALL AK_Query(oUDI,"ATEM",0,"",true,lErrorStateT,sgReplyDataT) Call AK_Values(sgReplyDataT, daTemperature, dNoValueM) ' Request for "Konzentration" : CALL AK_Query(oUDI,"AKON",0,"",true,lErrorStateT,sgReplyDataT) Call AK_Values(sgReplyDataT, daConcentration, dNoValueM) ' Request for "Durchfluss" : CALL AK_Query(oUDI,"ADUF",0,"",true,lErrorStateT,sgReplyDataT) Call AK_Values(sgReplyDataT, daFlowThrough, dNoValueM) End Sub '----------------------------------------------------------------------------' SFD_Init ' Purpose : Functions to Initialize the device interface '----------------------------------------------------------------------------' DeviceParam1V | First description string from script block (entered by user) ' DeviceParam2V | Second description string from script block (entered by user) ' ErrorP | Errortext '----------------------------------------------------------------------------Sub SFD_Init( DeviceParam1V, DeviceParam2V, ErrorP ) Dim ErrorStateT,ReplyDataT ' Initialize global UDI object : Set oUDI = CreateObject( "DIAdem.SFD.UDI" ) Call SFDU_COMInit(oUDI,DeviceParam1V) Call oUDI.ParamSet("Timeout",1000) ' Set delimiter to ETX Call oUDI.ParamSet("Delimiter",ETX) ' Initialize device CALL AK_Query(oUDI,"SRES",0,"",true,ErrorState,ReplyData) ' Check for error : if ( 0 <> ErrorState ) Then ErrorP = "Error while initializing device NGA 2000 !" End Sub '----------------------------------------------------------------------------' SFD_DeInit ' Purpose : Close device '----------------------------------------------------------------------------' ErrorP | Errortext '----------------------------------------------------------------------------Sub SFD_DeInit(ErrorP ) ' Close device Call oUDI.Close() End Sub © National Instruments (Ireland) Limited 6-45 Script-DAC-Treiber Script-DAC-Treiber Kraftstoffwaage 733 S der Firma AVL Mit der Kraftstoffwaage 733S der Firma AVL kann der Kraftstoffverbrauch eines Verbrennungsmotores bestimmt werden. Die Waage arbeitet nach dem gravimetrischen Messprinzip. Der Motor wird aus einem Messgefäß, dessen Gewicht kontinuierlich bestimmt wird, mit Kraftstoffversorgt. Die Waage ist and die serielle Schnittstelle angeschlossen. Die Kommunikation mit dem Gerät erfolgt über das genormte AKProtokoll. Das Script zu diesem Beispiel findet sich in der Datei AVL_733S.VBS, der Schaltplan in der Datei AVL_733S.DAC. In diesem einfachen Beispiel wird die Waage mit den Befehlen „STBY“ (Abbruch aller laufenden Prozeduren) und „SINT“ (Start bzw. Restart Messung) initialisiert. Während der Messung wird mit dem Befehle „AWRT“ der aktuelle Füllstand und der Momentanwert ausgelesen. In einer realen Prüfstandumgebung wird die Waage zusätzlich kalibriert, gespült und ggf. werden einzelne Kanäle weiter parametriert. Die zugehörigen Befehlssequenzen sind hier nicht enthalten, können aber in der Prozedur FSD_Init leicht ergänzt werden. Die Prozeduren AK_Query, AK_Values, AK_ReplyRead, AK_HeaderStrip und SFDU_COMInit wurden über die Funktion „Neues Script“ automatisch generiert. Diese Funktionen sind in dem folgenden Ausdruck des Scriptes bewußt nicht enthalten : '----------------------------------------------------------------------------' Global parameters '----------------------------------------------------------------------------Dim oUDIM Dim STX,ETX,DontCare Dim dNoValueM Dim daActValuesM() STX = Chr(2) ETX = Chr(3) DontCare = Chr(32) dNoValueM = 9.9E+34 '----------------------------------------------------------------------------' Funktionen zum Einlesen von Daten '----------------------------------------------------------------------------'----------------------------------------------------------------------------' SFD_GetScan ' Zweck : Lesen der aktuellen Werte. Mit dem AK-Befehl AWRT ' werden die aktuellen Werte fuer den Füllstand und den ' Momentanwert gelesen DIAdem-DAC-Treiberbeschreibung 6-46 ni.com Script-DAC-Treiber '----------------------------------------------------------------------------' ErrorP | Variable zur Rueckgabe einer Fehlermeldung. Wird diese ' | Variable gesetzt, stopt DIAdem die Messung '----------------------------------------------------------------------------Sub SFD_GetScan(ErrorP ) Dim lErrorStateT,sgReplyDataT ' Werte anfordern CALL AK_Query(oUDIM,"AWRT",0,"",true,lErrorStateT,sgReplyDataT) ' Auswerten ... Call AK_Values(sgReplyDataT, daActValuesM, dNoValueM) End Sub '----------------------------------------------------------------------------' SFD_ReadChannel ' Zweck : Lesen eines Wertes fuer den Kanal Nummer "ChannelNumberP" '----------------------------------------------------------------------------' ChannelNumberP | Kanalnummer aus dem Block-Dialog (Nicht verwendet) ' sgValueName | Name des Wertes ' DataP | Variable zur Rueckgabe des neuen Kanalwertes. ' ErrorP | Variable zur Rueckgabe einer Fehlermeldung. '----------------------------------------------------------------------------Sub SFD_ReadChannel( ChannelNumberP, sgValueName, DataP, ErrorP ) Select Case LCase(sgValueName) Case "füllstand" DataP = CDbl(daActValuesM(0)) Case "momentanwert" DataP = CDbl(daActValuesM(1)) Case Else '------------------------------------------------' Falls ein nicht unterstuetzer Wertename ange' geben wird, wird hier ein "NoValue" zurueckge' geben '------------------------------------------------DataP = dNoValueM End Select End Sub '----------------------------------------------------------------------------' SFD_Init ' Zweck : Initialisierung des Geraetes '----------------------------------------------------------------------------' sgCOMName | Name der seriellen Schnittstelle an die das Geraet ' | angeschlossen ist ' DeviceParam2V | Nicht verwendet ' ErrorP | Variable zur Rueckgabe einer Fehlermeldung. '----------------------------------------------------------------------------Sub SFD_Init( sgCOMName, DeviceParam2V, ErrorP ) Dim lErrorStateT,sgReplyDataT ' Anlegen des UDI-Objektes Set oUDIM=CreateObject("DIAdem.SFD.UDI" ) '------------------------------------------------' Oeffnen und Initialisieren der seriellen ' Schnittstelle '------------------------------------------------Call SFDU_COMInit(oUDIM,sgCOMName+",9600,N,8,1") © National Instruments (Ireland) Limited 6-47 Script-DAC-Treiber Script-DAC-Treiber '------------------------------------------------' Geraet initialisieren '------------------------------------------------CALL AK_Query(oUDIM,"STBY",0,"",true,lErrorStateT,sgReplyDataT) CALL AK_Query(oUDIM,"SINT",0,"",true,lErrorStateT,sgReplyDataT) End Sub '----------------------------------------------------------------------------' SFD_DeInit ' Zweck : Deinitialisierung vornehmen, UDI Objekt loeschen etc. '----------------------------------------------------------------------------' ErrorP | Variable zur Rueckgabe einer Fehlermeldung. '----------------------------------------------------------------------------Sub SFD_DeInit(ErrorP ) ' Kommunikationskanal schliessen oUDIM.Close() ' UDI Objekt loeschen Set oUDIM = Nothing End Sub DIAdem-DAC-Treiberbeschreibung 6-48 ni.com DIAdem Data Organization 7 Der Gerätesimulator 7.1 Allgemeines Bei dem Gerätesimulator handelt es sich um eine Applikation zur Simulation eines Messgeräts, dass über eine serielle Schnittstelle mit einem angeschlossenen Rechner kommuniziert. Hierbei kommt es nicht auf die eigentlichen Funktionen des Geräts an, sondern vielmehr darauf, eine Applikation zur Verfügung zu stellen, an dem die Einarbeitung in den DIAdem Script DAC Treibererfolgen kann. Der Gerätesimulator simuliert ein Gerät mit 10 Kanälen, bei dem jeder Kanal individuell parametriert werden kann. Der Simulator „versteht“ einen Satz von Befehlen mit dem er parametriert werden kann und Daten abgerufen werden können. Zusätzlich zum expliziten Abrufen der Daten kann der Simulator so eingestellt werden, dass permanent Daten gesendet werden. Dieser Modus des Simulators wird im Folgenden als „freilaufender Modus“ bezeichnet. Um Fehlbedienungen des Gerätesimulators möglichst zu vermeiden und die Systemvoraussetzungen gering zu halten, erfolgt die Kommunikation mit dem Gerätesimulator über die seriellen Schnittstellen COM1 oder COM2 mit einer festen Parametrierung PC Gerätesimu COM 1 NullModem Kabel DIAdem Schnittstellen Script-DAC-Treiber 7-1 COM 2 ni.com Script-DAC-Treiber der Schnittstellen. Das folgende Schaubild zeigt den Schnittstellentreiber, DIAdem und die Kommunikation zwischen den beiden Applikationen über zwei serielle Schnittstellen : 7.2 Systemvoraussetzungen Betriebssystem: Windows 95,98,NT Hardware: Zwei freie serielle Schnittstellen COM1 oder COM2,Nullmodemkabel zur Verbindung der seriellen Schnittstellen. 7.3 Inbetriebnahme des Gerätesimulators Der Gerätesimulator versucht beim Start zunächst die serielle Schnittstelle COM1 zu öffnen. Gelingt dies nicht, so versucht das Programm (nach Ausgabe einer entsprechenden Meldung) die serielle Schnittstelle COM2 zu öffnen. Gelingt dies, so wird ein Hinweis ausgegeben, dass der Gerätesimulator die serielle Schnittstelle COM2 zur Kommunikation verwendet. Gelingt auch dies nicht, so wird eine Fehlermeldung ausgegeben und das Programm wird beendet. Zum Betrieb des Gerätesimulators verbindet man die serielle Schnittstelle die der Simulator zur Kommunikation gewählt hat mit der Schnittstelle die der Script DAC Treiberin DIAdem zum Lesen von Daten des Simulators verwenden soll. In den meisten Fällen bedeutet dies, die Verbindung der ersten und zweiten seriellen Schnittstelle. Die Verbindung muss mit einem sogenannten „NullModem“ Kabel erfolgen. Die Einstellung der seriellen Schnittstelle des Gerätesimulators lautet: 9600 Baud keine Parität 8 Datenbits 1 Stopbit Der Simulator nimmt diese Einstellungen an der Schnittstelle die er zur Kommunikation gewählt hat automatisch vor. Die Schnittstelle, DIAdem-DAC-Treiberbeschreibung 7-2 ni.com Script-DAC-Treiber die von DIAdem aus angesprochen wird, muss durch den Script DAC Treiberkonfiguriert werden. 7.4 Bedienung Nach dem Start des Gerätesimulators wird der folgende Dialog angezeigt : Alle Einstellungen die manuell vorgenommen werden können, erfolgen aus diesem Dialog. Im oberen Bereich des Dialoges („Kanäle“) befindet sich eine Liste aller verfügbaren Kanäle und der zugehörigen Parameter. In der ersten Spalte wird die Nummer des betreffenden Kanals angezeigt. Dabei handelt es sich um die Nummer, über die die einzelnen Kanäle aus DIAdem heraus angesprochen werden können. Über die Kontrollkästchen in der zweiten Spalte („Aktiv“) können die Kanäle einzeln aktiviert werden. Nur die aktivierten Kanäle werden später bei einer Messung berücksichtigt. Analog zur Anpassung eines Messaufnehmers an ein reales Messgerät kann in der nächsten Spalte die Signalform des simulierten Messsignals © National Instruments (Ireland) Limited 7-3 Script-DAC-Treiber Script-DAC-Treiber ausgewählt werden. Es stehen die Signalformen „Sinus“, „Rechteck“ und „Dreieck“ zur Verfügung. Die Signalamplitude in der vierten Spalte („Amplitude“) der Signalliste entspricht dem Messbereichs des Eingangs an einem realen Gerät. Durch die Eingabefelder in der fünften und sechsten Spalte können jedem Signal eine Einheit und die Frequenz des simulierten Signals zugeordnet werden. Im nächsten Abschnitt des Dialogs („Globale Parameter“) können die Abtastrate und das Ausgabeformat eingestellt werden. Die eingestellte Abtastrate wird nur dann vom Programm ausgewertet, wenn der Gerätesimulator im freilaufenden Modus Daten ausgeben soll. Über den Parameter „Ausgabeformat“ wird eingestellt, in welchem Format die Daten über die serielle Schnittstelle ausgegeben werden sollen. Die möglichen Ausgabeformate werden in einem eigenen Abschnitt beschrieben. Im unteren Abschnitt („Status“) werden noch einige Statusinformationen zum Gerät angezeigt : Das Kontrollkästchen „Remote Control“ zeigt an, dass sich der Gerätesimulator im Fernsteuerzustand befindet. Dieses Kontrollkästchen wird aktiviert, sobald dem Simulator ein Zeichen gesendet wird. Am Ende der Kommunikation mit dem Gerätesimulator kann dieses Kontrollkästchen entweder per Befehl über die serielle Schnittstelle oder manuell wieder ausgeschaltet werden. Das Kontrollkästchen „Running“ zeigt an, ob sich der Gerätesimulator im freilaufenden Modus befindet. In diesem Modus sendet der Simulator selbständig Daten mit der eingestellten Abtastrate. In der Zeile „Letzter Befehl“ wird jeweils der letzte Befehl angezeigt, der von der seriellen Schnittstelle empfangen wurde. Alle Parameter des Gerätesimulators können sowohl manuell als auch durch einen Befehl, der über die serielle Schnittstelle gesendet wird, verändert werden. Ist der Simulator im „Fernsteuerzustand“ ist die Eingabe einiger Parameter gesperrt. So ist es z. B. nicht möglich, das Ausgabeformat zu ändern, wenn sich der Gerätesimulator im Fernsteuerzustand befindet. DIAdem-DAC-Treiberbeschreibung 7-4 ni.com Script-DAC-Treiber 7.5 Funktionstest des Simulators Nachdem der Simulator in Betrieb genommen wurde, kann man sehr einfach testen ob die Verbindung zwischen Rechner und Gerätesimulator funktioniert. Sendet man einige Zeichen an den Simulator, so muss der Gerätesimulator in den Fernsteuerzustand übergehen (Das Kontrollkästchen "Remote Control" ist dann angekreuzt ). Nachdem man den Gerätesimulator anschließend durch Anklicken des Kontrollkästchens "Remote Control" wieder in den lokalen Bedienzustand gebracht hat, kann man durch Anklicken des Kontrollkästchens "Run" die Datenausgabe des Gerätesimulators starten. Jetzt sollte man mit DIAdem Daten empfangen können. Durch erneutes Anklicken des Kontrollkästchens "Run" wird die Datenausgabe wieder beendet. 7.6 Ausgabeformate Um die Datenausgabe möglichst genau an die Ausgabeformate existierender Geräte anpassen zu können, bietet der Gerätesimulator eine Reihe unterschiedlicher Formate. Neben der Datenausgabe in unterschiedlichen ASCII-Formaten stehen diverse binäre Ausgabeformate zur Verfügung, die hier im einzelnen beschrieben werden. ASCII Bei der Datenübertragung im Ausgabeformat „ASCII“ werden die Messdaten der einzelnen Kanäle im Klartext übertragen. Alle Messdaten, die zu einem Messzyklus (Scan) gehören werden innerhalb einer Zeile übertragen. Die einzelnen Werte werden hierbei durch Semikolons (;) voneinander getrennt und die Zeile wird durch <CR><LF> abgeschlossen. Bei diesem Ausgabeformat werden die Messdaten skaliert ausgegeben. Syntax <Messwert>[;<Messwert>]<CR><LF> Beispiel für 3 Kanäle: 1.2345;3.1415;2.1478<CR><LF> © National Instruments (Ireland) Limited 7-5 Script-DAC-Treiber Script-DAC-Treiber ASCII mit Status Dieses Ausgabeformat entspricht im wesentlichen dem Ausgabeformat ASCII. Es wird jedoch vor jedem Messwert die Nummer des zugehörigen Kanals als weiteres Datum übertragen. Syntax <Kanalnummer>;<Messwert>[;<Kanalnummer>;<Messwert>]<CR> <LF> Beispiel für die Kanäle 2, 4 und 7: 2;2.3456;4;5.2837;7;10.0000<CR><LF> Binär, 1 Byte Bei diesem Ausgabeformat werden die Messdaten als ein Byte pro Messwert übertragen. Hierbei wird der Messbereich (Amplitude) des Signals auf den Bereich -128 bis 127 abgebildet. Um aus den übertragenen Messdaten den jeweiligen Messwert zu ermitteln, müssen die Messdaten noch mit dem Messbereich (Amplitude) verrechnet werden. Die einzelnen Messwerte werden ohne Trennzeichen übertragen! Syntax <Messwert>[<Messwert>] Beispiel für 3 Messwerte (als Hex Dump): 31 22 55 Dies entspricht folgenden Messwerten 49, 34, 85 (unskaliert) Binär, 1 Byte mit Status Dieses Format entspricht vom Aufbau her dem Ausgabeformat binär 1 Byte. Vor jedem Messwert wird jedoch ein weiteres Byte gesendet, das die Kanalnummer des betreffenden Messwerts enthält. Syntax <Kanalnummer><Messwert>[<Kanalnummer><Messwert>] Beispiel für die Abfrage der Kanäle 2, 4 und 7 (als Hex Dump): 02 31 04 22 07 55 Dies entspricht folgenden Messdaten : 49 (Kanal 2) , 34 (Kanal 4) , 85 (Kanal 7) DIAdem-DAC-Treiberbeschreibung 7-6 ni.com Script-DAC-Treiber Binär, 2 Byte MSB-LSB Bei diesem Ausgabeformat werden zwei Byte pro Messwert übertragen. Hierbei wird der Messbereich (Amplitude) des Signals auf den Bereich -32768 bis 32767 abgebildet. Jeder Messwert wird hier durch zwei Byte repräsentiert, die in der Reihenfolge HighByte, Low-Byte übertragen werden. Um aus den übertragenen Messdaten den jeweiligen Messwert zu ermitteln, müssen die Messdaten mit dem Messbereich (Amplitude) verrechnet werden. Syntax <Messwert>[<Messwert>] Beispiel für 3 Messwerte (als Hex Dump): FCB3 19B2 1267 Dies entspricht folgenden Messwerten : -845, 6578, 4711 Binär, 2 Byte MSB-LSB mit Status Dieses Format entspricht vom Aufbau her dem Format „Binär, 2 Byte MSB-LSB“. Vor jedem Messwert wird jedoch ein weiteres Byte gesendet, das die Kanalnummer des zugehörigen Messkanals enthält. Syntax <Kanalnummer><Messwert>[<Kanalnummer><Messwert>] Beispiel für die Abfrage der Kanäle 2, 4 und 7 (als Hex Dump): 02 FCB3 04 19B2 07 1267 Dies entspricht folgenden Messwerten: -845 (Kanal 2), 6578 (Kanal 4), 4711 (Kanal 7) Binär, 2 Byte LSB-MSB Dieses Format entspricht vom Aufbau her dem Format „Binär 2 Byte MSB-LSB“. Lediglich die Reihenfolge, in der die Messdaten übertragen werden, ist vertauscht. Hier werden die Daten in der Reihenfolge Low-Byte, High-Byte übertragen. Syntax <Messwert>[<Messwert>] Beispiel für 3 Messwerte (als Hex Dump): B3FC B219 6712 Dies entspricht folgenden Messwerten : -845, 6578, 4711 © National Instruments (Ireland) Limited 7-7 Script-DAC-Treiber Script-DAC-Treiber Binär, 2 Byte LSB-MSB mit Status Dieses Format entspricht vom Aufbau dem Format binär 2 Byte MSB-LSB mit Status. Vor jedem Messwert wird jedoch ein weiteres Byte gesendet, das die Kanalnummer des zugehörigen Messkanals enthält. Syntax <Kanalnummer><Messwert>[<Kanalnummer><Messwert>] Beispiel für die Kanäle 2, 4 und 7 (als Hex Dump): 02 B3FC 04 B219 07 6712 Dies entspricht folgenden Messwerten: -845 (Kanal2), 6578 (Kanal 4), 4711 (Kanal7) Binär, 8 Byte MSB-LSB Beim Ausgabeformat „Binär 8 Byte MSB-LSB“ werden die Messwerte als 8 Byte lange Datenblöcke im Datenformat „double“ übertragen. Die Byte-Reihenfolge der Übertragung ist High-Byte LowByte. Syntax <Messwert>[<Messwert>] Binär, 8 Byte MSB-LSB mit Status Mit diesem Format wird vor jedem Messwert noch ein zusätzliches Byte übertragen, in dem die Kanalnummer enthalten ist. Der übrige Aufbau entspricht dem Ausgabeformat „Binär 8 Byte MSB-LSB“. Syntax <Kanalnummer><Messwert>[<Kanalnummer><Messwert>] Binär, 8 Byte LSB-MSB Dieses Format entspricht dem Ausgabeformat binär 8 Byte MSBLSB wobei hier jedoch die Übertragungsreihenfolge Low-Byte, High-Byte ist. Syntax DIAdem-DAC-Treiberbeschreibung <Messwert>[<Messwert>] 7-8 ni.com Script-DAC-Treiber Binär, 8 Byte LSB-MSB mit Status Dieses Format entspricht dem Ausgabeformat „Binär 8 Byte mit Status MSB-LSB“ wobei hier jedoch die Übertragungsreihenfolge Low-Byte, High-Byte ist. Syntax <Kanalnummer><Messwert>[<Kanalnummer><Messwert>] 7.7 Befehlssatz Der Befehlssatz des Gerätesimulators besteht aus drei Zeichen langen Buchstabenkombinationen, die ggf. durch Parameter ergänzt werden. Alle Befehle werden grundsätzlich in Großbuchstaben angegeben. Den Abschluß eines Befehls bildet immer das Zeichen <LF> (Line Feed). Die Zeichenkombination <CR><LF> ist ebenfalls zulässig. Alle Befehle liefern grundsätzlich einen Status oder die angeforderten Daten zurück. Der Status ist entweder das Zeichen „0“ (Character-Code 48) oder das Zeichen „?“ (Fragezeichen). Das Zeichen „0“ steht für einen erfolgreichen Abschluß des Befehls während das Zeichen „?“ im Falle eines Fehlers zurückgeliefert wird. Zur besseren Lesbarkeit eines Befehls können beliebig viele Leerzeichen oder TAB‘s in den Befehl eingestreut werden. Diese Zeichen dienen lediglich zur Erhöhung der Lesbarkeit und werden vom Gerätesimulator nicht beachtet. Es folgt eine Liste der Befehle die vom Gerätesimulator verstanden werden. Der Befehl ACH Bedeutung Aktivieren eines Messkanals. Syntax ACH <Kanalnummer>,<Status><LF> Parameter: Kanalnummer Status © National Instruments (Ireland) Limited Nummer des Messkanals (0 - 9) Aktivierungsstatus (0=nicht aktiv, 1=aktiv) 7-9 Script-DAC-Treiber Script-DAC-Treiber Rückgabe „0“=Ok „?“=Fehler Beispiel: ACH 1, 1<LF> (Schaltet den Kanal 1 aktiv) ACH 2, 0<LF> (Schaltet den Kanal 2 inaktiv) Der Befehl ACH? Bedeutung Syntax Abfrage des Kanalstatus ACH?<Kanalnummer><LF> Parameter: Kanalnummer Rückgabe Nummer des Kanals, dessen Aktivierungsstatus ermittelt werden soll (0 - 9) „0“=Kanal ist nicht aktiv „1“ =Kanal ist aktiv „ ?“= Fehler Beispiel: ACH?1<LF> // Abfrage des Aktivierungssatus von Kanal 1 Der Befehl AMP Bedeutung Einstellen der Amplitude (Messbereichs) eines Kanals. Syntax AMP<Kanalnummer><Amplitude><LF> Parameter: Kanalnummer Nummer des Kanals, dessen Amplitude eingestellt werden soll (0 - 9). Amplitude Einzustellende Amplitude (0.1 - 10.0 ) Rückgabe „0“ = Befehl erfolgreich ausgeführt„?“=Fehler Beispiel: AMP 3, 7.5<LF> // Einstellen der Amplitude des Kanals 3 auf 7.5 DIAdem-DAC-Treiberbeschreibung 7-10 ni.com Script-DAC-Treiber Der Befehl AMP? Bedeutung Syntax Abfrage der Amplitude (Messbereichs) eines Kanals(0 - 9). AMP?<KanalNummer><LF> Parameter: Kanalnummer Rückgabe Nummer des Kanals, dessen Amplitude abgefragt werden soll (0 - 9). Amplitudenwert „?“=Fehler Beispiel: AMP? 5<LF> // Abfrage der Amplitude von Kanal5 Der Befehl COF Bedeutung Einstellung des Ausgabeformats. Dieser Befehl legt dasusgabeformat fest, in dem die Messdaten über die serielle Schnittstelle übertragen werden. Syntax COF<Ausgabeformat><LF> Parameter Ausgabeformat: Format in dem die Messdaten ausgegeben werden sollen. Folgende Angaben sind zulässig : „0“ : ASCII „1“ : ASCII mit Status „2“ : binär 1 Byte „3“ : binär 1 Byte mit Status „4“ : binär 2 Byte MSB-LSB „5“ : binär 2 Byte MSB-LSB mit Status „6“ : binär 2 Byte LSB-MSB „7“ : binär 2 Byte LSB-MSB mit Status „8“ : binär 8 Byte MSB-LSB „9“ : binär 8 Byte MSB-LSB mit Status „10“ : binär 8 Byte LSB-MSB „11“ : binär 8 Byte LSB-MSB mit Status Rückgabe „0“ = Befehl erfolgreich ausgeführt, „?“=Fehler Beispiel: (Einstellen des Ausgabeformats auf "binär 1 Byte mit Status") COF 3<LF> Der Befehl COF? Bedeutung Abfrage des aktuellen Ausgabeformats Mit dem Befehl COF? kann das aktuell eingestellte Ausgabeformat abgefragt werden. Die Liste der zur Ver fügung stehenden Ausgabefor- © National Instruments (Ireland) Limited 7-11 Script-DAC-Treiber Script-DAC-Treiber mate und deren Codierung können der Beschreibung zum Befehl "COF" entnommen werden. Syntax COF?<LF> Parameter Keine Rückgabe Als Rückgabewert liefert diese Funktion den Code des aktuell eingestellten Ausgabeformats. Im Falle eines Fehlers wird ein „?“ zurückgegeben. Der Befehl DCL Bedeutung Syntax Beenden des Fernsteuerzustands DCL<LF> Parameter keine Rückgabe keine Der Befehl ENU Bedeutung Syntax Einstellung der Messgröße. ENU<Kanalnummer>,<Unit><LF> Parameter: Kanalnummer Nummer des einzustellenden Kanals (0 - 9). Unit Zeichenkette, die die Bezeichnung der Messgröße enthält. Rückgabe „0“ = Befehl erfolgreich ausgeführt „?“=Fehler Beispiel: (Die Einheit des Kanals 7 wird auf "Volt" eingestellt.) ENU 7,Volt<LF> Der Befehl ENU? Bedeutung Abfrage der Einheit eines Kanals Syntax ENU?<Kanalnummer><LF> Parameter: Kanalnummer Nummer des einzustellenden Kanals (0 - 9). DIAdem-DAC-Treiberbeschreibung 7-12 ni.com Script-DAC-Treiber Rückgabe Zeichenkette, die die aktuelle Einheit des Kanals enthält. Beispiel: (Abfrage der Einheit von Kanal 5) ENU? 5<LF> Der Befehl EST? Bedeutung Abfrage des Fehlerstatus Syntax EST?<LF> Parameter keine Rückgabe „0“ = Befehl erfolgreich ausgeführt „1“ = Syntax Fehler „2“ = ungültiger Kanal „3“ = zu wenige Parameter „4“ = fehlerhafter Parameter Beispiel: (Abfrage des Fehlerstatus) EST?<LF> Der Befehl FRE Bedeutung Einstellung der Signalfrequenz Syntax: FRE<Kanalnummer>,<Frequenz><LF> Parameter: Kanalnummer Nummer des Kanals, dessen Frequenz eingestellt werden soll (0 - 9) Frequenz Einzustellende Signalfrequenz ( 0.1 - 10.0) Rückgabe „0“ = Befehl erfolgreich ausgeführt, „?“=Fehler Beispiel: FRE 1, 7.4<LF> // Einstellung der Signalfrequenz von Kanal 1 auf 7.4 Hz © National Instruments (Ireland) Limited 7-13 Script-DAC-Treiber Script-DAC-Treiber Der Befehl FRE? Bedeutung Abfrage der Signalfrequenz Syntax: FRE?<Kanalnummer><LF> Parameter Kanalnummer: Nummer des Kanals, dessen Frequenz abgefragt werden soll (0 - 9) Rückgabe Frequenz, „ ?“ = Fehler Beispiel: FRE? 1<LF> Der Befehl IDN? Bedeutung Abfrage des Gerätenamens Syntax IDN?<LF> Parameter keine Rückgabe "Gerätesimulator", „?“=Fehler Der Befehl ICR Bedeutung dus Syntax Einstellen der Abtastrate für den freilaufenden Mo- ICR<Abtastrate><LF> Parameter: Abtastrate einzustellende Abtastrate für den freilaufenden Modus (0.1 - 50.0) Rückgabe „0“ = Befehl erfolgreich ausgeführt, „?“=Fehler Der Befehl ICR? Bedeutung dus Syntax Abfragen der Abtastrate für den freilaufenden MoICR?<LF> Parameter keine Rückgabe aktuelle Abtastrate „?“ = Fehler DIAdem-DAC-Treiberbeschreibung 7-14 ni.com Script-DAC-Treiber Der Befehl MSV? Bedeutung Syntax Abfragen des aktuellen Messwert eines Kanals MSV?<Kanalnummer> Parameter: Kanalnummer Nummer des abzufragenden Kanals (0 - 9) Rückgabe Messwert, „?“=Fehler Beispiel: (Abfrage des aktuellen Messwertes von Kanal 5) MSV? 5 Der Befehl RUN Bedeutung Syntax Starten des freilaufenden Modus RUN<LF> Parameter keine Rückgabe Messdaten “?“ = Fehler Der Befehl STP Bedeutung Syntax Stoppen des freilaufenden Modus STP<LF> Parameter Keine Rückgabe „0“ = Befehl erfolgreich ausgeführt, „?“=Fehler Der Befehl TRG Bedeutung Syntax Triggern eines Scans TRG<LF> Parameter Keine Rückgabe Messdaten aller aktiven Kanäle „?“=Fehler © National Instruments (Ireland) Limited 7-15 Script-DAC-Treiber Script-DAC-Treiber Der Befehl WAV Bedeutung Syntax Einstellung der Signalform eines Kanals WAV<Kanalnummer>,<Signalform><LF> Parameter: Kanalnummer Nummer des einzustellenden Kanals (0 - 9). Signalform „0“ = Sinus „1“ = Rechteck „2“ = Dreieck Rückgabe „0“ = Befehl erfolgreich ausgeführt, „?“=Fehler Der Befehl WAV? Bedeutung Syntax Abfrage der Signalform eines Kanals WAV?<Kanalnummer><LF> Parameter: Kanalnummer Rückgabe ler DIAdem-DAC-Treiberbeschreibung Nummer des einzustellenden Kanals (0 - 9). „0“ = Sinus „1“ = Rechteck “2“ = Dreieck „?“ = Feh- 7-16 ni.com DIAdem Data Organization 8 Literatur Die folgenden kurzen Kapitel verweisen auf weiterführende Informationen, die Ihnen helfen ihr Script für den Script DAC Treiberschnell und effektiv aufzubauen. Dokumentation zu VBScript Weiterführende Dokumentation zu VBScript können sie über die Web-Seite „http://msdn.microsoft.com/scripting“ beziehen. Wählen Sie auf dieser Seite den Punkt „VBScript“ und dann den Unterpunkt „Documentation“ Windows-Scripting Host Informationen zum Windows Scripting Host können Sie über die Web-Seite „http://msdn.microsoft.com/scripting“ beziehen. Wählen Sie auf dieser Seite den Punkt „Windows Script Host“. Script-Debugger Informationen zum Script Debugger können sie über die Web-Seite „http://msdn.microsoft.com/scripting“ beziehen. Wählen Sie auf dieser Seite den Punkt „Script Debugger“. Script-DAC-Treiber 8-1 ni.com