Advanced DMIS
Advanced DMIS
Declaration Character
DECL/CHAR, n, varname
Where:
n: The number of characters assigned to the variable.
Exmaple,
DECL/CHAR, 10, Feat_Label, Arr_Label[10]
Feat_Label = ‘MASTER_CR’
Arr_Label[0] = ‘X’
Arr_Label[1] = ‘Y’
..
Arr_Label[9] = ‘K’
Declaration Integer
DECL/INTGR, varname
Exmaple,
DECL/ INTGR, Feat_Num, Arr_Num[10]
Feat_Num = 5
Declaration Real
DECL/REAL, varname
Exmaple,
DECL/ REAL, XPos
XPos = 5.125
Arithmetic Operators
+ for addition
- for subtraction or negation
* for multiplication
/ for division
** for exponentiation
.EQ. for equal to
.NE. for not equal to
.LT. for less than
.LE. for less than or equal to
.GT. for greater than
.GE. for greater than or equal to
.AND. for and operator
.OR. for or operator
.NOT. for the not operator
Variables – Input/Output
IF/ (IVEC.LT.0.1).OR.(IVEC.GT.0.9)
TEXT/OPER,’XY PLAN’
ENDIF
DECL/REAL, AA, AZ
AA=1
AZ=2
IF/(AA.EQ.1).OR.(AA.EQ.3)
TEXT/OPER,’OR Test: OK'
ENDIF
IF/(AA.EQ.1).AND.(AA.EQ.3)
TEXT/OPER,’AND Test: OK'
ENDIF
SELECT statement
SELECT/variable
CASE/var_1
Executable statement
ENDCAS
CASE/var_1
Executable statement
ENDCAS
ENDSEL
*** Note: variable is integer only.
DECL/INTGR, Num
DO/Num,1,5,1
SELECT/Num
CASE/1
TEXT/OPER, ‘Number 1’
ENDCAS
CASE/2
TEXT/OPER, ‘Number 2’
ENDCAS
CASE/3
TEXT/OPER, ‘Number 3’
ENDCAS
CASE/4
TEXT/OPER, ‘Number 4’
ENDCAS
CASE/5
TEXT/OPER, ‘Number 5’
ENDCAS
ENDSEL
ENDDO
Functions: OBTAIN, EVAL, VALUE
OBTAIN
DECL/REAL,XPOS, IVEC, DIA_ACT, DIA_NOM, DIA_DEV, ANG_B, XPOS_PT[5]
F(CR1) = FEAT/CIRCLE, OUTER, CART, 300.0024, 300.0017, 200.0000,0.00000,0.0000,1.0000,200.0000
XPOS = OBTAIN/FA(CR1),4
IVEC = OBTAIN/FA(CR1),7
DIA_ACT = OBTAIN/FA(CR1),10
DIA_NOM = OBTAIN/F(CR1),10
DIA_DEV = DIA_NOM – DIA_ACT
XPOS_PT[1] = OBTAIN/FA(CR1)[1],2
XPOS_PT[2] = OBTAIN/FA(CR1)[2],2
EVAL
T(ABB1) = TOL/ANGLB, 45.0000, -0.0500, 0.0500
EVAL/FA(LN1), FA(LN2), T(ABB1)
ANG_B = OBTAIN/TA(ABB1),2
VALUE
DECL/CHAR, 10, WhatMode, CWK
DECL/REAL, XPOS
DECL/INTGR, Num
WhatMode = VALUE/MODE
CWK = VALUE/WKPLAN
XPOS = VALUE/GOTO, XAXIS
Macro Definition and Call Macro
$$ MACRO STORING CURRENT STATUS (PCS,UNITS)
M(STORE_STS)=MACRO
DMIS/OFF
GET/D,CURRENTPCS
GET/UNITS,CURRENTUNIT
DMIS/ON
ENDMAC
M(PICK_ACC2)=MACRO/PICK_PORT,EXT_LENG
DECL/LOCAL,INTGR,PORTN
PORTN = PICK_PORT
IF/ PORTN > 8
TEXT/OPER,'AUTORACK PORT NUMBER MUST BE 1 TO 8
ENDIF
CALL/M(STORE_STS)
GOTO/ACC_X[PORTN]+ACC_FACX,ACC_Y[PORTN]+ACC_FACY,ACC_Z[PORTN]+7+EXT_LENG
CALL/M(RESTORE_STS)
ENDMAC
CALL/ M(PICK_ACC2), 5, 25
Call external System Macro
XTERN
EXTFIL/DMIS, 'D:\Vms\Users\bjoh\Program\CastCurve.dms'
ENDXTN
CALL/EXTERN,DMIS,M(CASTCVI)
Direct Read/Write of a file
Direct write data to a file
DECL/CHAR, 10, HomeDir, CalibFile
DECL/REAL, PortX, PortY, PortZ
CALL/EXTERN,DME, 'V3DHOME',HomeDir
CalibFile = CONCAT(HomeDir,'\Users\Sensor\ACR3calib.data')
DID(PORTDATA) = DEVICE/STOR, CalibFile
OPEN/DID(PORTDATA),DIRECT,OUTPUT,OVERWR
PortX1 = 10.0
PortY1 = 20.0
PortZ1 = 30.0
PortX2 = 100.0
PortY2 = 200.0
PortZ2 = 300.0
WRITE/DID(PORTDATA),PortX1, ',' ,PortY1, ',' ,PortZ1
WRITE/DID(PORTDATA),PortX2, ',' ,PortY2, ',' ,PortZ2
CLOSE/DID(PORTDATA)
decl/char,80,UserDir
CALL/EXTERN,DME, 'V3DUSRDIR',UserDir
UserDir = concat(UserDir, '\report\profile.txt')
DID(PROF)=DEVICE/STOR,UserDir
OPEN/DID(PROF),DIRECT,INPUT
F(CV_1)=FEAT/GCURVE,CART, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0
DMIS/OFF
READ/F(CV_1),UserDir
DMIS/ON
CLOSE/DID(PROF),KEEP
ENDFIL
*** profile.txt
0.0000 , 9.2100 , -0.8
0.0718 , 9.2107 , -0.8
0.1436 , 9.2125 , -0.8
0.2153 , 9.2157 , -0.8
0.2867 , 9.2200 , -0.8
0.3580 , 9.2256 , -0.8
0.4289 , 9.2324 , -0.8
…
…
Incremental GOTO
GOTO/INCR, 10, 0, 0
Result: StrLeng = 13
Sub-String
$$ SUBSTR(Str, First Pos, Finish Pos)
StrTest = ‘START PROGRAM’
StrTest = SUBSTR(StrTest,1,5)