Discussion:
pci 6551 writenamedwaveformwdt c++
(too old to reply)
ak123
2008-01-30 16:10:14 UTC
Permalink
Hello,
I'm working on generating and acquiring data.
ak123
2008-01-30 16:10:14 UTC
Permalink
Hello,
I'm working on generating and acquiring data using the pci 6551 with visual c++.
Since I require a channel to go into high impedance during acquisition, im using writenamedwaveformwdt function. However , I don't quite understand what the 3rd parameter (samples to write) should be. According to the help file it is the number of channels multiplied by waveform size, but during debugging I get memory corruption error. Snippets of my code is as follows:
#define WAVEFORM_SIZE 100000#define WDT_SIZE 100000#define SAMPLES_TO_READ 50   ViRsrc deviceID = "Dev1";   ViConstString channelList = "0-3";   ViInt8 VoltageConfigurationSupported = 0;   ViReal64 sampleClockRate;   ViConstString triggerSource = "PFI2"; //generation trigger   ViInt32 triggerEdge = 12;   ViConstString triggerID = "ScriptTrigger0";   ViInt32 dataWidth = 4;   ViUInt8 waveformData[WAVEFORM_SIZE];   ViConstString waveformName = "myWfm";for (bit = 0; bit < 1000 ;bit++)     {     waveformData[z] = 0;     z++;     waveformData[z] = 0;     z++;     waveformData[z] = 1;     z++;     waveformData[z] = 0;     z++;
bit++;    }   /* Note: waveform names are referenced in script */   ViConstString script =       "script myScript "      "   repeat forever "      "     wait until ScriptTrigger0 "      "     repeat 1 "      "     generate myWfm "      "     end repeat "      "   end repeat "      "end script";
 
/* Initialize generation session */   checkErr(niHSDIO_InitGenerationSession(            deviceID, VI_FALSE, VI_FALSE, VI_NULL, &gvi));
 /* Reset Device */
   checkErr(niHSDIO_ResetDevice (gvi));
 
   /* Assign channels for dynamic generation */   checkErr(niHSDIO_AssignDynamicChannels (gvi, channelList));                /* Configure clocking parameters */   checkErr(niHSDIO_ConfigureSampleClock(            gvi, NIHSDIO_VAL_ON_BOARD_CLOCK_STR, sampleClockRate));
               /* Configure hardware script trigger */   checkErr(niHSDIO_ConfigureDigitalEdgeScriptTrigger(            gvi, triggerID, triggerSource, triggerEdge));               /* Configure generation mode for scripted generation */   checkErr(niHSDIO_ConfigureGenerationMode(gvi, NIHSDIO_VAL_SCRIPTED));
   checkErr(niHSDIO_WriteNamedWaveformWDT(gvi,waveformName,WDT_SIZE,NIHSDIO_VAL_GROUP_BY_SAMPLE,waveformData));        /* Write script to device */   checkErr(niHSDIO_WriteScript(gvi, script));
/* Initiate generation */   checkErr(niHSDIO_Initiate(gvi));
 
There isn't any error code, the program just terminates, unless running in debug mode.
When I reduce wdt_size to 8 the data isn't what im expecting...
Any suggestions?
 
Thanks,
Arifa

Loading...