07.05.2017, 15:48
Hallo zusammen,
ich versuche den Delay-Generator SG08P2 von BME Bergmann in Labview anzusteuern. Ich habe dafür eine DLL-Funktion ReadParameters, mit der ich eine Datei *.g0y einlesen können sollte. Leider gibt mir mein Programm aktuell den Fehler 1097 aus und es werden hier structs verwendet, die selbst auch wieder structs und unions enthalten. Hier der Ausschnitt aus der Hilfedatei:
long ReadParameters(DG_BME_State* p_DGS, int* p_module, BOOL* p_CalibrateTiming, unsigned long* p_CalibrationLevel, char* FileName);
typedef struct
{
DG_BME_Control Control;
int BaseAddress;
int DG_Product;
BOOL Master;
int BusNumber;
char ip_address[40];
} DG_BME_State;
mit
typedef struct
{
DelayChannelData T0,A,B,C,D,E,F;
DelayTriggerData DT;
BOOL Gate_AB;
unsigned long GateFunction;
unsigned long OutputLevel;
unsigned long DG_Product;
unsigned long PulseWidth;
} DG_BME_Control;
mit
typedef struct
{
union
{
double FireFirst;
double DelayTime[MemDepth];
};
double PulseWidth[MemDepth];
double SetBack;
unsigned long StepBack[MemDepth];
signed long ListLength;
signed long OutputModulo;
signed long OutputOffset;
unsigned long GoSignal;
unsigned long DoneSignal;
BOOL Positive;
BOOL Terminate;
BOOL HighDrive;
BOOL Disconnect;
BOOL OntoMsBus;
BOOL InputPositive;
} DelayChannelData;
und
typedef struct
{
double TriggerLevel;
double GateLevel;
union
{
double InternalClock;
double InhibitTrigger;
};
double InhibitSecondary;
double ForceTrigger;
double StepBackTime;
double GateDelay;
unsigned long BurstCounter;
unsigned long DelaySecondary;
union
{
_int64 PresetLong;
unsigned long PresetValue;
};
union
{
unsigned long DivideBy;
struct
{
unsigned short OscillatorDivider;
unsigned short TriggerDivider;
};
};
unsigned long TriggerMultiplier;
unsigned long ClockSource;
unsigned long GateDivider;
unsigned long MS_Bus;
BOOL PositiveGate;
BOOL IgnoreGate;
BOOL SynchronizeGate;
BOOL ClockEnable;
BOOL InternalTrigger;
BOOL InternalArm;
BOOL SoftwareTrigger;
BOOL RisingEdge;
BOOL StopOnPreset;
BOOL ResetWhenDone;
BOOL TriggerEnable;
BOOL Terminate;
BOOL GateTerminate;
BOOL UseF;
} DelayTriggerData;
In Labview ist das bei mir dann:
int32_t ReadParameters(void *p_DGS, int32_t *p_module, uint16_t p_CalibrateTiming, uint32_t *p_CalibrationLevel, CStr FileName);
(s. angehängte Datei, Typdefinition, dlls und die zip-Datei (die zip ist die g0y-Datei, die reingeladen werden soll - die Werte sind anders als "0" bzw. "False", so dass man deutlich sehen müsste, wenn das Laden klappt).
Falls irgendjemand Ideen hat, woran es liegen könnte, dass der Aufruf nicht klappt, ich bin für jeden Hinweis dankbar.
VG
p.s. Hintergrund, falls es interessiert: Ich benutze als external Clock die Frequenz meines Femtosekunden-Oszillators mit 79.39 MHz und dann als Gate das Triggersignal meines Chirped Amplifier Verstärkers mit 10 kHz. Bei dieser Kombi funktioniert mit dem mitgelieferten Programm zur Ansteuerung der Delay-Generator-Karte alles soweit gut: Ich bekomme ein Trigger-Signal, was sich bei Verstellen des Delays kontinuierlich verschiebt und einen geringen Jitter von etwa 200 ps zeigt. (Leider habe ich einen Pockelszellentreiber, der ein Fenster von kleiner 5 ns (bei 10% der Amplitude) hat, so dass ich mir mehr zeitlichen Jitter nicht leisten kann.) Wenn ich das Ganze nun mit einem Programm aus mitgelieferten Sub-VIs mache, funktioniert es leider nicht (leider gibt es für Labview keinen Support vom Delay-Karten-Hersteller) - irgendeine Einstellung scheint noch falsch zu sein und sowohl der Delay lässt sich nicht kontinuierlich verstellen als auch der Jitter springt bei höheren Delays auf ungefährt 1 ns. Deshalb möchte ich die Parameterdatei *.g0y, die durch das mitgelieferte Programm erstellt wurde, in Labview öffnen, in der Hoffnung den Fehler zu umgehen.
ich versuche den Delay-Generator SG08P2 von BME Bergmann in Labview anzusteuern. Ich habe dafür eine DLL-Funktion ReadParameters, mit der ich eine Datei *.g0y einlesen können sollte. Leider gibt mir mein Programm aktuell den Fehler 1097 aus und es werden hier structs verwendet, die selbst auch wieder structs und unions enthalten. Hier der Ausschnitt aus der Hilfedatei:
long ReadParameters(DG_BME_State* p_DGS, int* p_module, BOOL* p_CalibrateTiming, unsigned long* p_CalibrationLevel, char* FileName);
typedef struct
{
DG_BME_Control Control;
int BaseAddress;
int DG_Product;
BOOL Master;
int BusNumber;
char ip_address[40];
} DG_BME_State;
mit
typedef struct
{
DelayChannelData T0,A,B,C,D,E,F;
DelayTriggerData DT;
BOOL Gate_AB;
unsigned long GateFunction;
unsigned long OutputLevel;
unsigned long DG_Product;
unsigned long PulseWidth;
} DG_BME_Control;
mit
typedef struct
{
union
{
double FireFirst;
double DelayTime[MemDepth];
};
double PulseWidth[MemDepth];
double SetBack;
unsigned long StepBack[MemDepth];
signed long ListLength;
signed long OutputModulo;
signed long OutputOffset;
unsigned long GoSignal;
unsigned long DoneSignal;
BOOL Positive;
BOOL Terminate;
BOOL HighDrive;
BOOL Disconnect;
BOOL OntoMsBus;
BOOL InputPositive;
} DelayChannelData;
und
typedef struct
{
double TriggerLevel;
double GateLevel;
union
{
double InternalClock;
double InhibitTrigger;
};
double InhibitSecondary;
double ForceTrigger;
double StepBackTime;
double GateDelay;
unsigned long BurstCounter;
unsigned long DelaySecondary;
union
{
_int64 PresetLong;
unsigned long PresetValue;
};
union
{
unsigned long DivideBy;
struct
{
unsigned short OscillatorDivider;
unsigned short TriggerDivider;
};
};
unsigned long TriggerMultiplier;
unsigned long ClockSource;
unsigned long GateDivider;
unsigned long MS_Bus;
BOOL PositiveGate;
BOOL IgnoreGate;
BOOL SynchronizeGate;
BOOL ClockEnable;
BOOL InternalTrigger;
BOOL InternalArm;
BOOL SoftwareTrigger;
BOOL RisingEdge;
BOOL StopOnPreset;
BOOL ResetWhenDone;
BOOL TriggerEnable;
BOOL Terminate;
BOOL GateTerminate;
BOOL UseF;
} DelayTriggerData;
In Labview ist das bei mir dann:
int32_t ReadParameters(void *p_DGS, int32_t *p_module, uint16_t p_CalibrateTiming, uint32_t *p_CalibrationLevel, CStr FileName);
(s. angehängte Datei, Typdefinition, dlls und die zip-Datei (die zip ist die g0y-Datei, die reingeladen werden soll - die Werte sind anders als "0" bzw. "False", so dass man deutlich sehen müsste, wenn das Laden klappt).
Falls irgendjemand Ideen hat, woran es liegen könnte, dass der Aufruf nicht klappt, ich bin für jeden Hinweis dankbar.
VG
p.s. Hintergrund, falls es interessiert: Ich benutze als external Clock die Frequenz meines Femtosekunden-Oszillators mit 79.39 MHz und dann als Gate das Triggersignal meines Chirped Amplifier Verstärkers mit 10 kHz. Bei dieser Kombi funktioniert mit dem mitgelieferten Programm zur Ansteuerung der Delay-Generator-Karte alles soweit gut: Ich bekomme ein Trigger-Signal, was sich bei Verstellen des Delays kontinuierlich verschiebt und einen geringen Jitter von etwa 200 ps zeigt. (Leider habe ich einen Pockelszellentreiber, der ein Fenster von kleiner 5 ns (bei 10% der Amplitude) hat, so dass ich mir mehr zeitlichen Jitter nicht leisten kann.) Wenn ich das Ganze nun mit einem Programm aus mitgelieferten Sub-VIs mache, funktioniert es leider nicht (leider gibt es für Labview keinen Support vom Delay-Karten-Hersteller) - irgendeine Einstellung scheint noch falsch zu sein und sowohl der Delay lässt sich nicht kontinuierlich verstellen als auch der Jitter springt bei höheren Delays auf ungefährt 1 ns. Deshalb möchte ich die Parameterdatei *.g0y, die durch das mitgelieferte Programm erstellt wurde, in Labview öffnen, in der Hoffnung den Fehler zu umgehen.