Jump to content

Francois Normandin

Members
  • Posts

    1,209
  • Joined

  • Last visited

  • Days Won

    46

Posts posted by Francois Normandin

  1. QUOTE (crelf @ Aug 12 2008, 11:55 AM)

    As for the check-in/check-out vs merge philosophies (a really good point and important for consideration when you're first considering implimenting a SCC schema) - they are very different and equally valid, so it's really a choice depending on your situation. We reviewed both paradigms and chose the former due to several reasons. I'm not saying that that option is inherently better, but it's more appropriate for our situation.

    I would think check-in/check-out is better for my needs, as I'm a lone wireworker at the moment.

    Can these SCC schema be changed at a later date or is the initial choice final?

  2. QUOTE (Ton @ Aug 12 2008, 11:34 AM)

    That's what got me thinking it was time to implement SCC for me... How else can I try this Project Scanner if I don't use SCC?

    QUOTE (Scott Carlson @ Aug 12 2008, 11:39 AM)

    Subversion and TortoiseSVN . If you take this route, we are around for further questions.

    -src

    Subversion and TortoiseSVN seems to be a very popular choice. I'll have to try it too.

    I'm a big open source fan.

  3. QUOTE (gsmart @ Aug 12 2008, 10:24 AM)

    QUOTE (jgcode @ Aug 12 2008, 10:34 AM)

    I am moving to Perforce for personal LabVIEW use due to the 2-user freebie.

    ...

    For multi developer work -
    LV
    integration is essential for smooth work IMO.

    Well, if NI uses Perforce and it's free for 1 or 2 users, than I might as well start fresh with it. Should our team grows to more than 1 developer :P, it doesn't seem to be prohibitively costly to buy licenses...

    thanks for the tips.

  4. I'm contemplating the idea of using SCC for my (rather small) development projects and would like to know which SCC software people are using out there. There's a list of supported SCC programs on NI website but I have no clue which ones are better suited for LabVIEW projects.

    Corrolary question: Are there any good open-source SCCs?

  5. QUOTE (wkins @ Aug 11 2008, 08:05 AM)

    That would depend much on what type of data and how frequent the exchange is. There are queues, notifiers, refnums, LV2 functional globals... But you've got to be careful when subVis talk to each other directly. You might run into data collision problems. There is no "one" method that could be described as the best one.

    Not knowing your data architecture, I could be way off... but I'd probably try to have a master VI that does the communication all in one place and make sure the subVis don't talk to each other too much. This way, everyone knows who's talking to who. It's easier to debug.

    QUOTE (wkins @ Aug 11 2008, 08:05 AM)

    I'd have to say Queues, for the simplicity of the design. Take a look at Producer/Consumer design patterns. There are numerous sources for help. Either from LabVIEW "New..." screen and help files, or other sources like http://expressionflow.com/2007/10/01/labview-queued-state-machine-architecture/' target="_blank">ExpressionFlow.

  6. QUOTE (zorro @ Aug 8 2008, 01:04 PM)

    "Each element in the first dimension of the array corresponds to a channel in the task. Each element in the second dimension of the array corresponds to a sample to write to each channel."

    This sentence is from the help document of LabVIEW 8.2 for "DAQmx Write.VI(Digital Output)."

    My question is that for a 2D array, is the first dimension of the array the colum or the row?

    Thanks a lot.

    First = row

    Second = column

    You can get this info by hovering your mouse over the "Index Array".

    You'll get the first as "Row Index" and second as "Column Index".

    Similarly for a 3D, you'll get the first as "Page index", then "Row Index" and finally "Column Index".

  7. QUOTE (Darren @ Aug 6 2008, 04:35 PM)

    Here's a VI that will give the top-down inheritance hierarchy of a .lvclass file. It reads the linkage information from the file on disk, so there's no VI Server or scripting code (although I do use a private method to get the linkage info, so the VI is password-protected). I tested the VI in 8.5 and 8.6 and it seems to work.

    Hope this helps,

    -D

    Works like a charm.

    I'll echo Chris: "How do you find the time during NI Week?" :thumbup:

  8. QUOTE (Yair @ Aug 6 2008, 01:44 PM)


    1. Hack the lvclass file. The parent seems to be in there, but its data is binary.

    I thought it was in that file. I'll give it a shot.

    thanks

    EDIT:

    lvclass is an XML file, however its properties are not text. I think this is the one I need to sort out:

    <Property Name="NI.LVClass.ParentClassLinkInfo" Type="Bin">#'#!!1!!!!)!"1!&!!!-!%!!!@````]!!!!"!!%!!!!Q!!!!!1Z198*F<H1O<(: D<'&T=Q"16%AQ!!!!&!!"!!)!$F"B=G6O>#ZM>G.M98.T!!!!!!</Property>

    :wacko: I'll spend a nice evening tonight...

  9. I'm trying to get the class hierarchy of many lvclass files that are not loaded in memory (some kind of plugin architecture).

    However, I could not find a way to do it without using VI scripting.

    It's simple to get the answer if I drop the object constants on the block diagram,

    post-10515-1217969183.png?width=400

    .

    My goal is to read the directories, find all lvclass files and extract their hierarchy. Using "To More Specific Class" to compare to existing classes prior to code distribution and monitoring errors is okay, but I don't know if the user has added/cloned a new class to extend functionalities. Actually, it's a feature of the code I'm developing (cloning and editing a template class). When reading a lvclass file using "Get LV Class Default Value.vi", I end up with the generic LV Object and cannot detect hierarchy because I cannot typecast. (not knowing what is the object type I need to typecast)

    The snapshot above is a temporary VI that I create using scripting and it works fine. But I found it executes in about 50ms and I need to loop it (n^2) where n is the number of classes it detects. For 8 classes detected, it takes more than 3 seconds... Is there a simpler way to achieve this?

    Here's the code (sorry: LV 8.6 already!) :thumbup:

    Download File:post-10515-1217971233.zip

  10. QUOTE (Xrockyman @ Jul 31 2008, 10:16 AM)

    Thanks for your quick reply,

    Your first solution seems to be the best on. I understand how to make the object disapear playing with his property node and the tab control but I can't put the object on top of the tab, it stays allways inside! I tried to select the option "Move to front" but It stays allways inside:(

    Thanks and regards,

    Sylvain

    Place the object outside the tab control and use the arrow keys to move it in place. Don't drag-and-drop or it will be inserted in the tab control.

    EDIT: SAME THOUGHT, TOO LATE!

  11. QUOTE (Daklu @ Jul 23 2008, 10:25 AM)

    You're quite right about that!

    QUOTE (Daklu @ Jul 23 2008, 10:25 AM)

    To do this I'd wire FALSE into Auto-Dispose and use Close Reference when my main app shuts down, correct?

    Or leave Auto-Dispose unwired... default is False.

    QUOTE (Daklu @ Jul 23 2008, 10:25 AM)

    Yes, but that's inefficient... (see below for other suggestion)

    QUOTE (Daklu @ Jul 23 2008, 10:25 AM)

    Tangential question: Suppose the spawned vi was storing data in a buffer and I wanted to periodically read and empty the buffer. I don't suppose there's a way for the spawned vi to know when it's indicator has been read? (Maybe I could use a "Trigger" control on the spawned vi that would place the collected data on a buffer indicator.

    I think you should consider using Register Events functionality. I'm not familiar with this too much so I could be wrong, but that's the avenue I'd explore if I were in your context. That would go like this:

    a) Register an event in your main VI.

    b) Pass the Event reference to the dynamically loaded VI using "Set Control Value" method.

    c) When your dynamically loaded VI produces the data, it triggers the event programmatically.

    d) Your Main App will register the event occurence and use "Get Control Value" method to get data from dynamically loaded VI.

    An alternative way would be to have a queue... Much simpler but harder to debug. Start a queue and pass Queue Name or Queue reference to your Dyn. Loaded VI to add data. Read Queue Status in your Main App to get data.

    EDIT: eaolson's suggestion is similar to Queue, but I realize it's much simpler! :thumbup:

  12. QUOTE (Daklu @ Jul 22 2008, 07:03 PM)

    You can use the method "Get Control Value" to recuperate a certain value from your dynamically loaded VI. Wire the label name of your control/indicator to get a Variant of its current value.

    post-10515-1216773215.png?width=400

    However, the code you display might not work all the time... It will work if the diagram of your dynamically loaded VI loads in memory completely before you dispose of the reference. I suggest you do not close the reference since you took care of wiring the "Auto Dispose Ref" to TRUE. This is sufficient to ensure your dynamically loaded VI will continue running even if the caller aborts. Opening it's front panel AND wiring Auto Dispose Ref is exactly what you need. Closing the reference might put you in trouble...

    Check out Christina's Eyes on VIs about VI server for more in-depth explanation of this behavior.

  13. Hi SkifIL,

    thanks to join the effort... however the question is not to make the front panel programmatically transparent, but rather to have it done with a mask. Or if you prefer, can it be done for certain colors and not for the others? The expected outcome of this behavior is that you could have, for example, UI with irregular form, such as this:

    post-10515-1216684277.png?width=400

    It's possible in Windows... can we reproduce this effect with LabVIEW?

  14. UDP over LAN restricts you to 8192 bytes per send (1024 x 8 bits). For larger datasets, you'll need to send in many packets and find a way for your receivers to "know" how to concatenate the pieces together. Use some wrapper brackets or tags for sending large datasets.

    QUOTE

    I want to send data to more than one computer not always in LAN connection.

    How will you broadcast if not through a LAN? Do you have an other mean of connecting your clients to the server?

    A UDP is nice to avoid management of connections, but you can never be sure that the client received the data, or even how many clients are connected. For diagnostic purposes, I would tend to agree with NevilleD and use TCP.

×
×
  • Create New...

Important Information

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