Jump to content

styrum

Members
  • Content Count

    22
  • Joined

  • Last visited

Everything posted by styrum

  1. The NI definitions of tag, stream and message/command are given, for example, in this cRIO guide (p. 29): http://www.ni.com/pdf/products/us/fullcriodevguide.pdf
  2. It is indeed amazing and sad how attractive and popular "straw man argument" is. I won't even say anything else.
  3. The matching discussion on NI forums: https://forums.ni.com/t5/LabVIEW/Eleven-Ways-to-Update-an-Indicator-from-within-a-subVI-Their/td-p/3938618
  4. Yes, checking the watchdog queue takes a lot of time (if not most of) in each sender iteration. Please check out a "sequential version" in the latest posts or try putting a Disable structure around those Preview Queue Element nodes in the sender VIs (you will have to stop everything with the stop button on the toolbar of the Main then).
  5. styrum Member ‎06-18-2019 04:17 PM Set Control By Index added. Wow, it is fast! "Speed" calculation in the "sequential" version corrected to count the iterations of the receiver loops. Fastest update of indicator from subVI (5).zip
  6. Ok, OK, my bad, I left Debugging enabled. This is not a commercial app. This is is just some "food for thought", and something to play with, which you would otherwise not have the time to put together yourself. But now you can find some time (much less) to play with it. The goal was to get people to play with it, find flaws, "unfairness", etc. So I am glad that happened so quickly. Here is a version that has debugging disabled plus a "sequential" flavor of the whole thing. Some disclaimers right away: 1. Yes, I deliberately do not count the iterations completed by sender loops but not completed by the corresponding receivers by the time the senders are done, because I do want to count only fully completed "transactions" in evaluating "performance" 2. No, I don't say that lossy and non-lossy methods are comparable "1 to 1" in general context. But for the declared purpose of this particular experiment, updating an indicator in a UI VI, where the user is interested only in the latest value, it is fair to put them "together". Fastest update of indicator from subVI (3).zip
  7. Well, the very point of putting together this code is for people to see the numbers for themselves and that I didn't "cheat" on any of the tested methods to make some look better than others. Their significantly different performance numbers are real. In summary, the main findings are: 1. (Widely known) Passing a control reference to a subVI or a VI running in parallel to the VI where the control(indicator) is located with the purpose of using that reference to update that control/indicator is the worst you can do. 2. (Not so well known) Using "user events" in event structures for the same purpose mentioned and moreover, for implementing asynchronous communications in messaging architectures between "modules", "actors", parallel loops, etc. instead of regular queues and notifiers and now channels is (softly speaking) not a very good idea either from the performance point of view. 3. Even the fastest "channels" are not better than the "good old" notifiers and queues. At least channels give more features and allow to do things impossible before. Which hardly can be said about user events. DQMH is one of the frameworks which rely heavily on such use of event structures one can recall right away. There are others, I bet.
  8. Yes, I know, you wanted to do this some day too. So I did it for you. Just run (and then stop) the Main VI from the attached set (Saved in LabVIEW 2016 32-bit). I suspect (and hope) the numbers will be quite a surprise and even a shock, especially for the fans of one particular method and some very aggressively promoted frameworks which use that method. Fastest update of indicator from subVI.zip
  9. Maybe that will work too (again with a control, not with a constant). But there is no explanation there regarding the type expected as the Conpane (variant) parameter of that Set Conpane method. How do we get that Conpane from a VI we want to take it from before we can feed it to that method?
  10. OK. So OCD is "obcessive compulsive disorder" I figured. Sorry, sickos patients, my native language is not English, but I still know what past participle is and even, for example, when to use past perfect tense in English (How many Americans do?).😋 "Cast Operator: () (programming) A type cast provides a method for explicit conversion of the type of an object in a specific situation. v. cast, casted" (https://english.stackexchange.com/questions/94565/can-casted-be-the-past-tense-of-cast)
  11. For whoever is looking to do anything like this or anything else as far as programmatically changing code in a VI goes, I think I should remind that the best way to find and get a reference to any object you want to mess with on the FP or BD of the target VI is one of "hidden gems", <LabVIEW 20XX>\vi.lib\Utility\traverseref.llb\TRef Find Object By Label.vi
  12. Thank you, Darin! That's exactly what I needed! By the way, what does OCD stand for in this context? BTW2: After calling Change to Constant the constant appears instead of the terminal exactly at the same place the terminal used to be, just as if I right-clicked on the terminal and selected Change To Constant. Well, at least in LabVIEW 2016.
  13. I want to use a Call By Reference or a Start Asynchronous Call node in my TEMPLATE code. Which means I MUST have a type specifier constant (or control) wired to the Open VI Reference. In my CONCRETE code created based on the template code using VI scripting I need to replace the type specifier, or rather the VI which that type specifier extracts the connector pane from, so that the Call By Reference (or Start Asynchronous Call) node can use a new connector pane within themselves instead of the one it has in the template code. Normally (manually) we just drag and drop a VI with a desired connector pane onto type specifier constant or control. But how can we do that (tell it which VI to use) programmatically?
  14. How can I programmatically change the VI which such constant uses (which we just drag onto it normally)? It is a just a "Constant" class according to its ClassName and can not be typecasted to anything else and doesn't seem to have any property or method to set that VI.
  15. So, can you make a tutorial (provide links to info/examples) on specifically that topic: How to make your own project provider, how to add your own items/code to the popup menu on the items in the project editor tree, including your own New..., the same way way Open GDS and AF do? Is this the best place to start? https://forums.ni.com/t5/LabVIEW-Project-Providers/gp-p/bymqyodmkc?profile.language=en What specific troubles did you run into that are not covered there?
  16. In his "Don’t Wait for LabVIEW R&D…Implement Your Own LabVIEW Features!" presentation Darren Nattinger advised to not mess with project providers. So, he didn't give any links to anything on this subject. How did you figure out how to do it? Please provide links/code on how to make your own project provider. Is this the best place to start on this topic? https://forums.ni.com/t5/LabVIEW-Project-Providers/gp-p/bymqyodmkc?profile.language=en Any advice/help/examples you can offer from your own experience making your own project provider?
  17. Here is an implementation of a queued Mealy State Machine. Updated for 2016: https://forums.ni.com/t5/Reference-Design-Content/Event-Driven-Queued-State-Machine-EDQSM/ta-p/3841938 Original LAVA thread: https://lavag.org/topic/4623-simple-event-driven-queued-state-machine-with-front-panel-events-and-a-timer/
  18. OK, so ActiveX still works in Excel 2016. But it is older than .NET and they can still deprecate it in the next version. So, experience on how to communicate with Excel via .NET can become very valuable.
  19. Any idea how to write a 2D array of variants as a whole into Excel sheet using .NET calls? Doing it one cell at a time is apparently not feasible for large recordsets.
  20. Did you try that 'Excel - write table.vi' example shipped with LabVIEW? Maybe there are some options during installation of Excel/Office or after it to install/turn on or not install/turn off ActiveX support?
  21. Now that it looks like Microsoft deprecated ActveX Automation interface in Excel 2016, the only other interface left is .NET interop assemblies. I have tried to reproduce Excel - Write Table.vi using .NET instead of ActiveX. The result of the effort is attached. There is a big problem though: The Range.value2 property could take 'anything' without a problem when using ActiveX (it was taking any variant)! But now it wants a .NET object. And the 'To .NET Object.vi' doesn't accept a 2D array of variants! So, say getting a recordset from a database (which is returned as a 2d array of variants) and then writing it, as it is, to a new Excel workbook is no longer possible as far as I understand. This is really sad. A 2D Table of strings or doubles is still OK. So, if you need to use those, you can with the attached code Write Table to Excel with DotNET.vi
×
×
  • Create New...

Important Information

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