Dieses Kapitel beschreibt den Softwareteil im Detail. Die Software der Simulation wird hauptsächlich auf einem cRIO-FPGA ausgeführt und kann auf jedem Compact-RIO-Chassis laufen. Sie ist bereits für ein NI-9074 und ein NI-9075 mit dem Modul in Steckplatz 1 kompiliert und getestet. Der Quellcode der Software ist in der Dokumentation des Moduls enthalten und kann auch in ein anwenderspezifisches LabVIEW-Projekt eingebunden werden.
Das LabVIEW-Projekt enthält außerdem Beispielcode, der zeigt, wie das Modul mit LabVIEW vom PC aus gesteuert wird. Dieser Beispielcode für die Ausführung auf einem Computer lässt sich einfach für die Echtzeitausführung auf den Compact-RIO-Echtzeit-Controller portieren.
Darüber hinaus steht eine DLL zur Verfügung, um das Modul aus Anwendungen heraus zu steuern, die in C geschrieben sind. Auf der Dokumentations-CD ist eine Beispielsoftware enthalten, die die Verwendung der DLL zeigt. Beachten Sie, dass die DLL nur mit der zugehörigen FPGA-Bitdatei funktioniert, die bereits für ein cRIO-9075-Chassis mit einem einzelnen Modul in Steckplatz 1 kompiliert ist.
5.1Allgemeine Steuerung
Im folgenden Kapitel werden die allgemeinen Steuerparameter beschrieben. Ihre Namen werden durchgängig auf den verschiedenen Softwareebenen verwendet, etwa im FPGA-Top-Level-Design, in der PC-Demo-Steuersoftware oder in der DLL.
Die Amplitudensteuerung mit programmierbarem Übersetzungsverhältnis bei Vollaussteuerung ist nur ab HW-Version 2.0 verfügbar.
5.1.1Modus- und Drehzahlsteuerung
Mit den folgenden Parametern lassen sich Status und Drehzahl des Moduls per Software steuern
| Parameter | Typ | Beschreibung |
|---|---|---|
| Mode = FixedPosition | Aufzählung | Auf feste Position setzen. Ist dieser Modus gesetzt, verändert das Modul die aktuelle Position, bis es die feste Position erreicht, und hält diese feste Position. |
| Mode = Rotate_Right | Aufzählung | Rechtsdrehung mit der durch den Wert RPM_Set festgelegten Drehzahl |
| Mode = Rotate_Left | Aufzählung | Linksdrehung mit der durch den Wert RPM_Set festgelegten Drehzahl |
| Mode = Rotate_Right_Sync | Aufzählung | Rechtsdrehung mit der durch den SYNC-Eingang vorgegebenen Drehzahl |
| Mode = Rotate_Left_Sync | Aufzählung | Linksdrehung mit der durch den SYNC-Eingang vorgegebenen Drehzahl |
| RPM_Set | Numerischer Wert (setzen) | Drehzahl in RPM (Umdrehungen pro Minute) (nur im Modus Rotate_xxx) |
| Position_Set [degrees] | Numerischer Wert (setzen) | Konstante Position der Simulation in Grad im Bereich 0…360° (nur im Modus FixedPosition) |
| SYNC_Phase [degrees] | Numerischer Wert (setzen) | Konstante Phase der Drehung relativ zum Sync-Eingang im Bereich 0…360° (nur im Modus Rotate_xxx_Sync) |
| Speed_Gradient [RPMps] | Numerischer Wert (setzen) | Drehzahländerungsrate in RPM pro Sekunde; bei 0 wird die neue Drehzahl sofort übernommen |
| RPM_Actual | Numerischer Wert (lesen) | Aktuelle Drehzahl in RPM (Umdrehungen pro Minute) |
| Position_Act [degrees] | Numerischer Wert (lesen) | Aktuelle Position der Simulation in Grad im Bereich 0…360° |
| RPM_SYNC | Numerischer Wert (lesen) | Aktuelle Drehzahl des Sync-Eingangs in RPM (Umdrehungen pro Minute) |
Tabelle 6: Beschreibung der Steuerparameter
Der Parameter RPM_Set hat je nach Simulationszustand unterschiedliche Bedeutungen, wie die folgende Tabelle zeigt:
| Wert von RPM_Set | Modus | Bedeutung von RPM_Set |
|---|---|---|
| > 0 | FixedPosition | Legt die Geschwindigkeit fest, mit der das Modul zur festen Position wechselt. |
| > 0 | Rotate_Right, Rotate_Left | Drehzahl |
| > 0 | Rotate_Right_Sync, Rotate_Left_Sync | Minimale Drehzahl, wenn kein SYNC-Signal anliegt |
| = 0 | Beliebig | Position sofort auf die feste Position setzen. |
Tabelle 7: Bedeutung von RPM abhängig vom aktuellen Modus
5.1.2Amplitudensteuerung
Mit den folgenden Schnittstellen lässt sich das Übersetzungsverhältnis des Moduls steuern. Beachten Sie, dass PGA_Set erst ab Hardwareversion 2.0 der Resolver-Simulation funktioniert.
| Parameter | Typ | Beschreibung |
|---|---|---|
| PGA_Set | Numerischer Wert (setzen) | Maximales Übersetzungsverhältnis, wenn die Sinus-LUT auf Vollaussteuerung definiert ist (Amplitude 100 %): 0 = 0,078125; 1 = 0,15625; 2 = 0,3125; 3 = 0,625; 4 = 1,25; 5 = 2,5; 6 = 5; 7 = 10. Setzen Sie diesen Wert bei Hardwareversion 1.3 auf „2“! |
| Write_LUT | Binärschalter zum Auslösen der DMA-Übertragung (siehe auch DMA_FIFO) | Setzen Sie „Write_LUT“ auf True und füllen Sie den DMA_FIFO. Setzen Sie „Write_LUT“ auf False zurück, wenn die DMA-Übertragung abgeschlossen ist. |
| DMA_FIFO | DMA-Puffer zum Schreiben einer Sinus-Lookup-Tabelle | Schreiben Sie einen Sinus-Amplitudenverlauf mit 1024 Elementen als 14-Bit-Integerwerte, wie in der folgenden Abbildung gezeigt |
Tabelle 8: Beschreibung der Amplitudensteuerung
Mit PGA_Set lässt sich der Bereich des Übersetzungsverhältnisses festlegen. Ist dieser Wert gesetzt, kann das Verhältnis zusätzlich feinjustiert werden, indem die Sinus-LUT über den DMA_FIFO geschrieben wird. Die Sinusschwingung muss gemäß der folgenden Abbildung durch 1024 Integerwerte (i16) dargestellt werden. Die Abbildung zeigt die Sinusschwingung bei Vollaussteuerung, wobei der Maximalwert 16383 für volle Amplitude beträgt.
Verwenden Sie das LabVIEW-VI „LUT_Init“, um eine Standard-Sinusschwingung für den DMA_Buffer zu erzeugen; als Eingangsparameter dient ein einstellbarer Amplitudenfaktor von 0…100 %.
5.2Steuerung per DLL
Die folgenden Funktionen stehen zur Steuerung des Moduls über eine DLL zur Verfügung. Die DLL setzt voraus, dass ein Compact-RIO-Chassis über Ethernet mit dem PC verbunden ist, auf dem die DLL läuft. Die DLL muss mit der Bitdatei für das tatsächlich verwendete Chassis und Modul neu kompiliert werden. Die aktuelle DLL ist für ein cRIO-9075 mit einem Modul in Steckplatz 1 verfügbar.
Beachten Sie, dass die Steuerung per DLL nicht für alle Versionen implementiert ist
Damit eine Anwendung auf die DLL zugreifen kann, müssen folgende Dateien in die Anwendung eingebunden werden:
cRIO_ResolverSimulation.dllcRIO_ResolverSimulation.hcRIO_ResolverSimulation.lib
Alle Funktionen geben einen Fehlercode zurück (sofern nicht anders angegeben):
- Null => kein Fehler
- Negativ => Fehler
- Positiv => Warnung
5.2.1Kommunikationssteuerung
Verbindung öffnen
Die folgende Funktion öffnet die Verbindung zum Modul:
int __stdcall cRIO_ResolverSim_Open (char* sRIO_Device_IP_Address);
sRIO_Device_IP_Address: Nullterminierter String, der die IP-Adresse des FPGA im cRIO-Chassis enthält. Ein typischer Adressstring lautet: „192.168.101.88“. Die IP-Adresse des Compact-RIO-Chassis kann mit NI-MAX („Measurement and Automation Explorer“) geändert werden- Rückgabewert: Die Funktion gibt einen Fehlercode zurück
Version lesen
Diese Funktion gibt das Kompilierungsdatum des FPGA-Designs zurück.
int __stdcall cRIO_ResolverSim_GetVersion (unsigned int* nVersion_Nr);
nVersion_Nr: Kompilierungsdatum des FPGA-Codes. In hexadezimaler Darstellung als 0xYYYYMMDD lesbar, z. B. 0x20130128- Rückgabewert: Die Funktion gibt einen Fehlercode zurück
Verbindung schließen
Die folgende Funktion schließt die Verbindung zum Simulationsmodul:
int __stdcall cRIO_ResolverSim_Close (void);
- Rückgabewert: Die Funktion gibt einen Fehlercode zurück
5.2.2Fehlerbeschreibung abrufen
Die folgende Funktion wandelt den von den DLL-Funktionen zurückgegebenen Fehlercode in einen lesbaren Text um.
int __stdcall cRIO_ResolverSim_GetErrorText (int nError_Code, char* sError_String);
nError_Code: In diesem Parameter kann die Anwendung den von einer DLL-Funktion zurückgegebenen Fehlercode übergebensError_String: In diesem Parameter wird die Fehlerbeschreibung zurückgegeben, indem die Daten in diesen Puffer kopiert werden. Die Anwendung muss im Puffer ausreichend Platz bereitstellen (>1024 Elemente)- Rückgabewert: Die Funktion gibt immer 0 zurück
5.2.3Simulationsparameter setzen
Die folgende Funktion setzt den aktuellen Modus der Simulation
int __stdcall cRIO_ResolverSim_SetStatus (
cRIO_ResolverSim_Mode eMode,
double fPosition_degrees_Set,
double fRPM_Set,
double fSync_Phase_Set,
double fTransformationRatio);
eMode: Dieser Aufzählungsparameter legt den aktuellen Simulationszustand gemäß Tabelle 6: Beschreibung der Steuerparameter fest
typedef enum
{
cRIO_ResolverSim_Mode_FixedPosition = 0,
cRIO_ResolverSim_Mode_Rotate_Right = 1,
cRIO_ResolverSim_Mode_Rotate_Left = 2,
cRIO_ResolverSim_Mode_Rotate_Right_sync = 3,
cRIO_ResolverSim_Mode_Rotate_Left_sync = 4,
} cRIO_ResolverSim_Mode;
fPosition_degrees_Set: Dies ist die einzustellende Position in °. Der Bereich kann 0…360° betragen. Dieser Wert gilt nur, wenn der aktuelle Simulationsmodus „FixedPosition“ ist (siehe auch Modus- und Drehzahlsteuerung)fRPM_Set: Dies ist die Drehzahl in Umdrehungen pro Minute (RPM); ihre Bedeutung hängt vom aktuellen Modus ab, wie in der folgenden Tabelle gezeigt. Die Bedeutung dieses Werts hängt von den verschiedenen Modi ab (siehe Modus- und Drehzahlsteuerung).fSync_Phase_Set: Damit wird die Phase des Drehsignals relativ zur positiven Flanke des SYNC-Signals in ° gesetzt. Der Bereich kann 0…360° betragen. Dieser Wert gilt nur, wenn der aktuelle Simulationsmodus „Rotate_Right_Sync“ oder „Rotate_Left_Sync“ ist (siehe auch Modus- und Drehzahlsteuerung)fTransformationRatio: Damit wird das Übersetzungsverhältnis der Simulation gesetzt. Das Übersetzungsverhältnis wird in die beiden Parameter der Amplitudensteuerung umgerechnet: PGA_Setting und Amplitudeneinstellung der LUT-Werte- Rückgabewert: Die Funktion gibt einen Fehlercode zurück
Die folgende Tabelle zeigt die Bedeutung des Drehzahlparameters abhängig vom aktuellen Modus:
| Wert von fRPM_Set | Modus | Bedeutung von fRPM_Set |
|---|---|---|
| > 0 | FixedPosition | Legt die Geschwindigkeit fest, mit der das Modul zur festen Position wechselt. |
| > 0 | Rotate_Right, Rotate_Left | Drehzahl |
| > 0 | Rotate_Right_Sync, Rotate_Left_Sync | Minimale Drehzahl, wenn kein SYNC-Signal anliegt |
| = 0 | beliebig | Position sofort auf die feste Position setzen. |
Tabelle 9: Bedeutung des RPM-Parameters
5.2.4Drehzahlrampe setzen
Die folgende Funktion setzt die Rate der Drehzahländerung in RPM pro Sekunde. Ist die Rate 0, werden neue Drehzahleinstellungen sofort übernommen. Andernfalls ändert sich die Drehzahl mit der angegebenen Rate.
int __stdcall cRIO_ResolverSim_SetRampGrad (double fRPM_Gradient_Set);
fRPM_Gradient_Set: Setzt den aktuellen Rampengradienten in RPM pro Sekunde- Rückgabewert: Die Funktion gibt einen Fehlercode zurück
5.2.5Simulationsstatus abrufen
Die folgende Funktion liest den aktuellen Status der Simulation. Der Status wird durch die aktuelle Position, die aktuelle Drehzahl und die aktuelle Drehzahl am SYNC-Eingang beschrieben.
int __stdcall cRIO_ResolverSim_GetStatus (double* fSync_Frequency_RPM,
double* fActual_Frequency_RPM,
double* fPosition_degrees);
fSync_Frequency_RPM: Dies ist die aktuelle Drehzahl am Synchronisationseingang in Umdrehungen pro MinutefActual_Frequency_RPM: Dies ist die aktuelle Drehzahl der Simulation in Umdrehungen pro MinutefPosition_degrees: Dies ist die aktuelle Position in °. Der Bereich kann 0…360° betragen- Rückgabewert: Die Funktion gibt einen Fehlercode zurück
5.2.6Einstellungen speichern
Die folgende Funktion speichert die aktuellen Einstellungen im cRIO-System. Nach Abschluss des Bootvorgangs nach dem Einschalten werden die Einstellungen automatisch wiederhergestellt.
int __stdcall cRIO_ResolverSim_SaveSettings (void);
- Rückgabewert: Die Funktion gibt einen Fehlercode zurück
5.2.7DLL-Testsoftware
Zum Testen des Zugriffs auf die Resolver-Simulation per DLL ist ein Debug-Panel enthalten. Dieses Tool liegt als Installationsprogramm im Ordner CRIO_ResolverSim_DLL_Test_Install im Ordner bin auf der Dokumentations-CD.
Nach Abschluss der Installation und dem Start der Software erscheint das folgende Fenster:

Sobald
- die korrekte IP-Adresse eingegeben wurde,
- ein Resolver-Simulationssystem im Netzwerk vorhanden ist
- und dieses seinen Bootvorgang abgeschlossen hat (ca. 1 Minute),
kann die Verbindung durch Drücken der Schaltfläche „Open“ hergestellt werden. Ist die Verbindung hergestellt, erscheint das Fenster wie folgt. Der Anwender kann über die Bedienelemente auf die Simulation zugreifen.

5.3GUI für das Stand-alone-System
Zum Ändern anwendungsspezifischer Einstellungen ist eine eigene grafische Benutzeroberfläche (GUI) implementiert.
5.3.1Installation
Zum Ausführen der GUI befindet sich die ausführbare Datei „ResSi.exe“ auf der Dokumentations-CD. Kopieren Sie den gesamten Ordner, der diese Datei enthält, auf den PC.
Zusätzlich muss die LabVIEW 2013 Runtime installiert sein. Die Runtime ist auf der Dokumentations-CD enthalten, kann aber auch von NI.com heruntergeladen werden.
5.3.2Frontpanel

Änderungen der Einstellungen werden nur übernommen, wenn:
- die GUI läuft (siehe GUI starten/stoppen)
- das System korrekt ausgewählt ist (siehe System auswählen) – andernfalls stoppt die GUI mit einem Fehler.
5.3.3GUI starten/stoppen
Die GUI startet automatisch, wenn „ResSi.exe“ ausgeführt wird.
Während die GUI läuft, wird die Schaltfläche „Start application“ wie in der folgenden Abbildung dargestellt:

Drücken Sie zum Stoppen der GUI die Schaltfläche STOP.

Drücken Sie zum Neustarten der GUI die Schaltfläche „Start Application“ in der linken oberen Ecke.

Die GUI stoppt automatisch, wenn ein Fehler auftritt. Ein Fehler wird in der Anzeige error_out signalisiert und erläutert

Ist das System nicht korrekt ausgewählt, tritt ein Fehler auf und die GUI wird gestoppt. Wählen Sie das System gemäß System auswählen aus und starten Sie die GUI durch Drücken der Schaltfläche „Start Application“ neu.
5.3.4System auswählen
Der Zugriff auf die Einstellungen des Systems erfolgt über NI-PSP Shared Variables. Der Variablenserver läuft auf dem cRIO-System. Da die IP-Adresse des Systems variieren kann, muss der Anwender das richtige System auswählen.
Klicken Sie auf „Variable Reference“:

Das folgende Fenster sollte erscheinen:

Wählen Sie den Eintrag „Variables“ auf dem System mit der korrekten IP-Adresse aus.
- 172.22.11.2 bei USB-Geräten
- Bei Ethernet abhängig von DHCP
Ist das System korrekt ausgewählt, läuft die GUI; tritt ein Fehler auf, stoppt die GUI und zeigt einen Fehler an. Stellen Sie in diesem Fall sicher, dass alle Verbindungen hergestellt sind und das System mit Spannung versorgt wird. Starten Sie die GUI nach dem Auswählen des Systems wie unter GUI starten/stoppen beschrieben neu.
5.3.5Alle Einstellungen speichern
Die aktuellen Einstellungen können gespeichert werden, damit sie nach einem Neustart wieder aktiv sind. Wird die Schaltfläche „Save_All_Settings“ gedrückt, werden alle Einstellungen dauerhaft im System gespeichert.

Beachten Sie, dass die aktuellen Einstellungen des Systems gespeichert werden. D. h., die Einstellungen müssen vor dem Speichern gemäß Resolver-Einstellungen ändern übernommen werden.
5.3.6Resolver-Einstellungen ändern
Alle folgenden Einstellungen können in der GUI geändert werden. Sind mehrere Resolver-Module im Einsatz, wirken die Einstellungen jeweils nur für einen einzelnen ausgewählten Kanal, nachdem die Schaltfläche „Apply_Settings“ gedrückt wurde.

D. h., wählen Sie zuerst „Select_channel_1…4“ (optional bei mehreren Modulen). Ändern Sie dann die Einstellungen wie in den folgenden Unterkapiteln beschrieben. Drücken Sie anschließend „Apply_Settings“.
Wenn die Einstellungen dauerhaft gespeichert werden sollen, drücken Sie „Save_All_Settings“
Drehzahleinstellungen

Die Drehzahleinstellungen umfassen Folgendes:
- Rotate_Enable:
- kontinuierliche Drehung bei TRUE
- Anfahren der festen Position bei FALSE.
- Direction:
- Drehung „links“ mit steigendem Winkel bei TRUE
- Drehung „rechts“ mit fallendem Winkel bei FALSE
- RPM_Set:
- Legt die Drehzahl in „Umdrehungen pro Minute“ fest, wenn SYNC_Enable FALSE ist.
- Bei deaktivierter Drehung legt RPM_Set die maximale Geschwindigkeit fest, mit der eine feste Position angefahren wird, wenn sich die feste Position ändert.
- SYNC_Enable:
- Bei TRUE wird der externe Synchronisationseingang verwendet. Die Zeit zwischen positiven Flanken am SYNC-Eingang bestimmt die Drehzahl. Beachten Sie, dass die Drehzahl auf RPM_Set begrenzt ist, wenn RPM_Set höher als SYNC ist
- Bei FALSE wird RPM_Set als Drehzahlwert verwendet.
Positionseinstellungen

Die Positionseinstellungen umfassen Folgendes:
- Position_degrees_Set:
- Einzustellende Position im Bereich 0…360°
- Nur gültig, wenn die Drehung deaktiviert ist und für diesen Kanal keine Position über die serielle Leitung empfangen wird.
- SYNC_Phase_degrees:
- Winkel im Bereich 0…360°
Amplitudeneinstellungen

Das Übersetzungsverhältnis eines Kanals lässt sich über die Amplitudeneinstellungen ändern. Zwei Werte legen das Übersetzungsverhältnis fest:
- PGA_Setting:
- Der programmierbare Verstärker (Programmable Gain Amplifier) legt den maximalen Bereich des Übersetzungsverhältnisses fest
- Einstellung zwischen 0…7 gemäß der Tabelle in der Abbildung oben
- Amplitude [%]:
- Legt die Feinabstimmung innerhalb des aktuellen, durch den PGA festgelegten Bereichs fest
- Einstellung im Bereich 0…100 %.
Diese beiden Werte werden in das System geschrieben und bestimmen das tatsächliche Übersetzungsverhältnis.
Zur Vereinfachung der Amplitudeneinstellung kann ein Übersetzungsverhältnis eingegeben werden. Wird ein neuer Wert für „Transformation_Ratio“ eingegeben, werden „PGA_Setting“ und „Amplitude [%]“ automatisch auf einen optimalen Wert berechnet.
5.3.7Aktuelle Statusanzeigen

Die aktuellen Statusanzeigen sind:
- RPM_actual: Aktuelle Drehzahl, abhängig entweder von RPM_Set oder von der Drehzahl am Synchronisationseingang.
- SYNC_Phase_LUT: Interne Darstellung von SYNC_Phase
- Position_Set_LUT: Interne Darstellung der festen Position
- Current position [°]: Aktuelle Position im Bereich 0…360°
- Sample_Rate_Actual: Interne Drehzahldarstellung (= 25-ns-Ticks für einen einzelnen Schritt)
- RPM_Sync: Drehzahl des externen SYNC-Eingangs in RPM
- Position_LUT_Act: Aktuelle Position (interner Wert)
- Position_LUT_Set: Interne Darstellung der festen Position. Entweder feste Einstellung oder empfangene Daten
5.4VIs zur Integration in eigene Anwendungen
Zum Setzen der Simulationsparameter oder zum Lesen des aktuellen Status können zwei Haupt-VIs in eine eigene Anwendung integriert werden. Beide VIs sind in der Stand-alone-LabVIEW-Beispiel-GUI enthalten.
Diese VIs benötigen kein Open- oder Close-VI. Sie können von jeder LabVIEW-Anwendung oder TestStand-Sequenz aufgerufen werden.
5.4.1PC_ResSi_Wr.vi
PC_ResSi_Wr.vi setzt den neuen Status der Resolver-Simulation. Die Eingangsparameter sind unter Allgemeine Steuerung beschrieben. Die Ausgangsparameter ..._LUT sind interne Darstellungen der Einstellungen. Diese Ausgänge können ignoriert werden.
Verbinden Sie mit „Refnum in“ eine gültige Referenz auf das Gerät gemäß System auswählen

5.4.2PC_ResSi_Rd.vi
PC_ResSi_Rd.vi liest den aktuellen Status der Resolver-Simulation. Die Ausgangsparameter sind unter Allgemeine Steuerung beschrieben
Verbinden Sie mit „Refnum in“ eine gültige Referenz auf das Gerät gemäß System auswählen
