⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emclcd.cc

📁 CNC 的开放码,EMC2 V2.2.8版
💻 CC
📖 第 1 页 / 共 3 页
字号:
  return jog(0, -jogSpeed);}static int leftKeyRelease(){  return jogStop(0);}static int rightKey(){  return jog(0, jogSpeed);}static int rightKeyRelease(){  return jogStop(0);}static int upKey(){  return jog(1, jogSpeed);}static int upKeyRelease(){  return jogStop(1);}static int downKey(){  return jog(1, -jogSpeed);}static int downKeyRelease(){  return jogStop(1);}static int startKey(){  if (runStatus == rsIdle)    return sendProgramRun(0);  else return -1;}static int pauseKey(){  if (runStatus == rsRun)    return sendProgramPause();  else    if (runStatus == rsPause)      return sendProgramResume();    else return -1;}static int stopKey(){  return sendAbort();}static int stepKey(){  return sendProgramStep();}static int nextKey(){  int temp;  if (curScreen == stMain) {    temp = jogMode;    temp++;    temp %= 5;    menuSetInt("Jog", "jog_mode", temp);    jogMode = (jogModeType) temp;    displayJogMode(jogMode);    }  return 0;}static int prevKey(){  int temp;  if (curScreen == stMain) {    temp = jogMode;    temp--;    if (temp < 0) temp = 4;    menuSetInt("Jog", "jog_mode", temp);    jogMode = (jogModeType) temp;    displayJogMode(jogMode);    }  return 0;}static int enterKey(){  sendHome(0);  sendHome(1);  sendHome(2);  return 0;}static int doKey(keyType k){  switch (k) {    case ktLeftPress:      leftKey();      break;    case ktLeftRelease:       leftKeyRelease();      break;    case ktRightPress:       rightKey();      break;    case ktRightRelease:       rightKeyRelease();      break;    case ktUpPress:       upKey();      break;    case ktUpRelease:       upKeyRelease();      break;    case ktDownPress:       downKey();      break;    case ktDownRelease:       downKeyRelease();      break;    case ktMenuPress: break;    case ktMenuRelease: break;    case ktStartPress:       startKey();      break;     case ktStartRelease: break;    case ktPausePress:       pauseKey();      break;    case ktPauseRelease: break;    case ktStopPress:       stopKey();      break;    case ktStopRelease: break;    case ktStepPress:      stepKey();      break;    case ktStepRelease: break;    case ktTestPress: break;    case ktTestRelease: break;    case ktHelpPress: break;    case ktHelpRelease: break;    case ktNextPress:       nextKey();      break;    case ktNextRelease: break;    case ktPrevPress:       prevKey();      break;    case ktPrevRelease: break;    case ktEnterPress:       enterKey();      break;    case ktEnterRelease: break;    case ktUnknown: ;    }  return 0;}static int parseLine(){  char *pch;  pch = strtok(buffer, delims);  switch (lookupRsp(pch)) {    case rmConnect: parseConnect(); break;    case rmSuccess: ; break;    case rmHuh:      pch = strtok(NULL, delims);      printf("Error: %s\n", pch);       break;    case rmListen:      pch = strtok(NULL, delims);      printf("listening to %s\n", pch);       curScreen = lookupScreen(pch);      break;    case rmIgnore:       pch = strtok(NULL, delims);      printf("ignoring %s\n", pch);       break;    case rmKey:       pch = strtok(NULL, delims);      printf("key entered %s\n", pch);      doKey(lookupKey(pch[0]));      break;    case rmMenuEvent:       pch = strtok(NULL, delims);      printf("menuevent %s\n", pch);      doMenuEvent(pch);      break;    case rmUnknown: printf("unknown command %s\n", buffer);    }  return 0;}static int startup(){  return sockConnect(DEFAULT_SERVER, DEFAULT_PORT);}static int initScreens(){  screensInitialized = createScreens();  screensInitialized = createWidgets();  screensInitialized = createKeys();  screensInitialized = createMenus();  setNewScreen(stMain);  printf("Screens created.\n");  return 0;}static int stepCount(char *fileName){  FILE *f;  char buffer[80];  int len;  sprintf(buffer, "wc -l < %s", fileName);  f = popen(buffer, "r");  memset(buffer, '\0', sizeof(buffer));  if (f != NULL) {    len = fread(buffer, sizeof(char), 79, f);    if (len > 0) printf("result = %s\n", buffer);    else printf("Nothing to read\n");    }  pclose(f);  return atoi(buffer);}#define STATUSWIDGET 10#define FEED_OVERRIDE_WIDGET 12#define JOG_WIDGET 13static void slowLoop(){  char *fname;  char buf[8];  static char status[8] = "";  static int oldFeedOverride = 0;  if (emcStatus->task.file[0] != 0) {    fname = extractFileName(emcStatus->task.file);    if (strcmp(fname, programName) != 0) {      strcpy(programName, widgetSetStr(PROG_WIDGET1, fname, programName));      strcpy(programName, widgetSetStr(PROG_WIDGET2, fname, programName));      totalSteps = stepCount(emcStatus->task.file);      }    }  feedOverride = (int)floor(emcStatus->motion.traj.scale * 100.0 + 0.5);  if (feedOverride != oldFeedOverride) {    menuSetInt("Run", "feed_slider", feedOverride);    oldFeedOverride = feedOverride;    sprintf(buf, "%5d", feedOverride);    widgetSetStr(FEED_OVERRIDE_WIDGET, buf, "");    }  switch (emcStatus->task.interpState) {      case EMC_TASK_INTERP_READING:      case EMC_TASK_INTERP_WAITING:         strcpy(status, widgetSetStr(STATUSWIDGET, "  Run", status));        if (runStatus != rsRun)          widgetSetStr(JOG_WIDGET, "Step", "");        runStatus = rsRun;        break;      case EMC_TASK_INTERP_PAUSED:         strcpy(status, widgetSetStr(STATUSWIDGET, "Pause", status));        runStatus = rsPause;        break;      default:         strcpy(status, widgetSetStr(STATUSWIDGET, " Idle", status));        if (runStatus != rsIdle) {          widgetSetStr(JOG_WIDGET, "Jog ", "");          displayJogMode(jogMode);          }        runStatus = rsIdle;        break;    }}#define XPOSWIDGET 7#define YPOSWIDGET 8#define ZPOSWIDGET 9#define LINENOWIDGET 14#define PROGRESSWIDGET 15static void updatePositions(){  static char oldXStr[12] = "";  static char oldYStr[12] = "";  static char oldZStr[12] = "";  char numStr[12];  int lineNo;  static int oldLineNo;  int stepPct;  static int oldPct = 0;  if (units == unmm)    sprintf(numStr, "%7.2f", emcStatus->motion.traj.actualPosition.tran.x * conversion);  else    sprintf(numStr, "%7.3f", emcStatus->motion.traj.actualPosition.tran.x * conversion);  widgetSetStr(XPOSWIDGET, numStr, oldXStr);     if (units == unmm)    sprintf(numStr, "%7.2f", emcStatus->motion.traj.actualPosition.tran.y * conversion);  else    sprintf(numStr, "%7.3f", emcStatus->motion.traj.actualPosition.tran.y * conversion);  widgetSetStr(YPOSWIDGET, numStr, oldYStr);  if (units == unmm)    sprintf(numStr, "%6.2f", emcStatus->motion.traj.actualPosition.tran.z * conversion);  else    sprintf(numStr, "%6.2f", emcStatus->motion.traj.actualPosition.tran.z * conversion);  widgetSetStr(ZPOSWIDGET, numStr, oldZStr);     if ((programStartLine< 0) || (emcStatus->task.readLine < programStartLine))    lineNo = emcStatus->task.readLine;  else    if (emcStatus->task.currentLine > 0)      if ((emcStatus->task.motionLine > 0) &&         (emcStatus->task.motionLine < emcStatus->task.currentLine))	  lineNo = emcStatus->task.motionLine;      else lineNo = emcStatus->task.currentLine;    else lineNo = 0;  if (runStatus == rsIdle)    oldPct = widgetSetHbar(PROGRESSWIDGET, 0, oldPct);  else    if (lineNo != oldLineNo) {      sprintf(numStr, "%d", lineNo);      widgetSetStr(LINENOWIDGET, numStr, "");      oldLineNo = lineNo;      stepPct = (int)(((double)lineNo / (double)totalSteps) * 50.0);      oldPct = widgetSetHbar(PROGRESSWIDGET, stepPct, oldPct);      }}static void fastLoop(){  if (emcUpdateType == EMC_UPDATE_AUTO) updateStatus();  updatePositions();}static void update(){  static int tics = 0;  // Wait for screens to initialize before updating  if (screensInitialized == -1) return;   if ((tics % 25) == 0) fastLoop();  if (tics == 105) {    slowLoop();    tics = 0;    }  tics++;}static int sockMain(){  sockfd = startup();  if (sockfd == -1) {    printf("Unable to open socket\n");    return -1;    }  else {     sendEstopReset();    sendMachineOn();    sockSendString(sockfd, "hello\n");    while ((len = sockRecvString(sockfd, buffer, sizeof(buffer) - 1)) >= 0) {      if (len == 0) {        preciseSleep(0.01);        update();        }      else {        parseLine();        memset(buffer, 0, sizeof(buffer));        if (screensInitialized == -1)           screensInitialized = initScreens();        }      }     }  return 0;}static void initMain(){    emcWaitType = EMC_WAIT_RECEIVED;    emcCommandSerialNumber = 0;    saveEmcCommandSerialNumber = 0;    emcTimeout = 0.0;    emcUpdateType = EMC_UPDATE_AUTO;    linearUnitConversion = LINEAR_UNITS_MM;     angularUnitConversion = ANGULAR_UNITS_AUTO;    emcCommandBuffer = 0;    emcStatusBuffer = 0;    emcStatus = 0;    emcErrorBuffer = 0;    error_string[LINELEN] = 0;    operator_text_string[LINELEN] = 0;    operator_display_string[LINELEN] = 0;    programStartLine = 0;}int main(int argc, char *argv[]){    initMain();    // process command line args    if (emcGetArgs(argc, argv) != 0) {	rcs_print_error("error in argument list\n");	exit(1);    }    // get configuration information    iniLoad(EMC_INIFILE);    // init NML    if (tryNml() != 0) {	rcs_print_error("can't connect to emc\n");	thisQuit();	exit(1);    }    // get current serial number, and save it for restoring when we quit    // so as not to interfere with real operator interface    updateStatus();    emcCommandSerialNumber = emcStatus->echo_serial_number;    saveEmcCommandSerialNumber = emcStatus->echo_serial_number;    // attach our quit function to exit//    Tcl_CreateExitHandler(thisQuit, (ClientData) 0);    // attach our quit function to SIGINT    signal(SIGINT, sigQuit);    sockMain();    // TclX_Main(argc, argv, Tcl_AppInit);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -