-
Posts
4,905 -
Joined
-
Days Won
299
Content Type
Profiles
Forums
Downloads
Gallery
Everything posted by ShaunR
-
They are not the source of your memory leak. The query could be tidied up a bit but with VISA there aren't many options. A slight change with a small advantage would be to build the concatenation at the loop edge (array of strings) then convert to a single string with the bulld string primitive. Real gains can only be made with fixed size buffers and replace elements but then you need all the ancillory capabilities like setting the size of the buffer and the different modes of operation like with the TCPIP primitives to make it generic. I'd leave it alone if it's working. Optimizing the second one is a no brainer, though. Since I don't know what the licence is for the Keithly Vis, I'll just show the alternative solution rather than post the VI.
-
I haven't done much recently with these targets so can't contribute much. But!..... I wanted the project manager to be able to nest projects several years ago. That would solve this problem and enable developers to work and test on separate projects in parallel and pull them together as sub components much more easily-which is why I wanted it. So rather than being a separate target within the project. It would be separate project completely that you could add to another project. Every other IDE has this capability.
-
Tongue in cheek..(What? No likes Transport.lvlib You think too much Too many engineers have their sense of humour beaten out of them by unrealistic marketing requirements and customer demands. Post and be damned My current favourite is: Linux is Windows 95 without the GUI.
-
The best thing I like about *any* jokes is you get more likes than if you answer questions ( ͡~ ͜ʖ ͡~)
-
None of the NI products can navigate proxies properly-even transparent ones. I have to connect directly if I want to use any of their download/upload features (updates, the toolkit down loaders, NIER, et al.),
-
Likewise to all above. huge +1 thanks for taking the videos and distrinuting them for us.
-
CRIO-style architecture for Raspberry Pi
ShaunR replied to dmurray's topic in LabVIEW Community Edition
Well. This is do far off-topic I can't even remember the OPs questions Maybe Hooovahh can move this and the rest to another thread.? -
I don't know if the concatenating tunnel is more efficient. I thought it was just syntactic sugar. Anyway. You could back-save to 2011 and avoid everyone else from asking for it in an older version . You don't have to develop in the old version. The caveat would be if you wanted to use native primitives (like the parser in 2013).
-
Why? 2011 works in all versions up to and including 2016
-
CRIO-style architecture for Raspberry Pi
ShaunR replied to dmurray's topic in LabVIEW Community Edition
Basically. If you try and use events in "Event Driven" languages, the same way you use them in LabVIEW for 1:1. Everything falls over because the assumptions about the underlying mechanisms are incorrect. I think architectures should be language agnostic. -
Yeah. They're not very robust. Try clearing your object cache.
-
Stale VI Server Connections
ShaunR replied to John Lokanis's topic in Remote Control, Monitoring and the Internet
If IT have said that a keep-alive will work, then that is the proper solution and you should be trouble free from then on. Checking every 55 minutes because they said the idle timeout is one hour is just asking for it to fall over in 6 months when someone in IT decides 45 minutes would be better -
Stale VI Server Connections
ShaunR replied to John Lokanis's topic in Remote Control, Monitoring and the Internet
You can get these symptoms if there is a proxy between you and the target. What tends to happen is the connection between you and the proxy is kept alive but the connection to the endpoint from the proxy closes due to inactivity. This means your connection looks good but the tunnel fails when you try to use it. The easiset solution is to heartbeat the connection. -
LVA-Tools.Co.Uk is having a Post NI Week Bonanza with 40% off all commercial toolkits.. Offer is available for one week so grab the opportunity to secure your business data and websocket that application.
-
Approach for watchdog timers?
ShaunR replied to dmurray's topic in Application Design & Architecture
I don't know much about that module but if it has that capability then yes. you could do that. Most NI modules are quite expensive and now you would have a hardware module dependency for just a watchdog. Most Linux kernels have a watchdog feature if the hardware supports it so I would look into that first. If that's not possible, cost is an issue and it is likely just your application that will hang rather than the OS; then you can spawn a separate process to act as the watchdog. -
Approach for watchdog timers?
ShaunR replied to dmurray's topic in Application Design & Architecture
Watchdogs usually give you the option to restart the software if it stops responding and are usually hardware driven. If you have a software one, the chances are your watchdog will hang too so you need an external process that gets kicked every so often. This external app can then forcefully close the application and restart it. You can communicate with the watchdog via TCPIP or sharedmem and just message it every so often from a dedicated loop in the software -
Yes.When mapping LabVIEW variables to other languages then you tend to need "tags" and I can see why the CVT is probably the best solution here. You can define a tag name and use the name in JavaScript to update the UI. You can play around with spamming get requests and consolidating messages into larger update messages but the CVT would be simpler, easier and require less framework. I do the same for websockets but am able to generate events from the LabVIEW UI changing so the tags are implicit in the control/indicator names. Of course. That wouldn't work on a cRIO with no UI. Do the latest ones with a UI support UI events? DCAF. Yes.
-
How to turn off diagram dancing in LV2016
ShaunR replied to ShaunR's topic in Development Environment (IDE)
So now you want me to learn how to make shortcuts I don't use as well? The list goes on.... Next you'll be telling me to learn to type with all my fingers Do people still use Google? -
How to turn off diagram dancing in LV2016
ShaunR replied to ShaunR's topic in Development Environment (IDE)
It's not that I don't like it. It's that it's not useful to me. I don't know what the primitives are called but I know exactly where they are in the menus-IT'S A VISUAL LANGUAGE! I call this "The Chooser", for example. I'd have to open LabVIEW and mouse over it to find out what it's actually called (and then I'd immediately forget). Words is hard! Beta testing isn't a focus group That's the idea exchange. It must be hard coded because it only effects the TCPIP pimitives - not networks streams etc. This is a deal breaker for me and for what? Because "Select" on *nix systems only supports 1024?. On Linux they have gotten around it by using poll and epoll so why not upgrade the *nix platform to more than 1024 instead of downgrading Windows? On Linux you just simply recompile, right? This the worst type of specmanship -
CRIO-style architecture for Raspberry Pi
ShaunR replied to dmurray's topic in LabVIEW Community Edition
Right. So you are filtering on the receiver. There is nothing wrong with anything you are saying but there are three four things that make a clear case for one or the other in the 1:1 cases you describe (in my architectures): Events cannot be referenced by name. For me this is a problem since my messaging system is string based (Like SCPI). The routing is based on module names so this rules our events for command/control queues. This is why I invented named events when I found out about the VIM. I can have more control. I can make the queue lossy (rate limit for comms) or flush them (abort) and I can insert exit messages at the front. You will probably come back and say that's what you want from Events too.but you already have that if you are just going to use an event as a queue with a case statement. You can't "lazy load" events. With a queue I can start up the main and poke some values on to it. Whenever the sub modules start up, they are still there when they come to read their queue. Events don't do this so you end up having to detect when a module is loaded and then send it a message. (External state again) It's not portable.It is using tribal knowledge of a specific implementation of events. It is more of an abuse of events knowing they have a queue in the LabVIEW implementation so the architecture will not work in the other, true event driven language,s that I also program in (Free Pascal for example). -
CRIO-style architecture for Raspberry Pi
ShaunR replied to dmurray's topic in LabVIEW Community Edition
It's actually very straight forward. The main VI pokes the servers to do things and the listeners react to the responses from the servers. Each server and listener is an API with a pre-defined set of actions and commands. They all follow the same template.Keep adding APIs (services and listeners).and keep poking them to do things Each subsytem is standalone (modular) so you can take one; analyse it then run it and test it in isolation meaning you can break down even really complex systems in easily digestible chunks.. Don;t forget to run the TCPIP client first so you can see the Telemetry that hooks all the messages -
CRIO-style architecture for Raspberry Pi
ShaunR replied to dmurray's topic in LabVIEW Community Edition
1- Yes. If you have two queues the state and order of operation is external to the sub systems. This means you can place something on one queue, wait for a confirmation (if it is important to do so) and then place the copy on the other. You cannot do this with events. 2- A key point here is message filtering and, consequently, local state and system state. You can consider it like this. When using a queue you filter events on the sender side. You can decide which queue gets which messages and you can "crank" the system through it's various states by being selective in the messages you send and to whom.So you can move the slide, adjust the camera focus and then take a picture with each subsytem responsible for it's little bit. This means you don't flood messages and have strict control over the interaction between sub systems.. With Events, you filter messages on the receiver side. This means that state is local to the sub system and it is oblivious to the "system state". All messages are received by those registered and they immediately start to do their thing. There are two schools here. Those that have a single or shared event and each subsystem filters for relevant messages to it or a separate registration specific to that subsystem which is the same as a queue but you can't reference by name (hence me wanting VIMS to encapsulate events ) 3-(a) The point I was trying (and possibly failing) to make is that with a single event to read the file and 3 separate event cases to Open, read and write. you don't know which one will happen first. With a queue you can send to each queue separately, in order. 3- (b) Agreed. But tell the JKI state machine that 4-I'm not sure I get what you are saying here and I think you might have me confused with someone else I don't need any more tools for queues. I'm sure I could find a use for queue priorities but I do fine without it. I don't use queues that way. I also don't need event flushing or previewing on events because I don't design systems that message flood.Each message is sent when it is required and only when it is required. I do have things like heartbeats and maybe the odd burst but my systems are not 1000 balls tossed into the air all emitting and consuming messages just to stay in the air. Mine are all sat on a shelf and I poke each one when I need it to do something