-
Posts
1,981 -
Joined
-
Last visited
-
Days Won
183
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by drjdpowell
-
SQLite Library Beta: Parameters in "Execute SQL"
drjdpowell replied to drjdpowell's topic in Database and File IO
Hi Guys, Support for writing multiple rows in this manner is on the Roadmap, but not yet existing, partly because I am debating multiple options: A new function, "Execute SQL Multiple Times", that takes a parameter input of arrays of clusters or a cluster of arrays and does multiple executions of one SQL statement. Integrating it into the existing "Execute SQL" node. Upping the LabVIEW version to 2017 and introducing a new VIM version of either (1) or (2). The problems with (2), which you guys are thinking should work are: "Execute SQL" is a polymorphic VI with many members, and major changes to support functionality like this is very time expensive for me. That function is already quite complicated, and increasing what it can do is going to make it more confusing. Usually when one is executing the same SQL many times, one is INSERTing rather than getting any results, so a new function (1) would only be one VI, and it could have documentation (and a different icon) that clearly describes using it on multiple INSERTs. An advantage of the VIM (3) is that I can make the input accept only data in the right form (array of cluster, cluster of arrays). This is not high priority for me, as I see it as about convenience rather than new capability. You can already do things more flexibly and faster-executing using "Prepare Statement" followed by a loop, or you can do it easy (but slow) with "Execute SQL" in a loop. -
I am trying to shift discussion of Messenger Library to a group at NI, as this conversation is at 12 pages and is hard to follow. New post about a beta feature for TCP that I am working on: https://forums.ni.com/t5/JDP-Science-Tools/New-Beta-feature-Reconnecting-TCP-Messenger/gpm-p/4092514#M5 Here's the image. The idea is to have a persistent TCP Client connection that will try and reestablish itself if broken.
-
Events or Queues
drjdpowell replied to Bhaskar Peesapati's topic in Application Design & Architecture
You're right, this needs an example. How you describe it sounds correct. I've had as many as four update Booleans, I think. -
Events or Queues
drjdpowell replied to Bhaskar Peesapati's topic in Application Design & Architecture
It's documented in the DEV Template. I use a feedback timeout that is default 0 ms from every case but the Timeout case (which feeds back -1). This makes the Timeout case execute exactly once after the event queue is empty. Use a "Display needs update" boolean flag to record if the display needs updating in the timeout case. One can do this with Queues as well. With this one is able to look at all incoming data, but do expensive display operations only as often as possible (but as quickly as possible). So you could, for example, have information coming in a 100 a second, and display using fancy techniques (like complex 2D pictures) that take 100ms+. This is more responsive and a look more robust than the "drop old stuff" technique. -
Events or Queues
drjdpowell replied to Bhaskar Peesapati's topic in Application Design & Architecture
A Notifier is only usable is you only have one type of message coming in, and your display doesn't include any history, like a chart. Personally, I keep the data transfer lossless, but just make the actual front panel display update lossy. -
Events or Queues
drjdpowell replied to Bhaskar Peesapati's topic in Application Design & Architecture
They way you're using DVRs here, pulling the full data out of the in-place structure, forces a lot of copying. You have to do the work inside the event structure if you wish to prevent copying. -
I've submitted a new version to the Tools Network.
-
This fix is on the Tools Network now. JDP Science Common Utilities 1.2.1.12
-
Have you used this? Any fixes needed?
-
I suffer from the handicap of being located in UTC+00:00, which makes it difficult for me to spot bugs in local to UTC conversion. I have to remember to switch my computer to the wrong timezone to test things, and I obviously didn't do that here. Thanks for spotting this. The format specifier should indeed have a ^ in it.
-
I believe those dlls came from a standard postgreSQL: https://www.postgresql.org/download/windows/ You could try installing postgreSQL from there and finding the latest-compiled versions of those dlls.
-
That doesn't make much sense. Those DLLs aren't created by me; they are the standard PostgreSQL DLLs that I downloaded. They can't have any dependencies on any LabVIEW stuff.
-
Only suggestions I have are: Is the exe in that "builds" folder. The EXE xpects teh dll at "<EXE's folder>/data". Your screenshot shows the dll at "builds/data". Could be a missing dll that libpq.dll calls. Try downloading a full set of Postgres dlls and place them in the data folder.
-
Design advice needed for data acquisition system
drjdpowell replied to brownx's topic in Application Design & Architecture
I've never used Test Stand, but if I did, my first thought is to have a main LabVIEW App that controls all hardware, with Test Stand connecting (using the Messenger-Library TCP functions) and interacting via messages. Just as Shaun is describing. -
Design advice needed for data acquisition system
drjdpowell replied to brownx's topic in Application Design & Architecture
All my applications are developed with a package I wrote several years ago called "Messenger Library": https://labviewwiki.org/wiki/Messenger_Library There are a few YouTube videos linked from that wiki that go through an actual example application. It's motivated by the Actor Model, and so I take inspiration from frameworks like Erlang, Akka or the C++ Actor Framework. The core concept is "messaging" to gain the benefits you list. -
Design advice needed for data acquisition system
drjdpowell replied to brownx's topic in Application Design & Architecture
Remember that you are a User, and you only look at User Interface. When you "open a class" a cluster UI widget is loaded to represent the class data. But that widget is not the actual cluster. When you "open a subVI", the corresponding front panel is loaded with UI widgets to correspond to the block diagram terminals. But for most subVIs, that front panel is never loaded if it is not opened. This is unfortunately counter intuitive, as every subVI has a User Interface (Front Panel) a new programmer will think that is significant, while an experienced LabVIEW programmer will intuitively understand that the front panel of most subVIs doesn't really exist at runtime. -
Design advice needed for data acquisition system
drjdpowell replied to brownx's topic in Application Design & Architecture
Didn't not read the full conversation, but thought I'd point out to the OP that it is a common mistake for programmers coming into LabVIEW to mistakenly identify LabVIEW's UI Widgets (Controls/Indicators) as being "variables", and Control References (actually references to the UI widgets) as being "data references". They also confuse the UI Widgets with the data that the Widget is acting as a UI for (which I suspect the OP has done when they talked about having many data copies in using "Arrays" and "Clusters"). Performant data-handling code will not utilize the User Interface at all, and if a "reference" were to be needed, it would probably be a DVR. -
No, unfortunately, as it is written in LabVIEW 2017, which does not have that type.
-
Note: you can also do this (using the JSONpath for all array elements) because here one is specifying the element of the array (with default) rather that an empty array:
-
Git can't be this terrible, what am I doing wrong?
drjdpowell replied to drjdpowell's topic in Source Code Control
TortoiseGit is an interesting middle way between command line and a "full-featured" UI tool, as it mostly just replaces text commands with menu selections, and it can be configured to show the basic few commands (with a submenu for less-used commands): Then on top of commands is the "log", which is a visual representation of the repo. -
Git can't be this terrible, what am I doing wrong?
drjdpowell replied to drjdpowell's topic in Source Code Control
Tried GitKraken a bit. Couldn't see enough improvement over SourceTree to consider a paid product (but I may be missing something). If I were going command line, I would first look into Gitless, and attempt by Computer Scientists to fix the flaws of Git. There is a paper on it here: Purposes, Concepts, Misfits, and a Redesign of Git. -
Clone left running in background
drjdpowell replied to rharmon@sandia.gov's topic in LabVIEW General
The task manager should work, though like Neil I also find it displays too much, and have a more specialised tool built into my "Messenger Library" framework: -
Git can't be this terrible, what am I doing wrong?
drjdpowell replied to drjdpowell's topic in Source Code Control
If only there was a > git fast-forward <new branch> One step, and no scary "-force" or "delete" involved. -
Git can't be this terrible, what am I doing wrong?
drjdpowell replied to drjdpowell's topic in Source Code Control
Just for info: my recipe to fix a "detached head" is (using SourceTree) Create a temporary branch on the detached head commit (I prefer to name it "GitIsStupid") "Checkout" the real branch it should be on (usually) "Merge" the temporary branch into the current branch (no actual code merge occurs, so this is non-intuitive to me) Delete the now-unneeded temporary branch Git: making the easy things hard, and the hard things possible. -
openG Configuration Library, error post build
drjdpowell replied to nrosenberg's topic in OpenG General Discussions
You are trying to create your ini file adjacent to your vi; in your exe that path is inside your exe, which cannot have files created in it. You need to have your ini file in a different place.