Jump to content

Tim_S

Members
  • Posts

    873
  • Joined

  • Last visited

  • Days Won

    17

Everything posted by Tim_S

  1. How much of the CPU usage is your application versus such things like operating system, antivirus, etc.?
  2. You're not looking for polymorphic as I understand your question. The parent class should have a dynamic dispatch VI and the child class should have an override VI that is the pop-up.
  3. We tend towards a RAID system with hot-swap and (on the server) a hot spare rather than a mirrored system (it's interesting, though). The issue we run into is the plant won't even look at the lights on the RAID, look at the monitor (which, admittedly, we try to keep hidden from overly curious users), or listen to the persistent beeping that lets them know things have gone south and they need to pull a spare hard drive out of storage and switch with the bad drive.
  4. We have a production control, SPC, reporting and analysis package that we sell that requires a server to run. Given the option (plants and plant IT have interesting ideas of how things should be at times), we set up the server as a gateway with as many roadblocks as possible. One customer has a variation on this where there is a 1U rack-mount PC that serves as a gateway. This customer also removes all USB ports and keyboard and mouse (the system has a touchscreen). One other thing I've seen is dual-boot the PC (or use a bootable memory stick) with Windows as the test system and a flavor of Linux to perform system maintenance and repair, and (re)imaging of the hard drives.
  5. A bit might be an understatement. That is an interesting idea. I'm going to have to think about that. I'll have to re-read your design a few times to understand it. A whiteboard and some hand waving is often clearer to me than a text description. Tim
  6. I agree that the "Update UI" event needs to have some data that goes along with it; you are not being abstract. The UI loop and Action loop both need access to the data (the UI for display purposes, the Action for performing edits on the data). I've started pondering the Action passing to the UI what parent has changed and letting the UI loop process from there. This would maintain separation between Action and UI. I'm looking at the Damerau–Levenshtein distance algorithm (http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance) as a means to determine what has been changed and how it's been changed. As I'm typing this, I'm realizing that the Action loop knows what change has occurred, thus the path can be: UI -> Action: Change this by doing thatAction: Make changeAction -> UI: Change to this made by doing that Such messaging doesn't require the UI to remember anything and allows the Action loop to block (such as trying to move the item at the top of the tree up).
  7. Treeview is a great way to display nested data. There are libraries to help interface with the control that make it easier to populate the data in the control. Code structure... The code has two loops (well, more, but those are not important for this). The first loop is the "user interface". This loop updates the front panel and responds to user actions (button presses, menu selection, etc.), and passes events to the second loop. The second loop, the "action" loop, performs the "real work" of modifying (load, save, add, remove, move elements up/down, etc.) the data displayed on the front panel. The action loop can send an event to the user interface loop to update the front panel. Situation... The user goes to, say, add a new item in the middle of the data displayed in the tree. He selects a point to add at, selects what to add, and clicks OK. The user interface loop handles this until it's time to do the actual add. The user interface sends an event to the action loop which actually performs the add on the data. The action loop sends an event back to the user interface loop to update the front panel. The user interface loop, wisely, defers panel updates, modifies the treeview, the turns off the defer. But how does the user interface loop update the treeview? The user interface loop has no "memory" (nor should it) of what it sent to the action loop, so it can't be smart about updating the treeview. The action loop is merely sending an update message and is not sending any intelligence to the user interface loop. The user interface loop can only delete the entire tree and recreate it. This could be acceptable (it's not), it is less than optimal. My question (finally!) to people is how they have resolved this? I have a couple of ideas but would like to hear from people. Tim
  8. Based on your error, you're trying to create one task for multiple devices. You will need to create four tasks for the four devices (9219s).
  9. I would expect the third digit after the decimal to change from bit and electrical noise. The bit resolution with the input set up for +/- 5V will be 0.15 mV, so the bit noise is in the 4th place after the decimal (assuming you're not gaining in software by 10 or more). Chances are you're seeing electrical noise. Multimeters have some time averaging in them that will eliminate what you're seeing through the 9205. It's certainly worth checking over your wiring, perhaps verifying with a battery, and looking for ground loops (evil things!). You've not mentioned behavior that would lead me to think you have a wiring problem. (A lack of understanding, yes, but wiring problem no.)
  10. What is not stable? Is it the third or fourth decimal place? Are you doing any averaging? Could you be looking in the bit noise?
  11. Just as a note, if you're out of range with a power supply is 5.5 V and DAQ channel setup of +/- 5 V. I would expect the value to be at the rail rather than the plot you have. Edit: The use of the transformer may very well remove the transient you're looking for.
  12. It sounds like you have a solution that has issues and need to go back and learn more about how to implement the solution. RT and FPGA do not get implemented like Windows code as there are rules on the hardware and methods of doing things that you need to be aware of. For example, I know memory use is not the same on RT (I'm not knowledgeable enough about it to elaborate), and many of the Good Coding Practices in FPGA programming will take significantly more resources on the chip that what would be deemed "Bad" code when programming for Windows.
  13. What you are looking at is the timeout, not the time to run. A dequeue element primative operating on a queue that has entries in it will run much, much faster than 1 msec. A dequeue element will wait until the timeout with an empty queue. I don't trust a Windows PC to run at better than 100 msec updates, and sometimes not even that. Anything you are trying to do faster should be moved to a more real-time or hardware-level device. Tim
  14. Holding down <crtl> + <shift> and clicking the run button will force a binary compile of the VIs and all it's dependencies. This can get you out of situations like this. Retrieving from a backup is a good idea.
  15. Tried doing that a couple years back. It took a while for the regional sales manager to get the idea that I pull together a lot of numbers and "what-ifs" for quotes, but it did happen. That and the new regional sales manager has a better idea of what we do.
  16. I did read the license agreement recently (how bizarre is that?) and I believe the text surrounding the home install has language that the home install is for work associated with the owner of the license only. The intent would be that any work done with the license is for the owner of the license. There is a student license that is quite affordable (starting to look into this as I'm taking a class). It has a watermark on all VIs, however may be a solution to having a 'free and clear' license at home.
  17. Good to know. When isn't it the case something can be better documented?
  18. I'm a little unclear, but it sounds like you're looking for the property "Legends->Number of Rows".
  19. I've not played with floating points for long enough that I'm blanking. Are they in the same units (i.e., both in bits)?
  20. I'm not clear on what you're doing from your description. If you have a static list of models that never changes then why not include the classes in the executable? Otherwise, have you looked at https://decibel.ni.com/content/docs/DOC-19176 ? Tim
  21. Chances are that the cRIO doesn't have an echo service running, thus a connection to port 7 would fail. NI should have a list of the services it does have running that you wouldn't have to put any code on the cRIO to accommodate. You might be stuck writing a listener, etc., on the cRIO. Tim
  22. I'm using a port that I've acquired and aliased specifically for communication, so I don't have the issue of trying to find a port available. There is a list of standard TCP ports located at http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers. I don't expect a cRIO has all of these. Echo (port 7) would be my first pick, should the cRIO have it, as connection health (versus connection presence) could be checked by sending a message. Tim
  23. Yes, the communication port also checks the connection. The loop is always trying to read from the connection, so the other end dropping the connection (by hook or crook) trips an error immediately from the TCP Read. Tim
  24. We've used TCP connection instead of variables; this allowed us to configure a timeout and similarly check the error code.
  25. Tim_S

    DAQ Device safety

    I've used 5B modules to perform the isolation. They won't have kV of isolation (more like 50 V), but have been sufficient. Price for a module is about 180 USD and it will need a backplane (something like 300 USD for a 16-slot, less for a single slot) and a 5V power supply. There is ribbon-cable connection options if you are using a E- or M-series card (I think S-series work as well).
×
×
  • Create New...

Important Information

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