Jump to content

Welcome to eMastercam

Register now to participate in the forums, access the download area, buy Mastercam training materials, post processors and more. This message will be removed once you have signed in.

Use your display name or email address to sign in:

Rob @ Target Machine

Verified Members
  • Posts

    737
  • Joined

  • Last visited

Posts posted by Rob @ Target Machine

  1. I'm looking at InspectionExpert for FAI report generation, and trying to decide what approach is most likely to yield decent results. Most of our customers will supply us with a dxf file that will hopefully allow capture of associative dimensions and notes or other callouts without alot of hand editing the reports.

     

    Can anyone recommend a better software for this purpose or share experience with this software?

     

    Or maybe suggest a different format to import the dim's from?

     

    I have AutoCad 2014 and Solidworks 2013. I think dxf is probably the best format to import dim's from without having a solid model to work with.

     

    Any suggestions?

  2. Colic - That's strictly homebrewed logic I added to conform with the program header requirements of this shop.

     

     

    Here's a sample of one of my headers:

     

    %

    O500 (MVS3050.500..MP)

    (REV -)

    (OP 1)

    (SET ALL TOOLS .490" ABOVE BOTTOM OF PART)

    (MC-510VF MATSUURA)

    ( MCX FILE - D3050-1 REV -.MCX-5 )

    ( NC FILE - MVS3050.500.NC )

    (JUL-13-2011)

    (2:31 PM)

    (T1 - 3/8" EM )

    (T2 - 1/8" EM )

    (T3 - .060 EM ROUGHER )

    (T4 - .060 EM )

    (T5 - 1/8" C'SINK U/C .110 X .200 )

     

     

     

    If you want to know more, I'll need a couple days to put it together for you.

  3. Ok. Sorry about the misunderstanding. These are the variables you need to output:

     

    stck_ht$

    stck_wdth$

    stck_thck$

     

    In Mpmaster they are already formatted to output with L, W, and H addresses.

     

    If you want to output them a different way, you can initialize your own variables and format them the way you want.

     

    fmt  S 4 cyl_typ    # Predator Cylindral Stock Type
    fmt  L 2 stck_ht$
    fmt  W 2 stck_wdth$
    fmt  H 2 stck_thck$
    
    # My new format statements - outputs stock size my way <----Add new format statements
    
    fmt  "LENGTH = " 2 stck_mystock_ht
    fmt  "WIDTH  = " 2 stck_mystock_wdth
    fmt  "HEIGHT = " 2 stck_mystock_thck
    

     

    Then assign the stock values to your variables and output them where you want them in your program.

     

    For this example, I'll output the stock size at the start of the file after the tool table.

     

    pmystock # My new postblock - outputs stock size my way <----Add new postblock
    
            stck_mystock_ht = stck_ht$
            stck_mystock_wdth = stck_wdth$
            stck_mystock_thck = stck_thck$
    
    
            scomm_str, stck_mystock_ht, scomm_end, e$
            scomm_str, stck_mystock_wdth, scomm_end, e$
            scomm_str, stck_mystock_thck, scomm_end, e$
    
    
    
    psof$            #Start of file for non-zero tool number
         ptravel
         pwritebuf5
         pcuttype
         toolchng = one
         if ntools$ = one,
           [
           #skip single tool outputs, stagetool must be on
           #stagetool = m_one
           !next_tool$
           ]
         tooltotal = rbuf(4,0)  #Reads total tool and null tool changes
         if toolcountn <= tooltotal, nexttool = rbuf(4,toolcountn)
         else, nexttool = first_tool$
    
         if tool_table = 2, ppredstck
         if tool_table = 3, pmetastck
         else, pmystock #<----Call the new postblock from psof$ postblock if we're not using Predator or Metacut Utilities
    

     

    Finally, make sure tool_table is set to 1.

     

    # --------------------------------------------------------------------------
    # General Output Settings
    # --------------------------------------------------------------------------
    ask         : 0     #Ask for part name, rev level, and op number
                       #Example nci name:  SA11251 REV B OP 3
    
    hel_2100    : no$   #Acramatic 2100 style helical moves, 0=no, 1=yes
    force_dpts  : no$   #Force XY output on all drilling lines including cycle call?
    haas        : 0     #Haas style peck drill and extended offsets, 0=no, 1=yes
    wcstype     : 2     #0 = G92 at start, 1 = G92 at toolchanges, 2 = G54, 3 = Off
    force_wcs   : yes$  #Force WCS output at every toolchange?
    tool_table  : 1     #Tool table, 0=no, 1=yes, 2=Predator VCNC, 3=MetaCut View
    

     

    HTH

  4. Jeff - I think you're due to have your post updated.

     

    pcancelcc$ is called by the mp.dll when gcode 1004 is found in the nci. I suspect you won't find the 1004 in the nci for that toolpath.

    The use of the pcancelcc$ postblock is not recommended.

    This was fine way back in V9, but I don't think you're going to have much luck using this V9 style post in X5 without some modification.

     

    If I'm not mistaken, your cutter comp string select table is likely using ccomp$, and needs to be modified to use cc_pos$, to select the string to output and cancel your cutter comp codes correctly.

     

    You can grab the framework and logic right out of the mpmaster if you're comfortable making the edits, otherwise, I'd give a call to my VAR for the mods.

  5. This is how I'm doing it in my 4ax post. Similar to mpsubrep. Mi1$ is the trigger Mi2$ is globally assigned to sub_offsets to output reps.

     

    Here are the calls:

    Entry point

    ptlchg_com      #Tool change common blocks  
         #if force_output | sof,
         if force_output,
           [
           result = force(ipr_type,ipr_type)
           result = force(absinc$,absinc$)
           result = force(plane$,plane$)
           ]
         pcom_moveb
         pcheckaxis      #Check for valid rotary axis
         c_mmlt$ #Multiple tool subprogram call
         #ptoolcomment
         if sof & scomm_sav <> snull,
           [
           spaces$ = 0
           n$, pspc, scomm_str, *scomm_sav, scomm_end, e$
           spaces$ = sav_spc
           ]
         if sof = 0, scomm_sav = snull
         comment$
         pcomment3
         pmisccheck
         pcan
         if stagetool >= zero,
           [
           if omitseq$ = 1 & tseqno > 0,
             [
             if tseqno = 2, n$ = t$
             pbld, *n$, e$
             pbld, *t$, "M6", ptoolcomm, e$
             ]
           else, pbld, n$, *t$, "M6", ptoolcomm, e$
           ]
         spaces$=0
         if output_z = yes$,
           [
           preadbuf5
           if (opcode$ > 0 & opcode$ < 16) | opcode$ = 19,
             [
             #n$, pspc, scomm_str, "CLEAR HEIGHT - ", *max_depth, scomm_end, e$
             n$, pspc, scomm_str, "MAX DEPTH - ", *min_depth, scomm_end, e$
             ]
           ]
         spaces$=sav_spc
         pstock
         if plane$ < 0 | opcode$ = 3 | opcode$ = 16, plane$ = 0
         sav_absinc = absinc$
         if wcstype > one, absinc$ = zero
         pindex
         if safe_index,
           [
           if lock_codes = one & not(index) & rot_on_x, pbld, n$, *sunlock, sunlockcomm, e$
           pbld, n$, pgear, e$
           pcan1, pbld, n$, *sgcode, sgplane, [if not(index), sgabsinc, pwcs], pfspeedout, scoolant, pfcout, strcantext, e$
           if lock_codes = one & not(index) & rot_on_x & cuttype = 0, pbld, n$, *slock, slockcomm, e$
           if convert_rpd$ = one,
             [
             gcode$ = one
             feed = maxfeedpm
             ipr_type = zero
             ]
           pbld, n$, sgcode, [if gcode$ = 1, sgfeed], pfxout, pfyout, [if gcode$ = 1, *feed], e$
           ]
         else,
           [
           if lock_codes = one & not(index) & rot_on_x, pbld, n$, *sunlock, sunlockcomm, e$
           pbld, n$, pgear, e$
           if convert_rpd$ = one,
             [
             gcode$ = one
             feed = maxfeedpm
             ipr_type = zero
             ]
           pcan1, pbld, n$, *sgcode, sgplane, [if not(index), sgabsinc, pwcs], [if gcode$ = 1, sgfeed],
            pfcout, pfxout, pfyout, pfspeedout, scoolant, [if gcode$ = 1, *feed], strcantext, e$
           if lock_codes = one & not(index) & rot_on_x & cuttype = 0, pbld, n$, *slock, slockcomm, e$
           ]
         phsm1_on        #must remain before G43
         #pbld, n$, "G43", *tlngno$, pfzout, scoolant, pfspindleout, next_tool$, e$
         #Set bias
         if absinc$ = zero,
         local_z = zabs - bias
         else,
         local_z = zinc - bias
         #
         pbld, n$, "G91", "G43", *tlngno$, *local_z, pfspindleout, next_tool$, e$
         pbld, n$, "G92", pfzout, scoolant, e$
         #pbld, n$, "G92", pfzout, e$
         pcan2
         pbld, n$, "G90",  e$
         #pcan2           #Added so M and G codes in canned text will output before phsm2_on
         phsm2_on        #must remain after G43
         sav_coolant = coolant$
         if coolant$ = 1, sm09 = sm09_0
         if coolant$ = 2, sm09 = sm09_1
         if coolant$ = 3, sm09 = sm09_2
         absinc$ = sav_absinc
         pcom_movea
         toolchng = zero
         c_msng$ #Single tool subprogram call
         ptool_sub_s    # <------------------------------------------------tool sub start
         plast
    

    Exit point

    pretract        #End of tool path, toolchange
         phsm_off
         sav_absinc = absinc$
         absinc$ = one
         sav_coolant = coolant$
         ptool_sub_e #<-----------------------  tool sub end
         coolant$ = zero
         pbld, n$, strcantext, scoolant, e$
    
    #      if nextop$ = 1003, #Uncomment this line to leave coolant on until eof unless
    #        [                 #  explicitely turned off through a canned text edit
           if all_cool_off,
             [
             #all coolant off with a single off code here
             if coolant_on, pbld, n$, *sall_cool_off, e$
             coolant_on = zero
             ]
           else,
             [
             local_int = zero
             coolantx = zero
             while local_int < 20,
               [
               coolantx = and(2^local_int, coolant_on)
               local_int = local_int + one
               if coolantx > zero,
                 [
                 coolantx = local_int
                 pbld, n$, scoolantx, e$
                 ]
               coolantx = zero
               ]
             coolant_on = zero
             ]
    #        ]
    
         #cc_pos is reset in the toolchange here
         cc_pos$ = zero
         if convert_rpd$ = one,
           [
           gcode$ = one
           feed = maxfeedpm
           ipr_type = zero
           ]
         else, gcode$ = zero
         #pbld, n$, sccomp, *sm05, psub_end_mny, e$
         pbld, n$, sccomp, psub_end_mny, e$
         pbld, n$, sgabsinc, sgcode, [if gcode$ = 1, sgfeed], *sg28, "Z0", "M19", [if gcode$ = 1, feed], scoolant, e$
         #if lock_codes = one & rot_on_x, pbld, n$, *sunlock, sunlockcomm, e$
         #pbld, n$, *sg28, "X0", "Y0", protretinc, e$
         #if lock_codes = one & rot_on_x & cuttype = 0, pbld, n$, *slock, slockcomm, e$
         if abs(fmtrnd(cabs)) > 360 & nextop$ <> 1003 & not(index),
           [
           if lock_codes = one, pbld, n$, *sunlock, sunlockcomm, e$
           rotretflg = 1
           pbld, n$, `sg28, protretinc, e$
           rotretflg = 0
           if lock_codes = one & cuttype = 0, pbld, n$, *slock, slockcomm, e$
           ]
         absinc$ = sav_absinc
         coolant$ = sav_coolant
    

     

     

    Here are the postblocks called

     

    psub_st_s$       #Header in sub level
         result = nwadrs(stro, sub_prg_no$)
         spaces$ = 0
         sub_ext = sub_prg_no$
         *sub_prg_no$," (", s_progname, *sub_ext, "..SP", ")", e$
         [if scomm_sav <> snull, scomm_str, *scomm_sav, scomm_end], e$     #adding comment to the sub line makes it show up on the control 
         spaces$ = sav_spc
         pbld, n$, sgabsinc, e$
         result = force(gcode$,gcode$)
    
    
    psub_end_s$      #End in sub level
         spaces$ = 0
         pbld, n$, "(", s_progname, *sub_ext, ")", e$
         spaces$ = sav_spc
         n$, "M99", e$
         prv_absinc$ = -1
    
    # --------------------------------------------------------------------------
    # Custom post blocks - Subprograms by tool
    # --------------------------------------------------------------------------
    
    ptool_sub_s  # Start Toolpath Sub  
       if mi1$ = 1,
       [
           pcust_call_s
           spaces$ = 0
           result = workofs$
           counter = sub_offsets - 1
           while counter > 0,
             [
             workofs$ = workofs$ + 1
             pfbld, n$, pwcs, e$
             pfbld, prpt_call_2, e$
             counter = counter - 1
             ]
       workofs$ = result
       !workofs$
       subout$ = 1
       psub_st_s$
       pbld, n$, pfxout, pfyout, e$
       ]
       spaces$ = sav_spc
    
    ptool_sub_e  # End Toolpath Sub
       if mi1$ = 1,
       [
       psub_end_s$
       subout$ = 0
       ]
    
    pdrlcst_sub_s  # Start Custom Drill Sub  
           if mi10$ = 0,
           [
           pcust_call_s
           subout$ = 3
           psub_st_s$
           ]
    
    pdrlcst_sub_e  # End Custom Drill Sub
           if mi10$ = 0,
           [
           psub_end_s$
           if mi1$ = 1, subout$ = 2
           else, subout$ = 0
           ]
    
    prpt_call_2
           sub_prg_call = sub_prg_no$
           pbld, n$, "M98 ", *sub_prg_call, e$
    
    

     

     

     

     

  6. Here's the switch to select the tooltable output format

    # --------------------------------------------------------------------------
    # General Output Settings
    # --------------------------------------------------------------------------
    hel_2100    : no$   #Acramatic 2100 style helical moves, 0=no, 1=yes
    force_dpts  : no$   #Force XY output on all drilling lines including cycle call?
    haas        : 0     #Haas style peck drill and extended offsets, 0=no, 1=yes
    wcstype     : 2     #0 = G92 at start, 1 = G92 at toolchanges, 2 = G54, 3 = Off
    force_wcs   : yes$  #Force WCS output at every toolchange?
    tool_table  : 1     #Tool table, 0=no, 1=yes, 2=Predator VCNC, 3=MetaCut View
    

     

     

     

    Here's the logic that triggers the output

     

    # --------------------------------------------------------------------------
    # Tooltable Output
    # --------------------------------------------------------------------------
    pwrtt$      # Write tool table, scans entire file, null tools are negative
              if rotaxis$ > 0 | rotary_type$ > 0 | mill5$ <> 0,
                [
                sav_rot_on_x = rot_on_x
                output_z = no$
                ]
              if vmc = 0 & tlplnno$ <> 2, sav_rot_on_x = rot_on_x
              if vmc = 1 & tlplnno$ > 1, sav_rot_on_x = rot_on_x
              #sav_rot_on_x = rot_on_x    #Uncomment this line to output rotary axis value even when it's not used           
              t$ = wbuf(4,wc4)        #Buffers out tool number values
              if tool_table = 1, ptooltable
              if tool_table = 2, ppredtool      # <----------------Predator tooltable
              if tool_table = 3, pmetatool     # <----------------Metacut tooltable
              if t$ >= zero, tcnt = tcnt + one
              ptravel
              pwritbuf5
              if use_g10, pwritbuf9
    
    
    
    

  7. After giving your 2nd post another read, I'm inclined to think that your oversized bore problem is more likely an insert problem.

    Sometimes what looks like normal wear on an insert is causing a "built up edge" causing an oversize cut,

    or a rake angle change causing a change in the amount of and / or direction of deflection.

     

    It's a more likely scenario if this is across the board as you say.

     

    I'd rule out the chip problem in one machine first by cleaning and filling all the tool pockets.

     

    Then throughout a full shift, have the operator monitor the bore sizes noting the degee of wear on the insert, finish achieved on the part, and the # of cuts the insert has made.

    Give him a pen, pad of paper, and a profilometer to record the results.

    M00 a tool check point after the bore is cut and try to catch the oversize bore right after it's been cut, but before the tool change.

    Check for runout, look for that chip and pull the insert. Mark the edge that cut big and set it aside.

     

    A pattern is bound to appear.

     

    Assuming feeds and speeds are dialed in or close, more than likely, a change in insert geometry, grade, or frequency of insert change is all you need to change to solve your problem.

     

    JM2C

  8. Maybe one on the simplest solutions to keep chips out of the spindle:

     

    Keep all of your tool pockets clean and full!

    The same goes for all moving parts within your tool changer.

    Arm, door, etc.

     

    Edit:

    Usually the culprit is atomized coolant condensing in empty tool pots.

    This dries and thickens and will let a stray chip stick in the pot.

    Eventually the chip will get turned around and the dried coolant will help it stick to a tool holder,

    That's usually how they get in the spindle taper.

     

    Chips can't easliy get into an occupied tool pot, and neither can the coolant mist.

     

    Been working for me for years.

     

    As for test cuts, I'll use one for a first piece and at tool or insert changes/indexes.

  9. First we need to define an error message. Do a search through your post for "error" and find a section that looks like this:

     

    
    # --------------------------------------------------------------------------
    # Error messages
    # --------------------------------------------------------------------------
    saxiswarn      : "WARNING - POST ROTARY AXIS ASSIGNMENT ('rot_on_x') OVERWRITTEN BY OPERATION"
    saxisoff       : "ERROR - POST ROTARY AXIS ASSIGNMENT ('rot_on_x') IS DISABLED"
    saxiserror     : "ERROR - INVALID ROTARY AXIS ASSIGNMENT ('rot_on_x') FOR CURRENT OPERATION"
    sindxerror     : "WARNING - INDEX ANGLE DOES NOT MATCH POST SETTING ('ctable')"
    stlorgerr      : "ERROR - TOOL ORIGIN DOES NOT MATCH CENTER OF ROTATION IN POLAR MILLING"
    shomeserror    : "ERROR - G92 WORK OFFSET ('wcstype') DOES NOT SUPPORT TRANSFORM SUBPROGRAM"
    ssubprgerror   : "ERROR - TOOL SUBS (REPS) ('mi1) DO NOT SUPPORT TRANSFORM SUBPROGRAMS - SET mi1$ TO ZERO AND REPOST"
    scdsubprgerror : "ERROR - CUSTOM DRILL SUBS ('mi10) DO NOT SUPPORT TRANSFORM SUBPROGRAMS - SET mi10$ TO ZERO AND REPOST"
    sprognoerror   : "ERROR - PROGRAM NUMBER CANNOT BE ZERO"
    sprogfmterror  : "ERROR - NCI NAME MUST BE FORMATTED AS 5 SPACE DELIMITED FIELDS CONTAINING 'REV' AND 'OP' Example:'CC33042 REV 2 OP 1'"
    sprgnerror     : "ERROR - SUBPROGRAM NUMBER MATCHES THE MAIN PROGRAM NUMBER"
    scompwarn      : "WARNING - CUTTER COMP APPLIED ON ARC MOVE"
    smiscerror     : "WARNING - MISC VALUES SET TO POST DEFAULT FOR CURRENT OPERATION"
    srotaxerror    : "ERROR - MORE THAN 1 ROTARY AXIS DETECTED IN SELECTED AXIS COMBINATION - OUTPUT MAY BE INVALID"
    swriteopserror : "ERROR - WRITE NC OPERATION INFORMATION MUST BE ENABLED IN CONTROL DEFINITION - SET AND REPOST"
    sxaxiswarn     : "ERROR - SELECT MACHINE ACHIEVABLE TOOLPLANE WITH X-AXIS ALONG MACHINE X - SET AND REPOST"
    syaxiswarn     : "ERROR - SELECT MACHINE ACHIEVABLE TOOLPLANE WITH Y-AXIS ALONG MACHINE Y - SET AND REPOST"
    szaxiswarn     : "ERROR - SELECT MACHINE ACHIEVABLE TOOLPLANE WITH Y-AXIS ALONG MACHINE Y - SET AND REPOST"
    srotlimwarn    : "WARNING - ROTARY LIMITS EXCEEDED (CANCEL TO EXIT)"
    saxissuberror1 : "ERROR - AXIS SUBSTITUTION IS SETUP FOR HMC WITH -Y ZERO POSITION (PLANES 2,5,3,6)"
    saxissuberror2 : "ERROR - AXIS SUBSTITUTION IS SETUP FOR VMC WITH +Z ZERO POSITION (PLANES 1,2)"
    swcserror      : "ERROR - WORK OFFSET NUMBER OUT OF RANGE"
    

    Let's add a new one for this example.

    stool_length_error      : "ERROR - TOOL LENGTH OFFSET NUMBER IS ZERO"
    

     

    Now look for the G43 output lines in your post. Usually there are two lines. One will be in ptlchg_com, and one in ptlchg0$.

     

    Here we need to test for the condition to warn against, and trigger a warning message.

     

     

    pbld, n$, "G43", *tlngno$, pfzout, scoolant, pfspindleout, next_tool$, e$
    
    if tlngno$ = 0,
                 [
                 result = mprint(stool_length_error)
                 exitpost$
                 ]
    

     

    HTH :)

  10. I haven't seen this problem in particular, but I have seen "string select table out of range" errors generated in a stock post as well as the mpmaster post.

     

    The culprit was the video driver. Who would have guessed? Windows update burned me. Now I keep it turned off.

     

    rocheey1,

    If you're using a Quadro card and have the latest driver, you might want to roll back to the version recommended on the Solidworks site.

     

    I know it doesn't seem related, but you'd be suprised.

     

    HTH

     

    Btw - What are you running for a video card and what video driver version?

     

     

  11. Neurosis -

     

    Forgive my ignorance, I had considered the "X-coolant" issue a problem with the tool library, (can't save coolant settings to the tool). It is indeed a coolant issue. The root of the problem is the tool library though.

  12. X style coolant which have been broken and then fixed already in past releases, are again broken

     

    What's not working with X-style coolant? I'm using it just fine.

    I have it set in my op defaults as a matter of fact, so I don't have to set my flood and thru coolant for every tool.

     

    Btw - We(Beta Sites) are aware of the Beta issues and can't discuss them in the main forum without breaking the Beta agreement, so don't be suprised when you don't get a straight answer.

    We're still waiting for Webby to put up the Beta forum, so it's very hard for us to get together on issues right now.

Join us!

eMastercam - your online source for all things Mastercam.

Together, we are the strongest Mastercam community on the web with over 56,000 members, and our online store offers a wide selection of training materials for all applications and skill levels.

Follow us

×
×
  • Create New...