Jump to content

All Activity

This stream auto-updates     

  1. Past hour
  2. 2017SP1 is fine for me. We have a generic configuration actor that uses JSON. Will be interested to compare your approach, if you include one in the toolkit.
  3. Today
  4. I am not sure I follow you. Are you saying an absolute path on RT does not work when trying to load the class from disk? Can you not load the class from the /C/ or similar? That seems weird!
  5. That's a very common misconception. But it's actually not right. Service businesses definitely do not have 100% gross margin. "Cost of Sales" is a more accurate term than "Cost of Goods Sold" for a services business. But otherwise, it's the same calculation. Services businesses should be calculating gross margin by figuring out how much they pay an engineer directly for every hour that engineer bills. If you pay an engineer $50/hour, you'll need to bill him at $200/hour to get a 75% gross margin. And he's going to need to bill 40 hours every week. If he's not billing 40 hours every week, there won't be enough money to pay for sales, marketing, and G&A overhead. If you're a one-person company (i.e. a single person alliance member), you will need to be so damn good that you can support your own salary on 2 billable hours per day if you want to hit 75% gross margin. This is a great conversation. I hope we can have more business conversations like this on LAVA.
  6. I resolved my issue. I must placed my la class file (.lvclass) on the root of the folder /home/lvuser/natinst/bin/ that is the default directory that the RT reads.
  7. Not all R&D work leads to the same change in revenue. If you can better prioritize what you are working on, you can get more out of the same amount of work. On the second point, I'm not an accountant but doesn't gross margins only account for the cost of the physical goods so that can get skewed heavily by including software and services in the "system" price?
  8. I agree with that general premise. But that same engineering team, with flat spend, is going to have to start working on new products that differentiate, or doing things a lot more efficiently or better. R&D is not going to be able to help NI drive revenue growth if it just continues to do all of the same things it's been doing for the last four years. I'm also baffled at how NI expects to maintain 75% gross margins on systems and services. Ask any alliance member if they have 75% gross margins, and they'll peel over laughing. But that's a whole 'nother conversation I guess.
  9. A software team can produce the next version of the software with the same staffing as the previous version. There’s no requirement to keep ramping investment other than pay raises. But if the employment environment is sufficiently non-competitive, not giving raises doesn’t lose devs. I presume hardware has similar economics, but I’ve never dug into that. In short, flat R&D can still provide continuous growth in revenue, as seen during 2001 and 2008 downturns at NI.
  10. This is basically this issue: https://bitbucket.org/drjdpowell/messenger-library/issues/32/clearer-way-to-pass-addresses-as-data-over Addresses are all based on communication methods, such as a Queue, that don't work across application boundaries. The TCP messengers get around this by replacing Reply addresses on messages with a special address that routes the reply back though the TCP connection. So all the local-only communication methods will work remotely, but only for addresses passed as Reply addresses. In your example, you are passing the address as data, not as the reply address. Rather than Query, use Send, with your Queue as Reply address. Use "read reply address" at the other end to get the address (actually now a "Route Back" address) and send your two messages to it.
  11. Thank you for sharing your opinion on using parent classes for actor references to prevent unwanted code coupling! I will use Send class. That would be great, really looking forward to these changes. ____________________________________________________________________ If I ask too many question, please tell me! But I have another one. I use TCP messengers quite often to send messages and subscribe. That works perfect! However today I tried to send a local queue in a message for the receiver to reply when asynchronous action is finished: The problem here is that I shared messenger references between 2 application instances which is not allowed. This approach works in the same application instance. I was wondering, is there a way to make the code above work across multiple application instances? I tried to create a TCP server instead of the "action result" queue, but that doesn't seem to work.
  12. Note: I am considering uping Messenger Library's base LabVIEW version from 2013 to 2017. This is to allow use adding actor templates that use JSONtext to do configuration, and to add VIMs to the palettes. None of my clients use LabVIEW earlier than 2017. Let me know if you use Messenger Library with LabVIEW earlier than 2017sp1 (sp1 fixed VIM bugs).
  13. Thanks. I am not a huge fan of this as I would prefer my code to run as similar to the exe as possible. Changing this could mask race conditions which are really hard to debug in an exe if they happen.
  14. Let me give you the solutions set the limit complier optimizations to 0~3 when editing the block diagram and recover it to the normal value(5) when you build it to exe.
  15. Dear Irene_he Hope you are doing well, I have the iUSBDAQ Module U120816, but lost its software/ Driver CD. Please help me in this regard, because the company website is down since a long.
  16. As a workaround, you can transfer files into a USB stick from your host, and then attach the stick to your VM.
  17. Yesterday
  18. For anyone interested in the business future of NI, I recommend viewing the "Virtual Investors Conference" from a few days ago. You can find it at www.ni.com/investors. There is a lot more useful and actionable information in these presentations compared to the re-brand event. Summary of what I took away from the investors conference: -- Flat spend on new product development for next 3 years (classified as "R&D"). -- Product price stability for next 3 years (flat gross margins expected). -- Focus on year-over-year revenue growth (including a lot more revenue from systems and software). -- Slash G&A to ensure net profit growth in case that whole revenue growth thing doesn't work out. I'm not really sure how revenue is going to grow with flat spending on engineering and sales. I guess they're just planning on doing everything a lot better? Unclear to me....
  19. Sounds interesting. Sorry I have never tried to dynamically load classes in RT, I have enough trouble these days just getting normal code to deploy without stupid un-explainable errors in LabVIEW. For some reason my RT VM is not cooperating and I cannot copy any files across to test. Have you tried to load a very simple class? I presume you have some kind of HAL with inheritance? Maybe the error is because it is missing some dependencies? (I know error 7 is missing file though, as you mentioned). Have you tried loading the class with the 0x10 option?
  20. I'm coding some pretty complex software. That's why I choose the object-oriented approach. And the factory pattern will help to achieve the flexibility that i need.
  21. I have never actually tried to use the factory pattern on a cRIO. So much trouble getting it to work properly just under Windows I have never been brave enough. Do you absolutely have to do runtime instantiation using names? Have you tried a static VI reference?
  22. That's a standard technique I use all the time to prevent unwanted code coupling. In fact I almost always do it if I have reason to pass the address of an actor. I use either "Send" or "Actor" parent classes; there is no reason to use "Actor type 2". With the Send class (the grandparent of all address classes) one also has the option of passing a TCP Messenger, allowing you to run C or D on a different machine.
  23. Sorry, I saved my classes at /home/lvuser/natinst/LabVIEW Data/Host_Class
  24. I am a bit confused. You said you saved the classes to: /home/lvuser/natinst/bin/Host_Class but then you tried to load them from /home/lvuser/natinst/LabVIEW Data/Host_Class/Accelerometer/Accelerometer.lvclass These directories are different...
  25. Hi everyone, I have a myRIO that i try to use to implement a factory pattern of OOP. I have to classes that i need to load dynamically on the VI running in the RT target. Firstly, i saved my classes in the myRIO's memory on the path /home/lvuser/natinst/bin/Host_Class in the directory Host_Class. And i give to the VI "Get LV Class Default Value" this path but i had this error : Error 7 occurred at : Get LV Class Default Value.vi Possible reasons : LabVIEW: (Hex 0x7) File not found. The file may be in a different location or may have been deleted. Use the command prompt or file explorer to verify that the path is correct. ========================= GPIB interface not existing. LabVIEW tried to load the class this way: /home/lvuser/natinst/LabVIEW Data/Host_Class/Accelerometer/Accelerometer.lvclass But when i check this directory, my classes are there
  26. Hello everybody, I am currently cleaning up my projects and thought of the way that could potentially reduce the amount of things loaded in the development environment. This is the architecture used at the moment: Actor named "Main" launches actors A, B, C, D, E. The last actor E is launched and requires addresses of C, D. I pass these addresses (C, D) as specific actor references. That means that if I want to debug just actor E, the development environment will load actors C, D as well. And if one of them is broken, actor E will appear broken as well (even if I don't want to test functions related to C, D). Idea: Instead of passing specific actor references to actor E, I can use generic references for C, D (Actor type 2\Actor type2.lvclass) in actor E. Then if I want to work on actor E, actors C, D won't be loaded. _______________________________________________________________ Before implementing this idea for my project which will take substantial time, I would like to hear your opinion on this. Maybe I am missing something. Thank you in advance!
  27. Last week
  28. The method is static - you don't need a constructor node so try without that. The exception text isn't in a language I'm familiar with but I suspect it may be due to which thread is executing the clumps. Try also setting the VI execution properties for the enclosing VI to run in the UI thread only.
  29. Semaphore was the most natural solution to implement for me, but I made the fix for my use case, and I can see issues in some cases. Building tools for everyone is not that simple. Anyway, I take the opportunity of this message to thank you for the great job you've been with this tool 👍.
  1. Load more activity
  • Create New...

Important Information

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