plc:plc_examples
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
plc:plc_examples [2019/07/12 12:51] – ivan | plc:plc_examples [2021/01/21 12:32] – ivan | ||
---|---|---|---|
Line 43: | Line 43: | ||
</ | </ | ||
+ | ===Spindle Control through Triggers=== | ||
+ | |||
+ | In this case, a couple of lines are added to standard M03 (spindle ON), M05 (spindle OFF) and M02 (End program) PLCs, typically to allow the system to interpret some spindle feedback signal. Spindle control is done through a trigger, with the trigger flag indicating whether the trigger is ON or OFF. If the spindle is ON and the trigger is activated, then the program will be stopped. | ||
+ | |||
+ | The following code can be used to enable the trigger: | ||
+ | < | ||
+ | message=PLCCMD_TRIGGER1_ON; | ||
+ | timer=10; | ||
+ | </ | ||
+ | |||
+ | The following code can be used to disable the trigger: | ||
+ | |||
+ | < | ||
+ | timer=10; | ||
+ | | ||
+ | The code to enable the trigger should be inserted into M03, while the code to disable the trigger should be inserted into M05 and M02. The full resultant PLC procedure code can be found below: | ||
+ | |||
+ | |||
+ | ++++ Click to expand the M03 code | | ||
+ | < | ||
+ | #include pins.h | ||
+ | #include vars.h | ||
+ | main() | ||
+ | { | ||
+ | timer=0; | ||
+ | proc=plc_proc_spindle; | ||
+ | |||
+ | val=eparam; | ||
+ | if (val> | ||
+ | if (val<0) {val=0;}; | ||
+ | |||
+ | dac01=val; | ||
+ | |||
+ | portclr(OUTPUT_CCW_SPINDLE); | ||
+ | portset(OUTPUT_SPINDLE); | ||
+ | |||
+ | gvarset(7370, | ||
+ | gvarset(7371, | ||
+ | |||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | |||
+ | //delay after spindle started | ||
+ | timer=spindle_on_delay; | ||
+ | do{timer--; | ||
+ | |||
+ | message=PLCCMD_TRIGGER1_ON; | ||
+ | timer=10; | ||
+ | |||
+ | exit(99); | ||
+ | };</ | ||
+ | ++++ | ||
+ | |||
+ | ++++Click to expand the M05 code | | ||
+ | < | ||
+ | //Spindle Stop | ||
+ | //set Spindle speed control via DAC & PWM1 channel | ||
+ | |||
+ | #include pins.h | ||
+ | #include vars.h | ||
+ | |||
+ | |||
+ | main() | ||
+ | { | ||
+ | portclr(OUTPUT_SPINDLE); | ||
+ | portclr(OUTPUT_CCW_SPINDLE); | ||
+ | proc=plc_proc_idle; | ||
+ | |||
+ | message=PLCCMD_TRIGGER1_OFF; | ||
+ | timer=10; | ||
+ | |||
+ | if (spindle_off_delay!=0) | ||
+ | { | ||
+ | timer=spindle_off_delay; | ||
+ | do { timer--; } while (timer> | ||
+ | }; | ||
+ | |||
+ | dac01=0x0; | ||
+ | |||
+ | gvarset(7370, | ||
+ | gvarset(7371, | ||
+ | |||
+ | exit(99); | ||
+ | };</ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ++++Click to expand the M02 code | | ||
+ | < | ||
+ | #include pins.h | ||
+ | #include vars.h | ||
+ | |||
+ | // g0moveA - start motion: | ||
+ | // flags - | ||
+ | // bit 0 - absolute programming | ||
+ | // bit 1 - machine coordinates | ||
+ | // bit 7 - delayed start. | ||
+ | // axes mask | ||
+ | // bit 0 - X axis; bit 1 - Y axis;bit 2 - Z axis;bit 3 - A axis;bit 4 - B axis;bit 5 - C axis | ||
+ | |||
+ | lift_up() | ||
+ | { | ||
+ | |||
+ | if (proc==plc_proc_spindle) | ||
+ | { | ||
+ | z1=gvarget(17003); | ||
+ | timer=10; do{timer--; | ||
+ | |||
+ | z2=gvarget(7020); | ||
+ | z2=z2*100; | ||
+ | |||
+ | if (absolute==0) { z2=z1+z2; | ||
+ | |||
+ | z1=z1+100; | ||
+ | |||
+ | if (z2>z1) | ||
+ | { // | ||
+ | gvarset(7080, | ||
+ | g0moveA(1, | ||
+ | timer=300; do{timer--; | ||
+ | //wait motion stopped | ||
+ | do | ||
+ | { ex=0; code=gvarget(6060); | ||
+ | if (code==0x4d) {ex=1;}; | ||
+ | if (code==0x57) {ex=1;}; | ||
+ | } while(ex==0); | ||
+ | }; | ||
+ | }; | ||
+ | |||
+ | }; | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | message=PLCCMD_TRIGGER4_ON; | ||
+ | timer=2; | ||
+ | |||
+ | if (absolute!=0) { absolute=1; }; | ||
+ | |||
+ | portclr(OUTPUT_MIST); | ||
+ | portclr(OUTPUT_FLOOD); | ||
+ | gvarset(7372, | ||
+ | timer=30; | ||
+ | gvarset(7373, | ||
+ | timer=30; | ||
+ | |||
+ | lift_up(); | ||
+ | |||
+ | dac01=0x0; | ||
+ | |||
+ | portclr(OUTPUT_SPINDLE); | ||
+ | portclr(OUTPUT_CCW_SPINDLE); | ||
+ | gvarset(7370, | ||
+ | gvarset(7371, | ||
+ | |||
+ | message=PLCCMD_TRIGGER1_OFF; | ||
+ | timer=10; | ||
+ | |||
+ | proc=plc_proc_idle; | ||
+ | exit(99); | ||
+ | };</ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | The trigger itself can be set up in Settings > Config > Inputs/ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | * **Input Number** can be set to the port which the spindle feedback signal is using (#0 in this case) | ||
+ | * **Trigger** will be set to Falling Edge | ||
+ | * **Output** set to Not Connected | ||
+ | * **Slot** set to Stop Program | ||
=== Spindle Speed control for ET10_DAC === | === Spindle Speed control for ET10_DAC === | ||
Line 182: | Line 355: | ||
Because of how the system records angles, the software shows angles larger than 360 degrees (one full revolution) if a number of turns in the same direction have been taken by the knife. For example, if the knife has turned around its axis from 0 degrees twice in the positive direction, the angle now will be recorded as 720 degrees (2 full revolutions). After the program completes, and the angle is left at this number, the next time the program starts, the knife will rotate back until the angle is equal to zero. This behaviour is not ideal for some users, as it can extend the cutting process time. | Because of how the system records angles, the software shows angles larger than 360 degrees (one full revolution) if a number of turns in the same direction have been taken by the knife. For example, if the knife has turned around its axis from 0 degrees twice in the positive direction, the angle now will be recorded as 720 degrees (2 full revolutions). After the program completes, and the angle is left at this number, the next time the program starts, the knife will rotate back until the angle is equal to zero. This behaviour is not ideal for some users, as it can extend the cutting process time. | ||
- | The M212 macro exists to remove this positive/ | + | {{: |
- | The macro is provided with the myCNC software, and looks as follows: | + | The M212 PLC exists to remove this positive/ |
+ | |||
+ | This PLC is provided with the myCNC software, and looks as follows: | ||
< | < | ||
Line 213: | Line 388: | ||
};</ | };</ | ||
- | This macro can be added to the DXF footer in **Settings > Config > DXF Import Settings** to run every time when the program generated from an imported DXF file finishes running. | + | This PLC can be added to the DXF footer in **Settings > Config > DXF Import Settings** to run every time when the program generated from an imported DXF file finishes running. |
+ | |||
+ | **// | ||
+ | When analyzing the program, by default the software does not know that the coordinate inside the PLC has changed, and thus the subsequent G0 command must be used to update it (G1/G2/G3 are NOT suitable for this task). However, the G0 code is only necessary if the M212 is embedded into a G-code program. If the M212 PLC is started independently (for example by clicking a the button which launches the M212 alone), then it doesn' | ||
plc/plc_examples.txt · Last modified: 2024/02/21 13:59 by ivan