Jump to content

hooovahh

Moderators
  • Posts

    3,360
  • Joined

  • Last visited

  • Days Won

    268

Posts posted by hooovahh

  1. I got excited when I found VIPM VMWare ThinApp as a possible solution (it allows you to "record" an app installation and then package it up as a single file EXE), but then I looked at the price tag (~$6K).

    [update: VIPM ThinApp -- haha! :)]

    Yeah I actually made a ThinApp of an entire LabVIEW development environment. It made a 500MB EXE for LabVIEW 7.1 but I had this single EXE that had LabVIEW on it. I had some issues when trying to use it on Windows 7 when made in XP. I also made one for LabVIEW 8.6 and it was like 1.4GB EXE file. It works but crazy expensive, and there can be alot of tweaking involved.

  2. I haven't used subpanels enough so this may sound like a stupid idea.

    Can you dynamically change the levels of a subpanel? If this is the case and at run time you can change which is on top, then on option (another bad one probably) is you can get a reference to all controls in panel that's on top then store the coordinates of the controls. Then register a user event for a mouse click. If it was clicked and the mouse is not on a control (looking at coordinates of each control) then move the next subpanel to the top and simulate a mouse click at the same position with a Windows DLL. (assuming Windows). Then perform the same operation where you see if the coordinates of the mouse are on a control. If it is then good perform that event, if it is not then go through the subpanels until all have been moved to the top.

    A problem that could occur is if you have too many subpanels it may take some time to go through them all moving them all to the top. Helping this would be to store all the coordinates of controls at the beginning instead of using control references and getting coordinates every time. Also I have no idea if you can move sub panel levels, or even how much time it may take to perform the operation. Good luck.

    • Like 1
  3. No, there is only the three levels you mentioned, File >> Group >> Channel. I'd be curious about your situation where you have subgroups. I have been using TDMS in the following way and don't need more than these 3 levels.

    I usually have a file for each UUT tested. The File properties are the UUTs specific information, then I usually only have 2 or 3 groups, one for test data, one for debug data, and some times one for extra data that goes along with the test that the user doesn't care about. Then in each group I have channels of data that are important to that group.

    One thing that always helped me visualize it is the Excel viewer for TDMS. This makes each group a workbook, with each channel being a column, and each sample having a row. So you asking for subgroups to me is like asking for a 4D Excel file.

  4. I swear she's saying: "My titties are OK"

    Pretty close. Google translator came up with this.

    "tieten zijn okee" >> Dutch to English >> "Boobs are okay"

    Do you think it costs alot to make that video? Looks like a green screen, a couple people and random props from a sex shop and a party store.

    Also...whiskey tango foxtrot?

    Favorite comment from the Youtube page:

    "i think i speak for the western world when i say WTF?!?"

  5. Very cool indeed. Usually things like this can be found out by using the highlight execution but this one does nothing.

    You can however find the wires by when the mouse changes to a pointer. (to the left of the wait function is one) Odd that it hides the wires but still allows you to select them by clicking them, but not by going to Edit >> Select All.

  6. Here's a suggestion of one of those "It could work but why would you want to" ideas.

    In the past I have been successful with making a single EXE, Which contains all files for a LabVIEW development environment using ThinApp. Basically you install LabVIEW in a virtual machine then run ThinApp and it creates a single EXE with all the files needed to virtualize a environment so that LabVIEW can run without needing to be install. It basically makes LabVIEW portable. I've done this with LabVIEW 7.1, and 8.6 in the past just as tests and had relative success with Windows XP but had some issues with Windows 7. In any case one option would be to make LabVIEW 2010 portable at home then put it somewhere on the internet, then go into work and download it. Then when you want to view some code on this site you'd run the EXE which doesn't write to the Windows registry, and only writes to temporary file path, and then you could open the VIs from this (or any) site for viewing and editing.

    To get this to work properly there'd be a ton of work and legal issues. Lets say you have the time and money. You'd need a license of LabVIEW to install at home, then you'd need a license of VMWare (I think there is a free version now), then you'd need a license of Windows for that virtual machine, then you'd need a license of ThinApp (very expensive), then you'd need to invest time in making LabVIEW portable, activating LabVIEW in the process. You'd probably end up with a 1-2GB EXE file which you'd need to find a place to host. If you ignore all the difficulties of the project you'd then need to wonder is it legal to do this with LabVIEW? This one EXE could be taken to 100 different machines and not need to be activated (because it was already done in the virtual machine).

    Again I'd like to point out the "It could work but why would you want to" factor when screen shots or server side interpretation could make it work for viewing much easier.

  7. It's text based, but I found it funny.

    s = 7

    "We're allowed to have multi-character variable names now, you know."

    slots = 7

    "Okayyy... Isn't that 7 sort of hard-coded?"

    SEVEN = 7

    ...

    slots = SEVEN

    "Very funny."

    SLOTS_PER_WIDGET = 7

    ...

    slots = SLOTS_PER_WIDGET

    "Getting there."

    import widgetConstants

    ...

    slots = widgetConstants.SLOTS_PER_WIDGET

    "Okay, that's..."

    widgetModelFactory = WidgetModelFactory.getInstance()

    widgetModel = widgetModelFactory.getWidgetModel()

    slots = widgetModel.getSlotsPerWidget()

    "Sure, okay, that's..."

    context = Context.getCurrentContext()

    serviceDirectoryFactory = ServiceDirectoryFactory.getServiceDirectory(context)

    serviceDirectory = serviceDirectoryFactory.getServiceDirectory(context)

    serviceDescriptor = ServiceDescriptorFactory.getDescriptor("widgetModelFactory")

    widgetModelFactoryServiceLocator = serviceDirectory.getServiceLocator(serviceDescriptor,context)

    widgetModelFactory = (WidgetModelFactory)widgetModelFactoryServiceLocator.findService(context)

    widgetModel = widgetModelFactory.getWidgetModel(context)

    slots = widgetModel.getSlotsPerWidget()

    "I'm not sure you've really got this whole Object-Oriented thing down quite right..."

    slots = thisWidget.getSlotCount()

    "Thank you."

    Source

    • Like 2
  8. Here's something I whipped up. It uses a VBScript to get the version of a file. I then had LabVIEW call it through a command line and parse the output. It's not the cleanest method by any means, but it was the fastest. I googled getting file version and one of the first things that came up was a VBScript for it. This VI should return the same build version that you have in a Build Specification in the application builder. I didn't do any error checking on if the file doesn't exist, so if you just run it without a path it will not error out, and the version will be blank. The VI is saved in 8.6.

    GetFileVersion.zip

  9. Yes there is such a VI. That VI is provided by NI. It's located at '\vi.lib\Utility\libraryn.llb\Is Name Multiplatform.vi' in LabVIEW 8.6 and up. For older version look in 'project\llbedit.llb\Is Name Multiplatform.vi'

    Ton

    Thanks Ton another nugget from the VI.lib that could be exposed on the palette.

  10. Attached is a VI that I think does what you want. It opens the file as a text file. Then processes each line one at a time. It will take each line and replace all spaces with tabs. Then it will convert that string to an array using the tab as the delimiter. This will generate several elements that have no value, say if you had a tab followed by another tab. So we then filter the 1D array removing all the empty elements. I didn't know if you had any OpenG stuff installed so I made the OpenG filter 1D an inline VI. BTW saved in 8.6

    Open Data File.vi

  11. hi

    both of These two topic is posted by myself

    Also another duplicate post from within Lava under the Site Feedback and Support page?

    In any case just have your bytes in an array then perform an sum function to get the sum of all the bytes. I added your bytes manually and I didn't get 0xCF I got 0x31 and my program attached also gets 0x31.

    Next time try to attach some code you've already tried but couldn't get working properly.

    Checksum.vi

  12. The new VI Scripting palette adds a shortcut to the Traverse for GObjects.

    post-10515-047382000 1280488734_thumb.pn

    It's nice they put that on the palette but I've been using it for a while, it's one of those nuggests in the Vi.lib that most people don't know about.

    EDIT: Oh and max undo set to 99, again a feature some people would do them selves.

    I also saw something about TDMS API improvements but didn't see any examples, can anyone elaborate?

  13. I would recommend the FPGA route. I recently setup an FPGA to have about 10 PWM inputs and outputs on each of the 4 connectors. Each of these 40 PWM signals could be setup for PWM input or PWM output. I then added some debouncing code for each of the 40 PWM inputs. After that I tried adding code to detect 100% or 0% duty cycle on the inputs and that is when I ran out of space on my 4M gate setup (there were a few other things on the card) So I removed some unnecessary code like not all PWM needed to be an input or an output so I removed the unnecessary bits and it fit with plenty of space to spare.

    Each of the PWMs are being read all at the same time but they can all be in the same time loop (you don't need an individual loop for each PWM signal). Instead of waiting for a high or waiting for a low, you can use feedback nodes. I think NI had an example on this somewhere. There are 2 U32s for each PWM input and 2 U32s for each PWM output on the front panel. I realize this is probably where alot of my gate usage is going, but after investigating memory management in a timed loop I decided to just go with front panel controls because I knew it would work but it might not be the best way.

    Attached is an example of reading or writing two PWMs with debouneing on a 7813R. I haven't compiled the FPGA, and I haven't test the code but this is the technique I used.

    PWM FPGA Example.zip

  14. I think the answer you are looking for is CSV or the like. Reading a tab delimited or comma delimited file is a native feature and can be done very quickly. There are some xml parsers that have been written, TDMS of course, and I think think that the file format for .DOC and .XLS are now documented, so theoretically a parser could be written (or may already exist in a DLL) for that. Pretty much the answer is any file type can be read in LabVIEW if you know how to parse it, and what structure it is in.

  15. Cross-Post

    I am attempting to replace an existing system written in Labtech Notebook. I have the source code but I am having problems viewing it. I went to Omega's site and they have a old version of it available for evaluation but my code is from Windows 95 and the evaluation crashes when I try to open it.

    I contacted Omega and they said that they don't have anything

    The product is completely obsolete. The company who made it is long gone and hence I cannot get anything for software group either.

    Does anyone here happen to have a old version of Labtech Notebook (Windows 95 preffered but any would be great) that I can try the evaluation on, so I can just view the source, and then re-write it? Thanks.

  16. Yair-

    Works! For our application, I just had to add a SetWindowPos (hWndInsertAfter = -1) afterward to keep the window in front (topmost)... Thanks for the help!

    Wow that sure does work...it actually works a little too good. I wrote a VI that just waits 10 seconds then calls your VI to bring it forward. In the first 10 seconds I took notepad and put it frontmost manually. Then the VI brought it self to the front.

    Problem is after the VI stopped executing it was still the front, meaning it was Always On Top, of all other windows...I then went to close the VI but nothing happened. I then realized it was because my VI was unsaved and the Save Dialog appeared but because my window was front most I couldn't see it. And because the save dialog was there I couldn't move my VI's window to see the Save Dialog window. I closed it by using the keyboard but how do I make the window not Always On Top after bringing it to the front?

  17. I had some problems with making a LabVIEW window the frontmost of all windows at one point. Using Windows DLLs I could make a LabVIEW window become the topmost of all other LabVIEW windows, but if there was say notepad open I couldn't get it to make the window on top of notepad.

    So I wrote a quick AutoIt program to do it and it seems to work fine. Source is included. It is a command line program where you can specify the Processor ID, or the Title of the window (not sure why I didn't implement hWnd). If the Processor ID has more than one window it just picks the first one. If you don't know the Processor ID of an application you can open the Task Manager, go to the Processes tab, and then in XP you can add a column called PID using the View >> Select Columns. Not sure how it's done in Windows 7 but I know it is there too.

    Usage: FocusWindow.exe /PID ####

    Will focus the window with the PID #### and return the HWND.

    Usage: FocusWindow.exe /TITLE "####"

    Will focus the window with the title "####"

    FocusWindow.zip

  18. I've never made anything like this in LabVIEW but there are several commonly used DLLs which give you this function.

    Searching Hashes.dll in google came up with several places to get a DLL that calculates a whole bunch of hashes.

    MD2

    MD4

    MD5

    SHA1

    SHA256

    SHA384

    SHA512

    HAVAL128

    HAVAL160

    HAVAL192

    HAVAL224

    HAVAL256

    GHOST

    TIGER128

    TIGER160

    TIGER192

    RIPE-MD128

    RIPE-MD160

    CRC32

    CRC16

    ARC-CRC

    I don't have any VI that uses this DLL but I don't think it should be too hard to get the functionality you want.

  19. I may be wrong but I thought the safely remove was primarily just for storage based devices. And doing so just ensures that you are not writing (or probably reading) to the device when you unplug it. I also heard somewhere that most devices don't need to be safely removed because of some weird buffering that goes on in Windows and removing it while writing won't screw it up just cause the files not to be written (because they didn't finish)

    So if what I said was all true (and it might not be) then I would say there should be no problem in removing the device without going through the procedure to "safely remove" it. Have you ever tried to safely remove it and it say that it can't because it is being used? Try making a DAQ task that uses it then try to remove it. If it says it is okay to remove then I don't see a need to safely remove it. If it says that it can't be removed, that doesn't mean it will break it, only that it may need more investigating. I'm curious does the manuals say anything about safely removing the device?

×
×
  • Create New...

Important Information

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