Preparing for more CMM's

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Preparing for more CMM's

    We are about to add several new CMM's to our shop, and possibly convert an old one to PC-DMIS. I have been learning on the fly for the past year, so I'm constantly adjusting the generic code I have at the beginning and end of each program to try and foolproof them for any future changes.

    I have a script for the beginning of a program and one for the end. The beginning one isn't used yet, but just in case... I have generic print options. I currently have some basic beginning comments asking for operator #, workorder #, and piece serial #. Can anyone offer some tips/tricks that I should add in now to make these programs as flexible as possible? For example, I think I am going to use my beginning script to find the machine # the part is being run on, and then pass it back to PC-DMIS for use in the report.

    I have a programmer working on a VB front end for our operators that will copy a program from a network folder of master, read-only programs, run it, and then delete it when it is done. (Thanks to you guys for clueing me in on this.)

    Anything else that I should set up as far as infrastructure before I get too far along? Anything that gave you guys headaches down the road with multiple CMM's?

    Thanks.

  • #2
    Perhaps, common probe tip naming conventions so each machine has the same tips, same stations, with the same names so programs can be passed back and forth.

    Perhaps, each machine has it's own folder on the net to pull the program from so alignments are set for each (don't need manual alignment each time).

    Perhaps, a common "master" artifact to track machine performance and machine to machine correlation.

    Couple random thoughts on your deal,

    TK
    sigpicHave a homebrew

    Comment


    • #3
      Thanks for the thoughts TK.

      I'm running a TP200 and I don't have a probe changer rack, so I will have to remember to set the stations up the same if we start putting racks on the CMM. Is there anything I can do to prep my programs in case I do get a rack?

      My current machine NEVER goes off of machine alignment at the start of the program, and I never manually align in my programs unless I have to. Instead, we have 3 squares located on the plate. Not square squares, mind you, but L-shaped squares to corner parts in. When the machine needs to be homed, I also run 3 programs that measure the position of these squares and save them as an external alignment.

      Each part program recalls 1 of these 3 external alignments. Hopefully, I will just have to copy/paste these 3 programs and relearn the hits on the squares/plate to the new machine coordinates. Then I just have to worry about differing clearances between CMM's.

      The master artifact is not something I was thinking of, but I do think it is a very good idea. There have been several threads about them recently, I think I'll take a gander at them.

      Comment


      • #4
        Originally posted by Chally72 View Post
        Thanks for the thoughts TK.

        I'm running a TP200 and I don't have a probe changer rack, so I will have to remember to set the stations up the same if we start putting racks on the CMM. Is there anything I can do to prep my programs in case I do get a rack?

        My current machine NEVER goes off of machine alignment at the start of the program, and I never manually align in my programs unless I have to. Instead, we have 3 squares located on the plate. Not square squares, mind you, but L-shaped squares to corner parts in. When the machine needs to be homed, I also run 3 programs that measure the position of these squares and save them as an external alignment.

        Each part program recalls 1 of these 3 external alignments. Hopefully, I will just have to copy/paste these 3 programs and relearn the hits on the squares/plate to the new machine coordinates. Then I just have to worry about differing clearances between CMM's.

        The master artifact is not something I was thinking of, but I do think it is a very good idea. There have been several threads about them recently, I think I'll take a gander at them.
        Sounds like you got a great 'base' for your expanded operations. Only issue I see with copying those "L" alignmenets from machine to machine is that even though you are setting the XY, you will need the Z since the machine will probably be (have) different heights/strokes/homes/travels in the Z from the master machine/alignment you are using. Maybe your progs already do this, but I thought I would point it out.

        PROBES/RACKS/ETC. The probe files MUST BE INDIVIDUAL for each machine, they can all have the same NAMES, but you can not store a single probe file on the network and allow all the machines to use it. The probe files need to be calibrated for the specific machine they are on. Just pointing it out. I see no "safety" issue with storing those probe files on the individual machines, perhaps a backup on the network that is NOT USED but is only there to supply the "master" file to each machine, thus if you DO get racks, YOU make the probes on YOUR machine, copy the files to the net, copy them from the net to each machine, then the same probe file is on each machine for calibration and use. Then, for racks, simply ensure that the build in each slot is the same from machine to machine.
        sigpic
        Originally posted by AndersI
        I've got one from September 2006 (bug ticket) which has finally been fixed in 2013.

        Comment


        • #5
          i took over our floor cmm's under a year ago and noticed the system was screwed
          1. all tool racks had probes all in diffrent stations
          2. we have 3 cmm one's and there all diffrent years so the height's and width's are diffrent so 1 program won't work for the other without changing the first alignment something you don't want an operator to do
          3.also all 3 have diffrent fixture's so not only do you have to change your first alignment
          you have to redo the fixturing
          4. none were on the network (problem fixed finally)

          your best thing is uniformity

          Comment


          • #6
            Originally posted by Chally72 View Post

            1) I have a script for the beginning of a program and one for the end. The beginning one isn't used yet, but just in case...

            2) I have a programmer working on a VB front end for our operators that will copy a program from a network folder of master, read-only programs, run it, and then delete it when it is done.

            Anything else that I should set up as far as infrastructure before I get too far along? Anything that gave you guys headaches down the road with multiple CMM's?

            Thanks.
            1) Good thinking. We have a program template as well and as time has gone by, here is what I WISH we had the foresight to include in the template:

            - Anyplace you feel it is necessary to put a utility-type of script call, also include a pcdmis subroutine call as the next command. As you point out, it can be empty to start. You WILL find a use for it.

            - For startup script/subs, I wish we had them in two locations. First location would be the first command in the program, and the second location would be the last command of the template code. So this second script and sub would be called after all the operator inputs are complete and startup variables are defined, immediately before part-specific code starts to execute.

            To correct this shortcoming in our template we would have to modify about 2000 programs, so for now we are living with it. The programs are stored in a configuration management system and have to be checked out in order to update them, so we can't do a mass update with a VB script.

            2) Rather than delete the program after execution, we append date, time, work order and serial number to the program name, copy it to a network drive that is designated for pc-dmis results and set the copy to read only. Then the local copy is deleted. The benefits of this have been huge for us.

            As far as the location for probe storage, I'd recommend on the local computer. All you need is for an operator to set the probe search path to the probes for a different machine - we've been there, it's not pretty.

            Comment


            • #7
              +1 Thanks for the input, DJAMS.

              A possibly bonehead question: What do you use subroutines for? I have never used subroutines and just got into using scripts a few months ago.

              Scripts, along with recall alignment programs, and now probe files, will remain on the local hard drive of each machine and will be specific to that machine.

              Great idea with saving the programs. I will tell my programmer to incorporate that into our front end instead of deleting the temp.

              Here is what I actually have for a basic part template right now. I am going to add two more script files, so I have one both pre and post generic commands at the beginning and end of the program. I added the labels just Monday, so I am still very much tinkering with it. And then it's on to manually modifying 350 programs to use it....

              Code:
              PART NAME  : _EDITPROGRAMNAME_
              REV NUMBER : 
              SER NUMBER : 
              STATS COUNT : 1
               
              STARTUP    =ALIGNMENT/START,RECALL:,LIST=YES
                          ALIGNMENT/END
              BEGINFILE  =LABEL/
              WORKORDER  =COMMENT/INPUT,NO,'Enter the workorder #,
                                          ,using a period instead of a slash.'
              SERIALNUMBER =COMMENT/INPUT,NO,'Enter the Serial # of the piece being inspected.
                                            ,If there is no serial number, leave this blank.'
              CLOCKNUMBER =COMMENT/INPUT,NO,'Enter your clock #.'
                          ASSIGN/PART=STR(GETTEXT(191,1,{FILEHEDR}))
                          ASSIGN/DATE=SYSTEMDATE ("MMddyy")
                          ASSIGN/TIME=SYSTEMTIME ("HHmm")
                          ASSIGN/FILESTORE="C:\PROGRAM FILES\WAI\PC-DMIS USERFILES\PROGRAM FILES\PROGRAM REPORTS\ "
                          ASSIGN/FILENAME=PART + "_" + WORKORDER.INPUT + "_" + DATE + "_" + TIME + ".PDF"
                          ASSIGN/VAL_FILE=FILESTORE + FILENAME
                          MODE/MANUAL
                          CHECK/0.3,1
                          FORMAT/TEXT,OPTIONS, ,HEADINGS,SYMBOLS, ;MEAS,NOM,TOL,DEV,OUTTOL, , 
                          OPTIONPROBE/MAXFORCE=0.36,LOWFORCE=0.06,UPPERFORCE=0.18,TRIGGERFORCE=0.06,
                            PROBEACCURACY=0.1,POSACCURACY=2,#RETURNDATA=7,
                            RETURNSPEED=1,SCANPNTDENSITY=4,
                            SCANACCELERATION=10,SCANOFFSETFORCE=0.12,
                            PROBINGMODE=DFL,MANFINEPROBING=NO
              CS1        =SCRIPT/FILENAME= C:\PROGRAM FILES\WAI\PC-DMIS USERFILES\SCRIPTS\BEGINNING_00.BAS
                          FUNCTION/Main,SHOW=YES,,
                          STARTSCRIPT/
                          ENDSCRIPT/
              $$ NO,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                   ,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
                   , 
                   ,Insert Program Between These Separator Comments
                   , 
                   ,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
                   ,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
              $$ NO,**********************************************************************************
                   , 
                   ,Program In-Process __________________________
                   , 
                   ,**********************************************************************************
              BEGINPROGRAM=LABEL/
                          LOADPROBE/TP200-2MMX20
                          TIP/T1A0B0, SHANKIJK=0, 0, 1, ANGLE=0
                          RECALL/ALIGNMENT,EXTERNAL,a99,CENTER-SQUARE-ALIGNMENT:a99
                          MODE/DCC
                          MOVESPEED/ 20
                          CLEARP/ZPLUS,10,ZPLUS,0,ON
                          PREHIT/0.15
                          RETRACT/0.15
                          COMMENT/OPER,NO,EDIT PART PLACEMENT INFO
                                         , 
                                         ,WARNING:
                                         , 
                                         ,MACHINE WILL MOVE AUTOMATICALLY
                                         ,WHEN OK IS PRESSED
              $$ NO,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                   ,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                   , 
                   ,Insert Program Between These Separator Comments
                   , 
                   ,::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
                   ,:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
              ENDPROGRAM =LABEL/
              CS2        =SCRIPT/FILENAME= C:\PROGRAM FILES\WAI\PC-DMIS USERFILES\SCRIPTS\OUTTOL_00.BAS
                          FUNCTION/Main,SHOW=YES,,
                          STARTSCRIPT/
                          ENDSCRIPT/
              SAVE_REPORT =COMMENT/YESNO,NO,Do you want to save this report?
                                           ,This will save a PDF of the report
                                           ,on the computer.
              PRINT_REPORT =COMMENT/YESNO,NO,Do you want to print a report?
                          IF/SAVE_REPORT.INPUT=="YES"
                          IF/PRINT_REPORT.INPUT=="YES"
                          PRINT/REPORT,EXEC MODE=END,$
                            TO_FILE=ON,APPEND=VAL_FILE,$
                            TO_PRINTER=ON,$
                            TO_DMIS_REPORT=OFF,FILE_OPTION=INDEX,FILENAME=,$
                            REPORT_THEORETICALS=NONE,REPORT_FEATURE_WITH_DIMENSIONS=NO,$
                            PREVIOUS_RUNS=DELETE_INSTANCES
                          END_IF/
                          IF/PRINT_REPORT.INPUT=="NO"
                          PRINT/REPORT,EXEC MODE=END,$
                            TO_FILE=ON,APPEND=VAL_FILE,$
                            TO_PRINTER=OFF,$
                            TO_DMIS_REPORT=OFF,FILE_OPTION=INDEX,FILENAME=,$
                            REPORT_THEORETICALS=NONE,REPORT_FEATURE_WITH_DIMENSIONS=NO,$
                            PREVIOUS_RUNS=DELETE_INSTANCES
                          END_IF/
                          END_IF/
                          IF/SAVE_REPORT.INPUT=="NO"
                          IF/PRINT_REPORT.INPUT=="YES"
                          PRINT/REPORT,EXEC MODE=END,$
                            TO_FILE=OFF,AUTO=1,$
                            TO_PRINTER=ON,$
                            TO_DMIS_REPORT=OFF,FILE_OPTION=INDEX,FILENAME=,$
                            REPORT_THEORETICALS=NONE,REPORT_FEATURE_WITH_DIMENSIONS=NO,$
                            PREVIOUS_RUNS=DELETE_INSTANCES
                          END_IF/
                          END_IF/
              ENDFILE    =LABEL/

              Comment


              • #8
                Chally72, if it ever fits into your plans, Hexagon Applications has developed a number of scripts interfaces and routines for this kind of operation. I know it's not free, and I know it's fun to do it yourself, so carry on, but in case it would ever help you we offer user interfaces, barcode interfaces, PLC interfaces, Notification Interfaces, Environment changers, Customized Report outputs and all sorts of stuff. Again, only so you know and if it helps, otherwise I love to see the kind of things people do with PC-DMIS, impressive by it's creativity... Enjoy.
                --Brian

                "The best way to predict the future is invent it. This includes your very next action."

                Support: Hexagon Metrology Support Center
                Training: Hexagon Metrology University

                Comment


                • #9
                  Thanks, Brian.

                  Could you explain a couple of those to me?

                  PLC interface? Notification interface?

                  I haven't been exposed to much as far as diverse interfaces. I tried out STI and we are coding something similar to that for our own purposes. I have read about totally automated cells with robots loading pallets for inspection, and the CMM modifying G code to adjust the CNC program. As far as in between this and where I am, I have to use my imagination!

                  Comment


                  • #10
                    One thing I wihsed I had done years ago when I started here was to set all programs to a tooling ball on the Rayco plate then save that as an external alignal to be recalled at the beginning of each program. Since so many of the old programs were written to this and that I just picked up where they left off and run to the unmarked manual alignments.

                    I now have one progam on the network that will run on any of the four of PFx we have with no problems. I raised/lowered the granite for height and modified the mounting holes on the Rayco plates so the plates are all within a couple thou of each other relative the individual machine's home position.
                    Xcel & MicroVal Pfx & Global 37mr4 thru 2012mr1sp3
                    Contura Calypso 5.4

                    Lord, keep Your arm around my shoulder and Your hand over my mouth. Amen.

                    Comment


                    • #11
                      That is exactly what I've done with the 3 square alignments. This eliminates the variation from different home locations, travel distances, etc. They are local to the part, not the machine.

                      I learned to program on a manual machine on my own and went to class a year into it, so I do not carry over many of the things that were taught in class. Marked manual alignments before going DCC, for example. I think they are a bad idea and just a mess to use. Using external alignments I can program cleanly with NO manual alignment, marked or unmarked.

                      Comment


                      • #12
                        Originally posted by Chally72 View Post
                        What do you use subroutines for?
                        What subroutines can be used for is limited only by the programmer's imagination, so to keep it somewhat brief, I'll describe how I feel they are best used in the template scenario.

                        Subroutines execute pc-dmis commands. You can put 'global' type programming commands in the subroutine instead of in the template. This way if you determine later that you need to change a parameter, you can update ALL of your programs by editing the subroutine. One candidate I see in your template is the OPTIONPROBE command. Maybe at some point down the road you decide it would've been better to have POSACCURACY=1 instead of 2. If this command were in a subroutine, you could update all your programs in a minute or so. There are a bunch of examples along these lines. Just be sure to pass all of your template-defined variables to the subroutine so it will be able to make decisions based on them. For instance, you may eventually want to set the OPTIONPROBE parameters differently depending on which machine is executing the program.

                        Originally posted by Chally72 View Post
                        Scripts, along with recall alignment programs, and now probe files, will remain on the local hard drive of each machine and will be specific to that machine.
                        We run our scripts and subroutines from a network drive, for a couple of reasons - 1) This way we know that all the machines are using the same version of the script, 2) Like most programmers, we are inherently lazy and don't want to walk all around the shop to all the machines to copy the new version onto the computers. Of course this only works if the scripts are machine independant.

                        I am impressed by the thought you are putting into this - your boss should give you a raise...

                        Comment


                        • #13
                          I wish you were my boss!

                          I'm a 19 year old kid, no degree, so they get away with paying me peanuts. Less than the guys I've trained, actually.

                          I wish I knew about the functionality of subroutines earlier. Thanks very much for explaining. That is definitely going into the template as well.

                          Comment


                          • #14
                            Originally posted by DJAMS View Post
                            I am impressed by the thought you are putting into this - your boss should give you a raise...
                            He's gonna need shades!

                            TK
                            sigpicHave a homebrew

                            Comment


                            • #15
                              I am having trouble with using subroutines. My assumption of what a subroutine does is it calls up a part program and runs it, so you can use this part program as a universal template.

                              I do not understand what I can do with the arguments the subroutine uses, or how I can get it to save outside of that program in order to be used in other programs. The code sample is not very helpful, and there is a big disconnect between the explanation of the syntax and the sample in the help file. (Disconnect being, it started explaining subroutines, and then took a giant leap across a canyon in the learning curve! )

                              Can anyone fill in the gaps?

                              Comment

                              Related Topics

                              Collapse

                              Working...
                              X