Jump to content

LAVA 1.0 Content

Members
  • Posts

    2,739
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by LAVA 1.0 Content

  1. QUOTE (rolfk @ Jul 2 2008, 02:16 PM) Thank you, this gives me some ideas as to where to look... the program is huge... and sort of a mess.... so thanks again.....
  2. QUOTE (Michael_Aivaliotis @ Jun 25 2008, 04:06 PM) I didn't, but now I do. Thanks Michael. "Learn from the noise."
  3. QUOTE (crelf @ Jul 2 2008, 02:32 PM) THe end users will not know anything about LV so I'm not sure if that will help much. Back to the issue at hand! Rather than fumble around trying to get the project to open up without conflicts (that don't seem to go away, So I threw away an hours worth of file save as...).... How do Y'all organize the LVcass file relative to the VI's that implement the methods for that class so that the "Save As...." on the Class results in cloning it and all that goes with it. Boy this hurts! But its better to figure this out now rather than latter. Thanks all, Ben PS: If I figure this out, I'll post back with a structure that works.
  4. QUOTE (ragglefrock @ Jul 2 2008, 01:42 PM) Well it looks like I chose the wrong method of organizing my folders for this to work. I'll try re-arranging the furniture and see if I can get that to work. Thanks! Ben
  5. Should I break out controls and indicators as unique child-classes under Boolean? I have the following class hiarchy. Brief explanation; Plug-ins - This class defines all objects I will be able to drop on the FP while the app is running. Dynamic - All objects that will change while the app is in Operate mode. These will be controls and indicators. Static - These will be background decorations and anything that has an image that does not change. Boolean - All dynamic objects whos value is either 1 or 0. LED - A round LED. Toggle PB - Round push-button Toggle SW - A toggle switch. Since the LED class will not be something the user can click on (I'm trying to simualte the real world not re-write LV) it will not have to support a "Mouse Down" method. The "Toogle PB" and the Toogle SW" will have to support a Mouse Down method. Does this observation indicate I should create two intermediate classes under Boolean "Control" and Indicator? Let your comments fly, I am trying to learn with this project so your comments and suggestions are welcome! Ben
  6. I am developing my first LVOOP app and I can't find an option to copy or duplicate a class. In this app I am attempting implement the Holy-Grail of LV, create controls and indicators on the fly. All of the controls and indicators will be individual LVOOP classes and so far, I have the following class hiarchy. Brief explanation; Plug-ins - This class defines all objects I will be able to drop on the FP while the app is running. Dynamic - All objects that will change while the app is in Operate mode. These will be controls and indicators. Static - These will be background decorations and anything that has an image that does not change. Boolean - All dynamic objects whos value is either 1 or 0. LED - A round LED. Toggle PB - Round push-button Toggle SW - A toggle switch. WEll it turns out that there is very little differnce between "Toogle PB" and Toogle SW" aside from the images associated with true and false. What I would like to do is right-click on the "Toogle SW" calss (in the project window) and select Duplicate class. But that option does not exist. So far I have had to manually create the new class and then set all of the options and inheritances manually. If there is no official way to do this, how do others go about cloning a class? Ben
  7. Darn you. You wasted my evening away...
  8. Hi all, I'm trying to repair an old labview program written long ago by someone long gone.... The program was moved from an old computer running W2K, to a new computer running XP, and now it doesn't work. I've traced the problem to the attached VI. The Call Library Function Node in the first while loop outputs a value which causes the and gate feeding the select to output false. This causes the select to output a value defined in the case structure. Bottom line the default data sting input to the VI is a path to a configuration file the path is held in a global variable feeding the vi... when the vi runs it changes the drive from C:\filepath where I set it (because that is where the configuration file is) the VI changes the path to E:\filepath. and then puts that is the global. There is no E drive so the file can't be opened. I modified the program putting a constant True into the select and the rest of the program operaties fine, but I'm hesitant to leave it that way not understanding what this vi is doing. Any ideas out there??? I would really appreciate any help. Besides the added benefit of being able to learn something..... Thanks in advance....
  9. Using the property node for the Tab control you can programatically change the page captions to add and remove spaces for the active page. If the Tab Size is set to Fit to Contents then the size of the active tab will be bigger based on the extra spaces added. (I didn't use the OpenG Trim Whitespace VI, but I'm sure someone else will point you to them.) Download File:post-3370-1214921926.vi
  10. QUOTE (crelf @ Jul 1 2008, 08:19 AM) Can't speak to the ITO but I beleive the post-it notes were a by product of http://www.snopes.com/business/origins/post-it.asp' rel='nofollow' target="_blank">masking tape adhesive research. Rather than making it stronger they tried to make it weaker. Ben
  11. QUOTE (JustinReina @ Jun 30 2008, 03:31 PM) How about using a cursor positioned at the origin? http://lavag.org/old_files/monthly_07_2008/post-29-1214915999.png' target="_blank"> Ben
  12. QUOTE (KatieT @ Jul 1 2008, 06:24 AM) Wait, your EE major school doesn't do LabVIEW? If you contact NI, mention the school name NI might be throwing students editions at that school. What's the internship about? I know it's normal in the US to do internships in the summer, how do companies handle that? During summer the number of employees is lower than normal so the support to students is less? Could anyone eloborate? I worked during the summer in nurseries cutting lilies to pay my school (which is really cheap in the Netherlands) Ton
  13. QUOTE (Jim Kring @ Jun 30 2008, 12:41 PM) The problem I have with very tall ladders is that you have time to think about what is going to happen before it occurs. I think that is part* of the reason children are born short so they figure out the walking thing before they realize its dangerous. Ben * Another factor that can't be ignored is what women in her right mind would participate in any activity that resulted in having to birth a full grown human.
  14. QUOTE (mzu @ Jun 30 2008, 12:06 PM) Check out DSAutomation.com CLA will help with us. We have seven CLAs at teh moment and picking up an eigth will be a bonus fo us (We'll have the most in the world, unless bloomy does antoher one). Are you as US citizen? If you apply, tell them "Ben" sent you. Ben
  15. QUOTE (Aristos Queue @ Jun 27 2008, 08:30 PM) I did some more testing comparing the Variant Attribute (VA) method to the CVT. VA and the dynamic interface to the CVT give about the same performance, however, the static and index interface of the CVT provide a lot better performance (10-25x better on cRIO). So if the need for dynamic name-based data access is not required, then using a traditional functional global will give better performance. Download File:post-3370-1214837047.llb QUOTE I worked with one of those down-loaded from the NI site (somewhere) that did not play well witl parallel process on a cFP unit. I ended up having to sprinkle waits all over the place to get it to share the CPU. QUOTE ( @ Jun 30 2008, 09:01 AM) STM is fine if the host application is Labview. Modbus TCP is widely know protocol in the automation industry. If I have a cRIO that needs to talk to a PLC or HMI, then STM is not going to work. Modbus TCP is also and easy way to get a cRIO to communicate with an OPC server, like Kepware for example. In all of my LV-RT applications, their is a Modbus TCP server running and any Modbus TCP client can communicate to this device. I have a crude system, much like TCE that is employed to expose the memory map (i.e. CVT) of the Modbus TCP server. David, Thank you for the feedback. In the case of cRIO talking to a PLC I assume you will use the Modbus Client VIs on cRIO. I will take a look at the current VI library to address the issues mentioned by Ben. On the Modbus server side I will take a look at developing a Modbus implementation inside of the remote CVT interface (CVT Client Communication) as an altenrate to STM, though this will be more of a long term project. In the short term it may be easier to update the server soie VIs of the Modbus library and develop a seperate reference design to show the use of the CVT with the server side Modbus implementation to expose the controller data to the network. Christian
  16. QUOTE (LV_FPGA_SE @ Jun 28 2008, 06:56 PM) SCRAMNet has performance specs that I am going to try and measure but it looks like even with the fastest counter timer rig NI sells I'll only be able to time bulk transfers. RE: The Modbus Library... I worked with one of those down-loaded from the NI site (somewhere) that did not play well witl parallel process on a cFP unit. I ended up having to sprinkle waits all over the place to get it to share the CPU. Just trying to help, Ben
  17. QUOTE (han_5583 @ Jun 30 2008, 07:48 AM) => you are using the analog output... QUOTE (han_5583 @ Jun 29 2008, 11:09 AM) USB-6008. Please advice. => Analog Output rate 150Hz... => your time target is 1 second so that's the reason why it runs with 1 Hz... => change the target time of the express function (add an input, to see what happens when you decrease the target time) => place a "wait" in your loop... => use the stop input from your express-daq vi => the express functions produce some "overhead"
  18. QUOTE (James P. Martin @ Jun 28 2008, 02:19 PM) What interface are you using for your drive? Without knowing that, it's not possible to give you a good advice... I'm using analog output or RS232, for my drives but it depends on the drive...
  19. QUOTE (David Wisti @ Jun 28 2008, 09:37 AM) David, I would love to hear more about what you don't like about STM. What features/functionality would you like to see? I agree that it is not the right solution for all applications, and is just one of many options you can choose for network communication, ranging from the Shared Variable down to TCP. The original goal of STM was to make TCP just a little easier to use, while keeping data streaming performance as high as possible. For Modbus please take a look at the http://sine.ni.com/devzone/cda/epd/p/id/4756' target="_blank">Modbus Library for LabVIEW.
  20. Hello Michael, QUOTE (sachsm @ Jun 27 2008, 04:32 PM) We considered the Shared Variable, but for various reasons we could not use it in this particular implementation and meet the application requirements. Our primary platform for this architecture is LV RT as well as LV Touchpanel so anything we consider has to work in LV Windows/DSC, LV RT and LV Touchpanel. On the network communication side we were able to achieve better throughput than the networked Shared Variable by using our own simpler protocol based on TCP. This is encapsulated in the STM (Simple TCP Messaging) and CCC (CVT Client Communication) components. This is to be expected, balancing ease of use with performance. On the controller side one of the requirements we had for local data storage was to have dynamic access by name, i.e. the application can ask for any tag value by passing in a dynamic string. This is not possible using the current variable interface for the Shared Variable. It is possible using DataSocket but at a much lower performance than the CVT implementation we made. QUOTE The CIE component makes alot of sense but again it would be better if NI would just build this functionality into LVRT/FPGA to be able to read cRIO I/O directly in LVRT. This is something we are investigating. QUOTE Also was wondering why the CVT does not use Variant attributes to store tags, it seems like it would be faster than indexing through an array. I'm not sure exactly what implementation you are thinking about here, but I did a simple test and the Variant Attribute version I came up with was a lot slower than accessing a value in an array of a function global. I attached my quick and dirty implementation for reference. http://lavag.org/old_files/post-3370-1214609959.vi'>Download File:post-3370-1214609959.vi Our rough benchmark for accessing scalar values using the current CVT implementation is 7-10 microseconds per read on a cRIO-900x controller. This is about the most time we can spend to meet the needs of typical machine control applications, which may contain 100s of tags and have loop rates around 10-100 Hz. I really apreciate all the feedback and ideas. Please keep them coming.
  21. bbean, I wrote the original code for the TCE and CVT and would be glad to help out with any extra information and explanations as well as the TCE source code. The machine control architecture was created by the Systems Engineering group at NI in conjunction with a customer to solve a particular application. At the same time we wanted to create a LV reference design that we could share with a wider audience and would hopefully help (more than confuse) other LV developers. We know we can't satisfy everyone's needs with our code, which is why (almost) everything is supplied in source to allow you to make changes and additions as need by your application. So while we tried to keep things as general as possible, some of the things done and not done are due to the specific application we worked on. Lack of support for arrays was one of these. We knew we wanted support for arrays in the long term but the particular application did not require it. So we added support for arrays to the data structure but did not get the chance to implement it in the CVT. As you mentioned supporting arrays of different sizes in one functional global and perform well in RT is far form trivial and we not open that can of worms. In the TCE it will be a very simple change to add support for arrays. My plan for the TCE is to release an updated version in a few months (after NIWeek) including the source code and to make a lot more of it configurable (list of cRIO modules supported, list of protocols/interfaces supported, etc.) . Ideally I'd like to create a plug-in model where users/developers can create plug-ins for new protocols and interfaces they want to add. The TCE may become a much more generic tag and channel configuration tool for use in applications beyond machine control. We have many request for such tools in applications with channel counts in the 1000's and we would like to supply some generic tool for this purpose. Please let me know any specific questions you have and how I can help you out.
  22. QUOTE (Yair @ Jun 27 2008, 05:03 AM) I was thinking the same thing. No dots? None of these wires are connected!! :headbang:
  23. QUOTE (CarlosCalderon @ Jun 26 2008, 12:27 PM) You are plotting the elipsoid fine. The eqaution you are using assues the elipsoid is centered at the origin and the axis of rotation is along the one of the axis. you need to mod your equation such that it rotates the elipse about the line connecting your two points. Ben
  24. Here's a simple construct for this using a Comparison and Select function.
  25. I'm just catching up on some older messages. Another possible solution to this problem is to use I/O references (new in LV FPGA) in the subVI and specify the I/O channel as constants in the calling VI. The subVI does not need to change and the user can specify the specific I/O in a clear readable fashion. You cannot put the I/O references into an array to pass to the subVI, but you can bundle them in a cluster. I have attached a very simple example for 8 DI channels.
×
×
  • Create New...

Important Information

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