VC平台

2024-07-17

VC平台(精选八篇)

VC平台 篇1

工程曲线是按一定规则产生的曲线,它在机械设计中有着非常多的应用。在此,仅介绍本程序涉及的3条工程曲线在机械设计中的具体应用。

(1)摆线:摆线在机械设计中有很多的应用,由于几种重要的机构的运动轨迹都与摆线形状符合,所以摆线以及相关的外摆线和内摆线在机械设计及其相关的研究中都有很多的应用的。

(2)抛物线:抛物线是最简单的工程曲线,它的种类很多应用也很广泛,这里仅仅是简单的介绍。在各种重要的曲面中,它们的截面都是抛物线,这样通过抛物线的相关性质,就可以很好地很精确地对复杂曲面进行加工,同样在应用这些曲面的设计计算中,抛物线的相关性质和参数计算,可以得到很好的应用。

(3)阿基米德螺旋线:在机械设计中,阿基米德螺旋线主要应用在阿基米德蜗杆之中,这种蜗杆应用是很广泛的,例如在齿轮齿条机构,各种传动机构中都有着非常重要的应用。

2 开发环境

2.1 基本情况

VC++是既适合于作为系统描述语言,也适合于编写应用软件的面向对象又面向过程的一种混合型程序设计语言,它是在C语言的基础之上发展起来的。Visual C++自诞生以来,一直是Windows环境下最主要的应用开发系统之一。Visual C++不仅是C++语言的集成开发环境,而且与Win32紧密相连,所以,利用Visual C++开发系统可以完成各种各样的应用程序的开发,从底层软件直到上层直接面向用户的软件。而且,Visual C++强大的调试功能也为大型复杂的软件的开发提供了有效地排错手段。

2.2 绘图环境

在VC++中Windows绘图使用画笔和画刷进行,画笔的功能是画直线和曲线,画刷用于指定区域的填充。

2.2.1 画笔

画笔的操作包括创建画笔,将画笔选入设备环境和删除画笔。在使用画笔之前必须事先定义一个画笔句柄。定义画笔句柄完成后,可直接调用函数GetStockObject获取Windows系统定义的4种画笔。这4种画笔分别是WHITE_PEN,BLACK_PEN,DC_PEN和NULL_PEN。创建画笔后必须调用SelectObject函数将其选入设备环境。不在使用的当前画笔,需调用函数DeleteObject删除画笔,以免占用内存空间。在删除前应首先调用函数SelectObject恢复原来系统的画笔。

2.2.2 画刷

刷的创建与画笔很相似,操作画刷也包括创建、选入设备环境与删除。使用画刷需事先定义一个画刷句柄;定义画刷句柄后,可直接调用函数GetStockObject获取Windows系统提供的8种画刷。创建画刷完成后,必须调用SelectObject函数将其选入设备环境中。不再使用创建的画刷时,可以调用函数DeleteObject删除画刷,以释放占用的内存空间。在删除前应调用函数SelectObject恢复系统原有的画刷。

2.2.3 颜色

Windows使用32位无符号整数表示颜色,32位整数中的低三位字节分别表示红、绿、蓝3个颜色值,每一个颜色值的范围是0~255。Windows使用宏RGB定义绘图的颜色,其形式为:RGB(nRed,nGreen,nBlue)其中nRed,nGreen,n Blue分别表示红色值、绿色值和蓝色值。在定义了画笔或画刷及其属性以后。就可以利用这些画笔或画刷通过调用相关的绘图函数进行绘图操作了。

3 开发过程

3.1 人机交互界面

人机交互界面设计是软件设计的重要内容,好的人机交互界面要求:用户送入信息时简单、直观、实时;系统显示结果直观、迅速。这样可以提高使用速度,降低操作失误率,增强记忆。本课题是用VC++语言编一个可以绘制3条工程曲线的软件。这3条工程曲线分别是抛物线、阿基米德螺旋线、摆线。通过查询数学手册,确定了这3条工程曲线的方程式,同时也对3种曲线的输入参数进行了确定。

3.2 功能设计

本软件的功能除了具有绘制3条工程曲线的功能外,还有放大缩小功能、和设置绘图精度的功能。

3.2.1 放大缩小功能

本程序的放大缩小功能主要是通过CtoolBar(工具条)类实现的。可以对以生成的图形进行任意倍数的放大和缩小。对图形的放大缩小在本程序中可以通过两种方式实现,分别是:通过菜单上的控件实现图形的放大和缩小;另外一种方法是通过专门的程序专门设计的对话框实现图形的放大缩小。

3.2.2 设置绘图精度

本程序对于3种工程曲线分别设置了3种绘精度图。分别是:0.1、0.01、0.001。所谓绘图精度就是曲线上各点距离的远近。采用绘图的方法是分析每一条曲线的公式,然后设置一个自变量,通过自变量的变化,然后通过计算求出每个自变量对应的变量。这样所求出的变量和自变量就是的所求图形上的一点的坐标X,Y。然后根据求出的X,Y利用Moveto()函数将画笔移动到所求点,再求出另一点时,利用Lineto()函数移动画笔在两点之间进行画直线。通过以上程序基本的编程思想就可以很好地了解了什么是绘图精度,这里所设置的绘图精度就是自变量每点的距离,也就是一个点距离另一个点的X坐标的增加量。

3.3 程序实现

3.3.1 摆线

绘制摆线的流程图如图1所示。

具体程序实现流程是:单击操作,单击摆线,调用OnMENUITEMbaixian()函数。生成一个对话框对象,并把对话框的输入值赋给画图函数的属性;输入摆线方程的圆周半径,t的起始值和终止值;对话框的源代码OnOK()方法的源代码注释;单击“确定”按钮后,执行OnOk()方法,把对话框的输入负给画图函数;画图函数在CDrawView类的Ondraw()函数中。

3.3.2 抛物线

绘制抛物线的流程图如图2所示。

具体程序实现流程是:单击操作,单击抛物线,调用OnMENUITEMpaowuxian()函数。生成一个对话框对象,并把对话框的输入值赋给画图函数的属性;调用OnMENUITEMpaowuxian()方法,创建一个对话框对象,用户输入抛物线参数;对话框输入参数后调用dialog_paowuxian::OnOK()方法。

对称于Y轴的抛物线,程序编制方法和流程方法相同。在这里就不详细介绍,它与X轴对称的抛物线相差的仅仅只是公式,实现过程基本相同。

3.3.3 阿基米德螺旋线

绘制阿基米德螺旋线的流程图,如图3所示。

具体程序实现流程是:单击操作,单击阿基米德螺旋线,调用CDrawView::OnMENUITEMluoxuanxian()函数。生成一个对话框对象,并把对话框的输入值赋给画图函数的属性。

4 结语

计算机生成工程曲线的方式有多种,选择了其中具有简单、实用、易于扩展的一种方法,即基于VC++程序设计语言对工程曲线进行绘制,取得很好的效果。本软件使用Visual C++6.0在Windows XP下进行开发,由于使用了C++程序设计语言,取得了比较满意的处理速度,另外同时引入软件工程的方法对开发过程进行科学控制,使之更规范,易扩充。

摘要:工程曲线在机械设计中有着很广泛的应用,而AutoCAD中不能直接应用函数或数据绘制工程曲线,给科研和教学工作带来很大不便,现在也很少有专门绘制工程曲线的软件。为了解决这个问题,利用面向对象的VC++编程语言编写了一个专用软件来绘制各种工程曲线,这样可以解决AutoCAD不能绘制工程曲线的问题,给科研、教学都带来些方便。

关键词:VC++,工程曲线,绘图软件

参考文献

[1]黄维通.Visual C++面向对象与可视化程序设计.2版.清华大学出版社,2003.

[2]温秀梅,丁学钧.Visual C++面向对象程序设计教程与实验.清华大学出版社,2005.

[3]D.A.约翰逊.曲线.科学出版社,1980.

[4]申永胜.机械原理教程.清华大学出版社,1999.

[5]黄锦祝,刘新航.基于Windows API函数的图形生成方法.广西职业技术学院,1999.

[6]郭震.用计算机绘制曲线的几种途径.海河大学水利工程学院,2003.

[7]杨世平.基于VB的非圆齿轮CADCAM系统研究与开发.(硕士论文)湘潭大学,2005.

[8]彭琨.有序点曲线的重构的研究与应用.(硕士论文)山东大学,2005.

[9]李重.常用自由曲线中的一些问题.(博士论文)浙江大学,2005.

VC平台 篇2

创业的山寨和VC的山寨风光是大相径庭、各有千秋、风味各异的。

创业苦,但是苦中有甜。创业是自主的,你有原创的Idea,可以选择自己喜欢的行当,自己的孩子自己喜欢,不管赚钱多少,你可以5年甚至一辈子富有激情地去为之奋斗、与之厮守;赚钱的公司通常目标明确,流程清晰,纪律严明,出了问题可以大刀阔斧该换人换人,该炒人炒人;创业也可以是做好事,创造就业机会,创造产品和服务满足社会需求,创造收入创造利润,有利润就更加好玩了,可以和全体团队分享,可以捐助希望小学……创业是创业者当家作主的干活,创业爽!

当VC也苦,而且有苦说不出。VC是被动的,被别人牵着鼻子走,VC要出去到处转悠,看看谁有好的Idea,找到好的项目往里面砸把钱买张门票,搭人家的车去兜风,方向盘在别人手里,开对开错方向,自己只能在后车厢里嚷嚷,使不上劲儿;VC心急,只想快钱进快钱出,陪不了业主去创建百年老店;团队出了问题,VC也只能干瞪眼,没法把闯祸了的团队给一锅端全炒了,重起炉灶;VC赚了大钱,大部分是要拿去给LP们交公粮的,自己所剩无几……说得极端些,当VC是为他人做嫁衣裳、自己哄自己、自己安慰自己的干活,当VC郁闷!

1. VC脑子里没别的,想的只是钱,而且都是大钱,不能赚大钱的项目VC是不会去问津的,VC的理想是天天撞上可以让你轻轻松松赚得盆翻钵满的项目,当然,世界上这样的项目也真的不太多,即使有的话创业者难道自己不会要去赚这份快钱热钱easy钱,谁会把好事儿全留着给VC?

2. 所以VC要趁虚而入,趁一个潜在的伟大公司还没有开始大桶大桶地进钱来,一把将钱先砸进去,抢占一个将来可以分钱的沙发、板凳……只要这家公司能赚大钱,坐不到沙发板凳,躺地上也行。

3. 所以VC要挖空心思算计,试图能给世界的未来把脉,抢在时间前面、抢在上帝前面跑到终点。电信3G后面是4G、5G……互联网2.0后面是3.0、4.0……VC每天晚上睁大了眼睛裹在温暖的被窝里听《一千零一夜》……故事里的世界比现实中的世界美妙多了,下一个美妙的故事又是什么呢?

4. 天亮了,VC去敲创业者的门,“芝麻芝麻开门”……门开了,创业者在里面正拿着石斧石镰艰苦创业,正苦熬着哪……VC往心里的公式上一套,皱皱眉头:模式太旧,规模化很难,没有爆发性增长,算了算了,换频道吧。

5. VC换了扇门又去敲“芝麻芝麻开门”……门开了,创业者是两个小娃娃在里面在办家家玩游戏玩得正欢,有星球大战,有SNS,视频,虚拟人生……VC皱皱眉头:概念太新,没法赚钱,陪俩孩子玩游戏,还得要砸进去多少银子才能把他们抚养成人啊?不行不行,再看看其它的吧。

6. VC再叫“芝麻芝麻……”,话音没落,门自动地开了,面前出现的是范伟同学手里拎一个“分歧终端机”,嘴里口口声声自语“非诚勿扰”……哎,有了,这玩意儿不错,有创意有想象空间,成熟的市场里的颠覆性产品,14亿人民人人都得买,天天都用得上,说不定哪天还会像iPod那样会跑遍全世界……外加上范伟同学圆头圆脑人也长得不错,简历上名牌学校、大公司的名字比比皆是,就是它了,砸钱!

下面的游戏大伙儿们自己去想象吧……但愿范伟同学走运成功噢!

当VC好累,创业者能被VC看得上眼的实属凤毛麟角,VC呢,能有幸撞上范伟同学的、真的敢于领先砸钱索性砸出它几个刺激故事的也不多,大家还是愿意跟跟风,凑个热闹,图个安全。于是VC也就不Venture了,餐厅、美容院、洗脚店也有VC投……中国就是中国嘛,中国是特殊的地方、特殊的时代、特殊的机遇,没法用美国的现成模式来套,只要能赚钱,什么不能投?!

“VC”和“创业”之间好像总有那么一些对接不上的地方,导致成了致命伤:

* 创业者都理解成功是意外的偶然的,成功的道路上有无数不确定性、机缘、曲折、失败等等,但是VC的判断逻辑是:成功 = 名牌大学学位 + 简历上著名跨国公司的名字 + Idea + 概念 + 故事 + 模式 + 预测……与其说这是成功的轨迹,不如说这是MBA学生的课堂练习,这道公式里是不是缺少了一个不确定的系数?当然VC的这个成功逻辑也不能说有什么大的错误,问题是:VC投资后的所作所为是否尽职,是否能对得起自己的良心,

* 比如说,VC投资后,团队的实际业绩和商业计划书相差十万八千里,VC管不管?VC们大家来盘点一下自己投资的公司吧,数数看有几个是能基本按原定计划甚至超额达标的?少说80%VC所投的公司远远达不到原先故事里的预测,有几个VC敢于站出来发脾气,为投资人的利益义正词严、大刀阔斧采取果断措施终止流血的?VC们多数欲说还羞,一副“犹抱琵琶半遮面”的姿态,继续放断线风筝,希冀风筝在空中飘的时间越长越好……这样的事情在健康的创业企业里、在一个没有VC投资的公司里是绝不容许的,哪个部门经理来找你忽悠,一会儿东一会儿西,只要他不出业绩,创业者你会容许此人长期在公司里这样呆下去吗?!相信你不是客气地放他一条活路让他自己走路,就是毫不留情把他拖到菜市口去斩首。

* 某些VC的纵情红颜矫作,造就了一个可爱的奶妈形象,社会上嗷嗷待哺的孩子们吃上了VC的奶就指望着一辈子含着VC的奶头永不断奶。拿不到VC钱的创业者,羡慕的、眼红的有之,冷嘲热讽的也不少,因为他们看不惯那些“有钱人家的孩子”的作风;本来好端端的一个创业者,拿到了VC的钱就变坏,本来穷人的孩子早当家,一旦遇上了个VC奶妈,照样也被养肥惯坏,永远长不大。还有更聪明的“创业者”,他们根本没想过如何去赚顾客的钱,他们挖空心思想的就是如何忽悠VC砸一大把钱,然后风风光光地活上几年,等这个VC的钱被糟蹋光了,再另起炉灶去忽悠别的VC。

* VC反正是拿别人LP的钱去赌博,砸一把过过瘾,输了赔了也不是自己的钱。VC们以把钱投出去为目的,什么时候赚进钱来了,那都是后话。天下哪一个人不晓得钱出去是容易的,钱能不能再回来呢?花钱容易进钱难,如果当VC有昂贵的门槛,砸投资人的钱有条件,钱砸出去了、钱没有回来之前,VC除非把自己的钱垫进去解套,否则谁也不得拍拍屁股摇身一变又换到另一个VC的寨子里混去了,那样的话,别说中欧、长江的MBA们,就连从美林、雷曼出来的投行家们中会有几个愿意把VC作为自己未来职业生涯的第一选择?VC的寨子里,你要时间待久了就不难发现,有几只肥肥的大老鼠在暗地里窜……话要说回来,我们VC中大多数的同志是好的,是有理想的,是努力工作、要求上进、积极靠近组织的。VC里的大老鼠毕竟是少数,但是一粒老鼠屎弄脏了一锅粥。

* 世界上没有十全十美的东西,VC也这样。VC犯的最大的错误是放松在思想上的警惕性,VC喜欢说“我投10个可以死九个,只要一个成了就行”,这句话把VC犯错误的借口都讲绝了,好像VC再犯错误都是特有道理的。创业就不一样了,你到创业的山寨里去混混看,你敢不敢对你老婆说,我有10个创业的Idea,其中9个都是胡扯,可能有一个是可以执行的,看看你老婆愿不愿意砸钱陪你去干?创业是要想好了决一死战的,不成功便成仁。

罪过、罪过……身为VC,时常自感困惑,免不了常常会“身在曹营心在汉”,怀念和羡慕创业生活。我有两个心语心愿,吐出来分享给大家吧:

一. 有朝一日会有人站出来,学习互联网创业者起草《中国互联网行业自律公约》那样,发起起草一份《中国VC从业自律公约》,把不合格、不负责的大老鼠VC逮住关进笼子,不准他们胡乱地砸投资人的钱,不准他们咬死创业者,不准他们连累我们好人VC一起背黑锅;这样的话,VC的山寨会干净很多,VC们再去忽悠LP的钱大概也会容易很多;

二. 有朝一日会有一批成功的创业者来自建“创业者的VC”,重新制定创业投资的游戏规则,由创业者自己来挑选、支持、投资、辅导、监管、提携新一代的创业者和创业企业,创业者自己管理“创业基金”可能更加驾熟就轻,大老鼠“创业者”们是休想到这里来忽悠到钱的;

如果能这样,“创业的山寨”和“VC的山寨”不再各自独立,自相矛盾,各做各的黄粱美梦,VC和创业也不必演“双城记”了,二者将会跑在同一个操作系统上了。

VC平台 篇3

1、系统平台设计

本系统的设计一共分为三个主要部分 (平台框架见图1) :

●软件设计部分

●通信协议设计部分

●软件平台与设备通信的实现

1.1 软件设计部分

控制平台接口部分是由串口充当的, 因此首先介绍一下VC的MSComm控件的使用以及初始化 (主要介绍主要实现方法, 具体函数请读者参考MSDN)

利用MFC类向导建立基于对话框的应用程序CXProj, 然后单击菜单Project->Add To Project->Commponents and Controls...->Registered Active Controls->Microsoft Communications Control, V6.0, 在单击INSERT即可插入MSComm控件。

在Resource View中选择目标对话框, 将MSComm控件图标拖入对话框中, 将控件ID号修改为IDC_MSCOMM, 在拖入MSComm控件后, 在CXProj Dlg类中添加CMSComm的对象m_ctr MSCom, 用于操作串口。

下面完成对串口的初始化:

本文设计的通信协议的长度是固定的 (本文假设协议数据长度固定为DLen, 下面协议设计部分有说明) , 为了方便对每次传输的数据进行读取和处理, 将SetInput Len与Set RThreshold的参数均设置为DLen, 这样当接收数据缓冲区接收完一帧数据后, 将会触发OnComm事件, 在OnComm事件处理函数中可直接读取出长度为DLen的数据。

1.2 通信协议部分

通信协议的设计至关重要, 如果设计的不好将会直接影响数据的传输效率、传输质量、数据提取的快捷性以及协议本身的可读性和易理解性。

基于上述要求, 本平台设计了以下的协议帧, 此协议简单易懂, 数据提取快捷, 传输效率高。

1) 字符格式的确定

为了方便数据传输、提取和处理, 将字符单位设置为如下图的8bit的纯数据格式。

2) 帧格式的确定

为了帧的易解析性, 将帧的数据单位设置为一个字符, 并且借鉴了HDLC的帧格式, 做了相应的修改。

由于采用字符为单位表示数据和命令等, 将使得帧的数据组织结构简单, 而且可以减少解析协议所花费的时间。

帧格式 (帧长度:1+1+1+N+2+1=DLen)

3) 协议设计

开始标识符与结束标识符的选择, 应具有某种规律性, 这里我们选择0xaa (1010 1010b) 和0x55 (0101 0101b) , 简单明了容易解析。

●控制字符格式

0 0 0 0 0 0 0 0应答帧, 用于确认接收数据成功;

0 0 0 0 0 0 0 1重发帧, 用于当前帧数据错误而被丢弃时, 要求设备或主机重新发送当前帧;

0 0 0 0 0 0 1 0错误帧应答, 表示当前帧数据有误, 接收方将返回此应答帧;

X X X X X X 1 1命令/指令帧, 高6位为具体的命令值, 由此可得具体的命令总数, 为2^6个, 即64条指令。

●设备地址字符:用于确定是何种设备 (传感器) , 比如设备有好多个传感器, 那么地址0 (即0000 0000b) 分配给传感器1, 地址1分配给传感器2, 这样依次类推, 即可给每一个传感器设定通信地址, 这样上位机和设备就可以知道每次的操作对象。

●数据字符:数据字符对于一些复杂的应用环境应该设计成可变长的, 其长度可以是0~N个字符长度, 因为在一些特定场合下为了强调传输效率的提高, 这样的设计可以减少无效数据的传输, 但是这样对于简单的应用和要求不是很高的场合会使协议的设计、解析以及应用变得无必要的复杂化, 由于本平台软件的数据流量并不是很大, 作为通用的平台软件设计通信协议应该简单并且易于操作以及解析等, 因此本协议将使用固定长度数据字符流, 数据字符流的长度设为N, N可以是任意长度, 但是最好根据系统实际所需的数据块长度来决定。

1.3 软件平台与设备通信的实现

在1.1节讨论了关于Active X MSComm串口控件的初始化, 在串口初始化成功后即可收发数据流, MSComm控件的收发数据可由读取接收缓冲区中的数据函数Get Input和发送数据流函数Set Output完成。

●帧数据的组织和发送

软件平台与设备通信的实现的关键是如何组织数据成为一帧数据流, 由于每帧数据的长度一定, 固定为DLen, 因此本方案定义一个长度为DLen的数组Array Frame, 用于存放一帧的数据量, 具体定义如下:

帧数据填入完毕后, 即可发送一帧数据:m_ctr MSCom.SetOutpu (Cole Variant (Array Frame) ) , 函数执行完毕后一帧数据发送完毕, 该帧的具体功能由控制符即CMD决定, CMD以及数据DATA可由开发者自己定义。

●帧数据的接收和解析

一帧数据的接收是在OnComm事件处理函数中进行的, 这样可以做到异步接收, 大大增加程序执行的效率, 在工程中我们需要通过类向导为MSComm控件IDC_MSCOMM添加OnComm事件响应函数OnOnCommMscomm Evevt () , 在此函数中我们进行一帧数据的读取工作:

那么至此读出了一帧的数据Byte Frame, 首先对帧开始标示符Byte Frame[0]和结束标识符Byte Frame[DLen-1]进行校验, 看是否分别为0xaa和0x55, 若是则表明数据接收成功, 若不是那么将抛弃本帧数据, 同时返回错误帧应答, 必要时还需返回重发帧。

数据的解析部分, 主要还是解析ByteFrame[1]、ByteFrame[2]以及ByteFrame[3]至ByteFrame[N-2]部分, ByteFrame[1]为设备地址, ByteFrame[2]为控制符, 用于表示本命令完成的功能, 命令具体的功能由用户自行定义, 其余ByteFrame[3]至ByteFrame[N-2]为数据符, 数据符的意义与命令符的功能密切相关, 上述这三部分数据均由用户根据不同的设备自行定义, 这样可以达到一个基于MSComm串口的通用控制软件平台设计的目的。

2、结束语

本设计提供了一种基于串口的通用控制软件平台设计方案, 同时包括一种简易通信协议的设计方案, 整个平台在VC++提供的MSComm串口控件基础上开发完成, 该控制软件平台具有通用性, 可以满足不同领域的需求, 包括学习 (电子比赛调试) 、调试设备或工业控制, 同时为其开发的通信协议简单易懂, 可以大大简化设备端的开发, 减少设备开发成本、开发时间以及调试时间, 大大提高了开发效率。

摘要:本文主要阐述利用VC++及其ActiveX MSComm控件编程 (Visual C++6.0集成开发环境下) , 设计一种通用平台的可用于学习、调试设备以及工业控制的软件, 为了尽可能的实现最大限度的通用性, 为此设计一个通信协议, 此协议简单易懂, 抗干扰能力强, 误码率低等, 极具推广性特别是对于学生群体。

关键词:VC++,MSComm控件,通信协议

参考文献

[1]李景峰, 杨丽娜, 潘恒.《Visual C++串口通信继续详解》.机械工业出版社, 2010

热血Vc++ 篇4

第一章 基础构建平台

一.Vc++项目文件

.dsp 整个工程的项目文件

我需要手动添加.h(c++的头文件,一般是类的声明文件)和.cpp(c++的源文件,是类的函数定义和整个程序实现文件)

二. C++的输入输出

cin 和 >> 配合使用,cout 和 << 配合使用

由于cout 和cin 定义在头文件 iostream.h 中。编写程序是需要此文件包含在程序中。体现为#include “iostream.h”

三. C++的面向对象的编程

类的关键词class

对象是类的一个实例,就像int和 i 的关系

构造函数和析构函数(需要熟悉!)

1.析构函数加 ~ ; 析构函数实现和构造函数相反的功能。

2.友元函数不是类的成员函数,而是独立于当前类的外部函数,但它可以访问该类的所有成员。(程序中如非必要,应尽量减少友元的使用);使用时,需要在函数名or 前面加friend

四. mfc和windows 编程基础

1.mfc是微软的基础类库,其核心是以C++类的形式封装了 windows的 API(application program interface 应用程序接口)函数。

2.c++的控制台程序中,每一个程序的入口程序是main()函数,同样在windows 程序中也有一个入口程序,即winmain()函数,其功能:

a.注册窗口类。建立窗口及做一些初始化工作

b.进入消息循环,接受消息并进行处理

c. 当检索到退出消息时,销毁窗口,推出程序并进行扫尾工作。

第二篇可视化程序设计

一.对话框应用程序设计

a.

二. 单文档和多文档

三.Windows标准控件的应用

四.菜单、工具栏和状态栏设计

五.Windows图形处理和文本输入输出

第三章 windows编程篇

一.文件操作

二.注册表和INI文件

三.DLL动态链接库

四.多线程编程

第四章 VC++开发篇

一.数据库应用程序设计

二.网络编程

三.多媒体编程

第五章 实例篇

一.图书管理系统的实现

二.简单邮件客户端实现

VC平台 篇5

由于一些气象雷达站一般地处环境与气候恶劣的偏远地区。雷达站内雷达信号处理系统的检测与维修存在一定的难度。当系统出现故障要进行检修时,由于地理环境的限制,检修在时间上会有一定的拖延,人们希望对于非硬件电路损坏的故障,能够通过软件平台进行监控,并通过软件来及时对系统进行维护与系统恢复。该软件设计的目的就是为了避开雷达系统存在着一定的机械性和不方便性的缺点来完善该雷达信号处理系统。该软件利用VC++的友好界面来实现PC机、DSP、HSP(硬件信号处理器)之间通信的可视化,利用PC机最终监控大气雷达信号处理系统中的核心部件HSP。此外,还解决了特定外部设备与PC机之间的海量数据传输问题,实现了DSP与PC机之间的优势互补。此软件平台具有一定的通用性,可以通过主机选择对不同的硬件系统的操作,下载不同的数据处理算法到DSP芯片中等,同时也可为其它不同型号DSP芯片开发软件平台提供一定参考。该软件构建了一个界面友好、实时性强、操控方便的信号处理系统,简化了测试人员的工作,同时降低了系统检修的频率,雷达信号处理器的性能得到了比较大的提高。

1 系统硬件组成及功能

整个系统的硬件结构,如图1所示,其中核心部件主要有:硬件信号处理器(Hardware Signal Processing,HSP)、Daytona板及PC机。HSP主要完成中频I/Q数据采集、接收机、发射机控制以及定时信号产生等功能,其性能的好坏直接影响到整个雷达系统的正常运行。

Daytona板是Spectrum 公司生产的DSP开发板,它的主要功能是对HSP采集的大量回波数据进行高速处理后并传送给PC机,同时处理来自PC机的数据并传送给HSP,它主要由以下几个部分组成:两片TMS320C6701 DSP、3片hurricane桥、一片DEC21153 PCI桥、3块I/O接口芯片(PEM Sites、PMC Sites以及DSP-LINK3)、一片主机接口芯片HPI、128 k×32-bitSSRAM、4 M×32-bitSDRAM以及8 k×32-bit 双口 RAM等,其硬件结构,如图2所示[1]。

2 基于VC++平台的软件设计

该软件平台的目的用软件来模拟一块基于 PC 机的硬件信号处理定时板卡,此硬件信号处理定时板卡是中国新一代多普勒气象雷达 CINRAN CA 和 CINRAN CB 系统核心部件之一,这就可以避开雷达系统存在一定的机械性及不方便性的缺点。该平台的主要功能是对Daytona板和HSP(硬件信号处理器)进行测试和控制。

2.1 软件设计思想

HSP 接收并处理来自 A/D 变换器的数据,然后送往由双C6X DSP芯片构成的Daytona板进行处理。由两片DSP芯片来处理来自于HSP的大量的回波数据,不仅提高了数据的处理速度,而且在存储容量上也有一定的提高。经DSP芯片处理后的数据可以通过PCI总线存储到PC机中,也可以通过DSP芯片来编写无损压缩算法将大量的I/O数据处理后进行压缩,然后再存储到PC机或者DSP中,这样可以充分运用PC机平台上丰富的软件和硬件资源完成目标显示、数据融合、参数设置等任务。该软件利用VC++的友好界面显示HSP的工作状态,通过发中断命令来实现PC机对HSP的控制与监测,从而实现了PC机与DSP、HSP之间的通信;同时,通过调用Daytona板的相关软件,实现两片DSP芯片之间的数据传送及中断等。

2.2 软件设计的步骤

2.2.1 PC机与DSP之间的通信

PC机通过依次调用主机应用程序库(ALIB_HOST)、内核接口库以及设备驱动程序来和Daytona板中的DSP芯片进行通信;DSP首先调用C6X应用程序库(ALIB_C6X)中的FTC6x_Init()函数对其进行初始化、设置外部存储器的等待状态以及页面寄存器的配置等,然后通过调用DSP用户程序实现与PC的通信。整个通信过程,如图3所示。

2.2.2 Daytona内部两片DSP之间通信过程

Daytona的两片DSP之间的数据通信可以用中断来控制,并有以下4种方式:

(1) 高速数据传输:由一片DSP的SSRAM经由局部PCI总线,采用Hurricane DMA传输方式传输到另一片DSP的SSRAM,数据传输完成后向目的DSP芯片SSI中断寄存器发送信号;

(2) 低速数据传输:通过配置全局中断来发送数据传输,并利用共享的双口RAM通路来实现数据传输;

(3) 一片DSP的SSRAM与PCI设备(如PMC或PCI主机)之间的高速数据传输:采用Hurricane DMA传输方式将数据传输到PCI设备,传输完成后通过PCI中断向PC机发送消息;

(4) 一片DSP的SSRAM到另一片DSP的任意资源之间的数据传输:首先将数据从一片DSP的SSRAM经由Hurricane X并采用Hurricane DMA传输到主机接口,然后再传输到另一片DSP的各部分资源。

2.2.3 DSP与HSP的通信过程

HSP上预留了一块共享存储区用来实现HSP与DSP之间的数据通信。HSP将控制字、脉冲重复频率等数据传输到共享存储区中,DSP通过HPI(主机接口)读取数据,并根据这些参数作相应处理。同时,DSP可以向共享存储区发送设备开始控制字、接收控制参数等数据,HSP读取这些参数并作相应控制。另外,DSP也可将数据通过HPI接口传输到共存储区与HSP接收的大量回波数据进行比较,从而进行性能分析。由于天空中采样得到的的云图数据量非常大,而DSP、HSP的存储空间有限,所以可以在DSP中调用压缩算法,将数据压缩后再进行存储,同时可以将使用频率高的数据通过压缩后存储到DSP或者HSP中,从而提高了系统数据处理的速度。

2.3 软件设计实现流程

首先将打开系统,对系统进行初始化,并对系统各资源进行复位;然后将算法代码加载到DSP芯片中;获得各部件资源句柄;将共享存储区清零,同时设置相应的中断方式。此后就可以将HSP接收并处理后的数据传送到DSP中进行相应的处理,DSP处理后的数据再通过Hurricane传送到PC机中存储。同样,PC机上的数据可以送往DSP芯片进行处理,处理后的数据再传送给HSP,进行相应的性能分析等等。这样就完成了整个通信过程。整个软件设计流程,如图4所示。该软件具有一定的可扩充性,可以根据具体环境添加相应的功能模块。部分相关界面,如图4和图5所示。图4为通过VC编程来实现PC机与DSP进行通信的界面,图5为测试PCI通道是否可以通信的界面。

首先测试PCI通道是否可以通信,然后测试通道是否可以正确传送数据。图5显示PCI是否可正常通信且传送数据。通过VC的消息盒或者菜单显示证明PCI通道可以通信并且能正确通信。通过软件来监控PC机与DSP通信的界面,如图4所示。实现了PC机监控HSP、控制HSP的工作时序、监控HSP系统是否正常工作等。同时可以将DSP处理后的数据存储到PC中。

3 结束语

文中针对HSP不方便测试和数据分析的缺点,设计了基于VC++的软件测试平台。该软件应用于大气雷达系统测试过程中,通过该平台可以方便各雷达站操作人员对系统的检测,做到准确及时地发现问题,有利于快速排除故障,从而提高设备的工作效率,减轻雷达站观测人员的工作量。同时,可以编写更为详细的数据分析模块,比如通过加噪或者对获得的回扫数据进行分析等来对大气云图中的雨滴数进行分析,从而获得更为准确的天气情况。此外,该软件具有一定的可扩展性,可以根据硬件的不断升级进行相应模块的添加和修改,最终形成一种通用的软件平台。

摘要:针对气象雷达信号处理系统中的核心部件-硬件信号处理器(HSP)所存在的局限性,设计了基于VC++的软件测试平台。该软件利用VC++的友好界面,实现了PC机对HSP的监控,同时解决了DSP与PC机之间的海量数据传输问题。该软件平台具有一定的通用性和可扩展性,可以选择不同的硬件系统,下载不同的数据处理算法,并且可以随着硬件的升级而进行相应模块的添加或修改,同时也可为其它不同型号DSP芯片开发软件平台提供一定的参考。

关键词:硬件信号处理器(HSP),DSP,VC++,数据传输,软件测试平台

参考文献

[1]Daytona/Barcelona C6x PCI Board Programming Guide Doc-ument[Z].USA:Number 500-00384 Revision01,2001.

[2]Daytona Dual C6x PCI Board Technical Reference Docu-ment[Z].USA:Number 500-00383 Revision2.01,2000.

[3]Daytona/Barcelona PMC Porting Kit User Guide Document[Z].USA:Number 500-00501 Revision 1.00,2000.

VC平台 篇6

0 引言

水下探测技术,大多数要通过回波能量进行分析,可知前方是否有障碍物,可知前方是否有探测物体,再通过计算能量大小,具体分析物体的特性。因而,回波能量的计算要尽量准确、误差尽量要小,并且计算结束要进行验证。

1 相控阵的布阵方式

假设基阵采取的是多元面阵,如下图2.1所示。基阵内部阵元进行物理连接,每一行的白色阵元相连等效为一个阵元,每一列的黑色阵元相连等效为一个阵元,这样就形成横纵两维线阵,呈十字分布,两维的线阵是独立的,每一维的线阵可以分为4组形成两个波束,波束与换能器辐射面法线间的夹角为20度,最终形成四个波束。

通过仿真计算,最终做完整个面阵的相控后形成的发射指向性如2.2所示 :

在信号接收时,需要区分是哪一个波束来得信号,以便于确定障碍物或者被探测物体的方位。这意味这要将两个发射波束的信号分开。经过计算及仿真对于整个面阵做完相控后接收的指向性如图2.3所示 :

2 在 VC 平台下波束形成的实现

声纳系统在接收到8通道原始数据后,将数据传到了PC机,上位机开始计算回波能量,根据上一节的波束形成原理算法,在基于VC++ 的平台上进行了对接收到的数据进行了算法实现,形成了四波束。算法如下 :

(1)根据采样包数计算采样点数,公式为

(2)将原始数据存放的数组进行转置,之后用进行正交变换,正交变换的公式为 :

(3)得到正交变化后的实部虚部后,再分别进行滤波,公式为 :

(4)滤波后的八通道数据,根据相控原理,1、2、3、4通道

上述公式是波束1、2的实部、虚部,波束3、4的计算方法和波束1、2相同。

为了验证波束形成后的数据是否正确,在VC平台下回放一组松花湖实验数据,并且保存计算后的数值得到波束形成后的结果。然后和Matlab数据处理结果进行比对,计算结果完全一致。对比情况如图3.1和3.2

3 回波能量的计算方法及 VC 平台实现

波束形成之后,要计算每个波束每个点的回波能量,将实际的能量Ei的平均值记为E(角括号通常用来表示“总体均值”),则实际N次检测的均值E是E的估计值。在检测次数足够大时,E趋近于实际的E ,即回波积分结果的期望值。注意,当波束照射范围内的目标较少时,即使目标的位置是随机变化的,也不能仅仅只通过一次检测就确定集合的均值,必须要通过多次随机试验才行。只有当波束照射范围内的目标足够多时,才可以通过一次随机检测,得到目标集合的均值。

现在假设,只考虑第j个目标,而忽略其它所有的目标。则ej是单独一个与其它目标不相关的回波积分的期望值,也就是说在计算平均值时考虑了目标的随机位置以及除了回波相位外的其他随机因素的影响,这对一个或多个目标来说同样适用。因此,利用这种思想依次对每个目标进行计算,进而得出平均值 :

线性原理表述为的期望,即E值,与ej的总和相等,用数学表达式记为 :

上式中对于任意的n≥1都适用。这个式子的主要特点是是单个目标的属性其并不依赖于目标的密度(单位体积内目标的数量)。此外,当N值非常大时,与目标的数量则是成比例的,如图4.1(a),这点也是回波积分法能够正常应用的基本要求。通常N值应该大于等于20,此时,才能合理的逼近E ,即E≈(E)。

图4.1 (a) 所示是低密度随机分布的鱼群,此时回波能量E =E0 ,即回波能量与目标密度F成线性正比。但是对于鱼群目标来说,线性原理并不是总是适用的。例如图4.1 (b) 所示,当目标为低密度规则的鱼群,鱼与鱼之间的间隔为声波波长的一半,若其回波信号的相位相同,那么鱼群回波信号的幅值将等于每条单独的鱼的回波信号幅值的和。此时,回波能量值将会按照目标数的平方进行增长。图4.1 (c)所示为高密度鱼群分布,此时E =Ee ,回波能量增长的速度没有鱼群速度F增长的速度快。图4.1(d) 所示为超高密度重叠散射分布的情况。此时E =Em,与E0相比较会发现Em 有一段延展。

当回波是不相干的情况时,从目标集合得到的回波能量的期望值是集合内每个目标回波能量的和。回波能量与回波幅值的平方成正比,同时也与回波积分值成正比。下面举一个简单的例子作为说明 :假设接收到的两个信号的角频率均为ω ,相位差为η,则两个信号分别为A1sin(ωt )与A2sin(ωt +η),其中A1 和A2是回波幅度,t为时间。当这两个信号被一起接收时得到的信号为 :

这是一个正弦波信号,其幅值的平方为 :

假设现在有很多对具有随机相位的回波。η为何值都是等概率的,所以cosη的平均值为0。通过多次检测与计算,公式(4-4)中的cosη项将消去。因此,集合内目标的平均回波幅度的平方为 :

所以回波能量推到到最后,就是能量的平方等于实部虚部的平方和,即 :

在VC显控软件的平台下,根据最后的推导公式 (4-6),并且利用波束形成的四个波束,就可以推算出能量计算公式为 :

为了验证回波能量的数据是否正确,在VC平台下回放一组松花湖实验数据,计算波束1的能量值然后和Matlab数据处理结果进行比对,计算结果完全一致。对比情况如图4.2和4.3。

4 结束语

VC平台 篇7

对话框是Windows程序设计中一种重要的界面元素, 常用于实现与用户的交互。在VC++.NET窗体程序设计模式下, 对话框是窗体的一种。当需要使用对话框时, 只要增加一个窗体并对窗体的某些属性进行设置即可得到一个标准对话框。在开发应用程序时, 经常需要在不同窗体之间进行数据的传递, 这里以在VC++2008平台下开发的“学生成绩管理系统”为例, 介绍一种实现不同窗体间数据传递的方法。

2、窗体间需要传递的数据

在“学生成绩管理系统”中可以实现对学生成绩的增加、删除、修改和查询, 其主界面窗体如图1所示。

在主界面窗体中点击“成绩查询”按钮, 将在列表视图控件中显示根据查询条件查找到的学生成绩信息。选中某个成绩, 则可对该成绩信息进行删除或修改。如点击“修改”按钮, 将出现“修改成绩”对话框, 如图2所示。被选中成绩项的数据, 如学号、姓名、课程号、课程名和成绩等数据将被传递给对话框, 并在对话框的文本框控件中显示。当在“修改成绩”对话框中修改了成绩并点击“修改”按钮时, 对话框关闭, 修改过的成绩信息被传递回主界面, 并使主界面列表视图控件中的成绩信息更新;如点击“取消”按钮, 对话框关闭, 主界面中成绩信息不改变。

3、主界面向对话框传递数据

在主界面Form1窗体中点击“修改”按钮时, 一般需要执行以下代码显示“修改成绩”对话框即Form2窗体:

以上代码虽然可以实现Form2窗体的显示, 但无法向该窗体传递数据, 这是因为在建立Form2窗体对象时自动调用了框架提供的无参构造函数, 该构造函数不带参数, 因此不能传递数据给Form2窗体。为了解决这一问题, 要为Form2类增加一个带参数的构造函数, 该函数如下:

其中xh、xm、kch、kcm和fs等参数是选中的待修改成绩项的数据, 这样在建立Form2窗体时, 通过自动调用新增加的带参数的构造函数, 就可以将需要传递的数据传递给Form2窗体, 并在该窗体被加载时在各文本框控件中显示。

4、对话框向主界面传递数据

为了将“修改成绩”对话框中修改过的成绩值返回给主界面, 要为Form2类增加一个私有数据成员grade, 用来存放修改过的成绩值, 并在Form2类中增加获得成绩的属性方法如下:

在关闭Form2窗体返回主界面时, 因为要根据按下的是“修改”按钮还是“取消”按钮, 决定是否更新主界面中的成绩值, 所以要将“修改”和“取消”按钮按下时窗体的返回值设为不同。可以将“取消”按钮的DialogResult属性设置为“Cancel”, 这样当按下“取消”按钮时, 返回主界面的值是DialogResult::Cancel;但对于“修改”按钮, 如果将其DialogResult属性设置为“OK”, 虽然可实现返回DialogResult::OK, 与“取消”按钮的返回值不同, 但考虑到按下“修改”按钮时要先判断修改过的成绩值是否合法, 如不合法, 则提示用户重新输入, 这时“修改成绩”对话框应保持打开状态, 只有当判断出输入数据合法时, 才能关闭对话框, 所以不能将“修改”按钮的DialogResult属性设置为“OK”, 而是设置为“None”, 然后再为“修改”按钮button1添加Click事件的处理代码如下:

这样返回主界面后, 只要判断出返回值是Dialog Result::OK就调用Form2窗体的Grade属性方法, 获得修改过的成绩值以更新主界面的列表视图控件, 判断返回值的语句如下:

5、结束语

本文以VC++2008平台下开发的“学生成绩管理系统”为例, 介绍了在VC++.NET平台下采用窗体设计模式开发应用程序时实现窗体间数据传递的一种方法, 该方法简单、易于实现, 对于窗体间各种类型数据的传递都适用。

摘要:介绍了在VC++.NET平台下, 以窗体设计模式开发应用程序过程中实现窗体间数据传递的一种方法, 该方法简单、易于实现, 对于窗体间各种类型数据的传递都适用。

关键词:窗体,VC++.NET,数据传递

参考文献

[1]杜茂康.C++.NET程序设计[M].北京:清华大学出版社, 2009年.

[2]郑阿奇.Visual C++.NET2010开发实践——基于C++/CLI[M].北京:电子工业出版社, 2010年.

[3]郑阿奇, 丁有和, 刘毅.Visual C++.NET程序设计教程[M].北京:机械工业出版社, 2005年.

VC平台 篇8

1. 使VC6.0编译出使用系统风格的程序

(1) 创建一个.manifest文件的资源。

在res/文件夹下创建一个跟以程序名加.manifest的文件, 如果程序为test.exe, 则创建test.exe.manifest文件内容如下:

(2) 将新定义的资源加入到.rc文件中, 类型设为24。

打开res/文件夹下的.rc2文件, 在其中加入如下定义:

其中的文件地址按 (1) 中修改的设置即可。

(3) 将新加入的资源包含到resource.h文件中, ID设定为1。

在resource.h文件中加入如下一行:

#define MANIFEST_RESOURCE_ID 1

之后编译即可, 为了使程序界面能充分利用系统的界面特性, 将界面字体设置为TrueType类型的, 利用Windows XP等系统的屏幕字体平滑特性。

2. 使VC2008编译出使用系统风格的程序

在VC2008下就比较简单了, 如果程序字符集使用unicode则默认就是使用系统界面风格的, 如果选择其他的类型, 则编辑stdafx.h即可。

最后面部分代码如下:

修改为如下代码即可:

最后是两张截图的比较, 图1为默认设置下的界面风格, 图2为经过修改后的界面风格。

上一篇:知人之“长短”下一篇:城市公交的民生尴尬