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.
  • Give it a minute. Most of the GURUS are off work by now (it's later in the east), the answer will be there when I get here in the morning.
  • I will try this code in some time and try to debug what I am doing wrong.
    I should have mentioned that it was your code in the beginning of the thread. I really have no clue where to begin with this vb.net dll. Thanks a lot Slight smile
  • geetha91user, no worries! You're doing the right thing, keep at it.
  • One other question.

    COMMENT/REPT,
                --------------------------------------------------------------
                1.6000 ±.0098 Location of .190-32 & 5/16-24 Threads
                --------------------------------------------------------------
    DIM DIST1= 2D DISTANCE FROM CIRCLE -B- TO CIRCLE .190-32 THD PAR TO   XAXIS,NO_RADIUS  UNITS=IN,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH
    AX       MEAS    NOMINAL       +TOL       -TOL     OUTTOL        DEV
    M       1.5989     1.6000     0.0098     0.0098     0.0000    -0.0011 ---#-----
    DIM DIST2= 2D DISTANCE FROM CIRCLE -B- TO CIRCLE 5/16-24 #2 PAR TO   XAXIS,NO_RADIUS  UNITS=IN,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH
    AX       MEAS    NOMINAL       +TOL       -TOL     OUTTOL        DEV
    M       1.5997     1.6000     0.0098     0.0098     0.0000    -0.0003 ----#----
                COMMENT/REPT,
                --------------------------------------------------------------
                1.0000 ±.0314 Location of Ø.5972 Spotface
                --------------------------------------------------------------
    DIM DIST3= 2D DISTANCE FROM POINT CAST POINT TO CIRCLE -B- PAR TO   XAXIS,NO_RADIUS  UNITS=IN,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH
    AX       MEAS    NOMINAL       +TOL       -TOL     OUTTOL        DEV
    M       1.0010     1.0000     0.0314     0.0314     0.0000     0.0010 ----#----
                WORKPLANE/XPLUS
                COMMENT/REPT,


    I am able to get the Dimesion measured value using

    Dim assignName As Object = cmd.GetFieldValue(PCDLRN.ENUM_FIELD_TYPES.DIM_MEASURED, 1)

    I am also able to get the outtotal and Deviation column values using

    Dim outtol As Object = cmd.GetFieldValue(PCDLRN.ENUM_FIELD_TYPES.DIM_OUTTOL, 1)
    Dim deviation As Object = cmd.GetFieldValue(PCDLRN.ENUM_FIELD_TYPES.DIM_DEVIATION, 1)

    But i am unable to extract the values under Nomina;, +tol, -tol . I did try PCDLRN.ENUM_FIELD_TYPES.AXIS_NOMINAL, PCDLRN.ENUM_FIELD_TYPES.AXIS_MINUSTOL, PCDLRN.ENUM_FIELD_TYPES.AXIS_PLUSTOL but i do not get the vakues in these columns.

    I have also noticed that there is reportWindow class within the partProgram class but how do I access the data in the Report Window ?

    My objective is to execute a CMM program, track all the measured values with the command description like in the comments in the Report, I want to capture whatever is in the report and use vb.net to import these values directly to Sql than having to move it to csv and then move it to sql.
  • Oh good.

    One other question.

    I am able to get the Dimesion measured value using

    Dim assignName As Object = cmd.GetFieldValue(PCDLRN.ENUM_FIELD_TYPES.DIM_MEAS URED, 1)

    I am also able to get the outtotal and Deviation column values using

    Dim outtol As Object = cmd.GetFieldValue(PCDLRN.ENUM_FIELD_TYPES.DIM_OUTT OL, 1)
    Dim deviation As Object = cmd.GetFieldValue(PCDLRN.ENUM_FIELD_TYPES.DIM_DEVI ATION, 1)



    Look for "If cmd.IsDimension And cmd.Marked = True Then" on my code, pay attention to to whats happening in between. You can grab all that you need from any dimension using that bit of code, Nom, Meas, Plus, Minus, etc.


    But i am unable to extract the values under Nomina;, +tol, -tol . I did try PCDLRN.ENUM_FIELD_TYPES.AXIS_NOMINAL, PCDLRN.ENUM_FIELD_TYPES.AXIS_MINUSTOL, PCDLRN.ENUM_FIELD_TYPES.AXIS_PLUSTOL but i do not get the vakues in these columns.



    Everything that goes into your report can be pulled without touching this class.

    I have also noticed that there is reportWindow class within the partProgram class but how do I access the data in the Report Window ?

    My objective is to execute a CMM program, track all the measured values with the command description like in the comments in the Report, I want to capture whatever is in the report and use vb.net to import these values directly to Sql than having to move it to csv and then move it to sql.


    If you need to pull in your report comments use this:

    For Each cmd In cmds
                If cmd.IsComment And cmd.Marked = True Then
                    If cmd.GetText(PCDLRN.ENUM_FIELD_TYPES.COMMENT_TYPE, 0) = "REPT" Then
                        MsgBox(cmd.GetText(PCDLRN.ENUM_FIELD_TYPES.COMMENT_FIELD, 2).ToString)
                    End If
                End If
            Next cmd


    Changing the # on "...COMMENT_TYPE, 0)" changes the line of text you pull in from your comment when you have more than one line in a comment.
  • Basically you can use the code I posted on my thread and just change the code that writes to a csv and change it to write to sql and add the code to pull in comment report data before each dimension command. You're almost there if only you were close to me or... I could write it up and test it in a few hours assuming you're only using legacy type dimensioning.
  • Please check the attached image.

    The way to add a command is by selecting Insert -> Dimension -> Distance . This opens a wizard and we add a new dimesion variable or select a new dimension variable and set all the paameters and it shows in the commands.

    when using VB.NET to read through the commands how to find if the Dimension was Distance or Location and so on ?

    Attached Files
  • You check the COMMAND TYPE for the command.
  • Command Type for command is not returning anything.

    cmd.GetText(PCDLRN.ENUM_FIELD_TYPES.COMMAND_TYPE, 0) returned nothing If you see in the attached image, i can find dimtypes values in PCDDIMTYPES Enumerations. But I dont see any class calling these enumerations .

    Attached Files
  • Okay I was looking for cmd.GetText(PCDLRN.ENUM_FIELD_TYPES.DIM_HEADING, 0). I am able to get what I am looking for from this command