emcrsh.cc
来自「CNC 的开放码,EMC2 V2.2.8版」· CC 代码 · 共 2,098 行 · 第 1/5 页
CC
2,098 行
scPlat, scIni, scDebug, scSetWait, scWait, scSetTimeout, scUpdate, scError, scOperatorDisplay, scOperatorText, scTime, scEStop, scMachine, scMode, scMist, scFlood, scLube, scLubeLevel, scSpindle, scBrake, scTool, scToolOffset, scLoadToolTable, scHome, scJogStop, scJog, scJogIncr, scFeedOverride, scAbsCmdPos, scAbsActPos, scRelCmdPos, scRelActPos, scJointPos, scPosOffset, scJointLimit, scJointFault, scJointHomed, scMDI, scTskPlanInit, scOpen, scRun, scPause, scResume, scStep, scAbort, scProgram, scProgramLine, scProgramStatus, scProgramCodes, scJointType, scJointUnits, scProgramUnits, scProgramLinearUnits, scProgramAngularUnits, scUserLinearUnits, scUserAngularUnits, scDisplayLinearUnits, scDisplayAngularUnits, scLinearUnitConversion, scAngularUnitConversion, scProbeClear, scProbeTripped, scProbeValue, scProbe, scTeleopEnable, scKinematicsType, scOverrideLimits, scSpindleOverride, scOptionalStop, scUnknown } setCommandType; typedef enum { rtNoError, rtHandledNoError, rtStandardError, rtCustomError, rtCustomHandledError } cmdResponseType; typedef struct { int cliSock; char hostName[80]; char version[8]; bool linked; bool echo; bool verbose; bool enabled; int commMode; int commProt; char inBuf[256]; char outBuf[4096]; char progName[256];} connectionRecType;int server_sockfd, client_sockfd;socklen_t server_len, client_len;struct sockaddr_in server_address;struct sockaddr_in client_address;bool useSockets = true;int tokenIdx;char *delims = " \n\r\0";int enabledConn = -1;char *setCommands[] = { "ECHO", "VERBOSE", "ENABLE", "CONFIG", "COMM_MODE", "COMM_PROT", "INIFILE", "PLAT", "INI", "DEBUG", "SET_WAIT", "WAIT", "TIMEOUT", "UPDATE", "ERROR", "OPERATOR_DISPLAY", "OPERATOR_TEXT", "TIME", "ESTOP", "MACHINE", "MODE", "MIST", "FLOOD", "LUBE", "LUBE_LEVEL", "SPINDLE", "BRAKE", "TOOL", "TOOL_OFFSET", "LOAD_TOOL_TABLE", "HOME", "JOG_STOP", "JOG", "JOG_INCR", "FEED_OVERRIDE", "ABS_CMD_POS", "ABS_ACT_POS", "REL_CMD_POS", "REL_ACT_POS", "JOINT_POS", "POS_OFFSET", "JOINT_LIMIT", "JOINT_FAULT", "JOINT_HOMED", "MDI", "TASK_PLAN_INIT", "OPEN", "RUN", "PAUSE", "RESUME", "STEP", "ABORT", "PROGRAM", "PROGRAM_LINE", "PROGRAM_STATUS", "PROGRAM_CODES", "JOINT_TYPE", "JOINT_UNITS", "PROGRAM_UNITS", "PROGRAM_LINEAR_UNITS", "PROGRAM_ANGULAR_UNITS", "USER_LINEAR_UNITS", "USER_ANGULAR_UNITS", "DISPLAY_LINEAR_UNITS", "DISPLAY_ANGULAR_UNITS", "LINEAR_UNIT_CONVERSION", "ANGULAR_UNIT_CONVERSION", "PROBE_CLEAR", "PROBE_TRIPPED", "PROBE_VALUE", "PROBE", "TELEOP_ENABLE", "KINEMATICS_TYPE", "OVERRIDE_LIMITS", "SPINDLE_OVERRIDE", "OPTIONAL_STOP", ""};char *commands[] = {"HELLO", "SET", "GET", "QUIT", "SHUTDOWN", "HELP", ""};/* static char *skipWhite(char *s){ while (isspace(*s)) { s++; } return s;} */static void thisQuit(){ EMC_NULL emc_null_msg; if (emcStatusBuffer != 0) { // wait until current message has been received emcCommandWaitReceived(emcCommandSerialNumber); } if (emcCommandBuffer != 0) { // send null message to reset serial number to original emc_null_msg.serial_number = saveEmcCommandSerialNumber; emcCommandBuffer->write(emc_null_msg); } // clean up NML buffers if (emcErrorBuffer != 0) { delete emcErrorBuffer; emcErrorBuffer = 0; } if (emcStatusBuffer != 0) { delete emcStatusBuffer; emcStatusBuffer = 0; emcStatus = 0; } if (emcCommandBuffer != 0) { delete emcCommandBuffer; emcCommandBuffer = 0; }// Tcl_Exit(0); exit(0);}static int initSockets(){ server_sockfd = socket(AF_INET, SOCK_STREAM, 0); server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = htonl(INADDR_ANY); server_address.sin_port = htons(5007); server_len = sizeof(server_address); bind(server_sockfd, (struct sockaddr *)&server_address, server_len); listen(server_sockfd, 5); signal(SIGCHLD, SIG_IGN); return 0;}static void sigQuit(int sig){ thisQuit();}static int sockWrite(connectionRecType *context){ strcat(context->outBuf, "\r\n"); write(context->cliSock, context->outBuf, strlen(context->outBuf)); return 0;}static setCommandType lookupSetCommand(char *s){ setCommandType i = scEcho; int temp; while (i < scUnknown) { if (strcmp(setCommands[i], s) == 0) return i;// (int)i += 1; temp = i; temp++; i = (setCommandType) temp; } return i;}static int commandHello(connectionRecType *context){ char *pch; char *password = "EMC"; pch = strtok(NULL, delims); if (pch == NULL) return -1; if (strcmp(pch, password) != 0) return -1; pch = strtok(NULL, delims); if (pch == NULL) return -1; strcpy(context->hostName, pch); pch = strtok(NULL, delims); if (pch == NULL) return -1; context->linked = true; strcpy(context->version, pch); printf("Connected to %s\n", context->hostName); return 0;}static int checkOnOff(char *s){ static char *onStr = "ON"; static char *offStr = "OFF"; if (s == NULL) return -1; strupr(s); if (strcmp(s, onStr) == 0) return 0; if (strcmp(s, offStr) == 0) return 1; return -1;}static int checkBinaryASCII(char *s){ static char *binaryStr = "BINARY"; static char *ASCIIStr = "ASCII"; if (s == NULL) return -1; strupr(s); if (strcmp(s, ASCIIStr) == 0) return 0; if (strcmp(s, binaryStr) == 0) return 1; return -1;}static int checkReceivedDoneNone(char *s){ static char *receivedStr = "RECEIVED"; static char *doneStr = "DONE"; static char *noneStr = "NONE"; if (s == NULL) return -1; strupr(s); if (strcmp(s, receivedStr) == 0) return 0; if (strcmp(s, doneStr) == 0) return 1; if (strcmp(s, noneStr) == 0) return 2; return -1;}static int checkNoneAuto(char *s){ static char *noneStr = "NONE"; static char *autoStr = "AUTO"; if (s == NULL) return -1; strupr(s); if (strcmp(s, noneStr) == 0) return 0; if (strcmp(s, autoStr) == 0) return 1; return -1;}static int checkManualAutoMDI(char *s){ static char *manualStr = "MANUAL"; static char *autoStr = "AUTO"; static char *mDIStr = "MDI"; if (s == NULL) return -1; strupr(s); if (strcmp(s, manualStr) == 0) return 0; if (strcmp(s, autoStr) == 0) return 1; if (strcmp(s, mDIStr) == 0) return 2; return -1;}static int checkSpindleStr(char *s){ static char *forwardStr = "FORWARD"; static char *reverseStr = "REVERSE"; static char *increaseStr = "INCREASE"; static char *decreaseStr = "DECREASE"; static char *constantStr = "CONSTANT"; static char *offStr = "OFF"; if (s == NULL) return -1; strupr(s); if (strcmp(s, forwardStr) == 0) return 0; if (strcmp(s, reverseStr) == 0) return 1; if (strcmp(s, increaseStr) == 0) return 2; if (strcmp(s, decreaseStr) == 0) return 3; if (strcmp(s, constantStr) == 0) return 4; if (strcmp(s, offStr) == 0) return 5; return -1;}static int checkConversionStr(char *s){ static char *inchStr = "INCH"; static char *mmStr = "MM"; static char *cmStr = "CM"; static char *autoStr = "AUTO"; static char *customStr = "CUSTOM"; if (s == NULL) return -1; strupr(s); if (strcmp(s, inchStr) == 0) return 0; if (strcmp(s, mmStr) == 0) return 1; if (strcmp(s, cmStr) == 0) return 2; if (strcmp(s, autoStr) == 0) return 3; if (strcmp(s, customStr) == 0) return 4; return -1;}static int checkAngularConversionStr(char *s){ static char *degStr = "DEG"; static char *radStr = "RAD"; static char *gradStr = "GRAD"; static char *autoStr = "AUTO"; static char *customStr = "CUSTOM"; if (s == NULL) return -1; strupr(s); if (strcmp(s, degStr) == 0) return 0; if (strcmp(s, radStr) == 0) return 1; if (strcmp(s, gradStr) == 0) return 2; if (strcmp(s, autoStr) == 0) return 3; if (strcmp(s, customStr) == 0) return 4; return -1;}static cmdResponseType setEcho(char *s, connectionRecType *context){ switch (checkOnOff(s)) { case -1: return rtStandardError; case 0: context->echo = true; break; case 1: context->echo = false; } return rtNoError;}static cmdResponseType setVerbose(char *s, connectionRecType *context){ switch (checkOnOff(s)) { case -1: return rtStandardError; case 0: context->verbose = true; break; case 1: context->verbose = false; } return rtNoError;}static cmdResponseType setEnable(char *s, connectionRecType *context){ char *enablePWD = "EMCTOO"; switch (checkOnOff(s)) { case -1: if (strcmp(s, enablePWD) == 0) {// enable = true; enabledConn = context->cliSock; context->enabled = true;// printf("Enabled Context = %d This context = %d\n", enabledConn, connId); return rtNoError; } else return rtStandardError; case 1: context->enabled = false; enabledConn = -1; } return rtNoError;}static cmdResponseType setConfig(char *s, connectionRecType *context){ return rtNoError;}static cmdResponseType setCommMode(char *s, connectionRecType *context){ int ret; ret = checkBinaryASCII(s); if (ret == -1) return rtStandardError; context->commMode = ret; return rtNoError;}static cmdResponseType setCommProt(char *s, connectionRecType *context){ char *pVersion; pVersion = strtok(NULL, delims); if (pVersion == NULL) return rtStandardError; strcpy(context->version, pVersion); return rtNoError;}static cmdResponseType setDebug(char *s, connectionRecType *context){ char *pLevel; int level; pLevel = strtok(NULL, delims); if (pLevel == NULL) return rtStandardError; if (sscanf(pLevel, "%i", &level) == -1) return rtStandardError; else sendDebug(level); return rtNoError;}static cmdResponseType setSetWait(char *s, connectionRecType *context){ switch (checkReceivedDoneNone(s)) { case -1: return rtStandardError; case 0: emcWaitType = EMC_WAIT_RECEIVED; break; case 1: emcWaitType = EMC_WAIT_DONE; break; case 2: emcWaitType = EMC_WAIT_NONE; break; } return rtNoError;}static cmdResponseType setMachine(char *s, connectionRecType *context){ switch (checkOnOff(s)) { case -1: return rtStandardError; case 0: sendMachineOn(); break; case 1: sendMachineOff(); } return rtNoError;}static cmdResponseType setEStop(char *s, connectionRecType *context){ switch (checkOnOff(s)) { case -1: return rtStandardError; case 0: sendEstop(); break; case 1: sendEstopReset(); } return rtNoError;}static cmdResponseType setWait(char *s, connectionRecType *context){ switch (checkReceivedDoneNone(s)) { case -1: return rtStandardError; case 0: if (emcCommandWaitReceived(emcCommandSerialNumber) != 0) return rtStandardError; break; case 1: if (emcCommandWaitDone(emcCommandSerialNumber) != 0) return rtStandardError; break; case 2: ; default: return rtStandardError; } return rtNoError;}static cmdResponseType setTimeout(char *s, connectionRecType *context){ float Timeout; if (s == NULL) return rtStandardError; if (sscanf(s, "%f", &Timeout) < 1) return rtStandardError; emcTimeout = Timeout; return rtNoError;}static cmdResponseType setUpdate(char *s, connectionRecType *context){
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?