steveneads Posted July 15, 2016 Posted July 15, 2016 I'd like to use something like the gantry following (Motor[x].ServoCtrl=8) so that I can get 2 motors to use the same command signal. However, I want one motor's command to be a scaled version of the primary motor's command - in my case 70%. I have a messy solution, but is there an easy way to achieve this? There doesn't seem to be a variable to scale the input to the secondary motor in a simple way. Thanks Steve
mbalentine Posted July 15, 2016 Posted July 15, 2016 This is very easy, once you know it is already built in. Take a look at Motor[x].MasterCtrl; Motor[x].MasterPosSF; Motor[x].pMasterEnc. No need for a messy solution, this is clean and straight forward. Note that Motor[x].pMasterEnc does not have to actually point to an encoder, it can be pointed to a position command register so that you are following the command rather than motion +- following error. PMATCH as described in .MasterCtrl
steveneads Posted July 18, 2016 Author Posted July 18, 2016 Hi mbalentine, thanks for you comments. However, using the handwheel (master) input is not really what I want to do. I want to use the commanded position to another motor, not its actual position - which is subject to the accuracy and delays of the PID control. Also, I don't want the additional delay caused by processing a signal via the encoder conversion table. I am still hoping that there's a simple answer to my initial question!
mbalentine Posted July 18, 2016 Posted July 18, 2016 Update: Not referring to Handwheel following, and it should be possible to follow the command, not the feedback. However, it does look like a one servo lag is introduced. I may have been in error in my previous post though. The manual states that Motor[x].pMasterEncoder must be set to an ECT element. This would by necessity introduce a one servo lag since the ECT will process before a new Motor[x].DesPos is calculated in the servo.(?) Three questions for DT: 1) Is it correct that .DesPos is calculated within the motors' servo closure (after the ECT completes) ? 2) Is it correct that .pMasterEncoder must point to an ECT element? 3) If not constrained by first two questions, is there a way to follow without a lag being introduced ? - 4) Even if writing directly to the followers .MasterPos register from a synchronous PLC, me thinks this also is one servo behind.
steve.milici Posted July 20, 2016 Posted July 20, 2016 1. Yes 2. Yes 3. Not when using the ECT 4. This would not lag but this might be better suited to a user servo.
mbalentine Posted July 21, 2016 Posted July 21, 2016 One last question: Is there a way to use data from the Look Ahead buffer to eliminate the servo lag when following? Is this relevant to your comment regarding a user servo?? (that's one question, two clauses)
steve.milici Posted July 22, 2016 Posted July 22, 2016 I don’t see any help from lookahead as this is at “trajectory” priority, which is below servo. As far as the original post, I don’t think there is just a “simple” solution. User servo could calculate the 70% reduced value. This is after ECT. If you increase the servo rate master position with the ECT will have less lag. Also I believe you are correct in #4 above, that an RT PLC will introduce lag.
Recommended Posts