LVOOP vs GOOP

I recently started playing around with integration of LVOOP in my larger programs of LabVIEW.

I have seen the terms LVOOP and GOOP thrown around, but I'm not entirely sure understand the difference.

It's my understanding, please let me know if I am incorrect, or missing something.

The two terms refer to using LabVIEW object-oriented way.

In both types of programming, you can create a class.

Using this class, you can create objects and methods of the class.

The main difference would be how information stored/past.

In LVOOP, the real objects are passed around,

Whereas, in PORRIDGE, references to objects are passed, instead of the real object.

Is this correct? Are there differences more?

LVOOP is a native of LV

GOOP has been implemented to Edevo of OOP, which has been implemented with the collaboration of the NC.

They both allow application OOP in LV

I've studied GOOP, but never used because of the way it has been implemented, using references. Access to private data allowed using a kernel which was a kind of uber-AE able to string anything. This implementation restricts changes rom developer work in the soul and thus, we have limited the use of what exposed kernel which were EXEMPLARY of the dat in the kernel. The part of COPIES, it's what has kept me out of PORRIDGE as my apps cannot simply cannot tolerate buffer copies.

The great advantage for GOOP was UML support and could gen classes based on the UML language or gen the UML classes (to some extent at least).

I believe that it is no longer being developed (but I could be wrong here).

LVOOP is not knwolege of UML. It is very effective, as I have no stupid stuff. It is also very flexible.

With the morder versions of LVOOP and the introduction of the LVOOP DVR (Ref data value) can now go refs to access the instance of the class data.

Ben

Tags: NI Software

Similar Questions

  • Framework actor with GOOP 4.8 4.1 problems

    Hi, Im in 2014 Labview f2 + GDS 4.8 + actor framework 4.1. When I create a simple project with two actors (the EndevoGOOP400 class provider) and a launcher vi he gets on a loop of the actor a parent calling nested and nested actor actor calling the parent. I used GOOP + actor Framework 4.0 on Labview 2013 without problem.

    Little help?

    Resolved, I was calling the wrong way.

  • A Question of legacy LVOOP

    Hello to all you LVOOP guys and girls,

    I have a question that seems like it should be relatively simple, but it is obvious that I don't understand what is actually happening behind the scenes of LVOOP.  What I have is two classes that inherit from the same superclass.  The super class provides basic functionality I want to maintain between the various bodies and functions cannot be overridden by children.  Now, the problem in my application where I want two classes operate in parallel - at the same time, these classes appear to be contaminating each other and producing odd results that are not ideal.  For example, I have a function that inserts an error generated by the child in an error queue (the reference to which is held by the parent company) which is then sent to an error handler, owned by the parent company.  What I find is that the error is then handled by the instance of the parent class of evil!

    This behavior is normal?  Do not forget that I am using data flow programming, and all access to the two classes are on the same thread where the class is first instantiated.  If the behavior is expected, is anyway I can get around this?

    Since this could be a little incomprehensible, here are some shots of what I'm talking about:

    The image above is a snapshot of the two different classes child running in parallel using the same class of parent.

    And here's the example I gave - a VI simple to put errors in a queue for access and manipulation by the child class:

    Any thoughts would be appreciated.

    Peace, Matt

    Your description and images are not enough, then it will be only general, but here are a few relevant points:

    1. How do you get the Ref of the queue? If get you it by name, then both references point to the same queue, then this would be my first guess for what is your problem.

    2. You seem not understand the terminology of OBJECT-oriented programming. There is 'no instance of the parent class' - in your case you have probably two instances on your diagram, which each also inherits its behavior of the parent class (I say probably because there are any number of operations that can create instances, like a wire connection). To simplify terminology, I'd use 'object' instead of 'instance', so you have two objects.

    3. In order to better clarify this point - in this case you seem to use "instance" to refer to an object that has a specific reference to the queue (for example you want basically a behavior by reference), while LVOOP is inherently by val and it means that the memory has been allocated to an object, but that object can be quite identical to another object instance.

    4. I don't know how LVOOP you studied, but there should be some info autour (which many in the forum of LAVA OOP), as well as some courses of OR that might help (not taking them, I don't know what their level).

    If this does not help, need more details, the real code preferably.

  • Ability to set the legacy of LVOOP class programmatically?

    I want to schedule a class generator:

    The user selects an existing class of LVOOP and the generator produced a LabVIEW that contains a new class is a class of children of the selected class previously.

    Is it possible to set the parent of a LVOOP class programmatically class?

    Attached, there is a VI (main.vi), which creates a new project and add two classes (Parent.lvclass and Child.lvclass). How can I change the VI, such that it makes the class Child.lvclass is a child of Parent.lvclass?

    Thank you very much in advance for any help!

    You use the ActiveX interface. Is there a reason for this? If you stop using the ActiveX interface and directly use the LV, LV classes have a complete set of methods/properties available.

    As long as you use the ActiveX interface, I have no solution for you. Nothing about the libraries (which inherit classes LV) has already been exported to the ActiveX interface.

    Using VI Server types, your code translated as indicated:

  • Messed up because of the LVOOP project

    It began in the construction of an executable file with 3 error (could not load front), I uncheck 'remove FP', but I get error 2208. Now I changed the paths of certain controls and live in some classes due to name conflicts. And get a lot of errors "VI is locked by the owner. In two days I should make acceptance of the factory to test my project, and I think that I will be lost my job, because this grand and expencive project will not work.

    Sorry, I would say that LVOOP has the bigs, then don't use it.


  • Optimize store them in the repository GOOP

    Hello

    I am writing an application that reads a RS232 device that sends data with a fewquency of 33 Hz. I'm querying data RS232 with a while loop that runs with a fewquency of 66Hz. In this while loop, I placed the attached .vi. My problem is that if my applications do a lot of other things at the same time the laggs asked strongly or crashes after a while (about one minute). However, when I remore the .vi attached the program works perfectly. This brings me to the conclusion that save the tables in a repository GOOP takes a long time (more than 15 ms) when the tables get large. Is there another way more optimized in order to save the data?

    I would appreciate your advice,

    Rui

    Hello!

    Just off the top of my head:

    The channel dividing the part should not be a problem. Table manipulation is the usual suspect, tables that are based permanently on are slow to manage, they must reallocate memory more time to another. Do you know what size your table will ultimately be? Or at least have a maximum table size? In this case, try to initialize the tables (using the 'initialize the array") to this format when you create the object, then that memory space wil be pre-allocated for them. This might speed things up. Can you get an indicator of the size or the probe on the berries for themselves how big they are when things start to go bad? If they are huge, you need another solution.

    Martin

  • LVOOP DataGridView crash when a specific property defined in certain order

    I am writing an API in LVOOP for the DataGridView control .net, especially because I like / want combobox in the functionality of the listbox. Everything is fine, but I ran into a strange thing sort of. In the attached code "test.vi", if I set the property to allow the user to add true lines once I added a combobox column, things work fine. But if I set it to false, I get a crash.

    Now, if I set the same property to true or false BEFORE I add this column, I get no crash. I can't seem to reproduce outside LVOOP so I wonder if that is the question. Could someone let me know if they can reproduce this? I put all possible cases in diagram disable structures, so you just turn on and off properly.

    Note: I hope that you are familiar with context-sensitive help, as I have not created icons for my screw (yet)

    I see the same thing on 2012, even if it is not acutally that an accident - just LV gets stuck in the unresponsive State.

    If you make the control more, this stops happening, probably because the cell or the last row is now visible, so I suspect that there is an unhandled exception or something similar somewhere that LV is waiting, similar to what is described here - http://social.msdn.microsoft.com/Forums/en/winformsdatacontrols/thread/00437163-e197-4ba1-9e95-a3a24...

  • Make items within a cluster (in) visible by a Subvi (from LVOOP?)

    Hello

    I would like to know how it is possible to make elements inside an invisible cluster, using a Subvi from LVOOP.

    The description is in the main program, the internal operation is explained in the Subvi.

    Her to give a larger program a better overview. But I don't know how to do it.

    Create a reference instead of a property node.

    Pass this reference to your Subvi and use nodes of property to the rear on the reference that the sub - VI was adopted by the high level VI.

    You can review the images that I have in my "GUI_Controller" Albumn found here. If you click any of these images, it will take you to a page with an image more large and which includes a link to the thread where I spoke at the origin of these images under the model of design GUI_Controller (a form of Action Engine).

    It is apreview of what you will find in this Albumn.

    If you post stuff a few photos more (thanks!), so we can take a pic.

    Ben

  • Object LVOOP read/write using the API TestStand

    Is it possible to read/write a LVOOP object to a variable TestStand from LabVIEW using the API of TestStand?

    SetPropertyObject() takes a green wire reference, which is incompatible with an LVOOP object.  SetValVariant(), SetValIDispatch(), and SetValInterface() seems to just write a value null of type variant.  I don't know if I use the wrong API function or if it's just not possible.

    Hi jsiegel,

    That's right, it is not quite possible to what I believe, it is your intention. As mentioned, TestStand cannot create the object of LabVIEW. To make and use references of LabVIEW with TestStand, you need LabVIEW out this reference, which may then store it TestStand as an object reference. For VI requiring the obeject LabVIEW as an input, the registered object reference can be passed in. To make calls to LabVIEW classes using the class member call with a step of the VI Action instead of the call to VI for the Type.

    Of course, you need both LabVIEW and TestStand 2012 or newer in order to use these functions.

    Kind regards

  • Distribution of LVOOP/FPGA-based application on several possible projects?

    SITUATION: I develop a large enough project that relies heavily on LVOOP: I encapsulated material-interaction and functionality in the classes of LV that are loaded at run time. I have different types of plug-ins that are interacting with each other in the first level VI. These types of plug-ins are made in more generic classes defining their interfaces that are used by the top-level VI. Plug-ins actual instantiated at runtime classes are child-classes of matching the more generic classes (dynamic distribution).

    PROBLEM: The Labview project file is now big enough and takes forever to load/save. Also, I regularly get crashes or other very odd behavior of Labview himself. For example, Labview stalls when loading the project file, except when it is loaded through the list 'recentlly open project' in the start menu in Labview.

    POSSIBLE SOLUTION: I would like to make an individual Labview project file for each plugin real. This would have the additional advantage that they could be indivually developed by different developers without cause version conflicts.

    The PROBLEM WITH THIS SOLUTION: First tests show that it would work in effect plug-ins that do not target FPGA use. However, many of my plug-ins use the FPGA screws, which are still features some plug-ins (i.e., some plug-ins can use an FPGA VI, while others use it an another VI FPGA: a single FPGA VI will run both, however). For this reason, I would like to put these FPGA VIs in Labview for the plug-in project only, but not in the top-level Labview project. Because otherwise, I would have to update the project level higher every time that someone has written/edited a plug-in that uses an FPGA VI.

    Unfortunately, Labview generates an error when executing in the first level VI a method of a class of plug-in that uses an FPGA VI: "1498 error in Get LV class by default Value.vi. Possible reasons: LabVIEW: library has errors. Correct the errors before performing this operation. "Complete the call chain: get LV class default Value.vi top_level_vi.vi.

    In fact, it not even help to add to the project LV level the target FPGA including the FPGA VI which will be called: the error message remains the same.

    QUESTIONS RELATING TO THE:

    -Is it possible to distribute the LV classes on various projects with some of these projects with their own VI FPGA/resources dedicated.

    - Or is there a completely different solution to avoid a huge project file LV with problems?

    Thanks in advance for any help!

    I discovered that you can access an FPGA VI without adding all resources FPGA (for example the FIFOs, i/o etc.) for the respective project by obtaining the FPGA VI reference via bitfile VI (unlike obtaining by the path of the VI). Exactly what I needed. I now have a project containing the FPGA resources and live FPGA. And in all the other projects that I can make use of the FPGA screws without adding resources FPGA, just by opening the bitfile FPGA VI related references.

    The idea of encapsulating the FPGA VI in own LabVIEW class is also very useful. In combination with obtaining the FPGA VI reference via the bitfile it allows me to charge flexibly different screw FPGA running (according to the settings in the configuration files), again without having to add any combination of FPGA resources to the project.

    Problem solved. Thank you!

  • Problems of LabVIEW with Test Unit under lvoop

    Hello

    I try now provided with LV2012 with a LVOOP code Unit Test infrastructure but seem to be a few problems.

    I have built a unit test for a base class in the attached draft who is the source of class (it is another class in the project as it is an example of a method for recovering, but it is not used in the unit test). My problem is that I get results that fail for one of my tests, when I think they have to work.

    Basically, the unit test is configured as follows

    Case 1) test the VI without installation VI and ensure proper operation default values

    Case 2) test VI by setting specific values in the test in VI of disassembly and also check the single release of "Source Method.vi" configuration VI

    Case 3) Test of the VI with the VI of installation using the default values and confirm them through the VI of disassembly

    When running case 2 fails and indicates that disassembly of the VI return values by default not those fed to the installation VI. I don't see why.

    As per

    Any suggestions?

    All the best

    David

    Hi David,

    The behavior you describe is planned. When you first call the 'Source_Method.vi' by using the 'SourceAccess Unit Test Manual.vi", the"Unit Test Manual.vi SourceAccess' creates and instance of the "Source_Method.vi". In this specific case of the VI it will boot with the default values but will then retain the values passed by the "Unit Test Manual.vi SourceAccess' until the project we closed, or specifically tell you to reset defaults. Whenever she is called by 'SourceAccess Unit Test Manual.vi' it will access this instance of it. If another instance of the "Source_Method.vi" was created by another parent it would be initialized with their default values, until crushed by the top-level VI calling. Then would he behave exactly as the instance created by the "Unit Test Manual.vi SourceAccess". Whatever your type typedef and its configuration, as long as everything is connected correctly, this should be the expected behavior when you configure things through object-oriented programming in LabVIEW.

    I hope this information is useful to your application. If you want to see a LabVIEW example that demonstrates this behavior, you should consider referring to parts of the ReferenceObject.lvproj. It is found by searching in the example finder LabVIEW object-oriented. This is accessible via

    Help > find examples.

  • LVOOP

    Hello, I started re writing a parallel of my current project. This time using lvoop (new to me) something that is not clear for the sake of the moment communication interface: I have several devices with rs232, gpib or nothing. I have to considerate as one class of another com interface which is a component of class interface or com peripheral is a specialization of the device and must be created possibility child ex: 3458 rs232, 3458 gpib, rs232 of 5500 5500 has gpib. Any idea on how to see the communication interface? Best regards tinnitus

    Hey tinnitus.

    I think that is a better decision by you.  First of all, I would like to ask what are the common characteristics of the various data acquisition tasks.  I've developed a library that I use for the e/s series.  I took the decision to have all objects inherit from a common object of e/s series - there are some commonalities that were shared between all the routines that could be accomplished using the base class (sending commands and receive data, initialization of communication, opening a port, close communication, aimed at preventing clashes of communication) etc.) While the details of what data to send, and how the data were extracted was left to children.  To get data, more generic command and I returned a "data object" which has been implemented based on the object that was trying to get the data.  I'll post the end this here with more details, so join the Group and check it out.

    Cheers, Matt

  • LabVIEW GOOP for Excel

    Hello world

    I'm new with Labview and I would like to copy and paste data from a .txt file to an Excel sheet.

    Do you know if there is a link somewhere on the internet to download a version of the 'GOOP' for Excel tool that works at least with Labview 2014?

    This one is too old... http://www.NI.com/example/27974/en/

    Or perhaps is already someone doing a VI that do (or almost) I want?

    I would like to read a structured-for example .txt file like this:

    Date of test XXXXXX
    Test of stadium XXXXX
    Repeat XX

    Voltage 1 [V] XXXXX
    Voltage 2 [V] XXXX
    Temp 1 [° C] XXXX
    Temp 2 XXX [° C]
    Result XXXX

    Num 1 X
    Num 2 X
    NUM 3 X

    Name of the script XXXXX
    XXXXX script version

    And for copy and paste line-by-line results (XXX) in the different cells of the first empty line of a specific Excel spreadsheet

    Make a table with all the titles and values screenshots

    Save the image to a specific folder

    Save the Excel sheet...

    Thank you for your time and consideration

    See you soon

    Hi Neercs,

    you know that this is for 2014 LabVIEW.

    I found a LabVIEW VI to run an Ecxel Makro as well.

    Hope I could answer your questions.

    Kind regards.

  • Ability to create a 'substitution VI' programmatically for a LVOOP class?

    I'm now quite a bit further with my class LV generator VI I mentioned previously (see here). However, I'm stuck again: I want my VI generator to automatically create a new 'alternative VI' (i.e., overrides a method of the parent class) for the newly created class.

    In VI server interface, I have not found an invoke node to create a new "VI to ignore." Is it possible to do, maybe with a VI wrapper like the one that I was provided to programmatically set the superclass of a class LVOOP?

    Thanks in advance for any help!

    It works more or less as you suggested, but it requires two additional steps: since the VI script that replaces the front panel control loads the original control at run time, the old class must be copied as well (and deleted again subsequently). The complete procedure (tested and functional!) is:

    1. Copy the VI to a new location.
    2. Copy the original VI class to the new location (just temporarily necessary)
    3. Add the new VI to the new class
    4. Change the input to the new class terminals using VI scripts
    5. Remove the original class to the new location of the VI

    Thank you much for the help!

  • LVOOP: Common accessor for the child classes?

    I am reletively new to LVOOP and OBJECT oriented programming in general. I used very simple classes as a replacement for clusters several times, and now I have an architecture intended to convert most of my code into classes, dynamic distribution screw and similar.

    However, I run in to an issue, which basically boils down to laziness: I really don't want to do a lot of the same dynamic send screws I want to have a VI parent to be able to write a piece of data common to all children. Preference gives an error if the child does not have this data element.

    I guess it's quite similar to dynamic distribution, but without having to write a DD VI for each class.

    Is it possible to have the VI parent to access the data of the child? If so, how?

    Here is an example of my hierarchy:

    Test.lvclass (parent)

    DC_test.lvlcass (data: test number, 2D, time stampresults)

    Transfer_Curve_test.lvlcass (data: results of tests settings, 1 d, timestamp)

    Breakdown_test.lvlcass (data: test number, 3D, timestampresults)

    ... 28 another test

    As you can see, the data type only common between them is the timestamp. I want to be able to use a VI in the parent class to write data in the child class.

    You have it backwards autour.

    The data that is common belongs to the parent class, not the class of the child.

    Data that are not common may not be processed by the parent class and must be transformed by the child class.

    You don't need to CREATE truly dynamic shipping screws for a common data type.  If you just don't set the VI at all, it will be called the parent instance.

    Shane.

Maybe you are looking for