视觉资料视觉脚本手册20160412_第1页
视觉资料视觉脚本手册20160412_第2页
视觉资料视觉脚本手册20160412_第3页
视觉资料视觉脚本手册20160412_第4页
视觉资料视觉脚本手册20160412_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 无锡信捷电气股份视觉脚本使用手册 目录 一、脚本功能11.1 工具结果读取11.2 用户交互21.3 输出端控制41.4 工具运算41.5 高级开发功能6二、脚本基本语法说明72.1 数据类型7(1) Int:整型7(2) Float:浮点型8(3) Array:数组8(4) Var:任意对象82.2 、语句支持及风格8(1) 条件判断(if)8(2) 循环语句(for;while)10(3) 运算符11三、功能函数12数学库函数12创建对象函数14几何运算函数15控制类函数15区域运算函数16映射区域数据存取17其他高级函数183.13.23.33.43.53.63.7四、应用示例204.

2、14.24.34.44.5根据工具结果控制输出端20动态修改检测区域21排序类示例22获取轮廓顶点25分类检测27五、注意事项295.15.25.35.45.55.6数值有效性问题29全局变量的有效性问题30多个脚本之间的相互包含问题30检测区域的修改问题31工具使能的索引问题31数据配置类型问题31 无锡信捷电气股份信捷机器视觉脚本编程使用说明书一、 脚本功能1.1 工具结果读取用户可以通过脚本取出工具结果的值,这里值得注意的是索引号从 0 开始,比如要 取出斑点 1 集合里的参数,索引号则为 0。 (1)取出斑点 1 上的面积首先利用斑点计数工具将图像上的图形找到,然后打开脚本工具,单击“

3、添加”,添加 一个全局变量,变量名为 val1,类型为 int,这样可以在工具 tool2 的结果中看到斑点 1 面 积。(索引号从 0 开始)代码如下:1 无锡信捷电气股份int a;a=tool1.Out.blobSet0.mark.markArea;/精斑点1的面积值赋给atool2.val1=a;/将 a 的值赋给工具 tool2 中的全局变量 val1(2)取出斑点 2 上的中心坐标代码如下:float a=0;float b=0;a=tool1.Out.blobSet1.mark.centrePoint.x; /将斑点2的中心点x坐标值赋给ab=tool1.Out.blobSet1

4、.mark.centrePoint.y; /将斑点2的中心点y坐标值赋给btool3.val1=a;/将a的值赋给工具tool3中的全局变量val1 tool3.val2=b;/将 b 的值赋给工具tool3 中的全局变量 val21.2用户交互在上例的基础上设置 Modbus 配置和 Modbus 输出。在 Modbus 配置中添加 tool1 中 的最小匹配度,在 Modbus 输出中可以监控。 2 无锡信捷电气股份在 Modbus 输出监控中的tool1 最小匹配度的值设置为 20,图像结果如图 1.2.1 图像显示窗口 a 所示。图 1.2.1 图像显示窗口a将 tool1 最小匹配度

5、的值设置为 50,则图像结果为图 1.2.2 图像显示窗口b 所示 3 无锡信捷电气股份图 1.2.2 图像显示窗口b注:要看相机中的实际数据时需在“Modbus 输出监控”中选择“相机”,选仿真时显示 的是上位机的数据。1.3 输出端控制 writeoutput,写外部端子(端,数值)writeoutput 函数用于写外部输出端子,其端只有 0-3 号口有效(Y0,Y1,Y2,Y3)。 其中数值:1 为 ON,0 为 OFF。代码:writeoutput(0,1); /将外部端子 Y0 写入 1。1.4 工具运算 (1)dotdotmiddot, 点点中点用点定位工具中的沿直线段定位工具在图

6、像中找到两个点,再通过脚本中的点点中点函 数将两个点的中点找到,并将值赋给局部变量 middot。定义两个全局变量,类型为 float, 将中点的 x 和 y 分别赋到两个全局变量中。 4 无锡信捷电气股份代码:var middot=dotdotmiddot(tool1.Out.point,tool2.Out.point);tool3.val1=middot.x;tool3.val2=middot.y;注:定义任意对象 middot,将两点定位工具定位到的点的中点赋给 middot。(2) arraynewint, 创建 int 型数组定义一个有 3 个元素的数组,并分别赋值为 1,2,3。代

7、码:var arr=arraynewint(3);arr0=1;arr1=2;arr2=3;(3) dotdotdis, 点点距离(两点之间距离)定义一个局部变量dotdis,类型为 float,如果需要将这个距离输出到外部则添加一个 全局变量 val1,类型为 float。dotdis 的值就是两点的距离,其单位为像素。 代码:5 无锡信捷电气股份float dotdis;dotdis=dotdotdis(tool1.Out.point,tool2.Out.point);tool3.val1=dotdis;1.5 高级开发功能 例如在本工程用于检测最左侧顶点的坐标,用于后续裁剪。可以看到图

8、1.5.1 中的图像, 在本示例总则是要找到图像定位中位于最左侧的坐标。图 1.5.1 图像显示窗口步骤 1:用斑点定位工具找到图形,修改的参数如下,其余默认。 边界限制:最大值:1000000面积限制:最大值:5000000步骤 2:在脚本工具中定义 3 个全局变量。 步骤 3:详细代码见第四章的获取轮廓顶点示例。 工具结果显示如下:6 无锡信捷电气股份二、脚本基本语法说明1)参数类型参数类型可能出现 int、float、object、array。2)方法名(函数名)方法名即为方法使用时所需要输入的函数名。3)返回值类型即为调用函数后,返回值的类型,可能是 int、float、object、

9、array。 4)本脚本不考虑部分这些部分是脚本代码。2.1 数据类型在 V2.4.6 版本中,一共有 int、float、array、var 四种数据类型。 (1)Int:整型脚本中的 int 变量拥有7Int 变量 变量是否自清除 全局变量 局部变量 无锡信捷电气股份其中全局变量不会自清除,即在相机运行完一次后,变量中的值不会回复初始值,例如: 有全局变量 tool1.a,当运行完第一次后为 10,则第二次运行时 tool1.a 的初始值也为 10. 局部变量会自清除,第二次运行时,其值恢复为其初始值。(2)Float:浮点型脚本中的 float 变量拥有(3)Array:数组脚本中的 A

10、rray 变量拥有(4)Var:任意对象例如:根据两个点,获取中点var middot=dotdotmiddot(tool1.Out.point,tool2.Out.point);tool3.x=middot.x;tool3.y=middot.y; 注:本地方法返回的变量类型,可直接写 Var(不能单独申明“var middot”,var 要与本地方法在同一行),之后可以直接访问 moddot 的成员 x 和 y。 2.2、语句支持及风格(1)条件判断(if)if 语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行所给 出的两种操作之一。下面列举 if 语句的 3 种形式。

11、if(表达式)语句打开脚本工具,工具名为 tool1,单击“添加”,变量名为 val1,变量类型为 int,初始值 8Array 变量 变量是否自清除 全局变量 局部变量 变量位数 32 位的倍数 float 变量 变量是否自清除 全局变量 局部变量 变量位数 32 位 变量位数 32 位 无锡信捷电气股份为 0,参数设置完以后单击确定。 例如:int a=0;int b=0;if(a=0)b=1;tool1.val1=b;运行结果:val1=1。(在上位机仿真调试工具输出监控窗口中的 tool1 可以看到 val1 的值。) 这种 if 语句的执行过程见图(a)。 假(0)表达式真 假表达式

12、真(非0)语句1语句2图(a)图(b)if(表达式 1)语句 1 else 语句 2例如:int a=0;int b=0;/定义整形变量a和bif(a=1)b=1;/判断a是否等于1,满足条件则b=1else b=2;/不满足条件则b=2tool1.val1=b;运行结果:val1=2。这种 if 语句的执行过程见图(b)。 if(表达式 1)语句 1elseif(表达式 2)语句 2elseif(表达式 3)语句 3elseif(表达式 m)语句melse语句 n例如:int a=2;int b=0;9语句 无锡信捷电气股份if(a=0)b=1;else if(a=1)b=2;else if

13、(a=2)b=3;tool1.val1=b;运行结果:val1=3。这种 if 语句的执行过程见图(c) 假表达式1假真表达式2假真表达式3假真表达式4真语句1语句2语句3语句4语句5图 c(2)循环语句(for;while) for(表达式 1;表达式 2;表达式 3)语句for 循环是最基本的循环语句。在程序设计中,通常希望按指定的次数完成一个任务。 例如:int i=0;int a=0;for(i=1;i10;i+)a=a+i;tool1.val1=a;运行结果:val1=45。这种 for 循环语句的执行过程见图(d) 10 无锡信捷电气股份假 表达式2真语句 求解表达式3 图(d)

14、while(表达式)语句当表达式为非 0 值时,执行 while 语句中的内嵌语句。 例如:int i=0;int a=0;while(i10)a=a+i;i+;tool1.val1=a;运行结果:val1=45。这种 for 循环语句的执行过程见图(e) 假表达式语图(e)(3)运算符关系运算符11运算符 说明 真句 for语句的下一个语句 求解表达式1 无锡信捷电气股份数算符正数一元运算符逻辑运算符三、功能函数3.1 数学库函数12运算符 说明 & 逻辑与 | 逻辑或 运算符 说明 + + 递增 - - 递减 运算符 说明 + 加 - 减 * 乘 / 除 大于 = 大于等于 = 条件等于

15、!= 不等于 无锡信捷电气股份13函数格式 函数功能 float hypot(float x,float y);返回斜边长度(直角边 1,直角边 2) 返回直角三角形的斜边的长度 float ceil(float x);返回不小于X 的最小整数(浮点数X) 求不小于 x 的最小整数 float floor(float x);返回不大于X 的最大整数(浮点数X) 求不大于 x 的最大整数 int abs(int x);返回整数X 的绝对值(整数X) 求整数 x 的绝对值 float fmod(float x,float y);返回X/Y 的余数(浮点数 X,浮点数 Y) 求 x/y 的余数 fl

16、oat fabs(float x);返回X 绝对值(浮点数X) 求浮点数 x 的绝对值 float exp(float x);返回 e 的 x 次幂结果(x 次幂) 求 e 的 x 次幂 float log(float x);返回logx 值(浮点数 x) e 返回 log 值 float log10(float x);返回logx 的值(浮点数 x) 10 返回 log10 值 float pow(float x,float y);返回x y 的值(浮点数 x,浮点数 y) 返回 x 的 y 次方 float sqrt(float x);返回 X 的值(浮点数 x) 计算 x 的平方根 fl

17、oat sin(float x);返回 sin x 的值(弧度 x) 求 x(弧度表示)的正弦值 float cos(float x);返回 cos x 的值(弧度 x) 求 x(弧度表示)的余弦值 无锡信捷电气股份3.2创建对象函数14函数格式 函数功能 Object pointnew(float x,float y);返回点坐标(x 坐标,y 坐标) 创建一个点Object dotdotmiddot(Object ptrDot1,Object ptrDot2);返回中点坐标(定位点 1,定位点 2) 点点中点:2 个 点之 间的中点 Object dotdotmidline(Object

18、ptrDot1,Object ptrDot2);返回两点的中垂线(定位点 1,定位点 2) 点点中线:2 个 点的中垂线 Object linelinedot(Object ptrLine1,Object ptrLine2);返回两条线的交点(定位线段 1,定位线段 2) 线线交点:2 条 线的交点 Object dotlineparallel(Object ptrDot,Object ptrLine);返回点线平行线(定位点,定位线段) 点线平行线 float tan(float x);返回 tan x 的值(弧度 x) 求 x(弧度表示)的正切值 float asin(float x);返

19、回 arcsin x 的值(x 范围-1,1) 求 x 的反正弦值 float acos(float x);返回 arcsin x 的值(x 范围-1,1) 求 x 的反余弦值 float atan(float x);返回 arctan x 的值(x 范围(,+) 求 x 的反正切值 float sinh(float x);返回 sinh 的值(x) 求 x 的双曲正弦值 float cosh(float x);返回 cosh 的值(x) 求 x 的双曲余弦值 float tanh(float x);返回 tanh 的值(x) 求 x 的双曲正切值 无锡信捷电气股份3.3几何运算函数3.4控制

20、类函数15函数格式 函数功能 float dotdotdis(Object ptrP1,Object ptrP2);返回两点之间距离值(定位点 1,定位点 2) 点点距离:两点之 间的距离 float dotlinedis(Object ptrP1,Object ptrLine);返回点到直线的距离值(定位点,定位线段) 点线距离:点到直 线的距离 float linelinedis(Object ptrLine1,Object ptrLine2);返回直线到直线的距离值(定位线段,定位线段) 线线距离:第一条线上所有点到第 二条线距离均值 float linelineang(Object p

21、trLine1,Object ptrLine2);返回线线角度(定位线段 1,定位线段 2) 线线角度:2 条线 的夹角 float dotdotang(Object ptrDot1,Object ptrDot2);返回点点方向性角度(定位点 1,定位点 2) 点点方向性角度 Object dotdotline(Object ptrDot1,Object ptrDot2);返回两个点的连线的参数(定位点 1,定位点 2) 点点连线:2 个 点的连线 Object linenew(float x1,float y1,float x2,float y2);返回新建线的参数(点 1 坐标 x,点 1

22、 坐标 y,点 2 坐标 x,点 2 坐标 y)创建一根线int arraynewint(int count);返回创建 int 型数组(数组个数) 创建 int 型数 组 float arraynewfloat(int count);返回创建 int 型数组(数组个数) 创建 float 型 数组 无锡信捷电气股份3.5 区域运算函数16函数格式 函数功能 RectObj dynobject_rect(Object ptr);转换为矩形区域(矩形区域参数) 转换为矩形区域 ArcObj dynobject_arc(Object ptr);转换为圆弧区域(圆弧区域参数) 转换为圆弧区域 函数格

23、式 函数功能 void saveimage();保存图片(在应用程序目录下的ErrImage 目录下) 保存图片(在应用程序目录 下的ErrImage 目录下) int getpixelgray(int x,int y);返回图像灰度值(坐标 x,坐标 y) 获取图像灰度值 void settrigger(int jobindex);不返回值(选择作业) 下个扫描周期对选择的作业 (要触发作业 1 则在”()”中输入”1”)进行一次触发(上位机 无效)return();返回值(0 为失败,1 为成功) 返回值,0 为失败,1 为成功 writeoutput(int portnum, int v

24、al); 写外部端子(端,数值) 写外部端子(端,数值), 其中数值 1 为 ON,数值 0 为 OFF。只有 0-3 号口有效 readinput(int portnum); 读输入口(端) 读输入口(端),1 为 ON,0 为OFF。 settoolenable(int toolindex,boolean isenable);控制工具是否运行(工具号,false 或 turn) 控制工具是否运行,false: 不 运行,true:运行 setalltoolsenable(boolean isenable);控制所有工具是否运行(false 或 turn) 控 制 全 部 工 具 是 否 运

25、 行,false:不运行,true:运行 无锡信捷电气股份3.6 映射区域数据存取17函数格式 函数功能 void mapdatasetshort(int addr,int val);从映射数据区设置short 值(地址,变量) 从映射数据区设置short 值 void mapdatasetint(int addr,int val);从映射数据区设置int 值(地址,变量) 从映射数据区设置int 值 void mapdatasetfloat(int addr,float val);从映射数据区设置float 值(地址,变量) 从映射数据区设置float 值 CircleObj dynobje

26、ct_circle(Object ptr);转换为圆周区域(圆周区域参数) 转换为圆周区域 LineObj dynobject_line(Object ptr);转换为线区域(线区域参数) 转换为线区域 CircleLoopObj dynobject_circleloop(Object ptr);转换为圆环区域(圆环区域参数) 转换为圆环区域 ArcLoopObj dynobject_arcloop(Object ptr);转换为圆弧环区域(圆弧环区域参数) 转换为圆弧环区域 void copy_line(Object srcLine, Object dstLine);复制线段 void co

27、py_rect(Object srcRect, Object dstRect);复制矩形 void copy_circle(Object srcCircle, Object dstCircle);复制圆周 void copy_arc(Object srcArc, Object dstArc);复制圆弧 voidcopy_arcloop(ObjectsrcArcLoop,Object dstArcLoop);复制圆弧环 无锡信捷电气股份3.7其他高级函数18函数格式 函数功能 void arraysort(Object arr);数组排序(数组名)注:升序 数组排序 void arrayadvs

28、ort(Object arr,int itemCount,intitemIndex,int int_float,int asc_desc); 数组高级排序(参数 1,参数 2,参数 3,参数 4,参数 5) 参数 1:数组名 参数 2:如果以x,y 进行分组,就是每组有 2 项 参数 3:按x 排序,输入索引 0,如果按 y 排序,则输入索引 1参数 4:这里 x 为 float 类型,则输入 1,为 int 类型则输入 0 参数 5:升序排列输入 0,降序排列输入 1数组高级排序 void arraycopy(Object source,int sourceIndex,Objectdest,

29、int destIndex,int coun1t);数组拷贝(参数 1,参数 2,参数 3,参数 4,参数 5) 参数 1:原数组名 参数 2:如果从原数组的第一个数据开始拷贝则输入索引号 0 参数 3:新数组名 参数 4:如果拷贝到新数组中作为第一个数据则输入索引号 0参数 5:拷贝个数 数组拷贝 int calc_rbt(Object mat1Data,int mat1rows, int mat1cols, Object mat2Data, int mat2rows, int mat2cols,Object matOutData);int result = calc_rbt(float B

30、,int Brows, int Bcols, float A, intArows, int Acols,float X);函数功能:求解刚体变换矩阵 X,即 AX=B 矩阵方程中 X 的值输 入 A 、 B 为 一 维 数 组 , 排 列 方 式 : 二 维 坐 标x1,y1,1,x2,y2,1,x3,y3,1 ,则结果刚体变换矩阵X 为 3*3三维坐标x1,y1,z1,1, x2,y2,z2,1, x3,y3,z3,1. ,则结果刚体变换 矩阵X 为 4*4参数说明:float B为一维坐标矩阵,int Brows 为矩阵B 行数, int Bcols 为矩阵B 列数, float A为一维

31、坐标矩阵, int Arows 为矩阵A 行数, int Acols 为矩阵A 列数,float X为一维刚体变换矩阵 求解刚体变换矩阵 无锡信捷电气股份19int calc_rbt_result(Object mat1Data,int mat1rows, int mat1cols, Object mat2Data, int mat2rows, int mat2cols,Object matOutData);int result = calc_rbt_ result (float B,int Brows, int Bcols, float A,int Arows, int Acols,floa

32、t X);函数功能:求解经刚体变换后的矩阵 B,即 AX=B 矩阵方程中 B 的值 参数说明:float B为一维坐标矩阵,int Brows 为矩阵B 行数, int Bcols 为矩阵 B 列数, float A为一维坐标矩阵, int Arows 为矩阵A 行数, int Acols 为矩阵A 列数,float X为一维刚体变换矩阵 求解刚体变换后结果坐标 无锡信捷电气股份四、应用示例下面介绍的工程示例并非用于实际工程中,只是用于学习一些工具和脚本。4.1 根据工具结果控制输出端示例内容:检测齿轮个数,用户可输入一个标准齿轮数,每次判断当前个数与设定个数 的关系,根据结果对 Y0 口进行

33、操作。(具体工程请见工程文件夹中的“齿轮示例”。) 图 1 标准工件 图 2 缺齿工件步骤 1:通过轮廓工具将工件的轮廓定位出来,轮廓定位中的参数设置默认即可。 步骤 2:通过斑点计数中的圆环内斑点计数工具可以检测到齿轮个数,将位置参照中的继承 类型设置为相对静止,继承工具设置为 tool1。 步骤 3:在 tool3 中添加一个全局变量,类型为 int,初始值改为 29。编写脚本,代码如下。 int a;a=tool2.Out.blobNum;/将tool2中齿轮个数赋值给aif(a=tool3.val1)writeoutput(0,1);/满足条件则Y0输出为1elsewriteoutpu

34、t(0,0);/不满足条件则 Y0 输出为 020 无锡信捷电气股份4.2 动态修改检测区域 例 如 用 定 位 工 具 圆 定 位 中 的 圆 环 内 圆 定 位 工 具 定 位 一 个 圆 。 通 过 函 数 dynobjict_circleloop 可以修改区域中的参数。(具体工程请见工程文件夹中的“区域检 测示例”。)图 4.2.1 图像显示窗口首先用圆定位工具来定位一个圆如图 4.2.1 图像显示窗口所示,然后编写代码。 代码:21 无锡信捷电气股份var region=dynobject_circleloop(tool1.In.region);region.radius2=100;

35、代码运行后可以看到图 4.2.2 的效果。图 4.2.2 图像显示窗口注:首先锁定检测区域,再将大圆的半径值赋值。4.3 排序类示例 对图 4.3.1 图像中的几何图形按面积的大小进行排序。(具体工程请见工程文件夹中的“排序 示例”。)arrayadvsort(参数 1,参数 2,参数 3,参数 4,参数 5)参数 1:数组名参数 2:如果以x,y 进行分组,就是每组有 2 项 参数 3:按x 排序,输入索引 0,如果按 y 排序,则输入索引 1参数 4:这里 x 的类型是 float 类型,则输入 1,如果是 int 类型则输入 0参数 5:升序排列输入 0,降序排列输入 122 无锡信捷电

36、气股份图 4.3.1 图像显示窗口步骤 1:用斑点计数中的矩形内斑点计数工具将图像中的所有几何图形找到。斑点计数中的主要参数设置如下:选项:最小匹配得分:20选项:阈值:固定值:128选项:面积限制最大值:50000参数设置完以后点击应用和确定,会出现上图的效果。步骤 2:打开脚本工具,添加一个脚本变量,类型为 float 数组,名称为 val1,数组长 度为 14,编写代码。代码如下:int a=0;int b=0;int x=0;int y=0;int i=0;int z=0;a=tool1.Out.blobNum;/将斑点个数的值赋给ab=a*2;/23 无锡信捷电气股份var arr=

37、arraynewfloat(b);/创建一个float类型的数组,长度为斑点个数的2倍for(x=0;xb;x=x+2)arrx=tool1.Out.blobSeti.mark.nLabelNum;/图形的标号i+;i=0;for(z=1;zb;z=z+2)arrz=tool1.Out.blobSeti.mark.markArea;/图形的面积i+;arrayadvsort(arr,2,1,1,0);for(y=0;y= 0; index-)/遍历所有边界点point = edgeList.pointsindex;/获取当前边界点信息if(point.x minX) /查找当前x坐标最小的边界

38、点 minX = point.x;tool2.pointx= point.x;tool2.pointy= point.y;tool2.result=0;elsetool2.pointx=0;/未找到目标,则认为查找失败tool2.pointy=0;tool2.result=1;工具结果显示如下:26 无锡信捷电气股份4.5 分类检测 本工程首先检测当前检测到的是底托还是盒盖,如果是盒盖,则对应工具有效,如果是底托 则一维码工具有效。如果客户那边有几种不同种工件,那么可以通过这种方法来实现分类检 测的功能。(具体工程请见工程文件夹中的“包装盒分类检测示例”。) 图 4.5.1 盒盖图 4.5.2

39、 底托27 无锡信捷电气股份图 4.5.3 图像显示窗口步骤 1:对盒盖进行轮廓定位。步骤 2:打开脚本工具,编写代码。 代码如下:/本工具主要是根据当前的定位结果,选择对应的处理流程/ 当定位成功则认为是底托,从而启动检测底托分类的工具/ 当定位失败则认为当前是盒盖,从而检测盒盖上的信息setalltoolsenable(false);/将所有工具初始化为无效settoolenable(0,true);/ 将定位工具使能,注意工具索引号从0开始settoolenable(1,true);if(tool1.Out.result = 0)/找到底座settoolenable(2,true);/将

40、检测底托的工具使能settoolenable(3,true);settoolenable(4,true);28 无锡信捷电气股份elsesettoolenable(5,true);步骤 3:在盒盖上找到两条线,工具为线定位,继承类型都为相对静止,继承工具都为 tool1。 步骤 4:添加一个距离测量工具。步骤 5:在底托的图像想添加一维码工具。 工具显示结果如下:1、 图像为盒盖工具结果显示如下:可以看到工具 6 的运行时间为 0,说明工具 6 不在运行。 2、 图像为底托工具结果显示如下:可以看到除了工具 6 在运行,其他工具都不在运行。 五、注意事项5.1 数值有效性问题1、当应用其他工具时,先判断该工具的结果然后再读取其中的数据;2、如图 5.1.1 所示当脚本中定义一个长度为 10 的数组 arrange 时,则只能对 arrange 的 0-9 的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论