585,759 active members*
4,083 visitors online*
Register for free
Login
IndustryArena Forum > CAM Software > Uncategorised CAM Discussion > How can I execute an m-code in the middle of a toolpath?
Results 1 to 8 of 8
  1. #1
    Join Date
    Dec 2004
    Posts
    12

    How can I execute an m-code in the middle of a toolpath?

    What I am trying to do should be very simple. I am trying to draw a straight line and while the line is being drawn I am trying to send m-code commands that turn a pump/dispenser on and off. Is this possible?

    I tried to insert the m-code command in between two lines of X/Y commands but it caused a slight delay and subsequently, an unwanted buildup of fluid where the gantry paused momentarily.

    Here are a few lines of code from the tests that I have done. This test caused a delay when turning the pump off.

    > N21 M1[Dispenser On]
    > N22 G1 X21.0802 F200.0
    > N23 M2[Dispenser Off]
    > N24 G1 X40.0802 F200.0

  2. #2
    Join Date
    Mar 2003
    Posts
    4826
    What kind of controller is this? Can you write your own logic for the G and M codes?

    M1 and M2 are typically reserved for special functions in gcode programs. I wonder if a conflict in logic could be occurring? M1 is pause and M2 is program end. Use perhaps M8 and M9 (typically assigned to coolant), but not M1, M2, M3, M4, M5, M6, or M30
    First you get good, then you get fast. Then grouchiness sets in.

    (Note: The opinions expressed in this post are my own and are not necessarily those of CNCzone and its management)

  3. #3
    Join Date
    Dec 2004
    Posts
    12
    We have a Camtech CMCIII table and controller.

    I do not think that the pause is a conflict issue but I can do a test with an alternative m-code command that is designated for turning the dust collection system on and off. If there is no pause with the dust collection command that I think that you would be correct regarding the cause of the delay.

  4. #4
    Join Date
    Dec 2004
    Posts
    12
    I just did a test using the m-code for the dust collector and it caused the same momentary pause when it executed the off command.

    >N21 M8 [Dust Collection ON]
    >N22 G1 X21.0802 F200.0
    >N23 M9[Dust Collection OFF]
    >N24 G1 X40.0802 F200.0

  5. #5
    Join Date
    Mar 2003
    Posts
    4826
    Okay, if that is too much pause, then I think I understand what you are trying to get at.

    When two motion commands are interrupted with an Mcode, most likely the controller is going to bring the motors to a full stop, then accelerate again when motion resumes.

    Everything in gcode logic is sequential, AFAIK, there are no truly parallel threads running at once, except for interpolated axis motions.

    I don't know what else you could do except rig up some micro switches or proximity sensors to place along the path of the dispenser, which would trigger the dispenser directly, and seperately, from the gcode.

    Or, maybe add a solenoid driven drip catcher to slide beneath the dispenser when it shuts off to catch the drip?
    First you get good, then you get fast. Then grouchiness sets in.

    (Note: The opinions expressed in this post are my own and are not necessarily those of CNCzone and its management)

  6. #6
    Join Date
    Dec 2004
    Posts
    12
    There must me a way to turn a device on and off without introducing a delay in the x/y move. I have seen laser cutters draw complex dotted lines without pauses between the on and off points. Any idea how a laser could do this?

    What we are really trying to do is figure out a way to turn off the dispenser just before it reaches the end of a line or when it hits a corner and changes cutting direction. We were attempting to do this by breaking he line so we could insert the "dispenser OFF" command...which did not solve our build-up problem.

  7. #7
    Join Date
    Apr 2005
    Posts
    629
    Quote Originally Posted by GeorgeRudd
    What I am trying to do should be very simple. I am trying to draw a straight line and while the line is being drawn I am trying to send m-code commands that turn a pump/dispenser on and off. Is this possible?

    I tried to insert the m-code command in between two lines of X/Y commands but it caused a slight delay and subsequently, an unwanted buildup of fluid where the gantry paused momentarily.

    Here are a few lines of code from the tests that I have done. This test caused a delay when turning the pump off.

    > N21 M1[Dispenser On]
    > N22 G1 X21.0802 F200.0
    > N23 M2[Dispenser Off]
    > N24 G1 X40.0802 F200.0

    Depending on your controller, the M-code could be executed first or last on a line.

    Try this

    N21 M1[Dispenser On]
    N22 G1 X21.0802 F200.0 M2
    N24 G1 X40.0802 F200.0

    And if that doesn't time out right then try this

    N21 M1[Dispenser On]
    N22 G1 X21.0802 F200.0
    N24 G1 X40.0802 F200.0 M2

    Usually the position of an M-code within a line doesn't matter as to when it gets executed. Most likely, the second version is the one that will work for you.

    Chris

  8. #8
    Join Date
    Dec 2004
    Posts
    12
    Chris, putting the m-code command on the end of the line that contains the X move was the first thing that I tried. When I ran the file I got an error that said there were two commands on the same line.

    I did a test that changed the speed in the middle of a path and it worked fine with no delay, which made me think that the m-code should work. Unfortunately the manufacturer of our machine is closed until January 3rd so I can not ask them any technical questions until then.

    N22 G1 X21.0802 F200.0
    N24 G1 X40.0802 F400.0

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •