LAVA 1.0 Content
Members-
Posts
2,739 -
Joined
-
Last visited
-
Days Won
1
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by LAVA 1.0 Content
-
QUOTE (Yair @ Jul 8 2008, 07:43 PM) Sorry to disappoint you, this happens on any given platform. Every iteration a new queue reference is created, this is 4 bytes of data. By creating a loop at 5 ms I could easily see the memory usage rise of LabVIEW. Ton
-
QUOTE (Ton @ Jul 8 2008, 11:59 AM) :thumbup: Ohh yes! Ben
-
QUOTE (neB @ Jul 8 2008, 04:55 PM) I wouldn't use a VIT but the following code construct (simple example): http://lavag.org/old_files/monthly_07_2008/post-2399-1215532702.png' target="_blank"> This also bypasses the 'I don't know which dynamic VIs I need to build' problem. We recently did this with a class, and it works great! Ton
-
QUOTE (shoneill @ Jul 8 2008, 11:10 AM) Thanks for that suggestion Shane. I am condicuting some architectural research for an app I have yet to officially design. I will keep that in mind as the design develops. Another idea that I concidered using for active objects that would have their methods invoked from multiple places it to re-use an idea that was inspired by one of Jim Kring's design patterns (Response with notificaton ?). The idea is to inclue a ref to a "response queue" in the request (method invocation) so that the active object can respond entity that invoked it. Learning as I go... Ben
-
QUOTE (Aristos Queue @ Jul 8 2008, 10:06 AM) The Wikipedia says " The Active Object design pattern decouples method execution from method invocation that reside in their own thread of control.[1] The goal is to introduce concurrency, by using asynchronous method invocation and a scheduler for handling requests.[2] The pattern consists of six elements[3]: a proxy, which provides an interface towards clients with publicly accessible methods an interface which defines the method request on an active object a list of pending requests from clients a scheduler, which decides which request to execute next the implementation of the active object method. a callback or variable for the client to receive the result. " So the approach i am taking is; The "proxy, which provides an interface" The class provides methods which use queues to post method requests to the back-ground VI (*.VIT). The "interface which defines the method request " I think I have covered with a type-def'd queue containing an enum that specifies the requested method. The "list of pending requests " is realized by using the queue. The "a scheduler, " is implemented in code that checks for method invocations otherwise it handles the "update work" (eg scroll text) The "the implementation of the active object method. " is realized with appropriate code to handle what is found in the que. The "a callback or variable for the client to receive the result. " is realized in a response queue that is fed from the results of the code for each method. The above scheme is just my first attempt at an active object and is my attempt to realize in LV something that matches the description of an "Active Object". Again thanks all for your replies! Ben PS Ton, My boss is already taking a chance by letting me code this app in LVOOP. I'd only make him more nervous if I jumped right to the XControl to handle this part of the design. If I design this properly, I should be able to pass the project to one of my rookies to finish-up.
-
QUOTE (neB @ Jul 8 2008, 02:35 PM) One NI R&D developer made a http://decibel.ni.com/content/docs/DOC-1180' target="_blank">scrolloing led XControl... I think you can extend the techniques used there. Ton
-
QUOTE (JFM @ Jul 8 2008, 04:18 AM) Adding to the above. The one big plus of the DSC add-on is the colors of the controls can be set at run time. A control that has been customized looese this option. Ben
-
QUOTE (Aristos Queue @ Jul 7 2008, 06:41 PM) Thank you Aristos! Its nice being wrong in this neighborhood. Plenty of people willing to straighten you out. So the term metaclass really does not come into play in LabVIEW applications. I got all excited about Tomi's video and typical for myslef did not explain myself well. When I was asking about UML what I was actually thinking about was what Craig Larman calls "Sequence Diagrams". I got to the point were he introduced the idea of an "active object" and I am curious about how an active object would be implemented in LabVIEW. From its description I have gone off and created code that spawns off (VI server run no-wait) a VI that is coded to watch an input queue for one of its methods being invoked. The non-active objects appear to quickly and easily manifest themselves from one of the templates. But they return their resluts imediately and there is "nothing hanging around" to do the follow-up work. Say I wanted to mod Tomi's example such that it had a scrolling string field. I'd want that class to regularly update its image without being "tickled" by the GUI. So that is what I really had in mind. How do I implement active objects in LV? Sorry about the tangent all! Ben
-
QUOTE (san26141 @ Jul 7 2008, 09:26 PM) Several options: Crelf removed it It got lost in the archives of the internet LabVIEW has sent a bot to the LAVA database removing this attachment But the code is quite simple, and you can easily recreate it from the images supplied. Oops the image is gone too. A similar piece of code is given on the dark side. Ton
-
QUOTE (kristos_b @ Jul 7 2008, 09:25 PM) I believe that digital data uses RLE encoding (if nothing changes nothing is stored), maybe you see a side effect of that. Ton
-
QUOTE (kristos_b @ Jul 7 2008, 09:00 PM) But I don't see that in the code/screenshots, maybe you should widen the scope frame? Could you specify which code/image you mean? In het second set I count 9 '1' on p0.2 while p0.3 is high, this is perfectly reflected by channel 2 and 3 on the scope image. Wait, I see on the first set that the dip on channel 1 (p0.4) is too early. But this is all with software timing? I never trust those Ton
-
Hi Krystian, Somehow I couldn't see the problem, could you make it a little bit more clear? Ton
-
QUOTE (Yair @ Jul 7 2008, 07:14 PM) Yes that's right, it's the reason LabVIEW names the front panel palette element 'LabVIEW object' We are using the Endevo by-reference Goop implementation. It has two kinds of data attributes: Class attributes which are the same for all the objects of that class Object attributes which are specific to a single object The fun thing is you can set and get class attributes from a class constant without creating an object. On the video: Respect! I've done two swf movies for the Code Capture Tool and it is hard. What program have you used to capture your screen activities, I've used Jing but found it is not real-time. Ton
-
QUOTE (solerpwr07 @ Jul 7 2008, 06:14 PM) Hi, This code is unmaintaneble. I suppose it grows every week. What's the use of the 2D arrays? You can use 'concatenate arrays' (right click on the build array nodes) Why devide by 5, absolute, multiply by 5? Absolute would do. You should write wrappers around a lot of the functionality you use, you can place the feedback nodes inside those VIs Ton
-
QUOTE (dannyt @ Jul 7 2008, 01:50 PM) So you can easily (one click) say which products use a specific user.lib VI? About the network drive, what happens if you work 'offline'? all your code is gone. QUOTE small rant. I can never understand why all the LabVIEW people seem to like the fact that everything is locally install, to me it make good team working and control a nightmare almost impractical at time I feel, certainly from the point of a "quality assurance manager" I say, multiple LabVIEW versions, I say ActiveX. Both of these urge me to separate my user.lib development from the actual user.lib. ActiveX will always recompile one a new computer, thus a new version to distribute between computers though no code has changed. If you upgrade from 8.5 to 8.5.1 your whole user.lib will be recompile though no code has changed. What if you find a bug, you fix it. But you also use the code in LabVIEW 8.2 (and 7.1 and 6.1)? Where do you make the fix? Ton
-
My advice: Start over from scratch, have a look at the examples in the help file. Look for simultanious IO. The express VIs you use are not suitable for hardware clocked timing. Good luck, Ton PS Forget all the express VIs you use except the XY graph.
-
QUOTE (neB @ Jul 7 2008, 03:03 PM)
-
QUOTE (Tomi Maila @ Jul 7 2008, 07:08 AM) Ok then I'll fight my way through the fog myself. I you hear a scream, you'll know which direction the abys lies. Your discision of classes reminded me of a passage I recently read in Craig Larman's "Applying UML and Patterns, An introduction to Object-Oriented Analysis and Design and Iteractive Developement, Third Edition" where on page 236 and 237 he writes; " You can show class or static method calls by using a lifeline box label that indicates the receiving object is a class, or more precisely, an instance of a metaclass (see Figure 15.20). What di I mean? For example, in Java and Smalltalk, all classes are conceptually or literally instances of class Class; in .NET classes are instances of class Type. The classes Class and Type are metaclasses, which means their instances are themselves classes. A specific class, as class Calendar, is itself an instance of class Class. Thus, calss Calendar is an instance of a metaclass! It may help to drink some beer before trying to understand this. " All typos are of-course mine. (BTW: I recomend Craig's book for getting into UML) So ... The class Rectangle you showed in your project is a metaclass and when you drop one on your picture, you are instaciating a class? Ben "
-
QUOTE (Tomi Maila @ Jul 7 2008, 09:50 AM) Verry good video :worship: - Now I have just to wait till I can use classes on LabVIEW RT ...
-
QUOTE (dannyt @ Jul 7 2008, 10:44 AM) Really? I have not found a source control code that allows you to trace from which code which VIs are called. I think user.lib code should be developed somewhere else and should be installed into user.lib, and the source of these VIs should under SCC. During a built I would like to built a list of all the VIs (with identifiers) so I can keep trace. Ton
-
QUOTE (Tomi Maila @ Jul 7 2008, 03:50 AM) :worship: Great! I need to watch the next nine episodes before noon today so I can stay productive. Do plan on realizing UML in LV? Which episode will cover instaciating active objects? Ben
-
QUOTE (Aristos Queue @ Jul 7 2008, 12:06 AM) No, let me eloborate a little bit more. Suppose I have written a VI that retrieves the executable version of an application, I store this inside my user.lib. Now as quality assurance manager (a not-so hypothetical function) I wish to know in which applications I use this VI. This info should be easy retrievable, hence the database. So in my sourcecode I tag my source reuse VI with some part-number. During building of the application I retrieve all these part-numbers do some database code ét voila I can easily look up where I used that VI. A little bit like http://forums.lavag.org/Getting-Started-Dialog-Window-t11143.html&p=47103#' target="_blank">here: QUOTE b) The API for these items had some dispute about it. We may decide that we want to change the implementation of these properties/methods in the future LabVIEW versions. Making these private means we do not have to support any mutation of existing VIs that load in that future version. We keep a list of which of our VIs use those properties/methods, and we don't bother trying to programmatically mutate other VIs on the off chance they use these properties/methods. Ton