In Place structure bundle/unbundle behaviour

Hi all,
I have noticed unexpected behaviour of the in place structure at edit time.  This VI illustrates the behaviour I see.  Essentially, if you add items into the cluster above the element being unbundled in the structure, the structure changes the element it is operating on.  This is not seen with the while loop.  This is causing me a headache, but is it a bug, or expected? Does anyone agree this is a bug?
Kind regards,
Michael.
Attachments:
In Place Behaviour.vi ‏6 KB
After adding dbl 2.png ‏16 KB
Original.png ‏15 KB

NI please say this is a bug and fix it.  I was just bitten by this and my code did not break because the data type of the Nth-1 item was the same as the Nth item.
I use the unbundle and bundle to modify a value in the cluster based on the name of the data which is how clusters work.  I then do the same operation on the same data in the IPE structure.
If you make the bundle grow by one, and add an item to it, the VI will be runable, but the two operations are no longer the same because the IPE is now modifying different data.
Attached is my exampe saved in 2013 (not SP1).
Unofficial Forum Rules and Guidelines - Hooovahh - LabVIEW Overlord
If 10 out of 10 experts in any field say something is bad, you should probably take their opinion seriously.
Attachments:
In Place Cluster Bug.vi ‏7 KB

Similar Messages

  • LV OOP when using accessor methods (subVIs) or bundle/unbundle operation?

    Hello
    When should I use the (private) accessor methods (subVIs) and when the bundle/unbundle operation to access the class data? What is the reason that the bundle/unbundle operation is introduced to LabVIEW OOP? I need some rules for a coding guideline.
    Thanks
    Solved!
    Go to Solution.

    Thanks for your hints. I wanted to understand the differences between a private vi access and the unbundle operation like in the picture.
    I found some more explanations on the website: http://www.ni.com/white-paper/3574/en
    -> "Creating "read" and "write" methods for every data value in a class is a process acknowledged to be cumbersome. LabVIEW 8.5 introduced the ability to create accessor VIs from a wizard dialog, and LV2009 added further options to that dialog.
    We were concerned about the performance overhead of making a subVI call instead of just unbundling the data. We found that our current compiler overhead for the subVI call is negligible (measured between 6 and 10 microseconds on average PC). A bundle/unbundle operation directly on the caller VI versus in a subVI is nearly the same amount of time. We do have an issue with data copies for unbundled elements because much of LabVIEW's inplaceness algorithm does not operate across subVI boundaries. As a workaround, you may also choose to avoid accessor methods in favor of methods that actually do the work in the subVI to avoid returning elements from the subVI, thus avoiding data copies. This choice is frequently better OO design anyway as it avoids exposing a class' private implementation as part of its public API. In future versions, we expect that inlining of subVIs will become possible, which will remove the overhead entirely.  
    We feel in the long term it is better to improve the editor experience and the compiler efficiency for these VIs rather than introducing public/protected/community data."

  • Add element in to bundle/unbundle Functions

    In the Bundle/Unbundle functions, Add Element is adding the same element.no use of adding same (again need to Select Item).based on the Cluster order if labVIEW adds next element it is usefull.

     I typically just resize the bundle node.

  • Editor bug if you drag a case structure over an index/replace elements node on a in place structure

    To reproduce:
    Drag a case structure over a index/replace array node
    You'll end up with this train wreck. Autocleanup no longer works
    Interestingly, you can still get it to compile but setting the boolean to true doesn't run the true case. Warning: dragging the below snippet onto your block diagram will probably crash LabVIEW
    Select all that and drag it into a new VI. Run autocleanup and the development environment will crash: Exception: Noncontinuable exception (0xC0000025) at EIP=0x00000000
    Running LabVIEW 2014 SP1 with nothing special.

    To quote Obi-Wan
    This is not the bug you are looking for..........
    Now search for "Clear as mud"
    Having a Wired treminal inside an IPE driving conditional code should break the snot out of that code and cause the compiler to puke all over!  The lack of check for that insanity is causing the crash!  Don't do it!  Just think of how you are abusing the poor IPE.  What if you had a breakpoint on the Inplace Boundary and changed the boolean?  That would necessatate a copy inside an inplace structure....... NO!!!!
    Or, more to the point as best I understand: (Add duct tape adound head as needed)
    An IPE must exist in one "Clump"  Terminal Reads exisist in their own "Clump" (although you can read many terminals in one clump)  So you require a clump to read the boolean terminal inside another clump.  Clumps cannot reside in clumps since clumps are clumps that stand apart from each other by definition.  The run arrow should be broken but is not- hence LabVIEW crashes. Makes sence to me  except the clumping algorythm didn't catch the insanity and the run arrow wasn't broken.  so the next edit caused all hell to break loose.
    (If I missed domething here I am going to learn something today)
    Jeff

  • Port-channel bundled/unbundled

    Is this bundled or not bundled, is what I'm trying to confirm.
    I get two conflicting messages about, if the port-channel bundle is working or not working. (There is traffic on two channels intended to bundled)
    Version 12.2
    Switch1
    Config on port 1/1 is encap 820.1q, node (defaul?)
    Config on port 9/1 is encap (default?) ,and mode trunk
    Switch1 and Switch2 configs are similar
    Switch1 extracts
    Switch1>sh int po 1 eth
    Age of the Port-channel = 01d:04h:02m:05s
    Logical slot/port = 14/1 Number of ports = 2
    GC = 0x00010001 HotStandBy port = null
    Port state = Port-channel Ag-Inuse
    Protocol = PAgP
    Ports in the Port-channel:
    Index Load Port EC state No of bits
    ------+------+------+------------------+-----------
    0 55 Gi1/1 Desirable-Sl 4
    1 AA Gi9/1 Desirable-Sl 4
    Time since last port bundled: 01d:03h:45m:47s Gi9/1
    Time since last port Un-bundled: 01d:03h:57m:35s Gi9/1
    =======================================
    Switch1>sh int g9/1 trunk
    Port Mode Encapsulation Status Native vlan
    Gi9/1 on 802.1q trunk-inbndl 1
    (Po1)
    =========================================
    Switch1#sh runn int port-channel 1
    Building configuration...
    Current configuration : 160 bytes
    interface Port-channel1
    description EC TO ESW002 G1/1,G9/1
    switchport
    switchport trunk encapsulation dot1q
    switchport trunk allowed vlan 200-202,301
    end
    Switch1#sh run int g1/1
    Building configuration...
    Current configuration : 189 bytes
    interface GigabitEthernet1/1
    description To ESW002 G1/1
    switchport
    switchport trunk encapsulation dot1q
    switchport trunk allowed vlan 200-202,301
    channel-group 1 mode desirable
    end
    Switch1#sh run int g9/1
    Building configuration...
    Current configuration : 173 bytes
    interface GigabitEthernet9/1
    description to ESW002 9/1
    switchport
    switchport trunk allowed vlan 200-202,301
    switchport mode trunk
    channel-group 1 mode desirable
    end

    You have setup a trunked etherchannel and it appears to be working correctly. this info tells you that the channel is working correctly, to check the trunk do a "show int trunk" also.
    Switch1 extracts
    Switch1>sh int po 1 eth
    Age of the Port-channel = 01d:04h:02m:05s
    Logical slot/port = 14/1 Number of ports = 2
    GC = 0x00010001 HotStandBy port = null
    Port state = Port-channel Ag-Inuse
    Protocol = PAgP
    Ports in the Port-channel:
    Index Load Port EC state No of bits
    ------+------+------+------------------+-----------
    0 55 Gi1/1 Desirable-Sl 4
    1 AA Gi9/1 Desirable-Sl 4

  • LabVIEW/TestStand In-Place Structure?

    I'm trying to minimize latency as much as possible at the interface between TestStand and LabVIEW regarding data acquisition (actually using 4 Measurement Computing analog input boards but the concepts should apply regardless of which hardware).
    Rather than constantly calling a VI (in a while loop) requesting samples I was thinking about giving the VI the SequenceContext and letting it set Fileglobals directly.  I'm setting FileGlobals and will provide a sequence that as many as 4 simultaneous threads could call all wanting access to the same data.
    For various reasons, I actually want to set up a somewhat large ring buffer on the TestStand side ~75MB holding "pages" of samples.  Essentially, I'll be taking 100-200ms chunks of data and stacking them together in these ring buffers up to 20 seconds worth of time.  I'm aware that I'll be missing samples in between each chunk and I'll benchmark how bad this is but based on some initial experiments with the idea I think I'll be able to live with it.
    So...that brings me to the actual question, is it possible to somehow give LabVIEW the 'pointer' to these memory location of TestStand and have it operate on it directly?
    Am I making a bad assumption that constantly calling a VI and passing potentially large blocks of data around isn't a performance problem?

    There is the "Set Property Value.vi" in LabVIEW.  It is polymorphic. Just set the lookup string to "Fileglobals.Variable".  The dot notation is kind of important.  I do not know what kind of performance hits/gains this will give you though.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines

  • Using LV Class Property Nodes in In-place Element structure causes the code to halt

    I have some code written in LV RT 2010 that uses property nodes from a LVOOP class that I created.  I am using access the property node from inside an in-place element structure.  When the code reaches the property node, LabVIEW stops running.  (as if the abort button was pressed).  I verified this behaviour using highlight execution.  When I remove the in-place structure code runs fine.
    Is this is know bug in LabVIEW?  Is there a CAR to resolve this created for a future release?

    Bob,
    I tried to reproduce the behavior you're seeing by recreating the Trigger and Trigger List classes, but I have not been able to reproduce it.  Please take a look at my version of the project in the attached zip file.  Take a look at Test.vi, and feel free to modify and repost it to show me how to make the problem occur.  I would like to file a CAR to make sure we get the problem fixed, but I will need to be able to reliably reproduce it first.
    On a similar note, you can get much better performance out of the Process Triggers VI by preallocating the list array, instead of using build array in a loop.  Take a look at Process Triggers2.vi in my project.  You can run Benchmark.vi to see the performance difference between the two different approaches.
    Chris M
    Attachments:
    triggerlist test.zip ‏165 KB

  • An "Empty" In Place Element Structure rather than using one Flat Sequence?

    Altenbach's neat Idea here got me thinking of the various ways we do synchronization, and I sat down an In Place structure and thought, why not? It saves a "tiny" bit of space, but personally, I think it looks better - especially for the typical Delay-in-a-Box. Thoughts or caveats?
    Richard

    You could use a single run while loop, it'll be correct usage and look different.
    I recently used that solution to get the 1st element of 5 arrays at once.
    /Y 
    LabVIEW 8.2 - 2014
    "Only dead fish swim downstream" - "My life for Kudos!" - "Dumb people repeat old mistakes - smart ones create new ones."
    G# - Free award winning reference based OOP for LV

  • Bundle and Unbundle functions not dragable

    In the Bundle and Unbundle Functions ones the input cluster wire is connected the function automatically bundle/unbundle the all the element.
    we cant select the elements ,there is no drable option.
    but in the document shows the dragable option.

    AristosQueue: I verified in the LabVIEW 6.1 the Bundle function not dragable once the input is connected.
    as shown in the figure both bundle and unbundle shold acts same.

  • I would like some help in determining the proper structure/implementation

    I would like some help in determining the proper structure/implementation for the following scenario:
    I have ~10 steel rods that have been equipped with a strain gauge.  The most I would have is ~30 steel rods.
    Each setup has had a 10 point calibration done.
    These steel rod/strain gauge setups are assigned a calibration number.
    The data would be grouped for each steel rod and identified by the calibration number. 
    I would like to use that calibration data to determine the Young’s Modulus for each steel rod and store that within the specific rod’s information.
    I want the user to be able to add new steel rods dynamically and the Young’s Modulus calculated and stored with it.
    There are two different types of rods.
    The cross-sectional area of the rod needs to be stored and that value is constant based on the rod type (so there are two different area values).
    After a rod’s calibration data is entered the first time, the data should be static so it doesn’t need to be re-entered.
    The user would enter the cal#, the 10 point calibration data, and the rod type.
    The user will only see the steel rod cal# on the FP.
    I am using a queue-based producer/consumer with event structure for the front panel interface.  So I’m thinking whenever a rod cal# was added I would call a subvi where the calibration data can be entered and then the Young’s Modulus could be calculated and stored.  An option to edit/review existing cal data should be available.
    LabVIEW 2010, Win 7.
    My initial idea was:
    Rod Arr – array of clusters:
    Rod Info - cluster:
    Calibration number – string
    Rod Scale cluster:
    mV/V – double array
    force – double array
    Young’s Modulus – double
    Rod type – enum
    Cross-sectional area – double
    I have not implemented this because I’m not sure how to implement that AND keep the data after it’s been entered.  And all of the bundling/unbundling anytime I want to access/edit any rod information can be BD consuming.  I thought a lookup table might work.  When I looked on the forums for a lookup table I was pointed in the direction of arrays/clusters.
    So I have two questions:
    What would be the best structure for the steel rod data?
    What would be the best data type for the calibration# that the user can edit (enum, ring, ?)?

    I would make a couple of small change to your proposed data layout (highlighted in blue):
    Rod Arr – array of clusters:
    Rod Info - cluster:
    Calibration number – string
    Array of Rod Scale cluster:
    mV/V – double
    force – double
    Young’s Modulus – double
    Rod type – enum
    Cross-sectional area – double
    For the calibration data, I would have an array of clusters rather than a cluster of arrays.  IMHO, this makes it easier to index through the calibration points, and makes it less likely you will ever have a situation where you don't have the same number of mV/V and force points.  I'd also move the Young's modulus, type, and area info into the Rod Info cluster.
    I prefer to store this type of configuration in the system registry, but that is more complicated and far from universal in the LabVIEW world.  A simpler way would be to simply pass the entire array to the "write to binary file" function.  If you do this, however, you might want to add a version number, otherwise it will be very difficult to maintain backwards compatibility if you ever need to change the data structure.
    As far as the control type, it depends on what the user is entering.  If the user is mostly entering calibration numbers already in the system, I would use a (system) combo box.  This allows the user to select an existing calibration number from the menu, but also to enter a new calibration number if they need to.  If the user will almost always enter new calibration numbers, then I would use a standard string control.  Either way, you'll probably want to validate the format of the number the user enters.
    Mark Moss
    Electrical Validation Engineer
    GHSP

  • Questions about where to Unbudle and Bundle

    I have been wondering lately, as I clean up some code, how much it matters where clusters are unbudled and bundled. Please refer to these two pictures, and, if you could, provide your opinion. Thanks!
    Diagram 1
    Diagram 2
    Richard

    I don't think you will save much memory between a single large string and a cluster. You will however make the code more obtuse. I would recommend against using the string. I have often thought about the best approach for passing data around and have in the past used a "God cluster" which was a cluster of clusters. Each internal cluster had the data organized in a logical fashion and kept related items together. The "God" cluster was used primarily to provide a single wire through the state machine. Each state would only need to extract/update the data on the cluster that it needed but from a BD standpoint it reduced the clutter of wire. When I bundled/unbundled and I would not show the full name so it looked more like a wire with the single cluster.
    I have been thinking more about an LVOOP option. A base class could be defined which provided the methods for setting/getting configuration parameters. The derived classes would implement the specific instances of the the data related to the specific configuration data. I would think this approach would use a name to do the lookup for the specific parameter. Some of the methods could include the means to read or write these parameters from an ini file. This approach would work fairly well for defined data types but I'm not sure how well it would work for typedefed data. I haven't had time to investigate this much further than a thought experiment. The one benefit of this is that it would provide a standard method for all of my applications. The downside though is that it might take a bit of BD space since it would require the code to specify the object type it was dealing with every time it acted on the class wire.
    Mark Yedinak
    "Does anyone know where the love of God goes when the waves turn the minutes to hours?"
    Wreck of the Edmund Fitzgerald - Gordon Lightfoot

  • Tentative bug report: property node (and other objects) resizes structure in which they are dropped even when this is not needed

    This one has bugged me for a while, so, since I am in a mood to report annoying features, here it is:
    On the diagram, when you drop an object that could have its size increased by user action (for instance a property node in which you chose "Value", which is a short property, but you could later change this to a "longer" one, which admittedly might require more space on the diagram), a case structure in which you drop it, will automatically increase its size.
    Let me illustrate this with ONE example (can be reproduced with other objects such as enums, clusters, etc...).
    Here is a simple diagram:
    Note that I am going to create a property node from the front panel. This, for a reason that makes the beauty of this "feature", is very important. Apparently, if you create the property node from the diagram, nothing weird happens. The exact location where I will drop the node is not very important but needs to be close enough from the border.
    Here is the result (LV 2011 but as I said, this has bugged me for a few versions already):
    Basically, the case structure (and the whole diagram as a matter of fact) has expanded.
    This is particularly annoying, say, when you are creating a diagram with 10 cases in a case structure and you start dropping things such as property nodes in each case: the structure keeps growing, and growing, and growing...
    That also works with Event structure, and I am ready to bet, with other as well.
    As I said, it is also not limited to Property nodes. I have noticed that this happens if you drop a cluster constant that contains an enum (presumably because some of the enumerated strings are longer than others).
    I could speculate why this is the case, but that is not my job.

    Actually, this might not be true. I found a variant of this behavior. With "Place Structure with Auto Grow enabled" unchecked, here is what I observed while dropping a property node on my diagram:
    Before:
    After:
    This is the expected behavior. The Property Node is partly hidden inside the Case Structure I dropped it in. Now that's not what I wanted to do. I wanted to drop it in in the innermost Case Structure:
    The problem is that now this Structure has grown (as has the whole diagram) to leave space for the whole Property Node:
    It is a subtle bug in the sense that I tried to reproduce it on a new VI with a series of nested Case Structures, but it did not result in this behavior.
    Anybody caring to comment?

  • Binding Resource Bundle to Portlet

    When i place resource bundle in my webroot resources folder,and i added the tag resource-bundle for my portlet.
    Its throwing exception can't find resources bundle exception.Anyone knows how to bundle resources to portlet.
    Please help me.

    For 903 codeline, you'd have to implement db lookups for resources in each message bundle. The message bundle has to be a subclass of JBoResourceBundle, but you can re-implement getContents() to go to DB to buildup the messsages.
    For a future release, we're working on a more 'global' override for all message lookups. There's a class called StringManager which is used for all framework String lookups and that is being made overridable to allow for 'one-point-of-override' for all message bundles within the framework.

  • Can't Unbundle By Name slider

    Hey,
    I'm trying to use a slider control with two sliders. The Unbundle By Name does not seem to work correctly. Is this expected behavior, or has it already been fixed in 8.5?
    Error: "Some items in the cluster input to this Bundle/Unbundle By Name function are either unnamed or have the same name as other items."
    I'm using LabVIEW 8.2 on WinXP.
    Message Edited by LabViewGuruWannabe on 11-20-2007 08:44 PM
    Attachments:
    UnbundleSlide.PNG ‏7 KB

    Well, the sliders don't have names. I don't really see the need. How should they be called?
    If you want to name them, cast them to a cluster with randomly named elements as follows.
    Message Edited by altenbach on 11-20-2007 07:45 PM
    LabVIEW Champion . Do more with less code and in less time .
    Attachments:
    SliderNames.png ‏4 KB

  • Can't find bundle for base name Error - Portlet Localization

    I am trying to have the portlet content localization to work. I am using the 5.0.4 with Web Logic.
    I placed following files in the same directory:
    Portlet.jspStaplesBundle.properties(default)StaplesBundle_en_US.propertiesStaplesBundle_fr_FR.properties
    However, when I load the portlet, i got the error. "Can't find bundle for base name StaplesBundle, locale en_US". Do I need to place the bundle in a specific folder? I copied detailed errors below. Any ideas?
    java.util.MissingResourceException: Can't find bundle for base name StaplesBundle, locale en_US at java.util.ResourceBundle.throwMissingResourceException(Ljava.lang.String;Ljava.util.Locale;)V(Unknown Source) at java.util.ResourceBundle.getBundleImpl(Ljava.lang.String;Ljava.util.Locale;Ljava.lang.ClassLoader;)Ljava.util.ResourceBundle;(Unknown Source) at java.util.ResourceBundle.getBundle(Ljava.lang.String;Ljava.util.Locale;)Ljava.util.ResourceBundle;(Unknown Source) at jsp_servlet.__portlet._jspService(Ljavax.servlet.http.HttpServletRequest;Ljavax.servlet.http.HttpServletResponse;)V(__portlet.java:162) at weblogic.servlet.jsp.JspBase.service(Ljavax.servlet.ServletRequest;Ljavax.servlet.ServletResponse;)V(JspBase.java:33) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run()Ljava.lang.Object;(ServletStubImpl.java:996) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(Ljavax.servlet.ServletRequest;Ljavax.servlet.ServletResponse;Lweblogic.servlet.internal.FilterChainImpl;)V(ServletStubImpl.java:419) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(Ljavax.servlet.ServletRequest;Ljavax.servlet.ServletResponse;)V(ServletStubImpl.java:315) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run()Ljava.lang.Object;(WebAppServletContext.java:6452) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Lweblogic.security.subject.AbstractSubject;Ljava.security.PrivilegedAction;)Ljava.lang.Object;(Optimized Method) at weblogic.security.service.SecurityManager.runAs(Lweblogic.security.acl.internal.AuthenticatedSubject;Lweblogic.security.acl.internal.AuthenticatedSubject;Ljava.security.PrivilegedAction;)Ljava.lang.Object;(Optimized Method) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(Lweblogic.servlet.internal.ServletRequestImpl;Lweblogic.servlet.internal.ServletResponseImpl;)V(WebAppServletContext.java:3661) at weblogic.servlet.internal.ServletRequestImpl.execute(Lweblogic.kernel.ExecuteThread;)V(ServletRequestImpl.java:2630) at weblogic.kernel.ExecuteThread.execute(Lweblogic.kernel.ExecuteRequest;)V(Optimized Method) at weblogic.kernel.ExecuteThread.run()V(ExecuteThread.java:178) at java.lang.Thread.startThreadFromVM(Ljava.lang.Thread;)V(Unknown Source)

    Just ensure the DataBase_en_US.properties file exists in the following folder:
    <WebApp Directory>\ web \ WEB-INF \ classes \ DataBase_en_us.properties

Maybe you are looking for

  • How does Iterate work inside an Action

    I'm having trouble figuring out how does <Iterate > work inside an <Action> in a workflow. My <Action> is to call a subprocess that takes several arguments and initiates an approval. Since I need to fire-off several approvals at the same time instead

  • Webcenter collaboration not starting, error in linked db alias

    Hi I installed webcenter collaboration and at the end I run all the scripts in the oracle db, everything was ok without errors or warnings. When I try to start collaboration i got an error that say that the linked database alias is not correct. i tes

  • OpenDocument 404 error

    I have deployed BOE 3.1 and integrated to sharepoint. When opening documents from sharepoint, the openDocument function is used, but the call fails. Using tomcat administrator I have tried to verify the opendocument deployment and I get the 404 missi

  • Access Control Lists

    Hello everyone ! Can somebody tell me abt good reference material for implementing ACLs (Access Control Lists)...? Standard and extended... Thank you !

  • Access Connection 5.2 loss of wwan

    Hi All To fix a connection issue on my x301 running XP, I have today nstalled the latest Access connection 5.2. However after installing this I get a failure message at startup: "The system contains incompatible Wireless Wan drivers. To access wirele