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. -
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 MailaHello 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 .
DanYes 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.pngsorole 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/nathanwebsterStill 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?
Thankssanjay_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 -
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 9490852The 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
-
I am having a very fustrating issue with flash
I am running flash in IE8 on a win 7 laptop with flash version 10.1 plugin. i can install it and it will run for a while. but once i restart my system or close my browser and start it up again.. it starts to crash. then the problem will migrate to m
-
How do I set up a group for texting on my phone?
-
Outputing delivery document details in Script
HI all , we are using a script to output the Delivery document details . Now the order of Item details in main window is based on handling unit no's used while packing . My requirement is instead of giving in the order they pack , customer want t
-
I'm working with a crosstab report displaying summary accounts on each row & current and prior year on each column. I'd like to create a drill down function for each of the summary accounts rows so that when I click on a summary account, the dept# th
-
Help what a time I am having trying to fdownload my mcleans magazine from the newstand. My subscription us still in force but all I get are four pictures that say, taken with an iPhone 6