#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 int iNumOfStu=0; struct score { float math; float english; float computer; }; struct student { int number; char name[20]; struct score sco; float average; }; struct student stu[N]; void print_menu(void);//输出菜单 void choosemenu(void);//菜单选择 void input_student1(int);//输入学生信息 void input_student2(void);//输入总函数 void input_student3(int &,int);//判断学号是否重复 void input_student4(int,int);//覆盖原信息 void sort_student3(student s[],int);//按照英语成绩排序 void sort_student4(student s[],int);//按照计算机成绩排序 void sort_student2(student s[],int);//按照数学成绩排序 void sort_student5(student s[],int);//按照平均成绩排序 float input_score2(int);//计算学生平均成绩 void print_student2(void);//显示表头 void print_student3(int);//显示学生信息 void print_student1(int);//显示全部学生资料 void sort_student1(void);//排序总函数 void menu(void);//菜单调度总函数 int search_student2(int);//按学号查询学生信息并输出 void search_student3(int);//按平均分最高查询并输出 void search_student1(void);//查询总函数 void delete_student2(int,int);//删除学生信息 void delete_student1(void);//删除总函数 void change_student2(int);//修改学生资料 void change_student1(void);//修改总函数 void input_score3(int);//统计成绩 void input_score1(void);//统计成绩总函数 void print_help(void);//输出帮助信息 void exit_student(void);//退出系统 void save_student(student *,int);//保存学生信息 void main() { menu(); } void save_student(student *s,int a)//保存学生信息 { FILE *fp; if((fp=fopen("d:\\学生信息.txt","wb"))==NULL) { printf("不能打开文件!\n"); } else { printf("保存信息到D盘\n"); fprintf(fp,"本班所有学生具体信息如下:\r\n"); fprintf(fp," 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\r\n"); for(int i=0;i<a;i++) { fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average); fprintf(fp,"\r\n"); } fclose(fp); printf("信息保存成功!\n"); } } void exit_student(void)//退出系统 { exit(1); } void print_help(void)//输出帮助信息 { printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N); } void input_score1(void)//统计成绩总函数 { int c; c=search_student2(iNumOfStu); printf("学号:%d\n",stu[c].number); printf("姓名:%s\n",stu[c].name); input_score3(c); printf("新成绩录入成功!\n"); stu[c].average=input_score2(c); } void input_score3(int a)//统计成绩 { printf("数学新成绩:"); scanf("%f",&stu[a].sco.math); printf("英语新成绩:"); scanf("%f",&stu[a].sco.english); printf("计算机新成绩:"); scanf("%f",&stu[a].sco.computer); } void change_student2(int a)//修改学生资料 { printf("学号:%d----修改为:",stu[a].number); scanf("%d",&stu[a].number); getchar(); printf("姓名:%s----修改为:",stu[a].name); gets(stu[a].name); printf("数学成绩:%.2f----修改为:",stu[a].sco.math); scanf("%f",&stu[a].sco.math); printf("英语成绩:%.2f----修改为:",stu[a].sco.english); scanf("%f",&stu[a].sco.english); printf("计算机成绩:%.2f----修改为:",stu[a].sco.computer); scanf("%f",&stu[a].sco.computer); } void change_student1(void)//修改总函数 { int c; c=search_student2(iNumOfStu); getchar(); printf("是否要修改此学生信息?(“y”代表是)"); char d; scanf("%c",&d); if(d=='y'||d=='Y') { change_student2(c); stu[c].average=input_score2(c); printf("信息修改成功!\n"); } } void delete_student1(void)//删除总函数 { int c; c=search_student2(iNumOfStu); getchar(); printf("是否删除此条记录?(“y”代表是)"); char d; scanf("%c",&d); if(d=='y'||d=='Y') { delete_student2(c,iNumOfStu); printf("记录已删除!\n"); } } void delete_student2(int a,int b)//删除学生信息 { for(int i=a;i<b-1;i++) { stu[i]=stu[i+1]; } --iNumOfStu; } void search_student1(void)//查询总函数 { printf("1、按学号查询\n2、按平均分最高查询\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { search_student2(iNumOfStu); break; } case 2: { search_student3(iNumOfStu); break; } default: break; } } void menu(void)//菜单调度总函数 { print_menu(); choosemenu(); } void sort_student1(void)//排序总函数 { printf("1、按数学成绩排序\n2、按英语成绩排序\n3、按计算机成绩排序\n4、按平均成绩排序\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { sort_student2(stu,iNumOfStu); break; } case 2: { sort_student3(stu,iNumOfStu); break; } case 3: { sort_student4(stu,iNumOfStu); break; } case 4: { sort_student5(stu,iNumOfStu); break; } default: break; } } void print_student1(int a)//显示全部学生资料 { printf("本班所有学生具体信息如下\n"); print_student2(); for(int i=0;i<a;i++) { print_student3(i); } } void print_student3(int a)//显示学生信息 { printf("%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[a].number,stu[a].name,stu[a].sco.math,stu[a].sco.english,stu[a].sco.computer,stu[a].average); } void print_student2(void)//显示表头 { printf(" 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\n"); } void input_student4(int a,int b)//覆盖原信息 { stu[a]=stu[b-1]; --iNumOfStu; } void input_student3(int &a,int b)//判断学号是否重复 { if(a!=0) { int i=0; do { if(stu[a].number==stu[i].number) { printf("此学号代表的学生已录入\n1、覆盖原信息\n2、重新输入\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { input_student4(i,iNumOfStu); a=iNumOfStu-1; printf("信息已替换!\n"); break; } case 2: { printf("请重新输入学生信息:\n"); input_student1(iNumOfStu-1); break; } default: break; } break; } ++i; } while(i<b-1); } } void print_menu(void)//输出菜单 { printf("======欢迎来到学生信息管理系统======\n"); printf(" 1、输入学生资料\n"); printf(" 2、删除学生资料\n"); printf(" 3、查询学生资料\n"); printf(" 4、修改学生资料\n"); printf(" 5、显示学生资料\n"); printf(" 6、统计学生成绩\n"); printf(" 7、排序学生成绩\n"); printf(" 8、保存学生资料\n"); printf(" 9、获取帮助信息\n"); printf(" 10、退出系统\n"); printf("====================================\n"); printf("请选择:"); } void input_student2(void)//输入总函数 { char end; printf("请输入学生信息(在最后一个学生信息录入完成后以“/”结束录入):\n"); for(int i=0;(end=getchar())!='/';i++) { input_student1(i); ++iNumOfStu; input_student3(i,iNumOfStu); } for(int j=0;j<iNumOfStu;j++) { stu[j].average=input_score2(j); } } void input_student1(int a)//输入学生信息 { printf("学号:"); scanf("%d",&stu[a].number); getchar(); printf("姓名:"); gets(stu[a].name); printf("数学成绩:"); scanf("%f",&stu[a].sco.math); printf("英语成绩:"); scanf("%f",&stu[a].sco.english); printf("计算机成绩:"); scanf("%f",&stu[a].sco.computer); } float input_score2(int a)//计算学生平均成绩 { return (stu[a].sco.math+stu[a].sco.english+stu[a].sco.computer)/3; } void search_student3(int a)//按平均分最高查询并输出 { int max=0; for(int i=0;i<a;i++) { if(stu[max].average<stu[i].average) { max=i; } } print_student2(); print_student3(max); } void sort_student2(student s[],int a)//按照数学成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.math>stu[max].sco.math) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student3(student s[],int a)//按照英语成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.english>stu[max].sco.english) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student4(student s[],int a)//按照计算机成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.computer>stu[max].sco.computer) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student5(student s[],int a)//按照平均成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].average>stu[max].average) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } int search_student2(int a)//按照学号查找学生并输出 { int num; int c; printf("请输入要查询的学号:"); scanf("%d",&num); for(int i=0;i<a;i++) { if(num==stu[i].number) { c=i; } } printf("此学生的信息是:\n"); print_student2(); print_student3(c); return c; } void choosemenu(void)//菜单选择 { int i; scanf("%d",&i); switch(i) { case 1: { input_student2(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 2: { delete_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 3: { search_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 4: { change_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 5: { print_student1(iNumOfStu); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 6: { input_score1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 7: { sort_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 8: { save_student(stu,iNumOfStu); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 9: { print_help(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 10: { exit_student(); } default: break; } } 运行结果: 源文件下载地址: http://115.com/file/clnq138g#一个简单的学生成绩管理系统.rar (请将此地址复制到浏览器地址栏中访问下载页面) #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 int iNumOfStu=0; struct score { float math; float english; float computer; }; struct student { int number; char name[20]; struct score sco; float average; }; struct student stu[N]; void print_menu(void);//输出菜单 void choosemenu(void);//菜单选择 void input_student1(int);//输入学生信息 void input_student2(void);//输入总函数 void input_student3(int &,int);//判断学号是否重复 void input_student4(int,int);//覆盖原信息 void sort_student3(student s[],int);//按照英语成绩排序 void sort_student4(student s[],int);//按照计算机成绩排序 void sort_student2(student s[],int);//按照数学成绩排序 void sort_student5(student s[],int);//按照平均成绩排序 float input_score2(int);//计算学生平均成绩 void print_student2(void);//显示表头 void print_student3(int);//显示学生信息 void print_student1(int);//显示全部学生资料 void sort_student1(void);//排序总函数 void menu(void);//菜单调度总函数 int search_student2(int);//按学号查询学生信息并输出 void search_student3(int);//按平均分最高查询并输出 void search_student1(void);//查询总函数 void delete_student2(int,int);//删除学生信息 void delete_student1(void);//删除总函数 void change_student2(int);//修改学生资料 void change_student1(void);//修改总函数 void input_score3(int);//统计成绩 void input_score1(void);//统计成绩总函数 void print_help(void);//输出帮助信息 void exit_student(void);//退出系统 void save_student(student *,int);//保存学生信息 void main() { menu(); } void save_student(student *s,int a)//保存学生信息 { FILE *fp; if((fp=fopen("d:\\学生信息.txt","wb"))==NULL) { printf("不能打开文件!\n"); } else { printf("保存信息到D盘\n"); fprintf(fp,"本班所有学生具体信息如下:\r\n"); fprintf(fp," 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\r\n"); for(int i=0;i<a;i++) { fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average); fprintf(fp,"\r\n"); } fclose(fp); printf("信息保存成功!\n"); } } void exit_student(void)//退出系统 { exit(1); } void print_help(void)//输出帮助信息 { printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N); } void input_score1(void)//统计成绩总函数 { int c; c=search_student2(iNumOfStu); printf("学号:%d\n",stu[c].number); printf("姓名:%s\n",stu[c].name); input_score3(c); printf("新成绩录入成功!
标签: c语言
上传时间: 2019-06-09
上传用户:啊的撒旦
纯电动汽车是未来汽车行业发展的主要方向之一,因其节能、环保等优点已得到国家政策的大力支持推广。在电动汽车市场化进程中,配套充电设施的规划与建设将决定其发展速度和力度。所以研究在充电站系统中如何向用户提供可靠、便捷、安全的充电服务成为了保障充电站功能实现的重要趋势本文依托山东大为电气有限公司研究生联合培养工作站的项目“电动汽车充电站及其管理系统”,针对电动汽车交流充电桩的具体运营需求,基于项目对电动汽车交流充电桩的软硬件设计,提出了采用CPU卡为媒介为用户提供刷卡充电消费服务。首先针对项目应用需求设计CPU卡的卡上文件系统、安全体系、文件访问流程以及读卡器终端与卡片信息交互的方式对CPU卡的应用进行了方案设计;并基于ARM主控板和 Linux嵌入式系统设计了交流充电桩的IC卡应用设计方案,并编写了充电桩刷卡消费应用程序,通过测试证实可完成卡片识别、用户身份认证、正确计费及意外情况处理等功能:最后在电动汽车充电站管理系统的理念下采用C#面向对象开发语言及 SQLserver数据库设计用户信息管理的实现方案,通过对系统数据表的规划、对CPU卡的操作流程设计以及界面功能的编程实现用户信息管理系统的功能。关键词:电动汽车;充电站;CPU卡;用户信息管理全球能源危机以及环境污染问题越来越受到各国人民的重视,在此背景下电动汽车以其低于传统燃料汽车的噪声与污染,以及其易于操纵、维修、低运行成本等优点,迅速赢得了世界上许多发达国家和各大著名汽车厂商的关注,并成为其大力研究开发与推广的重点。而伴随着电动汽车产业的发展,其配套充电设施与充电服务也将随之成为各国相关科研人员致力研究的方向
标签: 充电桩
上传时间: 2022-04-01
上传用户:XuVshu
本文所研究的课题为电磁感应加热控制系统的设计与实现。文章介绍了电磁感应加热的工作原理,系统预设功能要求及具体实现方案,分析了系统硬件电路和控制软件设计的整个过程,最终研制出一款功能完备、人机交互友好、工作稳定、性能优良的电磁感应加热系统。 该系统硬件电路部分主要包括主工作电路,IGBT驱动电路,同步电路和功率整定电路,锅具检测电路,电源电路,各种保护电路及主控制电路。保护电路具体包括上电延时保护IGBT,整流桥输出过压保护,IGBT集电极过压保护,市电过压、欠压保护,负荷电流过大保护,IGBT过温保护,锅底过温保护。主控制电路采用三星单片机作为主控芯片,通过调节PWM信号占空比控制输出功率。系统主要实现了功率控制、定时/预约、无锅检测、暂停、异常报警(无锅报警、市电过压/欠压报警、负荷电流过大报警、IGBT温度传感器失效报警、IGBT温度过高报警、锅底温度传感器失效报警、锅底温度过高报警)等功能,设置了6个按键可供用户操控,配置的液晶显示屏可以实时显示系统当前状态信息。 该系统控制软件设计部分,依据模块化程序设计思想,把系统预设功能需求划分为各个功能模块,然后分别设计了各功能模块的软件,最终完成了系统控制软件的设计。实现了系统的智能化,包括功率自动调节匹配,锅具自动检测,定时控制,预约时间到自动开机,异常自动保护报警,液晶屏实时显示系统状态信息。经过反复对系统软硬件联调,测试系统性能,结果表明本控制系统运行安全、稳定、可靠,达到了设计要求。
上传时间: 2022-06-09
上传用户:20125101110
随着科学技术的进步,计算机仿真所模拟的对象变得越来越复杂,计算机仿真系统的规模也变得日益庞大,开发难度成倍增加。为了解决这一难题,业界提出了分布交互仿真这一概念。分布交互仿真是指在设计仿真系统时采用协调一致的软件架构、网络协议和数据库,将分布在不同地点的仿真节点互连,形成一套统一的综合仿真环境。本论文采用分布式仿真领域应用最为广泛的HLA技术,实现分布式仿真中的子模块互连功能。在本论文涉及的分布式仿真系统中,模块间互连的实现主要分为两种方法,一种是完全使用HILA/RTI运行支撑环境提供的各种服务,借由HLA协议规定的对象类和交互类实现分布式系统中各个子模块间的信息交互:另一种方法是将子模块的对外接口封装成符合HLA规则的联邦成员,再将封装好的联邦成员加载到HLA/RTI联邦执行中,这样,子模块对外交互的实现无需任何改动,即可实现系统内子模块间的信息交互。在实现分布式仿真系统互连功能时,可能还会遇到一些与项目需求相关的问题,如子模块间信息的分辨率不匹配,这就要求对某些仿真模块发出的信息进行聚合、解聚处理,在本论文中,对这一问题也有一定的关注。
上传时间: 2022-06-22
上传用户:
电动汽车电池管理系统BMS主要用于对电动汽车的动力电池参数进行实时监控、故障诊断、SOC估算、行驶里程估算、短路保护、漏电监测、显示报警,充放电模式选择等,并通过CAN总线的方式与车辆集成控制器或充电机进行信息交互,保障电动汽车高效、可靠、安全运行。实时跟踪电池运行状态及参数检测:实时采集电池充放电状态,采集数据有电池总电压,电池总电流,每个电池箱内电池测点温度以及单体模块电池电压等。由于动力电池都是串联使用的,所以这些参数的实时,快速,准确的测量是电池管理系统正常运行的基础。剩余电量估算:电池剩余能量相当于传统车的油量。荷电状态(SOC)的估算是了为了让司机及时了解系统运行状况。实时采集充放电电流、电压等参数,并通过相应的算法进行剩余电量的估计。充放电控制:根据电池的荷电状态控制对电池的充放电,当某个参数超标如单体电池电压过高或过低时,为保证电池组的正常使用及性能的发挥,系统将切断继电器,停止电池的能量供给和释放。
上传时间: 2022-07-05
上传用户:
在机器人学的研究领域中,如何有效地提高机器人控制系统的控制性能始终是研究学者十分关注的一个重要内容。在分析了工业机器人的发展历程和机器人控制系统的研究现状后,本论文的主要目标是针对四关节实验室机器人特有的机械结构和数学模型,建立一个新型全数字的基于DSP和FPGA的机器人位置伺服控制系统的软、硬件平台,实现对四关节实验室机器人的精确控制。 本论文从实际情况出发,首先分析了所研究的四关节实验室机器人的本体结构,并对其抽象简化得到了它的运动学数学模型。在明确了实现机器人精确位置伺服控制的控制原理后,我们对机器人控制系统的诸多可行性方案进行了充分论证,并最终决定采用了三级CPU控制的控制体系结构:第一级CPU为上位计算机,它实现对机器人的系统管理、协调控制以及完成机器人实时轨迹规划等控制算法的运算;第二级CPU为高性能的DSP处理器,它辅之以具有高速并行处理能力的FPGA芯片,实现了对机器人多个关节的高速并行驱动;第三级CPU为交流伺服驱动处理器,它实现了机器人关节伺服电机的精确三闭环误差驱动控制,以及电机的故障诊断和自动保护等功能。此外,我们采用比普通UART速度快得多的USB来实现上位计算机.与下位控制器之间的数据通信,这样既保证了两者之间连接方便,又有效的提高了控制系统的通信速度和可靠性。 机器人系统的软件设计包括两个部分:一是采用VC++实现的上位监控软件系统,它主要负责机器人实时轨迹规划等控制算法的运算,同时完成用户与机器人系统之间的信息交互;二是采用C语言实现的下位DSP控制程序,它主要负责接收上位监控系统或者下位控制箱发送的控制信号,实现对机器人的实时驱动,同时还能够实时的向上位监控系统或者下位控制箱反馈机器人的当前状态信息。 研究开发出来的四关节实验室机器人控制器具有控制实时性好、定位精度高、运行稳定可靠的特点,它允许用户通过上位控制计算机实现对机器人的各种设定作业的控制,也可以让用户通过机器人控制箱现场对机器人进行回零、示教等各项操作。
上传时间: 2013-06-11
上传用户:edisonfather
随着社会和科学技术的发展,以及家居环境的数字化,家用设施越来越信息化、网络化,并提出了信息交互的要求,同时对家用设施进行组网和统一管理提上日程。当代主流解决方案是通过嵌入式家园网关把家用设施联合成为一个局域网,并在此基础上实现了家用设施的管理。同时网关可以完成局域网内和到Internet的通信转换,实现远程控制。 本文对嵌入式家园网关的软件及部分硬件进行了深入的研究和探讨。设计出了一个基本的家园网关。本文的主要工作在于以下几个方面: (1)利用S3C2410开发板,依托Linux操作系统,通过使用MCP2515 CAN总线控制器,组成一个基本的家园网关。 (2)完成了在Linux下对MCP2515 CAN总线控制器的驱动,网络通信程序、节点管理程序及协议转换程序的编写,这些程序组成了整个系统的三个层次,包括网络层,协议转换管理层及驱动层。通过这些分层的协同工作,实现了家园网关中关于TCP/IP协议和CAN总线协议的互相转换。 (3)在CAN总线协议的基础上创新性地提出了应用层协议的设计方案,这个协议使得家园网关在CAN总线上具备管理能力及可靠的批量数据传输能力。 系统测试证明本方案是可行的,本文的数字化家园网关具有体积小,可靠性高,其CAN总线具有安装方便的优势,整个系统并有广阔的发展空间。
上传时间: 2013-04-24
上传用户:三人用菜
ASIC对产品成本和灵活性有一定的要求.基于MCU方式的ASIC具有较高的灵活性和较低的成本,然而抗干扰性和可靠性相对较低,运算速度也受到限制.常规ASIC的硬件具有速度优势和较高的可靠性及抗干扰能力,然而不是灵活性较差,就是成本较高.与传统硬件(CHW)相比,具有一定可配置特性的场可编程门阵列(FPGA)的出现,使建立在可再配置硬件基础上的进化硬件(EHW)成为智能硬件电路设计的一种新方法.作为进化算法和可编程器件技术相结合的产物,可重构FPGA的研究属于EHW的研究范畴,是研究EHW的一种具体的实现方法.论文认为面向分类的专用类可重构FPGA(ASR-FPGA)的研究,可使可重构电路粒度划分的针对性更强、设计更易实现.论文研究的可重构FPGA的BCH通讯纠错码进化电路是一类ASR-FPGA电路的具体方法,具有一定的实用价值.论文所做的工作主要包括:(1)BCH编译码电路的设计——求取实验用BCH码的生成多项式和校验多项式及其相应的矩阵并构造实验用BCH码;(2)建立基于可重构FPGA的基核——构造具有可重构特性的硬件功能单元,以此作为可重构BCH码电路的设计基础;(3)构造实现可重构BCH纠错码电路的方法——建立可重构纠错码硬件电路算法并进行实验验证;(4)在可重构纠错码电路基础上,构造进化硬件控制功能块的结构,完成各进化RLA控制模块的验证和实现.课题是将可重构BCH码的编译码电路的实现作为一类ASR-FPGA的研究目标,主要成果是根据可编程逻辑电路的特点,选择一种可编程树的电路模型,并将它作为可重构FPGA电路的基核T;通过对循环BCH纠错码的构造原理和电路结构的研究,将基核模型扩展为能满足纠错码电路需要的纠错码基本功能单元T;以T作为再划分的基本单元,对FPGA进行"格式化",使T规则排列在FPGA上,通过对T的控制端的不同配置来实现纠错码的各个功能单元;在可重构基核的基础上提出了纠错码重构电路的嵌套式GA理论模型,将嵌套式GA的染色体串作为进化硬件描述语言,通过转换为相应的VHDL语言描述以实现硬件电路;采用RLA模型的有限状态机FSM方式实现了可重构纠错码电路的EHW的各个控制功能块.在实验方面,利用Xilinx FPGA开发系统中的VHDL语言和电路图相结合的设计方法建立了循环纠错码基核单元的可重构模型,进行循环纠错BCH码的电路和功能仿真,在Xilinx公司的Virtex600E芯片进行了FPGA实现.课题在研究模型上选取的是比较基本的BCH纠错码电路,立足于解决基于可重构FPGA核的设计的基本问题.课题的研究成果及其总结的一套ASR-FPGA进化硬件电路的设计方法对实际的进化硬件设计具有一定的实际指导意义,提出的基于专用类基核FPGA电路结构的研究方法为新型进化硬件的器件结构的设计也可提供一种借鉴.
上传时间: 2013-07-01
上传用户:myworkpost
基于ARM的嵌入式运动控制器是集计算机数字控制技术、ARM技术、运动控制技术以及嵌入式操作系统技术等技术为一体的技术含量高的运动控制器;是对低成本、高性能运动控制器研究的一个新的尝试。本论文的研究重是点基于双端口RAM上下位机通讯的数控系统总体软件架构设计、嵌入式运动控制器轨迹规划算法的研究、嵌入式系统软件的构建以及运动控制器外设驱动程序的开发,其主要工作及成果如下: 1.针对数控系统上下位机信息交互频繁,提出了一种基于双端口RAM通讯结构的上下位机交互方式,实现了上下位机信息的高速、稳定通讯;且完成了基于双端口RAM上下位机通讯结构的数控系统总体软件架构设计。 2. 针对目前高速数控加工轨迹规划中存在的一些关键问题进行深入的探讨。提出一种轨迹拐角的速度平滑方法,当高速加工不在同一直线方向而形成拐角的加工段时,在拐角过渡时能获得很好的速度响应和较小的轮廓误差;还提出了一种高速数控加工小线段的前瞻平滑算法,当高速加工多段微小直线段时,能够优化规划多段微小线段的加工速度,有效避免了频繁的加减速给系统带来较大冲击以及加工效率低的问题。 3. 构建了适合本运动控制器系统的系统软件;研究了嵌入式运动控制器引导程序的移植、嵌入式Linux内核的优化配置以及根文件系统的构建。 4.探讨了Linux驱动程序开发的原理以及流程;并以双端口RAM为例介绍了运动控制外设驱动程序开发的方法。
上传时间: 2013-07-02
上传用户:笨小孩
在机器人学的研究领域中,如何有效地提高机器人控制系统的控制性能始终是研究学者十分关注的一个重要内容。在分析了工业机器人的发展历程和机器人控制系统的研究现状后,本论文的主要目标是针对四关节实验室机器人特有的机械结构和数学模型,建立一个新型全数字的基于DSP和FPGA的机器人位置伺服控制系统的软、硬件平台,实现对四关节实验室机器人的精确控制。 本论文从实际情况出发,首先分析了所研究的四关节实验室机器人的本体结构,并对其抽象简化得到了它的运动学数学模型。在明确了实现机器人精确位置伺服控制的控制原理后,我们对机器人控制系统的诸多可行性方案进行了充分论证,并最终决定采用了三级CPU控制的控制体系结构:第一级CPU为上位计算机,它实现对机器人的系统管理、协调控制以及完成机器人实时轨迹规划等控制算法的运算;第二级CPU为高性能的DSP处理器,它辅之以具有高速并行处理能力的FPGA芯片,实现了对机器人多个关节的高速并行驱动;第三级CPU为交流伺服驱动处理器,它实现了机器人关节伺服电机的精确三闭环误差驱动控制,以及电机的故障诊断和自动保护等功能。此外,我们采用比普通UART速度快得多的USB来实现上位计算机.与下位控制器之间的数据通信,这样既保证了两者之间连接方便,又有效的提高了控制系统的通信速度和可靠性。 机器人系统的软件设计包括两个部分:一是采用VC++实现的上位监控软件系统,它主要负责机器人实时轨迹规划等控制算法的运算,同时完成用户与机器人系统之间的信息交互;二是采用C语言实现的下位DSP控制程序,它主要负责接收上位监控系统或者下位控制箱发送的控制信号,实现对机器人的实时驱动,同时还能够实时的向上位监控系统或者下位控制箱反馈机器人的当前状态信息。 研究开发出来的四关节实验室机器人控制器具有控制实时性好、定位精度高、运行稳定可靠的特点,它允许用户通过上位控制计算机实现对机器人的各种设定作业的控制,也可以让用户通过机器人控制箱现场对机器人进行回零、示教等各项操作。
上传时间: 2013-04-24
上传用户:极客