This reference example, as well as the rest of the Machine Control Reference Architecture, has been deprecated and is no longer available for download. For developers working on industrial control applications we recommend the Distributed Control and Automation Framework (DCAF) - ni.com/dcaf
Please provide feedback, comments, and questions on the cRIO I/O for Machine Control (CIE) Reference Example in this thread.
Great timing and great reference.
A couple of questions and observations.
1) I read that it does not currently support virtual/calculated channels, so I'm curious as to what the "enum" and "string" data types are supported for? Are there any cRIO modules out there that return enum's??
2) What if you need to apply custom calibration to in and out values? Is there a recommended/prefferred method of doing this in the CIE/CVT design/library? -I just hacked up the Read DBL and Write DBL and dumped in a functional global that gets loaded with arrays of scaling/cal data in the same order as the tag's are sorted and then inserted the calibration sub VI I have right before it gets put into, or right after it was taken out of the CVT. Not sure if this is the best way though.
3) In my case, I need to use a tag-based system for the customer, but I also need to have a custom FPGA frequency input. So I've made my project a hybrid mode, using the scan-engine and tag system for all modules except for the high-speed DI which lives on the FPGA running custom code. I'm now wondering about the best way to merge the two, because the PID's (see below) will be configured using tag's and so a control feedback input could be either a Scan-engine Tag or a frequency tag. It seems to me my 2 choices are to either make my own functional global which would grab data from the CVT and from the frequency module, and expose that as the interface to the PID's, or, if I could find a way to include the frequency data in the existing CVT that would be preffered I think, but I'm not sure if this is such a good idea from an architecture point of view.
4) If you use this in an environment where you control a bunch (16) PID controls, there are a few ways to time/synch things, and I'm not sure about the best approach. I use the "synch to CVT" VI before starting and after finishing servicing all PID's once. I do this to guarantee the PID's the freshest set of values before calculating responces, and to guarantee quickest update on the update after. I have this in a timed loop synch'ed to the Scan Engine. Would it be better to synch the loop to the desired PID control rate and then just let the scan-engine do its thing in the background? -This would allow me to run the scan-engine say at a period of 10ms but run the PID loop at a period of say 20ms. Thoughts on this?
Great starting point, could use some more descriptions and comments in the examples and some of the VI's but overall very nice.
I am interested in using an EtherCAT expansion chassis and I am not sure how to define the address. I was using the TCE but that didn't see the expansion chassis even though it is in my project. Any help on the topic would be appreciated.
Phoenix Nuclear Labs, LLC
CLA, LabVIEW Champion, NIWeek 2017 Advanced Users Track Chair
Check Out the Advanced Users Track at NIWeek 2017 I guarantee you will learn things you can use daily!
CIE does a lot of relinking on first load. The CVT package is installed in vi.lib by default, but CIE is looking in user.lib for it.
Not a big deal. I saved it all, and there are no broken run arrows.
Why isn't CIE available through VIPM? It would be nice if it installed as a package, bringing in CVT automatically.