component syringe2 "syringe control"; // syringe2.comp - control syringe for 2gbp // // modes: // 0: idle <- (i_running && M68 E0 Q0 (m68==0))||(!i_running && !i_retract) // en=0 // o-hvon = 0 // // 4: jogging <- !i-running && i_retract // en=1 // ctrl-type = 1 // vel-cmd=1.0 // // 5: extruding <- (i-running || i_retract) && M3 && !(m68==2) // en=1 // ctrl-type = 1 // vel-cmd = extrvel // // 6: spinning <- (i-running || i_retract) && !M3 && M68 E0 Q2 (m68==2) // en=1 // ctrl-type = 1 // vel-cmd = spinvel // o-hvon = hv_arm // pin in float i-extrvel "extrusion velocity"; pin in float i-spinvel "electrospin velocity"; pin in float i-vectrate "vector rate"; pin in float i-m68 "M67/68 E0 value"; pin in bit i-running "running G-code or MDI"; pin in bit i-hv_arm "arm HV"; pin in bit i-retract "syringe retract"; pin in bit i-depress "syringe depress"; pin in bit i-m3 "M3 spindle command on"; pin in float i-spindlespeed "spindle speed value"; pin out float o-velcmd "velocity command for stepgen"; pin out bit o-en "enable stepgen"; pin out bit o-hvon "HV is on"; pin out bit o-spinning "is spinning"; pin out bit o-extruding "is extruding"; pin out float o-mode "debug - current mode"; function _; option singleton yes; license "GPL"; author "Ralph Stirling"; variable int mode = 0; ;; //#include FUNCTION(_) { o_mode = mode; switch (mode) { default: mode = 0; case 0: // idle if (!i_running && (i_retract || i_depress)) mode = 4; if (i_running && i_m3 && i_m68!=2) mode = 5; if (i_running && !i_m3 && i_m68==2) mode = 6; o_en = 0; o_spinning = 0; o_extruding = 0; o_velcmd = 0; o_hvon = 0; break; case 4: // jogging if (!i_retract && !i_depress) mode = 0; o_en = 1; o_spinning = 0; o_extruding = 0; if (i_retract) o_velcmd = -1.0; if (i_depress) o_velcmd = 1.0; if (i_retract && i_depress) o_velcmd = 0; o_hvon = 0; break; case 5: // extruding if ((i_running && !i_m3) || (!i_running)) mode = 0; o_en = 1; o_spinning = 0; o_extruding = 1; o_velcmd = i_spindlespeed * i_vectrate; o_hvon = 0; break; case 6: // spinning if ((i_running && i_m68==0) || (!i_running)) mode = 0; o_en = 1; o_spinning = 1; o_extruding = 0; o_velcmd = i_spinvel/3600; o_hvon = i_hv_arm; break; } }