Multiple programs lights out question

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

  • Multiple programs lights out question

    So here is the situation and what I'm being tasked with.

    My boss wants to convince our company to buy a larger CMM. Our current largest CMM is a Global 12.30.10 and he wants one literally double the size of it (at least in X and Y but possibly Z). The owner is open to it but we have to justify use of it. We have a few large parts that we run using equate alignments but not too many. The larger CMM could help us get contracts for more large and even larger parts but being a smart company, we aren't banking on that. The company recently purchased 4 (2 currently installed and running) pallet changing CNC machines for the purpose of doing lights out machining. When those get fully online and the programmers and machinists are up to speed on them, we will be slammed with parts in FAI. With a CMM of the size we want, there will be a ton of table space to setup multiple parts (when we don't have large parts) and do lights out inspection but they would likely not be the same part.

    So here is the idea/nitty gritty question... Is there a way to have the CMM run one part, save the program, close the program, open the next, run it, and so on or is there another way to get the same result? Just thought of this... can I create one program that recalls, runs and saves the programs I tell it to while still setting the read points first?

    The intent would be to analyze the programs in the morning, save the reports, ect. I would assume that I would have to either setup external alignments or do a read point alignment and set the read points in all the programs to be run before starting the run sequence.

    I mainly program with read point alignments already and setting up square to the CMM axis wouldn't be a limiting factor. Doing one of the 2 ideas above I would set the read points then F3 the comment that stops the program for setting the read point so when execution starts, it won't be stopped to set the read point again.

    The short version is, how can I get DMIS to open, execute, save, and close multiple programs automatically?
    Last edited by A-machine-insp; 08-14-2019, 08:28 AM.
    "Do what I want you to do, not what I tell you to do."

    -Me

  • #2
    Look into threads on here about "Subroutines".

    I run different parts from a main program that recalls subroutines of the individual part programs. I can show you an example of mine when my machines free for a moment

    Comment


    • A-machine-insp
      A-machine-insp commented
      Editing a comment
      Please do. That would be much appreciated.

  • #3
    By using a (customized) front-end that controls PC-DMIS.

    Example:
    Pallet/part is loaded on to the CMM
    Fetch the partnumber/programname and feed it to the front-end
    Front-end controls PC-DMIS to load and execute your part program
    Make sure PC-DMIS updates your front-end with status continuosly (still running, probe errors, etc)
    Have your front-end act on the statuses accordingly
    After execution, front-end tells PC-DMIS to save it and quit the program
    Front-end tells your pallet system to fetch the pallet/part and load another
    Rinse and repeat

    I don't know how versatile the readymade apps are for customization (Notification center, PC-DMIS starter etc) so you might have to code your own.

    I have coded PC-DMIS automation in PC-DMIS internal script engine, Borland Delphi, VBS, VBA and most recently .NET.
    Last edited by vpt.se; 08-14-2019, 09:01 AM.
    PC-DMIS CAD++ 2o19 R1 SP4

    Comment


    • A-machine-insp
      A-machine-insp commented
      Editing a comment
      Yes.

      Had to make a response longer then 10 characters...

    • vpt.se
      vpt.se commented
      Editing a comment
      Set them up any way you want, you can choose to do it with fixed positions or place them anywhere you want.
      Have a partprogram that either goes by the fixed position (same partno in the same place every time) or variable positions.
      If fixed position, each of the partprograms should have the readpoint alignment fixed (already done in the partprogram) which means it should be able to run in DCC as soon as you start each particular partprogram.
      If variable position, you need a partprogram that asks the operator to place the probe in a certain place for each part - then create a readpoint alignment per part.
      This alignment should be exported and then imported by the partprogram for the particular part/s.

      In theory, this doesn't sound too bad.

    • A-machine-insp
      A-machine-insp commented
      Editing a comment
      It actually sounds fairly simple. I think the subroutine idea will fit our situation best. In that case I can set the external alignments using readpoints then all I have to do is go into the programs that will be ran in the subroutine program and set the proper external alignments to their respective parts. Anything I am missing there?

      It SOUNDS simple, now all I have to do is make it work. This is programming I haven't done before so it will be trial and error but I'm going to get it ironed out using simple 1x2x3 block programs then adapt it to actual parts. It'll be a challenge but a challenge is something I've been lacking at work lately but I love learning new things especially when others don't want to learn (old dog syndrome) or don't have the time (boss). When I get it nailed down, I'll be the only one here that knows how to do it. It'll be a blessing and a curse at the same time but, in the end, it's job security too.

  • #4
    Example of subroutines and parametric program:

    Code:
    $$ NO,
    
    
                FORM SECTION
    
    THIS FIRST FORM IS FOR THE OPERATOR TO SELECT THE PART TO RUN
    
                RECALL/VIEWSET,BLANKVIEW
    $$ NO,
                PART SELECTION FORM
                ASSIGN/PART_SELECT=0
    PART_SELECT_FORM=FORM/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\PART_SELECT_FORM.FORM
                PARAM/COMBOBOX1.VALUE=PART_SELECT
                PARAM/=
                ENDFORM/
    
    IF/THEN TO CATCH WHICH PART THE OPERATOR SELECTED
    
    $$ NO,
                53015 FORM
                IF/PART_SELECT=="1"
    CUSTOMER_BOSCH_SCRIPT  =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\BOSCH_CUSTOMER_REV_SCRIPT.BAS
                  FUNCTION/Main,SHOW=YES,,
                  STARTSCRIPT/
                  ENDSCRIPT/
                  ASSIGN/PART_LOADED_CHECK=0
                  ASSIGN/CALIBRATION_CHECK=0
                  ASSIGN/CAVITY_SELECT=0
                  ASSIGN/FP_AUD_SELECT=0
    53015_FORM   =FORM/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\53015FP_FORM001.FORM
                  PARAM/CHECKBUTTON1.VALUE=PART_LOADED_CHECK
                  PARAM/CHECKBUTTON2.VALUE=CALIBRATION_CHECK
                  PARAM/COMBOBOX1.VALUE=CAVITY_SELECT
                  PARAM/COMBOBOX2.VALUE=FP_AUD_SELECT
                  PARAM/=
                  ENDFORM/
                END_IF/
    $$ NO,
                70009/10/12 FORM
                IF/PART_SELECT=="2" OR PART_SELECT=="3" OR PART_SELECT=="4"
    CUSTOMER_NSK_SCRIPT  =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\NSK_CUSTOMER_REV_SCRIPT.BAS
                  FUNCTION/Main,SHOW=YES,,
                  STARTSCRIPT/
                  ENDSCRIPT/
                  ASSIGN/PART_LOADED_CHECK=0
                  ASSIGN/CALIBRATION_CHECK=0
                  ASSIGN/CAVITY_SELECT=0
                  ASSIGN/FP_AUD_SELECT=0
    70009_10_12_FORM  =FORM/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\70009FP_FORM001.FORM
                  PARAM/CHECKBUTTON1.VALUE=PART_LOADED_CHECK
                  PARAM/CHECKBUTTON2.VALUE=CALIBRATION_CHECK
                  PARAM/COMBOBOX1.VALUE=CAVITY_SELECT
                  PARAM/COMBOBOX2.VALUE=FP_AUD_SELECT
                  PARAM/=
                  ENDFORM/
                END_IF/
    $$ NO,
                34013-16 FORM
                IF/PART_SELECT=="5" OR PART_SELECT=="6" OR PART_SELECT=="7" OR PART_SELECT=="8"
    CUSTOMER_NEXTEER_SCRIPT  =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\NEXTEER_CUSTOMER_REV_SCRIPT.BAS
                  FUNCTION/Main,SHOW=YES,,
                  STARTSCRIPT/
                  ENDSCRIPT/
                  ASSIGN/PART_LOADED_CHECK=0
                  ASSIGN/CALIBRATION_CHECK=0
                  ASSIGN/CAVITY_SELECT=0
                  ASSIGN/FP_AUD_SELECT=0
    34013_16_FORM  =FORM/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\34013-16FP_FORM001.FORM
                  PARAM/CHECKBUTTON1.VALUE=PART_LOADED_CHECK
                  PARAM/CHECKBUTTON2.VALUE=CALIBRATION_CHECK
                  PARAM/COMBOBOX1.VALUE=CAVITY_SELECT
                  PARAM/COMBOBOX2.VALUE=FP_AUD_SELECT
                  PARAM/=
                  ENDFORM/
                END_IF/
    $$ NO,
    
                START-UP SECTION
    
    PROBE START UP STUFF
    
    
    BEGIN_LABEL=LABEL/
                RECALL/ALIGNMENT,INTERNAL,STARTUP
                MODE/DCC
                CHECK/3,3
                PREHIT/2.54
                RETRACT/2.54
                MOVESPEED/ 150
                TOUCHSPEED/ 4
                FLY/ON
                FORMAT/TEXT,OPTIONS, ,HEADINGS,SYMBOLS, ;MEAS,NOM,TOL,DEV,OUTTOL, , 
                LOADPROBE/P_2X50
                TIP/T1A0B0, SHANKIJK=0, 0, 1, ANGLE=0
                WORKPLANE/ZPLUS
    $$ NO,
    
                CALIBRATION SECTION
    
    (IF THE CALIBRATION CHECK BOX IS CHECKED)
    
                IF/CALIBRATION_CHECK
                  ASSIGN/CALIBRATION_CHECK=0
                  ASSIGN/PROBE_CLEAN_CHECK=0
                  ASSIGN/PROBE_SELECT=0
                  ASSIGN/TYPE_CALIBRATION=0
    CALIBRATION_FORM  =FORM/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CALIBRATION_P_2X50_FORM.FORM
                  PARAM/CHECKBUTTON1.VALUE=PROBE_SELECT
                  PARAM/CHECKBUTTON2.VALUE=PROBE_CLEAN_CHECK
                  PARAM/COMBOBOX1.VALUE=TYPE_CALIBRATION
                  PARAM/=
                  ENDFORM/
                  IF/PROBE_CLEAN_CHECK
                    IF/PROBE_SELECT
                      IF/TYPE_CALIBRATION=="1"
                        MOVE/POINT,NORMAL,<50,1150,-200>
                        AUTOCALIBRATE/PROBE, PARAMETER_SET=QUICKCAL, QUALTOOL_MOVED=NO, 
                                      SHOW_SUMMARY=NO, OVERWRITE_RESULTSFILE=YES
                        MOVE/POINT,NORMAL,<50,1150,-200>
                        MOVE/POINT,NORMAL,<50,50,-200>
                      END_IF/
                      IF/TYPE_CALIBRATION=="2"
                        MOVE/POINT,NORMAL,<50,1150,-200>
                        TIP/T1A90B180, SHANKIJK=0, -1, 0, ANGLE=180
                        AUTOCALIBRATE/PROBE, PARAMETER_SET=53015FPCAL, QUALTOOL_MOVED=NO, 
                                      SHOW_SUMMARY=NO, OVERWRITE_RESULTSFILE=YES
                        MOVE/POINT,NORMAL,<50,1410,-50>
                        MOVE/ALL,<50,50,-200>,TIP=T1A0B0,SHANKIJK=0,0,1,ANGLE=0
                      END_IF/
                      IF/TYPE_CALIBRATION=="3"
                        MOVE/POINT,NORMAL,<50,1150,-200>
                        TIP/T1A90B180, SHANKIJK=0, -1, 0, ANGLE=180
                        AUTOCALIBRATE/PROBE, PARAMETER_SET=70009FPCAL, QUALTOOL_MOVED=NO, 
                                      SHOW_SUMMARY=NO, OVERWRITE_RESULTSFILE=YES
                        MOVE/POINT,NORMAL,<50,1410,-50>
                        MOVE/ALL,<50,50,-200>,TIP=T1A0B0,SHANKIJK=0,0,1,ANGLE=0
                      END_IF/
                      IF/TYPE_CALIBRATION=="4"
                        MOVE/POINT,NORMAL,<50,1150,-200>
                        TIP/T1A90B180, SHANKIJK=0, -1, 0, ANGLE=180
                        AUTOCALIBRATE/PROBE, PARAMETER_SET=34013-16cal, QUALTOOL_MOVED=NO, 
                                      SHOW_SUMMARY=NO, OVERWRITE_RESULTSFILE=YES
                        MOVE/POINT,NORMAL,<50,1410,-50>
                        MOVE/ALL,<50,50,-200>,TIP=T1A0B0,SHANKIJK=0,0,1,ANGLE=0
                      END_IF/
                    END_IF/
                  END_IF/
                END_IF/
    $$ NO,
                PART LOADED CHECK
                IF/PART_LOADED_CHECK=="0"
                  COMMENT/OPER,NO,FULL SCREEN=NO,AUTO-CONTINUE=NO,
                  PART LOADED CHECKBOX NOT CHECKED
    
                  --> HIT OK AND RESTART THE PROGRAM
                  GOTO/END_MEAS_LABEL
                END_IF/

    Comment


    • #5
      Code:
      $$ NO,
      
      
                  ALIGNMENT SECTION
      
      I HAVE A SET OF 4 MAG PLATES (CALLED CAVITIES) I PUT IN THE COORDINATES FOR THE READPOINTS HERE
      
      
      $$ NO,
                  53015 ALIGNMENT CODE
                  IF/PART_SELECT=="1"
        $$ NO,
                    CAVITY #1 ALIGNMENT
                    IF/CAVITY_SELECT=="1" OR CAVITY_SELECT=="5"
      CAV_1_53015    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_1_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=816
                      ASSIGN/CAV_ALIGN_Y=264
                      ASSIGN/CAV_ALIGN_Z=-682.4
                    END_IF/
        $$ NO,
                    CAVITY #2 ALIGNMENT
                    IF/CAVITY_SELECT=="2" OR CAVITY_SELECT=="6"
      CAV_2_53015    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_2_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=300
                      ASSIGN/CAV_ALIGN_Y=264
                      ASSIGN/CAV_ALIGN_Z=-682.4
                    END_IF/
        $$ NO,
                    CAVITY #3 ALIGNMENT
                    IF/CAVITY_SELECT=="3" OR CAVITY_SELECT=="7"
      CAV_3_53015    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_3_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=297
                      ASSIGN/CAV_ALIGN_Y=721
                      ASSIGN/CAV_ALIGN_Z=-682.4
                    END_IF/
        $$ NO,
                    CAVITY #4 ALIGNMENT
                    IF/CAVITY_SELECT=="4" OR CAVITY_SELECT=="8"
      CAV_4_53015    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_4_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ASSIGN/CAV_ALIGN_X=815
                      ASSIGN/CAV_ALIGN_Y=722
                      ASSIGN/CAV_ALIGN_Z=-682.4
                    END_IF/
                  END_IF/
      $$ NO,
                  70009/10/12 ALIGNMENT CODE
                  IF/PART_SELECT=="2" OR PART_SELECT=="3" OR PART_SELECT=="4"
        $$ NO,
                    CAVITY#1 ALIGNMENT
                    IF/CAVITY_SELECT=="1" OR CAVITY_SELECT=="5"
      CAV_1_70009    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_1_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=627
                      ASSIGN/CAV_ALIGN_Y=249
                      ASSIGN/CAV_ALIGN_Z=-744.52
                    END_IF/
        $$ NO,
                    CAVITY#2 ALIGNMENT
                    IF/CAVITY_SELECT=="2" OR CAVITY_SELECT=="6"
      CAV_2_70009    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_2_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=492
                      ASSIGN/CAV_ALIGN_Y=249
                      ASSIGN/CAV_ALIGN_Z=-744.52
                    END_IF/
        $$ NO,
                    CAVITY#3 ALIGNMENT
                    IF/CAVITY_SELECT=="3" OR CAVITY_SELECT=="7"
      CAV_3_70009    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_3_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=488
                      ASSIGN/CAV_ALIGN_Y=705
                      ASSIGN/CAV_ALIGN_Z=-744.52
                    END_IF/
        $$ NO,
                    CAVITY#4 ALIGNMENT
                    IF/CAVITY_SELECT=="4" OR CAVITY_SELECT=="8"
      CAV_4_70009    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_4_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=625
                      ASSIGN/CAV_ALIGN_Y=705
                      ASSIGN/CAV_ALIGN_Z=-744.52
                    END_IF/
                  END_IF/
      $$ NO,
                  34013-16 ALIGNMENT CODE
                  IF/PART_SELECT=="5" OR PART_SELECT=="6" OR PART_SELECT=="7" OR PART_SELECT=="8"
        $$ NO,
                    CAVITY#1 ALIGNMENT
                    IF/CAVITY_SELECT=="1" OR CAVITY_SELECT=="5"
      CAV_1_34013    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_1_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=756
                      ASSIGN/CAV_ALIGN_Y=241
                      ASSIGN/CAV_ALIGN_Z=-766.2
                    END_IF/
        $$ NO,
                    CAVITY#2 ALIGNMENT
                    IF/CAVITY_SELECT=="2" OR CAVITY_SELECT=="6"
      CAV_2_34013    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_2_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=368
                      ASSIGN/CAV_ALIGN_Y=236
                      ASSIGN/CAV_ALIGN_Z=-766.2
                    END_IF/
        $$ NO,
                    CAVITY#3 ALIGNMENT
                    IF/CAVITY_SELECT=="3" OR CAVITY_SELECT=="7"
      CAV_3_34013    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_3_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=362
                      ASSIGN/CAV_ALIGN_Y=694
                      ASSIGN/CAV_ALIGN_Z=-766.2
                    END_IF/
        $$ NO,
                    CAVITY#4 ALIGNMENT
                    IF/CAVITY_SELECT=="4" OR CAVITY_SELECT=="8"
      CAV_4_34013    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\CAVITY_4_SERIALNUM_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
                      ASSIGN/CAV_ALIGN_X=750
                      ASSIGN/CAV_ALIGN_Y=700
                      ASSIGN/CAV_ALIGN_Z=-766.2
                    END_IF/
                  END_IF/
      $$ NO,
                  ALIGNMENT FEATURE
      
      RECALLING EXTERNAL ALIGNMENTS WORKS FOR THIS AS WELL. THIS IS JUST EASIER FOR ME TO STAY ORGANIZED 
      
      
                  ASSIGN/0_ALIGN_NOM=0
                  MOVE/POINT,NORMAL,<CAV_ALIGN_X,CAV_ALIGN_Y,-200>
      RP_ALIGN_FEAT=GENERIC/POINT,DEPENDENT,CARTESIAN,$
                  NOM/XYZ,<0_ALIGN_NOM,0_ALIGN_NOM,0_ALIGN_NOM>,$
                  MEAS/XYZ,<CAV_ALIGN_X,CAV_ALIGN_Y,CAV_ALIGN_Z>,$
                  NOM/IJK,<0,0,1>,$
                  MEAS/IJK,<0,0,1>
      A1         =ALIGNMENT/START,RECALL:STARTUP,LIST=YES
                    ALIGNMENT/TRANS,XAXIS,RP_ALIGN_FEAT
                    ALIGNMENT/TRANS,YAXIS,RP_ALIGN_FEAT
                    ALIGNMENT/TRANS,ZAXIS,RP_ALIGN_FEAT
                  ALIGNMENT/END
      $$ NO,
                  53015 SUBROUTINE SECTION
      
      THESE ARE THE SUBROUTINES THAT ARE CALLED UP AFTER THE READPOINT ALIGNMENT
      
      
                  IF/PART_SELECT=="1"
                    RECALL/VIEWSET,53015VIEW
                    IF/FP_AUD_SELECT=="1"
      PARTNAME_53015FP_SCRIPT    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\53015-10_FP_NAME_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
      53015_FP_SUB    =CALLSUB/53015_FIRSTPIECE,C:\CMM PROGRAMS\_CMM PROGRAMS\OPERATOR PROGRAMS\SUBROUTINES\53015-10FPC1.PRG:,
                      GOTO/VARIABLE_CATCH_LABEL
                    END_IF/
                    IF/FP_AUD_SELECT=="2"
      PARTNAME_53015AUD_SCRIPT    =SCRIPT/FILENAME= C:\USERS\CMMMIT\DOCUMENTS\MIKE\VISUAL BASIC FILES\53015-10_AUD_NAME_SCRIPT.BAS
                      FUNCTION/Main,SHOW=YES,,
                      STARTSCRIPT/
                      ENDSCRIPT/
      53015_AUD_SUB    =CALLSUB/53015_AUDIT,C:\CMM PROGRAMS\_CMM PROGRAMS\OPERATOR PROGRAMS\SUBROUTINES\53015-10AUDC1.PRG:,
                      GOTO/VARIABLE_CATCH_LABEL
                    END_IF/
                  END_IF/

      Comment


      • CodeWarrior
        CodeWarrior commented
        Editing a comment
        All of the scripts are used to rename the part name, rev num, ser num at the top by the way

      • CodeWarrior
        CodeWarrior commented
        Editing a comment
        Using operator input comments can work instead of using the forms. I like the look of using custom forms to help the operators buts its not necessary

      • A-machine-insp
        A-machine-insp commented
        Editing a comment
        So that will resave the each individual program after the individual program executions are complete?

    • #6
      I forgot to mention that part..

      in the subroutine program, I have a script at the end that saves the part there. I found the script on the forum a while back so you probably can still find it, I can send you mine when I have a moment later today if you can't find it here.

      Comment


      • #7
        Take a look at the Inspect program, it's part of the PC-DMIS installation - https://www.hexagonmi.com/products/s...c-dmis/inspect.
        Inspect.PNG
        Attached Files
        AndersI
        SW support - Hexagon Metrology Nordic AB

        Comment


        • vpt.se
          vpt.se commented
          Editing a comment
          Well... There you go!

          Thanks, AndersI

      • #8
        I'd create a vb.net front end in which you queued programs (a bit like you would in a media player).

        There are numerous options for the initial alignments, it depends on how repeatable your loading method it (i.e. with fixtures I'd use external alignments, if you just plonk the parts on the bed in the approx location then your read-point option (saving to an external alignment) might be a better option.

        I'd probably add a monitoring system as well which picked up machine errors / machine stopped moving and maybe fired off an email or something.

        Automettech - Automated Metrology Technology

        Comment


        • A-machine-insp
          A-machine-insp commented
          Editing a comment
          I am really good at setting up parts square to the machine axis (no plonking here) but the exact locations wouldn't be repeatable. I am in the FAI department so we are not (generally not) running production inspections. I think the read point alignments would work best. We just discussed a monitoring system and are all for it, we just want to get the program aspect ironed out first.

        • Quality ish
          Quality ish commented
          Editing a comment
          "FAI Department?!" I wish. I do First piece production inspections, roving audits, Final inspections prior to outside process, Receiving inspections, and any other dimensional check they need done (like checking down rev parts against current rev..) I program three different CMMs, each with a different PC-Dmis revision, a Fabrivision laser scanner, and pretty much make the QA calls on my shift (as I have NO infrastructure after 4:30pm). I send emails to my superiors/engineers, etc, and get naught but crickets...

          Maybe someday they'll even send me to school...

        • A-machine-insp
          A-machine-insp commented
          Editing a comment
          Quality ish, I feel your pain. The first shop I worked in as an inspector was that way.

      • #9
        The stars have aligned today and I get a few uninterrupted hours (hopefully all day) to play with/figure this out. Headphones are on (Five Finger Death Punch) and I am dead to everybody, just the way I like it. Ill be watching this post today for ideas and to probably ask more questions. Going to start with CodeWarrior's subroutine suggestion first.
        "Do what I want you to do, not what I tell you to do."

        -Me

        Comment


        • #10
          Get a large fixture plate that will use up all the X and Y space on your machine. You can then setup your parts using standoff's and will always be square to the machine.

          Comment


          • A-machine-insp
            A-machine-insp commented
            Editing a comment
            I have a grid plate on the smaller machine I use now (Global Advantage 09.12.08) and everybody sees the benefit of them and likes them. All the machines will be getting them soon and, if we get the new big CMM, it will get one too.

        • #11
          Originally posted by AndersI View Post
          Take a look at the Inspect program, it's part of the PC-DMIS installation - https://www.hexagonmi.com/products/s...c-dmis/inspect.
          Inspect.PNG
          +1 for Anders suggestion. Pallet is designed to run the same program multiple times in different locations to avoid the user having to program loops / flow control etc. Inspect also has a playlist function where you can queue up multiple programs to run one after another. Playlist is available in the current version of Inspect and the pallet option will be in V4.1 due out in the next few weeks.


          Forgot to mention, Inspect / pallet is free when you install PC-Dmis so as long as you have a valid SMA it should be available - either install the latest version and tick the option to install Inspect as well or go to the ftp site and download Inspect separately.
          Last edited by neil.challinor; 08-14-2019, 12:30 PM. Reason: Forgot to mention

          Comment


          • #12
            A-machine-insp , so who or what is going to load parts? Or are you saying you're going to basically cover the granite with parts and let it run through it all which will probably take all night so when you come in the morning, they'll all be done? How will you keep traceability on the reports?

            Comment


            • A-machine-insp
              A-machine-insp commented
              Editing a comment
              I will setup the parts and programs then hit go and let it run all night.

              We want to be able to put as many parts on the granite as possible and let them run all night then analyze the programs when we get in the next day. I don't want it to print the reports automatically, I want it to save the programs as ran for analysis then we will print reports ourselves when the analysis is done.

          • #13
            in no means is this the only way to pull this off but if all the different parts are sorta the same size then you could come up with a stock pallet size say 1 foot by 1 foot and each part is loaded on to a pallet and the cmm is filled with say 20 pallets in no suck order , on the pallets you have say 3 holes drilled at different depths witch in turn the cmm can read as sorta a barcode and then load up the respective program and run it this way you wouldn't need read point alignments so once one pallets is done the main program knows where the next set of drilled holes will be and so on and so on...

            Comment


            • #14
              So a little update from yesterday. I have 3 programs that have almost the entire program as a subroutine (see code below). All the programs are the same except they use different probe.

              Code:
              SARTUP    =ALIGNMENT/START,RECALL:USE_PART_SETUP,LIST=YES
                          ALIGNMENT/END
                          SUBROUTINE/PRG1,
                               = 
                          TRACEFIELD/DISPLAY=NO,REPORT=NO,DISPLAY MESSAGE=PROGRAMMED BY ; PROGRAMMED BY : 
                          TRACEFIELD/DISPLAY=NO,REPORT=NO,DISPLAY MESSAGE=PROGRAMMED ON ; PROGRAMMED ON : 
                          MODE/DCC
                          MOVESPEED/ 200
                          TOUCHSPEED/ 4
                          PREHIT/0.2
                          RETRACT/0.2
                          FLY/ON
                          FORMAT/TEXT,OPTIONS,ID,HEADINGS,SYMBOLS, ;NOM,TOL,MEAS,MAXMIN,DEV,OUTTOL, 
                          ACCELERATION/MAXACCELX=1000, MAXACCELY=1000, MAXACCELZ=1000
                          LOADPROBE/REFERENCE PROBE
                          LOADPROBE/2MM80
                          TIP/T1A0B0, SHANKIJK=0, 0, 1, ANGLE=0
                          AUTOCALIBRATE/PROBE, PARAMETER_SET=123 2MM80 TEST, QUALTOOL_MOVED=NO, 
              
              The rest of the program, bla bla bla...
              
              DIM ANGL4= 2D ANGLE FROM PLANE PLN4 TO PLANE PLN1 ,$
              GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH
              AX    NOMINAL       +TOL       -TOL       MEAS        MAX        MIN        DEV     OUTTOL
              A      90.0000     0.5000     0.5000    90.0017    90.0017    90.0017     0.0017     0.0000 ----#----
                          ENDSUB/

              Then I have a main program that autocalibrates the Reference Probe then calls the 3 subroutines. It's short and the entirety of the program is posted below.

              Code:
              STARTUP    =ALIGNMENT/START,RECALL:USE_PART_SETUP,LIST=YES
                          ALIGNMENT/END
                          TRACEFIELD/DISPLAY=NO,REPORT=NO,DISPLAY MESSAGE=PROGRAMMED BY ; PROGRAMMED BY : 
                          TRACEFIELD/DISPLAY=NO,REPORT=NO,DISPLAY MESSAGE=PROGRAMMED ON ; PROGRAMMED ON : 
                          MODE/MANUAL
                          MOVESPEED/ 200
                          TOUCHSPEED/ 4
                          PREHIT/0.1
                          RETRACT/0.1
                          FLY/ON
                          FORMAT/TEXT,OPTIONS,ID,HEADINGS,SYMBOLS, ;NOM,TOL,MEAS,MAXMIN,DEV,OUTTOL, 
                          ACCELERATION/MAXACCELX=1000, MAXACCELY=1000, MAXACCELZ=1000
                          LOADPROBE/REFERENCE PROBE
                          TIP/T1A0B0, SHANKIJK=0, 0, 1, ANGLE=0
                          AUTOCALIBRATE/PROBE, PARAMETER_SET=REFERENCE PROBE ALL, QUALTOOL_MOVED=YES_DCC, 
                                        SHOW_SUMMARY=YES, OVERWRITE_RESULTSFILE=YES
              BEGIN AUTOCALIBRATE RESULTS FOR PROBE REFERENCE PROBE USING SET REFERENCE PROBE ALL
              Probe file=REFERENCE PROBE    Date=8/14/2019    Time=5:13:22 PM
              R177744 AM073  CENT X  15.2829 Y   9.4028 Z -22.4382 D 0.9837
              T1A0B0         THEO X   0.0000 Y   0.0000 Z   6.4102 D 0.1575
              T1A0B0         MEAS X   0.0001 Y  -0.0003 Z   6.4104 D 0.1575 PrbRdv-0.0000 StdDev 0.0000
              END AUTOCALIBRATE RESULTS FOR PROBE REFERENCE PROBE USING SET REFERENCE PROBE ALL
              CS1        =CALLSUB/PRG1,C:\Users\INSP\Desktop\CMM PROGRAMS\AUTORUN TEST PROGRAMS\1X2X3 BLOCK TEST PROGRAM.PRG:,
              CS2        =CALLSUB/PRG2,C:\Users\INSP\Desktop\CMM PROGRAMS\AUTORUN TEST PROGRAMS\1X2X3 BLOCK TEST PROGRAM 2.PRG:,
              CS3        =CALLSUB/PRG3,C:\Users\INSP\Desktop\CMM PROGRAMS\AUTORUN TEST PROGRAMS\1X2X3 BLOCK TEST PROGRAM 3.PRG:,
              So here is the good and the bad.

              The good it that I execute the main program and it runs successfully including the Reference Probe autocalibration, then the autocalibration, all alignments, and all features in each of the subroutines.

              The bad is that while it does execute everything properly, it does not do exactly what I need. I need each of the individual programs (that are currently subroutines) saved independently so they can be analyzed individually and independently.

              While I am bummed that it is not exactly what I need, I think it is a step in the right direction. Plus it was cool to hit go and have it execute 3 programs on its own with no operator input.

              Also, I know this suggestion is coming so I'll head it off here. I am pressuring my boss who is pressuring the owner to send me to the Level 3 class. It was the owner who gave me the time yesterday and today to work on this project so hopefully it will happen and soon.
              "Do what I want you to do, not what I tell you to do."

              -Me

              Comment


            • #15
              Originally posted by A-machine-insp View Post
              I need each of the individual programs (that are currently subroutines) saved independently so they can be analyzed individually and independently.
              Would this thread help? https://www.pcdmisforum.com/forum/pc...end-of-program


              AndersI
              SW support - Hexagon Metrology Nordic AB

              Comment

              Related Topics

              Collapse

              Working...
              X