#include <string.h>#include <math.h>#include <float.h>#include "rcs.hh"#include "nml_mod.hh"#include "emc.hh"#include "usrmotintf.h"#include "emcmot.h"#include "emcmotcfg.h"#include "canon.hh"#include "posemath.h"#include "initraj.hh"#include "iniaxis.hh"#include "inispin.hh"#include "emcglb.h"#include "emcpos.h"Include dependency graph for minimilltaskintf.cc:

Go to the source code of this file.
|
|
Definition at line 1997 of file minimilltaskintf.cc. |
|
|
Definition at line 138 of file minimilltaskintf.cc. |
|
|
Definition at line 142 of file minimilltaskintf.cc. 00142 : minimilltaskintf.cc,v 1.20 2001/08/17 22:05:41 proctor Exp $";
00143
00144 // MOTION INTERFACE
00145
00146 /*
00147 Implementation notes:
00148
00149 Initing: the emcmot interface needs to be inited once, but nml_traj_init()
00150 and nml_servo_init() can be called in any order. Similarly, the emcmot
00151 interface needs to be exited once, but nml_traj_exit() and nml_servo_exit()
00152 can be called in any order. They can also be called multiple times. Flags
00153 are used to signify if initing has been done, or if the final exit has
00154 been called.
00155 */
00156
00157 // define this to catch isnan errors, for rtlinux FPU register problem testing
00158 #ifdef linux
00159 #include <stdio.h> // printf()
00160 #define ISNAN_TRAP
00161 #endif
00162
00163 static EMCMOT_COMMAND emcmotCommand;
00164
00165 static int emcmotTrajInited = 0; // non-zero means traj called init
00166 static int emcmotAxisInited = 0; // non-zero means axis called init
00167 static int emcmotIoInited = 0; // non-zero means io called init
00168 static int emcmotion_initialized=0; // non-zero means both emcMotionInit called.
00169
00170
00171 // saved value of velocity last sent out, so we don't send redundant requests
00172 // used by emcTrajSetVelocity(), emcMotionAbort()
00173 static double lastVel = -1.0;
00174
00175 // EMC_AXIS functions
00176
00177 // local status data, not provided by emcmot
00178 static unsigned long localMotionHeartbeat = 0;
00179 static int localMotionCommandType = 0;
00180 static int localMotionEchoSerialNumber = 0;
00181 static unsigned char localEmcAxisAxisType[EMCMOT_MAX_AXIS];
00182 static double localEmcAxisUnits[EMCMOT_MAX_AXIS];
00183 static double localEmcMaxAcceleration = DBL_MAX;
00184
00185 // axes are numbered 0..NUM-1
00186
00187 /*
00188 In emcmot, we need to set the cycle time for traj, and the interpolation
00189 rate, in any order, but both need to be done. The PID cycle time will
00190 be set by emcmot automatically.
00191 */
00192
00193 int emcAxisSetAxis(int axis, unsigned char axisType)
00194 {
00195 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00196 {
00197 return 0;
00198 }
00199
00200 localEmcAxisAxisType[axis] = axisType;
00201
00202 return 0;
00203 }
|
|
|
Definition at line 1978 of file minimilltaskintf.cc. 01979 {
01980 EMC_AUX_ESTOP_OFF estopOffMsg;
01981
01982 return sendCommand(&estopOffMsg);
01983 }
|
|
|
Definition at line 1971 of file minimilltaskintf.cc. 01972 {
01973 EMC_AUX_ESTOP_ON estopOnMsg;
01974
01975 return sendCommand(&estopOnMsg);
01976 }
|
|
|
Definition at line 697 of file minimilltaskintf.cc. Referenced by emcMotionAbort(), and emcTaskIssueCommand().
00698 {
00699 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00700 {
00701 return 0;
00702 }
00703
00704 emcmotCommand.command = EMCMOT_ABORT;
00705 emcmotCommand.axis = axis;
00706
00707 return usrmotWriteEmcmotCommand(&emcmotCommand);
00708 }
|
|
||||||||||||||||
|
Definition at line 850 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
00851 {
00852 if (axis < 0 || axis >= EMCMOT_MAX_AXIS) {
00853 return 0;
00854 }
00855
00856 if (vel > AXIS_MAX_VELOCITY[axis]) {
00857 vel = AXIS_MAX_VELOCITY[axis];
00858 }
00859 else if (vel < -AXIS_MAX_VELOCITY[axis]) {
00860 vel = -AXIS_MAX_VELOCITY[axis];
00861 }
00862
00863 emcmotCommand.command = EMCMOT_JOG_ABS;
00864 emcmotCommand.axis = axis;
00865 emcmotCommand.vel = vel;
00866 emcmotCommand.offset = pos;
00867
00868 return usrmotWriteEmcmotCommand(&emcmotCommand);
00869 }
|
|
|
Definition at line 710 of file minimilltaskintf.cc. Referenced by loadAxis().
00711 {
00712 if (axis < 0 || axis >= EMCMOT_MAX_AXIS) {
00713 return 0;
00714 }
00715
00716 emcmotCommand.command = EMCMOT_ACTIVATE_AXIS;
00717 emcmotCommand.axis = axis;
00718
00719 return usrmotWriteEmcmotCommand(&emcmotCommand);
00720 }
|
|
||||||||||||
|
Definition at line 876 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
00877 {
00878 return usrmotAlter(axis, alter);
00879 }
|
|
|
Definition at line 722 of file minimilltaskintf.cc. 00723 {
00724 if (axis < 0 || axis >= EMCMOT_MAX_AXIS) {
00725 return 0;
00726 }
00727
00728 emcmotCommand.command = EMCMOT_DEACTIVATE_AXIS;
00729 emcmotCommand.axis = axis;
00730
00731 return usrmotWriteEmcmotCommand(&emcmotCommand);
00732 }
|
|
|
Definition at line 772 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and emcTaskSetState().
00773 {
00774 if (axis < 0 || axis >= EMCMOT_MAX_AXIS) {
00775 return 0;
00776 }
00777
00778 emcmotCommand.command = EMCMOT_DISABLE_AMPLIFIER;
00779 emcmotCommand.axis = axis;
00780
00781 return usrmotWriteEmcmotCommand(&emcmotCommand);
00782 }
|
|
|
Definition at line 760 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and emcTaskSetState().
00761 {
00762 if (axis < 0 || axis >= EMCMOT_MAX_AXIS) {
00763 return 0;
00764 }
00765
00766 emcmotCommand.command = EMCMOT_ENABLE_AMPLIFIER;
00767 emcmotCommand.axis = axis;
00768
00769 return usrmotWriteEmcmotCommand(&emcmotCommand);
00770 }
|
|
|
Definition at line 671 of file minimilltaskintf.cc. Referenced by emcMotionHalt(), and emcTaskIssueCommand().
00672 {
00673 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00674 {
00675 return 0;
00676 }
00677
00678 // FIXME-- refs global emcStatus; should make EMC_AXIS_STAT an arg here
00679 if(NULL != emcStatus && emcmotion_initialized && emcmotAxisInited)
00680 {
00681 dumpAxis(axis, EMC_INIFILE, &emcStatus->motion.axis[axis]);
00682 }
00683
00684 if (! emcmotTrajInited && // traj is gone
00685 ! emcmotIoInited && // io is gone
00686 emcmotAxisInited) // but we're still here
00687 {
00688 usrmotExit(); // but now we're gone
00689 }
00690
00691 // mark us as not needing in any case
00692 emcmotAxisInited = 0;
00693
00694 return 0;
00695 }
|
|
|
Definition at line 784 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
00785 {
00786 if (axis < 0 || axis >= EMCMOT_MAX_AXIS) {
00787 return 0;
00788 }
00789
00790 emcmotCommand.command = EMCMOT_HOME;
00791 emcmotCommand.axis = axis;
00792
00793 return usrmotWriteEmcmotCommand(&emcmotCommand);
00794 }
|
|
||||||||||||||||
|
Definition at line 829 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
00830 {
00831 if (axis < 0 || axis >= EMCMOT_MAX_AXIS) {
00832 return 0;
00833 }
00834
00835 if (vel > AXIS_MAX_VELOCITY[axis]) {
00836 vel = AXIS_MAX_VELOCITY[axis];
00837 }
00838 else if (vel < -AXIS_MAX_VELOCITY[axis]) {
00839 vel = -AXIS_MAX_VELOCITY[axis];
00840 }
00841
00842 emcmotCommand.command = EMCMOT_JOG_INCR;
00843 emcmotCommand.axis = axis;
00844 emcmotCommand.vel = vel;
00845 emcmotCommand.offset = incr;
00846
00847 return usrmotWriteEmcmotCommand(&emcmotCommand);
00848 }
|
|
|
Definition at line 640 of file minimilltaskintf.cc. Referenced by emcMotionInit().
00641 {
00642 int retval = 0;
00643
00644 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00645 {
00646 return 0;
00647 }
00648
00649 // init emcmot interface
00650 if (! emcmotAxisInited &&
00651 ! emcmotTrajInited &&
00652 ! emcmotIoInited)
00653 {
00654 usrmotIniLoad(EMC_INIFILE);
00655
00656 if (0 != usrmotInit())
00657 {
00658 return -1;
00659 }
00660 }
00661 emcmotAxisInited = 1;
00662
00663 if (0 != iniAxis(axis, EMC_INIFILE))
00664 {
00665 retval = -1;
00666 }
00667
00668 return retval;
00669 }
|
|
||||||||||||
|
Definition at line 809 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
00810 {
00811 if (axis < 0 || axis >= EMCMOT_MAX_AXIS) {
00812 return 0;
00813 }
00814
00815 if (vel > AXIS_MAX_VELOCITY[axis]) {
00816 vel = AXIS_MAX_VELOCITY[axis];
00817 }
00818 else if (vel < -AXIS_MAX_VELOCITY[axis]) {
00819 vel = -AXIS_MAX_VELOCITY[axis];
00820 }
00821
00822 emcmotCommand.command = EMCMOT_JOG_CONT;
00823 emcmotCommand.axis = axis;
00824 emcmotCommand.vel = vel;
00825
00826 return usrmotWriteEmcmotCommand(&emcmotCommand);
00827 }
|
|
||||||||||||
|
Definition at line 871 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadAxis().
00872 {
00873 return usrmotLoadComp(axis, file);
00874 }
|
|
|
Definition at line 734 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
00735 {
00736 // can have axis < 0, for resuming normal limit checking
00737 if (axis >= EMCMOT_MAX_AXIS) {
00738 return 0;
00739 }
00740
00741 emcmotCommand.command = EMCMOT_OVERRIDE_LIMITS;
00742 emcmotCommand.axis = axis;
00743
00744 return usrmotWriteEmcmotCommand(&emcmotCommand);
00745 }
|
|
||||||||||||
|
Definition at line 261 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadAxis().
00262 {
00263 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00264 {
00265 return 0;
00266 }
00267
00268 if (cycleTime <= 0.0)
00269 {
00270 return -1;
00271 }
00272
00273 emcmotCommand.command = EMCMOT_SET_SERVO_CYCLE_TIME;
00274 emcmotCommand.cycleTime = cycleTime;
00275
00276 return usrmotWriteEmcmotCommand(&emcmotCommand);
00277 }
|
|
||||||||||||
|
Definition at line 546 of file minimilltaskintf.cc. Referenced by loadAxis().
00547 {
00548 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00549 {
00550 return 0;
00551 }
00552
00553 emcmotCommand.command = EMCMOT_SET_POLARITY;
00554 emcmotCommand.axis = axis;
00555 emcmotCommand.level = level;
00556 emcmotCommand.axisFlag = EMCMOT_AXIS_ENABLE_BIT;
00557
00558 return usrmotWriteEmcmotCommand(&emcmotCommand);
00559 }
|
|
||||||||||||
|
Definition at line 625 of file minimilltaskintf.cc. Referenced by loadAxis().
00626 {
00627 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00628 {
00629 return 0;
00630 }
00631
00632 emcmotCommand.command = EMCMOT_SET_POLARITY;
00633 emcmotCommand.axis = axis;
00634 emcmotCommand.level = level;
00635 emcmotCommand.axisFlag = EMCMOT_AXIS_FAULT_BIT;
00636
00637 return usrmotWriteEmcmotCommand(&emcmotCommand);
00638 }
|
|
||||||||||||
|
Definition at line 437 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadAxis().
00438 {
00439 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00440 {
00441 return 0;
00442 }
00443
00444 emcmotCommand.command = EMCMOT_SET_MAX_FERROR;
00445 emcmotCommand.axis = axis;
00446 emcmotCommand.maxFerror = ferror;
00447
00448 #ifdef ISNAN_TRAP
00449 if (isnan(emcmotCommand.maxFerror))
00450 {
00451 printf("isnan error in emcAxisSetFerror\n");
00452 return -1;
00453 }
00454 #endif
00455
00456 return usrmotWriteEmcmotCommand(&emcmotCommand);
00457 }
|
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 217 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadAxis().
00221 {
00222 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00223 {
00224 return 0;
00225 }
00226
00227 emcmotCommand.command = EMCMOT_SET_PID;
00228 emcmotCommand.axis = axis;
00229
00230 emcmotCommand.pid.p = p;
00231 emcmotCommand.pid.i = i;
00232 emcmotCommand.pid.d = d;
00233 emcmotCommand.pid.ff0 = ff0;
00234 emcmotCommand.pid.ff1 = ff1;
00235 emcmotCommand.pid.ff2 = ff2;
00236 emcmotCommand.pid.backlash = backlash;
00237 emcmotCommand.pid.bias = bias;
00238 emcmotCommand.pid.maxError = maxError;
00239 emcmotCommand.pid.deadband = deadband;
00240
00241 #ifdef ISNAN_TRAP
00242 if (isnan(emcmotCommand.pid.p) ||
00243 isnan(emcmotCommand.pid.i) ||
00244 isnan(emcmotCommand.pid.d) ||
00245 isnan(emcmotCommand.pid.ff0) ||
00246 isnan(emcmotCommand.pid.ff1) ||
00247 isnan(emcmotCommand.pid.ff2) ||
00248 isnan(emcmotCommand.pid.backlash) ||
00249 isnan(emcmotCommand.pid.bias) ||
00250 isnan(emcmotCommand.pid.maxError) ||
00251 isnan(emcmotCommand.pid.deadband))
00252 {
00253 printf("isnan error in emcAxisSetGains\n");
00254 return -1;
00255 }
00256 #endif
00257
00258 return usrmotWriteEmcmotCommand(&emcmotCommand);
00259 }
|
|
||||||||||||
|
Definition at line 796 of file minimilltaskintf.cc. Referenced by loadAxis().
00797 {
00798 if (axis < 0 || axis >= EMCMOT_MAX_AXIS) {
00799 return 0;
00800 }
00801
00802 emcmotCommand.command = EMCMOT_SET_JOINT_HOME;
00803 emcmotCommand.axis = axis;
00804 emcmotCommand.offset = home;
00805
00806 return usrmotWriteEmcmotCommand(&emcmotCommand);
00807 }
|
|
||||||||||||
|
Definition at line 524 of file minimilltaskintf.cc. Referenced by loadAxis().
00525 {
00526 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00527 {
00528 return 0;
00529 }
00530
00531 emcmotCommand.command = EMCMOT_SET_HOME_OFFSET;
00532 emcmotCommand.axis = axis;
00533 emcmotCommand.offset = offset;
00534
00535 #ifdef ISNAN_TRAP
00536 if (isnan(emcmotCommand.offset))
00537 {
00538 printf("isnan error in emcAxisSetHomeOffset\n");
00539 return -1;
00540 }
00541 #endif
00542
00543 return usrmotWriteEmcmotCommand(&emcmotCommand);
00544 }
|
|
||||||||||||
|
Definition at line 595 of file minimilltaskintf.cc. Referenced by loadAxis().
00596 {
00597 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00598 {
00599 return 0;
00600 }
00601
00602 emcmotCommand.command = EMCMOT_SET_POLARITY;
00603 emcmotCommand.axis = axis;
00604 emcmotCommand.level = level;
00605 emcmotCommand.axisFlag = EMCMOT_AXIS_HOME_SWITCH_BIT;
00606
00607 return usrmotWriteEmcmotCommand(&emcmotCommand);
00608 }
|
|
||||||||||||
|
Definition at line 610 of file minimilltaskintf.cc. Referenced by loadAxis().
00611 {
00612 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00613 {
00614 return 0;
00615 }
00616
00617 emcmotCommand.command = EMCMOT_SET_POLARITY;
00618 emcmotCommand.axis = axis;
00619 emcmotCommand.level = level;
00620 emcmotCommand.axisFlag = EMCMOT_AXIS_HOMING_BIT;
00621
00622 return usrmotWriteEmcmotCommand(&emcmotCommand);
00623 }
|
|
||||||||||||
|
Definition at line 481 of file minimilltaskintf.cc. Referenced by loadAxis().
00482 {
00483 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00484 {
00485 return 0;
00486 }
00487
00488 emcmotCommand.command = EMCMOT_SET_HOMING_VEL;
00489 emcmotCommand.axis = axis;
00490 emcmotCommand.vel = homingVel;
00491
00492 #ifdef ISNAN_TRAP
00493 if (isnan(emcmotCommand.vel))
00494 {
00495 printf("isnan error in emcAxisSetHomingVel\n");
00496 return -1;
00497 }
00498 #endif
00499
00500 return usrmotWriteEmcmotCommand(&emcmotCommand);
00501 }
|
|
||||||||||||||||
|
Definition at line 279 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadAxis().
00280 {
00281 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00282 {
00283 return 0;
00284 }
00285
00286 emcmotCommand.command = EMCMOT_SET_INPUT_SCALE;
00287 emcmotCommand.axis = axis;
00288 emcmotCommand.scale = scale;
00289 emcmotCommand.offset = offset;
00290
00291 #ifdef ISNAN_TRAP
00292 if (isnan(emcmotCommand.scale) ||
00293 isnan(emcmotCommand.offset))
00294 {
00295 printf("isnan eror in emcAxisSetInputScale\n");
00296 return -1;
00297 }
00298 #endif
00299
00300 return usrmotWriteEmcmotCommand(&emcmotCommand);
00301 }
|
|
||||||||||||
|
Definition at line 576 of file minimilltaskintf.cc. Referenced by loadAxis().
00577 {
00578 if (axis < 0)
00579 {
00580 axis = 0;
00581 }
00582 else if (axis >= EMCMOT_MAX_AXIS)
00583 {
00584 axis = EMCMOT_MAX_AXIS - 1;
00585 }
00586
00587 emcmotCommand.command = EMCMOT_SET_POLARITY;
00588 emcmotCommand.axis = axis;
00589 emcmotCommand.level = level;
00590 emcmotCommand.axisFlag = EMCMOT_AXIS_MAX_HARD_LIMIT_BIT;
00591
00592 return usrmotWriteEmcmotCommand(&emcmotCommand);
00593 }
|
|
||||||||||||
|
Definition at line 412 of file minimilltaskintf.cc. Referenced by loadAxis().
00413 {
00414 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00415 {
00416 return 0;
00417 }
00418
00419 emcmotCommand.command = EMCMOT_SET_OUTPUT_LIMITS;
00420 emcmotCommand.axis = axis;
00421 emcmotCommand.minLimit = saveMinOutput[axis];
00422 emcmotCommand.maxLimit = limit;
00423 saveMaxOutput[axis] = limit;
00424
00425 #ifdef ISNAN_TRAP
00426 if (isnan(emcmotCommand.maxLimit) ||
00427 isnan(emcmotCommand.minLimit))
00428 {
00429 printf("isnan error in emcAxisSetMaxOutputLimit\n");
00430 return -1;
00431 }
00432 #endif
00433
00434 return usrmotWriteEmcmotCommand(&emcmotCommand);
00435 }
|
|
||||||||||||
|
Definition at line 357 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadAxis().
00358 {
00359 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00360 {
00361 return 0;
00362 }
00363
00364 emcmotCommand.command = EMCMOT_SET_POSITION_LIMITS;
00365 emcmotCommand.axis = axis;
00366 emcmotCommand.minLimit = saveMinLimit[axis];
00367 emcmotCommand.maxLimit = limit;
00368 saveMaxLimit[axis] = limit;
00369
00370 #ifdef ISNAN_TRAP
00371 if (isnan(emcmotCommand.maxLimit) ||
00372 isnan(emcmotCommand.minLimit))
00373 {
00374 printf("isnan error in emcAxisSetMaxPosition\n");
00375 return -1;
00376 }
00377 #endif
00378
00379 return usrmotWriteEmcmotCommand(&emcmotCommand);
00380 }
|
|
||||||||||||
|
Definition at line 503 of file minimilltaskintf.cc. Referenced by loadAxis().
00504 {
00505 if (axis < 0 || axis >= EMC_AXIS_MAX)
00506 {
00507 return 0;
00508 }
00509
00510 if (vel < 0.0)
00511 {
00512 vel = 0.0;
00513 }
00514
00515 AXIS_MAX_VELOCITY[axis] = vel;
00516
00517 emcmotCommand.command = EMCMOT_SET_AXIS_VEL_LIMIT;
00518 emcmotCommand.axis = axis;
00519 emcmotCommand.vel = vel;
00520
00521 return usrmotWriteEmcmotCommand(&emcmotCommand);
00522 }
|
|
||||||||||||
|
Definition at line 459 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadAxis().
00460 {
00461 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00462 {
00463 return 0;
00464 }
00465
00466 emcmotCommand.command = EMCMOT_SET_MIN_FERROR;
00467 emcmotCommand.axis = axis;
00468 emcmotCommand.minFerror = ferror;
00469
00470 #ifdef ISNAN_TRAP
00471 if (isnan(emcmotCommand.minFerror))
00472 {
00473 printf("isnan error in emcAxisSetMinFerror\n");
00474 return -1;
00475 }
00476 #endif
00477
00478 return usrmotWriteEmcmotCommand(&emcmotCommand);
00479 }
|
|
||||||||||||
|
Definition at line 561 of file minimilltaskintf.cc. Referenced by loadAxis().
00562 {
00563 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00564 {
00565 return 0;
00566 }
00567
00568 emcmotCommand.command = EMCMOT_SET_POLARITY;
00569 emcmotCommand.axis = axis;
00570 emcmotCommand.level = level;
00571 emcmotCommand.axisFlag = EMCMOT_AXIS_MIN_HARD_LIMIT_BIT;
00572
00573 return usrmotWriteEmcmotCommand(&emcmotCommand);
00574 }
|
|
||||||||||||
|
Definition at line 387 of file minimilltaskintf.cc. Referenced by loadAxis().
00388 {
00389 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00390 {
00391 return 0;
00392 }
00393
00394 emcmotCommand.command = EMCMOT_SET_OUTPUT_LIMITS;
00395 emcmotCommand.axis = axis;
00396 emcmotCommand.maxLimit = saveMaxOutput[axis];
00397 emcmotCommand.minLimit = limit;
00398 saveMinOutput[axis] = limit;
00399
00400 #ifdef ISNAN_TRAP
00401 if (isnan(emcmotCommand.maxLimit) ||
00402 isnan(emcmotCommand.minLimit))
00403 {
00404 printf("isnan error in emcAxisSetMinOutputLimit\n");
00405 return -1;
00406 }
00407 #endif
00408
00409 return usrmotWriteEmcmotCommand(&emcmotCommand);
00410 }
|
|
||||||||||||
|
Definition at line 332 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadAxis().
00333 {
00334 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00335 {
00336 return 0;
00337 }
00338
00339 emcmotCommand.command = EMCMOT_SET_POSITION_LIMITS;
00340 emcmotCommand.axis = axis;
00341 emcmotCommand.maxLimit = saveMaxLimit[axis];
00342 emcmotCommand.minLimit = limit;
00343 saveMinLimit[axis] = limit;
00344
00345 #ifdef ISNAN_TRAP
00346 if (isnan(emcmotCommand.maxLimit) ||
00347 isnan(emcmotCommand.minLimit))
00348 {
00349 printf("isnan error in emcAxisSetMinPosition\n");
00350 return -1;
00351 }
00352 #endif
00353
00354 return usrmotWriteEmcmotCommand(&emcmotCommand);
00355 }
|
|
||||||||||||
|
Definition at line 747 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
00748 {
00749 if (axis < 0 || axis >= EMCMOT_MAX_AXIS) {
00750 return 0;
00751 }
00752
00753 emcmotCommand.command = EMCMOT_DAC_OUT;
00754 emcmotCommand.axis = axis;
00755 emcmotCommand.dacOut = output;
00756
00757 return usrmotWriteEmcmotCommand(&emcmotCommand);
00758 }
|
|
||||||||||||||||
|
Definition at line 303 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadAxis().
00304 {
00305 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00306 {
00307 return 0;
00308 }
00309
00310 emcmotCommand.command = EMCMOT_SET_OUTPUT_SCALE;
00311 emcmotCommand.axis = axis;
00312 emcmotCommand.scale = scale;
00313 emcmotCommand.offset = offset;
00314
00315 #ifdef ISNAN_TRAP
00316 if (isnan(emcmotCommand.scale) ||
00317 isnan(emcmotCommand.offset))
00318 {
00319 printf("isnan eror in emcAxisSetOutputScale\n");
00320 return -1;
00321 }
00322 #endif
00323
00324 return usrmotWriteEmcmotCommand(&emcmotCommand);
00325 }
|
|
||||||||||||
|
Definition at line 205 of file minimilltaskintf.cc. Referenced by loadAxis().
00206 {
00207 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
00208 {
00209 return 0;
00210 }
00211
00212 localEmcAxisUnits[axis] = units;
00213
00214 return 0;
00215 }
|
|
||||||||||||
|
Definition at line 893 of file minimilltaskintf.cc. Referenced by emcMotionUpdate().
00894 {
00895 int axis;
00896
00897 // check for valid range
00898 if (numAxes <= 0 || numAxes > EMCMOT_MAX_AXIS) {
00899 return -1;
00900 }
00901
00902 for (axis = 0; axis < numAxes; axis++) {
00903 stat[axis].axisType = localEmcAxisAxisType[axis];
00904 stat[axis].units = localEmcAxisUnits[axis];
00905
00906 stat[axis].inputScale = emcmotStatus.inputScale[axis];
00907 stat[axis].inputOffset = emcmotStatus.inputOffset[axis];
00908 stat[axis].outputScale = emcmotStatus.outputScale[axis];
00909 stat[axis].outputOffset = emcmotStatus.outputOffset[axis];
00910
00911 if (new_config) {
00912 stat[axis].p = emcmotConfig.pid[axis].p;
00913 stat[axis].i = emcmotConfig.pid[axis].i;
00914 stat[axis].d = emcmotConfig.pid[axis].d;
00915 stat[axis].ff0 = emcmotConfig.pid[axis].ff0;
00916 stat[axis].ff1 = emcmotConfig.pid[axis].ff1;
00917 stat[axis].ff2 = emcmotConfig.pid[axis].ff2;
00918 stat[axis].backlash = emcmotConfig.pid[axis].backlash;
00919 stat[axis].bias = emcmotConfig.pid[axis].bias;
00920 stat[axis].maxError = emcmotConfig.pid[axis].maxError;
00921 stat[axis].deadband = emcmotConfig.pid[axis].deadband;
00922 stat[axis].cycleTime = emcmotConfig.servoCycleTime;
00923 stat[axis].minPositionLimit = emcmotConfig.minLimit[axis];
00924 stat[axis].maxPositionLimit = emcmotConfig.maxLimit[axis];
00925 stat[axis].minOutputLimit = emcmotConfig.minOutput[axis];
00926 stat[axis].maxOutputLimit = emcmotConfig.maxOutput[axis];
00927 stat[axis].minFerror = emcmotConfig.minFerror[axis];
00928 stat[axis].maxFerror = emcmotConfig.maxFerror[axis];
00929 stat[axis].homeOffset = emcmotConfig.homeOffset[axis];
00930 stat[axis].enablePolarity = (emcmotConfig.axisPolarity[axis] &
00931 EMCMOT_AXIS_ENABLE_BIT) ? 1 : 0;
00932 stat[axis].minLimitSwitchPolarity = (emcmotConfig.axisPolarity[axis] &
00933 EMCMOT_AXIS_MIN_HARD_LIMIT_BIT) ? 1 : 0;
00934 stat[axis].maxLimitSwitchPolarity = (emcmotConfig.axisPolarity[axis] &
00935 EMCMOT_AXIS_MAX_HARD_LIMIT_BIT) ? 1 : 0;
00936 stat[axis].homeSwitchPolarity = (emcmotConfig.axisPolarity[axis] &
00937 EMCMOT_AXIS_HOME_SWITCH_BIT) ? 1 : 0;
00938 stat[axis].homingPolarity = (emcmotConfig.axisPolarity[axis] &
00939 EMCMOT_AXIS_HOMING_BIT) ? 1 : 0;
00940 stat[axis].faultPolarity = (emcmotConfig.axisPolarity[axis] &
00941 EMCMOT_AXIS_FAULT_BIT) ? 1 : 0;
00942 }
00943
00944 stat[axis].setpoint = emcmotStatus.axisPos[axis];
00945
00946 if (get_emcmot_debug_info) {
00947 stat[axis].ferrorCurrent = emcmotDebug.ferrorCurrent[axis];
00948 stat[axis].ferrorHighMark = emcmotDebug.ferrorHighMark[axis];
00949 }
00950
00951 stat[axis].output = emcmotStatus.output[axis];
00952 stat[axis].input = emcmotStatus.input[axis];
00953 stat[axis].homing = (emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_HOMING_BIT ? 1 : 0);
00954 stat[axis].homed = (emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_HOMED_BIT ? 1 : 0);
00955 stat[axis].fault = (emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_FAULT_BIT ? 1 : 0);
00956 stat[axis].enabled = (emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_ENABLE_BIT ? 1 : 0);
00957
00958 stat[axis].minSoftLimit = (emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_MIN_SOFT_LIMIT_BIT ? 1 : 0);
00959 stat[axis].maxSoftLimit = (emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_MAX_SOFT_LIMIT_BIT ? 1 : 0);
00960 stat[axis].minHardLimit = (emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_MIN_HARD_LIMIT_BIT ? 1 : 0);
00961 stat[axis].maxHardLimit = (emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_MAX_HARD_LIMIT_BIT ? 1 : 0);
00962 stat[axis].overrideLimits = (emcmotStatus.overrideLimits); // one for all
00963
00964 stat[axis].scale = emcmotStatus.axVscale[axis];
00965 usrmotQueryAlter(axis, &stat[axis].alter);
00966
00967 if (emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_ERROR_BIT) {
00968 if (stat[axis].status != RCS_ERROR) {
00969 rcs_print_error("Error on axis %d.\n",axis);
00970 stat[axis].status = RCS_ERROR;
00971 }
00972 }
00973 else if (emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_INPOS_BIT) {
00974 stat[axis].status = RCS_DONE;
00975 }
00976 else {
00977 stat[axis].status = RCS_EXEC;
00978 }
00979 }
00980
00981 return 0;
00982 }
|
|
|
Definition at line 2142 of file minimilltaskintf.cc. 02143 {
02144 // simulate here
02145 simCoolantFlood = 0;
02146
02147 return 0;
02148 }
|
|
|
Definition at line 2134 of file minimilltaskintf.cc. 02135 {
02136 // simulate here
02137 simCoolantFlood = 1;
02138
02139 return 0;
02140 }
|
|
|
Definition at line 2126 of file minimilltaskintf.cc. 02127 {
02128 // simulate here
02129 simCoolantMist = 0;
02130
02131 return 0;
02132 }
|
|
|
Definition at line 2118 of file minimilltaskintf.cc. 02119 {
02120 // simulate here
02121 simCoolantMist = 1;
02122
02123 return 0;
02124 }
|
|
|
Definition at line 1952 of file minimilltaskintf.cc. 01953 {
01954 EMC_TOOL_ABORT ioAbortMsg;
01955
01956 // send abort command to emcio
01957 sendCommand(&ioAbortMsg);
01958
01959 return 0;
01960 }
|
|
|
Definition at line 1914 of file minimilltaskintf.cc. 01915 {
01916 EMC_TOOL_HALT ioHaltMsg;
01917
01918 // send halt command to emcio
01919 if (emcIoCommandBuffer != 0)
01920 {
01921 forceCommand(&ioHaltMsg);
01922 }
01923
01924 if (! emcmotAxisInited && // axes are gone
01925 ! emcmotTrajInited && // traj is gone
01926 emcmotIoInited) // but we're still here
01927 {
01928 usrmotExit(); // but now we're gone
01929 }
01930
01931 // mark us as not needing in any case
01932 emcmotIoInited = 0;
01933
01934 // clear out the buffers
01935
01936 if (emcIoStatusBuffer != 0)
01937 {
01938 delete emcIoStatusBuffer;
01939 emcIoStatusBuffer = 0;
01940 emcIoStatus = 0;
01941 }
01942
01943 if (emcIoCommandBuffer != 0)
01944 {
01945 delete emcIoCommandBuffer;
01946 emcIoCommandBuffer = 0;
01947 }
01948
01949 return 0;
01950 }
|
|
|
Definition at line 1858 of file minimilltaskintf.cc. 01859 {
01860 EMC_TOOL_INIT ioInitMsg;
01861 int retval;
01862
01863 // get NML buffer to emcio
01864 if (0 != (retval = emcioNmlGet())) {
01865 rcs_print_error("emcioNmlGet() failed.\n");
01866 return -1;
01867 }
01868
01869 // initialize parameters from ini file for spindle subsystem
01870 // uses local versions of set functions for global variables,
01871 // since spindle is done here via AIO, DIO messages to emcmot
01872
01873 if (0 != iniSpindle(EMC_INIFILE))
01874 {
01875 rcs_print_error("iniSpindle failed.\n");
01876 return -1;
01877 }
01878
01879 // deactivate spindle axis in emcmot
01880
01881 if (! emcmotAxisInited &&
01882 ! emcmotTrajInited &&
01883 ! emcmotIoInited)
01884 {
01885 usrmotIniLoad(EMC_INIFILE);
01886
01887 if (0 != usrmotInit())
01888 {
01889 rcs_print_error("usrmotInit failed.\n");
01890 return -1;
01891 }
01892 }
01893 emcmotIoInited = 1;
01894
01895 emcmotCommand.command = EMCMOT_DEACTIVATE_AXIS;
01896 emcmotCommand.axis = SPINDLE_ENABLE_INDEX;
01897
01898 if(usrmotWriteEmcmotCommand(&emcmotCommand))
01899 {
01900 rcs_print_error("Can't send EMCMOT_DEACTIVATE_AXIS for the spindle axis.\n");
01901 return -1;
01902 }
01903
01904 // send init command to emcio
01905 if(forceCommand(&ioInitMsg))
01906 {
01907 rcs_print_error("Can't forceCommand(ioInitMsg)\n");
01908 return -1;
01909 }
01910
01911 return 0;
01912 }
|
|
|
Definition at line 1962 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
01963 {
01964 EMC_SET_DEBUG ioDebugMsg;
01965
01966 ioDebugMsg.debug = debug;
01967
01968 return sendCommand(&ioDebugMsg);
01969 }
|
|
|
Definition at line 2355 of file minimilltaskintf.cc. Referenced by emctask_startup(), and main().
02356 {
02357 if (0 == emcIoStatusBuffer ||
02358 ! emcIoStatusBuffer->valid())
02359 {
02360 return -1;
02361 }
02362
02363 switch (emcIoStatusBuffer->peek())
02364 {
02365 case -1:
02366 // error on CMS channel
02367 return -1;
02368 break;
02369
02370 case 0: // nothing new
02371 case EMC_IO_STAT_TYPE: // something new
02372 // drop out to copy
02373 break;
02374
02375 default:
02376 // something else is in there
02377 return -1;
02378 break;
02379 }
02380
02381 // copy status
02382 *stat = *emcIoStatus;
02383
02384 /*
02385 We need to check that the RCS_DONE isn't left over from the previous
02386 command, by comparing the command number we sent with the command
02387 number that emcio echoes. If they're different, then the command hasn't
02388 been acknowledged yet and the state should be forced to be RCS_EXEC.
02389 */
02390 if (stat->echo_serial_number != emcIoCommandSerialNumber)
02391 {
02392 stat->status = RCS_EXEC;
02393 }
02394
02395 // overwrite with simulated locals
02396
02397 stat->spindle.speed = simSpindleSpeed;
02398 stat->spindle.direction = simSpindleDirection;
02399 stat->spindle.brake = simSpindleBrake;
02400 stat->spindle.increasing = simSpindleIncreasing;
02401 stat->spindle.enabled = simSpindleEnabled;
02402 stat->coolant.mist = simCoolantMist;
02403 stat->coolant.flood = simCoolantFlood;
02404 stat->lube.on = simLubeOn;
02405 stat->lube.level = simLubeLevel;
02406
02407 return 0;
02408 }
|
|
|
Definition at line 2326 of file minimilltaskintf.cc. 02327 {
02328 int r1;
02329 int r2;
02330
02331 // first check for active log, return nicely if not
02332 if (emcStatus->logFile[0] == 0 ||
02333 emcStatus->logSize == 0)
02334 {
02335 return 0;
02336 }
02337
02338 emcmotCommand.command = EMCMOT_CLOSE_LOG;
02339
02340 r1 = usrmotWriteEmcmotCommand(&emcmotCommand);
02341 r2 = usrmotDumpLog(emcStatus->logFile, EMCLOG_INCLUDE_HEADER);
02342
02343 emcStatus->logFile[0] = 0;
02344 emcStatus->logType = 0;
02345 emcStatus->logSize = 0;
02346 emcStatus->logSkip = 0;
02347 emcStatus->logOpen = 0;
02348 emcStatus->logStarted = 0;
02349
02350 return (r1 || r2 ? -1 : 0);
02351 }
|
|
||||||||||||||||||||||||||||||||||||
|
Definition at line 2236 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
02237 {
02238 int r1;
02239
02240 emcmotCommand.command = EMCMOT_OPEN_LOG;
02241 emcmotCommand.logSize = size;
02242 emcmotCommand.logSkip = skip;
02243 emcmotCommand.axis = which;
02244 emcmotCommand.logTriggerType = triggerType;
02245 emcmotCommand.logTriggerVariable = triggerVar;
02246 emcmotCommand.logTriggerThreshold = triggerThreshold;
02247
02248 // Note that EMC NML and emcmot will be different, in general--
02249 // need to map types
02250 switch (type)
02251 {
02252 case EMC_LOG_TYPE_AXIS_POS:
02253 emcmotCommand.logType = EMCMOT_LOG_TYPE_AXIS_POS;
02254 break;
02255
02256 case EMC_LOG_TYPE_AXES_INPOS:
02257 emcmotCommand.logType = EMCMOT_LOG_TYPE_ALL_INPOS;
02258 break;
02259
02260 case EMC_LOG_TYPE_AXES_OUTPOS:
02261 emcmotCommand.logType = EMCMOT_LOG_TYPE_ALL_OUTPOS;
02262 break;
02263
02264 case EMC_LOG_TYPE_AXIS_VEL:
02265 emcmotCommand.logType = EMCMOT_LOG_TYPE_AXIS_VEL;
02266 break;
02267
02268 case EMC_LOG_TYPE_AXES_FERROR:
02269 emcmotCommand.logType = EMCMOT_LOG_TYPE_ALL_FERROR;
02270 break;
02271
02272 case EMC_LOG_TYPE_TRAJ_POS:
02273 emcmotCommand.logType = EMCMOT_LOG_TYPE_TRAJ_POS;
02274 break;
02275
02276 case EMC_LOG_TYPE_TRAJ_VEL:
02277 emcmotCommand.logType = EMCMOT_LOG_TYPE_TRAJ_VEL;
02278 break;
02279
02280 case EMC_LOG_TYPE_TRAJ_ACC:
02281 emcmotCommand.logType = EMCMOT_LOG_TYPE_TRAJ_ACC;
02282 break;
02283
02284 case EMC_LOG_TYPE_POS_VOLTAGE:
02285 emcmotCommand.logType = EMCMOT_LOG_TYPE_POS_VOLTAGE;
02286 break;
02287
02288 default:
02289 return -1;
02290 }
02291
02292 r1 = usrmotWriteEmcmotCommand(&emcmotCommand);
02293
02294 if (r1 == 0)
02295 {
02296 strncpy(emcStatus->logFile, file, EMC_LOG_FILENAME_LEN - 1);
02297 emcStatus->logFile[EMC_LOG_FILENAME_LEN - 1] = 0;
02298 }
02299 // type, size, skip, open, and started will be gotten out of
02300 // subsystem status, e.g., emcTrajUpdate()
02301
02302 return r1;
02303 }
|
|
|
Definition at line 2305 of file minimilltaskintf.cc. 02306 {
02307 int r1;
02308
02309 emcmotCommand.command = EMCMOT_START_LOG;
02310
02311 r1 = usrmotWriteEmcmotCommand(&emcmotCommand);
02312 return(0);
02313 }
|
|
|
Definition at line 2315 of file minimilltaskintf.cc. 02316 {
02317 int r1;
02318
02319 emcmotCommand.command = EMCMOT_STOP_LOG;
02320
02321 r1 = usrmotWriteEmcmotCommand(&emcmotCommand);
02322
02323 return r1;
02324 }
|
|
|
Definition at line 2163 of file minimilltaskintf.cc. 02164 {
02165 simLubeOn = 0;
02166
02167 return 0;
02168 }
|
|
|
Definition at line 2158 of file minimilltaskintf.cc. 02159 {
02160 return 0;
02161 }
|
|
|
Definition at line 2153 of file minimilltaskintf.cc. 02154 {
02155 return 0;
02156 }
|
|
|
Definition at line 2177 of file minimilltaskintf.cc. 02178 {
02179 simLubeOn = 0;
02180
02181 return 0;
02182 }
|
|
|
Definition at line 2170 of file minimilltaskintf.cc. 02171 {
02172 simLubeOn = 1;
02173
02174 return 0;
02175 }
|
|
|
Definition at line 1545 of file minimilltaskintf.cc. 01546 {
01547 int r1;
01548 int r2;
01549 int t;
01550
01551 r1 = -1;
01552 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
01553 {
01554 if (0 == emcAxisAbort(t))
01555 {
01556 r1 = 0; // at least one is okay
01557 }
01558 }
01559
01560 r2 = emcTrajAbort();
01561
01562 // reset optimization flag which suppresses duplicate speed requests
01563 lastVel = -1.0;
01564
01565 return (r1 == 0 &&
01566 r2 == 0) ? 0 : -1;
01567 }
|
|
|
Definition at line 1522 of file minimilltaskintf.cc. 01523 {
01524 int r1;
01525 int r2;
01526 int t;
01527
01528 r1 = -1;
01529 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
01530 {
01531 if (0 == emcAxisHalt(t))
01532 {
01533 r1 = 0; // at least one is okay
01534 }
01535 }
01536
01537 r2 = emcTrajHalt();
01538
01539 emcmotion_initialized=0;
01540
01541 return (r1 == 0 &&
01542 r2 == 0) ? 0 : -1;
01543 }
|
|
|
Definition at line 1496 of file minimilltaskintf.cc. 01497 {
01498 int r1;
01499 int r2;
01500 int axis;
01501
01502 r1 = -1;
01503 for (axis = 0; axis < EMCMOT_MAX_AXIS; axis++)
01504 {
01505 if (0 == emcAxisInit(axis))
01506 {
01507 r1 = 0; // at least one is okay
01508 }
01509 }
01510
01511 r2 = emcTrajInit();
01512
01513 if(r1 == 0 && r2 == 0)
01514 {
01515 emcmotion_initialized=1;
01516 }
01517
01518 return (r1 == 0 &&
01519 r2 == 0) ? 0 : -1;
01520 }
|
|
||||||||||||||||
|
Definition at line 1576 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
01577 {
01578 emcmotCommand.command = EMCMOT_SET_AOUT;
01579 /* FIXME-- if this works, set up some dedicated cmd fields instead of
01580 borrowing these */
01581 emcmotCommand.out = index;
01582 emcmotCommand.minLimit = start;
01583 emcmotCommand.maxLimit = end;
01584
01585 return usrmotWriteEmcmotCommand(&emcmotCommand);
01586 }
|
|
|
Definition at line 1569 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
01570 {
01571 emcmotCommand.command = EMCMOT_ABORT;
01572
01573 return usrmotWriteEmcmotCommand(&emcmotCommand);
01574 }
|
|
||||||||||||||||
|
Definition at line 1588 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
01589 {
01590 emcmotCommand.command = EMCMOT_SET_DOUT;
01591 emcmotCommand.out = index;
01592 emcmotCommand.start = start;
01593 emcmotCommand.end = end;
01594
01595 return usrmotWriteEmcmotCommand(&emcmotCommand);
01596 }
|
|
|
Definition at line 1598 of file minimilltaskintf.cc. Referenced by emctask_startup(), and main().
01599 {
01600 int r1;
01601 int r2;
01602 int axis;
01603 int error;
01604 int exec;
01605
01606 // read the emcmot status
01607 if (0 != usrmotReadEmcmotStatus(&emcmotStatus)) {
01608 return -1;
01609 }
01610
01611 new_config = 0;
01612 if (emcmotStatus.config_num != emcmotConfig.config_num) {
01613 if (0 != usrmotReadEmcmotConfig(&emcmotConfig)) {
01614 return -1;
01615 }
01616 new_config = 1;
01617 }
01618
01619 if (get_emcmot_debug_info) {
01620 if (0 != usrmotReadEmcmotDebug(&emcmotDebug)) {
01621 return -1;
01622 }
01623 }
01624
01625 // read the emcmot error
01626 if (0 != usrmotReadEmcmotError(errorString)) {
01627 // no error, so ignore
01628 }
01629 else {
01630 // an error to report
01631 emcOperatorError(0, errorString);
01632 }
01633
01634 // save the heartbeat and command number locally,
01635 // for use with emcMotionUpdate
01636 localMotionHeartbeat = emcmotStatus.heartbeat;
01637 localMotionCommandType = emcmotStatus.commandEcho; // FIXME-- not NML one!
01638 localMotionEchoSerialNumber = emcmotStatus.commandNumEcho;
01639
01640 r1 = emcAxisUpdate(&stat->axis[0], EMCMOT_MAX_AXIS);
01641 r2 = emcTrajUpdate(&stat->traj);
01642 stat->heartbeat = localMotionHeartbeat;
01643 stat->command_type = localMotionCommandType;
01644 stat->echo_serial_number = localMotionEchoSerialNumber;
01645 stat->debug = emcmotConfig.debug;
01646
01647 // set the status flag
01648 error = 0;
01649 exec = 0;
01650
01651 for (axis = 0; axis < stat->traj.axes; axis++) {
01652 if (stat->axis[axis].status == RCS_ERROR) {
01653 error = 1;
01654 break;
01655 }
01656 if (stat->axis[axis].status == RCS_EXEC) {
01657 exec = 1;
01658 break;
01659 }
01660 }
01661
01662 if (stat->traj.status == RCS_ERROR) {
01663 error = 1;
01664 }
01665 else if (stat->traj.status == RCS_EXEC) {
01666 exec = 1;
01667 }
01668
01669 if (error) {
01670 stat->status = RCS_ERROR;
01671 }
01672 else if (exec) {
01673 stat->status = RCS_EXEC;
01674 }
01675 else {
01676 stat->status = RCS_DONE;
01677 }
01678
01679 return (r1 == 0 &&
01680 r2 == 0) ? 0 : -1;
01681 }
|
|
|
Definition at line 1991 of file minimilltaskintf.cc. 01992 {
01993 return emcSpindleOff();
01994 }
|
|
|
Definition at line 2083 of file minimilltaskintf.cc. 02084 {
02085 // simulate here
02086 simSpindleBrake = 1;
02087
02088 return 0;
02089 }
|
|
|
Definition at line 2075 of file minimilltaskintf.cc. 02076 {
02077 // simulate here
02078 simSpindleBrake = 0;
02079
02080 return 0;
02081 }
|
|
|
Definition at line 2107 of file minimilltaskintf.cc. 02108 {
02109 // simulate here
02110 simSpindleIncreasing = 0;
02111
02112 return 0;
02113 }
|
|
|
Definition at line 2099 of file minimilltaskintf.cc. 02100 {
02101 // simulate here
02102 simSpindleIncreasing = -1;
02103
02104 return 0;
02105 }
|
|
|
Definition at line 2041 of file minimilltaskintf.cc. 02042 {
02043 int r1;
02044
02045 emcmotCommand.command = EMCMOT_DISABLE_AMPLIFIER;
02046 emcmotCommand.axis = SPINDLE_ENABLE_INDEX;
02047
02048 r1 = usrmotWriteEmcmotCommand(&emcmotCommand);
02049
02050 if (0 == r1)
02051 {
02052 simSpindleEnabled = 0;
02053 return 0;
02054 }
02055
02056 return -1;
02057 }
|
|
|
Definition at line 2021 of file minimilltaskintf.cc. 02022 {
02023 int r1;
02024
02025 emcmotCommand.command = EMCMOT_ENABLE_AMPLIFIER;
02026 emcmotCommand.axis = SPINDLE_ENABLE_INDEX;
02027 emcmotCommand.dacOut = 0.0;
02028
02029 r1 = usrmotWriteEmcmotCommand(&emcmotCommand);
02030
02031 if (0 == r1)
02032 {
02033 simSpindleEnabled = 1;
02034 return 0;
02035 }
02036
02037 return -1;
02038 }
|
|
|
Definition at line 2091 of file minimilltaskintf.cc. 02092 {
02093 // simulate here
02094 simSpindleIncreasing = 1;
02095
02096 return 0;
02097 }
|
|
|
Definition at line 2059 of file minimilltaskintf.cc. 02060 {
02061 int r1, r2;
02062
02063 r1 = emcSpindleOn(0.0);
02064
02065 r2 = emcSpindleDisable();
02066
02067 if (0 == r1 && 0 == r2)
02068 {
02069 return 0;
02070 }
02071
02072 return -1;
02073 }
|
|
|
Definition at line 1998 of file minimilltaskintf.cc. Referenced by emcSpindleOff(), and emcTaskIssueCommand().
01999 {
02000 int r1, r2;
02001
02002 emcmotCommand.command = EMCMOT_DAC_OUT;
02003 emcmotCommand.axis = SPINDLE_ON_INDEX;
02004 emcmotCommand.dacOut = speed * VOLTS_PER_RPM;
02005
02006 r1 = emcSpindleEnable();
02007
02008 r2 = usrmotWriteEmcmotCommand(&emcmotCommand);
02009
02010 if (0 == r1 && 0 == r2)
02011 {
02012 simSpindleSpeed = speed;
02013 simSpindleDirection = (speed > 0.0 ? 1 : speed < 0.0 ? -1 : 0);
02014 return 0;
02015 }
02016
02017 return -1;
02018 }
|
|
|
Definition at line 2194 of file minimilltaskintf.cc. 02195 {
02196 EMC_TOOL_LOAD toolLoadMsg;
02197
02198 sendCommand(&toolLoadMsg);
02199
02200 return 0;
02201 }
|
|
|
Definition at line 2212 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
02213 {
02214 EMC_TOOL_LOAD_TOOL_TABLE toolLoadToolTableMsg;
02215
02216 strcpy(toolLoadToolTableMsg.file, file);
02217
02218 sendCommand(&toolLoadToolTableMsg);
02219
02220 return 0;
02221 }
|
|
|
Definition at line 2184 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
02185 {
02186 EMC_TOOL_PREPARE toolPrepareMsg;
02187
02188 toolPrepareMsg.tool = tool;
02189 sendCommand(&toolPrepareMsg);
02190
02191 return 0;
02192 }
|
|
||||||||||||||||
|
Definition at line 2223 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
02224 {
02225 EMC_TOOL_SET_OFFSET toolSetOffsetMsg;
02226
02227 toolSetOffsetMsg.tool = tool;
02228 toolSetOffsetMsg.length = length;
02229 toolSetOffsetMsg.diameter = diameter;
02230
02231 sendCommand(&toolSetOffsetMsg);
02232
02233 return 0;
02234 }
|
|
|
Definition at line 2203 of file minimilltaskintf.cc. 02204 {
02205 EMC_TOOL_UNLOAD toolUnloadMsg;
02206
02207 sendCommand(&toolUnloadMsg);
02208
02209 return 0;
02210 }
|
|
|
Definition at line 1249 of file minimilltaskintf.cc. 01250 {
01251 emcmotCommand.command = EMCMOT_ABORT;
01252
01253 return usrmotWriteEmcmotCommand(&emcmotCommand);
01254 }
|
|
||||||||||||||||||||
|
Definition at line 1313 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
01315 {
01316 emcmotCommand.command = EMCMOT_SET_CIRCLE;
01317
01318 emcmotCommand.pos = end;
01319
01320 emcmotCommand.center.x = center.x;
01321 emcmotCommand.center.y = center.y;
01322 emcmotCommand.center.z = center.z;
01323
01324 emcmotCommand.normal.x = normal.x;
01325 emcmotCommand.normal.y = normal.y;
01326 emcmotCommand.normal.z = normal.z;
01327
01328 emcmotCommand.turn = turn;
01329 emcmotCommand.id = localEmcTrajMotionId;
01330
01331 #ifdef ISNAN_TRAP
01332 if (isnan(emcmotCommand.pos.tran.x) ||
01333 isnan(emcmotCommand.pos.tran.y) ||
01334 isnan(emcmotCommand.pos.tran.z) ||
01335 isnan(emcmotCommand.pos.a) ||
01336 isnan(emcmotCommand.pos.b) ||
01337 isnan(emcmotCommand.pos.c) ||
01338 isnan(emcmotCommand.center.x) ||
01339 isnan(emcmotCommand.center.y) ||
01340 isnan(emcmotCommand.center.z) ||
01341 isnan(emcmotCommand.normal.x) ||
01342 isnan(emcmotCommand.normal.y) ||
01343 isnan(emcmotCommand.normal.z))
01344 {
01345 printf("isnan error in emcTrajCircularMove\n");
01346 return 0; // ignore it for now, just don't send it
01347 }
01348 #endif
01349
01350 return usrmotWriteEmcmotCommand(&emcmotCommand);
01351 }
|
|
|
Definition at line 1369 of file minimilltaskintf.cc. 01370 {
01371 emcmotCommand.command = EMCMOT_CLEAR_PROBE_FLAGS;
01372
01373 return usrmotWriteEmcmotCommand(&emcmotCommand);
01374 }
|
|
|
Definition at line 1277 of file minimilltaskintf.cc. 01278 {
01279 // nothing need be done here-- it's done in task controller
01280
01281 return 0;
01282 }
|
|
|
Definition at line 1242 of file minimilltaskintf.cc. 01243 {
01244 emcmotCommand.command = EMCMOT_DISABLE;
01245
01246 return usrmotWriteEmcmotCommand(&emcmotCommand);
01247 }
|
|
|
Definition at line 1235 of file minimilltaskintf.cc. 01236 {
01237 emcmotCommand.command = EMCMOT_ENABLE;
01238
01239 return usrmotWriteEmcmotCommand(&emcmotCommand);
01240 }
|
|
|
Definition at line 1220 of file minimilltaskintf.cc. 01221 {
01222 if (! emcmotAxisInited && // axes are gone
01223 ! emcmotIoInited && // io is gone
01224 emcmotTrajInited) // but we're still here
01225 {
01226 usrmotExit(); // but now we're gone
01227 }
01228
01229 // mark us as not needing in any case
01230 emcmotTrajInited = 0;
01231
01232 return 0;
01233 }
|
|
|
Definition at line 1193 of file minimilltaskintf.cc. 01194 {
01195 int retval = 0;
01196
01197 // init emcmot interface
01198 if (! emcmotAxisInited &&
01199 ! emcmotTrajInited &&
01200 ! emcmotIoInited)
01201 {
01202 usrmotIniLoad(EMC_INIFILE);
01203
01204 if (0 != usrmotInit())
01205 {
01206 return -1;
01207 }
01208 }
01209 emcmotTrajInited = 1;
01210
01211 // initialize parameters from ini file
01212 if (0 != iniTraj(EMC_INIFILE))
01213 {
01214 retval = -1;
01215 }
01216
01217 return retval;
01218 }
|
|
|
Definition at line 1292 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
01293 {
01294 emcmotCommand.command = EMCMOT_SET_LINE;
01295
01296 emcmotCommand.pos = end;
01297
01298 emcmotCommand.id = localEmcTrajMotionId;
01299
01300 #ifdef ISNAN_TRAP
01301 if (isnan(emcmotCommand.pos.tran.x) ||
01302 isnan(emcmotCommand.pos.tran.y) ||
01303 isnan(emcmotCommand.pos.tran.z))
01304 {
01305 printf("isnan error in emcTrajLinearMove\n");
01306 return 0; // ignore it for now, just don't send it
01307 }
01308 #endif
01309
01310 return usrmotWriteEmcmotCommand(&emcmotCommand);
01311 }
|
|
|
Definition at line 1256 of file minimilltaskintf.cc. 01257 {
01258 emcmotCommand.command = EMCMOT_PAUSE;
01259
01260 return usrmotWriteEmcmotCommand(&emcmotCommand);
01261 }
|
|
|
Definition at line 1376 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
01377 {
01378 emcmotCommand.command = EMCMOT_PROBE;
01379
01380 emcmotCommand.pos.tran.x = pos.tran.x;
01381 emcmotCommand.pos.tran.y = pos.tran.y;
01382 emcmotCommand.pos.tran.z = pos.tran.z;
01383 emcmotCommand.id = localEmcTrajMotionId;
01384
01385 return usrmotWriteEmcmotCommand(&emcmotCommand);
01386 }
|
|
|
Definition at line 1270 of file minimilltaskintf.cc. 01271 {
01272 emcmotCommand.command = EMCMOT_RESUME;
01273
01274 return usrmotWriteEmcmotCommand(&emcmotCommand);
01275 }
|
|
|
Definition at line 1096 of file minimilltaskintf.cc. Referenced by loadTraj().
01097 {
01098 if (acc < 0.0)
01099 {
01100 acc = 0.0;
01101 }
01102 else if (acc > localEmcMaxAcceleration)
01103 {
01104 acc = localEmcMaxAcceleration;
01105 }
01106
01107 emcmotCommand.command = EMCMOT_SET_ACC;
01108 emcmotCommand.acc = acc;
01109
01110 return usrmotWriteEmcmotCommand(&emcmotCommand);
01111 }
|
|
|
Definition at line 992 of file minimilltaskintf.cc. Referenced by loadTraj().
00993 {
00994 if (axes <= 0 || axes > EMCMOT_MAX_AXIS)
00995 {
00996 return -1;
00997 }
00998
00999 localEmcTrajAxes = axes;
01000
01001 return 0;
01002 }
|
|
|
Definition at line 1018 of file minimilltaskintf.cc. Referenced by loadTraj().
01019 {
01020 if (cycleTime <= 0.0)
01021 {
01022 return -1;
01023 }
01024
01025 emcmotCommand.command = EMCMOT_SET_TRAJ_CYCLE_TIME;
01026 emcmotCommand.cycleTime = cycleTime;
01027
01028 return usrmotWriteEmcmotCommand(&emcmotCommand);
01029 }
|
|
|
Definition at line 1144 of file minimilltaskintf.cc. Referenced by loadTraj().
01145 {
01146 emcmotCommand.command = EMCMOT_SET_WORLD_HOME;
01147
01148 emcmotCommand.pos = home;
01149
01150
01151 #ifdef ISNAN_TRAP
01152 if (isnan(emcmotCommand.pos.tran.x) ||
01153 isnan(emcmotCommand.pos.tran.y) ||
01154 isnan(emcmotCommand.pos.tran.z))
01155 {
01156 printf("isnan error in emcTrajSetHome\n");
01157 return 0; // ignore it for now, just don't send it
01158 }
01159 #endif
01160
01161 return usrmotWriteEmcmotCommand(&emcmotCommand);
01162 }
|
|
|
Definition at line 1132 of file minimilltaskintf.cc. Referenced by loadTraj().
01133 {
01134 if (acc < 0.0)
01135 {
01136 acc = 0.0;
01137 }
01138
01139 localEmcMaxAcceleration = acc;
01140
01141 return 0;
01142 }
|
|
|
Definition at line 1117 of file minimilltaskintf.cc. Referenced by loadTraj().
01118 {
01119 if (vel < 0.0)
01120 {
01121 vel = 0.0;
01122 }
01123
01124 TRAJ_MAX_VELOCITY = vel;
01125
01126 emcmotCommand.command = EMCMOT_SET_VEL_LIMIT;
01127 emcmotCommand.vel = vel;
01128
01129 return usrmotWriteEmcmotCommand(&emcmotCommand);
01130 }
|
|
|
Definition at line 1031 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and emcTaskSetMode().
01032 {
01033 switch (mode)
01034 {
01035 case EMC_TRAJ_MODE_FREE:
01036 emcmotCommand.command = EMCMOT_FREE;
01037 return usrmotWriteEmcmotCommand(&emcmotCommand);
01038
01039 case EMC_TRAJ_MODE_COORD:
01040 emcmotCommand.command = EMCMOT_COORD;
01041 return usrmotWriteEmcmotCommand(&emcmotCommand);
01042
01043 case EMC_TRAJ_MODE_TELEOP:
01044 emcmotCommand.command = EMCMOT_TELEOP;
01045 return usrmotWriteEmcmotCommand(&emcmotCommand);
01046
01047 default:
01048 return -1;
01049 }
01050 }
|
|
|
Definition at line 1177 of file minimilltaskintf.cc. Referenced by emcTaskExecute().
01178 {
01179
01180 if(EMC_DEBUG_MOTION_TIME & EMC_DEBUG)
01181 {
01182 if(id != localEmcTrajMotionId)
01183 {
01184 rcs_print("Outgoing motion id is %d.\n",id);
01185 }
01186 }
01187
01188 localEmcTrajMotionId = id;
01189
01190 return 0;
01191 }
|
|
|
Definition at line 1353 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadTraj().
01354 {
01355 emcmotCommand.command = EMCMOT_SET_PROBE_INDEX;
01356 emcmotCommand.probeIndex = index;
01357
01358 return usrmotWriteEmcmotCommand(&emcmotCommand);
01359 }
|
|
|
Definition at line 1361 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadTraj().
01362 {
01363 emcmotCommand.command = EMCMOT_SET_PROBE_POLARITY;
01364 emcmotCommand.level = polarity;
01365
01366 return usrmotWriteEmcmotCommand(&emcmotCommand);
01367 }
|
|
|
Definition at line 1164 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
01165 {
01166 if (scale < 0.0)
01167 {
01168 scale = 0.0;
01169 }
01170
01171 emcmotCommand.command = EMCMOT_SCALE;
01172 emcmotCommand.scale = scale;
01173
01174 return usrmotWriteEmcmotCommand(&emcmotCommand);
01175 }
|
|
|
Definition at line 1053 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand().
01054 {
01055 emcmotCommand.command = EMCMOT_SET_TELEOP_VECTOR;
01056 emcmotCommand.pos = vel;
01057 return usrmotWriteEmcmotCommand(&emcmotCommand);
01058 }
|
|
|
Definition at line 1284 of file minimilltaskintf.cc. 01285 {
01286 emcmotCommand.command = EMCMOT_SET_TERM_COND;
01287 emcmotCommand.termCond = (cond == EMC_TRAJ_TERM_COND_STOP ? EMCMOT_TERM_COND_STOP : EMCMOT_TERM_COND_BLEND);
01288
01289 return usrmotWriteEmcmotCommand(&emcmotCommand);
01290 }
|
|
||||||||||||
|
Definition at line 1004 of file minimilltaskintf.cc. Referenced by loadTraj().
01005 {
01006 if (linearUnits <= 0.0 ||
01007 angularUnits <= 0.0)
01008 {
01009 return -1;
01010 }
01011
01012 localEmcTrajLinearUnits = linearUnits;
01013 localEmcTrajAngularUnits = angularUnits;
01014
01015 return 0;
01016 }
|
|
|
Definition at line 1061 of file minimilltaskintf.cc. Referenced by emcTaskIssueCommand(), and loadTraj().
01062 {
01063 int retval;
01064
01065 if (vel < 0.0)
01066 {
01067 vel = 0.0;
01068 }
01069 else if (vel > TRAJ_MAX_VELOCITY)
01070 {
01071 vel = TRAJ_MAX_VELOCITY;
01072 }
01073
01074 #if 0
01075 // FIXME-- this fixes rapid rate reset problem
01076 if (vel == lastVel)
01077 {
01078 // suppress it
01079 return 0;
01080 }
01081 #endif
01082
01083 emcmotCommand.command = EMCMOT_SET_VEL;
01084 emcmotCommand.vel = vel;
01085
01086 retval = usrmotWriteEmcmotCommand(&emcmotCommand);
01087
01088 if (0 == retval)
01089 {
01090 lastVel = vel;
01091 }
01092
01093 return retval;
01094 }
|
|
|
Definition at line 1263 of file minimilltaskintf.cc. 01264 {
01265 emcmotCommand.command = EMCMOT_STEP;
01266
01267 return usrmotWriteEmcmotCommand(&emcmotCommand);
01268 }
|
|
|
Definition at line 1393 of file minimilltaskintf.cc. Referenced by emcMotionUpdate().
01394 {
01395 int axis;
01396
01397 stat->axes = localEmcTrajAxes;
01398 stat->linearUnits = localEmcTrajLinearUnits;
01399 stat->angularUnits = localEmcTrajAngularUnits;
01400
01401 stat->mode =
01402 emcmotStatus.motionFlag & EMCMOT_MOTION_TELEOP_BIT ? EMC_TRAJ_MODE_TELEOP :
01403 ( emcmotStatus.motionFlag & EMCMOT_MOTION_COORD_BIT ? EMC_TRAJ_MODE_COORD :
01404 EMC_TRAJ_MODE_FREE ) ;
01405
01406 // enabled iff motion enabled and all axes enabled
01407 stat->enabled = 0; // start at disabled
01408 if (emcmotStatus.motionFlag & EMCMOT_MOTION_ENABLE_BIT) {
01409 for (axis = 0; axis < localEmcTrajAxes; axis++) {
01410 if (! emcmotStatus.axisFlag[axis] & EMCMOT_AXIS_ENABLE_BIT) {
01411 break;
01412 }
01413
01414 // got here, then all are enabled
01415 stat->enabled = 1;
01416 }
01417 }
01418
01419 stat->inpos = emcmotStatus.motionFlag & EMCMOT_MOTION_INPOS_BIT ? 1 : 0;
01420 stat->queue = emcmotStatus.depth;
01421 stat->activeQueue = emcmotStatus.activeDepth;
01422 stat->queueFull = emcmotStatus.queueFull;
01423 stat->id = emcmotStatus.id;
01424 if (EMC_DEBUG_MOTION_TIME & EMC_DEBUG) {
01425 if (stat->id != last_id) {
01426 if (last_id != last_id_printed) {
01427 rcs_print("Motion id %d took %f seconds.\n",last_id, etime()-last_id_time);
01428 last_id_printed = last_id;
01429 }
01430 last_id = stat->id;
01431 last_id_time = etime();
01432 }
01433 }
01434
01435 stat->paused = emcmotStatus.paused;
01436 stat->scale = emcmotStatus.qVscale;
01437
01438 stat->position = emcmotStatus.pos;
01439
01440 stat->actualPosition = emcmotStatus.actualPos;
01441
01442 stat->velocity = emcmotStatus.vel;
01443 stat->acceleration = emcmotStatus.acc;
01444 stat->maxAcceleration = localEmcMaxAcceleration;
01445
01446 if (emcmotStatus.motionFlag & EMCMOT_MOTION_ERROR_BIT) {
01447 stat->status = RCS_ERROR;
01448 }
01449 else if (stat->inpos &&
01450 (stat->queue == 0)) {
01451 stat->status = RCS_DONE;
01452 }
01453 else {
01454 stat->status = RCS_EXEC;
01455 }
01456
01457 if (EMC_DEBUG_MOTION_TIME & EMC_DEBUG) {
01458 if(stat->status == RCS_DONE && last_status != RCS_DONE && stat->id != last_id_printed) {
01459 rcs_print("Motion id %d took %f seconds.\n",last_id, etime()-last_id_time);
01460 last_id_printed = last_id = stat->id;
01461 last_id_time = etime();
01462 }
01463 }
01464
01465 // update logging
01466 if (emcmotStatus.logOpen) {
01467 // we're logging motion
01468 emcStatus->logType = emcmotStatus.logType;
01469 emcStatus->logSize = emcmotStatus.logSize;
01470 emcStatus->logSkip = emcmotStatus.logSkip;
01471 emcStatus->logOpen = emcmotStatus.logOpen;
01472 emcStatus->logStarted = emcmotStatus.logStarted;
01473 emcStatus->logPoints = emcmotStatus.logPoints;
01474 }
01475 // else if it's not open, don't update emcStatus-- someone else may
01476 // be logging
01477
01478 stat->probedPosition.tran.x = emcmotStatus.probedPos.tran.x;
01479 stat->probedPosition.tran.y = emcmotStatus.probedPos.tran.y;
01480 stat->probedPosition.tran.z = emcmotStatus.probedPos.tran.z;
01481 stat->probeval = emcmotStatus.probeval;
01482 stat->probe_tripped = emcmotStatus.probeTripped;
01483
01484 if (new_config) {
01485 stat->cycleTime = emcmotConfig.trajCycleTime;
01486 stat->probe_index = emcmotConfig.probeIndex;
01487 stat->probe_polarity = emcmotConfig.probePolarity;
01488 stat->kinematics_type = emcmotConfig.kinematics_type;
01489 stat->maxVelocity = emcmotConfig.limitVel;
01490 }
01491
01492 return 0;
01493 }
|
|
|
Definition at line 1696 of file minimilltaskintf.cc. 01697 {
01698 int retval = 0;
01699 double start_time;
01700 RCS_PRINT_DESTINATION_TYPE orig_dest;
01701 if (emcIoCommandBuffer == 0)
01702 {
01703 orig_dest = get_rcs_print_destination();
01704 set_rcs_print_destination(RCS_PRINT_TO_NULL);
01705 start_time = etime();
01706 while(start_time-etime() < EMCIO_BUFFER_GET_TIMEOUT)
01707 {
01708 emcIoCommandBuffer = new RCS_CMD_CHANNEL(emcFormat, "toolCmd", "emc", EMC_NMLFILE);
01709 if (! emcIoCommandBuffer->valid())
01710 {
01711 delete emcIoCommandBuffer;
01712 emcIoCommandBuffer = 0;
01713 }
01714 else
01715 {
01716 break;
01717 }
01718 esleep(0.1);
01719 }
01720 set_rcs_print_destination(orig_dest);
01721 }
01722
01723 if (emcIoCommandBuffer == 0)
01724 {
01725 emcIoCommandBuffer = new RCS_CMD_CHANNEL(emcFormat, "toolCmd", "emc", EMC_NMLFILE);
01726 if (! emcIoCommandBuffer->valid())
01727 {
01728 delete emcIoCommandBuffer;
01729 emcIoCommandBuffer = 0;
01730 retval=-1;
01731 }
01732 }
01733
01734 if (emcIoStatusBuffer == 0)
01735 {
01736 orig_dest = get_rcs_print_destination();
01737 set_rcs_print_destination(RCS_PRINT_TO_NULL);
01738 start_time = etime();
01739 while(start_time-etime() < EMCIO_BUFFER_GET_TIMEOUT)
01740 {
01741 emcIoStatusBuffer = new RCS_STAT_CHANNEL(emcFormat, "toolSts", "emc", EMC_NMLFILE);
01742 if (! emcIoStatusBuffer->valid())
01743 {
01744 delete emcIoStatusBuffer;
01745 emcIoStatusBuffer = 0;
01746 }
01747 else
01748 {
01749 emcIoStatus = (EMC_IO_STAT *) emcIoStatusBuffer->get_address();
01750 // capture serial number for next send
01751 emcIoCommandSerialNumber = emcIoStatus->echo_serial_number;
01752 break;
01753 }
01754 esleep(0.1);
01755 }
01756 set_rcs_print_destination(orig_dest);
01757 }
01758
01759 if (emcIoStatusBuffer == 0)
01760 {
01761 emcIoStatusBuffer = new RCS_STAT_CHANNEL(emcFormat, "toolSts", "emc", EMC_NMLFILE);
01762 if (! emcIoStatusBuffer->valid() ||
01763 EMC_IO_STAT_TYPE != emcIoStatusBuffer->peek())
01764 {
01765 delete emcIoStatusBuffer;
01766 emcIoStatusBuffer = 0;
01767 emcIoStatus = 0;
01768 retval = -1;
01769 }
01770 else
01771 {
01772 emcIoStatus = (EMC_IO_STAT *) emcIoStatusBuffer->get_address();
01773 // capture serial number for next send
01774 emcIoCommandSerialNumber = emcIoStatus->echo_serial_number;
01775 }
01776 }
01777
01778 return retval;
01779 }
|
|
|
Definition at line 1834 of file minimilltaskintf.cc. Referenced by emcAuxEstopOn(), emcIoAbort(), emcIoHalt(), and emcIoInit().
01835 {
01836 // need command buffer to be there
01837 if (0 == emcIoCommandBuffer) {
01838 return -1;
01839 }
01840
01841 // need status buffer also, to check for command received
01842 if (0 == emcIoStatusBuffer ||
01843 ! emcIoStatusBuffer->valid()) {
01844 return -1;
01845 }
01846
01847 // send it immediately
01848 msg->serial_number = ++emcIoCommandSerialNumber;
01849 if (0 != emcIoCommandBuffer->write(msg)) {
01850 return -1;
01851 }
01852
01853 return 0;
01854 }
|
|
|
Definition at line 1787 of file minimilltaskintf.cc. Referenced by EMC_TOOL_MODULE::ABORT(), EMC_TOOL_MODULE::AUX_AIO_WRITE(), EMC_TOOL_MODULE::AUX_DIO_WRITE(), EMC_TOOL_MODULE::AUX_ESTOP_OFF(), EMC_TOOL_MODULE::AUX_ESTOP_ON(), EMC_TOOL_MODULE::COOLANT_FLOOD_OFF(), EMC_TOOL_MODULE::COOLANT_FLOOD_ON(), EMC_TOOL_MODULE::COOLANT_MIST_OFF(), EMC_TOOL_MODULE::COOLANT_MIST_ON(), EMC_TOOL_MODULE::HALT(), EMC_TOOL_MODULE::INIT(), EMC_TOOL_MODULE::LUBE_OFF(), EMC_TOOL_MODULE::LUBE_ON(), EMC_TOOL_MODULE::SPINDLE_BRAKE_ENGAGE(), EMC_TOOL_MODULE::SPINDLE_BRAKE_RELEASE(), EMC_TOOL_MODULE::SPINDLE_CONSTANT(), EMC_TOOL_MODULE::SPINDLE_DECREASE(), EMC_TOOL_MODULE::SPINDLE_INCREASE(), EMC_TOOL_MODULE::SPINDLE_OFF(), EMC_TOOL_MODULE::SPINDLE_ON(), emcAuxEstopOff(), emcAuxEstopOn(), emcCoolantFloodOff(), emcCoolantFloodOn(), emcCoolantMistOff(), emcCoolantMistOn(), emcIoAbort(), emcIoSetDebug(), emcLubeAbort(), emcLubeHalt(), emcLubeInit(), emcLubeOff(), emcLubeOn(), emcSpindleBrakeEngage(), emcSpindleBrakeRelease(), emcSpindleConstant(), emcSpindleDecrease(), emcSpindleIncrease(), emcSpindleOff(), emcSpindleOn(), emcToolLoad(), emcToolLoadToolTable(), emcToolPrepare(), emcToolSetOffset(), and emcToolUnload().
01788 {
01789 // need command buffer to be there
01790 if (0 == emcIoCommandBuffer) {
01791 return -1;
01792 }
01793
01794 // need status buffer also, to check for command received
01795 if (0 == emcIoStatusBuffer ||
01796 ! emcIoStatusBuffer->valid()) {
01797 return -1;
01798 }
01799
01800 double send_command_timeout = etime() + 30.0;
01801
01802 // check if we're executing, and wait until we're done
01803 while(etime() < send_command_timeout) {
01804 emcIoStatusBuffer->peek();
01805 if (emcIoStatus->echo_serial_number != emcIoCommandSerialNumber ||
01806 emcIoStatus->status == RCS_EXEC) {
01807 esleep(0.001);
01808 continue;
01809 }
01810 else {
01811 break;
01812 }
01813 }
01814
01815 if (emcIoStatus->echo_serial_number != emcIoCommandSerialNumber ||
01816 emcIoStatus->status == RCS_EXEC) {
01817 // Still not done, must have timed out.
01818 return -1;
01819 }
01820
01821 // now we can send
01822 msg->serial_number = ++emcIoCommandSerialNumber;
01823 if (0 != emcIoCommandBuffer->write(msg)) {
01824 return -1;
01825 }
01826
01827 return 0;
01828 }
|
|
|
Definition at line 1694 of file minimilltaskintf.cc. |
|
|
Definition at line 1686 of file minimilltaskintf.cc. |
|
|
Definition at line 1693 of file minimilltaskintf.cc. |
|
|
Definition at line 1690 of file minimilltaskintf.cc. |
|
|
Definition at line 1687 of file minimilltaskintf.cc. |
|
|
Definition at line 881 of file minimilltaskintf.cc. |
|
|
Definition at line 889 of file minimilltaskintf.cc. |
|
|
Definition at line 888 of file minimilltaskintf.cc. |
|
|
Definition at line 890 of file minimilltaskintf.cc. |
|
|
Definition at line 882 of file minimilltaskintf.cc. |
|
|
Definition at line 1388 of file minimilltaskintf.cc. |
|
|
Definition at line 1389 of file minimilltaskintf.cc. |
|
|
Definition at line 1391 of file minimilltaskintf.cc. |
|
|
Definition at line 1390 of file minimilltaskintf.cc. |
|
|
Definition at line 989 of file minimilltaskintf.cc. |
|
|
Definition at line 987 of file minimilltaskintf.cc. |
|
|
Definition at line 988 of file minimilltaskintf.cc. |
|
|
Definition at line 990 of file minimilltaskintf.cc. |
|
|
Definition at line 891 of file minimilltaskintf.cc. |
|
|
Definition at line 330 of file minimilltaskintf.cc. |
|
|
Definition at line 385 of file minimilltaskintf.cc. |
|
|
Definition at line 329 of file minimilltaskintf.cc. |
|
|
Definition at line 384 of file minimilltaskintf.cc. |
|
|
Definition at line 2116 of file minimilltaskintf.cc. |
|
|
Definition at line 2115 of file minimilltaskintf.cc. |
|
|
Definition at line 2151 of file minimilltaskintf.cc. |
|
|
Definition at line 2150 of file minimilltaskintf.cc. |
|
|
Definition at line 1987 of file minimilltaskintf.cc. |
|
|
Definition at line 1986 of file minimilltaskintf.cc. |
|
|
Definition at line 1989 of file minimilltaskintf.cc. |
|
|
Definition at line 1988 of file minimilltaskintf.cc. |
|
|
Definition at line 1985 of file minimilltaskintf.cc. |
1.2.11.1 written by Dimitri van Heesch,
© 1997-2001