Jump to content

bbean

Members
  • Posts

    258
  • Joined

  • Last visited

  • Days Won

    10

Everything posted by bbean

  1. QUOTE(Ben @ Apr 23 2007, 09:27 AM) Probably. But I haven't worked with Diadem at all. Attached is a modification to the library that contains a quick fix to the numeric problem. Keep in mind it was done quickly to check the option of storing the data natively. So there may still be bugs. As an extra bonus it also has a new example that saves clusters to specific group/channel. This is nice because you can place your cluster properties at any level in the TDMS format. Let me know what you guys think. Brian This post should probably be moved / combined with http://forums.lavag.org/index.php?showtopic=7486&st=0&p=28510entry28510' target="_blank">TDMS for big config clusters -- is there a better way?
  2. QUOTE(Herbert @ Apr 20 2007, 02:43 PM) I'm really excited about using these TDMS files and an OpenG variant config for TDMS. I started to implement the stuff from PJM :thumbup: . Thanks for all you help. When I added a numeric to the clusters I found it was not reading back properly. http://forums.lavag.org/index.php?act=attach&type=post&id=5604 I believe this results from the fact that the TDMS Write Key write the value as a string: http://forums.lavag.org/index.php?act=attach&type=post&id=5606 and try to read it back in using its native datatype. http://forums.lavag.org/index.php?act=attach&type=post&id=5607 Before I start working on improvements this brings up a few questions. 1) Should we formalize the development in OpenG and start tracking the version changes. 2) Should we store data in the TDMS file in its native datatype (dbl, u32, etc) when possible for compatibility with other software Diadem, etc or should we just store it as a string and convert it back to the data type when we do the read.
  3. QUOTE(Ben @ Apr 20 2007, 08:45 AM) Seems like the boolean data type is not supported directly by TDMS. I modified the Read TDMS Key (Variant)__TDMS.vi to use a string type and it seems to work. It was just a quick fix so I don't know if other issues exist. http://forums.lavag.org/index.php?act=attach&type=post&id=5562''>http://forums.lavag.org/index.php?act=attach&type=post&id=5562'>http://forums.lavag.org/index.php?act=attach&type=post&id=5562
  4. QUOTE The holiday was all skiing and beer in Canada. Highly recommend the Banff area for skiing, even in late March. QUOTE The idea of the dynamic create being able to choose the correct object based on the persist file is in interesting idea, I quite like it, I'm not sure yet how to correctly implement it. The demos I've put together that implement persistence are proofs of concept at the moment, I think there are better ways of achieving it, I need the time to tinker with some ideas and begin working it into the mechanics of the object. You are right, the persist file path doesn't really belong in the datamembers but probably in the object cluster, but this was the quick fix until I can create a GOOP template that provides it. It would be cool if you would like to participate in this. Sure. QUOTE I suppose the direction you take with this depends on the time you have to do your project. If you can tolerate having the persist file path in you data members then go with the architecture I've provided, however if you have the time to tinker then carry on, I don't think you are wasting your time, its just a matter of how much time you have, this stuff is fun after all. In the mean time I'll play with some ideas and post them up for discussion. BTW I posted up a built exe version in 8.2 of the DynamicPersistDemo that you would no doubt be interested in, see the following post. Question about making the Executable file with GOOP or download the code from here I saw that right after I posted the message. I'll take a look
  5. QUOTE Kurt, Got back from vacation and am starting to look over everything. Everything works great. After looking at your code I started to feel a little braver and wanted to revisit some of the approaches I tried before I saw your example (probably a bad idea). What I was trying to do with the GoopTemplate Pump Examples was implement the Factory pattern from LV8.2 shown here: See http://jabberwocky.outriangle.org/Factory_UsingVIs.zip and http://jabberwocky.outriangle.org/Factory_UsingClassRef.zip using the GoopTemplate in LV7.1. The motivation as i see it (may be wrong) behind using the Factory pattern is to seperate the Persist Path data member from the pump object because it doesn't seem like persist file path should be a member of the Pump object. Also the factory approach seems like a very flexible means of abstracting the creation of Pumps (or any other objects). Attached is half-hearted attempt to implement this pattern. The Pump Save.vi creates a digital pump object with a VISA Data IO member, then saves the object data to the ini file under the objects instance name as a section header. After that, I try to implement the pumpfactory to read the pump data from the file dynamically. http://forums.lavag.org/index.php?act=attach&type=post&id=5405 In the PumpFactory I attempt to determine the pump type by reading the "object type string" from the ini file header and then comparing it to the list of "Pump types" in "Pump Factory". Once the type is determined, I would like to dynamically call the appropriate Pump.Create (as opposed to creating a case statement with the hard coded Pump.*Create objects). I guess I'm stuck here and wonder if I'm wasting my time. http://forums.lavag.org/index.php?act=attach&type=post&id=5406 Thanks for all your help, Brian
  6. Thanks Kurt. Its going to take me a while to digest this. Unfortunately (or Fortunately) I'm going on vacation tomorrow for a week. I'll take a look in detail when I get back. I like what I see so far. One question: 1) Is there any reason you made the Persist Method private? It seems like it would be a candidate for a virtual function call. I realize its called in the virtual method of Destroy.
  7. QUOTE(SciWare @ Mar 22 2007, 02:38 AM) Thanks. I use the OpenG Variant package a lot for other projects. I was able to save the Pump.Digital data members to an ini file using the OpenG code. The attached file shows what I have so far. I didn't create the persist method for the DataIO member of the Pump Class because I couldn't determine how the Config File Reads would automatically determine the instance type of the DataIO object from the sections created by the Pump.Persist methods. For example, if one pump has a DigitalIO object that is a DataIO.FieldPoint.Digital and another pump has a DataIO.Datasocket.Digital. The "type" key in the "DataIO object" section of the ini file only says "DataIO" not the specific instance type. Also if I have a collection of pumps how do you distinguish them in the INI sections? Do you add the instance name to the section header? BTW I was going to post on the sciware forums ( http://sciware.com.au/forums/''>http://sciware.com.au/forums/' target="_blank">http://sciware.com.au/forums/ ), but they seem to be down. Thanks for your help. Brian
  8. Does anyone have an example of how to persist an Open GOOP object? I looked at Tutorial 8 from from Sciware's Goop Developer Template (http://www.sciware.com.au/goopdeveloper/SciWare%20GOOP%20Developer%20User%20Guide%20and%20Tutorial.pdf) using supermessaging and INI files. But it seems cumbersome to create section/keys for each object. Also I'm worried that the INI format might not be right/fast for more complex objects. For instance, say I want to persist a collection of digital pumps (from the examples http://www.sciware.com.au/goopdeveloper/GOOPExamples.zip). I want to be able to save this collection and recall it and its state at a later time. The Collection would be an array of pumps. Each pump object also contains a DataIO object. Each of these objects can be instaniated as a child object. One place I'm getting stuck is reading the file back. How do I know from reading the file which instance of the pump and/or digitalIO objects to create. Are there design patterns and file formats that I can use to make this easier? P.S. Pardon my use of terminology. Just learning this GOOP stuff.
  9. QUOTE(Phil Duncan @ Mar 21 2007, 01:29 AM) How bout this: 3G – UMTS/HSDPA Tri Band Cellular Router http://www.kapp.com.au/products/radiotelemetry.asp Also, this company has done wireless broadband with GSM and Compact RIO modules. http://www.sea-gmbh.com/en/crio/cr1_index_e.php?page=inhalt maybe they could provide insight. I don't know if you are locked into the "Next G" wireless network, but it seems like there are a lot of products out there for Ethernet to GSM Gateways
  10. I just recently setup an apache server on windows with multiple project subversion/trac. My head is still spinning from the installation. There were a lot of hiccups getting ssl (on apache) working, all the proper python modules for trac installed and working, and creating the svn access list for multiple projects/users. Some of the applications and their dependencies/modules have installers, but most of the work is done in config files and the command line. I must confess that I'm a windows user so it took a while to get used too. It did get frustrating when you found a deep chain of dependencies for the installations that all required python "easy installs" Right now I don't know whether to be proud of my accomplishment or go sulk in a corner because my noob skill level with apache/python/trac/ssl/authentication etc. But now to try and answer your questions: Multi-user Trac supports multiusers. I choose to utilize authentication via apache to support multiple users in each project. Inside the trac webpage (via the webadmin plugin) you can modify permissions etc for each user. Multi-project Trac supports multiproject. You create a different environment for each project. You can then change settings in an ini file to point to different repositories and customize the webpage for the project. Web based Yes Open source Yes Good performance across distant networks Don't know. Just going across internet a few miles Inuative interface Seems like it so far if you install the webadmin plugin (the next version of trac will have this built in) Comprehensive reporting functions haven't gotten this far yet. Integration with Subversion Yes. Browsing of repository on the Trac webpage. Limit access / viewing to certain sections of your repository. I believe the Timeline webpage on Trac updates everytime you commit to Subversion
  11. Can someone help explain why the attached code takes longer than ~1 sec to execute if my network connection is down. As you can see in the NI Spy screenshot it takes >15 secs. If the network is down I ASSume the 1000ms timeout should abort the VISA open. I know I shouldn't assume. :headbang:
  12. Thanks for the suggestion. If I implement that option, I now find that the real problem occurs at the VISA Write. It seems like the general timeout value I apply to the VISA session does not apply to the VISA Write VI. I think another thing that might be making this difficult to troubleshoot is that I am using remote VISA calls i.e. visa://ip address/asrl2::instr. I'll have to see if the same problem occurs when I am on the local machine.
  13. LabVIEW 7.1 I have a VISA read operation that requires a long timeout (5000ms). When the user wants to exit the application I want to abort the VISA read immediately. I have tried Closing the VISA session in a parallel loop. I have tried setting the timeout property to 0 in a parallel loop. Neither of these worked. :headbang: I looked through the NI VISA programming reference manual and notice a command called viTerminate. snip: "Requests a VISA session to terminate normal execution of an asynchronous operation.". Is this what I need to execute and if so where is it on the LabVIEW pallete? Or is there a simple way I am missing? Thanks in advance
  14. OK Just found a new tool - Google Code Search. I did a search on labview and found this in Perl code: " $self->tone(@$_) if ($_->[0] > 0); usleep($_->[1]*15000); } # Now how many square meters of LabView code # would you need to do this? } " http://www.google.com/codesearch?q=+labvie...ent/SR780.pm#a0 Sometimes I feel like that.
  15. That comment is not as bad as the ones ppl found in windows source code : http://www.kuro5hin.org/story/2004/2/15/71552/7795 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * !!!!!!!IF YOU CHANGE TABS TO SPACES, YOU WILL BE KILLED!!!!!!! * !!!!!!!!!!!!!!DOING SO F*&^s THE BUILD PROCESS!!!!!!!!!!!!!!!! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  16. Some questions about SVN and LabVIEW. How do ppl deal with multiple LabVIEW versions in SVN? or more specifically what subversion repository structure do ppl use for multiple LabVIEW versions? Is it like this: <root>/Project1/LabVIEW 7.1/trunk <root>/Project1/LabVIEW 7.1/branches <root>/Project1/LabVIEW 7.1/tags <root>/Project1/LabVIEW 8.0/trunk <root>/Project1/LabVIEW 8.0/branches <root>/Project1/LabVIEW 8.0/tags <root>/Project2/LabVIEW 7.1/trunk <root>/Project2/LabVIEW 7.1/branches <root>/Project2/LabVIEW 7.1/tags <root>/Project2/LabVIEW 8.0/trunk <root>/Project2/LabVIEW 8.0/branches <root>/Project2/LabVIEW 8.0/tags <root>/Utilities/LabVIEW 7.1/trunk <root>/Utilities/LabVIEW 7.1/branches <root>/Utilities/LabVIEW 7.1/tags <root>/Utilities/LabVIEW 8.0/trunk <root>/Utilities/LabVIEW 8.0/branches <root>/Utilities/LabVIEW 8.0/tags Or Like this: <root>LabVIEW 7.1/Project1/trunk <root>LabVIEW 7.1/Project1/branches <root>LabVIEW 7.1/Project1/tags <root>LabVIEW 7.1/Project2/trunk <root>LabVIEW 7.1/Project2/branches <root>LabVIEW 7.1/Project2/tags <root>LabVIEW 7.1/Utilities/trunk <root>LabVIEW 7.1/Utilities/branches <root>LabVIEW 7.1/Utilities/tags <root>LabVIEW 8.0/Project1/trunk <root>LabVIEW 8.0/Project1/branches <root>LabVIEW 8.0/Project1/tags <root>LabVIEW 8.0/Project2/trunk <root>LabVIEW 8.0/Project2/branches <root>LabVIEW 8.0/Project2/tags <root>LabVIEW 8.0/Utilities/trunk <root>LabVIEW 8.0/Utilities/branches <root>LabVIEW 8.0/Utilities/tags Or neither :question: Branch/Tag/Trunk directories When you do a checkout to the local machine do you prefer to see the \branch, \tags, \trunk directories from the reository on the local machine? Utilities Do you checkout your "utilities" directly to the appropriate versions user.lib? Or do you use externals and checkout everything (project vis and utilities via externals) to a local project directory? Sorry for all the questions, just trying to figure out what works best for people? :beer:
  17. I found this commment in the following NI VI - LabVIEW 8.0\vi.lib\_oldvers\_oldvers.llb\compatReadText.vi: "this may need work, see note below" Makes you wonder. Has anyone found other interesting comments left accidentally in NI's or your own code?
  18. Do you know how much a Pushok license costs? I don't want to have to fill out all that info on the website just to find out. Brian
  19. FYI. You can handle externals in TortoiseSVN by right clicking on the directory, selecting properties, and then the Subversion Tab
  20. Got it thanks. I had the original ini entry but I forgot the SuperSecretPrivateSpecialStuff=True. That seemed to do the trick.
  21. LV 8.0 I knew I was missing something. This should work for me. Thank you. Still can't figure out how you did this. These are the options I have for VI Properties: Regards, Brian
  22. Am I missing something simple or is there no easy way to open a subpanel VI block diagram window while it is loaded in a subpanel ? :headbang: I would like one of two things: 1) Open only the block diagram window of the subpanel VI before I run the toplevel VI. 2) Put a button on the top level VI's user interface that allows me to open the block diagram of the subpanel VI I have in the subpanel so I can debug the VI's code while it is loaded in the subpanel. Right now it seems like I have to have the subpanel VI open before I run the top level VI if I want to debug the code. Even then, the subpanel VI window does not load in the subpanel of the top level VI. I looked at the VI properties and methods but didn't see anything for Block Diagram except "get image" Has anyone run into this before? P.S. Using LabVIEW 8
  23. Thanks for taking a look at this. I found out the problem. I was missing a portion of the "Header message" when I sent the commands to the controller. The documentation doesn't really explain this header until you get into the examples. I missed it in my rush to get things done. Sorry for the false alarm about events and flow control. Brian
  24. First, has anyone developed a driver to communicate via the serial port with a Digi-sense 68900-11 temperature controller? I've checked ni instrument driver network, google, and the company's website with no luck. I think its manufactured by a company called Eutech. Since I couldn't find a driver, I wrote a quick Labview interface with some simple commands to communicate with the instrument but couldn't get anywhere setting up the serial communication according to the serial communciation specification (see attached). I kept getting timeout's and was not able to read or write any data to the controller. The basic settings are 9600,8,n,1, XON/XOFF (w/ XON=11 hex and XOFF = 13 hex) So then I setup Portmon to watch the OEM's software application (which works fine). The OEM applicaiton seems to have a different setting for the "Shake:80" serial setting in Portmon. I've tried a bunch of different handshake settings using the VISA Serial Setup vi to try and match the OEM software to no avail. Also the OEM software seems to enable a bunch of Serial Events. Some of these I can enable and some I can't, but when I enable the events the computer justs grinds to a halt. Do I have to enable and handle the Serial Events or can I ignore them? So I turn to you guys for advice. Attached is my code, the comm spec, and port mon snapshot's. Download File:post-549-1153680070.llb Download File:post-549-1153680142.txt
  25. Table 2 is just a link between the Graphs Table and the actual Plot Data in the Plot Data Table. Really you only need two columns for Plot ID and GraphID, the extra stuff is if you want to store information specific to the plot..like a color so that you could load the configuration into your graph property node when you query the db for a Graph. I have been using a similar technique on an application recently and it hasn't had any problems yet, but the Plot Data table is still relatively small ...about a million points. I can query and return a 150000 pt plot in about 5 secs across the LAN. Not too bad. We'll see how it does as the DB grows. I'll let everybody know if there's an issue.
×
×
  • Create New...

Important Information

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