1// ExampleDataAcquisition uses the new data acquisition module to record data
2// and writes the result in to a file.
3public static void ExampleDataAcquisition(string dev = DEFAULT_DEVICE) // Timeout(20000)
4{
5 ziDotNET daq = connect(dev);
6
7 SkipForDeviceFamilyAndOption(daq, dev, "MF", "MD");
8 SkipForDeviceFamilyAndOption(daq, dev, "HF2", "MD");
9 SkipForDeviceFamily(daq, dev, "HDAWG");
10
11 resetDeviceToDefault(daq, dev);
12 daq.setInt(String.Format("/{0}/demods/0/oscselect", dev), 0);
13 daq.setInt(String.Format("/{0}/demods/1/oscselect", dev), 1);
14 daq.setDouble(String.Format("/{0}/oscs/0/freq", dev), 2e6);
15 daq.setDouble(String.Format("/{0}/oscs/1/freq", dev), 2.0001e6);
16 daq.setInt(String.Format("/{0}/sigouts/0/enables/*", dev), 0);
17 daq.setInt(String.Format("/{0}/sigouts/0/enables/0", dev), 1);
18 daq.setInt(String.Format("/{0}/sigouts/0/enables/1", dev), 1);
19 daq.setInt(String.Format("/{0}/sigouts/0/on", dev), 1);
20 daq.setDouble(String.Format("/{0}/sigouts/0/amplitudes/0", dev), 0.2);
21 daq.setDouble(String.Format("/{0}/sigouts/0/amplitudes/1", dev), 0.2);
22 ziModule trigger = daq.dataAcquisitionModule();
23 trigger.setInt("grid/mode", 4);
24 double demodRate = daq.getDouble(String.Format("/{0}/demods/0/rate", dev));
25 double duration = trigger.getDouble("duration");
26 Int64 sampleCount = System.Convert.ToInt64(demodRate * duration);
27 trigger.setInt("grid/cols", sampleCount);
28 trigger.setByte("device", dev);
29 trigger.setInt("type", 1);
30 trigger.setDouble("level", 0.1);
31 trigger.setDouble("hysteresis", 0.01);
32 trigger.setDouble("bandwidth", 0.0);
33 String path = String.Format("/{0}/demods/0/sample.r", dev);
34 trigger.subscribe(path);
35 String triggerPath = String.Format("/{0}/demods/0/sample.R", dev);
36 trigger.setByte("triggernode", triggerPath);
37 trigger.execute();
38 while (!trigger.finished())
39 {
40 System.Threading.Thread.Sleep(100);
41 double progress = trigger.progress() * 100;
42 System.Diagnostics.Trace.WriteLine(progress, "Progress");
43 }
44 Lookup lookup = trigger.read();
45 ZIDoubleData[] demodSample = lookup[path][0].doubleData;
46 String fileName = Environment.CurrentDirectory + "/dataacquisition.txt";
47 System.IO.StreamWriter file = new System.IO.StreamWriter(fileName);
48 ZIChunkHeader header = lookup[path][0].header;
49 // Raw system time is the number of microseconds since linux epoch
50 file.WriteLine("Raw System Time: {0}", header.systemTime);
51 // Use the utility function ziSystemTimeToDateTime to convert to DateTime of .NET
52 file.WriteLine("Converted System Time: {0}", ziUtility.ziSystemTimeToDateTime(lookup[path][0].header.systemTime));
53 file.WriteLine("Created Timestamp: {0}", header.createdTimeStamp);
54 file.WriteLine("Changed Timestamp: {0}", header.changedTimeStamp);
55 file.WriteLine("Flags: {0}", header.flags);
56 file.WriteLine("Name: {0}", header.name);
57 file.WriteLine("Status: {0}", header.status);
58 file.WriteLine("Group Index: {0}", header.groupIndex);
59 file.WriteLine("Color: {0}", header.color);
60 file.WriteLine("Active Row: {0}", header.activeRow);
61 file.WriteLine("Trigger Number: {0}", header.triggerNumber);
62 file.WriteLine("Grid Rows: {0}", header.gridRows);
63 file.WriteLine("Grid Cols: {0}", header.gridCols);
64 file.WriteLine("Grid Mode: {0}", header.gridMode);
65 file.WriteLine("Grid Operation: {0}", header.gridOperation);
66 file.WriteLine("Grid Direction: {0}", header.gridDirection);
67 file.WriteLine("Grid Repetitions: {0}", header.gridRepetitions);
68 file.WriteLine("Grid Col Delta: {0}", header.gridColDelta);
69 file.WriteLine("Grid Col Offset: {0}", header.gridColOffset);
70 file.WriteLine("Bandwidth: {0}", header.bandwidth);
71 file.WriteLine("Center: {0}", header.center);
72 file.WriteLine("NENBW: {0}", header.nenbw);
73 for (int i = 0; i < demodSample.Length; ++i)
74 {
75 file.WriteLine("{0}", demodSample[i].value);
76 }
77 file.Close();
78
79 AssertEqual(1, trigger.progress());
80 AssertNotEqual(0, demodSample.Length);
81
82 trigger.clear(); // Release module resources. Especially important if modules are created
83 // inside a loop to prevent excessive resource consumption.
84 daq.disconnect();
85}