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

📄 emcmodule.cc

📁 CNC 的开放码,EMC2 V2.2.8版
💻 CC
📖 第 1 页 / 共 4 页
字号:
}static PyObject *mist(pyCommandChannel *s, PyObject *o) {    int dir;    if(!PyArg_ParseTuple(o, "i", &dir)) return NULL;    switch(dir) {        case LOCAL_MIST_ON:        {            EMC_COOLANT_MIST_ON m;            m.serial_number = next_serial(s);            s->c->write(m);            emcWaitCommandReceived(s->serial, s->s);        }            break;        case LOCAL_MIST_OFF:        {            EMC_COOLANT_MIST_OFF m;            m.serial_number = next_serial(s);            s->c->write(m);            emcWaitCommandReceived(s->serial, s->s);        }            break;        default:            PyErr_Format(PyExc_ValueError,"Mist should be MIST_ON or MIST_OFF");            return NULL;    }    Py_INCREF(Py_None);    return Py_None;}static PyObject *flood(pyCommandChannel *s, PyObject *o) {    int dir;    if(!PyArg_ParseTuple(o, "i", &dir)) return NULL;    switch(dir) {        case LOCAL_FLOOD_ON:        {            EMC_COOLANT_FLOOD_ON m;            m.serial_number = next_serial(s);            s->c->write(m);            emcWaitCommandReceived(s->serial, s->s);        }            break;        case LOCAL_FLOOD_OFF:        {            EMC_COOLANT_FLOOD_OFF m;            m.serial_number = next_serial(s);            s->c->write(m);            emcWaitCommandReceived(s->serial, s->s);        }            break;        default:            PyErr_Format(PyExc_ValueError,"FLOOD should be FLOOD_ON or FLOOD_OFF");            return NULL;    }    Py_INCREF(Py_None);    return Py_None;}static PyObject *brake(pyCommandChannel *s, PyObject *o) {    int dir;    if(!PyArg_ParseTuple(o, "i", &dir)) return NULL;    switch(dir) {        case LOCAL_BRAKE_ENGAGE:        {            EMC_SPINDLE_BRAKE_ENGAGE m;            m.serial_number = next_serial(s);            s->c->write(m);            emcWaitCommandReceived(s->serial, s->s);        }            break;        case LOCAL_BRAKE_RELEASE:        {            EMC_SPINDLE_BRAKE_RELEASE m;            m.serial_number = next_serial(s);            s->c->write(m);            emcWaitCommandReceived(s->serial, s->s);        }            break;        default:            PyErr_Format(PyExc_ValueError,"BRAKE should be BRAKE_ENGAGE or BRAKE_RELEASE");            return NULL;    }    Py_INCREF(Py_None);    return Py_None;}static PyObject *load_tool_table(pyCommandChannel *s, PyObject *o) {    EMC_TOOL_LOAD_TOOL_TABLE m;    m.file[0] = '\0'; // don't override the ini file    m.serial_number = next_serial(s);    s->c->write(m);    emcWaitCommandReceived(s->serial, s->s);    Py_INCREF(Py_None);    return Py_None;}static PyObject *emcabort(pyCommandChannel *s, PyObject *o) {    EMC_TASK_ABORT m;    m.serial_number = next_serial(s);    s->c->write(m);    emcWaitCommandReceived(s->serial, s->s);    Py_INCREF(Py_None);    return Py_None;}static PyObject *override_limits(pyCommandChannel *s, PyObject *o) {    EMC_AXIS_OVERRIDE_LIMITS m;    m.axis = 0; // same number for all    m.serial_number = next_serial(s);    s->c->write(m);    emcWaitCommandReceived(s->serial, s->s);    Py_INCREF(Py_None);    return Py_None;}static PyObject *home(pyCommandChannel *s, PyObject *o) {    EMC_AXIS_HOME m;    if(!PyArg_ParseTuple(o, "i", &m.axis)) return NULL;    m.serial_number = next_serial(s);    s->c->write(m);    emcWaitCommandReceived(s->serial, s->s);    Py_INCREF(Py_None);    return Py_None;}// jog(JOG_STOP, axis) // jog(JOG_CONTINUOUS, axis, speed) // jog(JOG_INCREMENT, axis, speed, increment)static PyObject *jog(pyCommandChannel *s, PyObject *o) {    int fn;    int axis;    double vel, inc;    if(!PyArg_ParseTuple(o, "ii|dd", &fn, &axis, &vel, &inc)) return NULL;    if(fn == LOCAL_JOG_STOP) {        if(PyTuple_Size(o) != 2) {            PyErr_Format( PyExc_TypeError,                "jog(JOG_STOP, ...) takes 2 arguments (%d given)",                PyTuple_Size(o));            return NULL;        }        EMC_AXIS_ABORT abort;        abort.axis = axis;        abort.serial_number = next_serial(s);        s->c->write(abort);        emcWaitCommandReceived(s->serial, s->s);    } else if(fn == LOCAL_JOG_CONTINUOUS) {        if(PyTuple_Size(o) != 3) {            PyErr_Format( PyExc_TypeError,                "jog(JOG_CONTINUOUS, ...) takes 3 arguments (%d given)",                PyTuple_Size(o));            return NULL;        }        EMC_AXIS_JOG cont;        cont.axis = axis;        cont.vel = vel;        cont.serial_number = next_serial(s);        s->c->write(cont);        emcWaitCommandReceived(s->serial, s->s);    } else if(fn == LOCAL_JOG_INCREMENT) {        if(PyTuple_Size(o) != 4) {            PyErr_Format( PyExc_TypeError,                "jog(JOG_INCREMENT, ...) takes 4 arguments (%d given)",                PyTuple_Size(o));            return NULL;        }        EMC_AXIS_INCR_JOG incr;        incr.axis = axis;        incr.vel = vel;        incr.incr = inc;        incr.serial_number = next_serial(s);        s->c->write(incr);        emcWaitCommandReceived(s->serial, s->s);    } else {        PyErr_Format( PyExc_TypeError, "jog() first argument must be JOG_xxx");        return NULL;    }    Py_INCREF(Py_None);    return Py_None;}static PyObject *reset_interpreter(pyCommandChannel *s, PyObject *o) {    EMC_TASK_PLAN_INIT m;    m.serial_number = next_serial(s);    s->c->write(m);    emcWaitCommandReceived(s->serial, s->s);    Py_INCREF(Py_None);    return Py_None;}static PyObject *program_open(pyCommandChannel *s, PyObject *o) {    EMC_TASK_PLAN_OPEN m;    char *file;    int len;    if(!PyArg_ParseTuple(o, "s#", &file, &len)) return NULL;    m.serial_number = next_serial(s);    strcpy(m.file, file);    s->c->write(m);    emcWaitCommandReceived(s->serial, s->s);    Py_INCREF(Py_None);    return Py_None;}static PyObject *emcauto(pyCommandChannel *s, PyObject *o) {    int fn;    EMC_TASK_PLAN_RUN run;    EMC_TASK_PLAN_PAUSE pause;    EMC_TASK_PLAN_RESUME resume;    EMC_TASK_PLAN_STEP step;    if(PyArg_ParseTuple(o, "ii", &fn, &run.line) && fn == LOCAL_AUTO_RUN) {        run.serial_number = next_serial(s);        s->c->write(run);        emcWaitCommandReceived(s->serial, s->s);    } else {        PyErr_Clear();        if(!PyArg_ParseTuple(o, "i", &fn)) return NULL;        switch(fn) {        case LOCAL_AUTO_PAUSE:            pause.serial_number = next_serial(s);            s->c->write(pause);            emcWaitCommandReceived(s->serial, s->s);            break;        case LOCAL_AUTO_RESUME:            resume.serial_number = next_serial(s);            s->c->write(resume);            emcWaitCommandReceived(s->serial, s->s);            break;        case LOCAL_AUTO_STEP:            step.serial_number = next_serial(s);            s->c->write(step);            emcWaitCommandReceived(s->serial, s->s);            break;        default:            PyErr_Format(error, "Unexpected argument '%d' to command.auto", fn);            return NULL;        }    }    Py_INCREF(Py_None);    return Py_None;}PyObject *debug(pyCommandChannel *s, PyObject *o) {    EMC_SET_DEBUG d;    if(!PyArg_ParseTuple(o, "i", &d.debug)) return NULL;    d.serial_number = next_serial(s);    s->c->write(d);    emcWaitCommandReceived(s->serial, s->s);        Py_INCREF(Py_None);    return Py_None;}PyObject *teleop(pyCommandChannel *s, PyObject *o) {    EMC_TRAJ_SET_TELEOP_ENABLE en;    if(!PyArg_ParseTuple(o, "i", &en.enable)) return NULL;    en.serial_number = next_serial(s);    s->c->write(en);    emcWaitCommandReceived(s->serial, s->s);        Py_INCREF(Py_None);    return Py_None;}PyObject *set_traj_mode(pyCommandChannel *s, PyObject *o) {    EMC_TRAJ_SET_MODE mo;    if(!PyArg_ParseTuple(o, "i", &mo.mode)) return NULL;    mo.serial_number = next_serial(s);    s->c->write(mo);    emcWaitCommandReceived(s->serial, s->s);        Py_INCREF(Py_None);    return Py_None;}PyObject *set_teleop_vector(pyCommandChannel *s, PyObject *o) {    EMC_TRAJ_SET_TELEOP_VECTOR mo;    mo.vector.a = mo.vector.b = mo.vector.c = 0.;    if(!PyArg_ParseTuple(o, "ddd|ddd", &mo.vector.tran.x, &mo.vector.tran.y, &mo.vector.tran.z, &mo.vector.a, &mo.vector.b, &mo.vector.c))        return NULL;    mo.serial_number = next_serial(s);    s->c->write(mo);    emcWaitCommandReceived(s->serial, s->s);    Py_INCREF(Py_None);    return Py_None;}PyObject *wait_complete(pyCommandChannel *s, PyObject *o) {    return PyInt_FromLong(emcWaitCommandComplete(s->serial, s->s));}static PyMemberDef Command_members[] = {    {"serial", T_INT, offsetof(pyCommandChannel, serial), READONLY},    {NULL}};static PyMethodDef Command_methods[] = {    {"debug", (PyCFunction)debug, METH_VARARGS},    {"teleop_enable", (PyCFunction)teleop, METH_VARARGS},    {"teleop_vector", (PyCFunction)set_teleop_vector, METH_VARARGS},    {"traj_mode", (PyCFunction)set_traj_mode, METH_VARARGS},    {"wait_complete", (PyCFunction)wait_complete, METH_NOARGS},    {"state", (PyCFunction)state, METH_VARARGS},    {"mdi", (PyCFunction)mdi, METH_VARARGS},    {"mode", (PyCFunction)mode, METH_VARARGS},    {"feedrate", (PyCFunction)feedrate, METH_VARARGS},    {"spindleoverride", (PyCFunction)spindleoverride, METH_VARARGS},    {"spindle", (PyCFunction)spindle, METH_VARARGS},    {"tool_offset", (PyCFunction)tool_offset, METH_VARARGS},    {"mist", (PyCFunction)mist, METH_VARARGS},    {"flood", (PyCFunction)flood, METH_VARARGS},    {"brake", (PyCFunction)brake, METH_VARARGS},    {"load_tool_table", (PyCFunction)load_tool_table, METH_NOARGS},    {"abort", (PyCFunction)emcabort, METH_NOARGS},    {"override_limits", (PyCFunction)override_limits, METH_NOARGS},    {"home", (PyCFunction)home, METH_VARARGS},    {"jog", (PyCFunction)jog, METH_VARARGS},    {"reset_interpreter", (PyCFunction)reset_interpreter, METH_NOARGS},    {"program_open", (PyCFunction)program_open, METH_VARARGS},    {"auto", (PyCFunction)emcauto, METH_VARARGS},    {"set_optional_stop", (PyCFunction)optional_stop, METH_VARARGS},    {"set_block_delete", (PyCFunction)block_delete, METH_VARARGS},    {NULL}};PyTypeObject Command_Type = {    PyObject_HEAD_INIT(NULL)    0,                      /*ob_size*/    "emc.command",          /*tp_name*/    sizeof(pyCommandChannel),/*tp_basicsize*/    0,                      /*tp_itemsize*/    /* methods */    (destructor)Command_dealloc,        /*tp_dealloc*/    0,                      /*tp_print*/    0,                      /*tp_getattr*/    0,                      /*tp_setattr*/    0,                      /*tp_compare*/    0,                      /*tp_repr*/    0,                      /*tp_as_number*/    0,                      /*tp_as_sequence*/    0,                      /*tp_as_mapping*/    0,                      /*tp_hash*/    0,                      /*tp_call*/    0,                      /*tp_str*/    0,                      /*tp_getattro*/    0,                      /*tp_setattro*/    0,                      /*tp_as_buffer*/    Py_TPFLAGS_DEFAULT,     /*tp_flags*/    0,                      /*tp_doc*/    0,                      /*tp_traverse*/    0,                      /*tp_clear*/    0,                      /*tp_richcompare*/    0,                      /*tp_weaklistoffset*/    0,                      /*tp_iter*/    0,                      /*tp_iternext*/    Command_methods,        /*tp_methods*/    Command_members,        /*tp_members*/    0,                      /*tp_getset*/    0,                      /*tp_base*/    0,                      /*tp_dict*/    0,                      /*tp_descr_get*/    0,                      /*tp_descr_set*/    0,                      /*tp_dictoffset*/    (initproc)Command_init, /*tp_init*/    0,                      /*tp_alloc*/    PyType_GenericNew,      /*tp_new*/    0,                      /*tp_free*/    0,                      /*tp_is_gc*/};static int Error_init(pyErrorChannel *self, PyObject *a, PyObject *k) {    char *file = get_nmlfile();    if(file == NULL) return -1;    NML *c = new NML(emcFormat, "emcError", "xemc", file);    if(!c) {        PyErr_Format( error, "new NML failed");        return -1;    }    self->c = c;    return 0;}static PyObject* Error_poll(pyErrorChannel *s) {    if(!s->c->valid()) {        PyErr_Format( error, "Error buffer invalid" );        return NULL;    }    NMLTYPE type = s->c->read();    if(type == 0) {        Py_INCREF(Py_None);        return Py_None;    }    PyObject *r = PyTuple_New(2);    PyTuple_SET_ITEM(r, 0, PyInt_FromLong(type));#define PASTE(a,b) a ## b#define _TYPECASE(tag, type, f) \    case tag: { \        char error_string[LINELEN]; \        strncpy(error_string, ((type*)s->c->get_address())->f, LINELEN-1); \        error_string[LINELEN-1] = 0; \        PyTuple_SET_ITEM(r, 1, PyString_FromString(error_string)); \        break; \    }#define TYPECASE(x, f) _TYPECASE(PASTE(x, _TYPE), x, f)    switch(type) {        TYPECASE(EMC_OPERATOR_ERROR, error)        TYPECASE(EMC_OPERATOR_TEXT, text)        TYPECASE(EMC_OPERATOR_DISPLAY, display)        TYPECASE(NML_ERROR, error)        TYPECASE(NML_TEXT, text)        TYPECASE(NML_DISPLAY, display)    default:        {            char error_string[256];            sprintf(error_string, "unrecognized error %ld", type);            PyTuple_SET_ITEM(r, 1, PyString_FromString(error_string));            break;        }    }    return r;}static void Error_dealloc(PyObject *self) {    delete ((pyErrorChannel*)self)->c;    PyObject_Del(self);}static PyMethodDef Error_methods[] = {    {"poll", (PyCFunction)Error_poll, METH_NOARGS, "Poll for errors"},    {NULL}};static PyTypeObject Error_Type = {

⌨️ 快捷键说明

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