Are LabVIEW OOP "Helpers" modifiable?

I am finally "byting the bullet" and attempting to refactor one of my Projects to use LabVIEW OOP (it seems to me ideally suited for OOP-ifying).
But I have a few "picky issues".  I don't always like the way LabVIEW "helps" me.  Some things I can change (like the default Class Icon), and I do.
But others I'd like to change to conform to my own personal style.  Here's an example -- create a New VI for Data Member Access.  Works fine, but the Error terminals are named "error in (no error)" and "error out", while I use "Error In" and "Error Out" (note the Silver Controls also use the latter "prettier" names).  While I'm thinking of it, what if I want to use Silver (or System, or even Classic) Controls?
Another thing is that I've try to "encourage" myself to use Revision History by turning on the Option "Prompt for a Comment when a VI is saved".  Each time you create a New VI for ... there appears to be a whole lot of "saving" going on in the background because I need to hit "OK" (for saves to Historylv_icon.lvlibp) several times.
Are the (I presume scripting) processes used to help us available and modifiable?  I do realize that if I start messing around, I could create a real mess, but that's why Re-Install was invented!  If not, I'll just Grin and Work Around It.
Bob Schor
Solved!
Go to Solution.

Take a look at <LabVIEW directory>\resource\Framework\Providers\LVClassLibrary\NewAccessors, and then into "ArrayElementScripter" and "BaseAccessorScripter". There are the codes which make "magic" when you create new accessor. And there are "Custom User Scripting For New Simple Accessor VI.vi" and "Custom User Scripting For New Array Element Accessor VI.vi", where you can put your own code called when accessor is created - use these two VIs, and there would be no need to reinstall whole LV, just make backup copies of these two.

Similar Messages

  • What are the methods to modify SAP standard tables?

    hi
    what are the methods to modify SAP standard tables?

    .APPEND structures AND CUSTOMIZING INCLUDES.
    these are the two methods.. but customizing includes we, as a developers do not use.
    generally we use .APPEND structures to modify standard tables.
    note that we need an access key to modify atandard tables.
    we can create an apend structure and add that structure to the standard table at the end.
    note that .append structures should only be added only at the end.
    that is the reason we use .append structures to modify standard tables.as we should not include a field in the middle and disturb the original order of the standard table fields as it may effect many objects depending on the standard table.
    but Some standard tables for which there is a LONG datatype field can never be modified.
    the reason is the LONG datatype field should always be there at the end and also .APPEND strutures should always be there at the end. there will be a conflict. so, some standard tables can not be appended.

  • LabVIEW crashes when modifying OOP parent class private data control or typedef contained in that control

    I've been seeing strange behaviour when I modify the private data control of a class, especially if it is a parent class.  It seems that those changes are not always propagated to all the VI's in the project.  This sometimes causes my project to crash with an exception error, or sometimes the problem is more subtle as it will simply write data to the wrong elements in the control (when bundling/unbundling).
    I solve the problem by opening the typedef or class control by itself (i.e. not as part of the project), and then saving it.
    The next time I open the project all problems are solved.  This is a difficult error to track down but I now know to keep a list of typedefs or class controls that I have modified (using subversion helps here), and then when this strange behaviour or crashes happen, I simply close the project and open each modified typedef or class outside of the project and save them individiually.
    Anyone seen something like this too?

    Hmmm.... Have not seen what you are describing -- though occasionally I will see a class that appears broken until I open it by itself outside the project.
    How large is your application?
    How many classes do you use?
    How extensively do you use classes in the application?
    Could you post a screen shot of your project and how things are arranged in it?
    Does the problem seem to be related to any particular class or group of classes?
    Have you tried mass-compiling your code?
    Are the VIs set to separate the object code from the source?
    Mike...
    Certified Professional Instructor
    Certified LabVIEW Architect
    LabVIEW Champion
    "... after all, He's not a tame lion..."
    Be thinking ahead and mark your dance card for NI Week 2015 now: TS 6139 - Object Oriented First Steps

  • Imlementing synchronized access to shared objects in LabVIEW OOP

    Many objects in object-oriented programming have an
    identity, such as a file, a front-panel object or a hardware device.
    These objects cannot be modelled using present LabVOOP (LabVIEW Object Oriented Programming) objects as
    LabVOOP objects gets copied as wire is branched; multiple different
    wires cannot all represent a single object. This issue has been
    irritating the community of LabVIEW users since the release of LabVOOP
    a few months ago.
    It seems that there is a huge demand for
    objects with unique identity i.e. by-reference objects in LabVIEW. The
    central problem why LabVOOP propably doen't have these objects is the
    difficulty in implementing synchronized access to these objects from
    multiple parallel threads. The problem of synchronized access can be
    divided into two different separate topics. First how the
    sychronization should be implemented in LabVIEW runtime engine. Second
    how this synchronization mechanism should be visible to the developer.
    I'd like to start this thread to discuss these two issues.
    Synhronization under the hood
    Traditionally
    people talk about locking of an object and about get-modify-set pass
    when accessing the object. Locking is traditionally done by acquiring a
    mutex for an object, modifying the object and releasing the mutex so
    that other threads can access the same object instance. This is how
    inter-thread synchronization is traditionally done. However, besides
    the mutex based locking, the computer science community has innovated
    also different kinds of methods on synchronizing the access to objects.
    One way to get object-level synchronization is modify the
    runtime engine so that it only allows a single method of a synchronized
    object to run at any time. This mechanism of syncrhonization is
    implemented in programming languages like O'Haskell, which is a Haskell
    variant with object orirented features.
    Also different
    transactional mechanisms[1,2] have been successful. In transactional
    mechanisms multiple threads are allowed to access a synchronized object
    simultaneously. As each method accessing an object commits their
    changes, they verify that no other object has modified the object
    simultaneously in a manner than would break the transaction. If such a
    modification has occurred, everything is rolled back. Transactional
    mechanism do not suit to every possible situation as not everything can
    be rolled back. For example it's hard to roll back an action that
    somehow modifies the physical world.
    User experience of synchronization
    How
    the synchronization is generally implemented in LabVIEW shouldn't be
    directly visible to the developer end-user. The developer should
    understand the general concepts of synchronization to take full
    advantage of it, but in general the synhronization mechanism should be
    integrated directly to development environment. There should in general
    be no need to acquire a mutex by calling acquire mutex node but instead
    the end-user should be able to specify which data needs synhronized
    access in more sophisticated way.
    In the following I propose a
    mechanism of integrating the synchronized access of by-ref objects to
    the development environemnt of LabVIEW. The proposal is very
    preliminary but I hope it breaks the ice and the community would start
    innovating in how should NI implement the syncrhonization support in
    the user interface of LabVIEW.
    Wire level synchronization
    Only
    methods can access object private data members. In synchronized access
    to the object, it's the methods accessing the private data members that
    need to be synchronized. The private data members are accessed by
    applying unbundle node to the class wire and data is written back to
    the object using bundle node.
    What I propose is the following.
    An unbundle node could either be normal or "synchronized". A
    synchronized unbundle would guarantee the access to the private data
    members in synchronized manner. All data wires originating from
    synchronized unbundle would be of synchronized type, in a little
    similar manner as a dynamic dispatch wire is of special dynamic
    dispatch type. Such a wire must evetually be connected to a bundle
    node. When the wire is bundled back to the originating object, the
    synchronization requirement is released.
    These synchronized
    wires would look somewhat different from normal wires so that the
    developer instantly knows that the wire is synchronized. The developer
    can branch the wire, but only one wire branch can own the synchronized
    type. The developer could easily select which wire would be
    syncrhonized by Ctrl+clicking the wire. Such a wire can be considered
    as a combination of a data and a mutex, even though mutexes don't need
    to be the underlying synchronization method. The wire just guarantees
    that there is a mechanism in the runtime engine that makes sure the
    access to the wire data is synchronized.
    There is a need to wire
    data originating from a non-synchronized wire to a synchronized wire so
    that it can replace the private data member of the class. This is
    accomplished with a new node similar to bundle node, that would allow
    replacing the data in a syncrhonized wire with some data originating
    from a non-synchronized wire.
    The synchronized wire can be
    connected to a front panel controls of special syncrhonized type. This
    way the synchronized wire can originate from a method and allow passing
    the synchronized data to the calling VI and back to another method.
    This is practical for example in a situation when the developer wants
    to run different analyzes to a data class but don't want to rewrite all
    the existing data analysis tools as class members. So the developers
    writes a syncrhonization acquiring getData method that let's the
    calling VI to access the syncrhonized data. Then the developer passes
    this data to an analysis VI and passes the result back to a setData
    method that writes the result back to the class wire.
    There
    will probably be technical problems in allowing the user to connect
    such a synchronized wire to all existing VIs since these VIs. Therefore
    the programming model for all nodes that do not support such
    synchronized wires will be branching the wire and passing the
    non-synchronized wire branch to the node and then bundling the result
    back to the synchronized wire.
    To increase performance and
    decrease unnecessary buffer copies when a syncrhonized wire is
    branched, if the syncrhonized wire continues directly to the new bundle
    synchronized wire node, no buffer copy is made.
    Discussion
    The
    syncrhonized access to a by-ref LabVOOP objects can be implemented in
    multiple ways by National Instruments. The synchronized access should
    be divided to two different and independent parts: 1) the user
    experience of synchronization and 2) the runtime engine synchronization
    mechanisms. As LabVOOP objects have special properties compared to
    other LabVIEW data types, optimal user experience can be gained by
    designing the user experience specifically for LabVOOP objects. From
    user experience point-of-view this syncrhonization mechanism may not
    work for other data types. Separating object syncrhonization from
    synchronization of other data types is advantageous also for other
    reasons. Due to the fact that object data can only be accessed via
    object methods, more advanced synchronization methods may be used with
    objects than can be used with other data types. O'Haskell
    synchronization implementation is an example of this. Integrating the
    synchronization directly to the user interface allows NI to change the
    mehcanisms under the hood, when computer science comes up with more
    advanced methods. Therefore NI could begin with traditional and quite
    easy mutex-based synchronization and later move to more advanced
    perhaps transaction based syncrhonization methods or even combinations
    of multiple different methods.
    I hope this topic generates
    discussion that would help NI to implement an excellent synchronization
    mechanism in LabVOOP. I hope that all talented individuals in the
    community participate this discussion to help NI to reach this goal. I
    also hope that if you just have time, it would be great if you could
    surf the computer science resources to find out what kinds of new
    techniques there exists for synchronizing access to shared resources. A
    Large community may find much more innovative solutions than a few engineers at NI. Let's give NI the power of open source design
    Tomi Maila

    Hello Tomi,
    First, thank you for taking the time to write such a well
    though-out suggestion.  Are you familiar
    with the “LabVIEW Object-Oriented Programming: The Decisions Behind the Design”
    document?  I think the reason we chose to implement a ‘by
    value’ strategy, is that is more in line with the LabVIEW programming paradigm
    of dataflow, and would make sense to most of our LabVIEW users.
    I think your suggestion is interesting, and it does
    highlight the need to think outside of the conventional LabVIEW box and look to
    some of the innovative things other languages do.  However, I think we all agree that
    synchronization takes careful planning and extra work for the programmer.  Even with an ‘ideal’ solution I see no way
    around this.  For LabVIEW users today,
    one great way to get synchronized ‘by reference’ semantics with your objects is
    to use a single-element queue to pass your object.  The queue itself is passed ‘by reference’ and
    is inherently synchronized!  The does
    have the disadvantage of adding one more small layer of complexity to your
    program, but some complexity would have to be introduced in any situation.  The other disadvantage with this is that it
    is not always an intuitive way to implement your program and requires some
    amount of LabVIEW knowledge before one would generally come across this
    technique.
    In any case, I appreciate the time and effort you put in to
    your suggestion.  Please make sure that
    you submit the suggestion formally through the NI Product Suggestion Center so
    that it can be reviewed by some of the decision makers here.
    Thanks again,
    Travis M
    LabVIEW R&D
    National Instruments

  • Why are LabView Graphics so sloooooow?

    Why does it take so long to load an application onto a PC even if it is only a single panel with a few dials and gauges.
    And then after it is loaded, if I click a button with a mouse I'm not really sure if it has registered the action.
    I have built applications of similar graphical complexity in either Delphi or Visual C and they load and run much much faster than a typical LabView app.
    It sometimes seems that unless I have a CRAY sitting in my Lab the application is never going to start!
    Anyone got any suggestion to speed it up?

    Hi,
    Here are some ideas. Without seeing your application, it's the best I can
    do...
    If your UI/MMI/CHI is reacting slow, you might need to put a Wait (ms) in
    your while loop(s). If you don't, the loops take 100% processor time, and
    there is no time to handle the UI properly.
    The only reason (I can think of) why loading might be slow, is that you have
    large default values.
    Overlapping controls or indicators dramatically slow down the updating.
    Boolean array, esp. 2d, are just slow.
    Regards,
    Wiebe.
    "DNicholls" wrote in message
    news:[email protected]..
    > Why does it take so long to load an application onto a PC even if it
    > is only a single panel with a few dials and gauges.
    >
    > And then after it is loaded,
    if I click a button with a mouse I'm not
    > really sure if it has registered the action.
    >
    > I have built applications of similar graphical complexity in either
    > Delphi or Visual C and they load and run much much faster than a
    > typical LabView app.
    >
    > It sometimes seems that unless I have a CRAY sitting in my Lab the
    > application is never going to start!
    >
    > Anyone got any suggestion to speed it up?

  • Are LabVIEW VISA functions supported by LabVIEW Run Time Engine?

    I have an executable file that I created using LabVIEWS Application Builder. When I run the application on another computer that does not have LabVIEW installed, it crashes with a Windows message stateing the my application has generated erros and will be shut down by Windows. I have isolated the problem as having something to to with VISA Reasource Names.
    Does anyone know if there has been any issues regarding the use of VISA function in LabVIEW Run Time Engine? The version of LabVIEW that I have is 6.0.2. The version of Run Time Engine is 6.0 .
    Dan

    Yes there are issues with the RTE 6.0 and VISA. Use the RTE 6.0.2
    LabVIEW, C'est LabVIEW

  • Shapes are "paralyzed", cannot be modified

    I want to modify a shape or create a new one with the help of the menu "shape" ( "Form" in my German Language ) It is possible to alter the size of a marked shape but only in regard to proportion. If I apply the option of editing, those little red dots appear as they are supposed to. But: they remain sort of paralyzed, they do not modify the shape, unable to pull or draw with them. The very same process is possible in keynote. But if I create a shape in Keynote and copy it into Pages: it keeps fixed. After hours and hours of trying to solve that puzzle I realized it has to do with a button in the menu bar, in German: "eingebettet"/"fixiert" I dont know the English translation for it, therefor I attach the screenshot. Each time I mark the shape in order to edit it, that button shifts to "fixieren" and cannot be released!
    /Users/reginarenn/Desktop/Bildschirmfoto 2011-01-26 um 18.14.48.png

    sorole wrote:
    @KOENIG Yvan:
    "(1) try to run the app from an other user account.
    This will tell if the problem is in your actual account or if it's global to the full installation.
    (2) If it's specific to your account,"
    Yes, I wonder if my application Pages '08 is "bugged". For the process of activating successfully the red dots runs perfect in Keynote!
    Your suggestions to solve the problem remains enigmatic for me: this is "higher" understanding of computer language. So, let me try to translate into my language:
    "from another account" do you mean: from another Mac? I have only one account -which is myself- on my Mac.
    I apologize but I can't guess which is your level of knowledge.
    Click on the Desktop.
    You will enter the Finder.
    Click the menu entitled "Help"'
    Search for the keyword Account
    You will get explanations about the way to create an other user account on your machine.
    Trying to run the application from such an other user account is the unique way allowing you/us to know if the problem is in your account (in such case the culprit is not the app itself) or if it is a global problem (in tis case and only in this one, the problem *_may be_* the app but it would not be sure that it is).
    As second step you suggest deleting(?) the file. Yet you give an example referring to Keynote, not to Pages?
    "<startupVolume>:Users:<yourUserAccount>:Library:Preferences:com.apple.iWork.Key note.plist
    <startupVolume>:Users:<yourUserAccount>:Library:Preferences:com.apple.iWork.Keyn ote.LSSharedFileList.plist"
    Is this an error?
    Yes, I was fooled by the presence of the two applications names in your messages.
    "<startupVolume>:Users:<yourUserAccount>:Library:Preferences:com.apple.iWork.Pag es.plist
    <startupVolume>:Users:<yourUserAccount>:Library:Preferences:com.apple.iWork.Page s.LSSharedFileList.plist"
    Yvan KOENIG (VALLAURIS, France) jeudi 27 janvier 2011 17:58:33

  • Greater Cincinnati Area LabVIEW opportunit​y

    My client, an industry leading manufacturer is looking for a LabVIEW programmer. This person would be the Subject Matter Expert for the company and provide all technical areas that pertain to LabVIEW. They would work cross functionally with other departments to see product through completion. Please call or email.
    Nathan WebsterRecruiterMessina Management Systems11811 Mason-Montgomery RoadCincinnati, OH 45249 [email protected] Ext. 1306www.wefilljobs.comwww.linkedin.com/in/nathanwebster

    Still looking to fill this position?
    Do you have any more details?
    Jim

  • Are LabView 7.0 and Teststand 2.0 compatible?

    I tried a very simple Digital I/O vi using named channels, but Teststand 2.0 doesn't seem to recognize the channel name. LabView 7.0 sees the channels and toggles bits accordingly.
    (hopefully this makes since, I don't have LabView at hand, so I'm going by memory)

    Hi,
    Are you referring to not being able to pass the channel via the connector pane of the VI called from TestStand 2.0.
    If this is the case, TestStand 2.0.x has a limited number of ways of interfacing to the Called VI's connector pane and those connectors and indicators you will find in the LabVIEW palette. Those controls consist of
    Input Buffer
    Invocation Info
    Sequence Context
    Test Data
    and
    Error Out
    Therefore, to pass your Channel data, you could use the Input Buffer control, if you where using one of the Test VI's, but you will probably need to use the API function VI's such as TestStand - Get Property Value (String).VI.
    You will find examples of passing values to a VI in some of the TestStand\Examples folders.
    Hope this helps
    Regards
    Ray F
    armer
    Regards
    Ray Farmer

  • Are Labview training courses available in England?

    I've been using labview for 3 days. I would like to speed up my learning curve by enroling in a Labview specific course and hopefully avoid as much of the 'trial'n'error' stage as possible. It's all new and I would also like to know that i'm at least heading in the right direction before commiting myself.If possible I would prefer a part-time course spread out over a period of time (i.e. 12months).
    Mark...

    Mark,
    You can find listings of courses that are instructor led at: http://www.ni.com/custed/locations.htm
    Sergey has good suggestions too. Apart from the interactive training kits you can also just get the Instructional Kits for the courses that are normally led by an instructor - effectively working through the course at your own pace but without an instructor to guide you an any issues that might come up: http://sine.ni.com/apps/we/nioc.vp?lang=US&pc=bypsc&cid=2236
    Regards,
    Kamran

  • Are LabView licenses for Windows transferrable to Mac OS X?

    I can't seem to find any information on this subject on the National Instruments or in a search on this forum, so hopefully someone can answer these questions.
    My lab has 3 licenses for the use of LabView 8.5 in our lab, although the instructions that I've been given to install LabView involve downloading the trial software from National Instruments' website, and then using the activation code to activate the software. Trouble is, the trial software is for Windows only, and I was hoping to be able to run LabView on the Mac in our lab.
    Are the licenses for LabView transferrable across platforms, or does my lab need to specifically purchase a version of LabView for the Mac? If the licenses *are* transferrable, how do I request a CD for the Mac installers if we've already purchased LabView for Windows? Furthermore, if I'm able to use these licenses on a Mac, is it possible to install the Windows version on my Mac on my Boot Camp partition, and install the Mac version on my Mac OS X partition and only use up one license? I'm not sure if all of our hardware has drivers that will run under Mac OS X on an Intel Mac, and I don't want to be penalized for this by having to use up two licenses on the same machine.
    Any answers to these questions would be much appreciated.

    Hi SimX,
    The LabVIEW licenses are not transferrable directly, since LabVIEW for Windows and LabVIEW for Mac are entirely different products and have different installers.
    In this case, you should contact your local sales representative to see what your options are. You can find the email contact information at http://sine.ni.com/apps/utf8/nicc.call_me?p_lang_id=us, or call in to 866-ASK-MYNI (866-275-6964).
    Regards,
    Stephen S.
    National Instruments
    Applications Engineering

  • Comparing LabVIEW OOP Class Hierarchies

    Hello all,
    The Question
    Does anyone know of a tool for comparing LabVIEW class hierarchies?  (Like "Compare VI Hierarchies" for .lvclass hiearchies?)
    For Example
    Let's say I have foo.lvclass in two projects and I want to compare the two instances and their respective members.  Does one instance have methods that the other doesn't?  Does a method or private data differ?
    Why?
    I have several applications with dozens of classes, many of which should be interchangable, and I want to quickly determine which classes are the latest, perhaps consolidating some common base code.
    I thought about posting this as a suggestion on the Idea Exchange, but I wasn't sure if I'm just not seeing functionality that's already there.
    Thanks very much,
    Jim
    Solved!
    Go to Solution.

    Hi Jim,
    There does not appear to be any way to do this. The closest functionality I could find was to use the Compare VIs/Compare VI Hierarchies to compare the .ctl files for two classes. The LabVIEW Help topic documents how to do this:
    http://zone.ni.com/reference/en-XX/help/371361L-01/lvhowto/comparing_vis/
    However, this does not really achieve the functionality you are looking for. Thank you for posting this idea to the Idea Exchange!
    Catherine B.
    Applications Engineer
    National Instruments

  • Are we allowed to modify plist files?

    Hi,
    I was wondering whether we as Mac users are allowed to modify plist files such as platformsupport.plist. Is it prohibited/illegal?
    Thanks

    sanjay_ss34 wrote:
    Hi,
    I was wondering whether we as Mac users are allowed to modify plist files such as platformsupport.plist. Is it prohibited/illegal?
    Thanks
    Sure, you can edit them.
    Matt

  • Why are LabVIEW 8 projects so big (installer dir contais about 70MB) after the build.

    Dear wire workers
    I got my LV 8 and played around with it.
    The new project is a great enhancement but one thing realy is nearly amazing.
    In LV 5 a app buid of a comparable project was 5MB.
    In LV 7.1.1 about 10MB and in LV 8 about 70MB.
    For what?
    I just user nearly the same functionalities.
    One thing that separates the 7.1.1 projects from the 8 is that you can not longer
    chose witch part of the runtime you want to use. The only Option in the settings
    is full. So I have to take all or nothing.
    That makes it nearly impossible to post my app. to the customer by e-mail.
    Is anyone out there with a hint to avoid such a big installer?
    With kind regards
    With kind regards
    Martin Kunze
    KDI Digital Instrumentation.com
    e-mail: [email protected]
    Tel: +49 (0)441 9490852

    The Run Time engine is indeed larger with LV 8. I expect it will grow
    with every new release to accomidate the new features, and there's a
    lot of those with 8.
    The application builder is actually more configurable with 8. Look at
    the "Additional Installer", section of the builder and make sure
    nothing is selected that doesn't need to be. It looks like 60-70 meg is
    going to be the minimum size if you include the RTE with the
    application. Remember, you only need to do this once as Altenbach said.
    Make multiple build settings if you want. One with the installer and
    RTE, one with just the installer, I even make one that doesn't include
    an installer, just the executable.
    For one project I'm working on, I get total sizes of:
    App installer + RTE = 67MB
    App installer = 9MB
    Just .exe = 2MB
    Make sure to explore all the settings to all teh good from the builder you can.
    Ed
    Message Edited by Ed Dickens on 11-13-2005 09:04 PM
    Ed Dickens - Certified LabVIEW Architect - DISTek Integration, Inc. - NI Certified Alliance Partner
    Using the Abort button to stop your VI is like using a tree to stop your car. It works, but there may be consequences.

  • Using LabVIEW OOP Objects with TestStand 2010

    I need to use labview classes in Teststand 2010. I am not able to pass reference between Labview and Teststand.

    Or leave it in Labview and use an action engine.
    http://forums.ni.com/t5/LabVIEW/Community-Nugget-4-08-2007-Action-Engines/m-p/503801?view=by_date_as...
    That's what I have done.
    Regards
    Ray Farmer

Maybe you are looking for