Jump to content

torekp

Members
  • Content Count

    204
  • Joined

  • Last visited

  • Days Won

    2

torekp last won the day on January 3 2018

torekp had the most liked content!

Community Reputation

7

About torekp

  • Rank
    Very Active

Profile Information

  • Gender
    Male
  • Location
    SE Michigan

LabVIEW Information

  • Version
    LabVIEW 2012
  • Since
    2001

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Wow, conditional auto-indexing in loops has been around since Labview 2012? How the heck did I not notice this?
  2. DLL functions or shared variables? Or something else? I have a Labview 2014-64 executable (or I can build a DLL) that runs one piece of equipment, the X-ray. The other engineer has a large CVI Labwindows 2015 + MS Visual Studio 2012 (C++) executable that runs everything else. I want the Labview code to be a slave of the CVI code, accepting commands to turn X-ray On or Off, reporting failures, and the like. Translating the X-ray code into C++ would be possible in principle, but not fun. Shared variables look easy, but I'm kinda scared of them. I would define all the shared variables in my LV code, since I'm more familiar with LV, then use them in both. There's a thread in here called "Shared Variable Woes" so maybe I should be scared. In the alternative, I tried building a proof-of-concept DLL in Labview, and calling its functions in CVI/C++, and it works, but it's kinda clunky. (I'm attaching it below in case you want to play, or advise.) Your advice would be appreciated. XrayDLL.zip
  3. For what it's worth, for some classifiers (PLSDA for example), I've gotten better results by using a sequence of binary classifiers, rather than just doing all-vs-all. Dunno if this applies to SVM, but I suspect it could. Might be worth the effort.
  4. After getting a PM from Xuan-Thai, I realized that if you want to sort more than two classes, my other statistical modeling post might be useful as a "prequel" to using this SVM code. That other post: Using the Multiple Discriminant Analysis (MDA) example could help you pick which two groups of classes to separate first. Then you would rinse and repeat, always separating along the most easily discernible lines. For example in the graph from my other thread that you can (depending on your browser?) partially see above, it makes sense to separate white from red-and-green first. The MDA example depends on the following Moore Good Ideas packages (get them with VI Package Manager): MGI Cluster, MGI Error Handling, MGI File, MGI String, MGI Read/Write Anything. I'm attaching a Labview 2017 version of the MDA_example code, or you can get a LV2012 version from the original thread (which also has a PLSDA classifier). MDA_example_without_MGI.zip
  5. Thanks! Sorry, I wasn't clear. I'm not trying to use a DLL in Labview. I'm trying to use a DLL (that Labview created) in C++. I read the first website on the "C Struct Hack" and tried to apply it to your advice, yielding this: int i; int len = 2, len2 = 3; int32_t datasz[2]={2,3}; double data1d[6] = { 1,2,3,11,12,13}; double aresult[2][2]; DoubleArray dataouta; DoubleArray datain; void viGet(DoubleArrayBase * result) { for (i=0; i<4; i++) aresult[i/2][i%2] = (result->element); } void viSet(DoubleArrayBase * myArray) { (myArray->dimSizes)[0] = 2; (myArray->dimSizes)[1] = 3; for (i=0; i<6; i++) (myArray->element) = data1d; } int main(int argc, char *argv[]) { viSet(datain); Linear_discrim_4dll(&datain,&dataouta,len,len2); viGet(dataouta); ) and some printf statements. This compiles (yay, a first!) but has a Fatal Runtime Error dereferencing a null pointer to datain, at the call to viSet.
  6. So I created a DLL from a Labview VI that has a 2D array input (and some scalar inputs) and some 2D array outputs. Labview creates a .h file with these lines And then it defines the 2D array arguments to my function as being of this type: "void __cdecl Linear_discrim_4dll(DoubleArray *dataObsFeat, int32_t grpAsz," etc etc. Trouble is, I have no idea how to fill out this structure so that the DLL can use it. Say for simplicity I had a 2 by 3 input called dataObsFeat with elements {1,2,3; 11,12,13}; how would I create the object with these values in C or C++ and pass it to the function? I am a total C++ noob, in case it isn't obvious.
  7. Ah, thank you! I tried this guy's advice item number 7 and it worked. A bit brute-force, but maybe that's OK. (I'm not using typedefs.)
  8. Yes it was. However my only other option for where the .chm file goes is "same as caller", which also fails.
  9. So, according to this NI document http://zone.ni.com/reference/en-XX/help/371361L-01/lvhowto/linking_vis_to_help_files/ It should be possible to link a .chm file into your executable so that a user can choose Help > Help for This VI. Well, I followed the advice, and no dice. Here is my LV2017-64bit attempt. In the development environment, it works fine, but in the executable Help for This VI is grayed out. The .chm file is a poor excuse, and unrelated to this VI, but never mind that, it's not the problem here. LV17helpEx.chm html_help_VI.vi test_help_html.aliases test_help_html.lvlps test_help_html.lvproj
  10. Supposedly there are Labview tools available at http://www.lvs-tools.co.uk/software/utilities/ But whenever I try to register or login, nothing happens. (Also, I try to think, but nothing happens.) Are there any other Labview codes that use the Windows Memory-Mapped Files functions, or should I just reinvent this wheel? By the way, here is a Microsoft document on the subject: https://msdn.microsoft.com/en-us/library/ms810613.aspx
  11. Thanks guys! I'm downloading the matlab style package now. The primary user is me, actually, and I chose my scheme so that it's easy to ignore everything but color, which groups things nicely. It is a little more convenient for me to graph every particle on one graph, but maybe it would make better sense to have two graphs, one per location. Good idea. Thanks again.
  12. Here is a graph I made recently, which shows particle number (symbol), material (broad color family), measurement location (exact color), amplitude (X axis) and phase (Y axis). That's five dimensions in a 2D graph! There are some obvious limitations. For instance, there are only 16 symbols, so whatever you're representing by choice of symbol better not have more than 16 categories. And there are only so many colors, especially if you want them all to be ordered in a spectrum from red to violet. It gets worse when you try to have "broad color family" like I do here with reddish colors for aluminum and bluish for titanium, because the obvious logical thing to do is to skip over some shades in between the families, reducing the total number of available colors. What other options should I consider? How do you do it? I don't usually use 3D graphs because (a) they're harder to work with and (b) when I create a report for management, they like to have 2D images they can print out, or view without needing Labview on their computer. I'm attaching two VIs I use to create color spectra for my graphs. I use colors_darken_lighten to darken plots for a white background. To skip over colors, I obtained 6 colors in my spectrum and reshaped the array to two-by-three, then indexed by measurement location to get the first two colors from each broad color family. colors_darken_lighten.vi plot_color_spectrum.vi
  13. I'd like to make true XY graphs in Excel, where each data series has its own set of X values and Y values. Unfortunately, interleaving rows of X data, Y data, X data, Y data, etc., won't do it: only the first row counts as X data. And "updating graph data" as shown in this block diagram, doesn't work like I'd hoped. That VI should be called "overwrite graph data" not just "update". Am I overlooking something in the Report Generation toolkit? Ultimately, what I really want is to print an XY graph and have the printout scale to fit the page, be oriented nicely, etc. Saving the graph as a .PNG programmatically is cool and all, but the Windows program to view PNGs doesn't print well. Right-clicking the graph and saving to a .BMP leads to similar issues. Right-clicking and exporting the data to Excel allows me to laboriously construct an XY graph data-series by data-series, which then prints nicely. Keyword: laboriously. Suggestions?
  14. Can you post a (or two or three) typical data string(s)? Usually strings like this have a delimiter, like commas or tabs or spaces, to separate the numbers. So you could do this: I showed the example with comma for the delimiter, but other possibilities are shown above (not wired in). When you create the array type on Spreadsheet String to Array, be sure to right-click the resulting array and select Remove Dimension. Because it sounds like you're getting a 1D array, not a 2D.
×
×
  • Create New...

Important Information

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