hexagon logo

VB.NET for PC DMIS

I am new to using PCDMIS.

ASSIGN/V3=SYSTEMDATE("MM'/'dd'/'yy")
ASSIGN/V4=SYSTEMTIME("hh:mm:ss tt")
ASSIGN/V5=DIST1.DEV
ASSIGN/V6=DIST2.DEV
ASSIGN/V7=DIST3.DEV
ASSIGN/V8=DIST4.DEV
ASSIGN/V9=DIST5.DEV
ASSIGN/V10=DIST9.DEV
ASSIGN/V11=DIST10.DEV
ASSIGN/V12=DIST6.DEV
ASSIGN/V13=DIST7.DEV
ASSIGN/V14=DIST11.DEV
ASSIGN/V15=DIST12.DEV
ASSIGN/V16=DIST8.DEV
ASSIGN/V17=DIST19.DEV
ASSIGN/V18=LOC1.X.DEV
ASSIGN/V19=LOC1.Y.DEV
ASSIGN/V20=LOC2.X.DEV
ASSIGN/V21=LOC2.Y.DEV
ASSIGN/V22=LOC3.X.DEV
ASSIGN/V23=LOC3.Y.DEV
ASSIGN/V24=LOC4.X.DEV
ASSIGN/V25=LOC4.Y.DEV
ASSIGN/V26=LOC5.X.DEV
ASSIGN/V27=LOC5.Y.DEV
ASSIGN/V28=LOC6.X.DEV
ASSIGN/V29=LOC6.Y.DEV
ASSIGN/V30=LOC7.X.DEV
ASSIGN/V31=LOC7.Y.DEV
ASSIGN/V32=LOC8.X.DEV
ASSIGN/V33=LOC8.Y.DEV
ASSIGN/V34=LOC9.X.DEV
ASSIGN/V35=LOC9.Y.DEV
ASSIGN/V36=LOC10.X.DEV
ASSIGN/V37=LOC10.Y.DEV
ASSIGN/V38=LOC16.X.DEV
ASSIGN/V39=LOC16.Y.DEV
ASSIGN/V40=LOC11.X.DEV
ASSIGN/V41=LOC11.Y.DEV
ASSIGN/V42=DIST13.DEV
ASSIGN/V43=DIST14.DEV
ASSIGN/V44=DIST15.DEV
ASSIGN/V1=DIST16.DEV
ASSIGN/V45=DIST17.DEV
ASSIGN/V46=DIST18.DEV
ASSIGN/V47=LOC12.X.DEV
ASSIGN/V48=LOC12.Y.DEV
ASSIGN/V49=LOC13.X.DEV
ASSIGN/V50=LOC13.Y.DEV
ASSIGN/V51=LOC14.X.DEV
ASSIGN/V52=LOC14.Y.DEV
ASSIGN/V53=LOC15.X.DEV
ASSIGN/V54=LOC15.Y.DEV
ASSIGN/V97="Date"+","+"Time"+","+"1.60 .190-32"+","+"1.60 5/16-24"+","+"1.00 Spot"+","+".8701 Spool"+","+".8701 5/16-24"
ASSIGN/V98=".8701 .452"+","+".8701 1/2-20"+","+"1.7902 Spool"+","+"1.7902 5/16-24"+","+"1.7902 .750"+","+"1.7902 7/8-14"
ASSIGN/V99=".6496 Spot"+","+"3.7780 Spot"+","+".2165 #1 x"+","+".2165 #1 y"+","+".2165 #2 x"+","+".2165 #2 y"
ASSIGN/V100=".2165 #3 x"+","+".2165 #3 y"+","+".2165 #4 x"+","+".2165 #4 y"+","+".156 #1 x"+","+".156 #1 y"
ASSIGN/V101=".156 #2 x"+","+".156 #2 y"+","+"Spot #6 x"+","+"Spot #6 y"+","+"Spot #5 x"+","+"Spot #5 y"
ASSIGN/V102="Spot #7 x"+","+"Spot #7 y"+","+".1256 x"+","+".1256 y"+","+".272 x"+","+".272 y"+","+"5/16-24 #1 x"
ASSIGN/V103="5/16-24 #1 y"+","+"TP tol (2x)"+","+".8701 7/16-20 #1"+","+".8701 7/16-20 #2"+","+"1.60 7/16-20 #1"+","+"1.60 7/16-20 #2"
ASSIGN/V104=".752 Spot Front"+","+".752 Spot Back"+","+"Spot #1 x"+","+"Spot #1 y"+","+"Spot #2 x"
ASSIGN/V105="Spot #2 y"+","+"Spot #3 x"+","+"Spot #3 y"+","+"Spot #4 x"+","+"Spot #4 y"
ASSIGN/V109=V3+","+V4+","+V5+","+V6+","+V7+","+V8+","+V9+","+V10+","+V11+","+V12+","+V13+","+V14+","+V15
ASSIGN/V110=V16+","+V17+","+V18+","+V19+","+V20+","+V21+","+V22+","+V23+","+V24+","+V25+","+V26+","+V27
ASSIGN/V111=V28+","+V29+","+V30+","+V31+","+V32+","+V33+","+V34+","+V35+","+V36+","+V37+","+V38+","+V39
ASSIGN/V112=V40+","+V41+","+V2+","+V42+","+V43+","+V44+","+V1+","+V45+","+V46+","+V47+","+V48+","+V49+","+V50+","+V51
ASSIGN/V113=V52+","+V53+","+V54

above is a portion of code.

Dim app As PCDLRN.Application
Dim cmds As Object
Dim cmd As PCDLRN.Command
Dim part As PCDLRN.PartProgram
Dim data As PCDLRN.ReportData
Dim rWin As PCDLRN.ReportWindow

Dim s As String = ""

app = GetObject("", "PCDLRN.Application.12.1")
app.Visible = True
part = app.ActivePartProgram
cmds = part.Commands

Dim nCommands As String = part.Commands.Count.ToString
Dim val As String = part.GetVariableValue("PLN1").StringValue.ToString

MessageBox.Show("Value is -- " & val & "--" & nCommands)

For Each cmd In cmds
'Dim assignName As Object = cmd.GetText(PCDLRN.ENUM_FIELD_TYPES.DEST_EXPR, 0)
'Console.WriteLine(assignName.ToString)
Console.WriteLine(cmd.TypeDescription.ToString & " " & cmd.Type & " " & cmd.GetFieldValue())
'Console.WriteLine(part.GetVariableValue(assignName).CommandValue.ToString)
Next

'rWin = part.ReportWindow
'data = rWin.Pages

'Dim dat As String = data.GetValue(PCDLRN.ENUM_FIELD_TYPES.AXIS_NOMINAL, 1107)
'MessageBox.Show(dat)

and above is the VB.NET code I am using to access CMM code. I want to get all the values inside ASSIGN/x=y commands eg: ASSIGN/V113=V52+","+V53+","+V54. Can anyone share code to get these values ? I am trying to use Command.GetFieldValue(PCDLRN ENUM FIELD TYPE, TYPE INDEX ) , I do not understand what are these two parameters inside the GetFieldValue method ? Any help will be appreciated.
  • Do you run as normal user or admin? Same in both environments?



  • From the help files


    Remarks
    To start PC-DMIS using Automation from another application, use CreateObject or GetObject to return an Application object. LaLaunching PC-DMIS With Startup Options
    Because of an inherent weakness in the way Microsoft designed the CreateObject function, the CreateObject doesn't allow startup parameters. This means when the code executes it will launch PC-DMIS always in ONLINE mode.

    However, there is a way around this. Your code can dynamically create a special startup file that will cause PC-DMIS to launch with specific startup options.

    In order to launch PC-DMIS via automation with a startup file you must do the following:
    • Create a text file named AutomationStartupOptions.txt.
    • Create a single line of text in the file with the available startup options. The PC-DMIS specific startup options include the following:

    /f - Launches in Offline mode.

    /o - Launches in Operator mode.

    /d - Launches in Debug mode.

    /r - Launches in Reverse Axes mode

    /postin - Launches in import mode. PC-DMIS will automatically import a specified file.

    /postout - Launches in export mode. PC-DMIS will automatically export a specified file.

    The line of text would look like this: /f /o /d /r /postin /postout
    • Launch PC-DMIS via automation.

    When PC-DMIS starts, it checks to see if the AutomationStartupOptions.txt file exists. If it does, then it uses the file to set the necessary flags. However, when PC-DMIS closes, it will delete the text file. This means that the code you use to launch PC-DMIS must also create the needed text file on the fly or must rename an existing file to AutomationStartupOptions.txt. See the "Example Code from C++" below.

    Automating in Online Mode: If you are trying to launch PC-DMIS in online mode, please note that the AutomationStartupOptions.txt file should not contain the /f startup parameter. Also, the machine parameter specified when using the Open or New methods of the PartPrograms object determines whether or not the part program will run in offline or online modes. Of online mode, this parameter should be "CMM1".

     Example Dim App as Object.
    Set App = CreateObject("Pcdlrn.Application")
  • I fixed the partprograms.open machinename parameter to CMM1
    The PCDMIS wont let the application to set the operator mode.

    There is already a quick start option to launch operator mode on the computer connected to CMM, so I removed the operator mode setting to launch the application but it was simply launching it in online mode.
    I will fix my code to launch PCDMIS with startup options
  •  Dim startupsetting As String = Application.StartupPath
     startupsetting = Path.Combine(startupsetting, "AutomationStartupOptions.txt")
     Dim fsA As FileStream = New FileStream(startupsetting, FileMode.Create)
     fsA.Close()
     Using sw As StreamWriter = New StreamWriter(startupsetting)
          sw.Write("/o")
     End Using
    
     Dim app As Object
    
    Try
                app = CreateObject("PCDLRN.Application")
                'app.OperatorMode = True
                app.Visible = True
                Dim status As String = ""
                While Not status.Contains("Done Init")
                    System.Threading.Thread.Sleep(1000)
                    status = app.StatusBar()
                End While
                MsgBox("Application is open in online mode")
     Catch ex As Exception
                MsgBox("PcDmis cannot connect. " & vbNewLine & "(Error - " & ex.Message & ")" & vbNewLine & ex.ToString, MsgBoxStyle.Critical)
     End Try
    


    So now i try this code and AutomationStartupOptions.txt file is created with line /o but when trying to create app object PCDMIS launches and then closes and crashes. And then PCDMIS closed unexpectedly report error or close the program shows up.

    I checked one solution to delete messageboxoptions.dat in PCDMIS installatin directory but I do not want to delete it since I am not aware if some settings was made in it that does not relate to my software making PCDMIS crash

    When i rerun the application i make sure to delete the automationstartupoptions.txt and there is no other file generated in Application.StartupPath like dat file or anything while running the application.

    Should i place the automationstartupoptions.txt in the installation directory of the application ?


    Edit: And that i am checking for the status following another code found in this forum since for debug purpose I only want to start the application first and then open partprograms once the application is up and running
  • But on closing the main start up form I exeute this code and it throws no error and closes the open application just fine

    Try
                Dim app As PCDLRN.Application
                app = CreateObject("PCDLRN.Application")
                app.OperatorMode = False
                app.Quit()
            Catch ex As Exception
                MsgBox("Error cannot open PCDMIS application")
            End Try
    
  • I believe the AutomationStartupOptions.txt needs to be in the same folder as PCDLRN.EXE.
  • I ran the program and seem to have messed with the online mode settings. The application has lost all the toolbar and window settings. Do you know where these settings will be saved so that I could get my network admin to restore previous versions of these settings
  • Public Documents

    Measurement routine, CAD, probe, and other files:

    C:\Users\Public\Public Documents\Hexagon\PC-DMIS\2017 R2

    Demo CAD files:

    C:\Users\Public\Public Documents\Hexagon\PC-DMIS\2017 R2\CAD

    Public Documents (Reporting Directory)

    Report template, label template, rule definition, and color definition files:

    C:\Users\Public\Public Documents\Hexagon\PC-DMIS\2017 R2\Reporting

    Public Documents (Fixturing)

    Fixturing files:

    C:\Program Files\Hexagon\PC-DMIS 2017 R2 64-bit\Models\QuickFix

    Program Data Files [Hidden]

    Calibration files (such as comp.dat and compens.dat), setup files (such as tool.dat, toolc.dat, and usrprobe.dat), and other files:

    C:\ProgramData\Hexagon\PC-DMIS\2017 R2

    User Data Files

    Files for toolbar and menu layout, lighting and materials, and settings:

    C:\Users\ user name \AppData\Local\Hexagon\PC-DMIS\2017 R2

    Where user name is your window's logon user name.
  • I'm stuck in the land of VB6, so my observations may not be pertinent, but here they are. I have no idea how the StreamWriter works, for example.

    - your code closes the file before writing to it. Is this normal?

    - does the .Write method add EOL character(s)? Sometimes the silliest things can cause problems

    - do you need to .Close the file after writing to unlock it for pc-dmis?
  • If your comment refers to the way the interface looks during execution, this could just be normal behavior. There's a program setting in the F5 setup options "Use program layout for execution". Ticking this box will force pc-dmis interface look "the same" as while programming during execution.