Jump to content

PJM_labview

Members
  • Posts

    784
  • Joined

  • Last visited

  • Days Won

    10

Posts posted by PJM_labview

  1. QUOTE (Aristos Queue @ Sep 23 2008, 07:54 AM)

    Nope. Doesn't quite work...

    post-5877-1222181592.png?width=400

    The problem is that "Text.Font" comes back as "bold", which is not true of the entire string, just a portion of it.

    Here's the problem VI if you want to work on this: Download File:post-5877-1222181619.vi

    I think John solution works well for text with no formatting (using only one font). However as you pointed out earlier when you start to consider a string with multiple fonts and multiple formatting (bold, italic...) this is getting quite tricky.

    PJM

  2. Hi Shaun,

    Personally, I do not see the benefit to have one server in each location. I am assuming that you will have each IT department maintain each server location. If you really want to be in charge on the server (as opposed to use svn hosting) one will do just fine. You can have your user accessing the server over https.

    QUOTE

    Amount the many thoughts we had were the following (and these are all maybes):

    * having one per site could facilitate reusable components (ie a previous project carried out with a different customer could be branched) and make updating reusable components with applications easier

    I am not sure that this is the best way to promote reuse. Reuse components should be accessible to every developer (ie from the palette) when they are working on a project.

    QUOTE

    ...a separate repository for each customer we work with, or one single repository per site.

    In term of repository; you should consider having only one. You can have granular control over who access which part of the repository through defining the access right.

    QUOTE

    * Would there be any performance hit of having everyone working on the same repository (and would the associated large revision numbers be a problem)

    I never noticed any performances issues, but I don't think I ever worked on one with possibly more than 10 concurrent access.

    Good Luck (and welcome to LAVA)

    PJM

  3. QUOTE (Attila @ Sep 19 2008, 08:43 AM)

    In this case this is a useless feature of labview.

    I would have to disagree. Not being able to do scripting in build application does not make it a useless feature. You can create countless of helper tools using scripting that will make your job as a LabVIEW developer a lot more efficient (just search that forum for several example of such tool).

    In regard to your particular use case, what were you trying to do? There might be alternatives in achieving your goal without using scripting.

    PJM

  4. QUOTE (JFM @ Sep 18 2008, 10:28 PM)

    Have you tried to use named Queues? Just naming the queues after the caller VI plus some additional numbering should be enough.

    If memory is corrupted in shared clones, maybe named queues are better protected.

    /J

    This is a good idea; you could even use the clone instance name as the queue name since it is already unique.

    PJM

  5. QUOTE (Aristos Queue @ Sep 15 2008, 11:55 PM)

    Yes, I am working on an editing tool that need inheritance information, among other things, in order to generate the configuration files used to configure the classes.

    At the moment, this is not critical that it work without having the class in memory (this would be nice and faster if this were possible). Ultimately the editing capabilities will be built in the executable, hence the reason I am trying to have a way of doing it in the runtime engine.

    QUOTE (normandinf @ Sep 16 2008, 05:26 AM)

    Have you looked at this post from Darren about
    ? The VI is password-protected but should work at runtime.

    I guess that's the output from LVClassPathFromInstance call you're looking for. I've used it to get the complete class hierarchy recursively. I don't have the result on my daytime computer, but could find it tonight. It's simply an implementation of Darren's VI with the tree control API from
    Norm
    the Captain.

    Ah, I search LAVA before I start this thread and I did not found this post :(

    From what I see I came up with a similar solution than Darren (using the linker info). I believe that this solution does not work in the runtime engine.

    About, the "LVClassPathFromInstance", this was just a side question to know if the Get LV Class Path.vi work in runtime (which it does).

    I am looking forward to see your recursive solution.

    PJM

  6. QUOTE (Aristos Queue @ Sep 15 2008, 01:57 PM)

    Thanks

    QUOTE (Aristos Queue @ Sep 15 2008, 01:57 PM)

    Your question about the content of that VI's a password-protected block diagram I will decline to answer.

    I am not sure what you mean by that (because I did not ask anything about the content of the password-protected Get LV Class Path.vi). If you infer about how I get the info about the method name, LV 8.6 hierarchy window now shows CIN/CLFN info (see image below). My question about this specific part was just about whether this work in the runtime engine.

    post-121-1221512906.png?width=400

    I am more interesting in finding an answer about how to get the lvclass inheritance.

    Thanks

    PJM

  7. QUOTE (Gavin Burnell @ Sep 15 2008, 12:54 PM)

    Good point. I actually forgot I now use/need the Get Class Inheritance for lvclass file path.

    post-121-1221511412.png?width=400

    QUOTE (Gavin Burnell @ Sep 15 2008, 12:54 PM)

    The lvclass xml file does appear to contain a class genalogy property which (if one could parse the binary data) might be the key....

    Ya, I noticed that too. This what actually gave me the idea to try the linker info app.method on an lvclass file.

    PJM

  8. I am trying to make a VI that can get a class inheritance paths from a LV Object.

    post-121-1221504333.png?width=400

    Additionally I want the VI to be able to do the following:

    1. Run in the runtime engine
    2. Get the inheritance without loading the classes in memory

    I got one way of doing it right now that involve this VI (LabVIEW Root\vi.lib\Utility\LVClass\Get LV Class Path.vi) and getting the linker info of the parent classes recursively. Unfortunately this would not work when build in an exe.

    There is a wiki article from Stephen Mercer on the LVClass Data Storage Format but this is more about the inherited class version that the inherited class path.

    Has anybody already achieved this?

    Thanks

    Side Question to Stephen: Is the call to LV.exe method (LVClassPathFromInstance) in the Get LV Class Path VI implemented in the runtime engine?

    PJM

  9. QUOTE (TobyD @ Sep 9 2008, 08:58 AM)

    I shudder to think what could become of LabVIEW style guidelines if people start to rely to heavily on the diagram cleanup tool. I will admit that I have seen some VIs that were so poorly written that the cleanup feature actually helped, but I have yet to see a VI that I would consider "clean" after running this tool. I think it can provide a better starting point for cleaning up messy code, but my experience so far has been that quite a bit of work is still required to make the code presentable.

    I will have to agree with Toby on that.

    Also, it has become so much of a second nature for me to use good style when coding (even when I am trying to be messy to use the diagram cleanup tool) that I hardly ever need it (I will try harder to not automatically do cleanup while I code). The few times I tried it, the end result required some more cleanup.

    About the multiple properties dialog, I could not agree more. This is indeed a time saver.

    PJM

  10. QUOTE (jcarmody @ Sep 6 2008, 07:41 AM)

    ... I've been programming forever (I began with BASIC on a Commodore VIC20).

    Welcome to LAVA.

    VIC20: Ah the good old time when one could do pretty much anything with peek and poke (Note: I start with a Commodore 64).

    PJM

  11. Back on topic,

    I created a small utility that add a temporary overlay on the VI icon of the active VI (see images below).

    I put this thing together rather quickly so there is no warranties that it will work in every situations.

    post-121-1220469924.png?width=400

    Before

    post-121-1220469932.png?width=400

    After

    I use the following convention:

    post-121-1220469941.png?width=400

    Attached is the utility.

    Installation Instruction: Copy the entire "LVOOP Utilities" folder under your "project" folder in LabVIEW and then you will have a new menu under tools (once LV restart) as seen here -->

    post-121-1220470706.png?width=400

    Note: OpenG Libraries are required

    Download File:post-121-1220470490.zip

  12. I will say that Ben is probably right.

    This has happened to me countless time, and every single time this was a lifetime issue.

    Scenario Example:

    Create Queue in a VI

    Put Queue refnum in LV2 Gbl

    Launch (asynchronously) other code that need the Queue (other code call LV2 Gbl)

    Create Queue VI stops --> Queue refnum become invalid because LV garbage collect it.

    --> Get error in you asynchronous code

    PJM

  13. QUOTE (Aristos Queue @ Aug 29 2008, 08:21 AM)

    ...Strikes me as a strange request. Why do you care when you're writing the function what the scope of the function is? I can understand being interested in that when *calling* a function (ie, an annotation on the subVI call), but not when writing it. I don't know of any programming language that has that sort of notation in its code nor any language's IDE that provides that kind of visual feedback when writing the function...

    I agree that when writing a vi for the first time this is not useful at all (but this will be in future editing). I also agree with the glyph suggestion on the SubVI call (this is actually a great idea :thumbup: ).

    Note: In the my previous post entry, the screenshots were never intent to mean that I need the glyph on untitled VI. I guess I should have use an existing VI to add the glyph to. Sorry about that confusion.

    Basically, at any given time a typical LabVIEW developer has a fair amount of VIs opened (which he may not have written). There is currently no (quick, at a glance) way to know what is the scope of opened VIs.

    These VIs may have been opened through various mechanism (lvclass project view, VI Tree, Explorer ...); they may or may not be member of the class, they may or may not be utility reuse code.

    At the moment, the only reliable way find the access scope is to use the "locate in project" openg utility.

    So I think there is also a need for knowing the access scope of opened VIs (along with the "glyph on SubVI call" idea).

    PJM

  14. I don't know if anybody else feel the same way, but I would like to have a visual indication [somewhere on my VI] of class member access scope (public, private, protected). May be a glyph in the lower left corner (where project namespace/instance is usually located) or somewhere else will really be useful.

    post-121-1219975045.png?width=400

    or

    post-121-1219975057.png?width=400

    Alternatively a word (public, private or protected) in the title bar (possibly activate through an ini key) will be good as well.

    PJM

  15. QUOTE (NeilA @ Aug 28 2008, 05:26 AM)

    Hi there,

    Thanks for the demo/tutorial I am an RF engineer who is now in a software role as a LabVIEW programmer and I have found learning to use XML really difficult as all the examples are are in code like javascript or c# etc. All my colleagues have never seen LabVIEW and I dont really know with any ability any other programming languages so there is a massive barrier to learning to use XML and .NET calls.

    First I'll give a brief description of my task and then tell you my problems. I have to program a system for making some RF tests on a satellite payload. My system will be used for some of the smaller tests and is based on Off the shelf Agilent RF equipment. This will be part of a larger system that commands the payload configuration, stores data, graphically shows the payload configuration and monitors the payoad temp/volts/amps etc. These parts are done using teststand, SQL, in-house created software and webservices. This is the way it has to be done since the flexibilty to change supplier of the Main RF Measurement System is needed for future flexibility. What my specific problem is that I am subscribing to the webservice and from this service I am given a string XML which I have just about managed to read and query using similar methods from your demo.

    Your demo uses single elements with lots of attributes for data this make it easy to iterate through and grab out an array and is ideal for your suggested gonfiguration use. However, the format of the parameters passed in the webservice conforms more strictly to the 'best form' w3c standard which moves away from attribute use and adds them as sub elements. Are you familiar with parsing this type of XML. As I am quite fresh to the XML scene do you consider it to be very/too difficult to iterate the elements instead. My biggest problem with XML something you may be able to help/make clearer for me is it seems like you can only really rip out data/info to a table or something structured if you know what it is you are going to receive. I am wondering if this is where the schema should be used or if there are better more generic element searches that can be used. I have had some success using the wildcard functions with in the xpath.selectnodes function to get the info but due to the varying attributes and elements sizes it is extremely tricky to align the data correctly in tables.

    Here is an excerpt from the xml from altova:-

    <Parameter xmlns="" Name="MaskSet1" Type="Mask">

    <ARRAY>

    <ARRAY xmlns="" Name="MaskXcoord" Type="FloatArray">

    <VALUE Col="1">-2.000000000000000e+001</VALUE>

    <VALUE Col="2">-1.500000000000000e+001</VALUE>

    <VALUE Col="3">1.500000000000000e+001</VALUE>

    <VALUE Col="4">2.000000000000000e+001</VALUE>

    </ARRAY>

    <ARRAY xmlns="" Name="MaskYcoord" Type="FloatArray">

    <VALUE Col="1">-3.000000000000000e+001</VALUE>

    <VALUE Col="4">-3.000000000000000e+001</VALUE>

    <VALUE Col="2">-2.500000000000000e+001</VALUE>

    <VALUE Col="3">-2.500000000000000e+001</VALUE>

    </ARRAY>

    <ARRAY xmlns="" Name="MaskId" Type="IntegerArray">

    <VALUE Col="1">1</VALUE>

    <VALUE Col="2">1</VALUE>

    <VALUE Col="3">2</VALUE>

    <VALUE Col="4">2</VALUE>

    </ARRAY>

    </ARRAY>

    </Parameter>

    Altova recognises the nesting correctly but the system xml amd xpath functions don't seem to recognise child and parent elements correctly.

    Any help would be greatly appreciated and thanks in advance.

    NeilA,

    As John mentioned, you could try the EasyXML toolkit. I just spent a few minutes to create a LabVIEW Data structure to accommodate your XML data (to read it in LabVIEW) and it work fine (see screenshot below).

    post-121-1219959741.png?width=400

    PJM

  16. QUOTE (JDave @ Aug 26 2008, 01:41 PM)

    I was hoping to get some discussion on the points I brought up ... But if nothing else,

    What I really want is to know if there is some way to know definitively WHO the icon editor is 'editing'. This would be necessary for allowing things like editing the description. Can someone from NI point us in the right direction here? Is it at least something under consideration for future versions of LabVIEW?

    Dave,

    From my perspective, I do not expect the icon editor to edit anything but the icon (so editing the icon description is not something I would do there).

    And as I mentioned earlier, I think and good icon editor replacement should implement all existing NI icon editor functionalities.

    PJM

  17. Jeff,

    For once I am not blaming NI on this one. Windows gave me a BSOD and after rebooting and restarting LV this is what I got.

    I was just venting my frustration... ashamed0001.gif

    Sorry about that.

    About improving the second dialog I think it should be consistent with the first one.

    You said: "we must not have any un-recovered files remaining in the autosave directory for the version of LabVIEW you are launching".

    What about having a cancel button that would archive the files (like there is a Cancel button on the first dialog) instead of a "delete backup files". Deleting file seem to be very drastic thing to do. It just does not feel right.

    PJM

×
×
  • Create New...

Important Information

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