LabVIEW Idea Exchange

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

Please add to AF:

Ability to Get Actor Enqueuer by Path through hierarchy of actors e.g. /root/pactor/chactor could be used to get the enqueuer to chactor. This would probably require actors to have unique paths pointing to them. Having a system manager keeping all enqueuers on local system is not a bad thing. It is a good thing.

 

LabVIEW AF is a fantastic tool to create multi-threaded messaging applications the right way. It promotes best practices and help write big yet scalable applications. 

I feel however that there is not enough included in the box 🙂 When looking at many other industry implementation of the actor model e.g. Scala Akka, Erlang, Elixir, microservices in many languages etc. you find that the frameworks usually include many more features. https://getakka.net/

 

I understand the decisions behind the design for AF yet would like to start a discussion about some of these.

I would like to see the following features being included into AF:
1. Ability to Get Actor Enqueuer by Path through hierarchy of actors e.g. /root/pactor/chactor could be used to get the enqueuer to chactor. This would probably require actors to have unique paths pointing to them. Having a system manager keeping all enqueuers on local system is not a bad thing. It is a good thing.

2. Ability to seamlessly communicate over the network and create your own queue specifications. For example actors should be able to talk between physical systems. Using the Network Actor is not a good solution, because it is simply to verbose and difficult to understand. The philosophy of AKKA should be embraced here "This effort has been undertaken to ensure that all functions are available equally when running within a single process or on a cluster of hundreds of machines. The key for enabling this is to go from remote to local by way of optimization instead of trying to go from local to remote by way of generalization. See this classic paper for a detailed discussion on why the second approach is bound to fail."

3. Improved debugging features like MGI Monitored Actor being inbuilt. https://www.mooregoodideas.com/actor-framework/monitored-actor/monitored-actor-2-0/

4. Included Subscriber Publisher communication scheme as a standard way for communicating outside the tree hierarchy. https://forums.ni.com/t5/Actor-Framework-Documents/Event-Source-Actor-Package/ta-p/3538542?profile.language=en&fbclid=IwAR3ajPR1lvFDyPFP_aRqFZzxR4FCQXh2nB2z0LYmPRQlnvXnsC_GQaWuZQk

5. Certain templates, standard actors, HALs, MALs should be part of the framework e.g. TDMS Logger Actor, DAQmx Actor. Right now the framework feels naked when you start with it, and substantial effort is required to prepare it for real application development. The fact that standard solutions would not be perfect for everyone should not prevent us from providing them, because still 80% of programmers will benefit.

6. Interface based messaging. The need to create messages for all communication is a major decrease in productivity and speed of actor programming. It also decreases readability. It is a better with the BD Preview in Choose Implementation Dialog in LV19, but still 🙂

7. This is more of an object orientation thing rather than actor thing but would have huge implications for actor core VI, or Receive Message VI. Please add pattern matching into OO LV. It could look like a case structure adapting to a class hierarchy on case selector and doing the type casting to the specific class inside the case structure. You could have dynamic, class based behavior without creating dynamic dispatch VIs, and you would still keep everything type safe. https://docs.scala-lang.org/tour/pattern-matching.html

 

The natural way for programming languages to evolve is to take ideas from the community and build them into the language. This needs to also become the LabVIEW way. I saw a demo of features of LV20 and I am really happy to see that many new features were inspired by the community. Lets take some ideas about actor and add them in.

 

I wanted to share my view on the direction I think AF should go. I see in it the potential to become the standard way to do big applications, but for that we need to minimize the barrier to entry.

When I want to select a given index of an Enum (Index, not String value) then it can be cumbersome.

I can make the digital display visible for the constant or control, but when the drop-down list appears.... yeah.

Enum drop-down.png

Can't we include the Index on the left side of the drop-down list (Spot my numbering error)?

Enum drop-down with index.png

It's not too hard here because they're sequentially ordered (more or less) but we have some enums with over 100 elements which are not so nicely ordered. Sometimes we just need to find out which element corresponds to a given index, or to select a given index directly. This is not so easy manually. I know we can enter the value for a constant in the DigitalDisplay area to select that element, but I still feel it would be nice to include the index when showing the selection list.

 

This is useful anywhere there is an Integer to Enum conversion (or the opposite).

Currently when using 3 monitors in a "V" shape (and possibly other configurations), pop-up menus in the development environment do not display in the proper locations. This makes finding and selecting items difficult as they are sometimes off-screen - especially with the windows maximized. See attached examples.  

Example%201

Example%202

New features that help us code more efficiently are great, but recently some have been added that change how things work and can be more of a detriment for people not used to them. I'm simply asking for an option to be added when a feature like this is in a new version of LabVIEW. Here are two examples of what I mean, from each version's documentation:

 

2017:

  • Maintaining Wire Connections When Moving Objects - LabVIEW 2017 automatically maintains wire connectivity when you move objects in and out of structures on the block diagram.

2019: 

  • Create Constant, Create Control, and Create Indicator - Creates a constant, control, or indicator from a terminal. These shortcut menu items have long been available and are now duplicated at the top of the shortcut menu.

Both of these are disruptive if you're used to doing things a certain way. Maintaining wire connections is nice, but only when I want it to happen (which is how it works when you disable it, it's much better.) I spent more time undoing and removing objects through structures than I ever saved from the automatic wiring. The one in 2019 just doesn't make sense to me. Those functions are already in the shortcut menu. Moving them to the top just moves other functions, like "Use default if unwired", that I constantly use.

 

I've disabled both of these using keys added to the configuration file, so it's possible that an option can do the same. I just wish it was included so I didn't have to go hunting for the configuration key every time something like this is added.

hello forum

 

thanks NI for the new features in LabVIEW 2019, so far I am liking most of the things you have done; except for that 1 item, context menu change

 

Why change the context menu (on right-clicking wires)?

2010-2018 1..3: clean up wire, create wire branch, delete wire branch (7.1...7.3: create constant, create control, create indicator)

2019 1..3: create constant, create control, create indicator (4..6: clean up wire, create wire branch, delete wire branch)

 

surely NI have reasons, but can try implementing a customizable context menu as a feature instead? I used to be able to write or edit my codes with muscle memory, but now I spend more time undoing things... Smiley Indifferent

 

maybe the next patch? Smiley Wink

One improvement that I can see helping both idea suggesters and moderators: Help us know the scope of potential LabVIEW change.

 

Many ideas here are marked complete because they've been implemented in NXG. (Samples 1, 2, 3)

The message I get from this status is, "That's a great idea. We'll put resources toward making our next-generation product do that awesome thing, but it's more work that we want to do on the current generation product."

 

Many others are marked declined because significant changes to LabVIEW aren't planned (presumably in consideration of end-of-life). (Samples 1, 2, 3)

The message I get from this status is, "That's a great idea, but it would cost us more than we want to put into our current-generation product."

 

I think both of those messages are totally valid, but I find myself increasingly reserved about suggesting ideas here because I don't know where those thresholds lie. Could the community receive some guidelines on what type of change might make it into LabVIEW? If we had those guidelines, we could save our own time by only suggesting things that might make it in and we could save the moderator's time by reducing the number of ideas to have to process.

I have a case where a user is supposed to control and run test on a number of connected products (gas analysing probes).

Each product is connected with an RS232 port and also to its own water pump. Before running the tests, the user should assign an RS232 port and a pump ID to each product. When that is done, data like serial number, FW version and status (OK, clogged...) is shown.

A UI good solution would be an array of clusters containing some controls (COM port, pump ID) and indicators (serial number, FW version, status), but this can't be implemented in LabVIEW.

However, each product can preferrably be controlled and monitored with a sub-VI and as all products are identical (except serial numbers and so on), instances of the same VI file can be used (with re-entrant and so on). The front panel of the sub-VI would look something like this:

Probe.png

 

Now you could show all these front panels as subpanels in the main VI, but the only way to do this in today's LabVIEW seems to be placing as many subpanels you would need on the front panel.

However, this design is really poor as it wouldn't be scalable. The ideal solution would be having an array of subpanels:

Array of subpanels.png

Then you could add and remove subpanels/products as you like, and also easily step through them by using a for loop in the code. The thing is that this can't be implemented in today's LabVIEW.

 

I really encourage NI to implement this feature as it would give a lot of benefits for both the user and the programmer.

I also encourage all the readers to kodus my suggestion.

When working with Maps and Sets with objects you have to specify the parent object or otherwise, you end up with broken wires - unlike arrays. Arrays will coerce the child objects to the parent, it would be helpful if maps and sets did likewise.

 Sets and Maps Objects.png

I have attached the project that you can use as a workbench.

 

1--Preview Queue Head idea.png

 

The element that is next-in-line to be dequeued is often called the "head" of the queue.*

 

The current name of the "Preview Queue Element" function suggests that any element could be previewed, not just the head. However, the function can only preview the head. Therefore, "Preview Queue Head" seems to be a more correct, more intuitive name.

 

"Preview Queue Element" would be the best name if the function would have an "Index" input that would allow any element to be previewed, not just the head. However, the downsides of the "Index" input are discussed in this idea: Preview Queue Element with Index .

 

The text in the help file of the function should read "Returns the head (the element at the front of the queue) without removing the element from the queue."

 

The downside of the new name is that it introduces the concept of "head" of queue. The concept is explained in the help text.

 

*In chapter 10 "Elementary Data Structures" (p. 234) of "Introduction to Algorithms", 3rd edition, by CLRS, it is mentioned that "The queue has a head and a tail".

When installing recent updates for LabVIEW 2018 an error message came up that said the installer needs access to "My Documents". However this location "file path" is not available.  My company has a drive mapping package that has the my documents located on the server as well as my favorites so it is automatically backed up for recovery purposes.  The installer keeps getting this error and forums state that the IT admins need to get involved every time to update & set my documents to local temporarily to install, then back to the server for automatic backups.  This is very tedious and takes a lot of manpower.  My colleague has the same issue with DIAdem 2018 as well.  Looking to possibly have a fix where it gives the user a browse option to find the file path it needs for the install.  

Using a ring control, it would be really nice if LabVIEW allowed the cases of a case structure to be defined by the ring contents, like an enum does rather than the ring value.  It would be easy to force it to have a default case to handle values that aren't defined by strings in the ring.  Just make sure you can still right click the case selector and tell it "add case for every value".  This would be very helpful when creating code to handle exceptions that return values in a ring and you want to handle each case.  It would be much quicker and less error prone than manually adding each numeric case that's defined in the ring.

When testing circuits at different temperatures, one can simulate the

whole circuit at different temperatures, or using the Analysis and

Simulation PARAMETERS to target an individual component.

 

Both of these options are handy, but limited. What would be nice

if one could right mouse click on a component at set it at a fixed

temperature and see how the rest of the circuit behaves.

 

Thank you Application Developer if you decide to add this feature.  

The 2017 and 2018 versions of the LabVIEW OPC UA Toolkit support data access amongst other features.

Is there already a plan or schedule to implement the PubSub amendment (nr 14) and provide PubSub support for the OPC UA toolkit?

When creating local variable , allow option for create as "read" or create as "write" .

Most times have to change created local variable to write after creation and it would speed up program development.

We like to keep the OS installation clean/stock.  That is, install RHEL and any packages required for the engineering applications and try to keep the installation packages to the minimum that are required.  Typically the EDA vendors will have a script that checks that all of the Linux package required the application.  If we find any dependencies we install on all machines.  The LabView Linux installation script wants to be run as root and install packages.  Would rather see a dependency check script so that we can install the dependencies ourselves and know what is being installed. 

 

For the application tool itself we don't want to install in /usr/local on all machines but rather install into a NFS mounted file server so that we only need to install once and not install on each machine individually.  The current Linux installation script doesn't take an argument to specify an installation directory other than /usr/local.

good day forum

 

it would be nice if an error locator can be used together with the current indicators. in medium and large applications, where multiple operations are executed in parallel, it could be a challenge just to locate where the error originated from, especially due to modularity, where the error causing function could be from any of the instance within the block diagram. instead of just reporting the function name that encounters the error, perhaps the option to include the nesting structure's information can be beneficial, especially for post deployment investigations, where debug application cannot be used (unavailable/lost source code, etc) and end user can do some self-checking first

 

several approaches came to me, which mostly revolve around VI scripting during development, that include:

  • renaming functions to include nesting structure information (eg. label for structure, sub-diagram, etc), or
  • including numeric identifiers in function names and building custom error table (identifiers for location)
  • traverse and filter error wire references, terminal tracing until nesting structure and and probing these wire per update during run-time

 

can be a nice feature to have, especially for remote support

Hello,

 

So as it is The VI analyzer has some limitations:

 

1. You can't fully customize the toolkit as some functionality is still not exposed as an API.

2. You can't build an executable with a VI analyzer.

 

I was hoping that NI could expose some more API that would allow for programmatic control of the error highlighting feature of the VI analyzer.

This will allow for creation of a more standalone application rather than being piggy-backed into the LabVIEW environment.

 

Thanks, Sher

I get that the Application.ini file can contain configurations options which might wished to be changed after compile, and I get that the application shouldn't modify its own exe.

 

But sometimes the ini file is used for things which cannot simply be hard-coded (or at least, I've found no way). For example, I am using unicode (it isn't my fault I have to resort to "experimental" modes in order to gain basic, fundamental functionality which should have been implemented as standard decades ago, but I'm not going to apologize for living in 2019), and in order for an exe to properly render unicode strings in controls etc. it requires the UseUnicode=True flag in the ini. What this means is that, in order to even function correctly at all, the exe is burdened with the constant baggage of an ini file which end users will never interact with, never understand, and frankly have a less-than-zero need to be exposed to in the first place. 

 

I've wanted this functionality on other occasions, but I'd be happy if someone could explain why I'm wrong about the unicode thing. 

There is a bit of inconvenience when I work with typedefs on FP. Very often it is much easier to edit appearance of the control on Front panel: 

Make enum width the same as other text fields

Set cluster elements spacing the same as other elements.

Font type and size - apply to all selected, not one by one.

But when control is a typedef, I have to do these changes only in typedef, otherwise they are lost when I change typedef type.

 

Idea is to add "Apply appearance to typedef" to shortcut menu.

 

Similar ideas on the same topic (appearance issues when using typedefs)

https://forums.ni.com/t5/LabVIEW-Idea-Exchange/do-not-update-non-strict-typedefs/idi-p/1878823

https://forums.ni.com/t5/LabVIEW-Idea-Exchange/Bridging-the-gap-between-strict-and-non-strict-typedef/idi-p/3304297