Jump to content

Recommended Posts

Hello Everyone,

I am new to object oriented programming in LabVIEW. I am working with injector measurement system in LabVIEW that use (Procedure Programming Style) Producer Consumer Design pattern

After careful reading about object oriented, I come to know its benefit. So I want to use OOP in my current application. Anyone could give some idea which design pattern is equivalent to producer Consumer.

Thank you in advance .

Link to post
Share on other sites

Hi Bhavin,

It depends on what you want to achieve. If you are new to OO I would suggest that you keep with the standard Producer Consumer pattern and just start changing some of your code to use classes. Anywhere you have libraries, custom clusters or FGVs are good indicators. This lets you get used to the basics without getting bogged down in more complicated design patterns.

What you have to remember is design patterns are all solutions to a single problem so if you don't have that problem then don't rush to use them as they can make your code more complicated.

If you really want to take a look at one though the most equivalent is the command pattern. This allows you to add actions to the consumer loop without having to change its code at all (the problem it solves). But as per my warning above, I use OO all the time and have still never used this in anger!

Link to post
Share on other sites

If you want to access the same object from 2 different  loops, you have to have use an Object By Reference solution.
But you can use the Command Design pattern to send Object By Value from the producer to the consumer loop.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By Marko Hakkarainen
      I had some time to learn about new interfaces and finally I could implement my collection class as I had envisioned. I didn’t want to use iterable and iterator names, because I thought that would have been too bold a claim.
      The original version of the collection class was (and is) used as a collection of sequence steps. Each element can be either a sequence command (send message, wait timer, wait complete etc.) or another collection of commands (sub-sequence). That’s the reasons for the labels and search method. Otherwise it is just a fancy (Rube Goldberg) array.
      Next method is recursive and it steps through all elements in the collection. Execute is only method, which requires override.
      For now, it’s at least an exercise in new interfaces. I don’t know if it’s useful enough to be in the code repository, but I can polish it up if needed.
       
      --
      Marko H
      Certified LabVIEW Architect
      www.optofidelity.com
      Iterable Collection LV2020.zip
    • By Zyl
      Hi everybody,
       
      I'm running into something I don't really understand. Maybe you can help me here !
      I've got a LVLIB that is used as an 'Interface': it exposes public VIs which wrap around public functions of a private class (see code attached) . The class is private because I want to force the users to use the 'interface' functions.
      In one of my interface VI, I create a DVR on the private class (Interface_init). The DVR is stored into a typedef (FClass_DVR.ctl) and this typedef is the 'reference' that link all the interface public functions.
      In TestCode.vi (which is not part of the lvlib and illustrates the standard code that a user can create to use my driver), I can call my public interface functions and link them without any problem.

      But as soon as I create an indicator on that reference (to create a state-machine-context-cluster for example), my TestCode VI breaks !

      The error returned is : This VI cannot use the LabVIEW class control because of library access scope. The LabVIEW class is a private library item and can only be accessed from inside the same library or libraries contained in that library.
      I understand that the class is private. But the DVR is contained into a public control. Using an In Place structure on that DVR into TestCode would not work, since the class is private. So why is the DVR control problematic at that point ? Creating it do not breaks any access protection...
      Am I missing something ?
      DVR Private POC.zip
    • By Brains
      Hi,
      Does anybody know the best way to make a copy of a byref object (open gds v4) at runtime and pass all the attributes values (including inherited attributes) to the new object?
      Thank you!
      Craig
    • By Moes
      Hello everyone i am relative new to labview and currently i am bit stuck need help...
      i want to capture data with a digital trigger on my chassis PFI0 (9178), the pulse is 20ms long and occurs on my straingauge 9237 module.
      The pulse comes in 10 times in a row with couple of miliseconds between it, can i measure it every time and push it inside an array like a "last in first out" memmory to evaluate it slower for the user?
       
      I am currently struggeling with the loop dividing into more then one loop approach.
       
       
      How to breach out from accquire->store->plot in one loopdone right with good performance? I don't know how to shape the cure because there is a dependency from loop time to datapoints with the daqmx task inside of it :-/
      Capturing should always be possible and run in background and the user just uses the frontend to play around with filters (me learning what filter shape the cure in which way)
       
      It would be nice if someone can share their knowledge towards realizing multiple graphs from a pulse that comes in and is stored in a graph.
      I know my program is not pretty right now but with progress it will be nicer, function first to learn!

      WheatstoneSix_6.vi
    • By GregFreeman
      I currently have a project that I am refactoring. There is a lot of coupling that is not sitting well with me due to typedefs belonging to a class, then getting bundled into another class which is then fired off as event data.
      Effectively, I have class A with a public typedef, then class B contains ClassA.typedef and then class B gets fired off in an event to class C to be handled. Class C now has a dependency on class A which is causing a lot of coupling I don't want.
      For my real world example I query a bunch of data from our MES, which results in a bunch of typedef controls on the connector panes of those VIs. Those typedefs belong to the MES class. I then want to bundle all that data into a TestConfig class and send that via an event to our Tester class. But, now our tester has a dependency on the MES.
      I see a few ways to handle this. First is move the typedefs currently in the MES class, to the TestConfig class. The MES VIs will now have the typedefs from the TestConfig class on their connector panes, but at least the dependency is the correct "direction." Or, I can move the typedefs out of classes all together, but then I am not sure the best way to organize them. Looking for how others have handled these sorts of dependencies.
       
×
×
  • Create New...

Important Information

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