版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目一、运动控制─任务1-1
认识运动控制李永杰目录1、运动控制系统2、控制器类型与功能3、常见运动控制模式1、 运动控制系统定义:运动控制起源于早期的伺服控制。简单来说,运动控制就是对机械运动部件的位置、速度等进行实时的控制管理,使其按照预期的运动轨迹和规定的运动参数进行运动。早期的运动控制依赖于复杂的机械设计,随着电子元器件、微处理器以及通信技术的发展成熟,计算机成为了主流设备。一个复杂、高速、高精度的运动控制可通过一个被称作运动控制器的特殊计算机来实现。人们可以使用运动控制器软件完成电子齿轮、电子凸轮等的设置,并运行程序,可以接收各轴的反馈,形成闭合回路,实现运动控制。。一、组成(1)运动控制器:用以生成轨迹点(期望输出)和闭合反馈环。包括闭合的位置、速度环等。(2)驱动或放大器:用以将来自运动控制器的控制信号(速度、扭矩等信号)转换为更高功率的电流或电压信号。更为先进的智能化驱动可以自身闭合位置环和速度环,以获得更精确的控制。(3)执行器:如液压泵、气缸、线性执行机或电机等,用以输出运动。(4)传动机构:用以将执行器的运动形式转换为期望的运动形式,它包括齿轮箱、轴、滚珠丝杠、齿形带、联轴器以及线性和旋转轴承等。(5)反馈装置:反馈传感器如光电编码器,旋转变压器或霍尔效应设备等将执行器的位置反馈到位置控制器,以实现和位置控制环的闭合。(6)人机交互接口:它指人与设备系统之间建立联系、交换信息的输入/输出设备的接口。这些输入输出设备是控制系统与操作人员之间交互信息的窗口。(1)控制器运动控制器是一种可编程装置,是运动控制系统的核心组成部分,相当于人类的“大脑”。它可以连接将规划的运动曲线分配到各轴,并能够监控I/O信号,构成闭环回路,最终将预定的控制方案转变为期望的机械运动。实验室选用固高公司生产的
GTS-800和GEN运动控制器,可以实现高速的点位运动控制。其核心由
DSP
和
FPGA
组成,可以实现高性能的控制计算。除此以外,西门子、三菱、松下等PLC厂商也有相应运动控制专用PLC。GTSGENGEN系列EtherCAT总线网络运动控制器运动控制板实验室配备有GTS-800-PV-PCIe
运动控制器配套端子板,为8轴端子板。端子板包含轴信号、通用数字输入输出、限位信号、原点信号、辅助编码器、模拟量、手轮等多种类型的接口,用来连接运动控制系统的其他组成部分,如电机驱动器、传感器等。轴信号接口端子板的CN1~CN8接口是轴信号接口。原点、限位信号接口端子板
CN9、11是1-8轴原点、限位接口,及通用输入接口。通用输出接口端子板
CN10。辅助编码器接口端子板
CN12
和
CN13
接口是辅助编码器接口。辅助编码器接口接收A相、B相和C相(Index)信号,不能用于捕获功能。高速输入输出接口 CN14
HSIO模拟量接口 CN19
接口是模拟量输入手轮接口 CN20
接口是手轮PLC运动控制西门子、三菱、松下、欧姆龙等厂家PLC都带有运动控制模块及指令,部分厂家还根据配套伺服驱动器提供专用PLC(2)驱动器伺服驱动器(3)执行器包括各类气液压泵、气缸、电机等,输出各种运动。(4)传动机构(5)反馈装置(6)交互接口2、 控制器类型与功能类型运动控制器按结构分类可分为PLC可编程逻辑控制器、单片机控制器、独立式运动控制器、基于PC机的运动控制卡、网络控制器等。PLC控制器单片机运动控制器价格比较低廉,但运行速度较慢,控制精度较低。独立式运动控制器运动控制卡数字信号处理器(DSP)为核心的运动控制器功能一个运动控制系统的功能包括:速度控制和点位控制(点到点)等。有很多方法可以计算出一个运动轨迹,它们通常基于一个运动的速度曲线如三角速度曲线,梯形速度曲线或者S型速度曲线。运动规划实际上是形成运动的速度和位置的基准量。通用运动控制器通常都提供基于对冲击、加速度和速度等这些可影响动态轨迹精度的量值加以限制的运动规划方法,使用者可以直接调用相应的函数。比如对于加速度进行限制的运动规划产生梯形速度曲线;对于冲击进行限制的运动规划产生S形速度曲线等。一般来说,对于数控机床而言,采用加速度和速度基准量限制的运动规划方法,就已获得一种优良的动态特性。对于高加速度、小行程运动的快速定位系统,往往需要高阶导数连续的运动规划方法。多轴插补、连续插补通用运动控制器提供的多轴插补功能在数控机械行业获得广泛的应用。在模具雕刻中存在大量的短小线段加工,要求段间加工速度波动尽可能小,速度变化的拐点要平滑过渡,这样要求运动控制器有速度前瞻和连续插补的功能。不少公司都推出有专门用于小线段加工工艺的连续插补型运动控制器。电子齿轮与电子凸轮电子齿轮和电子凸轮可以大大地简化机械设计,可以实现许多机械齿轮与凸轮难以实现的功能。电子齿轮可以实现多个运动轴按设定的齿轮比同步运动。还可以实现一个运动轴以设定的齿轮比跟随一个函数,而这个函数由其他的几个运动轴的运动决定;一个轴也可以以设定的比例跟随其他两个轴的合成速度。电子凸轮功能可以通过编程改变凸轮形状,无需修磨机械凸轮,极大简化了加工工艺。比较输出在运动过程中,位置到达设定的坐标点时,运动控制器输出一个或多个开关量,而运动过程不受影响。如在AOI的飞行检测中,运动控制器的比较输出功能使系统运行到设定的位置即启动CCD快速摄像,而运动并不受影响,这极大地提高了效率,改善了图像质量。探针信号锁存可以锁存探针信号产生的时刻,各运动轴的位置,其精度只与硬件电路相关,不受软件和系统运行惯性的影响,在CCM测量行业有良好的应用。另外,越来越多的OEM厂商希望他们自己丰富的行业应用经验集成到运动控制系统中去,针对不同应用场合和控制对象,个性化设计运动控制器的功能。3、 常见运动模式运动控制是自动化常用的一种控制,常见控制方式包括位置控制、速度控制、力矩控制,但对象控制方式不同,要求也会有所不同,相应控制曲线也会区别。位置控制单点单速一种比较简单的控制方式,从图中可以看出曲线是梯形方式,有加速过程,达到设定频率后,保持频率输出,达到目标位置后提前减速停止。多点单/多速包括多点单速和多点多速。,多点变速与多点多速不同的是进行速度切换是不停顿的。可以用于高速接近,慢速停止控制场合。多轴两轴或三轴位置控制,需要设定X轴位置、Y轴位置(Z轴位置),2/3轴进行联动控制才能完成工艺要求,控制要求包含了2、3轴直线插补。速度控制单速一种比较简单速度控制,速度一般固定不变,只需要启动与停止控制!多段速一种调速控制,需要预先设定好多种速度,由用户进行或控制器进行速度切换。常见控制方式为变频器控制电机,或伺服速度控制模式。恒速一种PID控制方式,需要设定一个目标速度值,控制当前速度达到设定速度,常见控制一般为变频器+编码器进行恒速控制。力矩控制单力矩一种比较简单力矩控制,转矩一般固定不变,只需要启动与停止控制!常见控制方式为变频器转矩控制或伺服转矩控制。多段力矩一种切换力矩控制,需要预先设定好多种转矩,由用户进行或控制器进行力矩切换,常见控制方式为变频器转矩控制或伺服转矩控制。恒力矩一种PID控制方式,需要设定一个目标力矩值,控制当前力矩达到设定力矩,常见控制方式为张力控制器或变频器加磁粉离合器控制。项目一、运动控制─任务1-2
控制器及安装李永杰目录1、GEN运动控制器2、控制器安装3、软件调试1、 GEN运动控制器GEN-008-00运动控制器是一款基于EtherCAT总线的插卡式运动控制器,它集成了EtherCAT主站解决方案,可实现8轴的同步运动控制,同时支持gLink-I
IO模块和EtherCAT
IO模块扩展。该多轴网络运动控制器采用高性能运动控制算法,支持多轴插补、高阶S曲线加减速、电子凸轮、电子齿轮等运动模式。一、运动控制系统组成GEN2、 控制器安装一、硬件安装1)关断计算机电源。2)打开计算机机箱,选择一条空闲的PCI插槽,用螺钉旋具卸下对应插槽的挡板条。3)将运动控制器可靠地插入该槽。4)拧紧其上的固定螺钉。5)卸下临近插槽的一条挡板条,用螺钉将转接板固定在机箱该插槽上。6)盖上计算机机盖,打开PC电源,启动计算机。二、软件安装在Windows下安装驱动程序方法基本一致,在此以Windows
10安装GEN-008-00运动控制器为例进行图解说明:1)在硬件安装好,启动计算机后,进入计算机设备管理器界面,Windows将自动检测到运动控制器(PCI控制器),如图所示。。2)将光盘中的驱动程序先拷贝到计算机中。3)右击【PCI设备】,单击【更新驱动程序软件】。4)单击【浏览计算机以查找驱动程序软件】,在弹出的界面中单击【浏览】,找到驱动程序所在的位置(本计算机为64位操作系统,故安装64为驱动程序,若用户计算机为32为操作系统,则安装相应的32位驱动程序),选中后单击【确定】5)在找到驱动程序所在位置之后,在图中单击【下一步】,驱动开始安装,安装完成后弹出提示界面,单击【关闭】按钮。安装完毕查看资源管理器。3、 软件调试MotionStudio是固高运动控制器的调试软件,适用于固高GTN、GTN、GSN等运动控制器,通过该软件可以设置和监控控制器参数及状态,控制器各数据配置,进行点位运动、JOG运动、回零运动、电气调试等。1)启动调试软件。把Gecat.eni文件拷贝至新版MotionStudio运动控制器管理软件根目录下,启动调试软件,选择GEN及EtherCAT模式。2)运行和映射运动轴。然后选择“运行”和映射到运动轴,调试工具显示相应接入的运动轴。3)配置轴过程数据。对于接入限位传感器的装置,需要对轴进行过程数据配置。本例程选用三菱MR-JET-G-N1伺服装置,添加Inputs数据中的#x60fd,选中过程数据下载的“PDO分配”和“PDO配置”,在“PDO内容”点右键“插入”选择“60fd:00”项。4)导出配置。为了后期的使用,可以直接导出配置,后面重复使用可以直接导入配置。5)重启配置软件。配置过PDO后,需要对调试软件轴重启,在此不重启软件,直接在导航窗口的EtherCATMaster点右键“运行”,轴进行相应重启。此时可以正常使用调试工具。6)查看限位信号。打开调试工具“电气调试”一栏,使用金属接触设备对应轴的限位开关,观察界面中“正限位”、“负限位”是否变化,如果能够报警(指示灯变红),说明PDO配置正确,能够正常使用。项目二、C++项目设计─任务
2-1MFC
应用设计1、任务准备目录2、MFC常用控件及使用3、任务实施1、 任务准备:C++介绍1.1头文件C、C++//设定插入点//字符处理//定义错误码//浮点数处理//文件输入/输出//参数化输入/输出//数据流输入/输出//定义各种数据类型最#include<assert.h>#include
<ctype.h>#include
<errno.h>#include
<float.h>#include
<fstream.h>#include
<iomanip.h>#include<iostream.h>#include<limits.h>值常量#include<locale.h>#include
<math.h>#include
<stdio.h>#include<stdlib.h>#include
<string.h>#include<strstrea.h>#include<time.h>#include
<wchar.h>#include
<wctype.h>//定义本地化函数//定义数学函数//定义输入/输出函数//定义杂项函数及内存分配函数//字符串处理//基于数组的输入/输出//定义关于时间的函数//宽字符处理及输入/输出//宽字符分类标准C++//STL通用算法//STL位集容器//复数类#include
<algorithm>#include
<bitset>#include
<cctype>#include
<cerrno>#include
<clocale>#include
<cmath>#include
<complex>#include
<cstdio>#include
<cstdlib>#include
<cstring>#include
<ctime>//STL双端队列容器//异常处理类//STL定义运算函数(代替运算符)//STL线性列表容器//STL
映射容器//基本输入/输出支持//输入/输出系统使用的前置声明#include
<deque>#include
<exception>#include
<fstream>#include
<functional>#include
<limits>#include
<list>#include
<map>#include
<iomanip>#include
<ios>#include<iosfwd>#include
<iostream>#include
<istream>//基本输入流//基本输出流//STL队列容器//STL
集合容器//基于字符串的流//STL堆栈容器//标准异常类//底层输入/输出支持//字符串类//STL通用模板类//STL动态数组容器#include
<ostream>#include
<queue>#include
<set>#include
<sstream>#include
<stack>#include
<stdexcept>#include
<streambuf>#include
<string>#include
<utility>#include
<vector>#include
<cwchar>#include
<cwctype>usingnamespace
std;#include
<complex.h>#include
<fenv.h>#include
<inttypes.h>#include
<stdbool.h>#include
<stdint.h>#include
<tgmath.h>//复数处理//浮点环境//整数格式转换//布尔环境//整型环境//通用类型数学宏1.2函数math.h、stdlib.h、string.h、float.h库nt abs(inti) 返回整型参数i的绝对值double cabs(struct
complexznum) 返回复数znum的绝对值double fabs(doublex)long labs(longn)double exp(doublex)返回双精度参数x的绝对值返回长整型参数n的绝对值返回指数函数ex的值double
frexp(double
value,int*eptr) 返回value=x*2n中x的值,n存贮在eptr中double
ldexp(double
value,intexp); 返回value*2exp的值double log(doublex)double
log10(doublex)返回logex的值返回log10x的值double pow(double
x,doubley)返回xy的值doublepow10(intp)double sqrt(doublex)double acos(doublex)double asin(doublex)double atan(doublex)返回10p的值返回+√x的值返回x的反余弦cos-1(x)值,x为弧度返回x的反正弦sin-1(x)值,x为弧度返回x的反正切tan-1(x)值,x为弧度double
atan2(double
y,doublex) 返回y/x的反正切tan-1(x)值,y的x为弧度doubledoubledoublecos(doublex)sin(doublex)tan(doublex)doublecosh(doublex)doublesinh(doublex)double
tanh(doublex)返回x的余弦cos(x)值,x为弧度返回x的正弦sin(x)值,x为弧度返回x的正切tan(x)值,x为弧度返回x的双曲余弦cosh(x)值,x为弧度返回x的双曲正弦sinh(x)值,x为弧度返回x的双曲正切tanh(x)值,x为弧度doublehypot(double
x,doubley) 返回直角三角形斜边的长度(z),
x和y为直角边的长度,z2=x2+y2double ceil(doublex)double
floor(doublex)void srand(unsignedseed)返回不小于x的最小整数返回不大于x的最大整数初始化随机数发生器int rand() 产生一个随机数并返回这个数double poly(double
x,int
n,double
c[])从参数产生一个多项式double modf(double
value,double
*iptr)将双精度数value分解成尾数和阶double fmod(double
x,doubley)doublefrexp(double
value,int*eptr)返回x/y的余数将双精度数value分成尾数和阶将字符串nptr转换成浮点数并返回这个浮double atof(char*nptr)点数double atoi(char*nptr)double atol(char*nptr)将字符串nptr转换成整数并返回这个整数将字符串nptr转换成长整数并返回这个整数char *ecvt(double
value,intndigit,int
*decpt,int
*sign)
将浮点数value转换成字符串并返回该字符串char *fcvt(double
value,intndigit,int
*decpt,int
*sign)
将浮点数value转换成字符串并返回该字符串char *gcvt(double
value,intndigit,char
*buf)
将数value转换成字符串并存于buf中,并返回buf的指针char *ultoa(unsigned
long
value,char*string,int
radix)
将无符号整型数value转换成字符串并返回该字符串,radix为转换时所用基数char *ltoa(long
value,char*string,int
radix)
将长整型数value转换成字符串并返回该字符串,radix为转换时所用基数char *itoa(int
value,char*string,int
radix)
将整数value转换成字符串存入string,radix为转换时所用基数double
atof(char
*nptr)
将字符串nptr转换成双精度数,并返回这个数,错误返回0int atoi(char
*nptr)
将字符串nptr转换成整型数,
并返回这个数,错误返回0long atol(char
*nptr)将字符串nptr转换成长整型数,并返回这个数,错误返回0double
strtod(char
*str,char
**endptr)将字符串str转换成双精度数,并返回这个数,long strtol(char
*str,char**endptr,int
base)将字符串str转换成长整型数,
并返回matherr(struct
exception
*e)
用户修改数学错误返回信息函数(没有必这个数,int要使用)double_matherr(_mexcepwhy,char*fun,double*arg1p,
double*arg2p,double
retval)用户修改数学错误返回信息函数(没有必要使用)unsigned
int
_clear87() 清除浮点状态字并返回原来的浮点状态void _fpreset() 重新初使化浮点数学程序包unsigned
int
_status87() 返回浮点状态字io.h、conio.h、stat.h、dos.h、stdio.h、signal.h库int kbhit() 本函数返回最近所敲的按键int fgetchar()从控制台(键盘)读一个字符,显示在屏幕上int getch()int putch()从控制台(键盘)读一个字符,不显示在屏幕上向控制台(键盘)写一个字符int getchar()
从控制台(键盘)读一个字符,显示在屏幕上int putchar() 向控制台(键盘)写一个字符int
getche()
从控制台(键盘)读一个字符,显示在屏幕上int ungetch(int
c)把字符c退回给控制台(键盘)char
*cgets(char
*string)
从控制台(键盘)读入字符串存于string中int scanf(char*format[,argument…])从控制台读入一个字符串,分别对各个参数进行赋值,使用BIOS进行输出int vscanf(char*format,Valist
param)从控制台读入一个字符串,分别对各个参数进行赋值,使用BIOS进行输出,参数从Valist
param中取得int cscanf(char*format[,argument…])从控制台读入一个字符串,分别对各个参数进行赋值,直接对控制台作操作,比如显示器在显示时字符时即为直接写频方式显示int sscanf(char
*string,char*format[,argument,…])通过字符串string,分别对各个参数进行赋值int vsscanf(char*string,char
*format,Vlist
param)通过字符串string,分别对各个参数进行赋值,参数从Vlist
param中取得int puts(char*string) 发关一个字符串string给控制台(显示器),使用BIOS进行输出void cputs(char
*string)发送一个字符串string给控制台(显示器),直接对控制台作操作,比如显示器即为直接写频方式显示int printf(char*format[,argument,…])
发送格式化字符串输出给控制台(显示器)使用BIOS进行输出int vprintf(char*format,Valist
param)
发送格式化字符串输出给控制台(显示器)使用BIOS进行输出,参数从Valist
param中取得int cprintf(char*format[,argument,…])
发送格式化字符串输出给控制台(显示器),直接对控制台作操作,比如显示器即为直接写频方式显示int
vcprintf(char*format,Valist
param)发送格式化字符串输出给控制台(显示器),直接对控制台作操作,比如显示器即为直接写频方式显示,参数从Valist
param中取得intsprintf(char*string,char
*format[,argument,…])将字符串string的内容重新写为格式化后的字符串intvsprintf(char*string,char*format,Valist
param)将字符串string的内容重新写为格式化后的字符串,参数从Valistparam中取得int rename(char*oldname,char
*newname)将文件oldname的名称改为newnameintioctl(inthandle,intcmd[,int*argdx,int
argcx])int (*ssignal(intsig,int(*action)())()执行软件信号(没必要使用)int gsignal(intsig) 执行软件信号(没必要使用)int _open(char
*pathname,intaccess)为读或写打开一个文件int open(char
*pathname,intaccess[,int
permiss])为读或写打开一个文件int creat(char
*filename,intpermiss) 建立一个新文件filename,并设定读写性。permiss为文件读写性,可以为以下值S_IWRITE允许写
S_IREAD允许读
S_IREAD|S_IWRITE允许读、写int _creat(char
*filename,intattrib) 建立一个新文件filename,并设定文件属性。attrib为文件属性,可以为以下值FA_RDONLY只读
FA_HIDDEN隐藏
FA_SYSTEM系统int creatnew(char*filenamt,int
attrib)
建立一个新文件filename,并设定文件属性。attrib为文件属性,可以为以下值FA_RDONLY只读
FA_HIDDEN隐藏
FA_SYSTEM系统int creattemp(char*filenamt,int
attrib)
建立一个新文件filename,并设定文件属性。attrib为文件属性,可以为以下值FA_RDONLY只读
FA_HIDDEN隐藏
FA_SYSTEM系统int read(int
handle,void*buf,int
nbyte)从文件号为handle的文件中读nbyte个字符存入buf中int _read(int
handle,void
*buf,intnbyte)从文件号为handle的文件中读nbyte个字符存入buf中,直接调用MSDOS进行操作.int write(int
handle,void*buf,int
nbyte)将buf中的nbyte个字符写入文件号为handle的文件中int _write(int
handle,void
*buf,intnbyte)将buf中的nbyte个字符写入文件号为handle的文件中int dup(int
handle)复制一个文件处理指针handle,返回这个指针int dup2(int
handle,intnewhandle)
复制一个文件处理指针handle到newhandleint eof(int*handle)检查文件是否结束,结束返回1,否则返回0long filelength(int
handle)返回文件长度,handle为文件号int setmode(inthandle,unsigned
mode)本函数用来设定文件号为handle的文件的打开方式int getftime(inthandle,struct
ftime
*ftime)
读取文件号为handle的文件的时间int setftime(inthandle,struct
ftime
*ftime)
重写文件号为handle的文件时间1.3MFC
类库MFC类主要分为应用程序结构类、窗口支持类、图书设备类、模版集合类、简单数据类型类以及全局AFX函数等6个类。应用程序结构类应用程序开始运行时,应用程序结构类最先被初始化。窗口支持类框架窗口类CFrameWnd提供Windows单文档界面(SDI)的重叠或弹出式的框架窗口,并提供管理窗口的成员。对话框类CDialog类是在屏幕上显示的对话框的基类。视图类CView是应用程序框架窗口中的子窗口。图像设备类绘图对象类封装了常用GDI绘图对象,包括画笔(Pen),刷子(Brush),字体(Font),位图(Bitmap),调色板(Palette)和区域(Region)CDC类是所有设备环境的基类,该类封装了所有图形输出函数。模版集合类主要分为3个部分:数组类,链表类和映射类。简单数据类型类定义了一些常用的数据类型,包括CPoint类,CSize类,CRect类,CString类和CTime类。分别代表点,尺寸大小,矩形区域,字符串和日期时间,这些都是MFC中常用的数据类型。全局AFX函数2、MFC常用控件及使用2.1常用控件按钮控件按钮(Button):用来接收用户的命令,应用程序在接收到用户命令后,通常需要进行一些后台工作。单选按钮(Radio
Button):用来选择某种可能的选择,该选项不是独立的。复选框(Check
Box):用来显示某种可能的选择,该项选择是独立的,用户可以选中或取消该选项。静态文本框静态文本(Static
Text):用来在指定的位置显示特定的字符串,一般用来标识附近另一个控件的内容。显示的字符串一般不再改变,但是在需要的时候,也可以通过调用相应的函数来进行设置。工作框编辑框(Edit
Box):用来接收用户输入的字符串。编辑框可以接收字符串、数字、密码等。也可以对这些控件通知进行处理。列表框(List
Box):用来选择一系列的可能选择,用户通过滚动条可以在这些选择中浏览。组合框(Combo
Box):列表框和编辑框的组合,用户除了可以在列表中对已经存在的选项进行选择外,还可以输入新的选择。组成框(Group
Box):用来包围具有逻辑关系的一组控件,在这些控件的周围加上边界和标题。组成框仅仅是在视觉效果上对控件进行“成组”,真正的“成组”工作还需要另外一些工作。其他控件图形控件(Picture
Control):常用于显示位图(Bitmap)和图标(Icon)滚动条(Scroll
Bar):这包括水平滚动条和垂直滚动条。进度条(Progress
control):在进行一项需要占有较长时间的操作时来反应当前的进度。日期/时间选择器(Date
TimePicker):向用户提供了一种直观的选择日期和时间的方法、日期/时间选择器。微调按钮(Spin
Button):包括一对紧靠在一起的上下箭头,使用微调按钮可以增大或者缩小某个特定的数值。2.2常用控件使用设置ID对添加的各控件进行ID重新设置,如编辑框的ID
设为IDC_EDIT1,各控制控件ID要有区别,特别是要调用相应函数的控件。控件变量对各控件若在后续函数中会调用其数据的可以进行变量定义,如右图组合框的变量定义。消息处理函数双击要编辑消息处理函数的控件,如组合框,为组合框添加消息处理函数Cexe0810Dlg::OnCbnSelchangeCombo1()
。在消息处理函数中修改相应内容,完成函数编辑:void
Cexe0810Dlg::OnCbnSelchangeCombo1(){//
TODO:
在此添加控件通知处理程序代码CString
strCourse;int
num;//
获取组合框控件的列表框中选中项的索引num=
m_combo_C.GetCurSel();//
根据选中项索引获取该项字符串m_combo_C.GetLBText(num,
strCourse);//
将组合框中选中的字符串显示到IDC_EDIT1编辑框中SetDlgItemText(IDC_EDIT1,
strCourse);}3、 任务实施:计算机MFC界面设计要求有两个数值,能够采用四则运算任意一种,最终显示相应计算结果,设计相应MFC程序。任务分析根据任务要求界面需要有静态文本框、组合框、按钮控件、编辑框等控件,实现2个数值的输入,四则运算的切换,计算运行的操作,界面文字提示等。项目实施流程创建方案项目添加控件添加关联变量属性设置初始化程序添加事件处理函数界面设计后台程序项目调试创建方案项目1.文件—新建—项目—MFC—MFC应用程序MFC有三个选项:MFC
ActiveX控件、MFC应用程序、MFC
DLL。MFC
ActiveX
控件:用来生成MFCActiveX控件程序。MFC
应用程序:用来生成MFC应用程序。MFCDLL:用来生成MFC动态链接库程序。2.MFC应用程序向导—应用程序类型应用程序类型有三个选项:单个文档、多个文档、基于对话框。单个文档:像Windows记事本、Windows画图、Windows写字板这样的程序,一个程序只有一个文档处于编辑状态。多个文档:像Word,Excel这样可以在一个MDI窗口里面同时处理多个文档的类型。基于对话框:像Windows扫雷、纸牌那样直接在对话框进行操作的程序。用不着文档和试视图。3.MFC应用程序向导—使用MFCMFC的使用有两个选项:
在共享DLL中使用MFC、在静态库中使用MFC。在共享DLL中使用MFC:MFC的类会以动态链接库的方式访问,所以我们的应用程序本身就会小些,但是发布应用程序时必须同时添加必要的动态链接库,以便在没有安装VS2010的机子上能够正常运行程序。在静态库中使用MFC:类会编译到可执行文件中,所以应用程序的可执行文件要比上种方式大,但可以单独发布,不需另加包含MFC类的库。4.
MFC应用程序向导—基于对话框的选项有三个选项:无,使用Html对话框,无增强的MFC控件。默认选择“无”。5.
MFC应用程序向导—主框架样式即用户界面特性,根据需求。6.
MFC应用程序向导—高级功能使用缺省设置。界面设计1.使用控件工具箱-添加控件依据任务要求,添加合适工作控件。ID:控件的资源标识。Visiable:控件是否可见。Disabled:控件是否被禁止、被禁止的控件无法接受键盘和鼠标输入。Group:是否从这个空间开始一个新组。Tab
stop:在程序中是否可以用【Tab】键切换到这个控件。Static
edge:给控件增加一个边界。Transparent:拥有此属性的窗口是透明的,它下面的窗口不会被它遮掩住。Accept
files:拥有此属性的窗口可以接收拖放文件。Right
aligned
text:表示文本右对齐。2.控件属性设置序的图形用3.添加并关联变量类别Control变量:它是微软对实现Windows程户界面元素的一些类的总称。Value变量:获取用户输入值的变量。变量类型控件类变量:与控件名相关,如组合框CComboBox。数据类型变量:如整型数据int。后台程序设计1.初始化函数OnInitDialog是窗体初始化函数,可以将初始运行内容写入该函数。2.添加事件处理函数控件双击或右击—添加事件处理函数。任务参考界面参考(1)从工具箱添加静态文本框,修改属性Caption,ID分别设为IDC_STATIC1、…、IDC_STATIC5,其中标题随机设为IDC_STATIC4;(2)从工具箱添加按钮控件,修改属性Caption,ID默认;(3)从工具箱添加编辑框,2个数值编辑框和1个结果编辑框,其中结果编辑框修改属性Read
Only为True,ID默认;(4)从工具箱添加组合框,修改属性Type设为“下拉列表”,Sort
属性设为False,ID默认。变量添加(1)打开工具栏的项目-类向导;(2)添加编辑框的变量,分别为e_num1、e_num1、e_num0,变量类型选int或double;(3)添加静态文本框IDC_STATIC4控件关联变量为CStatic
类型的控件变量m_static。(4)添加组合框IDC_COMBO1成员变量为CComboBox
类型的控件变量m_combo_C。变量设定见右图。//字体参数设置//对应标题静态文本框对话框初始化函数BOOL
CexemathDlg::OnInitDialog()函数,1.设置字体代码如下:cfont.CreatePointFont(150,
_T("黑体"),
NULL);GetDlgItem(IDC_STATIC4)->SetFont(&cfont);IDC_STATIC42.将组合框四则运算类型加入其中,代码如下:m_combo_C.AddString(_T("加法"));m_combo_C.AddString(_T("乘法"));m_combo_C.InsertString(1,
_T("减法"));m_combo_C.InsertString(3,
_T("除法"));//添加列表项“加法”//添加列表项“乘法”//
索引为1的位置插入列表项“减法”//
在索引为3的位置插入列表项“除法”m_combo_C.SetCurSel(0); //
默认选择第一项SetDlgItemText(IDC_COMBO1,
_T(“加法”));
//
编辑框中默认显示第一项的文字“加法”。组合框消息处理函数在组合框中选中的列表项改变时,获取最新的选择项索引值。双击组合框,为组合框添加消息处理函数CexemathDlg::OnCbnSelchangeCombo1(),添加代码如下:num=
m_combo_C.GetCurSel();//
获取组合框控件的列表框中选中项的索引UpdateData(1);if(num==
0)//将控件中的数据值更新到相应的变量//索引0“加法”e_num0=e_num1+
e_num2;else
if
(num
==
1) //索引1“减法”e_num0=e_num1-
e_num2;elseif(num
==
2) //索引2“乘法”e_num0=e_num1*
e_num2;else
if
(num
==
3) //索引3“除法”e_num0=e_num1/
e_num2;UpdateData(0); //将控件对应变量的值更新到控件的显示窗口}按钮消息事件处理函数双击按钮控件,进入处理函数CexemathDlg::OnBnClickedButton1(),添加代码,函数内容如下:void
CexemathDlg::OnBnClickedButton1(){//
TODO:
在此添加控件通知处理程序代码运行调试界面项目二、C++项目设计─任务2-2
控制台应用设计1、任务准备目录2、任务实施1、 任务准备:控制台应用1.1常用头文件//文件输入/输出//数据流输入/输出,cin和cout等函数#include
<fstream>#include<iostream>所属的头文件#include
<sstream>#include
<stdio.h>#include
<iomanip>#include
<cstdio>//基于字符串的流//定义输入/输出函数//参数化输入/输出,流操作符头文件//输出输入格式控制,要调用函数须加std::或者声明using
namespace
std;#include
<cmath> //数学头文件,含幂函数、指数函数、平方根及三角函数等函数#include <algorithm> //max和min等函数所属的头文件,还包含交换、查找、遍历、排序、修改等#include
<functional> //定义了一些模板类,用以声明函数对象#include<numeric> //在序列上面进行简单数学运算的模板函数#include
<algorithm> //STL通用算法1.2常见函数int getc()int putc()//从控制台(键盘)读一个字符,不显示在屏幕上//向控制台(键盘)写一个字符int getchar() //从控制台(键盘)读一个字符,显示在屏幕上int putchar()intprintf()intscanf()int
fopen()//向控制台(键盘)写一个字符//发送格式化字符串输出给控制台//从控制台读入一个字符串,对各个参数进行赋值//为读或写打开一个文件int _wcreat() //建立一个新文件filename,并设定文件属性std::cin>>std::cout<<//从缓冲区读数据//输出内容doublesin(double)doublecos(double)doubletan(double)doubleasin(double)doubleacos(double)doubleatan
(double)doubleexp(double)//正弦函数//余弦函数//正切函数//反正弦函数//反余弦函数//反正切函数//exp(x)=
exdoublepow(double,
double)//pow(x,
y)=xydoublesqrt(double)doubleabs(int)doublefabs(double)int
rand(void)//
sqrt(x)= 𝑥//
abs
(x)=|x|,整数//
fabs
(x)=|x|,浮点数//产生伪随机数fmax(a,
b)fmin(a,b)void
exit(int)intatoi(constchar*s)doubleatof(constchar
*s)inttolower(int
c)inttoupper(int
c)//求最大值,可以整数或浮点数等//求最小值,可以整数或浮点数等//终止程序执行//将s所指向的字符串转换成整数//将s所指向的字符串转换成实数//将字符转换为小写字母//将字符转换为大写字母2、 任务实施:计算机控制台应用设计要求有两个数值,能够采用四则运算任意一种,最终显示相应计算结果,设计相应控制台应用程序。任务分析根据任务要求,编写主函数,实现2个数值的输入,四则运算输入,计算结果的输出显示等。项目实施流程创建项目输出信息提示声明变量输入数据及符号输出结果项目调试添加头文件主函数程序设计创建方案项目1.文件—新建—项目—控制台应用程序//输入输出头文件程序编写1.
添加头文件#include
<iostream>2.
声明变量int
num1,num2;doublenum0;char
fu;3.
输入输出std::cout
<<
"输入数值1:";std::cin
>>num1;//输出文字//输入数字运行调试界面项目三 常见运动模式实现─任务3-2 JOG运动李永杰1、任务基本情况目录2、主要指令认识3、任务实施1、 任务基本情况1.1任务要求轴
1
运动在
Jog
模式下,初始目标速度为20pulse/ms。动态改变目标速度,当规划位置超过100000pulse
时,修改目标速度为
10pulse/ms。1.2任务准备概念 JOG运动:类似手动控制。在
Jog
运动模式下,各轴同样可以独立设置目标速度、加速度、减速度、平滑系数等运动参数,能够独立运动或停止。其具体逻辑与点位运动一致,参数除平滑系数,其他也与点位运动类似。平滑系数(常数)平滑常数决定了平滑水平以及对预测值与实际结果之间差异的响应速度。平滑常数越接近于1,远期实际值对本期平滑值的影响程度下降越迅速;平滑常数越接近于0,远期实际值对本期平滑值影响程度的下降越缓慢。𝑆𝑡=
𝛼𝑦𝑡
+ 1−𝛼 𝑆𝑡−1St—时间t的平滑值;yt—时间t的实际值;St-1—时间t-1的平滑值;α—平滑常数,取值范围[0,1)。除基本的一次指数平滑外还有二次、三次指数平滑2、主要指令认识2.1运动主要指令运动模式GTN_PrfJog指令原型GTN_PrfJog(shortcore,short
profile)指令说明设置指定轴为JOG运动模式指令参数core内核,正整数,常规参数设为1profile规划轴号,正整数使用举例GTN_PrfJog(1,
1)运动参数设置与读取指令原型GTN_SetJogPrm(short
core,shortprofile,TJogPrm
*pPrm)GTN_GetJogPrm(short
core,shortprofile,TJogPrm
*pPrm)指令说明设置JOG运动模式下的运动参数读取JOG运动模式下的运动参数指令参数core内核,正整数,常规参数设为1profile规划轴号,正整数pPrm设置JOG运动模式运动参数,该参数为一个结构体*使用举例GTN_SetJogPrm(1,1,
pPrm)GTN_GetJogPrm(1,1,
pPrm)typedefstruct
JogPrm{//JOG运动的加速度。正数,单位://JOG运动的减速度。未设置时,默认//平滑系数。取值范围:[0,
1)double
acc;pulse/ms2double
dec;和加速度相同double
smooth;}TJogPrm;MotionStudio软件配置(新版)启动软件轴PDO配置导出XML文件轴重启调试MotionStudio软件配置(新版)导出的XML文件保存与其他配置文件一起待用,后面拷贝至项目文档2.2GEN控制卡主要函数及库函数库同点位运动3、 任务实施——JOG运动3.1
配置与调试配置PDO导出配置创建XML调试查看信号使用金属接触设备对应轴的限位开关,观察界面信号变化任务分析已知:初始速度为
20pulse/ms。当规划位置超过50000pulse
时,修改目标速度为
10
pulse/ms。3.2
任务实施界面设计界面变量定义文件添加拷贝配置文件添加头文件工作流程初始化实施流程类似点位运动程序设计添加头文件和链接文件#include
"gts.h"#pragmacomment(lib,
"gts.lib")//控制器头文件//链接文件的声明声明全局变量CFont
cfont;short
sRtn,rtn;shortcore=1;shortAx=1;CString
strTemp;//字体类定义//定义返回值,..//内核//轴号//字符串数据结构doubleprfPos,prfVel,
encPos,
encVel; //目标与实际位置、速度bool
button,Rbutton,Lbutton;
//定义按钮标识添加字体修改内容在OnInitDialog()函数中添加字体设置代码,如下://字体参数设置cfont.CreatePointFont(150,
_T("黑体"),
NULL);//对应标题静态文本框IDC_STATIC11GetDlgItem(IDC_STATIC11)->SetFont(&cfont);按钮控件事件处理函数初始化按钮完成程序初始化,包括开控制器、EtherCAT通讯等。双击初始化按钮控件,进入按钮控件事件处理函数,添加代码。shortsEcatSts; //网络状态变量定义sRtn
=GTN_Open();//打开运动控制器sRtn
=
GTN_InitEcatComm(core);//初始化EtherCAT网络//查询do
{ sRtn=GTN_IsEcatReady(core,
&sEcatSts);网络状态}while(sEcatSts!=1||sRtn!=
0);sRtn
=
GTN_StartEcatComm(core);//开启网络通讯SetTimer(1,
10,
NULL); //设置定时器(定时器ID,间隔时间(毫秒),回调函数地址)状态清除按钮状态清除主要为了清除报警、限位等状态。sRtn=GTN_ClrSts(core,1,
3);//清除内核core,起始轴为1的3个轴状态数据,清除数量由任务工作轴决定位置清零按钮位置清零主要为了清除位置数据,使用位置清零后当前位置为0。sRtn=GTN_ZeroPos(core,1,
3);//清除内核core,起始轴为1的3个轴位置数据,同样数量由工作轴数决定伺服使能按钮伺服使能主要为了打开驱动器使能,为后面运动做准备。GTN_AxisOn(core,
Ax);//打开内核为core,轴号为Ax的伺服驱动器使能开始运动按钮JOG运动实现点动控制,与点位运动相同包括运动模式设置、参数设定和读取、启动运动等。UpdateData(TRUE);button
=1;//标识运动开始UpdateData(0);停止运动按钮关伺服使能主要实现停止运动、关闭伺服驱动使能。双击关伺服使能按钮控件,进入按钮控件事件处理函数。UpdateData(TRUE);button
=
0; //标识运动停止GTN_Stop(core,1<<(eAxis-1),1<<(eAxis-
1));//运动停止GTN_AxisOff(core,
eAxis);//关闭轴号eAxis使能关控制器按钮关控制器主要实现关闭伺服使能、结束通讯、关闭控制器等,与任务3-1停止按钮类似。GTN_AxisOff(core,
eAxis); //关闭轴号eAxis使能sRtn
=GTN_TerminateEcatComm(core); //结束通信sRtn
=
GTN_Close(); //关控制器,,定时器处理程序添加的鼠标左键与右键的下按与松开处理函数:OnRButtonDown()OnRButtonUp(),OnLButtonDown()OnLButtonUp()。OnLButtonDown(),函数中分别添加按钮按下标识。Lbutton =
true;
//鼠标左键按下在OnRButtonDown(), Rbutton =
true;
//鼠标右键按下在OnRButtonUp(),函数中添加按钮松开标识,并停止工作。OnLButtonUp(),同理,自行编写。Rbutton =
false;
//鼠标右键松开GTN_Stop(core,1<<
(Ax- 1),
1<<
(Ax
- 1));
//急停Ax轴的运动定时器处理程序添加的定时器OnTimer(UINT_PT编辑代码以便获取规划位置、规划速度、实际速度、实际位置等变量的实时变化GTN_GetPrfVel(core,eAxis,&prfVel,1,NULL);//读1轴规划速度R
nIDEvent)函数中,
strTemp.Format(_T("%.3f"),
prfVel);//把一个规划位置转化成CString类型SetDlgItemText(IDC_STATIC10,strTemp);//在静态文本IDC_STATIC10显示规划速度字符串数据GTN_GetEncPos(core,Ax,&encPos,
1,
NULL); //读1轴实际位置strTemp.Format(_T("%.3f"),encPos);SetDlgItemText(IDC_STATIC11,strTemp);GTN_GetEncVel(core,Ax,&encVel,
1,
NULL); //读1轴实际速度strTemp.Format(_T("%.3f"),encVel);SetDlgItemText(IDC_STATIC12,
strTemp);if (button==
1&&(
Rbutton ==
1||
Lbutton ==
1))//启动JOG按钮,按左键反转,按右键正转{sRtn =
GTN_SetPrfPos(core,
eAxis,
0);
//设置JOG运动sRtn =GTN_PrfJog(core,
eAxis);TJogPrm jog;if (Lbutton)
//鼠标左键反向运动,{eVel1
=
-eVel1;
//运动反向eVel2=
-eVel2;}sRtn=GTN_GetJogPrm(core,eAxis,
&jog);//读取内核为core,轴号eAxis的JOG运动参数jog.acc=eAcc;jog.dec=eDec;jog.smooth=
eSmooth;//加速度//减速度//平滑系数,[0,1)sRtn
=
GTN_SetJogPrm(core,
eAxis,
&jog);//将前面设置加减速等参数写入对应轴eAxis运动参数if(encPos<=
50000){ sRtn=
GTN_SetVel(core,
eAxis,
eVel1);//
设置Axis轴新的目标速度1}elseif(encPos>
50000){ sRtn=
GTN_SetVel(core,
eAxis,
eVel2);//设置Axis轴新的目标速度2}sRtn
=
GTN_Update(core,
1
<<
(eAxis
-
1));//启动内核为core,
eAxis对应位轴的运动}else{GTN_Stop(core,1
<<
(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东广州番禺区第二人民医院高层次人才招聘6人备考题库附参考答案详解(预热题)
- 2026济南能源集团春季校园招聘11人备考题库带答案详解(黄金题型)
- 2026年4月西南医科大学附属中医医院招聘23人备考题库(四川)附参考答案详解(完整版)
- 2026广东清远私立学校2026年教师招聘37人备考题库附答案详解(完整版)
- 2026湖北武汉市第三医院眼科招聘备考题库附参考答案详解(预热题)
- 2026北京大学工学院(本科生学院)招聘1名劳动合同制人员备考题库带答案详解(达标题)
- 2026四川自贡市中医医院编外人员招聘10人备考题库及答案详解【典优】
- 2026湖北武汉市三级医院招聘14人备考题库附答案详解
- 脑性盐耗综合征(CSWS)总结2026
- 2026重庆奉节县教育事业单位招聘25人备考题库带答案详解
- 2026中国商用飞机公司招聘面试题库
- 4.1《致敬劳动者》课件 统编版道德与法治三年级下册
- 中考总复习数学100道基础题三大专题
- OpenClaw专题学习培训
- 安徽省合肥市一六八中学2026届高三3月份规范训练 语文试卷(含答案详解)
- 第一章 三角形的证明及其应用 单元测试(含答案)2025-2026学年数学北师大版八年级下册
- 2026年迎接国家义务教育质量监测工作实施细则方案及应急预案
- 危大巡视检查记录表(深基坑)
- 材料调差自动计算表EXCEL
- 第五章---挤出成型
- 加油站安全教育培训内容
评论
0/150
提交评论