毕业设计说明书

更新时间:2024-03-28 18:42:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目 录

1

绪论?????????????????????2 1.1开放式数控系统?????????????? 2

1.1.1开放式数控系统的概念???????? 2 1.1.2 开放式数控系统的原理???????? 3 1.1.3国内外开放式数控系统的发展????? 3 1.1.4有待研究和解决的主要问题?????? 6 1.1.5 利用运动控制卡来开放系统?????? 7 1.2 课题的意义和背景????????????? 9

1.2.1 课题的目的及任务要求????????9 1.2.2 课题的难点????????????? 9

2

整体设计????????????????????10

2.1 硬件结构及原理图????????????? 10 2.1.1 运动控制器的硬件结构及安装?????? 11 2.1.2 运动控制器与接口端子板的联结????? 13 2.1.3 PANASONIC电机及驱动器与系统的联结?? 14

2.2 软件实现????????????????? 15 2.2.1创建工程??????????????? 15 2.2.2 制作数据输入区的属性表及代码添加?? 17 2.2.3 “数据显示区”的制作及代码添加???? 31 2.2.4 G指令输入框的制作??????????32 3 4

系统测试????????????????????34 评价及总结???????????????????35

1 绪 论

当今随着技术、市场、生产组织结构等方面的快速变化,数控技术的发展面临着许多新的挑战。当前数控技术已经向基于PC的开放式、高速、高精度、高自动化、智能化以及向网络化方向发展。不断出现的新的加工需求,要求数控系统具有迅速、高效、经济地面向客户的模块化特性和软硬件重构能力,而且这种重构能力所需的成本和周期较目前将有较大的改观。逐步降低生产厂家对控制系统的高依赖性,大幅度降低维护和培训费用,改变以往数控系统封闭性设计模式,适应未来车间面向任务和订单的模式,使得底层的生产控制变得简便、有效。数控系统的供应商提供主机,生产厂家把自己的专利技术集成到系统中,这种机制,生产厂家无需向系统供应商提供任何自己的技术秘密。因此,寻求一种能很好解决上述问题的新的控制系统的发展模式已成为必然。数控系统的制造商、集成者和用户都希望“开放式的控制器”能够自由的选择数控装置、驱动装置、伺服电机、应用软件等数控系统的各个构成要素,并用规范的简便的方法将这些构成要素组合起来。开放式数控系统(OPEN ARCHITECTURE NUMERICAL CONTROL SYSTEM,以下简称ONC)应运而生。

1.1开放式数控系统

1.1.1开放式数控系统的概念

从开放式数控系统目前的研究成果看,开放式数控体系结构还没有统一、明确的概念内涵,系统实现技术还处于百家争鸣时代.

IEEE是这样定义开放系统的: \具有下列特性的系统可称为开放系统: 符合系统规范的应用可运行在多个销售商的不同平台上, 可与其他的系统应用互操作, 并且具有一致风格的用户交互界面(An open system provides capabilities that enable properly implemented applications to run on a variety of platforms from multiple vendors, inter-operate with other systems applications, and present a consistent style of interaction with the user.)\

对于开放式数控系统,一种较流行的观点是强调下列五个方面的系统特性:系统互换性(interchangeability)、可伸缩性(scalability)、可移植性(portability)、互操作性(interoperability)和可扩展性(expandability).

以上观点均只是定性地、从系统表现的角度讨论了开放式数控系统的基本特征.而从系统体系结构的具体内容和系统实现的角度看,人们对开放式数控系统

2

还没有统一的认识,相关的研究组织、机构、厂商正致力于这方面的标准化工作.

1.1.2 开放式数控系统的原理

传统的数控系统一直沿着封闭式结构向前发展。对用户来说,这种封闭式数控系统只有一个被定义了输入和输出的黑匣子,其内部细节是不可知的。这种数控系统最大缺点就是在原来基础上很难或几乎不可能再加入新的控制策略和方案及扩展新功能。随着计算机在制造过程中的广泛使用,改善制造过程性能的需求越来越强烈,这种封闭式结构的局限性也越来越明显。为适应不断发展的现代技术需求,未来的CNC控制器必须能够被用户重新配置、修改、扩充和改装,并允许模块化的集成传感器、加工过程的监视与控制系统,而不必重新设计硬件和软件。要达到这一目的,最有效的途径就是实现开放性。

近年来,由于PC机发展迅速,技术成熟,软件资源丰富,因此充分利用PC机资源,并将其集成CNC中去,发展基于PC的数控系统(PCNC),已成为世界各国发展研究的重点。具体地说,PCNC就是在PC机硬件平台和操作系统的基础上,方便的使用市售的软件和硬件板卡,构造出数控系统功能。由于PC总线是一种开放性的总线,所以这种系统的硬件体系就具有了开放式、模块化、可嵌入的特点,为机床厂和用户通过软件开发给数控系统追加功能的个性化提供了保证。

1.1.3国内外开放式数控系统的发展

(1) 国外开放式数控系统的研究与发展

90年代中期以来,自控领域内多项重大研究计划在世界范围内启动,开放式数控系统的概念及标准化接口与数据描述的设想获得广泛支持,诸研究计划逐渐得以运行。

1994年,由东芝机器、三菱电子等6家日本公司联合成立了一个名为控制器开放系统环境(Open System Environment for Controllers)的工作委员会。它研究的重点是在NC本身和分布式DNC控制系统上,它认为站在制造的角度看NC是分布式DNC系统的一个服务器。OSEC所谓的开放式系统本身就被认为是一个分布式系统,它能满足用户对制造系统不同配置的要求、最小化费用的要求和应用先进控制算法及基于PC的标准化人机界面的要求。

3

图1 开放式数控系统体系结构

OSEC是将各功能单元分组并结构化在一些功能层中,其开放式系统包括了3个功能层共7个处理阶层(图2)。OSEC定义了一种新的NC数据表示法

——FADL(工厂自动化描述语言),该语言具有能面向对象设计、能粗象硬件、能表征曲线形状等优点,并具有广泛的覆盖性。这为进一步开发PC机的潜能提供了软件基础。

图2 OSEC开放数控系统体系结构

欧洲二十多家机床、控制生产与开发商及有关研究机构联合启动的“自动化系统中的控制的开放系统体系结构(Open System Architecture For Controls

4

Within Automation Systems),简称OSACA,它借鉴ISO的开放式系统互联模型OSI,通过对现有控制系统的详细分析提出了一个“分层的系统平台+结构功能单元”的结构(图3),即将不同的功能单元在基于消息的平台上连接起来。

图3 OSACA系统结构框图

OSACA认为一个开放式控制系统应以一个平台为基础,由一组逻辑的、离散的组件组成,控制系统本身不带有平台的任何信息,而组件与平台之间定义了很好的接口,允许不同供应商提供的组件之间的协调工作,正确工作的控制器可运行于不同的系统平台之上。OSACA的核心部分是通讯系统(Communication System),它屏蔽了操作系统的差异,保证了各功能单元(AO)的可移植性和互操作性以及系统配置文件的通用性。在OSACA开放式控制系统中,应用程序接口(API)是系统平台向外部提供服务的通道,也是结构功能单元访问系统平台的唯一途径,它屏蔽了平台的真实实现,保证了系统平台的硬件无关性和操作系统无关性。

在美国,一项名为“开放式、模块化体系结构控制器(OMAC)”的计划于1994年由通用、福特、克莱斯三大汽车公司开始启动,其目的是用更加开放、更加模块化的控制结构使制造系统更具柔性、更加敏捷。该计划启动不久便公布了一名为“OMAC APT”的规范,并促成了一系列相关研究项目的运行。

OMAC没有指定一个固定的基础体系结构,也没有提供有关系统硬、软件平台信息,没有指定操作系统,但实际上它总得依附于一个系统平台,它使用一种能支持大多数面向对象的概念的接口定义语言IDL,用IDL的语法规范来保证它的平台无关性。IDL规范被编译进文件和Stub程序,可直接被应用开发者使用,并支持向多种编程语言的映射,如:C++,JAVA和C。

OMAC API假设了一个粗象的体系来描述用户所谓的“参考模型”:基类、

5

模块、体系结构设计、框架细节设计。通过对通用控制器按类的分解获得了基类,基类定义了控制器的类层次结构,将基类分组就构成了模块,模块是组成控制系统的即插即用元件,具有通用的接口,可以被重新利用和继承。

与OSACA一样,OMAC目前也只是处于试验阶段,并未形成商业化的产品。 (2) 国内开放式数控系统的研究现状

近年来,我国的广大数控研究者也相继开发出了如中华Ⅰ型、蓝天Ⅰ型、航天Ⅰ型、华中Ⅰ型等开放式数控系统。其中以华中Ⅰ型较具代表性,它采用工业PC机上配适配器卡的结构,是基于通用32位工业PC机和DOS平台的开放式体系结构(图4),具有较好的模块化、层次化特征,系统配套能力强,扩展与伸缩性较好,便于二次开发,较好地实现了CAD/CAPP/CAM一体化。其它几种类型的国产开放式数控系统也都有其各自的特点,并都在进一步的完善和发展之中。

图4 华中Ⅰ型数控系统体系结构

1.1.4开放式数控系统有待进一步研究和解决的主要问题

作为一个真正完全开放的来自IEEE所定义的开放式数控系统,目前还存在许多有待进一步研究和解决的问题,主要如下:

(1)目前,各类开放式数控系统基本上都基于MS-DOS平台这个主流操作系统,当然,也有在Windows环境下使用协处理板卡来处理实时任务,或者采用专门的CPU来运行实时操作系统等方式。到目前为止,还没有真正解决Windows操作系统的实时控制问题。人们渴望有一个标准化的友好用户界面和窗口操作环境。

(2)各系统体系结构不一致,相互之间缺乏兼容性。同时,虽然都已模块化,

6

但未国际标准化,没有一个很好的权威的国际通用的现场总线和接口标准。这将对未来的NC技术及网络间的联结有着很大的影响。

(3)控制系统间的联接是控制系统间交换信息的必要,目前非实时性的TCP/IP只能应用与软件包或零件程序包整体的上下载。缺乏实时性的传输控制协议(TCP/IP)。

(4)目前NC数据表达大多采用IEC1131 3或RS 274D标准,随着PC技术和软件的飞速发展,各类面向对象的新的NC数据表达方法(如:FADL、IDL等语言)必须要与开放式数控系统相容。

(5)作为完全开放的数控系统其安全性和可靠性受到很大的威胁,因此除了目前采用的通过添加容错元件,如RAID(独立磁片冗余阵列)来保证系统可靠性和利用看门狗电路来保证其安全性以外,人们也希望有更加行之有效又经济实惠的能预防如病毒之类的对系统软硬件造成严重损坏的措施。因此可靠性与安全性的研究也是有必要的。

1.1.5 利用运动控制卡来开放系统

如何使传统的专用型封闭式系统走向开放,不同的系统开发商及研究机构对此提出了一些解决方案。按开放的层次不同可分3种途径,它们的开放层次不同,难度不等,获得的开放效果也相差很大。如图1所示,虚线将控制系统划分为人机控制(Man-Machine Control, MMC)层和控制内核层两个层面。其中,控制内核是CNC系统完成实时加工过程调度和控制的核心部分,一般和系统实时性相联系。3种方式就是基于对这两个层面开放的不同处理来区分的。

图5 控制系统的开放途径

Fig.1 Approaches to implement the open CNC

7

(1)开放人机控制接口。

这种方式允许开发商或用户构造或集成自己的模块到人机控制接口(Man-Machine Interface, MMI)中。这一手段为用户提供灵活制定适用于各自特殊要求的操作界面和操作步骤的途径,一般使用于基于PC作为图形化人机控制界面的系统中。

(2)开放系统核心接口。

此方式除了提供上述方式的开放性能外,还允许用户添加自己特殊的模块到控制核心模块中。通过开放系统的核心接口,用户可按照一定的规范将自己特有的控制软件模块加到系统预先留出的内核接口上。 (3)开放体系结构。

开放体系结构的解决方案是一种更彻底的开放方案。它试图提供从软件到硬件,从人机操作界面到底层控制内核的全方位开放。人们可以在开放体系结构的标准及一系列规范的指导下,按需配置成功能可繁简、性能可高低、价格可控制、不依赖于单一卖方的总成系统。

从实现方法上,PC-NC(个人计算机数控)是目前比较现实的NC开放化的途径。也就是在PC机硬件平台和操作系统的基础上,使用市售的软件和硬件插卡,构造出数控系统功能。但是,现有PC的操作系统缺乏实时性,可靠性尚有待提高。PC-NC主要可归纳为3种:NC板插入到PC中、PC板插入NC装置中、软件NC。NC板插入PC中的形式,就是将运动控制板或整个CNC单元(包括集成的PLC)插入到个人计算机的扩展槽中。PC机作非实时处理,实时控制由CNC单元或运动控制板来承担,这种方法能够方便地实现人机界面的开放化和个性化,即上述第1层次的开放;在此基础上,借助于所插入NC板的可编程能力,能部分实现系统核心接口的开放,即上述第2层次的开放。PC板插入NC中这一形式,主要为一些大型CNC控制器制造商所采用。其原因有两方面:一是许多用户对他们的产品很熟悉,也习惯使用;另一方面是控制器制造商不可能在短时间内放弃他们传统的专用CNC技术。因此,才出现了这种折中方案,其做法就是在传统的CNC中提供PC前端接口,使其具有PC处理的柔性。显然,这种系统的NC内核保持了原有的封闭性,故只能实现上述第1层次的开放。所谓软件NC,是指NC系统的各项功能,如编译、解释、插补和PLC等,均由软件模块来实现。这类系统借助现有的操作系统平台(如DOS,Windows等),在应用软件(如Visual C++,Visual Basic等)的支持下,通过对NC软件的适当组织、划分、规范和开发,可望实现上述各个层次的开放。

8

1.2 课题的意义和背景

1.2.1 课题的目的及任务要求

本课题是开发Windows2000操作系统下基于运动控制器的开放式数控系统。利用Visual C++6.0 编程语言实现对下位机的控制,实时完成各项控制任务。课题使用了固高科技(深圳)有限公司提供的GT-400-SV四轴运动控制器、一台PC机、一个机械控制平台、松下Panasonic交流伺服电机驱动器及与固高配套的端子板等设备。实现设备间的联结,熟悉接口功能,利用固高公司提供的库函数完成对运动平台控制轴的控制。

毕业设计的主要任务要求是熟悉课题的硬件装置和广州固高公司提供的库函数;学习应用Visual C++ 6.0 编写NC系统的界面;编写相应的NC控制程序。

1.2.2 课题的难点

本课题的难点主要在于以下几点:

(1) 由于作者未接触过Visual C++ 6.0,因此,最大的难点在于要在短短的数

周之内,掌握Visual C++ 6.0,熟悉VC的一些基本概念,同时在规定的时间内完成程序的编写。这是作者未曾想到的,在整个设计过程中,也的确遇到了这种问题。

(2) 课题涉及运动控制器、开放式控制系统等新概念,由于所学的专业课内未

接触这些内容,因此首先要熟悉这些概念,了解什么是运动控制器及其工作原理,了解开放式数控系统的概念及发展状况。同时,掌握松下伺服电机及驱动器,熟悉硬件结构及电路图较花费时间。

为解决这些难点,必须查阅大量相关资料,尤其是Visual C++。在设计过程中,作者查阅了不下20本Visual C++的资料书刊。翻阅了松下交流伺服电机驱动器的使用说明及固高科技(深圳)运动控制器的说明书,由于时间有限,再加上要熟悉掌握Visual C++的困难,因此在设计中,尚有不足之处,望导师谅解。

9

2 整 体 设 计

2.1 硬件结构及原理图

GT-400-SV运动控制器以PC机为主机,提供标准的ISA总线接口,同时提供RS232串行通讯和PC104通讯接口,方便用户配置系统硬件。该运动控制器提供C语言函数库实现复杂的控制功能,用户能够将这些控制函数灵活地与自己控制系统所需的数据处理、界面显示、用户接口等部分集成在一起,建造符合特定应用要求的控制系统,以适应各种应用对象的要求。

GT-400-SV将四轴电机控制集成在同一运动控制器上,适用于脉冲控制的交流伺服电机控制。采用运动控制器进行控制时,需要一台PC机、一套运动控制器及配套的连接电缆和接口端子板、电机及驱动器和外部接口电源等硬件。这些部件之间的典型连接如图所示。

PC机通过主机通讯接口与GT-400-SV运动控制器交换信息。包括向运动控制器发出运动控制指令,并通过该接口获取运动控制器的当前状态和相关控

IBMPC-AT计算机

制参数。运动控制器完成实时轨迹规划、位置闭环伺服控制、主机命令处理和控

图6 采用四轴运动控制器组成的控制系统框图

制器I/O管理。运动控制器通过编码器接口,获得运动位置反馈信息,通过四路

10

模拟电压输出(或脉冲输出)接口控制伺服电机实现主机要求的运动。

运动控制器还提供八路限位开关(每轴二路)输入,四路原点开关(每轴一路)输入,四路伺服电机驱动器报警信号(每轴一路)输入,四路伺服电机驱动器使能信号(每轴一路)输出,四路伺服电机驱动器复位信号(每轴一路)输出以及十六路通用数字量输出接口、十六路通用数字量输入接口。实现复杂灵活的运动控制。

2.1.1 运动控制器的硬件结构及安装

GT-400-SV运动控制器提供了2个外部接口与外部设备进行信息交换。同时,运动控制器上有4组跳线(或开关)选择控制器与主机通讯的接口地址、中断矢量号和控制器的工作模式。下图为运动控制器接口与跳线位置示意图。 CN4 CN2 CN3 JP3 JP4 CN5 CN1 1 ADSP21xx FPGA JP1 JP2 图7 GT-400-SV 运动控制器接口与跳线器位置示意图

接口定义如下表: 定义 CN1 CN2 CN4 CN3 CN5 JP1 JP2 JP3 JP4 功能 GT-400-SV 伺服控制接口 GT-400-SV 外部I/O 接口 调试接口(非用户使用接口) 调试接口(非用户使用接口) 电源输入(对于PC104) GT-400-SV 基地址开关(对于ISA/PC104总线) GT-400-SV 中断矢量号跳线器(对于ISA/PC104总线) 看门狗跳线器 调试用(非用户跳线器) 11

在本实验中,作者利用了CN1、CN2 、JP1 、JP2、 JP3、 J P4。四个跳线开关的设置如下:

JP1为GT-400-SV 基地址开关跳线,采用默认设置,设置如下:

图8 基地址开关跳线

JP2为GT-400-SV 中断矢量号跳线器,GT-400-SV设置的默认中断矢量号为IRQ10。跳线如下: 9 图9 中断矢量号跳线 JP3为看门狗跳线器。用户通过跳线设置使看门狗有效后,当控制器死机时,看门狗在延时一段时间后自动使控制器复位。默认设置时,看门狗无效。

图10 看门狗跳线 JP4为控制器调试跳线选择器,出厂时已设定,用户不得更改跳线。

图11 调试跳线选择

在联结运动控制卡和计算机时,应先检查GT-400-SV板卡表面是否有损坏。然后按照要求,设置跳线。硬件检查和设置完成后,关闭计算机,用扁平电缆将GT-400-SV的CN2接口与转接挡板的扁平电缆联结器联结。将GT-400-SV插入空的ISA总线插槽,并将其固定在机箱上。同时,将转接挡板固定在机箱上。

针对所构造的系统和软件环境编写测试程序。根据前面通讯基地址开关的设

IRQ10 10 中断请求 1

9

2 10 12

置,在程序中正确地设置运动控制器总线通讯的基地址。如果该程序返回“通讯正常”,说明运动控制器与计算机已经建立了正常的通讯,并且运动控制器接口程序版本正确,可以进行下面的有关测试。

如果该程序返回的信息是“通讯失败”(即GT_SetAddr()或GT_ChkVrsn()函数返回值为-1),请确认程序中设置的基地址与板卡上JP1开关设置的是否一致,并判断该地址是否与其它硬件冲突。调整运动控制器硬件开关和程序设置的基地址参数,使之不与主机的其他硬件冲突,实现正常的通讯结果。

如果该程序返回的信息是“版本出错”(即GT_ChkVrsn()函数返回值为-2),请检查接口程序和运动控制器的版本是否相符。

这样就完成了运动控制卡和计算机的联结。

2.1.2 运动控制器与接口端子板的联结

在运动控制器与主机之间建立了通讯之后,可以将运动控制器与控制对象联结。固高公司提供接口端子板附件,以方便用户系统联结。首先关闭计算机。用附带的两根屏蔽电缆将GT-400-SV的CN1接口与接口端子板的CN1接口相联结,将转接挡板的电缆联结器与接口端子板的CN2相联结。接口端子板的CN5—CN6用于联结所控制的伺服电机,CN5对应电机1,CN6对应电机2。各电机的相关联线联结到相应编号的接口端子上。如下图所示,

图12 运动控制器与接口端子板联结示意图

接口端子板上的接口功能如下 CN1 CN2 GT-400-SV运动控制器的伺服控制接口 GT-400-SV输入/输出接口。该接口用于限位开关、Home信号输入、电机驱动器报警清除、伺服使能、报警信号输入和通用输入/输出 CN3

接外部电源,以保证CN2各引脚正常工作 13

CN4 CN5 CN6 CN7 CN8 CN9 CN10 CN11 CN12 CN13 CN14 用于串行通讯的信号连接 使用时与伺服驱动器相连, CN5对应1轴,CN6对应2轴, CN7对应3轴,CN8对应4轴 对应于两个辅助编码器输入接口(可选) 提供了8路模拟输入通道(可选) 用作专用及通用数字量输入/输出 在实验中,由于只有两根轴,因此端子板上的接口仅使用了CN1,CN2,CN3,CN5,CN6。其中,CN1、CN2接口通过屏蔽电缆和运动控制卡的CN1、CN2,CN1、CN2接口共有62个引脚,但其功能不同。CN5、CN6分别与一个松下PANASONIC伺服驱动器联结。CN3接外部电源。

2.1.3 PANASONIC伺服电机及驱动器与系统的联结

实验使用的是MSDA023A1A伺服电机及驱动器,接线图如下图所示

图13 运动控制器与PANASONIC电机及驱动器的接线 14

2.2 软件实现

2.2.1创建工程

启动Visual C++6.0, 按以下步骤创建一个工程:

第一步:选择File|New ...菜单项,单击New对话框中的Projects选项卡,如下图所示。

图14 新建“运动控制卡”的New对话框

确认选中了MFC AppWizard(exe),然后在Location编辑框中键入“E:\\张喆\\GOOGOL\\”。在如图所示的Project name编辑框中输入“运动控制卡”,然后单击OK键,下面是一系列的AppWizard屏幕,其中第一个如上图所示。

第二步:确认选中了Single Document选项。接受下面四个屏幕的默认设置。最后一个屏幕应当看起来如下图所示。注意,基类选择CFormView.

15

图15 选择CFormView类为基类

单击Finish按钮。在AppWizard生成代码之前,将会显示New Project Information 对话框,如下图所示

图16 点击OK,完成应用程序的创建

单击OK按钮,AppWizard开始创建应用程序的子目录和在这个子目录下的一系列文件。

16

界面制作:

软件的界面如图所示。

图17 主程序界面

整个界面可以分为五部分: (1) 上部的标题栏; (2) 上部的菜单栏;

(3) 左侧的编辑框,用于G指令输入;

(4) 右侧上部的“数据显示”区,用于显示当前坐标,终点坐标及实际的速度、

加速度;

(5) 右侧下部的“数据输入”区 ,实际

是一个属性表,主要用于数据输入。

2.2.2 制作数据输入区的属性表及代码添加 1.

创建属性页对话框。在工作区RESOURCE中选取Dialog项,添加对话框资源。如右图所示。右击对话框,修改property属性,修改如下:将ID改为IDD_PAGE1

17

Caption改为“手动”,Font改为times new roman 8号字体,如图。在Style选项卡中,选择Styled的Child,及Border的Thin, system menu的复选框不选,如图。调整对话框的大小为339×132。

图18 设置对话框资源的ID及Caption

图19 设置其他属性

以相同的方法再创建4个对话框资源,Caption分别为“MDI”、“自动”、“管理员参数”、“毕业设计已完成的功能”。 2.

添加类。选择菜单栏View|ClassWizard, 弹出图示对话框,单击Add Class... 的New按钮。

图20 用ClassWizard添加对话框类

18

此时弹出图示对话框,选择CPropertyPage为基类,以CPage1为类名 ,命名IDD_PAGE1对话框,同时改头文件和主文件名为page。 如下图所示。

图21 定义属性页类

依次添加另外4个对话框类。 3.

添加CSheet类

单击菜单栏View|ClassWizard, 单击Add Class... New,新建一个类,类名为CSheet,基类选择CPropertySheet,头文件名和主文件名改为Sheet。 4.

添加代码

在CSheet类的头文件中添加以下代码: // Sheet.h : header file //

#include \

class CSheet : public CPropertySheet

19

{ DECLARE_DYNAMIC(CSheet)

// Construction public: CSheet(CWnd* pParentWnd = NULL, UINT iSelectPage = 0);

// Attributes public: CPage1 m_page1; CPage2 m_page2; CPage3 m_page3; CPage4 m_page4;

CPage5 m_page5;

// Operations public: // Overrides

// ClassWizard generated virtual function overrides 在CSheet类的成员函数中添加如下代码:

CSheet::CSheet(CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(IDS_SHEETNAME,pParentWnd, iSelectPage)

{

AddPage(&m_page1); AddPage(&m_page2); AddPage(&m_page3); AddPage(&m_page4); AddPage(&m_page5); }

CSheet::~CSheet() { } 5.

将属性表嵌入FormView

20

在FormView中添加图片控件,其大小要足以容纳属性表,其ID改为IDC_PLACEHOLDER,在其属性选项中选择默认值Visible。在CSheet类头文件中,定义函数原型为 // Construction public:

CSheet(CWnd* pParentWnd = NULL, UINT iSelectPage = 0); 在CMyView类的头文件中添加如下代码 // Attributes public:

CSheet *m_pmypropsheet; CMyDoc* GetDocument();

// Operations public:

/////////////////////////////////////////////////////////////// 在CMyView类OnInitialUpdate函数中添加如下代码 void CMyView::OnInitialUpdate() {

CWnd*pwndpropsheetholder=GetDlgItem(IDC_PLACEHOLDER);

m_pmypropsheet=new CSheet(pwndpropsheetholder); if

(!m_pmypropsheet->Create(pwndpropsheetholder,WS_CHILD|WS_VISIBLE,0))

{

delete m_pmypropsheet; m_pmypropsheet=NULL; return;

}

CRect rectpropsheet;

pwndpropsheetholder->GetWindowRect(rectpropsheet);

m_pmypropsheet->SetWindowPos(NULL,0,0,rectpropsheet.Width(),rectpropsheet.Height(),SWP_NOZORDER|SWP_NOACTIVATE);

CFormView::OnInitialUpdate(); GetParentFrame()->RecalcLayout();

21

}

ResizeParentToFit();

如下图所示,在工作区Resource的String Table中添加资源 IDS_SHEETNAME 属性

图22 添加String Table资源IDS_SHEETNAME

最后在CSheet类的原函数定义中修改如下 IMPLEMENT_DYNAMIC(CSheet, CPropertySheet)

CSheet::CSheet(CWnd* pParentWnd, UINT iSelectPage) { }

这样就完成了属性表的嵌入 6.

完成各属性页对话框上的控件 AddPage(&m_page1); AddPage(&m_page2); AddPage(&m_page3); AddPage(&m_page4); AddPage(&m_page5);

:CPropertySheet(IDS_SHEETNAME, pParentWnd, iSelectPage)

利用CLassWizard添加各属性页上的控件

Page1上的控件变量

控件ID 控件 数据成员 类型 IDC_PAGE1_COMBO 增量值 m_value CString

22

IDC_PAGE1_CON1 手动连续/手动增量 m_con int

图 23 添加Page1属性页控件

Page2上的控件变量 控件ID 控件 数据成员 类型 IDC_PAGE2_DIRECT 方向 m_direct CString IDC_PAGE2_INPUT 数据输入方式 m_input int IDC_PAGE2_METHOD 运动方式选择 m_method CString IDC_PAGE2_PRO 请输入程序段 m_program CString IDC_PAGE2_RAD 半径 m_rad double IDC_PAGE2_X X终点 m_x double IDC_PAGE2_Y Y终点 m_y double

图24 添加Page2属性页控件

23

Page3上的控件变量

控件ID 控件 数据成员 类型 IDC_PAGE3_CON 单段/连续 m_con int IDC_PAGE3_MODE1 运行模式 m_mode int

图25 添加Page3属性页控件

Page4上的控件变量

控件ID 控件 数据成员 类型 IDC_PAGE4_XLEFT X轴左极限 m_xleft long IDC_PAGE4_XRIGHT X轴右极限 m_xright long IDC_PAGE4_YLEFT Y轴左极限 m_yleft long IDC_PAGE4_YRIGHT Y轴右极限 m_yright long

图26 添加Page4属性页控件

24

Page5上的控件变量

控件ID 控件 数据成员 类型 IDC_FIN_NO1 选择控制轴 m_AxisNum int

图27 添加Page5属性页控件

本次毕业设计由于时间和能力的限制,尚有部分功能未完成,其中属性页1-4仅仅是一个界面,作者将完成的功能统一安排在属性页5中,因此,在下面的部分,作者重点介绍属性页5及其完成的功能:

图28 S曲线模式对话框

图29梯形曲线模式对话框 图30 电子齿轮模式对话

图31 直线插补对话框 25

图32 圆弧插补对话框 图33 椭圆插补对话框 以上6张图为本次课题主要完成的一些对运动控制卡的功能实现。

S曲线模式对话框中“启动”按钮添加的代码如下: void CModeS::OnFinSmodeStart() {

UpdateData(TRUE);

GT_Axis(1); GT_ClrSts(); GT_SetKp(2); GT_SetKi(0); GT_SetKd(6); GT_SetKvff(0); GT_SetKaff(0); GT_SetILmt(100); GT_PrflS();

GT_SetVel(m_Vel); GT_SetMAcc(m_Acc); GT_SetJerk(m_Jerk); GT_SetPos(m_Pos*2500); GT_AxisOn(); GT_Update(); }

梯形曲线模式对话框中“启动”按钮添加的代码如下: void CModeTrapezia::OnFinTrapeziaStart() {

UpdateData(TRUE); GT_Axis(1);

GT_ClrSts(); GT_SetKp(2); GT_SetKi(0); GT_SetKd(6); GT_SetKvff(0); GT_SetKaff(0); GT_SetILmt(100); GT_PrflT();

26

GT_SetVel(m_Vel); GT_SetMAcc(m_Acc); GT_SetPos(m_Pos*2500); GT_AxisOn(); GT_Update(); }

电子齿轮模式对话中“启动”按钮添加的代码如下: void CGear::OnFinGearStart() {

UpdateData(TRUE); GT_Axis(2); GT_ClrSts(); GT_SetKp(2); GT_SetKi(0); GT_SetKd(6); GT_SetKvff(0); GT_SetKaff(0); GT_SetILmt(100); GT_Update(); GT_AxisOn(); GT_PrflG(1); GT_SetRatio(m_Ratio); GT_Update();

GT_Axis(1); GT_ClrSts(); GT_SetKp(2); GT_SetKi(0); GT_SetKd(6); GT_SetKvff(0); GT_SetKaff(0); GT_SetILmt(100); GT_PrflT(); GT_SetVel(m_Vel); GT_SetAcc(m_Acc); GT_SetPos(m_Pos*2500); GT_AxisOn(); GT_Update(); }

直线插补对话框中“启动”按钮添加的代码如下: void CLine::OnFinLineStart() {

UpdateData(); GT_Axis(1); GT_ClrSts(); GT_SetKp(2); GT_SetKi(0); GT_SetKd(6); GT_SetKvff(0); GT_SetKaff(0);

27

GT_SetILmt(100); GT_Update(); GT_AxisOn();

GT_Axis(2); GT_ClrSts(); GT_SetKp(1); GT_SetKi(0); GT_SetKd(4); GT_SetKvff(0); GT_SetKaff(0); GT_SetILmt(100); GT_Update(); GT_AxisOn();

double cnt1[5]={1,0,0,0,0}; double cnt2[5]={0,1,0,0,0}; GT_MapAxis(1,cnt1); GT_MapAxis(2,cnt2); GT_SetSynVel(m_Vel); GT_SetSynAcc(m_Acc); GT_LnXY(m_X*2500,m_Y*2500); GT_Update(); }

圆弧插补对话框中“启动”按钮添加的代码如下: void CArc::OnFinArcStart() {

UpdateData(); GT_Axis(1); GT_ClrSts(); GT_SetKp(2); GT_SetKi(0); GT_SetKd(6); GT_SetKvff(0); GT_SetKaff(0); GT_SetILmt(100); GT_Update(); GT_AxisOn();

GT_Axis(2); GT_ClrSts(); GT_SetKp(2); GT_SetKi(0); GT_SetKd(6); GT_SetKvff(0); GT_SetKaff(0); GT_SetILmt(100); GT_Update(); GT_AxisOn(); double cnt1[5]={1,0,0,0,0}; double cnt2[5]={0,1,0,0,0};

GT_MapAxis(1,cnt1);

GT_MapAxis(2,cnt2);

28

GT_SetSynVel(m_Vel); GT_SetSynAcc(m_Acc);

GT_ArcXY(m_X*2500,m_Y*2500,m_Angle); GT_Update();

}

椭圆插补对话框中“启动”按钮添加的代码如下: void CModeTrapezia::OnFinTrapeziaStart() {

UpdateData(TRUE); GT_Axis(1);

GT_ClrSts(); GT_SetKp(2); GT_SetKi(0); GT_SetKd(6); GT_SetKvff(0); GT_SetKaff(0); GT_SetILmt(100); GT_PrflT();

GT_SetVel(m_Vel); GT_SetMAcc(m_Acc); GT_SetPos(m_Pos*2500); GT_AxisOn(); GT_Update(); }

“停止”按钮代码添加如下 UpdateData();

GT_Axis(1); //指定1号轴为当前轴

GT_SmthStp(); //使1号轴平滑停止 GT_AxisOff(); //close present axis

GT_Update(); //刷新1号轴设置的参数,电机停止 GT_Axis(2); //指定2号轴为当前轴 GT_SmthStp(); //使2号轴平滑停止 GT_AxisOff(); //close present axis

GT_Update(); //刷新2号轴设置的参数,电机停止 OnOK();

这6大功能属于闭环控制范围内,此外开环控制中启动的代码如下: void CPage5::OnFinStart()

29

{ }

停止按钮代码如下: void CPage5::OnFinStop() {

GT_Axis(axisn); }

2.2.3 “数据显示区”的制作及代码

数据显示区主要是完成显示当前轴的实际位置,实际速度和实际最大加速度等功能。在该功能区,有五个控件变量

控件ID 控件 数据成员 类型 IDC_ATLPOSX 当前轴的实际位置 m_atlposx CString IDC_DISPLAY_ACC 显示当前最大加速度 m_acc CString IDC_DISPLAY_VEL 显示当前速度 m_vel CString IDC_DISPLAYDATA 显示数据 IDC_KILLTIMER 结束显示 GT_AxisOff(); GT_Update();

GT_SmthStp(); GT_Close();

UpdateData(TRUE); if (m_AxisNum==0) {axisn=1; GT_AxisOn();}

else if (m_AxisNum==1) { axisn=2; GT_Axis(2); GT_AxisOn(); } else {

AfxMessageBox(\请选择控制轴\}

GT_Axis(1);

30

该显示区,作者采用了这样的办法,在单击“显示数据”按钮时,设置了一个定时器,每0.1秒使用GT_GetAtlPos()命令读取一次运动控制卡的实际位置,由于读取的是脉冲,因此,根据换算关系,即2500个脉冲对应一毫米,然后,利用Static Text显示当前位置。同时,由于启动时,调用了回原点命令,设置负限位开关处为坐标原点,因此就建立了坐标系。 “显示数据”代码添加如下: void CMyView::OnDisplaydata() { SetTimer(500,100,NULL);}

void CMyView::OnTimer(UINT nIDEvent) { }

在添加代码之前,必须利用ClassWizard给CMyView中添加MW_TIMER消息函数。

2.2.4 G指令输入框的制作

由于作者的C语言知识的缺乏,暂时还未能完成编辑框和文档的关联,因此该区域尚不能实现文件的读取、创建及存档。

double Acc; GT_GetMAcc(&Acc);

CString Sacc; Sacc.Format(\m_acc=Sacc; UpdateData(FALSE); CFormView::OnTimer(nIDEvent); double Vel; CString Svel; m_vel=Svel;

GT_GetVel(&Vel);

Svel.Format(\UpdateData(FALSE);

long atlpos; GT_GetAtlPos(&atlpos); CString output; m_atlposx=output;

float output1; UpdateData(FALSE);

output1=float(atlpos/2500); output.Format(\

31

第四部分:在菜单栏的设置项中,添加“初始化程序”命令。

图34 初始化程序选项属性

使用ClassWizard,为该选项添加COMMAND消息。

32

3 系 统 测 试

在完成了整个设计后,进行了程序的测试。主要对以下功能进行了测试: 1.回原点------该功能能实现X轴回到负限位开关处,并将实际位置寄存器和目标位置以及当前伺服周期的规划位置寄存器设为零值。该功能测试无问题。 2.开环控制------该功能可取的1或2轴的控制权,开环控制运动轴。测试结果表明,能实现单方向的移动,但无法实现双向的移动。

3.S曲线模式------该功能用于实现S曲线模式特定的运动特征控制相应的电机运动。该功能在调试多次后,均失败,未能使运动轴按要求运动,但伺服电机是打开的。

4.梯形曲线模式------该功能用于实现梯形曲线模式特定的运动特征控制相应的电机运动,调试多次,无问题出现,该功能测试无问题。

5.电子齿轮模式------该功能用于实现多轴按一定比例协调运动。调试结果无问题出现。

6.直线插补------该功能实现面向坐标系的直线插补运动。输入参数为速度,加速度及XY轴的目标位置。调试结果无问题。

7.圆弧插补------该功能实现面向坐标系的圆弧插补运动。输入参数为速度,加速度,旋转角度及XY轴的目标位置。调试结果无问题。

8.椭圆插补------该功能实现面向坐标系的椭圆插补运动。输入参数为速度,加速度,旋转角度及椭圆参数a,b,x,y。调试结果无问题。

9.实际位置、速度、最大加速度的显示------基本能显示实际位置,速度和最大加速度,但有时会产生波动。

10.错误处理类------该功能根据固高函数的返回值,做出相应的错误处理,并终止程序。

在本课题组中,作者主要实现对主程序的编写及对控制器的直接控制。小组内其他两人分别负责G指令的编译和界面的制作。在毕业设计规定时间内,作者基本完成了毕业设计的要求,但尚有不足之处,比如,控制轴在到达正负限位开关后,往往卡死在那儿,坐标系建立有待进一步完善。这些问题都有待进一步解决。

33

4 评 价 及 总 结

本次毕业设计,作者主要完成了主程序的编写及简单界面的制作。作者看来,设计要求基本达到。小组另外的成员一人负责G指令编译,一人负责程序界面的制作。整个程序的开发都是由小组成员共同开发完成的,在开发过程中,大家互相合作,尽管在整个开发过程中遇到了许多的困难,但是最后还是基本完成了毕业设计任务。 其实在作者接手本课题之前,并没有想到用Visual C++编程,当熟悉了课题的要求以后,意识到这个课题要做好不容易,因为Visual C++编程语言很难,直到现在,虽然程序编完了,但对Visual C++的结构和一些基本概念仍然比较模糊,Visual C++的结构实在太庞大,不花上很长时间根本就无法独立开发一个程序,对于作者来说,编一段程序需要查阅大量资料,找一些类似的代码,经过多次修改和调试才能解决一点问题。

这次毕业设计我认为收获挺大,了解了Visual C++,对运动控制器也有了一个了解,我很希望能继续完成这个课题,使其更加完善,显然,运动控制器的广泛应用有利于软件功能的完善,有利于实现开放式的控制,有利于用户使用的便捷。

最后,要特别感谢殷苏民教授及其研究生张健的帮助,没有他们的帮助,我们的毕业设计可能会遇到更多麻烦。在此再次表示衷心的感谢!

34

【参考资料】

[1].《Visual C++实用编程技术》 位元文化编著. 华中理工大学出版社 1999 [2]. 《Visual C++6开发使用手册》 (美)[K.格雷戈里]K.Gregory著. 机械工业出版社 1999

[3]. 《学用 Visual C++ 6.0》 (美)Davis Chapman著. 清华大学出版社 1999 [4].《Visual C++6.0编程实例》 薛松等编著. 人民邮电出版社 1999

[5].《Visual C++ 6.0开发宝典》 清源计算机工作室编著. 机械工业出版社 1999

[6].《VC++ 编程技巧与示例》 胡峪,刘静编著. 西安电子科技大学出版社 2000

[7].《例解Visual C++ 6.0一学即通》 万跃华主编. 电子科技大学出版社 1999 [8].《Microsoft Visual C++语言参考手册》 [美国微软公司]Microsoft Corporation著. 清华大学出版社 1999.2

[9].《Visual C++编程技巧》 清宏计算机工作室编. 机械工业出版社 2001 [10].《深入Visual C++编程》 蔡宝忠,彭吉梅编著. 中国电力出版社 2001 [11].《C++语言和面向对象程序设计》 宛延 编. 清华大学出版社 [12].《VisualC++6.0开发技巧及实例剖析》 齐舒创作室编著. 清华大学出版社 1999

[13].《Visual C++程序设计基础》 戴锋编著. 清华大学出版社 2001 [14].《VISUAL C技术内幕》(美)克鲁格林斯,戴 维,J.著. 清华大学出版社 [15].《Visual C++5开发人员参考手册》 (美)莱因德克,R.著. 机械工业出版社 [16].《开放式数控系统—新一代NC的主流》 游有鹏等著. 《航空制造技术》 1999年 第5期

[17].《关于软件数控的一些基本构想》 雷为民等. 《小型微型计算机系统》

1999年 第20卷 第2期

[18].《开放式数控系统的研究及其发展现状》 廖德岗著. 《机械》1999年 第26卷 第3期

35

本文来源:https://www.bwwdw.com/article/xlkr.html

Top