Jump to content

eberaud

Members
  • Posts

    291
  • Joined

  • Last visited

  • Days Won

    10

Everything posted by eberaud

  1. Perfect analysis. I fixed the issue by putting a case structure in the combobox value change event. I only perform the code that updates the value of the tree if the combobox has the keyfocus. This disables the selection through the dropdown of the combobox, but in my actual application I hide the dropdown button anyway. Thanks ned
  2. I have been trying to understand what's going on with my tree control and I'd like to share this with the community to see if somebody has seen this behavior before. Maybe there is something obvious that I am not seeing... I attached the VI (LV2011) with instructions inside (will take you 20s to perform the experiment, I dismantled the VI to its bare minimum). Please don't comment on the overall architecture (state machine...) since I modified the VI just for the sake of posting it here and removed all advanced features. Long story short, after programmatically modifying the value of the tree, I modify its value a second time by clicking directly on one of the tree items. I then expect the NewVal value given through the left node of the value change event case to match the value of the tree terminal. Depending on the code that first modified the value programmatically, sometimes this expectation is met and sometimes it isn't. Run the code, it's easier to understand that way... Thanks for your feedback! Tree value issue.vi
  3. Weird. There is a similar check inside ...\vi.lib\gmath\parser.llb\Number Split.VI but this one seems right (44:comma, 46:dot)
  4. Yes actually I have been using this exact technique for a while. Thank you for the clarification
  5. Old thread, but I know threads have a long life on LAVA I just wanted to get clarification about one aspect of this great paper. The factory pattern is used to reduce the linking, and I understand how it does that. But in this example, loading just the dinner simulator class will load all the applicances children and all the cookbehaviors children, so this example doesn't take advantage of the ability of the factory pattern to avoid loading children classes, as explain here for example. Am I correct? The example given in the video uses the Get LV Class Default Value.vi to achieve that.
  6. Wow I didn't even know you could extend it! Thanks for the help Thomas
  7. I've always found that the LabVIEW help didn't explain well enough how the Match Pattern and the Match Regular Expression work. Do you know a good source for learning more about how to use them properly? Thanks
  8. Well with an explicit node (is that an official wording?) you don't get a reference, so you couldn't close it anyway even if you wanted to
  9. The history data is probably not lost. It's just that LabVIEW forgets to retrieve it. If you force a change of scale (for example modify the autoscale property of the X scale), then the whole history data should be retrieved. But long story short, a consensus is that charts are nice quick way to view some data while you're analyzing a certain part of your code during development, but they are not suited for a permanent solution in an application. In the latter case, you want to switch to graphs (either waveform or XY based on your needs).
  10. Things are much clearer now. Thanks! I guess my main reason for using a timed loop is that I "feel" the duration of each iteration (I mean the time gap between the start of iteration n and the start of iteration n+1) is easily controlled and measured. If I use a while loop and I want each iteration to last 10ms, all I can do is throw a "wait until next multiple" that executed in parallel with the rest of the code inside the loop, but I have no guarantee that the duration I'm talking about will be 10ms, and it's hard to measure as well...
  11. Wow this changes things a lot. We have timed loops all over the place (CAN driver, datalogging engine, graphing engines, automation engine, ...). Are you suggesting to replace them with regular WHILE loops? Edit: Can you direct me to a resource explaining the cost of timed loops? I couldn't find anything but advantages online...
  12. I just created a very lean exe that will simply pop-up a message when the time stamp will be bad. I'll post here to say whether I could reproduce the issue or not. I've thought about the workaround you suggest, but since the primitive you talking about doesn't have an error input, it would execute in parallel with other constructs inside the loop, which doesn't provide the same accuracy. Unless I use a sequence of course, but I don't want to add more code than is necessary in this loop since I need it to run fast. Thanks for your reply
  13. BUMP. I think this is an issue worth to worry about. Do you think I should request NI to create a CAR?
  14. The simplest way I can think of is to have the "brat" code generate the signalling event and also set a Boolean to True. The event case "Value change" can read this Boolean and always set it to False afterwards. If it's true, the event was fired by the "brat", if it's false, it was fired by the UI.
  15. Unfortunately I didn't manage to dig deep into your code since a lot of it is beyond the scope of TDMS. However here is how my architecture works, in case it can inspire you: Writer side: Create file withDisable Buffering = False Asynchronous = False (I use Synchronous R/W) Set Channel Information (couldn't find this one on your diagram but again I didn't look everywhere)Channel names : the number of rows my 2D Array has in a write operation Samples per channel = how many samples for each channel at each write operation (number of columns my 2D Array has) Write using a 2D array that I don't need to transpose since it's built to have channels = rows and samples = columns (Advanced Synchronous Write) Reader side: Open file withDisable Buffering = False Asynchronous = False (I use Synchronous R/W) Operation = Open (read-only) --> I think this is where you'll get an error if you don't open it in read-only Read data usingSet Next Read Position Advanced Synchronous Read Edit: and of course both the reader and writer can perform their tasks on the same file simulateously
  16. Well I don't have an explanation unfortunately but I can reproduce it at least!
  17. Hi, I struggled quite a bit with it too but now everything works really nice, so let's see if I can help. There is a disable structure, should I look at the enable or disable case? In case it's the enable one, can you make a simplified version that has all the TDMS code in one VI and demonstrates what you're trying to achieve on the TDMS side only?
  18. If you set the timing source to <absolute time> then the actual start is expressed as an absolute time.
  19. Our data logging engine is based on a timed loop, and the Actual Start left node is used to log the current absolute time. 99% of the time it works perfectly, but once in while it will give the value 11/11/1903 10:57:12.702 PM. Each time it gives an erroneous value, it's this exact value. Has any of you ever seen that? We use LV2011 32bit.
  20. Yes this is what I thought the whole functionality was. Thanks.
  21. I mean the Reshape array that takes a variant as an input and generates another variant as the output, the data manipulation happening on the type descriptor side. The OpenG lib seems to be a bit old, plus you said that it sometimes perform 10 times slower than the LV lib. So I try to avoid it when I can...
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.