Jump to content

Neil Pate

Members
  • Posts

    1,185
  • Joined

  • Last visited

  • Days Won

    110

Posts posted by Neil Pate

  1. I have used the NI OPC-UA toolkit in a bunch of projects. Both as a client and server.

    Had an issue with an earlier version of the toolkit (2015) where it was not working correctly with authentication, but NI released a patch for that.

    The only other strange thing is that the client (or server, cannot remember which it is) does not support Data Change events, so you have to poll. Oh yes the other weird thing is that when you do get a Data Change event you get the data coming in as a variant, but unlike regular variants this one seems to know nothing about its own type. This actually caused a bit of drama for me but managed to find a work-around as the data change event does actually include the type, so I was able to shove it back into the variant.

  2. 19 hours ago, Antoine Chalons said:

    I don't have a good answer to that question so I'm not going to make up a bad one. It's completely unnecessary.

    I only asked because a few years ago I decided to change how I write classes. Methods that do not modify the data do not have the output class. See http://www.walkingthewires.com/2016/02/15/just-passing-through/

    I really like this technique as to me as a developer it conveys intent to somebody else looking at the code. From a higher level it shows that the method does not modify any private data in the object. 

     

  3. 8 hours ago, GregSands said:

    You might also try right-clicking the cluster, and looking at Advanced/Show Hidden Element to see whether there might be controls in the cluster that are hidden. 

    Amazing, thank you for the tip.

    Certainly easier than the way I do it using VI server when I accidentally hide an element of a cluster!

    Has this been in LabVIEW all along and I just never knew about it?

  4. 50 minutes ago, Ernesto Aneiros said:

    As we have already seen, a statement from R&D is not a strong guarantee.

    I also plan to connect both not because I like wasting my own programming time (as negligible as connecting an extra terminal might be) but because LV's behavior here is _inconsistent_ between versions and _silently_ changed. What guarantees do we have that it will not change again?

    I think NI is quite a bit better these days at keeping behaviour consistent between versions, except when there is clearly "buggy" behaviour.

    Given the focus on NXG I suspect it is pretty safe to say not too much is going to change in current gen LabVIEW going forwards.

  5. 52 minutes ago, shoneill said:

    BTW, the ability to connect a NULL reference is intended.  This way, you can switch off certain events by modifying the Event Registration Refnum entries with NULL values.

    I have code where I register for certain events outside of a loop with exclusively NULL references, only to have a different event actually deliver the correct event references to listen to.  This way the Event registration refnum is created at initialisation but remains essentially inactive until "primed".

    Ah yes thanks for the reminder. I have actually done this myself in the past to dynamically register FP controls but wanted to do it "inside" the event structure, so I registered the event outside (of course) and then had a different event to populate with actual refs inside. This was actually my first introduction to User Events and totally did not understand why I needed to do this!

  6. OK, figured it out.

    Turns out the actor I thought was Creating the User Event was not actually doing it. In my code the first time the reference is requested it is Created and then reused from that point onwards. Due to some clever stupid logic my second actor (the one using the data) was actually running before the producer of the data actor, so when the consumer shutdown the reference went stale. 

  7. I have some behaviour in an application I cannot understand and wonder if anybody can share some light. I can't really post an example as its part of quite a large framework, but I think I can discuss the issue reasonably succinctly.

    1. There is an "actor" that generates some data on a User Event. The main loop VI of that "actor" is the bit of code that also creates and "owns" the actual User Event, and it never stops running so should never go out of scope.
    2. There is a second "actor" that registers for this User Event and receives the data. This VI gets dynamically loaded into and out of a subpanel. This is all working well and is a technique I have used successfully for a long time.
    3. When I insert a different VI into the subpanel (or rather as soon as I remove the first VI and stop the loop) the Generate User Event in (1.) errors out with Error 1 and if I validate the User Event reference it transitions to Not A Reference at the same time.

    What I do not understand is why a consumer of the User Event (i.e. registered for it) can cause the underlying User Event to become invalid.

    Edit 1:Even weirder, if I try and Register again using this same User Event (exactly the same refnum number) there is no error (yet if I test for Not A Reference at the exact same place I am registering it gives True), see picture.

    Edit 2: Today I learned that the Register Event node does not seem to do any checking on the input refnum, as can be seen in the second picture you can register a NULL reference which seems strange to me.

    As I said I have used this technique many times in the past and cannot recall seeing this behaviour.

    Any ideas?

    Using LV2015 SP1 on Win 10

     

    Capture.PNG

    Capture1.PNG

  8. Hi Jon,

    Thanks for your comments. It is nice to know our concerns are being taken seriously. I attempted to create a video of the behaviour I originally posted about, but cannot recreate it at the moment. I have just tested 2013, 15, 17 and 18 and all drag operations seem quite smooth (LiveDrag=False in my LabVIEW.ini file for '17 and '18), but these are for very simple test VIs not in a project.

    I have definitely seen the issue in '18 in the last month or so though. I currently use '15 for all serious projects and only tinker with '18 for personal projects. 

    The grey selection rectangle introduced after 2015 does feel a bit sluggish though.

    One thing I did notice in my comparison tests is that the toolbar seems to refresh much more often in '17 and '18. Try this experiment: create a VI and drop down a single For Loop. Now resize this loop and take a look at the toolbar. In '13 and '15 nothing noticeable changes in the toolbar however in '17 and '18 the toolbar seems to refresh/redraw (flickers) regularly.

    If I see the other issues again I will try and take a video of it in action.

    2018-08-28 23-26-24.flv

    • Like 2
  9. I generally prefer to lay out my block diagrams with the error cluster in a straight line. It provides a nice datum for aligning code and is the wire most common across diagrams. Having this datum on the diagram results in fewer wire bends which to me "feels right".

    I found in the past that if I did not use the error cluster there was generally a slightly messier feel to the diagrams.

    Completely personal preference though.

  10. I love the comment in the CRC calculation VI :rolleyes:

    But seriously I would way rather have a not perfect, but functional, implementation any day over password protected stuff. In particular when I was new to modbus and trying to understand which end was actually the tcpip server and how data was persisted this would have been great to have. 

    • Like 1
×
×
  • Create New...

Important Information

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