Jump to content

ShaunR

Members
  • Posts

    4,940
  • Joined

  • Days Won

    307

Posts posted by ShaunR

  1. The first error it came up with (with what you described) was here.

    Check that path exists.

    I changed if the "c:\ftpscript.txt" and no longer got the file error (obviously). However, it then complained about this one (again doesn't exist...but then it probably wouldn't on my machine)

    By adding an error out indicator Labview will no longer automatically handle the error.

    But you really need to think about your error handling because currently the software is not robust and I can see you spending the next 2 weeks creating directories that the software thinks should be there..

  2. Well. It hasn't reached 300 but it's in 3rd place. So that's awesome!

    It also surprises me that none of the idea exchange ideas ever reach really crazy number of votes. Like i've never seen 1000 votes or something. I wonder what this means?

    • There are not that many LV users out there.
    • LV users don't like voting.
    • They don't visit the idea exchange.
    • They are not aware of the idea exchange.
    • They don't like any of the ideas. (even then, why the hell wouldn't you vote?)

    No .1.

    Labview is a niche.Mainly due to its proprietary nature, targeted at test and automation and, of course, price.

  3. The error is a code 1, "SQL Error or missing database".

    Unfortunately, the Flatten To String function in LV returns a fair number of null chars when you feed it, for instance, a waveform. Escaped null chars don't seem to have the issue, so I might give that a try.

    Thanks again,

    Joe Z.

    If its a waveform you can use the "Array To Spreadsheet.vi" and store it as a comma delimited string. Or even each separate value with a time stamp in its own table.

  4. I confirm, no issues with LV9. And now that i have deleted recursive VI, no issues even with LV 8.5. Maybe i'll convert the recursive VIs as you said with call vi nodes to have all the tool working, but for the moment i only need to make some simple query and i don't need nothing more ;)

    You probably only need to take them out of the polymorphic VI. Rename column calls delete column and they are both in the table polymorphic vi.

    Fun stuff, thanks Shaun!

    It's worth noting that attempting to write a raw "\00" causes a glitch in the low level prepare (sqlite3_prepare_v2) vi. I'm guessing it's due to:

    The statement size is wired as a -1 by default. I'm tinkering with different sizes now, but would take any ideas out there.

    Thanks,

    Joe Z.

    What sort of glitch?

    -1 is much safer since if you supply a normal Labview string, you would have to add 1, however, if you supplied a null terminated string, you mustn't add the 1.The logic involved in detecting null chars outweighs any performance improvements you may get. If its better performance you are after, you'll have to wait for Version 1.1 wink.gif

    However. If you are trying to insert a null char into the database. You will have problems since c strings are null terminated, So when you pass the string (even with the length) Labview needs to convert it from a Labview string (which has a length that may have leading nulls) to a C string and this conversion will invariably truncate your string.

    Usually the way forward in the latter case is to use a "Blob" field but I haven't implemented that in this release.

  5. maybe there is a a little misunderstanding.

    i don't have LV 9.0 for linux, i have LV 8.5 for linux. That's why i have to convert VI's forst to LV 8.6 in windows and then to 8.5 for linux.

    IC.

    Well that explains the recursion issue you are seeing. Prior to LV9.0 recursion was only supported by opening a ref and using a call vi node. But its nice to know with a bit of hacking it can work on older LV versions......even Linux biggrin.gif. I presume (since you haven't mentioned any so far) that there are no issues in your windows LV 9?

  6. No I don't

    ...even if i cannot find any TARGET_BITNESS variable in the project...where is it placed?

    Oh, QUery3.vi, rename column and dlete column report the same recursion problem.

    It's an in-built definition the same as "TARGET_TYPE".

    I'm a bit stumped as to why LV9.0 on Linux cannot support recursive VI's when Windows x64 and x32 don't seem to have an issue.blink.gif You could remove them from the polymorphic table VI and add them separately to your palette since it seems it's the polymorphic instance that is causing the problem.

    Unfortunately, Linux documentation a is bit lacking. I have several VMWare Linux images, but was unable to find a downloadable trial version of LV9.0 for Linux, otherwise I would have tried it. The NI website only has windows and Mac. If you go to their Linux download section you only get a windows EXE installer although it says its for all OSs ph34r.gif.

  7. I Didn't make an example i only created a new blank vi and place a Table.vi inside.

    Could it be a converting from LV9 to LV 8.5 problem? To make this i had to convert to 8.6 first and then with LV 8.6 to 8.5...maybe something get lost inthis step.

    I created a New project but the OS variable was not "Unix" but "Linux" and the bitness variable did not exists.

    Now i'm trying reconverting Vis from LV9 to LV8.5 and using a project, i'll let you know if i find something new

    I believe TARGET_BITNESS was first introduced in LV 8.6. Do you have any difficulties in LV 9?

  8. Hi!

    i'm porting this toolkit in Ubuntu Linux with version 8.5 of Labview.

    Swwet.

    I did include aLinux x32 library but didn't advertise the fact because it was untested.

    Some polimorphic vi needs to be modifyied to work correctly such as SQLLite_Delete column.vi and SQLLite_Rename column.vi it said that "you cannot use "SQLLite_Rename column.vi" recursively, so i deleted them :)

    I'm surprised by this. What said it? Those two function are actually a trick. They just use SQL to copy the data to another table, delete then recreate the original and copy all the data back. SQLite doesn't have delete or rename columns function, but it is needed. To get this error, one of the other VIs would have to include it. Do you have an example use that shows this error?

    After that you place a conditional disabled structure for Unix but to make it work i had to change that condition from OS==Unix to TARGET_Type==Unix.

    I try changing it in OS==Linux as i see in the conditional Disable Symbols, but it didn't work the first time it said that OS was undefined. now i start labview again and it seems to work...what is better? OS or Target_Type?

    Instead, TARGET_BITNESS is an unexisting variable.

    OS and bitness are only available from within a Project. But Target Type is available all the time. Did you open them from within a project? Or just stand-alone VIs? Try adding them to a project.

    The problem is that linux, like windows, also has x32 and x64. We need the bitness to choose the appropriately compiled DLL.

    The choice of whether to use OS or Target Type was arbitrary. They both support the same things (more or less). I leaned towards OS because that is the one that NI use in their example.

  9. Hmm. I was thinking about that.

    Any thoughts on saving objects as binary text? And then opening up and acting on data and then resaving as binary?

    Does anyone have ideas about how this would perform?

    My framework is really just collecting and acting on serial data so I may have some performance time to spare.

    My original architecture was built with the thought of saving each UUT object's data somewhere. I was hoping to implement the ability to pull up any tested UUT's object data (maybe with a custom viewer) to see all the data that was collected during the test. This seemed easier than creating a custom database and spending time converting each LV piece of data to a corresponding field value.

    -Pete

    You can save the cluster as a "Blob" (Binary Large Object). Although I'm not sure what you mean by "binary text" blink.gif You wouldn't have to save the object data piecemeal style But databases are built for this kind of stuff and I think that if you went down this path you would see major benefits to saving each piece of the cluster as a separate field.

    Performance is pretty good if the DB resides on the same machine as the application. You could also look at "SQLite API". This release doesn't support "Blobs", but you could serialize the data using the flatten to string primitive.

  10. On the shown of the actual VI how is runs, sequences and the Error 7 Occured.

    The Error 7 only allow me to click on "Continue" or "Stop"

    It required me to click on "Stop" and manually click on the "Run" of the .vi then allowing me to have the .vi to run the sequences all over again,

    allowing it to Create the NEW date folder (E.g. 100824) and transmit text data into the folder.

    where problems lies that if possible shouldn't have the Error 7 to appear but it continuously runs on from the 1st sequences all over again

    to produce the (different output each day falls - output for each day is different values)

    :frusty:

    I gave you the answer to to that in my first post. (You can press continue by the way).

    Check the VI properties of all your VIs and make sure this is unchecked.

  11. OK. I get it.

    couple of things to look at.

    1. What is the 100823? If it is system time (like in excel etc) I'd expect that to be 40413 for 23/08/2010. Whereas 100823 would be 15/01/2176.

    2. From your images. You show 100823 with no directories afterwards. Then you show after the roll-over 2 extra directories (albeit without the 100824). Could it be that the data you are expecting in 100824 is in fact in one of these and your program has skipped when saving for this particular date?

    3. Is this the only date it happens on? Does the software quite happily save as you expect but on this particular date it doesn't? You show many directories previously and after the 100824.

    4. Looking over the history of results. there are many "gaps" in the data record 100722 suddenly jumps to 100820 (98 days?) , 100531 suddenly skips to 100601 (70 days?) etc. What is the reason a file wasn't saved between those periods? Could it be a case that you just didn't receive any data therefore there was nothing to save?

  12. I wish I had an excuse to play around with this, it looks sweet. :thumbup1:

    You need an excuse? I thought it was our nature to play with this sort of stuff biggrin.gif

    I concur. Next time I ask myself whether or not to choose a database implementation or simple binary files to store data, I'll try to find some time to try these first...

    Keep it in your palette and I'm sure you'll think of something. wink.gif

  13. Currently working on a project with the Requirements below.

    Currently about 80% of the project is done as far.

    Requirements:

    Step 1: Open a .vi, Run when Opened. It reads the PC system date/time and create a new folder of the current system date at a specific directory. (E.g. 25 August 2010.) Folder: 100825 >>> Completed

    Step 2: After the Folder is been created, it uses TCP/IP Connection to transmit text data from another computer into the created folder. With the folder containing the text data. >>> Completed

    Step 3: With the data collected, it reads the text data in the folder according to the current system date 100825 to produce the output graph chart. >>> Completed

    Step 4: The .vi runs continuously, so is the PC system date/time. Running at the time reaches 2359hrs, 100825 ---> changes to a new date, 0000hrs, 100826 >>> Completed

    Step 5 (Error Occurs): With a new date/time falls, Error prompt out. The running .vi unable to return back to (Step 1) but stops at (Step 3) with Error occurs. :frusty:

    Need help on the (Step 5) issue.

    Been try quite a number of times of ways to solve yet unavail.:(

    Is there anyone out there able to create a simple .vi that containing with the requirements above?

    As need that for help as for reference.

    Regards,

    david.

    The Step 1 to 5 sequences keeps on running from Step 1 > 2 > 3 > 4 > 5 over and over again whenever a NEW date falls.

    :frusty:

    Regards,

    david.

    If you mean when there is an error condition you are getting an error dialogue when you shouldn't be, then you probably have an unwired error out cluster (or none at all) and "Enable Automatic Error Handling" is set in the offending vis "Execution" properties.

  14. I understood that part (my snippet uses the transaction query VI), it turns out that my problem was that I was querying the database for all records at the end of all the INSERTs. Is there any way to speed up a SELECT?

    Possibly. This release basically does a "GetRow" and has to iterate for each row. There is another method, but it isn't implemented yet. (Still trying to figure out how to do it....if it is possible in LV).

    Do you have a real-time target that uses ETS?

  15. This is wonderful. I've begun implementing it in a current project and need to ask about the Query Transaction function.

    I was excited to read this comment because one of our current systems takes forever to write to our SQL Server DB. (~30 seconds. I imagine it's executing one SQL INSERT for each step it's reporting.) So, I thought I'd test this in SQLite:

    As I played with it I came up with this to see the effect of larger SQL strings:

    I've tried each of the locking modes (immediate, deferred and exclusive) but it's taking almost three seconds to complete only 5000 SQL INSERT statements. This is not as fast as the documentation suggests.

    What am I doing wrong?

    Its not the number of statements. Its the number of "TRANSACTIONS".

    When you use the "INSERT" VI in a for loop, each iteration is 1 transaction. Additionally, the insert vi opens the file before the transaction and closes it afterwards for a slightly safer implementation. The insert is for convenience and a bit more safety.

    If you want blistering speed. You need to use the "transaction query.vi". this will wrap your Insert statements in the "BEGIN...END" and execute all the statements as 1 transaction.

    With the test below. I achieved 10,000 inserts in 609 ms.

    • Like 2
  16. So far nothing is working. I have tried Shaun's approach but I am not seeing any events in my top level VI. I attached the simple example that I have been playing with.

    You are not generating an event.

    I've had a play and it seems that the panel close event isn't really an "OnPanelClose". It is only an event generated by clicking the close button. frusty.gif That's not really what you are after. To also include a boolean you would have to attach to the on-value as well.....too much effort. Might as well put an event after the while loop. shifty.gif

    Back to the drawing boardoops.gif

    Perhaps the 'VI will be purged' event is something you want?

    Ton

    I never had a lot of luck with it (maybe because I don't fully understand it). But sometimes it worked, sometimes it didn't.

  17. Thanks Shun. This is close but it still requires knowledge of the subVI. This requires that the calling application knows the names of the controls of the subVI for processing. Overall this is a reasonable work around but ultimately I am looking for a truly generic solution which decouples the top level VI from the called subVIs.

    All I want to know is when the subVI exited. I don't want to know anything about the internals of the spawned VI nor do I want to require the spawned subVI from having to do anything special to inform the caller that it has exited. It would seem reasonable that the caller should be able to be informed of specific events of the spawned VI.

    I do appreciate the suggestions though. And this callback solution could be useful for other tasks.

    The example does, yes. Because you don't know what controls maybe on the front panel. But ALL vis have a generic on-close event :) So don't need to know anything about the sub VI. You just inspect the reference when the event comes in to find out which VI closed.

    So the install callback just becomes:

    Haven't been through it thoroughly and perhaps not as "clean" as you would like (I suspect you were expecting to just select it with 0 programming). But better than nothing eh?

  18. Thanks Shun. This is close but it still requires knowledge of the subVI. This requires that the calling application knows the names of the controls of the subVI for processing. Overall this is a reasonable work around but ultimately I am looking for a truly generic solution which decouples the top level VI from the called subVIs.

    All I want to know is when the subVI exited. I don't want to know anything about the internals of the spawned VI nor do I want to require the spawned subVI from having to do anything special to inform the caller that it has exited. It would seem reasonable that the caller should be able to be informed of specific events of the spawned VI.

    I do appreciate the suggestions though. And this callback solution could be useful for other tasks.

    The example does, yes. Because you don't know what controls maybe on the front panel. But ALL vis have a generic on-close event :) So don't need to know anything about the sub VI. You just inspect the reference when the event comes in to find out which VI closed.

    So the install callback just becomes:

    Haven't been through it thoroughly and perhaps not as "clean" as you would like (I suspect you were expecting to just select it with 0 programming). But better than nothing eh?

    Oppps. Posted on wrong thread...lol.

×
×
  • Create New...

Important Information

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