521,997 active members*
2,504 visitors online*
Register for free
Login
Page 2 of 2 12
Results 26 to 36 of 36
  1. #26
    Registered
    Join Date
    Jan 2012
    Posts
    41

    Re: Acramatic 2100 retrofit

    Making good progress. I got Y moving and tuned, it was a bigger pain than X was. I copied over the drive parameters from the X drive to the Y drive thinking I would be close by just copying the values from the X channel to the Y channel in kmotion which just resulted in oscillation. Same motors, same drives, same screws, WAY different tuning. I seem to get better results by lowering the velocity integrator in the drives considerably compared to where it was with the old control. I read that a cascading velocity position loop should be tuned inside out (velocity loop first) because typically the velocity loop is faster than the position loop. If I understand correctly I am wondering if in this case the drives velocity loop is actually slower.

    In any case I got it tuned to under 20 encoder counts at all speeds, will have to see how it cuts when I get that far. Couldn't get it under 180 counts without lowering the drives velocity integrator.

    Tomorrow I will try to get the Z going and look in to homing.

  2. #27
    Registered
    Join Date
    Jan 2012
    Posts
    41

    Re: Acramatic 2100 retrofit

    Well, new problem. I am running a test program trying to figure out what I can get away with acceleration wise in kmotioncnc. The performance I get out of the old control seems like it was very reliant on 3rd order motion control In any case my X axis is getting disabled due to following error at a particular spot in the program that consists of a lot of small fast x-z axis moves. Not really sure what is going on.

  3. #28
    Junior Member
    Join Date
    May 2006
    Posts
    3337

    Re: Acramatic 2100 retrofit

    Hi cwatson1982,

    If you post a GCode fragment, your KFLOP and KMotionCNC settings we might be able to see something.

    If you want to do a thorough analysis of what is happening you might capture data as Troy did in this Thread.
    TK
    http://dynomotion.com

  4. #29
    Registered
    Join Date
    Jan 2012
    Posts
    41

    Re: Acramatic 2100 retrofit

    Tom,

    I narrowed it down to:

    G19 G2 Y1.0838 Z-0.0306 J-0.0018 K0.0249
    G0 Z0.2
    X1.8847 Y1.3928
    Z0.0501

    Removing the G19 line lets the program complete; I don't actually have the Z axis hooked up or configured, so not sure if that's the issue but for whatever reason it causes a huge following error on the X channel instantly and disables it. Maybe an issue with the post processor? not real sure

    I'll run the data capture program after I hook Z up and see what it does.

  5. #30
    Junior Member
    Join Date
    May 2006
    Posts
    3337

    Re: Acramatic 2100 retrofit

    Hi cwatson1982,

    Hard to say without information or context but G19 G2 switches the plane to YZ and attempts an arc in that plane and also in any subsequent arcs.
    TK
    http://dynomotion.com

  6. #31
    Registered
    Join Date
    Jan 2012
    Posts
    41

    Re: Acramatic 2100 retrofit

    Looks like it was a post processor issue. I changed to another of the fusion 360 posts and it ran fine. I will dig in to it deeper later and figure out what it was precisely.

    After adjusting acceleration to where it was acceptable, I ran a portion of a program I run regularly; the old control beat kmotion but only by about ~5% in a worst case scenario (lots of small circles in an HSM roughing tool path). 378 seconds vs 362. I can definitely live with that and was better than I expected. The table and saddle on this machine collectively weight almost 2500lbs. That's a lot of weight to be swinging around in tight circles at 100 IPM without jerk limiting.

  7. #32
    Registered
    Join Date
    Jan 2012
    Posts
    41

    Re: Acramatic 2100 retrofit

    Got Z done and tuned and have been trying to get homing working properly. The machine has a weird set up. The trigger for the home switch is inside the travels of the limit switches. Each trigger plate has an angled ramp on both sides. The homing sequence works by hitting the first ramp and setting the switch low, then continuing to move until the switch moves high as it runs down the ramp on the other side of the plate. As soon as the switch goes high, the axis moves .5 inches further, then moves in the negative direction until the index is hit.

    Needless to say, the simpleHomingIndexFunction got me started, but required some modification. With the old control I had to make sure I was not on the home switch trigger plate before homing or the machine would just hit the limit switch and kill the drive power. I am going to see if I can get it to check if the home switch is already low and then move off of it before starting the homing of that axis.

    Thought I had it working and then started tripping the limit switches for some reason, so gave up for the evening

    Really enjoying the process and the hardware. I even got it to run faster than the old control on test programs using the coordinated motion filtering!

  8. #33
    Registered
    Join Date
    Jan 2012
    Posts
    41

    Re: Acramatic 2100 retrofit

    Here is some fun. This is part of the Acramatic 2100 code for homing for anyone who thinks C is bad

    Code:
    [SIZE=3]IF :-N_MCH_PWON OR +S_SV_ALARM OR [S1AXIS_UNALN = 0]: RETURN; END IF
    BEGIN CONDITION +N_ALIGN_AXES AND +N_MCH_PWON AND -N_DRIP ON EXCEPTION BEGIN
        SET N_AX_APPR_HM OFF
        SET S1IS_CANCEL ON
        WAIT +N1IS__STATE.AT_EOP
        WAIT [N_N_MSG_ID = 0]; LET N_N_MSG_ID = 20
        RETURN
      END
      SET S1AX_LIMITS OFF
      * PERFORM APPROACH HOME MOVE
      LET ..ALN_INX = 1
      REPEAT WHILE [..ALN_INX < N1LST_LOGAXS + 2]
        WAIT +N1RUN__SUB
        LET N1TPA_CMD = 20
        LET ..INX_TMP = 0
        * RESET SEQUENCE COMMAND REGISTERS THAT COMMUNICATE WITH THE ALIGN ISUB
        REPEAT WHILE [..INX_TMP < N1LST_LOGAXS + 1]
          LET N1TPASEQ_CMD(..INX_TMP) = 0
          LET ..INX_TMP = ..INX_TMP + 1
        LOOP
        * DETERMINE ALL AXES TO MOVE IN THIS SEQUENCE
        SET [N1TPASEQ_CMD(X) BIT 0] TO -N_X_REF_SW AND [N1AX_ALNTYPE(X) = 0] AND [N1AX_ALNSEQ(X) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT X]
        SET [N1TPASEQ_CMD(Y) BIT 0] TO -N_Y_REF_SW AND [N1AX_ALNTYPE(Y) = 0] AND [N1AX_ALNSEQ(Y) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT Y]
        SET [N1TPASEQ_CMD(Z) BIT 0] TO -N_Z_REF_SW AND [N1AX_ALNTYPE(Z) = 0] AND [N1AX_ALNSEQ(Z) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT Z]
        SET [N1TPASEQ_CMD(U) BIT 0] TO -N_U_REF_SW AND [N1AX_ALNTYPE(U) = 0] AND [N1AX_ALNSEQ(U) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT U]
        SET [N1TPASEQ_CMD(V) BIT 0] TO -N_V_REF_SW AND [N1AX_ALNTYPE(V) = 0] AND [N1AX_ALNSEQ(V) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT V]
        SET [N1TPASEQ_CMD(W) BIT 0] TO -N_W_REF_SW AND [N1AX_ALNTYPE(W) = 0] AND [N1AX_ALNSEQ(W) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT W]
        SET [N1TPASEQ_CMD(A) BIT 0] TO -N_A_REF_SW AND [N1AX_ALNTYPE(A) = 0] AND [N1AX_ALNSEQ(A) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT A]
        SET [N1TPASEQ_CMD(B) BIT 0] TO -N_B_REF_SW AND [N1AX_ALNTYPE(B) = 0] AND [N1AX_ALNSEQ(B) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT B]
        SET [N1TPASEQ_CMD(C) BIT 0] TO -N_C_REF_SW AND [N1AX_ALNTYPE(C) = 0] AND [N1AX_ALNSEQ(C) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT C]
        SET [N1TPASEQ_CMD(D) BIT 0] TO -N_D_REF_SW AND [N1AX_ALNTYPE(D) = 0] AND [N1AX_ALNSEQ(D) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT D]
        SET [N1TPASEQ_CMD(E) BIT 0] TO -N_E_REF_SW AND [N1AX_ALNTYPE(E) = 0] AND [N1AX_ALNSEQ(E) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT E]
        SET [N1TPASEQ_CMD(P) BIT 0] TO -N_P_REF_SW AND [N1AX_ALNTYPE(P) = 0] AND [N1AX_ALNSEQ(P) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT P]
        SET [N1TPASEQ_CMD(Q) BIT 0] TO -N_Q_REF_SW AND [N1AX_ALNTYPE(Q) = 0] AND [N1AX_ALNSEQ(Q) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT Q]
        SET [N1TPASEQ_CMD(R) BIT 0] TO -N_R_REF_SW AND [N1AX_ALNTYPE(R) = 0] AND [N1AX_ALNSEQ(R) = 
    ..ALN_INX] AND [N1AXIS_PRES BIT R]
        * DETERMINE IF ANY AXIS IS SET TO MOVE IN THIS SEQUENCE, POST ALARM IF AXIS IS INHIBITED
        LET ..INX_TMP = 0
        SET ..AX_SEL_FL OFF
        REPEAT WHILE [..INX_TMP < N1LST_LOGAXS + 1]
          IF :[S1AXIS_INH BIT ..INX_TMP]: BEGIN
              SET N_AX_APPR_HM OFF
              WAIT [N_N_ALM_ID = 0]; LET N_N_ALM_INS3 = N_AXS_LETTER(..INX_TMP); LET N_N_ALM_ID = 214
              RETURN
            END
          END IF
          IF :-..AX_SEL_FL: SET ..AX_SEL_FL TO [N1TPASEQ_CMD(..INX_TMP) BIT 0]; END IF
          LET ..INX_TMP = ..INX_TMP + 1
        LOOP
        IF :+..AX_SEL_FL: BEGIN
            SET N_AX_APPR_HM ON
            WAIT [N_N_MSG_ID = 0]; LET N_N_MSG_ID = 43
            LET N1IS_FOV_LIM = 100
            SET N1IS_LIM_FOV ON
            LET S1SUBROUTINE = 11
            START N1RUN__SUB
            DELAY 1 MSEC
            WHEN
              :+N1IS_FAIL: BEGIN
                SET N_AX_APPR_HM OFF
                WAIT [N_N_ALM_ID = 0]; LET N_N_ALM_INS1 = S1SUBROUTINE; LET N_N_ALM_ID = 219
                WAIT [N_N_MSG_ID = 0]; LET N_N_MSG_ID = 20
                RETURN
              END
              :+S1IS_RUN_ACK: BEGIN
                WHEN
                  :+N1SUB_COMPL: *
                  :[N1TPASEQ_CMD(X) BIT 0] AND +N_X_REF_SW: *
                  :[N1TPASEQ_CMD(Y) BIT 0] AND +N_Y_REF_SW: *
                  :[N1TPASEQ_CMD(Z) BIT 0] AND +N_Z_REF_SW: *
                  :[N1TPASEQ_CMD(U) BIT 0] AND +N_U_REF_SW: *
                  :[N1TPASEQ_CMD(V) BIT 0] AND +N_V_REF_SW: *
                  :[N1TPASEQ_CMD(W) BIT 0] AND +N_W_REF_SW: *
                  :[N1TPASEQ_CMD(A) BIT 0] AND +N_A_REF_SW: *
                  :[N1TPASEQ_CMD(B) BIT 0] AND +N_B_REF_SW: *
                  :[N1TPASEQ_CMD(C) BIT 0] AND +N_C_REF_SW: *
                  :[N1TPASEQ_CMD(D) BIT 0] AND +N_D_REF_SW: *
                  :[N1TPASEQ_CMD(E) BIT 0] AND +N_E_REF_SW: *
                  :[N1TPASEQ_CMD(P) BIT 0] AND +N_P_REF_SW: *
                  :[N1TPASEQ_CMD(Q) BIT 0] AND +N_Q_REF_SW: *
                  :[N1TPASEQ_CMD(R) BIT 0] AND +N_R_REF_SW: *
                END WHEN
                IF :+N1SUB_COMPL: BEGIN
                    WAIT +N1IS__STATE.AT_EOP
                    WAIT [N_N_ALM_ID = 0]
                    IF
                      :[N1TPASEQ_CMD(X) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(X)
                      :[N1TPASEQ_CMD(Y) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(Y)
                      :[N1TPASEQ_CMD(Z) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(Z)
                      :[N1TPASEQ_CMD(U) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(U)
                      :[N1TPASEQ_CMD(V) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(V)
                      :[N1TPASEQ_CMD(W) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(W)
                      :[N1TPASEQ_CMD(A) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(A)
                      :[N1TPASEQ_CMD(B) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(B)
                      :[N1TPASEQ_CMD(C) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(C)
                      :[N1TPASEQ_CMD(D) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(D)
                      :[N1TPASEQ_CMD(E) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(E)
                      :[N1TPASEQ_CMD(P) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(P)
                      :[N1TPASEQ_CMD(Q) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(Q)
                      :[N1TPASEQ_CMD(R) BIT 0]: LET N_N_ALM_INS3 = N_AXS_LETTER(R)
                    END IF
                    SET N_AX_APPR_HM OFF
                    LET N_N_ALM_ID = 215
                    WAIT [N_N_MSG_ID = 0]; LET N_N_MSG_ID = 20
                    RETURN
                  END
                  :+ELSE: BEGIN
                    SET S1IS_CANCEL ON
                    WAIT +N1IS__STATE.AT_EOP
                  END
                END IF
              END
            END WHEN
          END
          :+ELSE: BEGIN
            * NO AXIS SELECTED TO MOVE IN THIS SEQUENCE
            DELAY 1 MSEC
          END
        END IF
        * DETERMINE IF ALL SELECTED AXIS TO MOVE IN THIS SEQUENCE HAVE REACHED THE SWITCH
        IF
          :[N1TPASEQ_CMD(X) BIT 0] AND -N_X_REF_SW: *
          :[N1TPASEQ_CMD(Y) BIT 0] AND -N_Y_REF_SW: *
          :[N1TPASEQ_CMD(Z) BIT 0] AND -N_Z_REF_SW: *
          :[N1TPASEQ_CMD(U) BIT 0] AND -N_U_REF_SW: *
          :[N1TPASEQ_CMD(V) BIT 0] AND -N_V_REF_SW: *
          :[N1TPASEQ_CMD(W) BIT 0] AND -N_W_REF_SW: *
          :[N1TPASEQ_CMD(A) BIT 0] AND -N_A_REF_SW: *
          :[N1TPASEQ_CMD(B) BIT 0] AND -N_B_REF_SW: *
          :[N1TPASEQ_CMD(C) BIT 0] AND -N_C_REF_SW: *
          :[N1TPASEQ_CMD(D) BIT 0] AND -N_D_REF_SW: *
          :[N1TPASEQ_CMD(E) BIT 0] AND -N_E_REF_SW: *
          :[N1TPASEQ_CMD(P) BIT 0] AND -N_P_REF_SW: *
          :[N1TPASEQ_CMD(Q) BIT 0] AND -N_Q_REF_SW: *
          :[N1TPASEQ_CMD(R) BIT 0] AND -N_R_REF_SW: *
          :+ELSE: LET ..ALN_INX = ..ALN_INX + 1
        END IF
      LOOP

  9. #34
    Junior Member
    Join Date
    May 2006
    Posts
    3337

    Re: Acramatic 2100 retrofit

    for anyone who thinks C is bad
    LOL
    TK
    http://dynomotion.com

  10. #35
    Registered
    Join Date
    Jan 2012
    Posts
    41

    Re: Acramatic 2100 retrofit

    Quote Originally Posted by TomKerekes View Post
    LOL
    Indeed. I'm not sure what language it is; probably before my time. I spent most of college 15 years ago writing buffer overflows in assembly. I have forgotten almost all of it...but I think I would rather re-teach myself that than learn whatever this is!

    It's weird, but when I learned C back in the MFC days, code was formatted:

    Code:
    if (x==y)
      {
        //stuff
      }
    Everything recent is:

    Code:
    if (x==y) {
      //stuff 
     }
    That all the kflop code is formatted the first way is telling and makes it easier for me to read

  11. #36
    Registered
    Join Date
    Jan 2012
    Posts
    41

    Re: Acramatic 2100 retrofit

    Got homing all figured out. Last night I apparently didn't realize the Move function was relative to the axis zero; so it would appear to work and then either go backward or shoot off in to the limit switches depending on where the machine coordinates were at. Got it working by temporarily setting the axis 0 at the point the home ref switch went back to high, stopping the machine and then using Move to get it the last .5" before reversing to look for the index signal.

    As of now, other than wiring up flood, flood motor overload signal, spindle/drive over temp signals, axis drive ready signals and figuring out if I need to send the original c-axis enable signal for the spindle to do rigid tapping...I am almost ready to try cutting some stuff!

    I need to wire up a monitor and a wireless keyboard temporarily as I have been doing all of this on a laptop from the back of the machine where I can't see anything at all I don't want to start ripping out the old control until I am 100% sure I can run my products.

Page 2 of 2 12

Similar Threads

  1. Acramatic 2100
    By natin in forum Cincinnati CNC
    Replies: 4
    Last Post: 01-21-2019, 06:12 PM
  2. Acramatic 2100 hdd
    By Amtec in forum General CNC (Mill / Lathe) Control Software (NC)
    Replies: 11
    Last Post: 07-06-2016, 09:19 PM
  3. acramatic 2100
    By SolSql in forum General Off Topic Discussions
    Replies: 1
    Last Post: 07-30-2014, 10:38 PM
  4. Acramatic 2100
    By dmerrll in forum General CNC (Mill / Lathe) Control Software (NC)
    Replies: 4
    Last Post: 12-05-2012, 10:41 AM
  5. Acramatic 2100
    By clayman in forum General MetalWork Discussion
    Replies: 1
    Last Post: 02-19-2011, 12:29 AM

Tags for this Thread

Posting Permissions

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