control additional axis with smc_interpolator

  • daussiny

    daussiny - 2017-05-22


    I have an xyz 3axis system .
    How do I connect an additional Q-axis to smc_interpolator so it is also controlled bij cnc (g code)?

    The xyz you connect to the SMC_interpollator Pisetposition output with Trafo_gantry 3 function blok .
    How do I connect/control the additional Q-axis ? ( to smc AxisConytrolByPos in CFC programming ?)

  • eschwellinger

    eschwellinger - 2017-05-27

    check the online help,
    depending on what you Need uvw or a,d,c axis..


  • daussiny

    daussiny - 2017-06-06

    Didn"t find any info in online help about additional axis! (only how to use in g-code, but not how to connect to smc_interpolator ).
    Did I miss relevant info/pages in online help?

    tried some options and used Q-axis in G-code and found out that you have to use dA2 variable from smc _ Interpolator to connect to smc_ControlAxisByPosition

    The axis controled in this way does not finish a task! .
    If I use for example Q25 and next step Q0 it will start but not finish the first task, but right away steps to next line .
    I can solve it with G4 T.. (time delay )

    Do I something wrong here or does it work this way. Did I forget to connect a feedback?

  • dwpessoa

    dwpessoa - 2019-12-12

    The post is kinda old ... but I think it deserves to have a solution here that might be useful for someone.

    If you look at the output [piSetPosition] of the [SMC_Interpolator] block you will see that it is a structure that contains the position of the axes (dX, dY, dZ ...), so just create a block to pull the values ​​out and then point them to each [SMC_ControlAxisByPos], such as SMC_TRAFO_ blocks does.

    For example:

    FUNCTION_BLOCK myCNCPositionConverter
       bExecute : BOOL;
       piSetPosition : SMC_POSINFO;
       iFrameNo : INT; 
       dX : LREAL;
       dY : LREAL;
       dZ : LREAL;
       dA : LREAL;
       dB : LREAL;
       dC : LREAL;
       dP : LREAL;
       dQ : LREAL;
       dU : LREAL;
       dV : LREAL;
       dW : LREAL;
    IF bExecute THEN
       dX := piSetPosition.dX;
       dY := piSetPosition.dY;
       dZ := piSetPosition.dZ;
       dA := piSetPosition.dA;
       dB := piSetPosition.dB;
       dC := piSetPosition.dC;
       dP := piSetPosition.dA1;
       dQ := piSetPosition.dA2;
       dU := piSetPosition.dA3;
       dV := piSetPosition.dA4;
       dW := piSetPosition.dA5;
       iFrameNo := piSetPosition.iFrameNo;   

    Another thing to note is that the auxiliary axes (A, B, C, P, Q, U, V and W) have unique speed and ramp settings, ie using the F20 command on one line of G code will specify the speed X, Y and Z axes only (with CNC in 3D mode). For example, to set the speed for the P axis, you have to use "FP20":

    G01 P100 F20 E30 E-30 >> That won't work for P Axis!
    G01 P100 FP20 EP30 EP-30 >> That works!

    You will find more information here:;product=codesys_softmotion;version=

    Also note that you cannot use the A, B, and C (Rotary) axes together with the U, V, and W (Linear) axes.;product=codesys_softmotion;version=

    The documentation really is a bit complicated, and this is based on the tests I did, maybe someone has another way of doing it or other opinion...


Log in to post a comment.