📄 emclcd.cc
字号:
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 + -