Time to revisit coolant mapping of M-codes in Linuxcnc

More
2 years 2 weeks ago #312012 by smc.collins
I haven't looked but I am fairly sure the the software supports mcode with decimal places ? M7.0 or m7.1  etc and so on. 

the current coolant/cutting fluid controls are way to limited and require to much special handling. It would make sense to update the current scheme with mcode that could be numbers 

M7.1 air blast
M7.2 mist
M7.3 flood
M7.4 through tool 

etc and so forth. I can modify the existing post processor but where exactly would this change have to be made in the core of the linuxcnc software base ? Also the existing mcodes for coolant can be left standing. I am just trying to avoid creating custom mcodes for controlling the various cooling systems I am adding to my machines, but many NEWER cnc machines also have many varying types of coolant schemes. 

Please Log in to join the conversation.

More
2 years 2 weeks ago #312030 by spumco
Minor suggestion - leave the mist as M7, and flood as M8 and save the 'derivative' M-codes as M7.n or M8.n

M8 - main flood
M8.1 - supplemental
M8.2 - TSC
M8.3 - washdown

M7 - main mist
M7.1 - supplemental

Etc.

Please Log in to join the conversation.

More
2 years 2 weeks ago #312034 by Aciera

haven't looked but I am fairly sure the the software supports mcode with decimal places ? M7.0 or m7.1 etc and so on.


As far as I'm aware Mcode numbers must be integers (Gcodes can have decimals)
You could create a single custom mcode with a P word though.

Please Log in to join the conversation.

More
2 years 2 weeks ago #312182 by smc.collins
Ok, so configure coolant m codes as follows

M7 p1 mist
M7 p2 derivative 

M8 p1 flood
M8 p2 through tool
M8 P3  high pressure through tool

M9  p01 mist off
M9 p100 all off 



As kind of a loose structure?

Thanks for the reply. If anyone knows where in the code base to look for this stuff it'd be nice to save me the time of having to dig through tons of folders and files

Thanks

Please Log in to join the conversation.

More
2 years 2 weeks ago #312183 by Aciera
I was actually picturing a remapped (ie currently unused Mcode). This would be a rather simple gcode remap where you could then use 'motion.digital-out' pins for the appropriate coolant flow.

Actually adding this to the source code will likely involve
a) a number of files in '/src/emc/rs274ngc'
b) pose the additional challenge of there not being a suitable NML command for all the different coolant variants you have in mind.

Please Log in to join the conversation.

More
2 years 2 weeks ago #312202 by spumco

I was actually picturing a remapped (ie currently unused Mcode). This would be a rather simple gcode remap where you could then use 'motion.digital-out' pins for the appropriate coolant flow.

Actually adding this to the source code will likely involve
a) a number of files in '/src/emc/rs274ngc'
b) pose the additional challenge of there not being a suitable NML command for all the different coolant variants you have in mind.
 
This is what I did for my non-standard cooling stuff.  Just cooked up some Mnn.ngc files to take care of stuff like spindle taper air blast, washdown, and multi-mist nozzles on my gang lathe.

Please Log in to join the conversation.

More
2 years 2 weeks ago #312203 by smc.collins

I was actually picturing a remapped (ie currently unused Mcode). This would be a rather simple gcode remap where you could then use 'motion.digital-out' pins for the appropriate coolant flow.

Actually adding this to the source code will likely involve
a) a number of files in '/src/emc/rs274ngc'
b) pose the additional challenge of there not being a suitable NML command for all the different coolant variants you have in mind.
 
This is what I did for my non-standard cooling stuff.  Just cooked up some Mnn.ngc files to take care of stuff like spindle taper air blast, washdown, and multi-mist nozzles on my gang lathe.
are you at liberty to share those mappings ? 

Please Log in to join the conversation.

More
2 years 2 weeks ago #312204 by smc.collins

I was actually picturing a remapped (ie currently unused Mcode). This would be a rather simple gcode remap where you could then use 'motion.digital-out' pins for the appropriate coolant flow.

Actually adding this to the source code will likely involve
a) a number of files in '/src/emc/rs274ngc'
b) pose the additional challenge of there not being a suitable NML command for all the different coolant variants you have in mind.
The issue at hand, the lack of NML commands is a problem that requires a lot of extra effort for every retrofit that could be solve once and be done with. 

Please Log in to join the conversation.

More
2 years 2 weeks ago #312216 by spumco

are you at liberty to share those mappings ? 

They're just basic xxx.ngc subroutine files, specified in the INI file. Not an actual remap of an existing M-code with new behavior and -P/-Q passthrough params.
Code:
[RS274NGC] PARAMETER_FILE = lathe.var USER_M_PATH = /home/lathe/linuxcnc/configs/LATHE_REV1.53/MCODES/ SUBROUTINE_PATH = /home/lathe/linuxcnc/configs/LATHE_REV1.53/subroutines RS274NGC_STARTUP_CODE = F10 S0 G7 G18 G20 G40 G49 G54 G64 P0.001 G80 G90 G91.1 G92.1 G94 G97 G98 ;ORIENT_OFFSET = #REMAP=G12.1 ngc=g121 #REMAP=G13.1 ngc=g131 REMAP=M200  modalgroup=10   ngc=m200 REMAP=M201  modalgroup=10   ngc=m201 REMAP=M202  modalgroup=10   ngc=m202 REMAP=M203  modalgroup=10   ngc=m203 REMAP=M210  modalgroup=10   ngc=m210 REMAP=M211  modalgroup=10   ngc=m211 REMAP=M212  modalgroup=10   ngc=m212 REMAP=M213  modalgroup=10   ngc=m213 REMAP=M220  modalgroup=10   ngc=m220 REMAP=M221  modalgroup=10   ngc=m221 REMAP=M222  modalgroup=10   ngc=m222 REMAP=M223  modalgroup=10   ngc=m223 REMAP=M268  modalgroup=10   ngc=m268 REMAP=M269  modalgroup=10   ngc=m269

M210 to M213 are my extra mist valves.  Subroutines look like this:
Code:
o<m210> sub ;MIST 2 ON ;MIST2 VALVE             motion.digital-out-00 ;MIST3 VALVE             motion.digital-out-01 M64 P0                                  ;TURN ON MIST2 VALVE o<m210> endsub [1] M2

The other ones are main and sub drawbars, and 268/269 are G10 front/back tool rotations (hoping to incorporate that in post processor so the display automatically flips to the right orientation).

I could have mapped them to a more logical M-code number... Maybe I'll see if m207.1.ngc & m207.2.ngc work and not cause LCNC to vomit.

Please Log in to join the conversation.

More
2 years 2 weeks ago #312226 by Aciera

The issue at hand, the lack of NML commands is a problem that requires a lot of extra effort for every retrofit that could be solve once and be done with.


Just to give you an idea of what you may be up against (there is likely a fair bit more):
Code:
./src/emc/task/emccanon.cc:2344:void FLOOD_OFF() ./src/emc/task/emccanon.cc:2346: EMC_COOLANT_FLOOD_OFF flood_off_msg; ./src/emc/task/emccanon.cc:2353:void FLOOD_ON() ./src/emc/task/emccanon.cc:2355: EMC_COOLANT_FLOOD_ON flood_on_msg; ./src/emc/task/emccanon.cc:2811:int GET_EXTERNAL_FLOOD() ./src/emc/task/taskclass.cc:646: EMC_COOLANT_FLOOD_ON floodOnMsg; ./src/emc/task/taskclass.cc:655: EMC_COOLANT_FLOOD_OFF floodOffMsg; ./src/emc/task/emctaskmain.cc:938: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/task/emctaskmain.cc:939: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/task/emctaskmain.cc:1051: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/task/emctaskmain.cc:1052: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/task/emctaskmain.cc:1164: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/task/emctaskmain.cc:1165: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/task/emctaskmain.cc:1228: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/task/emctaskmain.cc:1229: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/task/emctaskmain.cc:1323: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/task/emctaskmain.cc:1324: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/task/emctaskmain.cc:1393: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/task/emctaskmain.cc:1394: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/task/emctaskmain.cc:1541: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/task/emctaskmain.cc:1542: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/task/emctaskmain.cc:2048: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/task/emctaskmain.cc:2052: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/task/emctaskmain.cc:2474: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/task/emctaskmain.cc:2475: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/canterp/canterp.cc:29: 11 N0080 FLOOD_OFF() ./src/emc/canterp/canterp.cc:374: if (!strcmp(the_command_name, "FLOOD_OFF")) { ./src/emc/canterp/canterp.cc:375: FLOOD_OFF(); ./src/emc/canterp/canterp.cc:384: if (!strcmp(the_command_name, "FLOOD_ON")) { ./src/emc/canterp/canterp.cc:385: FLOOD_ON(); ./src/emc/rs274ngc/rs274ngc_pre.cc:2036: _setup.flood = GET_EXTERNAL_FLOOD(); ./src/emc/rs274ngc/rs274ngc_pre.cc:2198: tag.flags[GM_FLAG_MIST] ? 7 : tag.flags[GM_FLAG_FLOOD] ? -1 : 9; ./src/emc/rs274ngc/rs274ngc_pre.cc:2200: tag.flags[GM_FLAG_FLOOD] ? 8 : -1; ./src/emc/rs274ngc/interp_convert.cc:3537: enqueue_FLOOD_ON(); ./src/emc/rs274ngc/interp_convert.cc:3542: enqueue_FLOOD_OFF(); ./src/emc/rs274ngc/interp_convert.cc:4552:9. Coolant is turned off (like M9) - FLOOD_OFF & MIST_OFF ./src/emc/rs274ngc/interp_convert.cc:4679: FLOOD_OFF(); ./src/emc/rs274ngc/interp_namedparams.cc:79: NP_FLOOD, ./src/emc/rs274ngc/interp_namedparams.cc:625: case NP_FLOOD: // flood ./src/emc/rs274ngc/interp_namedparams.cc:911: init_readonly_param("_flood", NP_FLOOD, PA_USE_LOOKUP); ./src/emc/rs274ngc/interp_queue.hh:19: QMIST_ON, QMIST_OFF, QFLOOD_ON, QFLOOD_OFF, ./src/emc/rs274ngc/interp_queue.hh:114:void enqueue_FLOOD_ON(void); ./src/emc/rs274ngc/interp_queue.hh:115:void enqueue_FLOOD_OFF(void); ./src/emc/rs274ngc/interp_queue.cc:132:void enqueue_FLOOD_ON(void) { ./src/emc/rs274ngc/interp_queue.cc:135: FLOOD_ON(); ./src/emc/rs274ngc/interp_queue.cc:139: q.type = QFLOOD_ON; ./src/emc/rs274ngc/interp_queue.cc:144:void enqueue_FLOOD_OFF(void) { ./src/emc/rs274ngc/interp_queue.cc:147: FLOOD_OFF(); ./src/emc/rs274ngc/interp_queue.cc:151: q.type = QFLOOD_OFF; ./src/emc/rs274ngc/interp_queue.cc:507: case QFLOOD_ON: ./src/emc/rs274ngc/interp_queue.cc:509: FLOOD_ON(); ./src/emc/rs274ngc/interp_queue.cc:511: case QFLOOD_OFF: ./src/emc/rs274ngc/interp_queue.cc:513: FLOOD_OFF(); ./src/emc/rs274ngc/gcodemodule.cc:460:void FLOOD_OFF() {} ./src/emc/rs274ngc/gcodemodule.cc:462:void FLOOD_ON() {} ./src/emc/rs274ngc/gcodemodule.cc:583:int GET_EXTERNAL_FLOOD() { return 0; } ./src/emc/rs274ngc/interp_write.cc:317: state.flags[GM_FLAG_FLOOD] = (settings->flood); ./src/emc/rs274ngc/canonmodule.cc:123: def("FLOOD_OFF",&FLOOD_OFF); ./src/emc/rs274ngc/canonmodule.cc:124: def("FLOOD_ON",&FLOOD_ON); ./src/emc/rs274ngc/canonmodule.cc:134: def("GET_EXTERNAL_FLOOD",&GET_EXTERNAL_FLOOD); ./src/emc/rs274ngc/canonmodule.cc:256: def("enqueue_FLOOD_ON", &enqueue_FLOOD_ON); ./src/emc/rs274ngc/canonmodule.cc:257: def("enqueue_FLOOD_OFF", &enqueue_FLOOD_OFF); ./src/emc/motion/state_tag.h:51: GM_FLAG_FLOOD, ./src/emc/nml_intf/emc.hh:219:#define EMC_COOLANT_FLOOD_ON_TYPE ((NMLTYPE) 1406) ./src/emc/nml_intf/emc.hh:220:#define EMC_COOLANT_FLOOD_OFF_TYPE ((NMLTYPE) 1407) ./src/emc/nml_intf/canon.hh:647:extern void FLOOD_OFF(); ./src/emc/nml_intf/canon.hh:649:extern void FLOOD_ON(); ./src/emc/nml_intf/canon.hh:785:extern int GET_EXTERNAL_FLOOD(); ./src/emc/nml_intf/emc.cc:141: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/nml_intf/emc.cc:142: ((EMC_COOLANT_FLOOD_OFF *) buffer)->update(cms); ./src/emc/nml_intf/emc.cc:144: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/nml_intf/emc.cc:145: ((EMC_COOLANT_FLOOD_ON *) buffer)->update(cms); ./src/emc/nml_intf/emc.cc:544: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/nml_intf/emc.cc:545: return "EMC_COOLANT_FLOOD_OFF"; ./src/emc/nml_intf/emc.cc:546: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/nml_intf/emc.cc:547: return "EMC_COOLANT_FLOOD_ON"; ./src/emc/nml_intf/emc.cc:2555:* NML/CMS Update function for EMC_COOLANT_FLOOD_OFF ./src/emc/nml_intf/emc.cc:2559:void EMC_COOLANT_FLOOD_OFF::update(CMS * cms) ./src/emc/nml_intf/emc.cc:2695:* NML/CMS Update function for EMC_COOLANT_FLOOD_ON ./src/emc/nml_intf/emc.cc:2699:void EMC_COOLANT_FLOOD_ON::update(CMS * cms) ./src/emc/nml_intf/emc_nml.hh:1942:class EMC_COOLANT_FLOOD_ON:public EMC_COOLANT_CMD_MSG { ./src/emc/nml_intf/emc_nml.hh:1944: EMC_COOLANT_FLOOD_ON():EMC_COOLANT_CMD_MSG(EMC_COOLANT_FLOOD_ON_TYPE, ./src/emc/nml_intf/emc_nml.hh:1946: (EMC_COOLANT_FLOOD_ON)) { ./src/emc/nml_intf/emc_nml.hh:1953:class EMC_COOLANT_FLOOD_OFF:public EMC_COOLANT_CMD_MSG { ./src/emc/nml_intf/emc_nml.hh:1955: EMC_COOLANT_FLOOD_OFF():EMC_COOLANT_CMD_MSG(EMC_COOLANT_FLOOD_OFF_TYPE, ./src/emc/nml_intf/emc_nml.hh:1957: (EMC_COOLANT_FLOOD_OFF)) { ./src/emc/iotask/ioControl_v2.cc:1223: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/iotask/ioControl_v2.cc:1224: rtapi_print_msg(RTAPI_MSG_DBG, "EMC_COOLANT_FLOOD_ON\n"); ./src/emc/iotask/ioControl_v2.cc:1229: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/iotask/ioControl_v2.cc:1230: rtapi_print_msg(RTAPI_MSG_DBG, "EMC_COOLANT_FLOOD_OFF\n"); ./src/emc/iotask/ioControl.cc:1071: case EMC_COOLANT_FLOOD_ON_TYPE: ./src/emc/iotask/ioControl.cc:1072: rtapi_print_msg(RTAPI_MSG_DBG, "EMC_COOLANT_FLOOD_ON\n"); ./src/emc/iotask/ioControl.cc:1077: case EMC_COOLANT_FLOOD_OFF_TYPE: ./src/emc/iotask/ioControl.cc:1078: rtapi_print_msg(RTAPI_MSG_DBG, "EMC_COOLANT_FLOOD_OFF\n"); grep: ./src/emc/usr_intf/gmoccapy/__pycache__/gmoccapy.cpython-310.pyc: binary file matches ./src/emc/usr_intf/gmoccapy/gmoccapy.py:4122: self.command.flood(linuxcnc.FLOOD_ON) ./src/emc/usr_intf/gmoccapy/gmoccapy.py:4125: self.command.flood(linuxcnc.FLOOD_OFF) ./src/emc/usr_intf/axis/extensions/emcmodule.cc:57:#define LOCAL_FLOOD_ON (1) ./src/emc/usr_intf/axis/extensions/emcmodule.cc:58:#define LOCAL_FLOOD_OFF (0) ./src/emc/usr_intf/axis/extensions/emcmodule.cc:1051: case LOCAL_FLOOD_ON: ./src/emc/usr_intf/axis/extensions/emcmodule.cc:1053: EMC_COOLANT_FLOOD_ON m; ./src/emc/usr_intf/axis/extensions/emcmodule.cc:1057: case LOCAL_FLOOD_OFF: ./src/emc/usr_intf/axis/extensions/emcmodule.cc:1059: EMC_COOLANT_FLOOD_OFF m; ./src/emc/usr_intf/axis/extensions/emcmodule.cc:1064: PyErr_Format(PyExc_ValueError,"FLOOD should be FLOOD_ON or FLOOD_OFF"); ./src/emc/usr_intf/axis/extensions/emcmodule.cc:2471: ENUMX(6, LOCAL_FLOOD_ON); ./src/emc/usr_intf/axis/extensions/emcmodule.cc:2472: ENUMX(6, LOCAL_FLOOD_OFF); ./src/emc/usr_intf/shcom.cc:674: EMC_COOLANT_FLOOD_ON emc_coolant_flood_on_msg; ./src/emc/usr_intf/shcom.cc:688: EMC_COOLANT_FLOOD_OFF emc_coolant_flood_off_msg; ./src/emc/usr_intf/stepconf/build_HAL.py:198: if SIG.FLOOD in outputs: ./src/emc/usr_intf/stepconf/stepconf.py:177: self.MIST, self.FLOOD, self.ESTOP, self.AMP, grep: ./src/emc/usr_intf/stepconf/__pycache__/stepconf.cpython-310.pyc: binary file matches grep: ./src/emc/usr_intf/stepconf/__pycache__/build_HAL.cpython-310.pyc: binary file matches ./src/emc/usr_intf/pncconf/private_data.py:177: S.MIST,S.FLOOD,S.ESTOP,S.AMP, grep: ./src/emc/usr_intf/pncconf/__pycache__/private_data.cpython-310.pyc: binary file matches ./src/emc/usr_intf/halui.cc:1096: EMC_COOLANT_FLOOD_ON emc_coolant_flood_on_msg; ./src/emc/usr_intf/halui.cc:1103: EMC_COOLANT_FLOOD_OFF emc_coolant_flood_off_msg; ./src/emc/usr_intf/emcrsh.cc:480: "TIME", "ESTOP", "MACHINE", "MODE", "MIST", "FLOOD", "LUBE", "LUBE_LEVEL", ./src/emc/usr_intf/emcrsh.cc:1629: const char *pFloodStr = "FLOOD %s"; ./src/emc/sai/saicanon.cc:617:void FLOOD_OFF() ./src/emc/sai/saicanon.cc:619: PRINT("FLOOD_OFF()\n"); ./src/emc/sai/saicanon.cc:623:void FLOOD_ON() ./src/emc/sai/saicanon.cc:625: PRINT("FLOOD_ON()\n"); ./src/emc/sai/saicanon.cc:748:int GET_EXTERNAL_FLOOD()

Consider the effort it would take to expand that against spending maybe an hour to create a new Mcode remap for a more granular coolant handling and adding a filter script to change the PP output to the new Mcode (or adjusting the PP itself).

Please Log in to join the conversation.

Time to create page: 0.275 seconds
Powered by Kunena Forum