From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Data Acquisition Idea Exchange

Community Browser
cancel
Showing results for 
Search instead for 
Did you mean: 
Post an idea

As far as I can tell, DAQmx Configure Logging only allows for raw data and scaling information to be saved as part of a DAQmx task. This is great for throughput and disk space considerations, but a problem arises when using DIAdem to analyse the TDMS files with raw + scaling info - it is incredibly slow for large files (~500MB).

 

Some basic tests show it's around 10 times slower to process raw + scale TDMS files (stored as I16s) vs. already scaled TDMS files (stored as SGLs). DIAdem crawls when trying to generate calculation previews, zoom in and out of graphs, and so on.

 

It'd be great if the DAQmx logging provided the option to log scaled data (in the user's preferred datatype), and an option to not include the scaling information in the TDMS metadata.

In order to TDD code, one has to be able to isolate dependencies.  A very handy trick to isolate external dependencies is to create an interface with the same methods and properties signatures as the external class, and then create an empty class which inherits from the external dependency and implements the interface.

 

For example, I'm trying to isolate the HardwareResourceBase class, because I'm attempting to test some code the uses the result of SystemConfiguration.FindHardware("").

 

However, I cannot isolate the HardwareResourceBase class by doing:

public interface IHardwareResourceBase
{
  String UserAlias{get;}
  String MacAddress{get;|
  /* Other methods and properties of HardwareResourceBase */
}

public class HardwareResourceImpl : HardwareResourceBase, IHardwareResourceBase
{}

because the constructor to HardwareResourceBase is hidden.  In order to isolate HardwareResourceBase, I now have to create a full wrapper class, which is a major pain.

 

Please do not fully seal classes by hiding the constructor.  If a method should not be overriden, use the "sealed" keyword.

From what I can tell, there is one master DaqException that is used for everything that goes wrong.  This makes checking for certain exceptions extremely difficult, as you are now limited to checking the error message for certain strings.  This is fragile.

 

Please provide typed exceptions in the .NET DAQmx library.  For example, if a task times out, it should throw a "TaskTimeoutException", which might be a child of DaqException.  Or if the timing setup is invalid, the library would throw a "InvalidTimingConfigurationException".

 

Yes, I realize it's a bit of busy work to create a bunch of typed exceptions, but it makes error handling for consumers much easier.

Hello.  I'm working on an app to interface with a couple of ANT devices (Garmin Vector, Garmin heartrate monitor).  I've seen a couple of posts on this topic but nobody has posted code.  I talked to Frank Lezu at an NI day in DC a month or so back and he recommended I post about it here.

 

Anyone else looking for ANT/ANT+ support?  I'd be happy to share my code when it's not in a ridiculously embarrassing state but for now see this post for a braindump of my progress.

 

Thanks,

-Jamie

All of the JAT's VIs output results as "sequence" and "timestamp", eg. the "Max and Min Voltage.vi".

I use the JAT to analyze high speed differential signals with unit interval of just 300ps. Because of this, the timestamp output cannot meet the required resolution. However, if timestamp is replaced with double precision float, it should be able to.

I have brought this up with NI's tech support and this is what they recommend, which is to suggest this change over here.  

Task.png

 

 

It would be nice to have the ability to spawn a “Child” Task based upon a “Parent” Task local virtual channels. Today, this can be accomplished with global virtual channels, but not easily with local virtual channels within the Task. Today, we dynamically generate Tasks based upon the physical channels and save it to an external file.  There are many variations of this, but all require a decent amount of programming for complete automation. The external calibration interface in MAX has greatly improved over the years and now it is easy to calibrate multiple sensors at the same time. Not only that, but it is nice to have device setup and calibration information in one location.

 

 

 

Hello everybody,

I try to read data from SPS (SAIA SPS) with cgi technik. I have to read the values of 933 variables at the time.

I wrote a labview programm that you can find in Attachement. My problem ist, i can only read

170 values of the 933 values, i want,  at the time. 

Questions: Ist there a maximal numbers of variable to read or to write with Data socket at the time?

 

Thank you for your contribution

 

kind regards

colains

 

I've been told that in order to change module settings, you have to connect a development machine to the network has has the cRIO hardware. Most systems I build have a deployed application and are located somewhere else (i.e. no connected to my machine). It'd be nice if the cRIO module setting could be ported to the cRIO unit without having to connect a development machine and hit "connect" in the project.

 

For example, I had a cRIO unit in my office and set it up for a project. They installed it, wired it, and tested it. A few months later we needed to add a NI 9213 (16 ch Thermocouple module). It defaults to type J and degree Celcius. In order to switch it to type K, I had to bring my desktop out to the unit, connect to the network, and redeploy the cRIO. I called support twice and was told this is the only way to deploy the module settings. If i'm wrong, someone please correct me.

 

 

I'm thinking it could be another type of application builder or something you could add to an existing application.

 

 

The current way to programmatically update the GPIB-ENET/100 is to call firmwareupdate.exe and then use the windows API to tab through and enter data.  I suggest that we update the code so that firmwareupdate.exe could be called from the command prompt with parameters that will allow this process to be automated in a batch file.

 

Thanks!

 

Shawn S.

I am trying to use labview to make a stress strain curve for an experiment I am running. However my use of lab view is highly limited. I have a load cell that inputs voltage using a transducer techniques DPM3 to send the voltage signal and I have a laser extensometer that inputs voltages also. My question is about the graph and what is the best way to put the strain input n the x axis and the load input on the y axis. 

If you want to create low frequencies with AWGs (5422) you need to increase the buffer manually, OK  would be nice to have an option that the driver can do it.... however

currently the driver (seems to) try to fill the buffer at once, allocating huge amounts of memory only to write a standard function.

Ever tried 50mHz@5MS/s Smiley Surprised  

Please improve the memory management of the FGEN driver by writing smaller blocks...

 

Spoiler
OK, maybe the 5422 is a 'little' overkill to create a simple 50mHz Sine 😉 

 

I have recently upgraded the CPU in one of out test stand to the Window 7 operating system.

I was able get drivers for all of the 13 PXI cards that are used in the tests stand with the exception of the PXI 4351.

I use this card primarily for voltage measurements although I occasionally do use it with thermocouples. 

I see that the card will be obsolete in September and that is disappointing. 

This card was not inexpensive when we purchased it and the replacement is near $2000. Dollars. 

I really hope that an updated driver would be available before NI quits supporting their current product.

Consider the case where you have a cDAQ II chassis filled with analog input modules. If I have several modules that are running at the same rate I can use channel expansion to include them in the same task. Since they're in the same task they will have the same timing and triggering and will share the same timing engine. This leaves the other two timing engines available for tasks with different timing constraints. If I want to dynamically change the sampling rate of just one of the modules I would have to stop the task and, hence, the acquisition on the other modules. If the same timing engine could be shared among tasks, each module could have its own task and be independently controlled. I imagine this would involve a lot of changes to the DAQmx task structure but it's something that would come in handy.

A customer of mine was trying to read 8 thermocouple readings simultaneously over the course of a week and then store the data.  She quickly found out that there are memory limitations with Signal Express.  Eventually no matter how She saved or logged their data, she would run out of memory.  My product suggestion is to write code that will determine the RAM on a customers computer as well as available hard drive space and show customers (at the start of a task) exactly how long they can acquire signals without filling up their hard drive or seriously draining their resources.  That way when they start a process, they are aware of what they're working with in terms of space at that instant rather than when an error pops up three hours or so later.  Most customers would figure out these needs in advance of any acquisition, but for the ease of the customer, this would be a welcomed additional feature.  It would also be nice to have a document that explained how this time frame was calculated.  I suggest that when a task is ran, there is a pop up that explains the maximum amount of samples that can be acquired and time that can pass.  The document I mentioned could be available via hyper-link, and the hyper-link text could read "How did we calculate this number?", which could explain the process in more depth.

 

I have submitted this idea for Signal Express at the product suggestion page found at www.ni.com/contact ("feedback" link in bottom left of window).  I figured this would be a good idea for DAQ in general for any extended signal acquisition.

 

Shawn Shaw

Applications Engineering Department

National Instruments

What I would like is a contious sampling DAQ task which resets the count to zero evey time the DAQmx Read.vi is called.  This way you see which direction and by how much the encoder has moved betwen samples.  If it also provided the delta time that would be ideal. 

 

There are ways to do things like this currently but I have run up aginst two applications which would benifit forom something like this and I cannot be the only one. 

NI USB-4432 has 5 input,But only There are 4 channels with software-selectable IEPE signal conditioning (0 or 2.1 mA).

 

 

Make NI USB-4433  5 channels with software-selectable IEPE signal conditioning (0 or 2.1 mA).

 


 


 

As a user of the SCXI 1000 with a 1302 board, I had a lot of difficulty finding information on the pinout of my board. The 1302 is a direct link to the 6220 DAQ card on my computer. When I first looked for the 1302, I could find very little information on it. By adding a few windows and commands to the M&AE, I probably would have been able to solve my problem in minutes instead of days.

 

Solution

A. Being able to add boards which link to pinouts of the computer's DAQ and treat them as a board.

B. Have a list of pinout boards which can link to the DAQ. Since I was dealing with a 1302 which has 34 pins instead of 64 (or something close to that) I had difficulty finding the information on the pinouts. It was far easier to find the pinout of the 6220.

 

It could be I was a little annoyed at the amount of time that I spent on finding information on the 1302, but it took me far longer to find the information than it should have. This data should be built in.