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

Documentos relacionados