目录
术语
尺寸测量接口标准
Dimensional Measuring Interface Standard DMIS
本标准的命名。
本标准的目的是为在计算机系统和检验设备之问的检验数据双向通信提供一个标准。尺寸测量接口标准(DMIS)是一个术语的词汇表,它为检验程序和检验结果数据建立起一个中性的格式。
注:引述经常涉及DMlS词汇、DMIS检验程序、DMlS文件等。这些是与本标准中阐明的格式和结构相一致的数据 文件。
标校序列
calibration sequence
语句序列,包含在CALIB...ENDMES中的语句序列。 注:一个标校序列应为由CALIB/RTAB语句开始的回转工具台标校序列或者是由CALIB/SENS语句开始的传感 器标校序列。
尺寸测量设备
Dimensional Measuring Equipment DME 一类设备用来检验零件和评价尺寸和公差。 注:包括但不仅限于坐标测量机、视频检验设备、光学比较仪、机器人测量设备、经纬仪、摄影测量和激光测量设备。
坐标测量机
Coordinate Measuring Machine CMM
为采集离散点数据和分析尺寸和公差的计算机化的检验设备。 注:通常是使用接触探针或扫描探针作为传感器来获取数据。
特征
feature 点或一组点被标识和被称为是特征。 注:通常,特征是一个零件的几何要素,诸如点、线、面和圆等。
卷标
label 一个DMIS语句的这部分充分地标识r一个特征、公差、坐标体系、传感器、输出数据格式、基准点、 配合、宏程序、文本串或程序行等。 注:一个卷标由卷标类型继之以圆括号包围的卷标名构成.除非在卷标标识一个程序行时,卷标仅包括圆括号包围 的卷标名而没有卷标类型。
测量序列
measurement sequence 语句序列,包含在一个MEAS...ENDMES块或者RMEAS...ENDMES块中。
标称值
nominal 涉及特征或公差,标称值是指在零件产品精确度中规定的“设计值”。 注:标称值是在测量前已知的值,实值与其相比较计算出超出公差的状况。
实值
actuals 是从测量或结构特征计算结果。 注:因而,实值是测量设备的输出,直到一个测量或构建已经完成才被定义
基本语法
语法结构
DMIS语句分为两种基本类型:
-
面向过程的命令语句 过程命令语句由运动语句、机器参数语句和其他只有榆验过程自身才有的语句。
-
面向几何结构的定义语句 定义语句用来描述几何结构、公差、坐标体系和可能包括在CAD数据库中的其他数据类型。
DMIS词汇由ASCII字符构成,这些字符组合形成字、卷标、参数和变量。然后这些组合形成定义语句和命令语句。这些语句再组合形成程序块。程序块连同更多的语句一起形成整个DMIS程序。
DMIS词汇在语法上用斜线字符“/”分割主字和次字。
DMIS保留字
-
主字 主字最少由两个字母数字字符构成。一个主字或者应为一个DMIS语句本身,或者可能指明一类语句。当它指明一类语句时,主字被一个或多个次字修饰。
-
次字 次字最少由一个字母数字字符构成。一些次字以负号字符为前导。一个次字用来修饰一个主字或描述语句中的某几个参数。
-
定义卷标
-
功能名
定界符
斜线“/”
正斜线字符“/”用于分开主字和次字。
逗号“,”
逗号“,”用作分割次字和参数的通用定界符:
圆括号“(”和“)”
圆括号“(”和“)”用作定界符。一个卷标名以左圆括号为前导,后面跟着右圆括号
单引号“ ’ ”
单引号“ ’ ”用作定界文本串的开始和结束。
空行、空格和制表符
在DMIS中空行和空格没有意义。
注释和行延续
DMIS语言中,使用$$符号进行注释,使用$进行行延续
注释
<span style="background-color:#f8f8f8"><span style="color:#333333"> $$定义一个圆
F(C1)=FEAT/CIRCLE,INNER,CART,10,10,10,0,0,1,20</span></span>
行延续
<span style="background-color:#f8f8f8"><span style="color:#333333"> $$DMIS语言在行的末尾没有使用特殊的标识符表示终结,通常在行的末尾使用回车后,自然的表示这一行是一个完整的语法结构。但是使用$符号可以将两行或多行拼接在一起,组成一个完整的语法结构,如下:
$$定义一个圆
F(C2)=FEAT/CIRCLE,INNER,CART,$
20,20,20,0,0,1,30</span></span>
变量
为了执行变量声明,需要使用 DECL/指令。 使用该命令指定变量类型及其名称。
变量作用域
-
COMMON 公共变量
-
GLOBAL 全局变量
-
LOCAL 本地变量
变量类型
-
BOOL 布尔型变量
-
CHAR 字符型变量
-
INTGR 整数形变量
-
REAL 实数型变量
-
LONG 长整型变量
-
DOUBLE 双精度型变量
示例:
DECL/GLOBAL,INTGR,I
DECL/INTGR,L1,L2,L3
DECL/CHAR,20,STRNAME
数组
数组变量可以是上述变量类型的任何一种,在声明时以“[ ]”在变量名称的后面。
一维数组
在声明时,一维数组直接将数组包含此类型变量的个数写在[ ]中即可。调用数组或进行赋值时,使用数组名[下标]的方式,数组的下标是从1开始的。
DECL/INTGR,NUM[10]
NUM[1]=ASSIGN/9
NUM[2]=ASSIGN/5
NUM[3]=ASSIGN/7
NUM[4]=ASSIGN/3
NUM[5]=ASSIGN/4
NUM[6]=ASSIGN/6
NUM[7]=ASSIGN/8
NUM[8]=ASSIGN/2
NUM[9]=ASSIGN/10
NUM[10]=ASSIGN/1
二维数组
在声明时,二维数组直接将数组包含此类型变量的行数和列数写在[]中即可,中间用“,”隔开。
DECL/INTGR,NUM[3,3]
NUM[1,1]=ASSIGN/9
NUM[1,2]=ASSIGN/5
NUM[1,3]=ASSIGN/7
多维数组
目前,ARCO软件不支持二维以上的数组。
运算符
算术运算符
-
+ 加
-
- 减
-
*乘
-
/ 除
-
** 乘方
关系运算符
-
.EQ. 等于
-
.NE. 不等于
-
.LT. 小于
-
.LE. 小于等于
-
.GT. 大于
-
.GE. 大于等于
逻辑运算符
-
.AND. 与
-
.OR. 或
-
.NOT. 非
逻辑值:
-
.TRUE. 真
-
.FALSE. 假
赋值
要为变量赋值,在 DMIS 中使用“=”字符是不够的,必须使用变量值后面跟着的 ASSIGN /命令。 首先必须定义变量。
DECL/INTGR,NUM
NUM=ASSIGN/5
获取
OBTAIN/指令用于从元素中获取值。 参数是通过使用其在定义语句中的位置来选择的。 重要的是要考虑 F(label)和 FA(label)或 S(label)和 SA(label)之间的差异。
"/"之后用逗号隔开,索引序号如下图所示:
$$ Obtain 指令示例
F(POI_1)=FEAT/POINT,CART,1.111,2.222,3.333,0,0,1
F(POI_2)=FEAT/POINT,CART,4.444,5.555,6.666,0,0,1
F(POI_3)=FEAT/POINT,CART,7.777,8.888,9.999,0,0,1
FA(POI_1)=FEAT/POINT,CART,1.111,2.222,3.333,0,0,1
FA(POI_2)=FEAT/POINT,CART,4.444,5.555,6.666,0,0,1
FA(POI_3)=FEAT/POINT,CART,7.777,8.888,9.999,0,0,1
DECL/INTGR,I
DECL/CHAR,20,elnm
DECL/DOUBLE,xx,yy,zz
$$ DO 循环运行上面的三点
DO/i,1,3
elnm=ASSIGN/CONCAT('poi_',STR(i))
$$ Third value from the FA(POI_X)
xx=OBTAIN/FA(@elnm),3
yy=OBTAIN/FA(@elnm),4
zz=OBTAIN/FA(@elnm),5
elnm=ASSIGN/CONCAT('newpoi_',STR(i))
F(@elnm)=FEAT/POINT,CART, xx,yy,zz, 0,0,0
FA(@elnm)=FEAT/POINT,CART, xx,yy,zz, 0,0,0
ENDDO
在卷标中使用变量
除了直接指定卷标名外,可以使用间接引用“@”操作符。最多可以使用一级的间接引用。使用间接引用的方法,“@”字符置于名为CHAR的变量前,这个变量包含一个卷标,这个卷标对卷标类型是合法的。如果字符变量曾被声明是多维的,它的名必须跟随一个数组下标.。
循环
DO/index,initial,limit,increment $$(索引,初值,极限值,增量)
...
可执行语句
...
ENDDO
分支语句
IF语句
IF/(逻辑表达式)
可执行语句
ELSE
可执行语句
ENDIF
SWITCH语句
SELECT/arg
CASE/arg—l
可执行语句
ENDCAS
CASE/arg_2
可执行语句
ENDCAS
...
DEFCAS
可执行语句
ENDCAS
ENDSEL
JUMPTO语句
JUMPTO/(jtlmptargetl)
(Jumptarget2)
可执行语句
(jumptargetl)
可执行语句
操作人员输入
TEXT/QUERY语句
TEXT/QUERY,(name),40,A,L,'enter Operator Name:'
PROMPT语语句
DECL/INTGR,NUM
NUM=PROMPT/"请扫码!"
消息
消息在程序执行期间使用,以便与用户通信
$$ Text/OPER: 必须按下 OK 关闭消息框
TEXT/OPER,'请确定工件是否在夹具上!'
$$ Text/MAN: 当您测量第一点时,消息框将自动消失,且在CNC模式下不弹窗
TEXT/MAN,'测量上面的孔'
宏
宏声明
DMIS提供定义宏程序来执行重复性的功能,而不必重新编写全部语句。宏由在MACRO...ENDMAC之间的语句做出声明和定义。每个宏都是用一个CALL语句调用。DMIS宏可以在一个程序单元的内部定义,或在一个模块化程序单元的外部定义。外部宏必须用CALL/EXTERN语句调用。宏拥有一个逗号分割的变量名参数表,当宏被调用时这个表接收参数值。
宏结构
不带参数的宏
M(MACNAME)=MACRO
可执行语句
ENDMAC
带参数的宏
M(MACNAME)=MACRO/var_1,var_2,....
可执行语句
ENDMAC
外部宏文件
外部宏文件是一个 DMIS 程序,它有“.DML"扩展名,以 DMISMD/开始,以 ENDFIL 结束 在文件内部,语法与常规的 DMIS 程序相同,但是包含一系列宏,最近任何包含文件本身的程序都可以调用这些宏。
外部文件声明
外部文件声明块声明包含程序单元的文件,这些程序单元在本地DMIS程序中被使用。外部文件声明以XTERN语句开始并以ENDXTN语句终止。
$$示例
XTERN
EXTFIL/DMIS,'C:\Metrostaff\ArcoCAD Inspection\Support\DmisUtilities\Hex_Slot.dml'
ENDXTN
函数
函数名 | 描述 |
---|---|
ABS(X) | 表示~个数学函数,它返回"X"的绝对值。根据参数类型结果是INTGR、LONG、REAL或DOUBILE。 |
ACOS(x) | 表示一个数学函数,它返回“x”的反余弦。参数类型必须可转换为REAL或DOUBLE,并且必须在定义域-1≤x≤1之间。返回值是DOUBLE类型,并且在范围0≤返回值≤ π之间。 |
ASIN(x) | 表示一个数学函数,它返回“X”的反正弦。变无类型必须可转换为REAL或DOUBLE,并且必须在定义域-l≤x≤1之间。返回值是DOUBLE类型,并且在范围-π/2≤返回值≤π/2之间。 |
ATAN(x) | 表示一个数学函数,它返回“x”的反正切。参数类型必须可转换为REAl或DOUBLE,并且必须在定义域-1≤x≤1之间。返回值是DOUBLE类型,并且在范围-π/2≤返回值≤π/2之间。 |
ATAN2(Y,X) | 表示一个数学函数,它返回“Y”的反正切被“X”除。参数类型必须可转换为REAL或DOUBLE,并且“y”和“x”不能同时为0。“y”和“x”两者的符号被用来决定返回值的象限。返回值是DOUBLE类型,并且在范围-π≤返回值≤π之间。 |
BADGT() | 表示一个布尔函数,如果因为最近执行的GOTO语句一个非预期的传感器碰撞出现,它返回.TRUE.(真)。这个内部函数只有在BADTST是设置为打开和一个GOTO先前已经被执行时可以使用。返回的数据类型是一个布尔值。 |
BADPT() | 表示一个布尔函数,如果前面测量点测量失败,它返回.TRUE.(真)。这个内部函数只有在BADTST是设置为打开和一个点特征测量(MEAS/POINT...ENDMES块)先前已经测量过时可以使用。返回的数据类型是一个BOOL。 |
CHR(x) | 表示一个字符函数,它返回一个包含ASCII字符的长度对应“x”数字值的字符串。支持所有ASCII字符1~255。 |
CONCAT(str,str var_3) | 表示一个字符函数,它返回由两个或更多的字符串或子字符串从左到右串连起来的字符串。结果是变量类型CHAR,它的长度是字符串或子字符串长度的总和。 |
COS(x) | 表示一个数学函数,它返回“x”的余弦。参数是用弧度表达。依据参数类型,结果是一个REAL或DOUBLE。 |
DBLE(X) | 表示一个数学函数,它执行类型转换和返回一个DOUBLE。参数类型必须是可转换成DOUBLE的。 |
DTOR(x) | 表示一个数学函数,它执行角度单位从度到弧度的转换。参数类型必须是可转换成REAL或DOUBLE的。返回值是DOUBLE类型的。 |
ELEMNT(x,char,str) | 表示一个字符函数,它返回被字符char分隔的串“str”的第X单元。返回的数据类型是根据声明。char或者是一个文本文字串包含一个单个字符和由两个单引号分隔,或者是一个CHAR类型串变量的卷标包含一个单个字符。 |
EOF(DID(label)) | 表示一个系统函数,如果文件是在文件结尾(EOF),它返同.TRUE.(真)。 |
EOLN(DID(label)) | 表示一个系统函数,如果文件是在一个行的结尾(EOLN),它返回.TRUE.(真) |
EXP(x) | 表示一个数学函数,它返同一个指数。参数类型必须是可转换成REAL或DOUBLE的,和返回类型是DOUBLE类型。返回值是e(-2.7182818...)的“x”次方。 |
lNDX(str,sstr) | 表示一个字符函数,它返回一个串中一个子串的位置。两个参数都必须是字符串参数。如果串“sstr”作为子串在串“str”内出现,结果是一个整数(INTGR)指出子串“sstr”在“str”中的开始位置。如果“sstr”没有作为子串在“str”内出现,结果是0。如果“sstr”作为子串在“str”内出现多于一次,返回的仅是第一次出现的开始位置。 |
INT(x) | 表示一个数学函数,它执行类型转换和返回一个INTGR。参数类型必须是可转换成DOUBLE的。一个完整的整数是通过截去参数小数部分被返回的。 |
LEN(str) | 表示一个字符函数,它返回一个字符串的长度。参数类型是CHAR,返回值是INTGR表示串的长度。 |
LN(x) | 表示一个数学函数,它返回‘X’的自然对数(底数e=2.7182818...)。参数类型必须是可转换成REAL或DOUBLE的,同时必须大于0。返回值是DOUBLE类型的。 |
LOG(x) | 表示一个数学函数,它返回“x”的常用对数(底数10)。参数类型必须是可转换成REAL或DOUBLE的,同时必须大于0。返回值是DOUBLE类型的。 |
LWC(str) | 表示一个字符函数,它返回字符串的小写,参数类型为CHAR,返回值为与其对应的小写的ASCII码字符。 |
MN(X,X VAR_2) | 表示一个数学函数,它返回最小参数值。参数类型必须是INTGR、LONG、REAL或DOUBLE。最少要求两个参数。返回类型和具有最高优先级类型的参数相同。 |
MOD(X,Y) | 表示一个数学函数,它返回“x”被…Y’除的余数。根据参数类型,结果是INTGR、LONG、REAL或DOUBLE。结果是x-(INT(x/y)*y)。如果“y”等于0,结果是未定义的。 |
MX(X,X VAR_2) | 表示一个数学函数,它返回最大参数值。参数类型必须是INTGR、LONG、REAL或DOUBLE。最少要求两个参数。返回类型和具有最高优先级类型的参数相同。 |
NINT(x) | 表示一个数学函数,它通过取整到最近的整数值执行类型转换。结果是INTGR,参数应为REAL或DOUBLE。 |
ORD(x) | 表示一个字符函数,它返回作为类型INTGR的"X"的序数值。对于一个BOOL类型参数,如“x”是伪(.FALSE.),返回值是0;如果“x”是真(.TRUE.)返回值是1。对于一个CHAR类型的参数,返回值是相应的十进制ASCII字符。 |
PTDATA(featname) | 表示一个数学函数,它返回已测量元素(featname)的实际测量点数。参数类型为FA(CHAR)类型,返回值类型为INTGR类型。 |
RL(x) | 表示一个数学函数,它执行类型转换和返回一个REAI。。参数必须是可转换成REAL的。 |
RTOD(X) | 表示一个数学函数,它执行从弧度到度的角度转换。参数类型必须是可转换成REAL或DOUBLE的。返回类型是DOUBLE类型的。 |
SCFEAT() | 表示一个系统函数,它返回当前正在被测量的特征的卷标。如果在一个CALIB...ENDMES块、MEAS...ENDMES块或RMEAS...ENDMES块之外,一个零长度串被返回。数据类型是CHAR。 |
SCDAT() | 表示一个系统函数,它返回当前引用坐标系的名称。 |
SCSNS() | 表示一个系统函数,它返回当前选用的传感器的卷标。数据类型是CHAR,n;其中n是卷标名的长度和将少于或等于最长卷标名长度。 |
SDATE() | 表示一个系统函数,它按“yyyy/mm/dd”形式返回系统的当前日期,其中yyyy是年,mm是月份数,和dd是日期。返回值是CHAR类型。 |
SDATETIME() | 表示一个系统函数,它按“yyyy/mm/dd hh:min:ss”形式返回系统的当前日期,其中yyyy是年,mm是月份数,dd是日期,hh是小时,min是分钟,ss是秒。返回值是CHAR类型。 |
SENSNOTOUCH() | 一个系统函数,如果探测到没有接触,它返回DME特定错误代码。DME特定错误代码在特征化文件中给出。 |
SERROR() | 表示一个系统函数,当一个DME错误出现时,它返回错误代码。应为“ILLEGAL-TOUCH”、“NOTOUCH”或DME特定错误代码。一个DME特定错误代码数字将被作为CHAR类型返回和它是在特征化文件中给出。 |
SIGN(x,y) | 表示一个数学函数,在符号改变后它返回一个值。根据参数类型,结果是INTGR、LONG、REAL或DOUBLE。如果“y”是大于或等于0,结果是“x”。如果“y”小于0,结果是“-X”。 |
SILTCH() | 表示一个系统函数,对于一个非法接触它返回DME特定错误代码。DME特定错误代码在特征化文件中给出。 |
SIN(x) | 表示一个数学函数,它返回“X”的正弦。参数是用弧度表达。依据参数类型,结果是一个REAL或DOUBLE。 |
SMODE() | 表示当前系统的操作方式。返回值是“AUTO”、“PROG”或“MAN”之中的一个。数据类型是CHAR。 |
SQRT(x) | 表示一个数学函数,它返回一个主平方根。参数类型必须是可转换成REAL或DOUBLE的,和参数值必须大于或等于0。返回值将是大于或等于零的。返回类型是DOUBLE类型。 |
STIME() | 表示一个系统函数,它按“hh:mm;SS”形式返回当前系统时钟的读数,其中hh是钟点从0~23,mm是分钟,ss是秒钟。返回值是CHAR类型。 |
STR(x) | 表示一个字符函数,它返回一个参数的字符串表达。参数类型必须是可转换(使用INT())成INTGR的。返回类型是CHAR。没有结尾空白产生。 |
SUBSTR(str,x,y) | 表示一个字符函数,它返回一个子串或串“str”的一部分。“X”是一个整数型表达,它指出子串第一个字符的位置。“y”是一个整数型表达,它指出子串最后一个字符的位置。如果“Y”是缺省的,返回的子串是从“X”到串“str”的结尾。 |
TAN(X) | 表示一个数学函数,它返回“X”的正切。参数是用弧度表达。依据参数类型,结果是一个REAL或DOUBLE。 |
TRIM(str) | 表示一个字符串函数,它返回字符表达式“str”定义的字符串,并将其所有前导和尾随空格剥离为字符类型的新文本字符串。 |
UPC(str) | 表示一个字符函数,它返回字符串的大写,参数类型为CHAR,返回值为与其对应的大写的ASCII码字符。 |
VAL(str) | 表示一个字符函数,它转换一个数字字符串参数成为一个数值数据类型。参数类型是CHAR。字符串中第一个非空白字符必须是一个十进制数字(0~9),一个正号或负号,或一个小数点。余下的字符必须是十进制数字或一个小数点和必须构成一个合法的数字常数。根据参数值表示的数量和精度返回类型是INTGR、LONG、REAL或DOUBLE。 |
元素的参数列表
访问元素的单点
访问元素的单点时, 需要用到 PTDATA/指令。 在下面这个例子中,它展示了如何读取一个元素的测量点。
$$ 三点测量一个圆
F(C1)=FEAT/CIRCLE,INNER,CART,0.0000,0.0000,0.0000,0.00000000,0.00000000,1.00000000,20.0000
MEAS/CIRCLE,F(C1),3
PTMEAS/CART,6.0000,0.0000,0.0000,-1.00000000,0.00000000,0.00000000
PTMEAS/CART,-3.0000,5.1962,0.0000,0.50000000,-0.86602540,0.00000000
PTMEAS/CART,-3.0000,-5.1962,0.0000,0.50000000,0.86602540,0.00000000
ENDMES
$$声明必要的变量
DECL/DOUBLE,xx,yy,zz,ii,jj,kk
DECL/INTGR,npt1,aa
DECL/CHAR,100,st1
$$使用 PTDATA/指令得到圆中测量的点的个数
npt1=ASSIGN/PTDATA(FA(C1))
$$以元素的点数循环,并以此为顺序创建信息的点元素。
$$使用指令 FA(name)[numPoint]访问每个单点的属性。
DO/aa,1,npt1,1
xx=OBTAIN/FA(C1)[aa],4
yy=OBTAIN/FA(C1)[aa],5
zz=OBTAIN/FA(C1)[aa],6
ii=OBTAIN/FA(C1)[aa],8
jj=OBTAIN/FA(C1)[aa],9
kk=OBTAIN/FA(C1)[aa],10
st1=ASSIGN/STR(aa)
F(@st1)=FEAT/POINT,CART,xx,yy,zz,ii,jj,kk
FA(@st1)=FEAT/POINT,CART,xx,yy,zz,ii,jj,kk
ENDDO
$$注:
$$在元素之后添加[N],表示调用元素中的第 N 个点,如 FA(CIR_1)[5],意思是元素(CIR_1) 的第 5 个点。
用不同的算法计算元素
用不同的算法计算元素不需要对元素本身进行重新测量,但可以利用已有的点进行重新拟合。 此功能通常用于从现有点云构建元素,或使用不同的拟合算法重新计算元素。 该语句是在没有用户界面的情况下手动编写的。
$$开始示例
MODE/PROG,MAN
F(CIR_61)=FEAT/CIRCLE,INNER,CART,0,0,0,0,0,1,250
MEAS/CIRCLE,F(CIR_61),100
ENDMES
$$滤波
$$特定的算法可能被模态GEOALG语句激活。
F(CIR_62)=FEAT/CIRCLE,INNER,CART,0,0,0,0,0,1,250
GEOALG/CIRCLE,LSTSQR,FILTER,CIRCULAR,LOWPASS,6.0,GAUSS
CONST/CIRCLE,F(CIR_62),TR,FA(CIR_61)
$$获取该特性的点数
DECL/INTGR,pointNum
$$使用下面这个
pointNum=ASSIGN/PTDATA(FA(CIR_2111))
$$或者这个
pointNum=VALUE/FA(CIR_2111),PTDATA
$$使用最小外切圆重新构造 refitting using MINCIR
GEOALG/CIRCLE,MINCIR
F(CIR_2F_MIN)=FEAT/CIRCLE,INNER,CART,0.0,0.0,16.0,0,0,1,32.0
CONST/CIRCLE,F(CIR_2F_MIN),BF,FA(CIR_2111)[1],FA(CIR_2111)[2,pointNum]
$$使用最小二乘法重新构造 refitting using LEASTSQUARE
GEOALG/CIRCLE,LSTSQR
F(CIR_2F_least)=FEAT/CIRCLE,INNER,CART,0.0,0.0,16.0,0,0,1,32.0
CONST/CIRCLE,F(CIR_2F_least),BF,FA(CIR_2111)[1],FA(CIR_2111)[2,pointNum]
$$使用圆中的点构造平面 fitting plane using points from Circle
F(PLA_1)=FEAT/PLANE,CART,0.0,0.0,16.0,0,0,1
CONST/PLANE,F(PLA_1),BF,FA(CIR_2111)[1],FA(CIR_2111)[2,pointNum]
计算运行时间
此方法用于计算程序运行中两个时刻之间的时间,通常用于计算程序的运行时间。
$$示例…
DECL/CHAR,100,start_time,end_time,elapsed_time_form1, elapsed_time_form2
$$读取开始时间
start_time = ASSIGN/SDATETIME()
$$ 停止执行 2 秒
DMESW/DELAY,2
$$读取结束时间
end_time = ASSIGN/SDATETIME()
$$包含天数的运行时间
elapsed_time_form1 = ASSIGN/SELAPSETIME(start_time, end_time, LONG)
$$ 不包含天数的运行时间
elapsed_time_form2 = ASSIGN/SELAPSETIME(start_time, end_time, SHORT)
$$注:
$$LONG 指令所获取最终数据的格式为:天/时/分/秒
$$SHORT 指令所获取最终数据的格式为:时/分/秒
通过 DMIS 调用外部应用
为了从 Dmis 调用外部可执行文件,要执行的命令是 CALL /EXTERN,SYS。 .exe 可以带或不带额外参数运行。
不含参数的外部程序
$$本例打开记事本,并在记事本打开时暂停 ARCO 执行
CALL/EXTERN, SYS, 'notepad.exe', WAIT
仅含有一个参数的外部程序
$$本例使用记事本打开 c:\TEST.TXT 文件,并在记事本打开时暂停 ARCO 执行
CALL/EXTERN, SYS, 'notepad.exe', WAIT, 'C:\TEST.TXT'
CALL/EXTERN, SYS, 'notepad.exe', CONT, 'C:\TEST.TXT
Parameters 参数 WAIT 指令在外部程序执行期间,软件会暂停,直到外部指令执行完毕。 CONT 指令在外部程序执行期间不会暂停,他跟外部程序的运行是相互独立的。
读取安装文件夹
通过使用非标准 DMIS 命令查询环境变量,可以读取安装文件夹。 函数 GETENV/用于读取安装文件夹中的各种 ARCO 应用程序,每个应用程序都有一个特定的关键字来调用文件夹。 这个函数从 3.4.9 版本开始就可以使用,通用指令是:
DECL/CHAR,200, STR1
STR1=ASSIGN/GETENV('ARCOSETUPFOLDER')
读取当前接近、回退、搜索距离
为了赋值给变量接近、回退、搜索的当前值,需要执行一个标准的 DMIS 指令 VALUE/。 具体来说,通过使用下面的语法赋值返回值:
指令 | 描述 |
---|---|
VALUE/SNSET,APPRCH | 将当前接近距离分配给变量 |
VALUE/SNSET,RETRCT | 将当前回退距离分配给变量 |
VALUE/SNSET,SEARCH | 将当前搜索距离分配给变量 |
$$声明返回变量
DECL/DOUBLE,CurrentValue
$$返回当前接近距离
CurrentValue=VALUE/SNSET,APPRCH
$$返回当前回退距离
CurrentValue=VALUE/SNSET,RETRCT
$$返回当前搜索距离
CurrentValue=VALUE/SNSET,SEARCH
读取温度
用于读取每个轴/部件传感器的温度值。 通常可用于向报表发送用于补偿的温度值。
$$开始示例
DECL/DOUBLE,pezzo1,pezzo2,assex,assey,assez
$$零件传感器 1
pezzo1=ASSIGN/QTEMP('P1')
$$零件传感器 2
pezzo2=ASSIGN/QTEMP('P2')
$$X 轴传感器
assex=ASSIGN/QTEMP('x')
$$Y 轴传感器
assey=ASSIGN/QTEMP('y')
$$Z 轴传感器
assez=ASSIGN/QTEMP('z')
删除一个文件
删除文件的方式是通过使用非 dmis 语句实现的。 由于没有用户界面可以添加,所以代码应该使用以下语法手动输入:
DECL/CHAR,200,filePath
filePath = ASSIGN/'D:\FileToDelete.txt'
DID(READFILE)=DEVICE/STOR,filePath
OPEN/DID(READFILE),DIRECT,OUTPUT,OVERWR
WRITE/DID(READFILE),'Test String'
CLOSE/DID(READFILE),DELETE
CALL/EXTERN,DME,'FILE_SYSTEM','REMOVE',CONCAT(filePath,'')
编辑数字 I/O
外部数字 I/O 可以由程序管理与一系列非 DMIS 命令。 这些命令可以应用于控制器级别的 I/O(如果支持)或外部 I/O 卡(在 Arco 控制面板上验证是否有合适的卡)。
读取一个正在输入的值
这些命令在执行命令时读取输入值。 语法 : INPUT_READ(input_number,card_name)
其中: input_number: 要读取的输入数是多少 card_name: 是附加卡的标签,如 Arco 控制面板中所述。 如果没有指定 card_name 值,则从控制器而不是从附加板读取输入。 示例:
$$从控制器中读取 5 号输入值
DECL/BOOL,RSLT
RSLT=ASSIGN/ INPUT_READ(5)
$$从控制面板中设置“MyBoard”标签的外部板卡读取 5 号输入值。
RSLT=ASSIGN/ INPUT_READ(5,’MyBoard’)
等待设置输入掩码
此命令将等待输入掩码激活,然后继续执行。 语法:
CALL/EXTERN,DME,'logical_IO','wait_for_input_mask','card_name', input_number,value, input_number,value
其中: card_name: 是附加板卡的标签,如 Arco 控制面板中所述。 input_number: 要读取的输入数是多少 value: 是输入的期望值(.TRUE.或.FALSE.) 如果没有指定 card_name 值,则从控制器而不是从附加板卡中读取输入。 示例:
$$一直等到控制器 IO 板卡上的输入 5 为真, 6 为假
CALL/EXTERN,DME,'logical_IO','wait_for_input_mask',5, .TRUE.,6, .FALSE.
$$在控制面板中名为“myBoard”的外部板卡上等待,直到输入 5 为真,输入 6 为假
CALL/EXTERN,DME,'logical_IO','wait_for_input_mask',’myBoard’, 5, .TRUE.,6, .FALSE.
把值写入输出中
此命令设置输出的值。 语法:CALL/EXTERN,DME,'logical_IO','output_set', 'card_name', input_number,value
其中: card_name: 是附加板卡的标签,如 Arco 控制面板中所述。
input_number: 要读取的输入数是多少 value: 是要设置的值(.true.或.false.) 如果没有指定 card_name 值,则从控制器而不是从附加板卡读取输入。 示例:
$$在控制器 IO 板上将输出 5 设置为 true
CALL/EXTERN,DME,'logical_IO', 'output_set',5,.TRUE.
$$在控制面板中名为“myBoard”的外部板上将输出 5 设置为 true
CALL/EXTERN,DME,'logical_IO', 'output_set',’myBoard’,5,.TRUE.
★重要提示 指令:IOSET,n 和 IORESET,n 从 3.6 版已经过时,不再可用。
DMESW指令
DMESW指令用于在输入文件中控制被送到DME的数据或数据的处理。
延时
为延时执行程序,需要用 DELAY指令。 参数表示停顿的秒数。
$$ 停止执行工件程序 2 秒
DMESW/DELAY,2
以命令的形式执行变量
由于 DMIS 结构的原因,有时需要构建一个指令作为变量,然后执行它。
这个应用程序的一个典型例子是对非固定数量的元素进行最合适的构造,为了做到这一点,需要使用构造中涉及的所有特性的名称构建变量,然后作为指令执行该变量。
COMAND表示随后以单引号包围的由字母数字构成的字符串将被作为一个DME特定命令解释。
如何使用变量作为指令的例子如下:
$$首先,我们声明一个字符变量(定义为 COMMAND),它将包含我们的命令
DECL/CHAR,200,COMMAND
$$然后将命令行分配给变量
COMMAND=ASSIGN/'F(POI_1)=FEAT/POINT,CART, 1.111,2.222,3.333, 0,0,0'
$$使用此命令行可以执行已记忆的命令
DMESW/COMAND,COMMAND
文件处理
写入到文件
指令 WRITE/用于在打开的文件中写入和存储数据。
$$ Write 指令示例
DECL/CHAR,50,filnm,elnm
DECL/INTGR,i
DECL/DOUBLE,xx,yy,zz
TEXT/QUERY,(filnm),50,A,L,'insert file name'
filnm=ASSIGN/CONCAT('C:\',filnm,'.TXT')
DID(F1)=DEVICE/STOR,filnm
$$ 创建虚拟点
F(POI_1)=FEAT/POINT,CART, 1.111,2.222,3.333, 0,0,0
F(POI_2)=FEAT/POINT,CART, 4.444,5.555,6.666, 0,0,0
F(POI_3)=FEAT/POINT,CART, 7.777,8.888,9.999, 0,0,0
FA(POI_1)=FEAT/POINT,CART, 1.111,2.222,3.333, 0,0,0
FA(POI_2)=FEAT/POINT,CART, 4.444,5.555,6.666, 0,0,0
FA(POI_3)=FEAT/POINT,CART, 7.777,8.888,9.999, 0,0,0
$$这一行以输出设备的形式打开文件
OPEN/DID(F1),DIRECT,OUTPUT,OVERWR
DO/i,1,3
$$从点元素中获取值
elnm=ASSIGN/CONCAT('poi_',STR(i))
xx=OBTAIN/FA(@elnm),3
yy=OBTAIN/FA(@elnm),4
zz=OBTAIN/FA(@elnm),5
$$ Write 指令在输出文件中写入所需的值
WRITE/DID(F1),xx
WRITE/DID(F1),yy
WRITE/DID(F1),zz
ENDDO
CLOSE/DID(F1)
从文件读取
指令 READ/是用于从一个打开的文件中获取值
$$ Read 指令示例
DECL/CHAR,50,filnm, result
DECL/CHAR,50,xyz
DECL/DOUBLE,xx,yy,zz
TEXT/QUERY,(filnm),50,A,L,'insert file name'
filnm=ASSIGN/CONCAT('C:\',filnm,'.TXT')
DID(F1)=DEVICE/STOR,filnm
$$这一行以输入设备的形式打开文件。
OPEN/DID(F1),DIRECT,INPUT
$$ Read 命令从输入文件中读取值并声明一个点
READ/DID(F1),xx
READ/DID(F1),yy
READ/DID(F1),zz
F(POI_10)=FEAT/POINT,CART, xx,yy,zz, 0,0,0
FA(POI_10)=FEAT/POINT,CART, xx,yy,zz, 0,0,0
$$ Read 命令从输入文件中读取值并声明一个点
READ/DID(F1),xx
READ/DID(F1),yy
READ/DID(F1),zz
F(POI_20)=FEAT/POINT,CART, xx,yy,zz, 0,0,0
FA(POI_20)=FEAT/POINT,CART, xx,yy,zz, 0,0,0
$$ Read 命令从输入文件中读取值并声明一个点
READ/DID(F1),xx
READ/DID(F1),yy
READ/DID(F1),zz
F(POI_30)=FEAT/POINT,CART, xx,yy,zz, 0,0,0
FA(POI_30)=FEAT/POINT,CART, xx,yy,zz, 0,0,0
result=ASSIGN/CONCAT(STR(xx),' , ',STR(yy),' , ',STR(zz))
TEXT/OPER,result
CLOSE/DID(F1)
处理环境变量
在 ARCO 中,可以在 Windows 注册表中创建、读取和删除条目,这样用户就可以使用特定的环境变量。
设置和读取环境变量
这是用来设置通用变量,可以从所有不同的部分程序读取。 典型的用法是从所有程序中复制结果文件的路径。 应用实例: 从工件程序中设置环境文件夹:
$$声明基本变量
DECL/CHAR,200, STR1
STR1=ASSIGN/'C:\Report Folder'
$$使用指令 SETENV/在注册表中创建条目
SETENV/'MY_REPORT_FOLDER', STR1
程序从所有其他程序中读取文件夹并在其中输出:
$$声明基本变量
DECL/CHAR,200, STR2
$$使用 GETENV/指令从注册表中读取条目
STR2=ASSIGN/GETENV('MY_REPORT_FOLDER')
$$声明基本变量、虚构点、公差并创建输出
DECL/CHAR,200, STR2
DECL/CHAR,200, STR3
STR3=ASSIGN/CONCAT(str2,'output.mea')
DID(OUT_FILE)=DEVICE/STOR,STR3
F(q)=FEAT/POINT,CART,00,0,0,0,0,1
FA(q)=FEAT/POINT,CART,00,0,0,0,0,1
T(CORTOL_1)=TOL/CORTOL,XAXIS,-0.1000,0.1000
T(CORTOL_2)=TOL/CORTOL,YAXIS,-0.1000,0.1000
T(CORTOL_3)=TOL/CORTOL,ZAXIS,-0.1000,0.1000
OPEN/DID(OUT_FILE),FDATA,V(TEXT),OUTPUT,OVERWR
OUTPUT/FA(Q),TA(CORTOL_1),TA(CORTOL_2),TA(CORTOL_3)
CLOSE/DID(OUT_FILE)
删除环境变量
这用于清除以前设置的环境通用变量。 应用的一个例子是: 从一个工件程序中设置环境文件夹:
$$ 设置基本变量
DECL/CHAR,200, STR1
STR1=ASSIGN/'C:\Report Folder')
$$使用指令 SETENV/在注册表中创建条目
SETENV/'MY_REPORT_FOLDER', STR1
从另一个部分程序,我们清除环境文件夹:
$$使用指令 DELENV/从注册表中删除条目
DELENV/'MY_REPORT_FOLDER'
读取文件的一整行
从版本 3.6 开始,使用READLN/已经实现可以从文本文件中读取整行。 该命令是非标准的 DMIS 命令,用于扩展文件处理功能。
请看示例:
$$Readln 指令示例
DECL/CHAR,50,filnm,elnm
DECL/CHAR,100,read_str1,read_str2,read_str3
DECL/CHAR,100,write_str1,write_str2,write_str3
$$ 这是要创建一个要读取的虚拟文件
write_str1=assign/'data1,1,2,3,4,5'
write_str2=assign/'data2,1,2,3,4,5'
write_str3=assign/'data3,1,2,3,4,5'
$$这一行以输出设备的形式打开文件。
TEXT/QUERY,(filnm),50,A,L,'insert file name'
filnm=ASSIGN/CONCAT('C:\',filnm,'.TXT')
DID(F1)=DEVICE/STOR,filnm
OPEN/DID(F1),DIRECT,OUTPUT,OVERWR
WRITE/DID(F1),write_str1
WRITE/DID(F1),write_str2
WRITE/DID(F1),write_str3
CLOSE/DID(F1)
$$从文件中整行读取
$$Read Line 指令示例
OPEN/DID(F1),DIRECT,INPUT
READLN/DID(F1),read_str1
TEXT/OPER,read_str1
READLN/DID(F1),read_str2
TEXT/OPER,read_str2
READLN/DID(F1),read_str3
TEXT/OPER,read_str3
CLOSE/DID(F1)
指定 EXCEL 输出
创建并设置EXCEL基本格式
-
首先在指定的位置创建一个EXCEL表格
如示例中的C:\Metrostaff\ArcoCAD Inspection\Reports
-
在创建的EXCEL表格中设置好需要的格,见下图:
-
设置好之后保存。
打开输出设备
-
在【ARCO Quick Programmer】打开【输入/输出】页面,双击打开【扩展】
-
输入新设备名称,在【文件】复选框中选择设置好的Excel表格,点击【加】按钮,再点击【打开/关闭】选项卡。
-
在【状态】选择【打开报告文件】,在【格式】中选择【原厂】→【EXCEL】,在【模式】中选择【附加】,点击【加】按钮,最后点击【确定】。
指令
指定 EXCEL 输出不是使用标准的DMIS指令,而是通过ARCO特定的非DMIS语言实现的。
设置当前的文件簿:
CALL/EXTERN,DME, 'EXCEL' , 'WORKSHEET', 1
此条指令是用来设置 EXCEL 中的第一个工作簿作为输出的对象,上面指令中的 1 就是表示第一个工作簿,如果第一个工作簿已经 命名,假设其命名为 "FRONT",我们也可以是用如下指令
CALL/EXTERN,DME,'EXCEL','WORKSHEET','FRONT'
写入一个绝对位置的单元格:
CALL/EXTERN,DME,'EXCEL','CELL','C',6 ,'ABS'
此条指令是用来在选中的工作簿中指定一个绝对输出位置,上面指令就是指定 C6 单元格为输出单元格。单元格的绝对位置也可以用纯数字表示比上面的指令可以表示为:
CALL/EXTERN,DME,'EXCEL','CELL',3 , 6,'ABS'
写入一个相对位置的单元格:
CALL/EXTERN,DME,'EXCEL','CELL',-3,1,'INC'
此条指令是用来在选中的工作簿中指定一个相对输出位置,上面指令就是相对于上一个单元格后退 3 行前进 1 列的位置为输出单元格。
设置位置的自动增量:
CALL/EXTERN,DME,'EXCEL','INCREMENT',1,0
此条指令是当上一个单元格输出完毕后自动指定下一个输出单元格的位置。
输出属性值:
CALL/EXTERN,DME,'OUTPUT','ATTRIBUTES',' Y'
此条指令是设置向单元格的输出内容,上面指令表示将元素的 Y 值输出到单元格中。
保存文件:
CALL/EXTERN,DME,'EXCEL','SAVE'
CALL/EXTERN,DME,'EXCEL','SAVEAS','C:\METROSTAFF\Q2.XLSX'
上面两条指令是用来保存输出到 EXCEL 数据用的,如果没有数据将不会保存,在大多数情况下是用第二条指令来保存数据。
程序示例
SNSLCT/S(P_1)
MODE/PROG,MAN
F(CIR_1)=FEAT/CIRCLE,INNER,CART,0.0000,0.0000,-2.0000,0.00000000,0.00000000,1.00000000,30.0000
MEAS/CIRCLE,F(CIR_1),4
PTMEAS/CART,15.0000,0.0000,-2.0000,-1.00000000,0.00000000,0.00000000
GOTO/11.0000,0.0000,-2.0000
GOTO/ARC,7.7782,7.7782,-2.0000,0.0000,11.0000,-2.0000
PTMEAS/CART,0.0000,15.0000,-2.0000,0.00000000,-1.00000000,0.00000000
GOTO/0.0000,11.0000,-2.0000
GOTO/ARC,-7.7782,7.7782,-2.0000,-11.0000,0.0000,-2.0000
PTMEAS/CART,-15.0000,0.0000,-2.0000,1.00000000,0.00000000,0.00000000
GOTO/-11.0000,0.0000,-2.0000
GOTO/ARC,-7.7782,-7.7782,-2.0000,0.0000,-11.0000,-2.0000
PTMEAS/CART,0.0000,-15.0000,-2.0000,0.00000000,1.00000000,0.00000000
ENDMES
F(CIR_2)=FEAT/CIRCLE,OUTER,CART,28.0000,-71.0000,-2.0000,0.00000000,0.00000000,1.00000000,24.0000
MEAS/CIRCLE,F(CIR_2),4
PTMEAS/CART,40.0000,-71.0000,-2.0000,1.00000000,0.00000000,0.00000000
GOTO/44.0000,-71.0000,-2.0000
GOTO/ARC,39.3137,-59.6863,-2.0000,28.0000,-55.0000,-2.0000
PTMEAS/CART,28.0000,-59.0000,-2.0000,0.00000000,1.00000000,0.00000000
GOTO/28.0000,-55.0000,-2.0000
GOTO/ARC,16.6863,-59.6863,-2.0000,12.0000,-71.0000,-2.0000
PTMEAS/CART,16.0000,-71.0000,-2.0000,-1.00000000,0.00000000,0.00000000
GOTO/12.0000,-71.0000,-2.0000
GOTO/ARC,16.6863,-82.3137,-2.0000,28.0000,-87.0000,-2.0000
PTMEAS/CART,28.0000,-83.0000,-2.0000,0.00000000,-1.00000000,0.00000000
ENDMES
F(POI_1)=FEAT/POINT,CART,36.2339,-40.2722,0.0000,0.00000000,0.00000000,1.00000000
MEAS/POINT,F(POI_1),1
PTMEAS/CART,36.2339,-40.2722,0.0000,0.00000000,0.00000000,1.00000000
ENDMES
V(EXCEL)=VFORM/DME,'EXCEL',ALL
DID(D1)=DEVICE/STOR,'C:\METROSTAFF\ARCOCAD INSPECTION\REPORTS\EX1.xlsx'
OPEN/DID(D1),FDATA,V(EXCEL),OUTPUT,APPEND
CALL/EXTERN,DME,'EXCEL','WORKSHEET',1
CALL/EXTERN,DME,'EXCEL','INCREMENT',0,1
$$写入一个绝对位置的单元格:
CALL/EXTERN,DME,'EXCEL','CELL','B',2,'ABS'
T(CORTOL_1)=TOL/CORTOL,XAXIS,-0.1000,0.1000
T(CORTOL_2)=TOL/CORTOL,YAXIS,-0.1000,0.1000
T(DIAM_1)=TOL/DIAM,-0.1000,0.1000
OUTPUT/FA(CIR_1),TA(CORTOL_1)
OUTPUT/FA(CIR_1),TA(CORTOL_2)
OUTPUT/FA(CIR_1),TA(DIAM_1)
CALL/EXTERN,DME,'EXCEL','CELL','C',2,'ABS'
OUTPUT/FA(CIR_2),TA(CORTOL_1)
OUTPUT/FA(CIR_2),TA(CORTOL_2)
OUTPUT/FA(CIR_2),TA(DIAM_1)
CALL/EXTERN,DME,'EXCEL','SAVEAS','C:\METROSTAFF\ARCOCAD INSPECTION\REPORTS\EX2.xlsx'
CLOSE/DID(D1)
ENDFIL
向串口输出数据
这是用来写字符串到 COM 端口,一个典型的用途是把信息发送到一个外部软件或设备。 设置端口的字符串如下: ‘PortName:Speed,Parity,Bit,Control’. 此语句是手动编写的,没有用户界面。
$$开始示例
DECL/CHAR,10,my_var
DECL/INTGR,ii
my_var=ASSIGN/'Here the value assigned!'
$$打开 COM 口
DID(my_com_device)=DEVICE/COMM,'com3:9600,n,8,1'
OPEN/DID(my_com_device),DIRECT,INPUT
DO/ii,1,10,1
WRITE/DID(my_com_device),'Here the String WRITTEN directly!!'
WRITE/DID(my_com_device),my_var
ENDDO
$$关闭接口
CLOSE/DID(my_com_device)
附:ASCII码表
ASCII值 | 控制字符 | ASCII值 | 字符 | ASCII值 | 字符 | ASCII值 | 字符 |
---|---|---|---|---|---|---|---|
0 | NUT | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | " | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | , | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | S | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | TB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | / | 124 | | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ` |
31 | US | 63 | ? | 95 | _ | 127 | DEL |
ASCII 码大致由以下两部分组成:
-
ASCII 非打印控制字符: ASCII 表上的数字 0-31 分配给了控制字符,用于控制像打印机等一些外围设备。
-
ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。