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