CNC Jumps G20 - SMC_NCInterpreter and long time to process

dwpessoa
2023-09-20
2024-08-03
  • dwpessoa - 2023-09-20

    I am studying and developing a Softmotion+CNC system for a machine that executes multiple pieces. The G code program is written by the machine operator and each cycle execute 1 piece. The programs are large, exceeding 1000 lines and using up to 8 axes (X, Y, Z, A, B, C, P and Q).

    The machine needs to run cyclically, executing N pieces (selected by the Operator)... so I tested it using Looping and counters (G36 G37 and G20) and it worked, but it takes a long time to process, and the more pieces I need, the longer the processing time and this is totally impracticable.

    I found this solution which was very good, and for a few cycles it works well, but for 99999 pieces of a program with 1000 lines, it doesn't work very well...

    Another solution I tested is to maintain the interpolator with an automatic restart, that is, I load the program without looping (without G20) and give it another start as soon as it finishes. This partially resolved it, but there is still a delay in processing SMC_NCInterpreter in each restart :(.

    Another solution I thought of is to manually create the SMC_GEOINFO structure and then reuse it, avoinding the Interpreter, but reading the documentation and checking the structure filled by standard blocks, I noticed that there doesn't seem to be a "JUMP" function in the structure! In other words, the SMC_NCInterpreter actually keeps copying and copying the program section for each jump (G20)... If I repeat a 10-line program 1000 times, I will have a structure with more than 10000 lines... possibly this is the cause of take so long to process.

    Has anyone ever had a problem like this? I believe the same thing happens with typical applications with manipulator robots using Codesys in continuous cycles, and I would like to know if there is any solution, or even if I am misinterpreting the G20 question in SMC_GEOINFO.

    Thanks!

     
  • murdemon - 2024-08-03

    Best way.. in CNC program before G20 jump, set G75. And for fbCheckVel execute if fbInterpreter.bWorking AND fbInterpreter.bLastObjectWasAdministrative; and same for Interpolator.
    "
    .....
    dumm := fbInterpreter.bWorking AND fbInterpreter.bLastObjectWasAdministrative;

    //Check velociteses.
    fbCheckVel(bExecute := (fbInterpreter.bDone or) dumm,
    bAbort := gCNC.bCycleStop,
    poqDataIn := fbInterpreter.poqDataOut);
    "

     
  • murdemon - 2024-08-03

    N10 G01 X100 Y100 F100
    N20 G00 X300 Y100 F100
    N30 G00 X300 Y300 F100
    N40 G00 X100 Y300 F100
    N50 G00 X100 Y100 F100 + $R1$
    N60 G75
    N70 G20 L10
    N100 M30

     

Log in to post a comment.