#include <stdio.h>#include <string.h>#include <stdlib.h>#include <float.h>#include "_timer.h"#include "_shm.h"#include "rcs_prnt.hh"#include "emcmot.h"#include "emcmotcfg.h"#include "emcmotglb.h"#include "usrmotintf.h"#include "emcmotlog.h"#include "inifile.h"Include dependency graph for usrmotintf.c:

Go to the source code of this file.
|
|
|
|
|
Definition at line 80 of file usrmotintf.c. |
|
|
Definition at line 84 of file usrmotintf.c. 00084 : usrmotintf.c,v 1.19 2001/11/05 16:59:55 wshackle Exp $";
00085
00086 #include <stdio.h>
00087 #include <string.h> /* memcpy() */
00088 #include <stdlib.h> /* sizeof() */
00089 #include <float.h> /* DBL_MIN */
00090 #include "_timer.h" /* rcslib esleep() */
00091 #include "_shm.h" /* rcslib shm_t, rcs_shm_open(), ... */
00092 #include "rcs_prnt.hh" /* set_rcs_print_destination(), ... */
00093 #include "emcmot.h" /* EMCMOT_STATUS,CMD */
00094 #include "emcmotcfg.h" /* EMCMOT_ERROR_NUM,LEN */
00095 #include "emcmotglb.h" /* SHMEM_BASE_ADDRESS, SHMEM_KEY */
00096 #include "usrmotintf.h" /* these decls */
00097 #include "emcmotlog.h" /* EMCMOT_LOG */
00098 #include "inifile.h" /* iniFind() */
00099
00100 #ifdef linux
00101
00102 /* Linux uses mmap-style comm with RT process */
00103 #include <stdio.h>
00104 #include <errno.h>
00105 #include <sys/time.h>
00106 #include <sys/types.h>
00107 #include <sys/stat.h>
00108 #include <fcntl.h>
00109 #include <unistd.h>
00110 #include <sys/ioctl.h>
00111
00112 #define READ_TIMEOUT_SEC 0 /* seconds for timeout */
00113 #define READ_TIMEOUT_USEC 100000 /* microseconds for timeout */
00114
00115 #ifdef HAVE_RTAI
00116 #include <stdlib.h>
00117 #include <stdio.h>
00118 #include <unistd.h>
00119 #include <signal.h>
00120 #include <sys/types.h>
00121 #include <sys/stat.h>
00122 #include <fcntl.h>
00123 #include <sys/mman.h>
00124 #include <errno.h>
00125 #include <unistd.h>
00126
00127 #include "rtai_shm.h"
00128 #endif
00129
00130 #ifndef NO_RTL
00131 #if defined(linux_2_2) || defined(linux_2_3) || defined(linux_2_4)
00132 #include "mbuff.h" /* mbuff_alloc(),mbuff_free() */
00133 #define USE_RTL_MBUFF
00134 #else
00135 #include <sys/mman.h> /* mmap, munmap, PROT_READ */
00136 #ifndef MAP_FAILED /* kernel 2.0.29 left this out */
00137 #define MAP_FAILED ((void *) -1)
00138 #endif
00139 #endif /* linux_2_2, linux_2_3, linux_2_4 */
00140
00141 #endif /* not NO_RTL */
00142
00143 #endif /* linux */
00144
00145 static int inited = 0; /* flag if inited */
00146 static int usingShmem = 0;
00147 static shm_t *shmem = NULL;
00148
00149 static EMCMOT_COMMAND *emcmotCommand = 0;
00150 static EMCMOT_STATUS *emcmotStatus = 0;
00151 static EMCMOT_CONFIG *emcmotConfig = 0;
00152 static EMCMOT_DEBUG *emcmotDebug = 0;
00153 static EMCMOT_ERROR *emcmotError = 0;
00154 static EMCMOT_LOG *emcmotLog = 0;
00155 static EMCMOT_COMP *emcmotComp[EMCMOT_MAX_AXIS] = {0};
|
|
||||||||||||
|
Definition at line 485 of file usrmotintf.c. Referenced by usrmotPrintEmcmotConfig(), and usrmotPrintEmcmotStatus().
00486 {
00487 int t;
00488
00489 for (t = 15; t >= 0; t--)
00490 {
00491 s[t] = h % 2 ? '1' : '0';
00492 h >>= 1;
00493 }
00494 s[16] = 0; /* null terminate */
00495
00496 return 0;
00497 }
|
|
|
Definition at line 499 of file usrmotintf.c. Referenced by printTPstruct().
|
|
|
Definition at line 506 of file usrmotintf.c. Referenced by usrmotPrintEmcmotDebug().
00507 {
00508 printf("queueSize=%d\n",tp->queueSize);
00509 printf("cycleTime=%f\n",tp->cycleTime);
00510 printf("vMax=%f\n",tp->vMax);
00511 printf("vScale=%f\n",tp->vScale);
00512 printf("vRestore=%f\n",tp->vRestore);
00513 printf("aMax=%f\n",tp->aMax);
00514 printf("vLimit=%f\n",tp->vLimit);
00515 printf("wMax=%f\n",tp->wMax);
00516 printf("wDotMax=%f\n",tp->wDotMax);
00517 printf("nextId=%d\n",tp->nextId);
00518 printf("execId=%d\n",tp->execId);
00519 printf("termCond=%d\n",tp->termCond);
00520 printf("currentPos :");
00521 printEmcPose(&tp->currentPos);
00522 printf("\n");
00523 printf("goalPos :");
00524 printEmcPose(&tp->goalPos);
00525 printf("\n");
00526 printf("done=%d\n",tp->done);
00527 printf("depth=%d\n",tp->depth);
00528 printf("activeDepth=%d\n",tp->activeDepth);
00529 printf("aborting=%d\n",tp->aborting);
00530 printf("pausing=%d\n",tp->pausing);
00531 }
|
|
||||||||||||
|
Definition at line 1597 of file usrmotintf.c. Referenced by emcAxisAlter(), and main().
01598 {
01599 /* check axis range */
01600 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
01601 {
01602 fprintf(stderr, "axis out of range for alter\n");
01603 return -1;
01604 }
01605
01606 /* first check if comp pointer is valid */
01607 if (emcmotComp[axis] == 0)
01608 {
01609 fprintf(stderr, "compensation data structure not present\n");
01610 return -1;
01611 }
01612
01613 /* set alter value */
01614 emcmotComp[axis]->alter = alter;
01615
01616 return 0;
01617 }
|
|
||||||||||||
|
Definition at line 1177 of file usrmotintf.c. Referenced by emcLogClose(), and main().
01178 {
01179 FILE * fp;
01180 EMCMOT_LOG_STRUCT ls;
01181 int axis;
01182 int first_point = 1;
01183 double start_time=0;
01184 int start_time_set=0;
01185
01186 /* open output log file */
01187 if (NULL == (fp = fopen(filename, "w")))
01188 {
01189 fprintf(stderr, "can't open dump file %s\n", filename);
01190 return -1;
01191 }
01192
01193
01194 /* get the data */
01195 while (emcmotLog->howmany > 0)
01196 {
01197 if (-1 == emcmotLogGet(emcmotLog, &ls))
01198 {
01199 break;
01200 }
01201
01202
01203 if(include_header && first_point)
01204 {
01205 first_point=0;
01206 fprintf(fp,"#!/bin/sh\n");
01207 fprintf(fp,"exec cat $0 | head -n 16 | tail -n 12 | sed s#THIS_PLOT_FILE#$0#g | gnuplot -persist\n");
01208 fprintf(fp,"exit\n");
01209 fprintf(fp,"\n");
01210
01211 fprintf(fp,"# This file contains both the gnuplot plotting instructions\n");
01212 fprintf(fp,"# and the data logged, by EMC.\n");
01213 fprintf(fp,"# For this to work, the data must begin after 2 blank lines,\n");
01214 fprintf(fp,"# and the line \"exit\" must appear before the data.\n");
01215 fprintf(fp,"# (lines beginning with \"#\" are ignored.)\n");
01216 fprintf(fp,"print \"Running THIS_PLOT_FILE . . .\\n\"\n");
01217 switch(ls.type)
01218 {
01219
01220 case EMCMOT_LOG_TYPE_AXIS_POS:
01221 fprintf(fp,"print \"Plotting axis position values . . .\\n\"\n");
01222 fprintf(fp,"plot \"THIS_PLOT_FILE\" index 1 using 1:2 title \"input\", \"THIS_PLOT_FILE\" index 1 using 1:3 title \"output\"\n");
01223 break;
01224
01225 case EMCMOT_LOG_TYPE_ALL_OUTPOS:
01226 fprintf(fp,"print \"Plotting all output values . . .\\n\"\n");
01227 fprintf(fp,"set multiplot; set size 1,0.33; ");
01228
01229 for (axis = 0; axis < EMCMOT_LOG_NUM_AXES; axis++)
01230 {
01231 fprintf(fp,"set origin 0,%f; plot \"THIS_PLOT_FILE\" index 1 using 1:%d title \"output[%d]\"; ", axis*0.33, axis+2, axis);
01232 }
01233 fprintf(fp, "set nomultiplot;\n");
01234 break;
01235
01236 case EMCMOT_LOG_TYPE_ALL_INPOS:
01237 fprintf(fp,"print \"Plotting all input values . . .\\n\"\n");
01238 fprintf(fp,"set multiplot; set size 1,0.33; ");
01239
01240 for (axis = 0; axis < EMCMOT_LOG_NUM_AXES; axis++)
01241 {
01242 fprintf(fp,"set origin 0,%f; plot \"THIS_PLOT_FILE\" index 1 using 1:%d title \"input[%d]\"; ", axis*0.33, axis+2, axis);
01243 }
01244 fprintf(fp, "set nomultiplot;\n");
01245 break;
01246
01247
01248
01249 case EMCMOT_LOG_TYPE_CMD:
01250 fprintf(fp,"print \"Plotting command/commandNum values . . .\\n\"\n");
01251 fprintf(fp,"set multiplot; set size 1,0.5; plot \"THIS_PLOT_FILE\" index 1 using 1:2 title \"command\"; set origin 0,0.5; plot \"THIS_PLOT_FILE\" index 1 using 1:3 title \"cmdNumber\"; set nomultiplot;\n");
01252 break;
01253
01254 case EMCMOT_LOG_TYPE_AXIS_VEL:
01255 fprintf(fp,"print \"Plotting axis velocity values . . .\\n\"\n");
01256 fprintf(fp,"plot \"THIS_PLOT_FILE\" index 1 using 1:2 title \"cmdVel\", \"THIS_PLOT_FILE\" index 1 using 1:3 title \"actualVel\"\n");
01257 break;
01258
01259
01260 case EMCMOT_LOG_TYPE_ALL_FERROR:
01261 fprintf(fp,"print \"Plotting all following errors. . .\\n\"\n");
01262 fprintf(fp,"set multiplot; set size 1,0.33; ");
01263
01264 for (axis = 0; axis < EMCMOT_LOG_NUM_AXES; axis++)
01265 {
01266 fprintf(fp,"set origin 0,%f; plot \"THIS_PLOT_FILE\" index 1 using 1:%d title \"ferror[%d]\"; ", axis*0.33, axis+2, axis);
01267 }
01268 fprintf(fp, "set nomultiplot;\n");
01269 break;
01270
01271 case EMCMOT_LOG_TYPE_TRAJ_POS:
01272 fprintf(fp,"print \"Plotting all traj positions. . .\\n\"\n");
01273 fprintf(fp,"plot \"THIS_PLOT_FILE\" index 1 using 1:2 title \"X\", \"THIS_PLOT_FILE\" index 1 using 1:3 title \"Y\", \"THIS_PLOT_FILE\" index 1 using 1:4 title \"Z\"\n");
01274 break;
01275
01276 case EMCMOT_LOG_TYPE_TRAJ_VEL:
01277 fprintf(fp,"print \"Plotting all traj velocities . . .\\n\"\n");
01278 fprintf(fp,"plot \"THIS_PLOT_FILE\" index 1 using 1:2 title \"X Velocity\", \"THIS_PLOT_FILE\" index 1 using 1:3 title \"Y Velocity\", \"THIS_PLOT_FILE\" index 1 using 1:4 title \"Z Velocity\", \"THIS_PLOT_FILE\" index 1 using 1:5 title \"Velocity Magnitude\"\n");
01279 break;
01280
01281 case EMCMOT_LOG_TYPE_TRAJ_ACC:
01282 fprintf(fp,"print \"Plotting all traj accellerations . . .\\n\"\n");
01283 fprintf(fp,"plot \"THIS_PLOT_FILE\" index 1 using 1:2 title \"X Accelleration\", \"THIS_PLOT_FILE\" index 1 using 1:3 title \"Y Accelleration\", \"THIS_PLOT_FILE\" index 1 using 1:4 title \"Z Accelleration\", \"THIS_PLOT_FILE\" index 1 using 1:5 title \"Accelleration Magnitude\"\n");
01284 break;
01285
01286
01287 case EMCMOT_LOG_TYPE_POS_VOLTAGE:
01288 fprintf(fp,"print \"Plotting EMC position and voltage data . . .\\n\"\n");
01289 fprintf(fp,"set multiplot; set size 1,0.5; plot \"THIS_PLOT_FILE\" index 1 using 1:2 title \"pos\"; set origin 0,0.5; plot \"THIS_PLOT_FILE\" index 1 using 1:3 title \"volt\"; set nomultiplot;\n");
01290 break;
01291
01292 default:
01293 fprintf(fp,"print \"Plotting unknown data values . . .\\n\"\n");
01294 fprintf(fp,"plot \"THIS_PLOT_FILE\" index 1 using 1:2 title \"data1\", \"THIS_PLOT_FILE\" index 1 using 1:3 title \"data2\"\n");
01295 break;
01296
01297 }
01298 fprintf(fp,"exit\n");
01299 fprintf(fp,"\n");
01300 fprintf(fp,"\n");
01301 switch(ls.type)
01302 {
01303 case EMCMOT_LOG_TYPE_AXIS_POS:
01304 fprintf(fp,"#%17.17s\t%17.17s\t%17.17s\n","time","input","output");
01305 break;
01306
01307 case EMCMOT_LOG_TYPE_ALL_INPOS:
01308 fprintf(fp,"#%17.17s\t","time");
01309 for (axis = 0; axis < EMCMOT_LOG_NUM_AXES; axis++)
01310 {
01311 char input_name[20];;
01312 sprintf(input_name,"input[%d]",axis);
01313 fprintf(fp,"%17.17s\t",input_name);
01314 }
01315 break;
01316
01317 case EMCMOT_LOG_TYPE_ALL_OUTPOS:
01318 fprintf(fp,"#%17.17s\t","time");
01319 for (axis = 0; axis < EMCMOT_LOG_NUM_AXES; axis++)
01320 {
01321 char input_name[20];;
01322 sprintf(input_name,"output[%d]",axis);
01323 fprintf(fp,"%17.17s\t",input_name);
01324 }
01325 fprintf(fp, "\n");
01326 break;
01327
01328 case EMCMOT_LOG_TYPE_CMD:
01329 fprintf(fp,"#%17.17s\t%17.17s\t%17.17s\n","time","command","cmdNumber");
01330 break;
01331
01332 case EMCMOT_LOG_TYPE_AXIS_VEL:
01333 fprintf(fp,"#%17.17s\t%17.17s\t%17.17s\n","time","cmdVel","actVel");
01334 break;
01335
01336 case EMCMOT_LOG_TYPE_ALL_FERROR:
01337 fprintf(fp,"#%17.17s\t","time");
01338 for (axis = 0; axis < EMCMOT_LOG_NUM_AXES; axis++)
01339 {
01340 char input_name[20];;
01341 sprintf(input_name,"ferror[%d]",axis);
01342 fprintf(fp,"%17.17s\t",input_name);
01343 }
01344 fprintf(fp, "\n");
01345 break;
01346
01347 case EMCMOT_LOG_TYPE_TRAJ_POS:
01348 fprintf(fp,"#%17.17s\t%17.17s\t%17.17s\t%17.17s\n","time","X","Y","Z");
01349 break;
01350
01351 case EMCMOT_LOG_TYPE_TRAJ_VEL:
01352 fprintf(fp,"#%17.17s\t%17.17s\t%17.17s\t%17.17s\t%17.17s\n","time","Xvel","Yvel","Zvel","VelMag");
01353 break;
01354
01355 case EMCMOT_LOG_TYPE_TRAJ_ACC:
01356 fprintf(fp,"#%17.17s\t%17.17s\t%17.17s\t%17.17s\t%17.17s\n","time","Xacc","Yacc","Zacc","AccMag");
01357 break;
01358
01359 case EMCMOT_LOG_TYPE_POS_VOLTAGE:
01360 fprintf(fp,"#%17.17s\t%17.17s\t%17.17s\n","time","pos","volt");
01361 break;
01362
01363 default:
01364 fprintf(fp,"#\n");
01365 break;
01366 }
01367 }
01368
01369 switch (ls.type)
01370 {
01371 case EMCMOT_LOG_TYPE_AXIS_POS:
01372 if(!start_time_set)
01373 {
01374 start_time_set=1;
01375 start_time = ls.item.axisPos.time;
01376 }
01377 fprintf(fp, "%.10e\t%.10e\t%.10e\n",
01378 ls.item.axisPos.time-start_time,
01379 ls.item.axisPos.input,
01380 ls.item.axisPos.output);
01381 break;
01382
01383 case EMCMOT_LOG_TYPE_ALL_INPOS:
01384 if(!start_time_set)
01385 {
01386 start_time_set=1;
01387 start_time = ls.item.allInpos.time;
01388 }
01389 fprintf(fp, "%.10e", ls.item.allInpos.time);
01390 for (axis = 0; axis < EMCMOT_LOG_NUM_AXES; axis++)
01391 {
01392 fprintf(fp, "\t%.10e", ls.item.allInpos.input[axis]);
01393 }
01394 fprintf(fp, "\n");
01395 break;
01396
01397 case EMCMOT_LOG_TYPE_ALL_OUTPOS:
01398 if(!start_time_set)
01399 {
01400 start_time_set=1;
01401 start_time = ls.item.allOutpos.time;
01402 }
01403 fprintf(fp, "%.10e", ls.item.allOutpos.time);
01404 for (axis = 0; axis < EMCMOT_LOG_NUM_AXES; axis++)
01405 {
01406 fprintf(fp, "\t%.10e", ls.item.allOutpos.output[axis]);
01407 }
01408 fprintf(fp, "\n");
01409 break;
01410
01411 case EMCMOT_LOG_TYPE_CMD:
01412 if(!start_time_set)
01413 {
01414 start_time_set=1;
01415 start_time = ls.item.cmd.time;
01416 }
01417 fprintf(fp, "%.10e\t%d\t%d\n",
01418 ls.item.cmd.time-start_time,
01419 ls.item.cmd.command,
01420 ls.item.cmd.commandNum);
01421 break;
01422
01423 case EMCMOT_LOG_TYPE_AXIS_VEL:
01424 if(!start_time_set)
01425 {
01426 start_time_set=1;
01427 start_time = ls.item.axisVel.time;
01428 }
01429 fprintf(fp, "%.10e\t%.10e\t%.10e\n",
01430 ls.item.axisVel.time-start_time,
01431 ls.item.axisVel.cmdVel,
01432 ls.item.axisVel.actVel);
01433 break;
01434
01435 case EMCMOT_LOG_TYPE_ALL_FERROR:
01436 if(!start_time_set)
01437 {
01438 start_time_set=1;
01439 start_time = ls.item.allFerror.time;
01440 }
01441 fprintf(fp, "%.10e", ls.item.allFerror.time);
01442 for (axis = 0; axis < EMCMOT_LOG_NUM_AXES; axis++)
01443 {
01444 fprintf(fp, "\t%.10e", ls.item.allFerror.ferror[axis]);
01445 }
01446 fprintf(fp, "\n");
01447 break;
01448
01449 case EMCMOT_LOG_TYPE_TRAJ_POS:
01450 if(!start_time_set)
01451 {
01452 start_time_set=1;
01453 start_time = ls.item.trajPos.time;
01454 }
01455 fprintf(fp, "%.10e\t%.10e\t%.10e\t%.10e\n",
01456 ls.item.trajPos.time-start_time,
01457 ls.item.trajPos.pos.x,
01458 ls.item.trajPos.pos.y,
01459 ls.item.trajPos.pos.z);
01460 break;
01461
01462 case EMCMOT_LOG_TYPE_TRAJ_VEL:
01463 if(!start_time_set)
01464 {
01465 start_time_set=1;
01466 start_time = ls.item.trajVel.time;
01467 }
01468 fprintf(fp, "%.10e\t%.10e\t%.10e\t%.10e\t%.10e\n",
01469 ls.item.trajVel.time-start_time,
01470 ls.item.trajVel.vel.x,
01471 ls.item.trajVel.vel.y,
01472 ls.item.trajVel.vel.z,
01473 ls.item.trajVel.mag);
01474 break;
01475
01476 case EMCMOT_LOG_TYPE_TRAJ_ACC:
01477 if(!start_time_set)
01478 {
01479 start_time_set=1;
01480 start_time = ls.item.trajAcc.time;
01481 }
01482 fprintf(fp, "%.10e\t%.10e\t%.10e\t%.10e\t%.10e\n",
01483 ls.item.trajAcc.time-start_time,
01484 ls.item.trajAcc.acc.x,
01485 ls.item.trajAcc.acc.y,
01486 ls.item.trajAcc.acc.z,
01487 ls.item.trajAcc.mag);
01488 break;
01489
01490 case EMCMOT_LOG_TYPE_POS_VOLTAGE:
01491 if(!start_time_set)
01492 {
01493 start_time_set=1;
01494 start_time = ls.item.posVoltage.time;
01495 }
01496 fprintf(fp, "%.10e\t%.10e\t%.10e\n",
01497 ls.item.posVoltage.time-start_time,
01498 ls.item.posVoltage.pos,
01499 ls.item.posVoltage.voltage);
01500 break;
01501
01502 default:
01503 break;
01504 }
01505 }
01506
01507 /* close output file */
01508 fclose(fp);
01509
01510 chmod(filename, 00775);
01511 return 0;
01512 }
|
|
|
Definition at line 1135 of file usrmotintf.c. Referenced by emcAxisHalt(), emcIoHalt(), emcTrajHalt(), and main().
01136 {
01137 int axis;
01138
01139 if (usingShmem)
01140 {
01141 if (NULL != shmem)
01142 {
01143 rcs_shm_close(shmem);
01144 shmem = NULL;
01145 }
01146 }
01147 else
01148 {
01149 #ifdef HAVE_RTAI
01150 rtai_free(SHMEM_KEY,emcmotStruct);
01151 #else
01152 #if defined(linux) && !defined(NO_RTL)
01153 #ifdef USE_RTL_MBUFF
01154 mbuff_free("emcmotStruct", emcmotStruct);
01155 #else
01156 munmap((void *) emcmotStruct, sizeof(EMCMOT_STRUCT));
01157 #endif
01158 #endif
01159 #endif
01160 }
01161
01162 emcmotStruct = 0;
01163 emcmotCommand = 0;
01164 emcmotStatus = 0;
01165 emcmotError = 0;
01166 emcmotLog = 0;
01167 for (axis = 0; axis < EMCMOT_MAX_AXIS; axis++)
01168 {
01169 emcmotComp[axis] = 0;
01170 }
01171
01172 inited = 0;
01173 return 0;
01174 }
|
|
|
Definition at line 160 of file usrmotintf.c. Referenced by emcAxisInit(), emcIoInit(), emcTrajInit(), and main().
00161 {
00162 FILE *fp;
00163 const char *inistring;
00164 int saveInt;
00165 double saveDouble;
00166
00167 /* open it */
00168 if (NULL == (fp = fopen(filename, "r")))
00169 {
00170 rcs_print("can't find emcmot ini file %s\n", filename);
00171 return -1;
00172 }
00173
00174 saveInt = SHMEM_KEY;
00175 if (NULL != (inistring = iniFind(fp, "SHMEM_KEY", "EMCMOT")))
00176 {
00177 if (1 == sscanf(inistring, "%i", &SHMEM_KEY))
00178 {
00179 /* found it */
00180 }
00181 else
00182 {
00183 /* found, but invalid */
00184 SHMEM_KEY = saveInt;
00185 rcs_print("invalid [EMCMOT] SHMEM_KEY in %s (%s); using default %d\n",
00186 filename, inistring, SHMEM_KEY);
00187 }
00188 }
00189 else
00190 {
00191 /* not found, using default */
00192 rcs_print("[EMCMOT] SHMEM_KEY not found in %s; using default %d\n",
00193 filename, SHMEM_KEY);
00194 }
00195
00196 saveInt = SHMEM_BASE_ADDRESS;
00197 if (NULL != (inistring = iniFind(fp, "SHMEM_BASE_ADDRESS", "EMCMOT")))
00198 {
00199 if (1 == sscanf(inistring, "%lu", &SHMEM_BASE_ADDRESS))
00200 {
00201 /* found it */
00202 }
00203 else
00204 {
00205 /* found, but invalid */
00206 SHMEM_BASE_ADDRESS = saveInt;
00207 rcs_print("invalid [EMCMOT] SHMEM_BASE_ADDRESS in %s (%s); using default %d\n",
00208 filename, inistring, SHMEM_BASE_ADDRESS);
00209 }
00210 }
00211 else
00212 {
00213 /* not found, using default */
00214 rcs_print("[EMCMOT] SHMEM_BASE_ADDRESS not found in %s; using default %d\n",
00215 filename, SHMEM_BASE_ADDRESS);
00216
00217 }
00218
00219 saveDouble = EMCMOT_COMM_TIMEOUT;
00220 if (NULL != (inistring = iniFind(fp, "COMM_TIMEOUT", "EMCMOT")))
00221 {
00222 if (1 == sscanf(inistring, "%lf", &EMCMOT_COMM_TIMEOUT))
00223 {
00224 /* found it */
00225 }
00226 else
00227 {
00228 /* found, but invalid */
00229 EMCMOT_COMM_TIMEOUT = saveDouble;
00230 rcs_print("invalid [EMCMOT] COMM_TIMEOUT in %s (%s); using default %f\n",
00231 filename, inistring, EMCMOT_COMM_TIMEOUT);
00232 }
00233 }
00234 else
00235 {
00236 /* not found, using default */
00237 rcs_print("[EMCMOT] COMM_TIMEOUT not found in %s; using default %f\n",
00238 filename, EMCMOT_COMM_TIMEOUT);
00239 }
00240
00241 saveDouble = EMCMOT_COMM_WAIT;
00242 if (NULL != (inistring = iniFind(fp, "COMM_WAIT", "EMCMOT")))
00243 {
00244 if (1 == sscanf(inistring, "%lf", &EMCMOT_COMM_WAIT))
00245 {
00246 /* found it */
00247 }
00248 else
00249 {
00250 /* found, but invalid */
00251 EMCMOT_COMM_WAIT = saveDouble;
00252 rcs_print("invalid [EMCMOT] COMM_WAIT in %s (%s); using default %f\n",
00253 filename, inistring, EMCMOT_COMM_WAIT);
00254 }
00255 }
00256 else
00257 {
00258 /* not found, using default */
00259 rcs_print("[EMCMOT] COMM_WAIT not found in %s; using default %f\n",
00260 filename, EMCMOT_COMM_WAIT);
00261 }
00262
00263 fclose(fp);
00264
00265 return 0;
00266 }
|
|
|
Definition at line 1038 of file usrmotintf.c. Referenced by emcAxisInit(), emcIoInit(), emcTrajInit(), and main().
01039 {
01040 int axis;
01041
01042 #if defined(linux) && !defined(USE_RTL_MBUFF) && !defined(HAVE_RTAI)
01043 int fd;
01044 #endif
01045 RCS_PRINT_DESTINATION_TYPE dest;
01046
01047 usingShmem = 0;
01048
01049 /* try OS shared memory first, inhibiting error messages */
01050 dest = get_rcs_print_destination();
01051 set_rcs_print_destination(RCS_PRINT_TO_NULL);
01052 shmem = rcs_shm_open(SHMEM_KEY, sizeof(EMCMOT_STRUCT), 0);
01053 if (NULL != shmem &&
01054 NULL != shmem->addr)
01055 {
01056 /* map shmem area into local address space */
01057 emcmotStruct = (EMCMOT_STRUCT *) shmem->addr;
01058 usingShmem = 1;
01059 }
01060 set_rcs_print_destination(dest);
01061
01062 if (! usingShmem)
01063 {
01064 #ifdef HAVE_RTAI
01065 emcmotStruct = rtai_malloc(SHMEM_KEY,sizeof(EMCMOT_STRUCT));
01066 if (emcmotStruct == NULL)
01067 {
01068 fprintf(stderr,"rtai_alloc(%d (0x%X), %d (0x%X) ) failed\n",
01069 SHMEM_KEY, SHMEM_KEY, sizeof(EMCMOT_STRUCT), sizeof(EMCMOT_STRUCT));
01070 return -1;
01071 }
01072 #else
01073
01074 #if !defined(linux) || defined(NO_RTL)
01075 /* only linux can use mapmem-- give up */
01076 return -1;
01077
01078 #else
01079
01080 #ifdef USE_RTL_MBUFF
01081 emcmotStruct = (EMCMOT_STRUCT *) mbuff_alloc("emcmotStruct",sizeof(EMCMOT_STRUCT));
01082 if (emcmotStruct == NULL)
01083 {
01084 fprintf(stderr,"mbuff_alloc failed\n");
01085 return -1;
01086 }
01087 #else
01088
01089 /* open mem device */
01090 fd = open("/dev/mem", O_RDWR);
01091 if (fd < 0)
01092 {
01093 perror("open /dev/mem");
01094 return -1;
01095 }
01096
01097 /* map it */
01098 emcmotStruct = (EMCMOT_STRUCT *) mmap(0, sizeof(EMCMOT_STRUCT),
01099 PROT_READ | PROT_WRITE,
01100 MAP_FILE | MAP_SHARED,
01101 fd, SHMEM_BASE_ADDRESS);
01102
01103 /* close the fd since it's no longer used */
01104 close(fd);
01105
01106 if (MAP_FAILED == emcmotStruct)
01107 {
01108 perror("mmap");
01109 return -1;
01110 }
01111 #endif /* USE_RTL_MBUFF */
01112
01113 #endif /* linux */
01114 #endif
01115
01116 }
01117
01118 /* got it */
01119 emcmotCommand = &(emcmotStruct->command);
01120 emcmotStatus = &(emcmotStruct->status);
01121 emcmotDebug = &(emcmotStruct->debug);
01122 emcmotConfig = &(emcmotStruct->config);
01123 emcmotError = &(emcmotStruct->error);
01124 emcmotLog = &(emcmotStruct->log);
01125 for (axis = 0; axis < EMCMOT_MAX_AXIS; axis++)
01126 {
01127 emcmotComp[axis] = &(emcmotStruct->comp[axis]);
01128 }
01129
01130 inited = 1;
01131
01132 return 0;
01133 }
|
|
||||||||||||
|
Definition at line 1514 of file usrmotintf.c. Referenced by emcAxisLoadComp(), and main().
01515 {
01516 FILE * fp;
01517 #define BUFFERLEN 256
01518 char buffer[BUFFERLEN];
01519 double nom, fwd, rev;
01520 int index = 0;
01521 int total = 0;
01522
01523 /* check axis range */
01524 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
01525 {
01526 fprintf(stderr, "axis out of range for compensation\n");
01527 return -1;
01528 }
01529
01530 /* first check if comp pointer is valid */
01531 if (emcmotComp[axis] == 0)
01532 {
01533 fprintf(stderr, "compensation data structure not present\n");
01534 return -1;
01535 }
01536
01537 /* open input comp file */
01538 if (NULL == (fp = fopen(file, "r")))
01539 {
01540 fprintf(stderr, "can't open compensation file %s\n", file);
01541 return -1;
01542 }
01543
01544 while (! feof(fp))
01545 {
01546 if (NULL == fgets(buffer, BUFFERLEN, fp))
01547 {
01548 break;
01549 }
01550 /*
01551 expecting nominal-forward-reverse triplets, e.g.,
01552 0.000000 0.000000 -0.001279
01553 0.100000 0.098742 0.051632
01554 0.200000 0.171529 0.194216
01555 */
01556 if (3 != sscanf(buffer, "%lf %lf %lf", &nom, &fwd, &rev))
01557 {
01558 break;
01559 }
01560 if (index >= EMCMOT_COMP_SIZE)
01561 {
01562 break;
01563 }
01564 emcmotComp[axis]->nominal[index] = nom;
01565 emcmotComp[axis]->forward[index] = fwd;
01566 emcmotComp[axis]->reverse[index] = rev;
01567 index++;
01568 total++;
01569 }
01570 fclose(fp);
01571
01572 if (total > 1)
01573 {
01574 emcmotComp[axis]->avgint = (emcmotComp[axis]->nominal[total - 1] -
01575 emcmotComp[axis]->nominal[0]) / (total - 1);
01576 }
01577
01578 /* ->total is the flag to emcmot that the comp table is valid, so
01579 only set this to be >1 if the data is really valid: total > 1
01580 and avgint > 0 */
01581 if (total > 1 &&
01582 emcmotComp[axis]->avgint > DBL_MIN)
01583 {
01584 emcmotComp[axis]->total = total;
01585 }
01586 else
01587 {
01588 fprintf(stderr, "compensation file %s has too few distinct points\n", file);
01589 return -1;
01590 }
01591
01592 /* leave alter alone */
01593
01594 return 0;
01595 }
|
|
|
Definition at line 1641 of file usrmotintf.c. Referenced by main().
01642 {
01643 int t;
01644
01645 /* check axis range */
01646 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
01647 {
01648 fprintf(stderr, "axis out of range for compensation\n");
01649 return -1;
01650 }
01651
01652 /* first check if comp pointer is valid */
01653 if (emcmotComp[axis] == 0)
01654 {
01655 fprintf(stderr, "compensation data structure not present\n");
01656 return -1;
01657 }
01658
01659 printf("total: %d\n", emcmotComp[axis]->total);
01660 printf("avgint: %f\n", emcmotComp[axis]->avgint);
01661 printf("alter: %f\n", emcmotComp[axis]->alter);
01662 for (t = 0; t < emcmotComp[axis]->total; t++)
01663 {
01664 printf("%f\t%f\t%f\n",
01665 emcmotComp[axis]->nominal[t],
01666 emcmotComp[axis]->forward[t],
01667 emcmotComp[axis]->reverse[t]);
01668 }
01669
01670 return 0;
01671 }
|
|
||||||||||||
|
Definition at line 744 of file usrmotintf.c. Referenced by main().
00745 {
00746 int t;
00747 char m[32];
00748
00749 switch(which)
00750 {
00751 case 0:
00752 printf("debug level \t%d\n", c.debug);
00753 printf("traj time: \t%f\n", c.trajCycleTime);
00754 printf("servo time: \t%f\n", c.servoCycleTime);
00755 printf("interp rate: \t%d\n", c.interpolationRate);
00756 printf("v limit: \t%f\n", c.limitVel);
00757 printf("axis vlimit: \t");
00758 for (t = 0; t < EMCMOT_MAX_AXIS; t++) {
00759 printf("%f ", c.axisLimitVel[t]);
00760 }
00761 printf("\n");
00762 printf("probe index: %d\n",c.probeIndex);
00763 printf("probe polarity: %d\n",c.probePolarity);
00764 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00765 {
00766 htostr(m, c.axisPolarity[t]);
00767 printf("%s ", m);
00768 }
00769 printf("\n");
00770 break;
00771
00772 case 1:
00773 printf("pid:\tP\tI\tD\tFF0\tFF1\tFF2\tBCKLSH\tBIAS\tMAXI\tDEADBAND\tCYCLE TIME\n");
00774 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00775 {
00776 printf("\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%f\t%f\n",
00777 c.pid[t].p, c.pid[t].i, c.pid[t].d,
00778 c.pid[t].ff0, c.pid[t].ff1, c.pid[t].ff2,
00779 c.pid[t].backlash, c.pid[t].bias,
00780 c.pid[t].maxError, c.pid[t].deadband, c.pid[t].cycleTime);
00781 }
00782 printf("\n");
00783 break;
00784
00785
00786 case 3:
00787 printf("pos limits: ");
00788 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00789 {
00790 printf("\t%f", c.maxLimit[t]);
00791 }
00792
00793 printf("\nneg limits: ");
00794 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00795 {
00796 printf("\t%f", c.minLimit[t]);
00797 }
00798
00799 printf("\nmax output: ");
00800 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00801 {
00802 printf("\t%f", c.maxOutput[t]);
00803 }
00804
00805 printf("\nmin output: ");
00806 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00807 {
00808 printf("\t%f", c.minOutput[t]);
00809 }
00810
00811 printf("\nmax ferror: ");
00812 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00813 {
00814 printf("\t%f", c.maxFerror[t]);
00815 }
00816 printf("\n");
00817
00818 printf("\nmin ferror: ");
00819 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00820 {
00821 printf("\t%f", c.minFerror[t]);
00822 }
00823 printf("\n");
00824
00825 printf("\nhome offsets: ");
00826 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00827 {
00828 printf("\t%f", c.homeOffset[t]);
00829 }
00830 printf("\n");
00831
00832
00833 break;
00834
00835
00836
00837 default:
00838 break;
00839 }
00840
00841 }
|
|
||||||||||||
|
Definition at line 533 of file usrmotintf.c. Referenced by main().
00534 {
00535 int t;
00536
00537 printf("running time: \t%f\n", d.running_time);
00538 switch(which)
00539 {
00540 case 0:
00541 printf("split: \t%d\n", d.split);
00542 printf("teleop desiredVel: \t%f\t%f\t%f\t%f\t%f\t%f\n",
00543 d.teleop_data.desiredVel.tran.x,
00544 d.teleop_data.desiredVel.tran.y,
00545 d.teleop_data.desiredVel.tran.z,
00546 d.teleop_data.desiredVel.a,
00547 d.teleop_data.desiredVel.b,
00548 d.teleop_data.desiredVel.c);
00549 printf("teleop currentVel: \t%f\t%f\t%f\t%f\t%f\t%f\n",
00550 d.teleop_data.currentVel.tran.x,
00551 d.teleop_data.currentVel.tran.y,
00552 d.teleop_data.currentVel.tran.z,
00553 d.teleop_data.currentVel.a,
00554 d.teleop_data.currentVel.b,
00555 d.teleop_data.currentVel.c);
00556 printf("teleop desiredAccell: \t%f\t%f\t%f\t%f\t%f\t%f\n",
00557 d.teleop_data.desiredAccell.tran.x,
00558 d.teleop_data.desiredAccell.tran.y,
00559 d.teleop_data.desiredAccell.tran.z,
00560 d.teleop_data.desiredAccell.a,
00561 d.teleop_data.desiredAccell.b,
00562 d.teleop_data.desiredAccell.c);
00563 printf("teleop currentAccell: \t%f\t%f\t%f\t%f\t%f\t%f\n",
00564 d.teleop_data.currentAccell.tran.x,
00565 d.teleop_data.currentAccell.tran.y,
00566 d.teleop_data.currentAccell.tran.z,
00567 d.teleop_data.currentAccell.a,
00568 d.teleop_data.currentAccell.b,
00569 d.teleop_data.currentAccell.c);
00570 break;
00571 printf("\nferror: ");
00572 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00573 {
00574 printf("\t%f", d.ferrorCurrent[t]);
00575 }
00576 printf("\n");
00577
00578 printf("\nferror High: ");
00579 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00580 {
00581 printf("\t%f", d.ferrorHighMark[t]);
00582 }
00583 printf("\n");
00584
00585 case 5:
00586 printf("traj m/m/a:\t%f\t%f\t%f\n", d.tMin, d.tMax, d.tAvg);
00587 printf("tMmxavg : sum=%f, in=%d, size=%d, index=%d\n",
00588 d.tMmxavg.sum, d.tMmxavg.in, d.tMmxavg.size, d.tMmxavg.index);
00589 #if 0
00590 if( d.tMmxavg.in > 0 && d.tMmxavg.size > 0)
00591 {
00592 printf("tMmxavg : nums \n\t ");
00593 for(t = 0; t < d.tMmxavg.in && t < d.tMmxavg.size; t++)
00594 {
00595 printf("%3.3e \t",d.tMmxavgSpace[t]);
00596 if(t%8 == 0 && t>0)
00597 {
00598 printf("\n\t ");
00599 }
00600 }
00601 }
00602 #endif
00603 printf("\n");
00604 printf("servo m/m/a:\t%f\t%f\t%f\n", d.sMin, d.sMax, d.sAvg);
00605 printf("sMmxavg : sum=%f, in=%d, size=%d, index=%d\n",
00606 d.sMmxavg.sum, d.sMmxavg.in, d.sMmxavg.size, d.sMmxavg.index);
00607
00608 #if 0
00609 if( d.sMmxavg.in > 0 && d.sMmxavg.size > 0)
00610 {
00611 printf("sMmxavg : nums \n\t ");
00612 for(t = 0; t < d.sMmxavg.in && t < d.sMmxavg.size; t++)
00613 {
00614 printf("%3.3e \t",d.sMmxavgSpace[t]);
00615 if(t%8 == 0 && t>0)
00616 {
00617 printf("\n\t ");
00618 }
00619 }
00620 }
00621 #endif
00622 printf("\n");
00623 printf("(off) m/m/a:\t%f\t%f\t%f\n", d.nMin, d.nMax, d.nAvg);
00624 printf("nMmxavg : sum=%f, in=%d, size=%d, index=%d\n",
00625 d.nMmxavg.sum, d.nMmxavg.in, d.nMmxavg.size, d.nMmxavg.index);
00626 #if 0
00627 if( d.nMmxavg.in > 0 && d.nMmxavg.size > 0)
00628 {
00629 printf("nMmxavg : nums \n\t ");
00630 for(t = 0; t < d.nMmxavg.in && t < d.nMmxavg.size; t++)
00631 {
00632 printf("%3.3e \t",d.nMmxavgSpace[t]);
00633 if(t%8 == 0 && t>0)
00634 {
00635 printf("\n\t ");
00636 }
00637 }
00638 }
00639 #endif
00640 printf("\n");
00641
00642 printf("(cycle to cycle time) m/m/a:\t%f\t%f\t%f\n", d.yMin, d.yMax, d.yAvg);
00643 printf("yMmxavg : sum=%f, in=%d, size=%d, index=%d\n",
00644 d.yMmxavg.sum, d.yMmxavg.in, d.yMmxavg.size, d.yMmxavg.index);
00645 #if 0
00646 if( d.yMmxavg.in > 0 && d.yMmxavg.size > 0)
00647 {
00648 printf("nMmxavg : nums \n\t ");
00649 for(t = 0; t < d.yMmxavg.in && t < d.yMmxavg.size; t++)
00650 {
00651 printf("%3.3e \t",d.yMmxavgSpace[t]);
00652 if(t%8 == 0 && t>0)
00653 {
00654 printf("\n\t ");
00655 }
00656 }
00657 }
00658 #endif
00659
00660 printf("\n");
00661
00662
00663 printf("(frequency compute time) m/m/a:\t%f\t%f\t%f\n", d.fMin, d.fMax, d.fAvg);
00664 printf("fMmxavg : sum=%f, in=%d, size=%d, index=%d\n",
00665 d.fMmxavg.sum, d.fMmxavg.in, d.fMmxavg.size, d.fMmxavg.index);
00666 #if 0
00667 if( d.fMmxavg.in > 0 && d.fMmxavg.size > 0)
00668 {
00669 printf("nMmxavg : nums \n\t ");
00670 for(t = 0; t < d.fMmxavg.in && t < d.fMmxavg.size; t++)
00671 {
00672 printf("%3.3e \t",d.fMmxavgSpace[t]);
00673 if(t%8 == 0 && t>0)
00674 {
00675 printf("\n\t ");
00676 }
00677 }
00678 }
00679 #endif
00680
00681 printf("\n");
00682
00683
00684 printf("(frequecy cycle to cycle time) m/m/a:\t%f\t%f\t%f\n", d.fyMin, d.fyMax, d.fyAvg);
00685 printf("nMmxavg : sum=%f, in=%d, size=%d, index=%d\n",
00686 d.fyMmxavg.sum, d.fyMmxavg.in, d.fyMmxavg.size, d.fyMmxavg.index);
00687 #if 0
00688 if( d.fyMmxavg.in > 0 && d.fyMmxavg.size > 0)
00689 {
00690 printf("nMmxavg : nums \n\t ");
00691 for(t = 0; t < d.fyMmxavg.in && t < d.fyMmxavg.size; t++)
00692 {
00693 printf("%3.3e \t",d.fyMmxavgSpace[t]);
00694 if(t%8 == 0 && t>0)
00695 {
00696 printf("\n\t ");
00697 }
00698 }
00699 }
00700 #endif
00701
00702 printf("\n");
00703 break;
00704
00705 case 6:
00706 case 7:
00707 case 8:
00708 case 9:
00709 case 10:
00710 case 11:
00711 printf("freeAxis[%d]:\n",which-6);
00712 printTPstruct(&d.freeAxis[which-6]);
00713 break;
00714
00715 case 12:
00716 printf("\noldInput: ");
00717 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00718 {
00719 printf("\t%f", d.oldInput[t]);
00720 }
00721 printf("\nrawInput: ");
00722 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00723 {
00724 printf("\t%f", d.rawInput[t]);
00725 }
00726 printf("\ninverseInputScale: ");
00727 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00728 {
00729 printf("\t%f", d.inverseInputScale[t]);
00730 }
00731 printf("\nbcompincr: ");
00732 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00733 {
00734 printf("\t%f", d.bcompincr[t]);
00735 }
00736
00737 default:
00738 break;
00739 }
00740
00741 }
|
|
||||||||||||
|
Definition at line 845 of file usrmotintf.c. Referenced by main().
00846 {
00847 int t;
00848 char m[32];
00849
00850 switch (which)
00851 {
00852 case 0:
00853 printf("mode: \t%s\n",
00854 s.motionFlag & EMCMOT_MOTION_TELEOP_BIT ? "teleop" :
00855 (s.motionFlag & EMCMOT_MOTION_COORD_BIT ? "coord" : "free")
00856 );
00857 printf("cmd: \t%d\n", s.commandEcho);
00858 printf("cmd num: \t%d\n", s.commandNumEcho);
00859 printf("heartbeat: \t%u\n", s.heartbeat);
00860 printf("compute time: \t%f\n", s.computeTime);
00861 printf("axes enabled: \t");
00862 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00863 {
00864 printf("%d", s.axisFlag[t] & EMCMOT_AXIS_ENABLE_BIT ? 1 : 0);
00865 }
00866 printf("\n");
00867 printf("cmd pos: \t%f\t%f\t%f\t%f\t%f\t%f\n",
00868 s.pos.tran.x, s.pos.tran.y, s.pos.tran.z,
00869 s.pos.a, s.pos.b, s.pos.c);
00870 printf("act pos: \t%f\t%f\t%f\t%f\t%f\t%f\n",
00871 s.actualPos.tran.x, s.actualPos.tran.y, s.actualPos.tran.z,
00872 s.actualPos.a, s.actualPos.b, s.actualPos.c
00873 );
00874 printf("axis pos: ");
00875 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00876 {
00877 printf("\t%f", s.axisPos[t]);
00878 }
00879 printf("\n");
00880 printf("velocity: \t%f\n", s.vel);
00881 printf("accel: \t%f\n", s.acc);
00882 printf("id: \t%d\n", s.id);
00883 printf("depth: \t%d\n", s.depth);
00884 printf("active depth: \t%d\n", s.activeDepth);
00885 printf("inpos: \t%d\n",
00886 s.motionFlag & EMCMOT_MOTION_INPOS_BIT ? 1 : 0);
00887 printf("vscales: \tQ: %.2f", s.qVscale);
00888 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00889 {
00890 printf("\t%d: %.2f", t, s.axVscale[t]);
00891 }
00892 printf("\n");
00893 printf("logging: \t%s and %s, size %d, skipping %d, type %d\n",
00894 s.logOpen == 0 ? "closed" : "open",
00895 s.logStarted == 0 ? "stopped" : "started",
00896 s.logSize, s.logSkip, s.logType);
00897 printf("homing: \t");
00898 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00899 {
00900 printf("%d", s.axisFlag[0] & EMCMOT_AXIS_HOMING_BIT ? 1 : 0);
00901 }
00902 printf("\n");
00903 printf("enabled: \t%s\n",
00904 s.motionFlag & EMCMOT_MOTION_ENABLE_BIT ? "ENABLED" : "DISABLED");
00905 #ifdef ENABLE_PROBING
00906 printf("probe value: %d\n",s.probeval);
00907 printf("probe Tripped: %d\n",s.probeTripped);
00908 printf("probing: %d\n",s.probing);
00909 printf("probed pos: \t%f\t%f\t%f\n",
00910 s.probedPos.tran.x, s.probedPos.tran.y, s.probedPos.tran.z);
00911 #endif
00912 break;
00913
00914 case 2:
00915 htostr(m, s.motionFlag);
00916 printf("motion: %s\n", m);
00917 printf("axes: ");
00918 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00919 {
00920 htostr(m, s.axisFlag[t]);
00921 printf("%s ", m);
00922 }
00923 printf("\n");
00924 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00925 {
00926 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_ENABLE_BIT) != 0));
00927 }
00928 printf("enable\n");
00929 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00930 {
00931 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_ACTIVE_BIT) != 0));
00932 }
00933 printf("active\n");
00934 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00935 {
00936 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_INPOS_BIT) != 0));
00937 }
00938 printf("inpos\n");
00939 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00940 {
00941 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_ERROR_BIT) != 0));
00942 }
00943 printf("error\n");
00944 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00945 {
00946 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_MAX_SOFT_LIMIT_BIT) != 0));
00947 }
00948 printf("max_soft_limit\n");
00949 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00950 {
00951 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_MIN_SOFT_LIMIT_BIT) != 0));
00952 }
00953 printf("min_soft_limit\n");
00954 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00955 {
00956 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_MAX_HARD_LIMIT_BIT) != 0));
00957 }
00958 printf("max_hard_limit\n");
00959 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00960 {
00961 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_MIN_HARD_LIMIT_BIT) != 0));
00962 }
00963 printf("min_hard_limit\n");
00964 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00965 {
00966 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_HOME_SWITCH_BIT) != 0));
00967 }
00968 printf("home_switch\n");
00969 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00970 {
00971 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_HOMING_BIT) != 0));
00972 }
00973 printf("homing\n");
00974 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00975 {
00976 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_HOMED_BIT) != 0));
00977 }
00978 printf("homed\n");
00979 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00980 {
00981 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_FERROR_BIT) != 0));
00982 }
00983 printf("ferror\n");
00984 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00985 {
00986 printf("%d\t", ((s.axisFlag[t] & EMCMOT_AXIS_FAULT_BIT) != 0));
00987 }
00988 printf("fault\n");
00989 printf("\npolarity: ");
00990 printf("limit override: %d\n", s.overrideLimits);
00991 break;
00992
00993 case 4:
00994 printf("output scales: ");
00995 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
00996 {
00997 printf("\t%f", s.outputScale[t]);
00998 }
00999
01000 printf("\noutput offsets:");
01001 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
01002 {
01003 printf("\t%f", s.outputOffset[t]);
01004 }
01005
01006 printf("\nscaled outputs:");
01007 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
01008 {
01009 printf("\t%f", s.output[t]);
01010 }
01011
01012 printf("\ninput scales: ");
01013 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
01014 {
01015 printf("\t%f", s.inputScale[t]);
01016 }
01017
01018 printf("\ninput offsets: ");
01019 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
01020 {
01021 printf("\t%f", s.inputOffset[t]);
01022 }
01023
01024 printf("\nscaled inputs: ");
01025 for (t = 0; t < EMCMOT_MAX_AXIS; t++)
01026 {
01027 printf("\t%f", s.input[t]);
01028 }
01029
01030 break;
01031
01032
01033 default:
01034 break;
01035 }
01036 }
|
|
||||||||||||
|
Definition at line 1619 of file usrmotintf.c. Referenced by emcAxisUpdate(), and main().
01620 {
01621 /* check axis range */
01622 if (axis < 0 || axis >= EMCMOT_MAX_AXIS)
01623 {
01624 fprintf(stderr, "axis out of range for alter query\n");
01625 return -1;
01626 }
01627
01628 /* first check if comp pointer is valid */
01629 if (emcmotComp[axis] == 0)
01630 {
01631 fprintf(stderr, "compensation data structure not present\n");
01632 return -1;
01633 }
01634
01635 /* set alter value */
01636 *alter = emcmotComp[axis]->alter;
01637
01638 return 0;
01639 }
|
|
|
Definition at line 382 of file usrmotintf.c. Referenced by emcMotionUpdate(), and main().
00383 {
00384 if (usingShmem)
00385 {
00386 /* check for shmem still around */
00387 if (0 == emcmotConfig)
00388 {
00389 return EMCMOT_COMM_ERROR_CONNECT;
00390 }
00391
00392 memcpy(s, emcmotConfig, sizeof(EMCMOT_CONFIG));
00393 }
00394 else
00395 {
00396 /* check for shmem still around */
00397 if (0 == emcmotConfig)
00398 {
00399 return EMCMOT_COMM_ERROR_CONNECT;
00400 }
00401
00402 memcpy(s, emcmotConfig, sizeof(EMCMOT_CONFIG));
00403 }
00404
00405 /* got it, now check head-tail matches */
00406 #ifndef IGNORE_SPLIT_READS
00407 if (s->head != s->tail)
00408 {
00409 #if 0
00410 emcmot_config_split_count++;
00411 if (emcmot_config_split_count > 2 && emcmot_config_split_count%100 == 0)
00412 {
00413 rcs_print("emcmot_config_split_count = %d\n",emcmot_config_split_count);
00414 }
00415 #endif
00416 return EMCMOT_COMM_SPLIT_READ_TIMEOUT;
00417 }
00418 #endif
00419
00420 emcmot_config_split_count = 0;
00421 return EMCMOT_COMM_OK;
00422 }
|
|
|
Definition at line 425 of file usrmotintf.c. Referenced by emcMotionUpdate(), and main().
00426 {
00427 if (usingShmem)
00428 {
00429 /* check for shmem still around */
00430 if (0 == emcmotDebug)
00431 {
00432 return EMCMOT_COMM_ERROR_CONNECT;
00433 }
00434
00435 memcpy(s, emcmotDebug, sizeof(EMCMOT_DEBUG));
00436 }
00437 else
00438 {
00439 /* check for shmem still around */
00440 if (0 == emcmotDebug)
00441 {
00442 return EMCMOT_COMM_ERROR_CONNECT;
00443 }
00444
00445 memcpy(s, emcmotDebug, sizeof(EMCMOT_DEBUG));
00446 }
00447
00448 /* got it, now check head-tail matches */
00449 #ifndef IGNORE_SPLIT_READS
00450 if (s->head != s->tail)
00451 {
00452 #if 0
00453 emcmot_debug_split_count++;
00454 if (emcmot_debug_split_count > 2 && emcmot_debug_split_count%100 == 0)
00455 {
00456 rcs_print("emcmot_debug_split_count = %d\n",emcmot_debug_split_count);
00457 }
00458 #endif
00459 return EMCMOT_COMM_SPLIT_READ_TIMEOUT;
00460 }
00461 #endif
00462
00463 emcmot_debug_split_count = 0;
00464 return EMCMOT_COMM_OK;
00465 }
|
|
|
Definition at line 468 of file usrmotintf.c. Referenced by emcMotionUpdate(), and main().
00469 {
00470 /* check to see if ptr still around */
00471 if (emcmotError == 0)
00472 {
00473 return -1;
00474 }
00475
00476 /* returns 0 if something, -1 if not */
00477 return emcmotErrorGet(emcmotError, e);
00478 }
|
|
|
Definition at line 338 of file usrmotintf.c. Referenced by emcMotionUpdate(), main(), and usrmotWriteEmcmotCommand().
00339 {
00340 if (usingShmem)
00341 {
00342 /* check for shmem still around */
00343 if (0 == emcmotStatus)
00344 {
00345 return EMCMOT_COMM_ERROR_CONNECT;
00346 }
00347
00348 memcpy(s, emcmotStatus, sizeof(EMCMOT_STATUS));
00349 }
00350 else
00351 {
00352 /* check for shmem still around */
00353 if (0 == emcmotStatus)
00354 {
00355 return EMCMOT_COMM_ERROR_CONNECT;
00356 }
00357
00358 memcpy(s, emcmotStatus, sizeof(EMCMOT_STATUS));
00359 }
00360
00361 /* got it, now check head-tail matches */
00362 #ifndef IGNORE_SPLIT_READS
00363 if (s->head != s->tail)
00364 {
00365 #if 0
00366 emcmot_status_split_count++;
00367 if (emcmot_status_split_count > 2 && emcmot_status_split_count%100 == 0)
00368 {
00369 rcs_print("emcmot_status_split_count = %d\n",emcmot_status_split_count);
00370 }
00371 #endif
00372 return EMCMOT_COMM_SPLIT_READ_TIMEOUT;
00373 }
00374 #endif
00375
00376 emcmot_status_split_count = 0;
00377 return EMCMOT_COMM_OK;
00378 }
|
|
|
Definition at line 271 of file usrmotintf.c. Referenced by emcAxisAbort(), emcAxisAbsJog(), emcAxisActivate(), emcAxisDeactivate(), emcAxisDisable(), emcAxisEnable(), emcAxisHome(), emcAxisIncrJog(), emcAxisJog(), emcAxisOverrideLimits(), emcAxisSetCycleTime(), emcAxisSetEnablePolarity(), emcAxisSetFaultPolarity(), emcAxisSetFerror(), emcAxisSetGains(), emcAxisSetHome(), emcAxisSetHomeOffset(), emcAxisSetHomeSwitchPolarity(), emcAxisSetHomingPolarity(), emcAxisSetHomingVel(), emcAxisSetInputScale(), emcAxisSetMaxLimitSwitchPolarity(), emcAxisSetMaxOutputLimit(), emcAxisSetMaxPositionLimit(), emcAxisSetMaxVelocity(), emcAxisSetMinFerror(), emcAxisSetMinLimitSwitchPolarity(), emcAxisSetMinOutputLimit(), emcAxisSetMinPositionLimit(), emcAxisSetOutput(), emcAxisSetOutputScale(), emcIoInit(), emcLogClose(), emcLogOpen(), emcLogStart(), emcLogStop(), emcMotionSetAout(), emcMotionSetDebug(), emcMotionSetDout(), emcSpindleDisable(), emcSpindleEnable(), emcSpindleOn(), emcTrajAbort(), emcTrajCircularMove(), emcTrajClearProbeTrippedFlag(), emcTrajDisable(), emcTrajEnable(), emcTrajLinearMove(), emcTrajPause(), emcTrajProbe(), emcTrajResume(), emcTrajSetAcceleration(), emcTrajSetCycleTime(), emcTrajSetHome(), emcTrajSetMaxVelocity(), emcTrajSetMode(), emcTrajSetProbeIndex(), emcTrajSetProbePolarity(), emcTrajSetScale(), emcTrajSetTeleopVector(), emcTrajSetTermCond(), emcTrajSetVelocity(), emcTrajStep(), and main().
00272 {
00273 EMCMOT_STATUS s;
00274 static int commandNum = 0;
00275 static unsigned char headCount = 0;
00276 double end;
00277
00278 c->head = ++headCount;
00279 c->tail = c->head;
00280 c->commandNum = ++commandNum;
00281
00282 if (usingShmem)
00283 {
00284 /* check for shmem still around */
00285 if (0 == emcmotCommand)
00286 {
00287 return EMCMOT_COMM_ERROR_CONNECT;
00288 } /* end of if */
00289
00290 *emcmotCommand = *c;
00291 } /* end of if */
00292 else
00293 {
00294 /* check for mapped mem still around */
00295 if (0 == emcmotCommand)
00296 {
00297 return EMCMOT_COMM_ERROR_CONNECT;
00298 } /* end of if */
00299
00300 *emcmotCommand = *c;
00301 } /* end of else */
00302
00303 /* poll for receipt of command */
00304
00305 /* set timeout for comm failure, now + timeout */
00306 end = etime() + EMCMOT_COMM_TIMEOUT;
00307
00308 /* now check to see if it got it */
00309 while (etime() < end)
00310 {
00311 /* update status */
00312 if (0 == usrmotReadEmcmotStatus(&s) &&
00313 s.commandNumEcho == commandNum)
00314 {
00315 /* now check emcmot status flag */
00316 if (s.commandStatus == EMCMOT_COMMAND_OK)
00317 {
00318 return EMCMOT_COMM_OK;
00319 } /* end of if */
00320 else
00321 {
00322 return EMCMOT_COMM_ERROR_COMMAND;
00323 } /* end of else */
00324 } /* end of if */
00325 /* rcs_print("s.commandNumEcho = %d, commandNum=%d\n",s.commandNumEcho, commandNum); */
00326 } /* end of while loop */
00327
00328 emcmot_comm_timeout_count++;
00329 /* rcs_print("emcmot_comm_timeout_count=%d\n", emcmot_comm_timeout_count); */
00330 return EMCMOT_COMM_ERROR_TIMEOUT;
00331 }
|
|
|
Definition at line 156 of file usrmotintf.c. |
|
|
Definition at line 268 of file usrmotintf.c. |
|
|
Definition at line 334 of file usrmotintf.c. |
|
|
Definition at line 335 of file usrmotintf.c. |
|
|
Definition at line 333 of file usrmotintf.c. |
1.2.11.1 written by Dimitri van Heesch,
© 1997-2001