Jump to content

PJM_labview

Members
  • Posts

    784
  • Joined

  • Last visited

  • Days Won

    10

Posts posted by PJM_labview

  1. So I tried it today and an error popped up, "Please find the file 'Build Error Cluster___ogtk.vi"

    Apparently this is the only vi I don't have and I used Commander to download the package. Is it missing or what's up? How to rectify the problem. If I don't get a reply soon here I'll post on the openG forum. I just thought it was more relevent here for future search.

    This is a dependency error. The package you are trying to use depend on another package.

    You need to download the "oglib_error" package. To prevent further occurences of this error, I will strongly advise you to download them all.

    See image below for a list of packages you migh want to download.

    post-121-1137562691.png?width=400

    Cheer

    PJM

  2. I have seen people using it for dumping stuff they dont want to see on the UI

    5. Garbage collector -- Use a 2 tab control, put everything in the first one that the user should not see (for example VI inputs, VI outputs ...). In the second tab put the UI controls that the user is expected to interact with. At run time make sure the second tab is selected and that the user do not see the tab control.

    PJM

    • Like 1
  3. Hi

    I am currently working on a project that has about 1000 IO Points. The IO Point are connected to PLCs that are accessible through OPC server.

    I would like to get some benchmarking information for data socket and for LabVIEW DSC.

    For example, can I expect to be able to read the 1000 tags within 100 ms using data socket? What about LabVIEW DSC?

    Does the share variable introduced in LV 8.0 increase performance?

    Btw, I was watching this presentation from NI regarding LabVIEW DSC 8.0, and it mention the following: "The LabVIEW 8 DSC Module introduces integration of DSC events, such as monitored value changes and alarm condition changes, into the LabVIEW event structure...Now, the desired event conditions can be easily registered with the LabVIEW event structure and are automatically monitored." This seem pretty cool.

    Thanks in advance

    PJM

  4. I'm surprised that NI support was no help. I was able to reproduce it in 2 mins even in 711. Must be a reported bug already... strange. All I did was:
    1. New VI
    2. Placed a Chart
    3. Right-Click>select>stack plots
    4. Right-Click>select>Visible Items>Scale Legend
    5. Then click on the bottom right corner of the scale legend and stretch it down one element (it's an array).
    6. Click on the lock button.

    Enjoy.

    Indeed, Now I can reproduce this in 7.0, 7.11 and 8.0 on my Win XP machine. It crash also if step 6 is any interaction with the newly created scale legend.

    PJM

  5. So I don't know if I have a problem with my install or not but here's how I replicate my error;

    Create a chart, duplicate the scale, stack plots (instead of overlay), instant freeze and HD activity goes high. Any ideas? I hope this is a bug with a fix because right now I'm 540miles away from the install CD's meaning it's likely I'll be SOL.

    Maybe it's time to upgrade to v8 :throwpc:

    If it's my install, is there a fix that somebody could send me or a file to run a hex level compare on? Ni tech support was no help :(

    Any :lightbulb: 's?

    Heu, may be it is too late for me now, but what do you mean by "duplicate scale" ?

    Trying what you describe (without "duplicate scale") does not crash labview 7.0 for me

    PJM

  6. LabVIEW 2 Globals is a term used to describe the usage of uninitialized shift registers to store data in an application. This name comes from the fact that LabVIEW 2 did not have global variables and clever developers figured out that they could use uninitialized shift registers to store data, and make it globally accessible throughout the application.

    If you had to introduce this concent to a new developer, what would you call LV2G's? Obviously there is some historical significance to the name, but it doesn't do much to describe the concept. How about "Uninitialized Shift-Register Globals" or "Uninitialized Shift-Register Data Store"? Any thoughts?

    Cheers,

    I think the official name for the "LabVIEW 2 Globals" is "Functional Globals". It is certainely not easier to visualize what it mean than "LabVIEW 2 Globals".

    PJM

  7. ...This program is rather large (an all-in-one tuner/datalogger for automotive EFI) and I don't have that nifty feature from 7.1 called navigator :angry: .

    Did you actually click on the link I provide you in your post about the navigation window?

    post-121-1136872699.png?width=400

    If you click on the "here", you will get a page (although now obsolete) with screenshot, explanation about this navigation window replacement and a download link.

    post-121-1136872717.png?width=400

    Cheers

    PJM

  8. Not a workaround, but a possible solution for NI (hopefully someone there is reading): handle enum-/ring-length same as text controls & constants. This means, add a checkable entry "size to text" to the rmb-menu. By having it checked, the enum (and therefore the whole array where the enum resides) resizes when a different enum-element is selected to it's text-size, otherwise it doesn't.

    I often use this feature when applying text-array-constants:

    1. put the array on block diagram

    2. check the option

    3. type in the longest array element

    4. uncheck the option

    5. type in the other elements.

    ...But also here is quite some room for varying opinion, since checking the "size to text" option in a text-array, resizes the array to the size of the element you clicked on, I would prefer a resize to the largest. :blink:

    ...at least it would be contiguous throughout LV.

    Didier

    This is a good idea, but I will argue that there can be even a simpler one. Just add an option for disabling this auto resizing all together (whether as a global ini settings in the labview.ini, or per enum typedef through the right click menu).

    I would rather have the capability to set my own size permanently rather than having LabVIEW doing it for me (until LabVIEW can "read my mind" :P ).

    PJM

  9. Hi PJM,

    Thanks for your suggestions! Unfortuantely I do need to access the subVIs in parallel. Call by Reference was my first choice of spawning the subVIs based on how the complexity of the information I needed to pass through to each subvi (thank you OpenG for solving most of my problems there!).

    A little background on my project : basically I have multiple stations that have to control multiple instruments. The template gives access to each individual station while the reentrant subvis control all the individual instruments. Each instrument (hence subvi) has a value change which needs to go to two seperate places - [1] printed to a file and [2] to a control on the template front panel. Since all the values from every instrument needed to be printed to a file, that was easy to solve with an LV2 global which stores the queue refnum. Now I need a global that is specific to each template. Unfortuantely a global is exactly that - global!

    I found a solution from a previous post from mgunning which I thought would work. Basically he suggests making an LV2 global reentrant and opening it from a VI server. I did a quick example of it using numbers instead of a queue refnum to see if it would work the way I was hoping and it seems to do the job. Each instance of the global held values specific to each template and was fed it's data by a reentrant subvi, but when I implemented it with queue refnums and my monster of a program, it seems to fail (again, it is fine when I ran it in non-reentrant mode). It's probably a little error I made, but given everything is setup as dynamic and reentrant, my debugging abilities are severly limited.

    I'm almost ready to give up and delve into the world of GOOP like Jim originally suggested. It sounds like Jim's GOOP suggestion runs similar to the example posted above, except he allows himself one more way to kill the instance if other methods fail to do so. Perhaps I read it wrong though. I'll know once I try to implement it. My worry now is that not even GOOP can help me. :(

    Before you go investigating GOOP, did you download Michael presentation on process spawning that Jim linked to. It explain how to use Queues to span process?

    From reading your description I am still not quite sure what's going on. So let me re iterate my questions

    Is your reentrant SubVI a LV2 Global?

    Is it use in only one location in the template?

    If you anwser yes to both, you do not need to instantiate your LV2 reentrant subVI, just drop it as such and pass parameter through the connector pane.

    Now I jus re-read your initial post and I think you issue is that you need a different queue name for each template instance. Once again read michael post on process spawning you will learn a lot about queues.

    Good luck

    PJM

  10. Hello everyone,

    I've got a question about VI hierarchy. Does anybody know how to easily way generate hierarchy wchich can be included into tree control. Now I'm using callees and callers functions but for 200 vi's in library it takes a while. I found GetVIHierarchySiganture and GetVIHierarchyUserGUID functions (by VI scripting) but to be honest I still can't get how it works.

    Thanks in adavance

    Damian

    I take a while to do what? Computing the hierarchy for the 200 VIs or displaying the items in the tree?

    It should not take you long to compute a VI hierarchy for just 200 VIs. Your algorithm might be improvable (search on the web and NI website for possible faster algorithm)

    If it take too long to update the tree, you can use the defer panel update before you start updating the tree, this will speed thinks up significantly.

    In regards to GetVIHierarchySiganture and GetVIHierarchyUserGUID, I never tried these, so I cant help here

    PJM

  11. Hi all,

    I'm hoping you can help me. I have a main top-level VI (in the form of a template so it can be opened multiple times) which must execute one VI several times, so I made that VI reentrant. I need to both send and retrieve information back from that VI. I call this VI by invoking the "Run VI" method and I can easily send information to it by using "Send Control (varient)", but my problem comes when I try to retrieve information from it.

    I know I can't use "Get Control (varient)" because all it would send back is a blank control (since the front panel on a reentrant vi is always blank). I thought my best option would be setting up a queue, but I tried creating a queue on the top-level VI and sending the queue name through to the VI, but it still doesn't work. I know everytime it tries to "obtain" the queue, it is creating a new one reference, but I'm not sure if this is part of the problem or not. Am I creating two queue with the same name? Is that possible? I was hoping it would be as simple as creating the queue in the top-level vi before entering a while loop, filling the queue in a timed loop in the reentrant VIs and dequeuing the elements in the top-level vi loop, but that doesn't seem to be the case.

    Am I doing something wrong? I'm assuming it is possible to grab information from a reentrant VI, right?

    I know a global would work perfectly here, but then information from the different template instances would end up overwriting or mising together. Plus I know that globals in Labview, in general, are bad. I would like to code this application as clean as possible (and being new to Labview coming from my C++ background is actually a little difficult for me! :unsure: )

    Sorry if this seems like a junior problem, but I really don't know how to get around it.

    Oops - last minute information - I am using Labview 7.1, but I am currently upgrading to Labview 8.0 (literally actually, my computer is upgrading as I type!). I'm not sure if they have added anything new to help me, but I'm assuming not, but if so, let me know. I won't have much time to play and explore with unfortunately (deadlines!!).

    Thanks so much in advance for any help you can provide me!

    Hi

    A few things:

    You say "I have a main top-level VI (in the form of a template so it can be opened multiple times) which must execute one VI several times"

    1) Does this subVI of your template has to be executed at the same time (meaming, will this be OK for one instance of the template instance to wait until another instance is done using this subVI?)

    If the answer is yes, you dont need reentrant VI

    2) Assuming the answer is no, then why dont you pass the data in and out of your rentrant subVI using the connector pane?

    There are some instance where this is not suitable (for example if you have a rentrant labview 2 style global and you need to access the same instance data from different location [such as the OpenG Goop for example]) but most of the time this is fine.

    3) Assuming again that you are in that situation that you need to access a given instance of your rentrant VI in several location in your template instance then you should go and read the thread Jim mentioned. It will show you one way of doing what you are trying to do.

    Good luck

    PJM

  12. Merlin,

    Attached is a simple, yet powerfull, Queue Message Handler "State Machine" template in LV 7.0

    While it does not have parallel loop, it is very flexible and allows synchronous process servicing using the timeout frame of the event structure. In most case this is sufficient.

    You might want to search the following presentation on NI website: "Application Design Patterns in LabVIEW" to get you started in state machine and queue state machine.

    Good luck

    PJM

    Download File:post-121-1133453194.vit

  13. I recall that there were certain private nodes that were exposed a couple of versins ago, that got closed/hidden when you installed LV7 (or was it 7.1?). Someone here (PJM?) recommended saving a copy of some directories prior to install and I think made a zipped copy of said dir available here on line.

    My question is: Is there anything we should save a copy of before installing Lv8? I just got my boxed SSP upgrade and have yet to install it. Has anyone found items to archive first?

    Yes this was in MAX\Assistants\LVCGen. Already in 7.1, NI plugged a lot of holes and I am not aware of anything that was changed by the installation of 8.0.

    On a side note, NI is getting a lot better at password protecting the stuff they should have in the first place. I have not find anything of great significance exposed yet.

    PJM

  14. A note about my previous comment:

    I originally thought the scripting property nodes were in red, but some of them aren't, and I'm wondering if the red color is actually an indicator of the deprecated items--the color changes from red to light blue if the deprecated item (shown in the previous screenshot I posted) is removed.

    I concur with this observation. Red nodes seem to indicated deprecated items. May be the symbolism is Warning (Red) do not Use! :P

    PJM

  15. PJM, Got this error message when trying to open your VI:

    Get Class Name and ID for a Specific LV Version__ClassHierarchyBuilder.vi

    - The control expected to be at "C:\Documents and Settings\LV Classes Name & Id Tools\Custom Controls\Class Active Status - Enum -.ctl" was loaded from ...

    No control found for the typedef so I tried to make the control a typedef and it still didn't like that. I eventually deleted the whole event which builds the class list in order to see the saved file.

    My bad. I dont know how this one slip through the crack. You could just find the strict type def call and right click on it and say disconnect from type def.

    Attached is a fixed version (hopefully bug free)

    Is there anyone who can figure out how to create these items using the New Object function or something similiar? (I think it was called New Object).

    Which Item? The Class Specifier Constant ?

    If so the llb has code in it to do that.

    PJM

    Edit:Doh! Forgot the modified Attachement.

    Download File:post-121-1130901184.zip

  16. Just in case you haven't noticed it, 8.0 already has a built in class browser, which also allows you to drag property and invoke nodes directly to the diagram (yeah!!!). Is there any advantage your version has over it (other than working for earlier versions - I have it in 7.0)?

    NI Disable part of the scripting in LV8.0. Therefore the class browser does not show any of the class hierachy for the diagram related classes such as Master Diagram, Diagram, tunnel, nodes ...... (see below)

    post-121-1130692775.png?width=400

    This utility does show the *complete* (as far as I know) class hierachy and demonstrate how to build it.

    PJM

  17. It doesn't seem to work overseas. Whatever serial number I could come up with from all the different SSP shipments etc. it kept telling me that it is an invalid serial number for the product I try to activate. NI support wasn't very clear but claimed that it doesn't work yet and I should just continue to use evaluation mode until I receive the proper SSP shipment. But that dialog at startup is for sure annoying.

    Rolf Kalbermatter

    I read on NI forum somewhere that the activation server in europe will be ready in about 7-10 days.

    So, meanwhile people have to use it in evaluation mode.

    PJM

×
×
  • Create New...

Important Information

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