1、中国石油大学(北京)机电系统课程设计报告目 录摘 要3第1章 设计目的及需要完成的指标41.1 设计目的41.2 需要完成的指标4第2章 整体思路5第3章设计依据63.1 电机驱动使能及驱动63.1.1 运动控制卡的初始化63.1.2 对专用输入信号参数进行设置63.1.3 运动控制轴的初始化63.2 单轴运动63.3 多轴运动8第4章 各部分功能的实现94.1 初始化及轴的回零94.1.1 卡和轴的初始化94.1.2 XY轴的回零94.2 点动控制114.2.1 点动控制操作界面114.2.2 点动控制功能的实现114.3 直线插补124.3.1 直线插补基本算法124.3.2 直线插补程序
2、框图134.3.3 直线插补功能实现134.3.3 运行效果144.4 圆弧插补144.4.1 圆弧插补的基本算法144.4.2 圆弧插补流程图164.4.3 圆弧插补功能的实现174.4.4 运行效果174.5 椭圆插补174.5.1 椭圆插补的基本算法174.5.2椭圆插补流程图1814.5.3 椭圆插补功能的实现194.5.4 运行效果194.6 图形绘制204.6.1 图像二值化204.6.2 轮廓提取214.6.3 数据处理及图形加工214.6.4 运行效果21第5章 遇到的问题及解决办法235.1 程序语言的选择235.2 圆弧插补失真235.3 低灰度图片二值化失败问题235.4
3、 图形绘制问题23第6章 附加功能256.1 超界判断256.2 二值化图片信息显示256.3 阈值和比例25第7章 个人总结26附录1 课程设计日志27附录2 绘图效果281中国石油大学(北京)机电系统课程设计报告 摘 要 本次机电系统综合设计要求通过计算机高级编程语言实现对伺服电机的运动控制来进行控制,以达到对机电一体化知识的巩固提高及综合运用。本报告详细讲述了阐述了 GT 系统运动控制器的控制原理,数控技术中逐点比较法的直线插补、圆弧插补、椭圆插补等原理,图像二值化原理,图形轮廓提取四邻域法原理,以及这些原理在本次机电系统综合设计中的具体应用。本小组借助VB语言进行编程,通过设计工作界面
4、,编写程序,借助GT系统运动控制器对电动机进行控制,实现其相应的功能。详细介绍了本小组制作伺服电机控制系统的界面和原理,让读者能够在一定程度上了解数控技术,使实验操作者能够更直观的了解图像处理技术以及其它方面的相关内容。关键字:GT系统运动控制器;插补;二值化;轮廓提取 25第1章 设计目的及需要完成的指标1.1 设计目的本次机电系统综合设计要求以 GT 系列运动控制器为核心,以计算机语言(VB、VC等)为控制手段,通过计算机与运动控制器相互通信,对其进行运动的初始化,运动过程的控制来实现运动控制器两轴和笔架的运动,根据数控技术的差不算法绘制简单的几何图形如:直线,圆,椭圆等,以及绘制通过计算
5、机程序图形识别、轮廓识别处理后的图形。1.2 需要完成的指标利用 GT 系列运动控制器和 GXY 系列运动平台,在windows 下用 VB 语言实现平面 XY 的数字加工控制。基本要求如下:1、 编写 GT 系列运动控制器和 GXY 系列运动平台的初始化程序,通过初始化程序可实现系统的复位;2、 编写回零程序,实现轴的回零操作。、编写平面 X、Y 的驱动程序以控制 X、Y 方向的运动;、编写插补算法以实现平面四象限的直线,顺、逆圆,顺、逆椭圆,以及圆弧和椭圆弧简单的几何图形绘制;、编写控制程序以实现任意图象的轮廓提取,并对提取的轮廓数据进行处理,将轮廓数据转化为对两维伺服数据控制机床的驱动代
6、码,利用伺服驱动函数库实现在该设备上的轮廓加工。、实现以上加工图形的绘制时必须在图形绘制中实现抬笔落笔的控制和超界判断。第2章 整体思路本次机电系统综合设计,通过计算机高级语言VB实现对运动控制器运动参数,运动方式的控制。GT运动控制器提供了DOS 下的运动函数库和Windows 下的运动函数动态连接库,本小组使用的是Windows下的运动函数动态连接库,只要调用运动函数库中的函数,就可以实现运动控制器的各种功能。在Windows 系统下使用VB中函数库,只需将设备提供的GTDeclarPCI.bas以模块的形式添加方到用户工程中,GT运动控制器提供的Windows下的运动函数动态连接库就可以
7、直接调用。各主要功能的实现:通过编程,依据程序语言对运动器进行控制,运动器对电机进行控制,实现轴的联动,最终实现图形的绘制。其中最主要的是对插补程序的构思和编写。第3章设计依据按照本次机电系统综合设计的要求,本小组利用 VB6.0 的可视化编程,实现对运动控制器的控制,使运动控制按照 VB 程序进行单轴运动、多轴协调运动、简单几何图形插补运算绘制、复杂图形绘制等等。3.1 电机驱动使能及驱动在实现 GT 运动控制器的运动之前,需对其运动控制卡、运动控制轴、运动控制器、专用输入信号参数设置进行初始化,初始化之后才可以实现运动控制器简单的单轴运动,多轴协动。3.1.1 运动控制卡的初始化在运动控制
8、器初始化中需先打开运动控制器设备,复位运动控制器,设置控制周期并对每一轴进行中断屏蔽。GT 运动控制器库函数中提供的运动控制器初始化函数中 GT_Open()用于打开运动控制器设备,GT_Reset() 用于复位运动控制器 ,GT_SetSmplTm()用于设置控制周期,rtn=GT_SetIntrMsk()屏蔽轴中断。其中,运动控制器以特定的控制周期刷新控制输出,单位是微秒。运动控制器再控制周期内要完成必要的计算,控制周期不能太小,因此设定的范围为481966.08 微秒。运动控制器默认的控制周期为 200 微秒,一般不应小于这个值。在本次设计中,始终采用 200 毫秒的控制周期。3.1.2
9、 对专用输入信号参数进行设置对专用输入信号参数进行设置即设置限位开关有效电平。运动控制器通过两个(正向、负向)限位开关自动地设定控制轴的运动范围。一旦限位开关被触发,运动控制器自动地禁止控制轴朝越限的方向运动。运动控制器默认的限位开关为常闭开关。即正常工作时,限位开关信号为低电平;限位开关触发时,限位开为高电平。在此用到了函数库中的 GT_LmtSns(LmtSense)来对限位开关有效电平进行设置。3.1.3 运动控制轴的初始化对运动控制轴的初始化则需要用 GT_ClrSts()函数清除当前轴不正确状态,用 GT_StepPulse()函数设置输出正负脉冲信号,用 GT_AxisOn()函数
10、开启当前轴的驱动使能3.2 单轴运动在运动的初始化完成以后,便可以通过调用库函数的单轴运动命令来实现运控器的单轴运动。运控器针对单轴运动提供了四种运控模式:S-曲线模式、梯形曲线模式、速度控制模式、电子齿轮模式。在本次课程设计中会使用 S-曲线模式和梯形曲线模式。梯形曲线模式的速度曲线如图所示:图3.1、S-曲线模式的速度、加速度,加加速度曲线用 GT_PrflS()函数设置当前轴的运动模式为 S-曲线模式,其它必需函数以及函数功能如下:GT_SetJerk() 设置当前轴的加加速度GT_SetMAcc() 设置当前轴的最大加速度GT_SetVel() 设置当前轴的目标速度GT_SetPos(
11、) 设置当前轴的目标位置编程中,调用库函数中 GT_PrflT()函数可以实现梯形曲线运动模式,另外需进行相应的参数设置:GT_SetAcc() 设置当前轴的加速度GT_SetVel()设置当前轴的最大速度GT_SetPos() 设置当前轴的目标位置这里,加速度的单位是 Pulse/ST ,速度单位是 Pulse/ST,目标位置单位是Pulse,Pulse 是脉冲数。其换算关系为:平台向前运动 10000Pulse 相当于运动 4mm。在对单轴的这些运动模式设置好后,使用 GT-Update()对参数进行刷新后便可使单轴按照所定参数进行运动了。3.3 多轴运动运动控制器可以实现两种轨迹的双轴协
12、调运动:直线插补、圆弧插补。在双轴协动之前,需对坐标进行映射,以实现坐标系与轴的对应,实现轴的坐标化。通过调用 GT_MapAxis() 命令可以将在坐标系内描述的运动通过映射关系映射到相应的轴上。从而建立各轴的运动和要求的运动轨迹之间的运动学传递关系。运动控制器根据坐标映射关系,控制各轴运动,实现要求的运动轨迹。调用GT_MapAxis() 命令时,所映射的各轴必须处于静止状态。这种映射关系能够简单地描述成下面的计算公式:Axis _ N = Cx x + Cy y + Cz z + Ca a + C (3.1)合成速度: (3.2)合成加速度: (3.3)在 GT 运动控制函数库中可以通过
13、调用 GT_SetSynVel(double Vel)来设置轨迹段的合成运动速度,调用 GT_SetSynAcc(double Accel)来设置坐标系运动中轨迹段的合成加速度。双轴映射和运动参数的设置是双轴联动的基础。GT 运动控制器提供了两种多轴联动的方式即多维直线插补运动和多平面圆弧插补运动。本次课程设计的共同运动控制器限于两轴,因而直线插补仅为两维直线插补,圆弧插补仅为 XY 平面圆弧插补。调用函数库中 GT_LnXY()可以实现两维直线插补(以终点为输入参数),调用 GT_ArcXY()可以实现 XY 平面圆弧插补(以圆心位置和角度为输入参数),调用 GT_ArcXYP()可以实现
14、XY 平面圆弧插补(以终点位置和半径为输入参数),这样便可实现双轴联动下直线和圆弧的绘制。第4章 各部分功能的实现4.1 初始化及轴的回零4.1.1 卡和轴的初始化卡的初始化:在VB中需编入运动控制器初始化函数,首先通过GT_open()打开运动控制器设备,然后对运动控制器进行复位,其功能通过GT_Reset()实现。在初始化中需屏蔽每一轴的中断,这里我们组用的是for循环。循环语句中我们用的是GT_Axis(i),i的取值分别是1和2,即分别用来控制XY两轴。用GT_SetIntrMsk(0)来实现屏蔽中断。这里对GT_SetIntrMsk()进行简要的说明,当中断屏蔽字中的某一位设置为“1
15、”时,允许该位表示的中断事件向主机申请中断,如果设置为“0”时,不允许该位表示的中断事件向主机申请中断。轴的初始化:运动控制器可以同时控制四个控制轴,这里我们只需要控制机器中的两个轴和一个起落笔的动作。为了提高主机与运动控制器的通讯效率,运动控制器采用控制器寻址的策略。设置当前轴:用户程序调用的单轴命令,都是作用于当前轴的。运动控制器默认的当前轴为第一轴。要想对其他轴发送命令,首先要调用设置当前轴命令:short GT_Axis(unsigned short num) 。GT_Axis(),将参数指定轴设置为当前轴。此后调用的单轴命令都是针对当前轴,直到再次调用该函数将当前轴设置为另一个轴。设
16、置输出“脉冲+方向”:默认情况下,控制器输出“脉冲+方向”信号。用户可以调用函数GT_StepPulse设置控制器输出“正负脉冲”信号;调用函数GT_StepDir设置控制器输出的“脉冲+方向”信号。 设置开环和闭环控制:调用GT_CloseLp()命令当前轴工作在闭环方式,这种方式能够实现准确的位置控制。SV运动控制器的默认控制方式为闭环控制。调用GT_OpenLp()命令,当前轴工作方式为开环。这种方式主要用于只需转矩控制的运动或标定驱动器,运动控制器无法实现准确的位置控制。由于本课程设计要求绘制圆弧、图形轮廓等较为精准的加工,所以此处我们组在设置开环闭环的方式上均为闭环控制。设置其他参数
17、:调用GT_SetKp()设置比例增益,调用GT_SetKi()设置积分增益等(详见源程序)。调用GT_ClsSts()用来清除当前轴的不正确信息。4.1.2 XY轴的回零XY的回零的主要思路:通过寻址的方法,检测正负限位的地址,在是当前轴运动到其中点位置,以实现其回零操作。其设计流程图如下所示:图4.1、XY轴回零流程图程序的控制:定义变量rtn,对rtn进行赋值,设置当前为轴并开启轴。其功能实现分别通过调用GT_Axis()和GT_AxisOn()实现。调用函数GT_GetAtlPos(XPosLimPos)将检测到的正限位所返回的值返回到GT_GetAltPos()中,这样便获得了正限位
18、的实际位置。对负限位位置的获取类似,调用函数GT_GetAtlPos(XNegLimPos),将检测到的负限位所返回的值返回到GT_GetAltPos()中,这样便获得了负限位的实际位置。获得两限位位置后,定义一个变量,将正负限位的中点位置复制给该变量,此处我们定义的变量是XZeroPos,对其赋值XZeroPos = (XNegLimPos + XPosLimPos) / 2。最后轴通过调用函数GT_SetPos(),将函数变量定义为XZeroPos,这样便可实现回零操作。4.2 点动控制4.2.1 点动控制操作界面图4.2、点动控制操作界面4.2.2 点动控制功能的实现这里,我们主要通过调
19、用函数GT_SetVel(Val(Combo2.Text)和GT_SetPos(2000 * Val(Combo1.Text),其中GT_SetVel()是用来设置当前轴的速度,即当我们需要X轴正向点动时,先将当前轴设置为1轴(当前轴的设置前面已经阐述,这里不再说明),则在该程序下设置该轴的速度。GT_SetPos()是用来设置该轴运动的位置,该函数的变量为脉冲,通过实验测试,我们大概计算出的结果为20002500个脉冲为1mm的距离,这里我们直接在程序中将选择的变量乘以2000,这样我们在运行时选择的点动增量直接换算为mm。当X轴需要负向运动时,基本程序与正向运动基本一致,只需在设置运动位置
20、时将变量设置为负值,即GT_SetPos(-2000 * Val(Combo1.Text)。Y轴的设置与X轴一致,这里便不再重复赘述。VB程序说明:程序里,函数Val()是直接取出空间中的值,这样在程序中就不需再定义多余变量。窗体中本小组组使用了两个list控件,其属性值设置为2,即为list只能选择已设置的点动增量(这里本小组设置了5 、10、15等几个梯度)和点动速度(1、2、5)。4.3 直线插补4.3.1 直线插补基本算法进行插补的方法有很多种,包括逐点比较法,数值积分法,时间分割法,样条插值法。设计中用到的方法是逐点比较法。逐点比较法,即每一步都要和给定轨迹上的坐标值进行比较,视该点
21、在给定轨迹的上方或下方(直线插补),或在给定轨迹的里面或外面(圆弧插补),从而决定下一步的进给方向,使之趋近给定轨迹。如此走一步比较一次,决定下一步走向,以便逼近给定的轨迹。偏差计算公式:以第一象限为例,取直线起点为坐标远点,如图 23 所示,m 为动点,有下面关系: 图4.3、直线插补图示取 作为偏差判别式,若 F m =0,表明 m 点在 OA 直线上,若 0,表明 m 点在 OA 直线上方的 m 处,若 F m 0,表明 m 点在 OA 直线下方的 m 处。从坐标原点出发,当 0 时,沿+X 方向走一步,当 0 时,沿+Y 方向走一步,当两方向所走的步数与终点坐标(X e ,Y e )相
22、等时,停止插补。当0 时,沿+X 方向走一步,则 X m+1 = X m +1,Y m+1 =Y m新的偏差为: F m+1 = F m Y e (4.1) 当0 时,沿+Y 方向走一步,则 X m+1 = X m ,Y m+1 =Y m +1 新的偏差为: F m+1 = F m Y e (4.2)其它三个象限的计算方法,可以用相同的原理获得。其插补方法可用下表表示:图4.4、直线插补原理4.3.2 直线插补程序框图其插补的程序流程图如下图所示:图4.5、直线插补流程图4.3.3 直线插补功能实现这里我们主要是通过定义Tmotion()函数来实现XY轴的联动。这里对Tmotion()函数作个
23、简单的说明。我们编辑的Tmotion(axis As Integer, position As Double)定义了两个变量,分别为轴和运行位置。在函数中,需要调用某轴时都用axis代替,位置用position代替,这样使得当调用函数时可以直接调用,如Tmotion(1,2000)则表示轴1(X轴)正方向走到2000个脉冲的位置。所以,根据插补算法,我们在判别需要或轴运动时,在下面调用的Tmotion()写入相应的变量即可。例如,当判别Fm0时,需要X轴正向走一步,则调用Tmotion(1, 250 * i + 2500 * Xs)。这里对后面位置的代数式进行说明:Xs是我们输入的起点的横坐标
24、即,轴先运动到起点,初始位置为2500*Xs,i为每次判别所累加的变量,即总共的运动步数,由于定义的位置并非每次的运动量,所以位置为绝对的位置,即相对零点的位置。由于每次判别均走一步,如此循环,所以250*i大约为每次大约运动0.1mm的距离。X轴负向运动即Y轴运动的实现与上面所述过程基本一致。4.3.3 运行效果图4.6、直线插补界面输入起点终点坐标,点击生成轨迹,即可开始直线绘制。绘图效果见附页二.4.4 圆弧插补4.4.1 圆弧插补的基本算法与直线插补的方法类似,圆弧插补也是使用的逐点比较法,以第一象的限逆圆插补为例,如下图所示:图4.7、圆弧插补图示圆弧圆心在坐标原点,A 为起点,B
25、为终点。半径为 R,假设运动瞬时点为m,它到圆心的距离是 Rm,以 Rm 和 R 的平方差作为偏差,则偏差判别式为: (4.3)若 F m =0,则表明 m 点在圆弧上,若 F m 0,则表明 m 点在圆弧外,若 F m 0,则表明 m 点在圆弧内。当 F m 0时,沿 -X 方向进给一步,其新的偏差:F m+1 = F m -2 X m +1 (4.4)当 F m 0 时,沿+Y 方向进给一步,其新的偏差: F m+1 = F m +2Y m +1 (4.5)以上为第一象限的插补方法。其四个象限的插补方法概括如下表所示:图4.8、圆弧插补原理4.4.2 圆弧插补流程图其插补流程图如下图所示:
26、图4.9、圆弧插补流程图4.4.3 圆弧插补功能的实现在模块里编辑了Circleshun()和Circleni()两个函数,分别用来加工顺弧和逆弧。在函数中,定义了函数起点坐标、圆心坐标、以及圆弧角度的变量。借此可以计算出起始角、半径等参数。与直线插补类似,在圆弧插补中,当判别函数需要X轴正向走一步时,调用Tmotion()函数,在轴方向上走一步。Y轴类似。圆弧角度的说明:定义累加变量i、j,X轴每走一步变量i累加一次,Y轴每走一步变量j累加一次。加工循环判断语句:定义变量step,step = (i + j) * (180 / 3.1415926) * 0.77 / (r * 10),这里便
27、将圆弧加工走过的角度通过几何代数关系换算出来了。判断语句step Y 0 )和终点坐标X e ,Y e 长轴 a,短轴 b,以及加工顺圆及椭圆圆弧所在象限。如图 24 所示,设弧 AB 为所要加工的第一象限逆圆,A(X 0 , Y 0 )为圆弧起点,BX e ,Y e 为圆弧终点。图4.11、椭圆弧插补图示若 P i 点在圆弧上则下式成立: (4.6)选择偏差函数: (4.7)根据动点所在区域的不同,有下列三种情况:F i 0,动点在圆弧外; F i =0,动点在圆弧上; F i 0和F i =0合在一起考虑,按如下原则,就可以实现第一象限逆圆的圆弧插补:当F i 0时,向X进给一步;当F i
28、 0时,向+Y进给一步。每走一步后,计算一次偏差函数F,以其符号作为下一步进给方向的判别标准,同时进行一次终点判别。以第一象限逆园为例可以得到椭圆插补偏差递推公式。当F i 0时,沿X方向进给一步,其新的偏差F i +1 = F i -2b 2 x i + b 2 (4.8)当F i 0时,沿+Y 方向进给一步,其新的偏差F i +1 = F i +2a 2 x i + a 2 (4.9)其他象限和圆弧插补的进给方向相同,只是偏差判别的公式有点不同。在程序编写中用了最广泛适于各个象限的偏差计算公式。4.5.2椭圆插补流程图其流程图如下图所示:图4.12、椭圆插补流程图4.5.3 椭圆插补功能的
29、实现椭圆插补与圆弧插补基本类似,两者的区别主要在于判别函数的差别,椭圆有长短半轴。所以此处,我们定义了tuoyuanshun()和tuoyuanni()两个函数用来绘制顺弧和逆弧。定义的变量有圆心坐标、长半轴、短半轴。在定义的函数中,对新的判别函数进行判别,当判别函数大于等于0时,X负方向走一步,调用Tmotion()函数实现。Y轴类似,圆弧角度的判别与圆弧角度的判别一致。4.5.4 运行效果椭圆绘制界面:图4.13、椭圆插补界面输入圆心、长轴、短轴、角度等,选择顺弧或逆弧,点击生成轨迹按控件,即可加工各种角度的椭圆弧。其运行效果见附图2.4.6 图形绘制4.6.1 图像二值化图形轮廓提取是要
30、从黑白的图片中提取出运动控制器的运动轨迹,是可以脱离控制器单单由程序实现的过程。在进行图形轮廓提取之前得先对图形进行二值化处理,使彩色的图片变成仅有黑白两种颜色的图片,这里需要通过编写程序来实现。在对彩色图像的处理中,首先要对彩色位图颜色值进行分解。像素的颜色值(用 Col 表示)是一个长整形的数值,使用四个字节,最上位的字节为零,其他三个个下位字节依次为 B、G、R,值为 0-255。从 Col 值分解出 R、G、B 使用 AND 运算符,得出R=COLAND&HffG= (COLAND&Hff00)/256B=(COLAND&Hff00)/(256*256)分别是红,绿,蓝三种颜色值。此后
31、,运用三种颜色值,计算出灰度值,其算法为 rr=gg=bb=(R+G+B)/3,使彩色图像生成灰度图象。以方便后续的二值化处理。使灰度图象二值化的方法很多,这里采取了一种比较简单的二值化方法。设定了一个颜色分界点的值,在提取每个像素点颜色值之后使其同这个值进行比较,大于这个值则认为这个点是白色的,并将白色值 255 赋给它,反之,认为它是黑色的,同样把黑色值 0 赋给它。这样灰度图象便变成了黑白的二值图像。在经过多次的调试后可以得出比较满意的分界值和效果比较好的黑白图片。4.6.2 轮廓提取轮廓提取是在图像二值化的基础上进行的。图形轮廓提取的方法有很多种,如:四邻域法、八邻域法、全面检测法等在
32、这三种提取轮廓的方法中,为了简化运算,用四邻域法进行计算。四邻域法从本像素点出发从它的上、下、左右四个方向寻找是否全部是黑色的点,如果是则认为这个点在图形的内部,标记后清除,否则保留该点,这样图形内部的封闭空间点都被清除了,即完成了轮廓的提取。这种方法虽然会丢失图形轮廓上的一些点,但它的算法比较简单,易于实现。在编写程序的过程中,分三步进行。第一步先设置循环对图形进行一次扫描,把黑色的点提取出来。之后,在循环中对每一个像素的上、下、左、右进行探测,如果他的四周都为黑则将清除直至循环结束,提取出轮廓。为了防止重线和孤点的存在,在第三步中,对所剩的所有点进行检测,判断它周围是否有两个以上黑点或它周
33、围是否只有一个点,如果是则也将其清除。4.6.3 数据处理及图形加工图像数据处理及在提取出图形轮廓之后,进行图形绘制,在这个过程中,依照轮廓提取时的思想,对图形中所有点进行遍历。先 X 方向后 Y 方向,寻找每一个黑点,一旦找到点,便按右,右上,上,左上,左,左下,下,右下的逆时针方向寻找下一个黑点,其附近有黑点则使双轴以直线插补的方式直线进给过去,并清除这个点。之后重新按先 X 方向后 Y 方向的方式寻点。这样直至走完整个图形中的所有黑点。图像数据处理及轮廓加工实现,类似图形的二值化,做一个大的循环,直接利用直线插补函数进行绘图,笔在适当时起下,一般情况下,当点连续时,笔会一直往下画,而遇到
34、孤点时就会点击,这是个不正常的现象,这个孤立点为轮廓提取时留下的杂点,在算法上很难消除,因此我减小的落笔 delay时间,这样连续点就会一直往下画,而遇到孤点时,笔不会落下,很巧妙地解决绘杂点的问题。4.6.4 运行效果二值化效果如下图: 待二值化图片 二值化后图片轮廓提取效果如下图: 二值化后图片 提取的轮廓轮廓加工效果:见附页2。 第5章 遇到的问题及解决办法5.1 程序语言的选择该课程设计我们主要是通过计算机语言,对控制器进行控制,控制器再控制于电机。整个问题的关键在与程序的编写,鉴于之前本小组成员在数控实验课上曾学习过VB程序,所以最终我们选择了使用VB语言进行编写。由于课本及辅导资料
35、上的大多提供的参考程序,均为VC语言。这里VB不能直接引用,唯一可以参考的是其编程思路。通过翻阅资料,再次自学VB语言,小组完成了VB语言的编写,并能实现课程设计的基本要求。5.2 圆弧插补失真在试验中本小组发现,在实际绘图时,圆弧有部分失真。小组对源程序进行了反复检查,并在VB窗口中添加了图片空间,在控件中模拟绘制图像的过程。结果发现,在VB窗口中绘制的图形正确,并没有发现类似于圆弧失真的现象。最后通过设置程序断点,对程序进行详细检查,发现调用的Tmotion()函数可能是影响其失真的主要原因。通过控制变量的方法,我们依次对Tmotion()函数的参数进行修改,当其他参数不变,我们改变GT_
36、SetVel()中的参数时,圆弧失真有了变化。刚开始,当速度设为4时,圆弧和椭圆均发现了失真现象,当我们逐步调高其速度后,失真效果越来越不明显,最后通过试验发现,当其速度设为6时,圆弧插补不失真。5.3 低灰度图片二值化失败问题刚开始,本小组在对图像二值化的过程中,程序里直接就界定了黑白像素的界定值。即在源程序中,将像素低于128的点均赋值为0,高于128的点赋值为1。这样,在试验中我们发现当使用灰度较低的图片时,二值化便无法取得成功。经分析,主要原因是图片灰度过低,即整个灰度都低于128,则图片全为白色,二值化失败。为了解决这个问题,小组在二值化过程中设置了一个阈值。即当灰度小于阈值时,点为
37、白色,反之,为黑色。当载入图片灰度较低时,降低阈值,若二值化效果不佳,可以继续调整阈值,这样便可以灵活控制图片的二值化过程及效果。5.4 图形绘制问题图形绘制的基本原理前面已经讲过,但实际操作中,小组也遇到了许多问题。在试验中,我们发现我们每画完一条连续弧段便会开始绘制另一弧段。在第一弧段结束和第二弧段开始过程中,笔会在纸上留下多余的一条弧段,当轮廓的零散弧段较多时,绘制的图形显得很凌乱,达不到预想的效果。鉴于这点,小组在弧段结束和开始的时候,加入了起笔和落笔的动作。即当某一连续弧段绘制结束时,起笔并运动到另一连续弧段的起始位置,落笔并开始绘制另一弧段,如此循环,巧妙地解决了这一问题。第6章
38、附加功能6.1 超界判断由于实验提供的仪器运动的范围有限,所以在绘制图形的过程中,其大小受到限制。但在程序框中,对于使用者并不知道这一点,这样会使得某些使用者在输入数据时输入过大数字,会导致图形绘制失败,严重时,会损坏仪器。据此,我们在程序中添加了超界判定。如果输入数据超出工作范围,则会弹出提醒窗口“超出边界”,使用者需重新输入数据。这样,不仅保证了试验的成功率,并且能对实验仪器进行必要的保护。6.2 二值化图片信息显示在对图形进行二值化处理后,我们在旁边添加了一个List控件,用来显示图片信息,包括图片宽度、高度等。6.3 阈值和比例在二值化中,对于不同灰度的图片,我们需要对其设定不同的阈值
39、以达到预想的效果。据此,我们在二值化窗口旁添加了阈值框,用来自己手动填写阈值。这样可以保证各种灰度的图片均能达到较好的二值化效果。在绘制图形中,由于选择的图片和需绘制的图片大小有时并非恒等的关系。在这里,便添加了比例窗口,通过填写绘图比例,可以使得绘制的图片根据需要可以是原图的任意比例(在加工许可的范围内)。这样,使得程序的适用性更强。第7章 个人总结根据学校课程设计要求,我们在老师的指导下进行了为期三个星期的课程设计。在这三个星期中,通过翻阅资料和对自己编写的程序的调试,再一次加深了自己对VB语言及伺服电机理解。更多的,是自己学到了遇到问题怎么去解决问题的思路和心态。学过语言的人都知道,程序
40、语言不能有丝毫错误,又是即使是一个字母甚至一个符号的错误,都会导致整个程序无法运行。所以,在调试程序的过程中,绝大多的时间都是停留在对程序的查错上。在程序的编写上,最好能有个整体的框架和构思,比如提前编辑模块,将可能会调用到的函数放到模块中,这样会使得在后来程序的编写上达到事半功倍的效果。这个课程设计是分为两人一小组,四个小组同一题目。因此,在此过程中,最重要的是团队合作。当然这并不意味着彼此间的相互复制粘贴。因为同一个问题大家可能会遇到很多类似的问题,加强彼此间的交流,能够减少许多的低级错误,防止大家在不必要的错误上花了过多的时间。小组内部的分工合作也十分重要,两人及时交流新进展并交换编程思
41、路,使得最后的程序能够最有效率。最后,要感谢在课程设计中给过我帮助的同学以及张老师的指导。附页1:课程设计日志表1、机电系统课程设计日志机电系统课程设计日志日期上午下午3月11日3月13日了解需要完成的任务,查阅相关资料,确定整体思路3月14日3月15日选用VB编程,完成单轴运动、点动控制3月18日对限位的研究,并实现多轴联动3月19日卡的初始化轴的初始化3月20日完成轴的回零程序的编写对程序进行调试3月21日编写直线插补程序 调试程序3月22日编写圆弧插补程序 实现跨象限画弧,并进行调试3月24日开始编写椭圆弧插补程序调试程序3月25日对之前的程序整体调试一遍,必要时作出修改开始学习图形绘制的基本知识3月26日对二值化及四邻域算法进行研究编写程序,并初步调试3月27日轮廓提取及加工程序的编写调试程序3月28日对界面进行美化整体调试程序,以达到最优状态,等待验收
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922