No regenerative analog output in c#

Hello

Does anyone have experience implementing a similar continuous regenerative, exit in c#. Specifically, I'm looking for to control the output of several channels, simultaneously over many hours that will not repetitive voltage signals.

This will require to write new data, drawn from a file stored on my hard drive to my DAQ buffer while the DQA provides the previously loaded buffer. I understand that there are built-in non-renewable methods DAQmx to handle this, I do not know how to handle these methods using c#. Code snippets, references to functions or examples would be much appreciated. Thank you!

-Jon

Thanks Christina,

I ended up understand everything. This example was very helpful, but it kinda turns out to be a cheat.

In the example is a recursive method that takes care of the buffer of stimulation (its called recall or something).  Before this run, the task of the AO is such that a buffer can be charged only half of the samples were read through

myTask.AOChannels.All.DataTransferRequestCondition = AODataTransferRequestCondition.OnBoardMemoryHalfFullOrLess;

in order to effectively support a system of double buffering. However, even if the code is unable to load the buffer, it is still running around a new waveform calculation for load and then realizing that it cannot load it. I wanted something that was expected to produce a buffer exactly when the buffer DAQ was half empty. In this way, a Chuck of a waveform could be read from a file on my hard drive every so often and inserted in the buffer DAQ without ever missing a step. I modified your example to show how to do something like that. I hope that others will find useful.

-Jon

Tags: NI Hardware

Similar Questions

  • Redeclenchables/continuous to a custom waveform analog output?

    Hello

    I try regular output an analog signal using the box USB-6211 and Labview2009. I looked at various examples of waveform, including the retriggerableAO.vi example, but I can't seem to understand how to send a 'waveform' custom stamp (terminology is perhaps the question). In all the examples (including waveformbuffer), I ran across the single waveform, the options are sine, square, etc.  Previously, I posted on this forum looking for hardware suggestions (link here) and explained what I try to do and got the big help. To sum up, I would like to read a 'waveform' from a text file, send it to the usb-6211 buffer and then continue to an analog channel. At the same time, I'll use the beginning of the analog task to trigger a digital signal once per cycle as well.

    I got in what concerns the establishment of the waveform, but am stuck to figure out how to get into the buffer and setting the frequency, etc.

    Thank you

    Gabe

    Hi Gabe,

    Dennis is correct that it will take some room to modify the existing screws to fit your need.  As he says, the Con Gen tension Wfm - Int Regeneration.vi Clk - no example provided with LabVIEW.  In the example, it can be shown that there is a custom VI used to explain the problems that arise when a waveform of a given frequency to a frequency of sampling and outputs analog specified.

    With all that said, it seems you want to read from an existing waveform file that you created and this waveform to an AO output channel.  There are a few things that will be needed to know before proceeding:

    -What is the waveform as you try to output (5000 samples, 10 k, 100 k, etc.)?

    -What pieces of the size of the wave you want output (100 samples at a time, etc.)?

    -you want to again and again, or simply run through once the waveform looping?

    Assuming that you already have the waveform and will only step by step, here's what I would like:

    -break the large waveform into smaller pieces of waveform of standard size

    -import the waveforms in LabVIEW and create an array of waveforms

    -bring the waveform in the example Dennis mentioned previously with automatic indexing enabled on the tunnel

    -Remove the generator of wave functions existing the while loop

    -wire your indexed table of waveform for the data of the VI DAQmx of analog output terminal

    It is possible that you will have to play with the settings of your waveform and timing of your VI, but this should be a good starting point.  Please let me know if something is not clear or if I have misunderstood your original message.  Have a beautiful reast of the day.

    Best,

  • Bad analog output help Every_N_Samples-NI-9263 cDAQ-9172 chassis (works with cDAQ-9178 chassis)

    Hello

    The NOR-9263 analog output voltage geberation works correctly with the cDAQ-9178 chassis but gives wrong result using the chassis NOR cDAQ-9172.

    In the attached code example, a single cycle of a sine wave is composed of 40000 samples and came out in the background using Every_N_Samples at a rate of production of 5000 samples per second.

    The output buffer size is set to 10000 samples.

    Prepare us the buffer writing 10000 samples 1, then write the remaining data in the background using the Every_N_Samples callback.
     
    Bug: Using the cDAQ-9172 chassis, to the 5000 s/s sampling rate with the help of an external field (or through closure to another HAVE), we observed that 1 10000 samples came out twice, followed by the rest of the waveform. The last 10000 samples are never exits. If you are working properly, we would expect to see 1 full cycle of a sine wave.

    The bug does not occur with the chassis NOR cDAQ-9178. I use the driver NIDAQmx v9.2.1f0 on Windows XP
    The bug does not happen with simulation devices, so you will need to use harwdare real to reproduce.

    Please find attached an example of code C based on the example program OR "ContGen - IntClk.c" to reproduce this bug.

    Thank you

    whemdan,

    The MathWorks

    Hi whemdan,

    By default, DAQmx regenerate old samples if no new data is available.  To give the correct behavior, you can:

    Use DAQmxSetWriteRegenMode to disable the regeneration (DAQmx_Val_DoNotAllowRegen).  In most cases, this is recommended if new data are written continuously in the buffer as the build is in progress.

    If you just need to generate 40 k samples, you can write them just all at once, rather than in 10 pieces of k (the code you attached probably is just an example, so I'll assume that you have a reason to write the data into segments in your actual code).

    I think the difference in behavior between 9172 and 9178 can if explained by the different way, buffering is set up on each product.  The 9172 uses a buffer of 8 k (on the STC2) in all cases (source).  The 9178 uses an 8 k of memory buffer (on the STC3) If you use regeneration shipped, but uses the 127 samples FIFO cartridge, if you use no on-board regeneration (source).

    Then... on the 9172 8191 samples are immediately transferred to the FIFO.  By default, the hardware is going to request new data when the FIFO is less to fill (this is configurable with DAQmxSetAODataXferReqCond).  I'm not sure what the transfer data request size is in your case (you can set the maximum value with DAQmxSetAOUsbXferReqSize), but obviously it is bigger than the other 1809 samples that you have not yet sent to the Board of Directors of your first entry.  At this point, the pilot will regenerate 10 existing k samples so that sufficient data will be available to meet the demand of data transfer.

    The 9178 however use the FIFO of 127 smaller samples so you will not have the same behavior in your case.

    In summary, the behavior is explainable by the difference of material.  If you want to avoid to regenerate old samples, you should ban the regeneration using DAQmxSetWriteRegenMode.

    Best regards

  • Decent analog output of my Qosmio F20-154

    I use my Qosmio as a Microsoft Media Center with my TV connected via VGA output. It gives me a pretty good image.

    However, my TV does not support most of the modes of zoom for VGA; or it does for DVI or HDMI.

    So I tried the image output via S-Video - which produces a shitty and unacceptable photo.

    Unfortunately, Qosmio has no TV output, so I can't try it.

    So, does anyone know of a piece of hardware that can be used to make the Qosmio to produce a decent analog output, such as TV-Out (antenna) or Composite?

    Thanks in advance,
    Brian

    As far as I know you have only two options to send the video signal.

    Qosmio F20 supports viga video and s-video ports.
    So either you will use the video VGA (15-pin) port or output video super TV (S-Video) 4pol mini to connect the TV to the laptop...

    I have connected my laptop to the TV also using the s-video port and the photo quality is OK.

    Please check you s-video cable and if possible test another in addition, I would recommend check some settings on the TV and s-video option

  • Analog output of access on fly buffer

    Hi all

    I have a X Series DAQ and made many analog inputs and output tasks. My question is that can an analog output buffer be accessed or modified during execution of the task? I have a redeclenchables analog output task, and I want to replace the buffer after a trigger is done before the next coming. Is this possible? Or put it in general, how can access us the buffer without re - create the task?

    Any comment is welcome. Thank you.

    Hi Skuo1008,

    Which development environment you use to write this code? You mentioned a textual DAQmx function above in this post. Using LabWindows/CVI or ANSI C?

    Take a look at these examples:

    Generation of analog waveform with update with DAQmx output buffer
    http://www.NI.com/example/25039/en/

    I have also attached to this answer

  • To input analog shutdown when the analog output is completed and synchronization

    Hello

    I'm trying to get my LabVIEW program to send analog output to a computer and read acceleration using the cDAQ-9184. Chassis output that I use is the NI 9263 and the chassis of entry is the NI 9234. I generate a signal of white noise using LabVIEW Express signal generator.

    The first problem I have is the synchronization. I had an old VI that has begun to measure the acceleration just about a second after the entry has been given to the machine. I used the LabVIEW tutorial on how to sync the analog input and output, only to discover that it does not work with two different hunts. Then I found another tutorial that shows how to synchronize different frames between them.

    The second problem is the cessation of the LabVIEW program. What I want to do is to generate the signal and then simultaneously send and read the input and output analog, respectively. It is because I don't want a phase difference or any shorter signal for a direct comparison. But as soon as the signal is sent to the machine, I want the entry to stop analog playback and then then the LabVIEW program must stop. I want to be able to choose any length of signal to be generated and stop as soon as the entire duration of the signal has been sent to the machine.

    I tried 'DAQmx stop', "DAQmx Timer" and 'DAQmx's task made?' and none of them have worked for me. It is also my first time on a forum posting, so I hope I gave enough information. I enclose my VI as well. The VI shows I read an entry for the analog input voltage, but I am only using this to try to get to the work programme.

    I'd appreciate any help I could get.

    Thanks in advance

    Peter

    Hi Peter,.

    I have some recommendations for you that I think you will get closer to your solution. First of all, I assumed you meant that you had 1 chassis (cDAQ-9184) who had two modules in it (NOR-9263 and NOR-9234). My next steps are based on this assumption, so if it's wrong, please let me know.

    For your first question about the synchronization, the code you provided is very close to what you need. You need to do, however, implement architecture master/slave for startup tasks DAQmx functions. To do this, you can add another frame to the flat sequence structure and put the master start task (input voltage) after the start slave (output voltage) task.

    To manage your second question and that the program ends at the point where you, the first step is to get rid of all the logic that you use with the local variable of length of time. Rather than use this logic, just wire the node "task performed?" of "is task performed?" operate to stop the loop. This will cause your loop to stop as soon as the signal is sent to the machine.

    I have some other recommendations for you that will increase the performance of your program:

    (1) rather than writing on file inside the last loop, you can use the DAQmx Configure Logging (PDM) .vi. You will place this VI between DAQmx Timing.vi and DAQmx Start Task.vi to the task of the analog input voltage.

    (2) after the last while loop, you want to stop the task and analog outputs as well with another DAQmx stop Task.vi.

    (3) rather than using a local variable for the entrance of displacement and wiring it in the DAQmx Write.vi, you can wire directly from the output waveform of the wave to build function node.

    That should help you get started in the synchronization of these tasks.

    -Alex C.

    Technical sales engineer

    National Instruments

  • Simulate the analog output of arbitrary waveforms

    Simulate it Arbitrary Waveform VI Express can be used to generate analog signals to the physical channels in analog output mode systems such as the NI 9263? I am trying to use the VI arbitrary signal generator to produce a signal used to excite the magnetic coils.

    Why don't you just try and see what happens?  As far as I know, it should work.

  • cFP-AO-200 analog output module (error-33180)!

    Hello everyone

    I use the CFP 1808 Bank as well as other such modules that HAVE 111 and enter I-110, I recently bought a Module AO-200 out of the currents of the order of 4-20 mA, I connected the module to the Bank and updated the device of the MAX Software, then I opened the Getting Started/Analog Output.vi leave examples in Labview to test 2011 map the VI returns an error with the code 33180 for me, I don't know what the problem is, but I tested the card with the MAX and wrote the values to it successfully.

    Can someone tell me what is the problem with my VI

    Thank you

    I was able to reproduce your error. You must select 'All' in the Point IO Point field for this vi.

  • How can I check if the counter entry is synchronized with the analog output?

    Hello

    I'm working on an application for counting photons.  I use two channels of analog output on a PCI-6713 card to send a frame model to a set of XY scan mirrors.  I then a photon count unit that emits a TTL signal when the photons are detected as a result of this raster analysis.  I then use a surfboard USB-6211 to count the edges on this TTL signal.

    I have problems that seem due to synchronization problems.  I use the sample AO on the PCI-6713 card clock like the door of my meter on the map USB-6211.  I use a trigger to start digital to analog output and a trigger of arms for the entrance to counter early. Is there a way to check that the analog output and counter entry of start of operations at the same time and are are synchronized?  I basically want to monitor and compare the ao real sample of the PCI-6713 card clock door signal used by the jury of the USB-6211.  I was able to export the sample AO clock and watch it on my oscilloscope, but not the signal from the door of the USB-6211.

    Thanks for your help,

    Brian

    Update... It turns out that there is no problem of synchronization between my meter input and the analogue output.  There was a difference of impedance when I connected my unit of counting photons to my USB-6211.  This caused an error variable count rate.  After accouting for this shift, the problem disappeared.

  • How to control the two analog outputs at a time

    I'm new to LabVIEW and have some problems in DAQmx with control outputs analog multiple.

    I want to set up a platform using BNC-2110 and PCIe6363 to control two rotating mirrors. The problem that I can only give an output (AO0 or AO1) at a time and I really have no idea how revise my LabVIEW diagram to control two outputs at the same time I met. I tried to change the outputs and it keeps a mirror turning instead of the old. Could someone help me with my problem and I would really appreciate. This is my blocked diagram and front.

    Hi zrmaker,

    As mentioned by RavensFan, you should not create 2 analog outputs different tasks if you use AO0 AO1. To your façade > physical control or the channels > select the drop-down list of the control channel physical (s) > Browse > hold down the CTRL + select the AO0 and AO1 > Select OK. Once this is done, you will see that your control or the physical channels has the following input values: "Dev1 / ao0:1" which means that you will access to AO0 AO1.

    In regards to writing DAQmx, simply select Analog > multiple channels > samples multiple > 1 waveform (you should get the following: 1 d Analog Waveform NChan NSamp). Once done, you can just use table build to combine 2 different waveforms and plug in this table to DAQmx writing output. The first index will be the output for AO0 value and the other will be for AO1.

    You can check this link on how to read or write from several channels: http://digital.ni.com/public.nsf/allkb/0C1ADEF06A54AB2D862575040066FD51

    Additional reference:
    http://www.NI.com/white-paper/2835/en/

    Hope that helps.

    Warm greetings,

    Lennard.C

  • generate a square on the analog output wave

    I use a PXI-6229 DAQ card and I need to generate a square on ao0 wave.  I'm programming in c# and have found an example of the expedition, which generates a sine wave.  I need to be able to modify the function generator that was provided with the example of the expedition to produce a square wave 7.2 kHz with duty cycle of 50% and 2 v peak-to-peak.  I enclose the code generator to function.

    Thank you

    After a lot of trial and error and adapt the example to generate a sinusoidal signal, I have the solution to generate a square signal of analog output.  I enclose the code.

  • Analog output is inactive will be high impedance or cutting State?

    Hey

    I use the outputs analog NI 6229.

    I would like to know if there is a State of tri - state or high impedance for those analog output when it is not in use?

    Hello Matthew,.

    I was trying to avoid this solution.

    Thanks anyway.

    AMCO

  • read the output of a path of analog output current voltage

    In DAQmx if you are unsure of the status of a digital output port, you can take a reading on this subject.  When I try this on an analog output, I get an error.  Is it possible to query the status of the output of an analog output?  I realize that I could follow the State with a variable, but a direct reading would be really handy.

    Hello, GIS.

    There is no way to read the output in the AO modules without wiring physically the signal to a module to HAVE.  You are able to use a variable to read the current value of the output, as you mentioned earlier.

    Channels AO multifunction boards, however, can be read through tasks of entry by rounting in-house channel to read ao vs aoground.

    Lisa

  • How can I pause and resume the analog output using DAQmx?

    I use a DAQ hardware to produce an analog waveform.  I would like simply to break the output of the wave and then resume where it left off.  I use DAQmx and LabVIEW 2011.

    I've seen examples that use a digital or analog break trigger, but I would take a break in the software only.  How can I do this?

    -Joe

    Hi Joe!

    I spent some time thinking about it and I realized that you can technically use a fundamental mission of the analog output, as you previously wrote that runs continuously. However, the generated output samples are controlled by the sample clock pulses, and can be manipulated to fit our needs "suspension."

    To do this, we will need another counter task that generates a pulse train (see our examples of shipping under material input and output > DAQmx > generating digital pulses > generate dig Pulse Train - Continuous.vi) that stops and starts the user to choose. This can be in another quite VI or controlled by software. We will use this as the task of our output sample clock.

    Then, the task of the AO, wire a constant to the sample clock source and select ' DevX/CtrXInternalOutput"based on the counter that you specified in the task of counter. You will need to choose "I/o name of filtration" and check the box that says "include advanced terminals' and right-click of the constant. See picture attached as a reference. In this way, the task of the AO is constantly running, but it generates only actually all data when the meter running task.

    Let me know if you have any questions!

    Have a great day!

  • poor performance analog output (error 200018)

    Hello.  I have a 6124 SMU Board with controller real time SMU-8102.  the Council is speced to MECH 4 analog outputs. / s (one lane), but I have problems to operate at anything beyond about 500 kech. / s.  I enclose my example below program.  If I put the rate at 500 k, it works.  If I put 1 m, it does not work and I get the error 200018 (DAC conversion attempted before Conversion data were available).  I use the DMA transfer.

    I also tried to increase or decrease the number of samples written by loop (between 50 and 300) and using a loop timed in labview real-time.  That essentially gives the same result (sometimes I get error 200016 instead, "exceeding accuracy onboard device memory").

    Because the controller is a dual core controller that do literally anything else (what I showed is the whole program, nothing else running), I don't know that I have some setting wrong software.  I can't believe that this controller is unable to deal with this card.  Does anyone have any suggestions on what I might try?

    Version of LabVIEW is 2010 and DAQmx version is fairly recent.

    Ok. I thought about it.  Here's an interesting fact.  At the rate of 1 MECH. / s, tries to write to 4096 samples each microseconds 4096 works perfectly well.  But any attempt to write to 4095 samples fails!  4095 course is 2 ^ 12-1.  It seems that DMA was running only transfers of 4 k at a time, so when he got 4095 samples, he was waiting for a sample more start the transfer, but at the time where he got this sample, it was too late.  I changed DataXferReqCond property for "almost complete."  Now, I can write about 150 samples at a time instead of 4096.  Greatly improved!

    Moreover, it would be really good to put in the text of the error message for the error 200018 so that others live several days tearing their hair like I did...

    Thanks for the help

    Daniel

Maybe you are looking for