874380912多点温度检测系统上位机软件设计与编程论文_第1页
874380912多点温度检测系统上位机软件设计与编程论文_第2页
874380912多点温度检测系统上位机软件设计与编程论文_第3页
874380912多点温度检测系统上位机软件设计与编程论文_第4页
874380912多点温度检测系统上位机软件设计与编程论文_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中国矿业大学(北京校区)毕业设计(论文)第一章 绪论1.1 引言球磨机是建材、选矿、化工等重工业中最广泛采用的粉磨机械。运用在大规模的粉磨场合。在水泥生产中,经过粉碎的原料、熟料、煤及其他混合材料都要在球磨机中进行粉磨。 球磨机是生产水泥的重要主机设备。但是在使用过程中,主轴瓦过热问题时常影响着生产,尤其出现在采用球磨机粉磨熟料生产成品水泥中,主轴瓦过热,严重的甚至烧瓦,造成停机降温,甚至停产抢修。这个问题的出现,不同程度地影响设备运转率,影响生产的正常进行,给企业造成一定的经济损失。因此,对球磨机进行实时故障检测,对保障安全生产、提高生产效率都有着重大的实际意义。1.2 球磨机故障分析1.2

2、.1 主轴瓦作用球磨机是一个水平装在两个主轴上的低速回转筒体,回转部分的重量全部由主轴承负担,而主轴承由主轴瓦、轴承座和润滑系统组成。主轴瓦是主轴承最重要的零件,它呈球面形,装在轴承底座的凹球面上,瓦面多用铅基轴承合金制成。这种主轴瓦具有较好的强度、塑性、距合性、减摩性、耐磨性、润滑性、传热性,而且更换简单、方便。能够满足主轴承良好润滑要求,适应球磨机低速、重载的工作环境。1.2.2 主轴瓦润滑原理主轴瓦的润滑有油圈带油式和油泵供油式等几种形式,目前常用的是油圈带油式。油圈随球磨机中空轴一起运转带油,由刮油体将油圈带来的油刮到布油器上,再由布油器将油均匀地撒到中空轴上,在中空轴和主轴瓦接触的表

3、面之间形成一层油膜,把摩擦表面隔开,获得液体动压润滑,从而减小中空轴与主轴瓦之间的磨损,保证球磨机正常运转。1.2.3 主轴瓦过热原因分析 主轴瓦过热根本原因在于主轴承内有大量热量,不能及时散发出去,积存下来导致温度不断升高,主轴瓦过热,当温度进一步升高,主轴瓦表面的巴氏合金将熔化,造成烧瓦,导致球磨机无法正常运转。因此,这类问题在生产中要高度重视,我们可以从以下几个方面来分析主轴瓦过热原因。(l)主轴瓦刮研不良,中空轴与主轴瓦接触达不到规定要求,造成主轴瓦过度磨损,产生大量热量,导致主轴瓦过热,甚至烧瓦。(2)润滑油种类选择不当,油质不好,损坏中空轴与主轴瓦,油粘度小,难以形成润滑油膜。(3

4、)润滑系统有问题,如油圈带油不好,刮油体、布油器安装不正确,没有油过滤器,管道不畅通等。(4)球磨机工的责任心不强,没有随时掌握油位、油质,不能及时加油,不能及时更换润滑油造成缺油、油质差。主轴瓦得不到良好的润滑,导致主轴瓦过热。(5)中空轴与螺旋筒隔热不好,筒体内热量直接传递给主轴瓦。(6)长时间喂入过热物料,主要是出窑熟料散热不充分,导致入磨物料温度过高,直接反映在主轴瓦上温度偏高,这在夏天6-8月表现更明显。(7)球磨机通风不良,磨内热量难以排出直接传到主轴瓦上。(8)外部冷却不充分,球磨机采用水冷却,循环水一方面冷却主轴瓦,一方面冷却磨机筒体表面,冷却水停止或冷却水不足,造成冷却不充分

5、,主轴瓦过热。(9)主轴承有裂缝,轴承内冷却水穿过裂缝渗到瓦面,破坏了良好的润滑,导致主轴瓦过热。通过上面分析,我们可以看到,球磨机的各种故障最终都引起主轴瓦的温度升高,造成主轴瓦过热甚至烧瓦。因此我们可以通过实时检测主轴瓦的温度,发现球磨机的故障。当主轴瓦温度异常时,给出报警信号,及时地进行检测,避免烧瓦等严重事故,保障了设备的安全运行。1.3 解决方案球磨机的轴承在故障情况下,引起温度升高而烧坏,从而造成直接和间接的巨大的经济损失。我们设计了一套多点温度检测系统,实时检测主轴承的温度,系统结构图如图1-1所示。本系统由下位机和上位机组成,下位机由at89c51单片机、键盘显示电路、报警电路

6、、数字温度传感器、e2rom和看门狗电路组成。完成对球磨机轴承温度的检测、显示、报警。并把检测值通过rs-485总线传送给控制室的上位机(微机)。由上位机进行数据存储、显示。可对历史数据进行查询。通过图形显示,直观的反映球磨机的温度变化趋势可早期预报球磨机故障。微机rs232/485数字温度 传感器3#球磨机数字温度 传感器1#球磨机数字温度 传感器2#球磨机数字温度 传感器4#球磨机单片机串口/rs485 at89c51单片机看门狗电路e2rom报 警键盘显示rs485总线图1-1 系统结构图 1.4 论文主要内容本文为多点温度巡检系统的一个子课题,设计与开发上位机监控系统软件,本文详细介绍

7、了如何在windows 98操作系统上用visual basic编程。设计并开发了数据采集、数据处理与存储、系统参数初始化、数据显示、查询、超温报警等功能模块。39第二章 rs-232与rs-485标准及应用2.1 rs-232、rs-422与rs-485的由来 rs-232、rs-422与rs-485都是串行数据接口标准,最初都是由电子工业协会(eia)制订并发布的,rs-232在1962年发布,命名为eia-232-e,作为工业标准,以保证不同厂家产品之间的兼容。rs-422由rs-232发展而来,它是为弥补rs-232之不足而提出的。为改进rs-232通信距离短、速率低的缺点,rs-42

8、2定义了一种平衡通信接口,将传输速率提高到10mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。rs-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为tia/eia-422-a标准。为扩展应用范围,eia又于1983年在rs-422基础上制定了rs-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为tia/eia-485-a标准。由于eia提出的建议标准都是以“rs”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以rs作前缀称谓

9、。 rs-232、rs-422与rs-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。因此在视频界的应用,许多厂家都建立了一套高层通信协议,或公开或厂家独家使用。如录像机厂家中的sony与松下对录像机的rs-422控制协议是有差异的,视频服务器上的控制协议则更多了,如louth、odetis协议是公开的,而prolink则是基于profile上的。2.2 rs-232串行接口标准 eia rs-232c是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串行接口标准,用来实现计算机与计算机之间、计算机与外设之间的数据通讯。rs-

10、232c串行接口总线适用于:设备之间的通讯距离不大于15m,传输速率最大为20kb/s。一、接口信号一个完整的rs-232c接口有22根线,采用标准的25芯插头座。表21给出了rs-232c串行接口信号的定义以及信号的分类。21 rs-232c接口信号引脚号缩写符信号方向说 明1屏蔽(保护)地2txd从终端到调制解调器发送数据3rxd从调制解调器到终端接收数据4rts从终端到调制解调器请求发送5cts从调制解调器到终端清除发送6dsr从调制解调器到终端数据装置就绪7 信号地8dcd从调制解调器到终端接收线信号检出(载波检测)9 保留供测试用10 保留供测试用11 未定义12dcd从调制解调器到

11、终端辅信道接收线信号检测13cts从调制解调器到终端辅信道清除发送14txd从终端到调制解调器辅信道发送数据15从调制解调器到终端发送器信号定时16rxd从调制解调器到终端辅信道接收数据17从调制解调器到终端接收器信号定时18 未定义19rts从终端到调制解调器辅信道请求发送20dtr从终端到调制解调器数据终端就绪21从调制解调器到终端信号质量检测22从调制解调器到终端振铃指示23从终端到调制解调器从调制解调器到终端数据信号速率选择器24从终端到调制解调器发送器信号定时25 未定义二、 电气特性rs-232c采用负逻辑,即:逻辑“1” :-5v-15v逻辑“0” :+5v+15vrs-232c

12、的电气特性如表22所示。表22 rs-232 、rs-485、rs-422有关电气参数规定rs-232rs-422rs-485工作方式单端差分差分节点数1收、1发1发10收1发32收最大传输电缆长度50英尺400英尺400英尺最大传输速率20kb/s10mb/s10mb/s最大驱动输出电压+/-25v-0.25v+6v-7v+12v驱动器输出信号电平(负载最小值)负载+/-5v+/-15v+/-2.0v+/-1.5v驱动器输出信号电平(空载最大值)空载+/-25v+/-6v+/-6v驱动器负载阻抗()3k7k10054摆率(最大值)30v/usn/an/a接收器输入电压范围+/-15v-10v

13、+10v-7v+12v接收器输入门限+/-3v+/-200mv+/-200mv接收器输入电阻()3k7k4k(最小)12k驱动器共模电压-3v+3v-1v+3v接收器共模电压-7v+7v-7v+12v2.3 rs-485与rs-422串行接口标准 2.3.1 平衡传输 rs-485、rs-422与rs-232不一样,数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为a,另一线定义为b,如图22所示。 通常情况下,发送驱动器a、b之间的正电平在+2+6v,是一个逻辑状态,负电平在-2-6v,是另一个逻辑状态。另有一个信号地c,在rs-485中还有一“使能”端,而在rs-

14、422中这是可用可不用的。“使能”端是用于控制发送驱动器与传输线的切断与连接。当“使能”端起作用时,发送驱动器处于高阻状态,称作“第三态”,即它是有别于逻辑“1”与“0”的第三态。图22 rs-422、rs-485传输线定义 接收器也作与发送端相对的规定,收、发端通过平衡双绞线将aa与bb对应相连,当在收端ab之间有大于+200mv的电平时,输出正逻辑电平,小于-200mv时,输出负逻辑电平。接收器接收平衡线上的电平范围通常在200mv至6v之间。如图23所示。 图23 rs-485/rs-422接收器接收平衡线上的电平2.4 握手协议计算机在与单片机通信时,为了确定所收的数据是单片机发出的温

15、度值就要设计握手协议。我们采用在发送每路温度数据前发送一个数aah作为数据报头,接着发送温度值所对应的序号、该路温度值的整数部分、该路温度值的小数部分,每次发送之间延时6ms。用这样的一组发送序列将一路温度数据发送给上位机。每组发送序列间隔大于450ms。第三章 软件功能与结构设计3.1数据采集模块上位机通过电缆与下位机相连。下位机进行数据预处理,组成一定的数据格式,通过rs-232串行口,将数据送到上位机,上位机采用串口中断方式接收数据,保证采集数据的实时处理。数据采集模块负责设置串口,监听串口,当串口有数据传入时判断是否是所要接收的温度数据。如果所接收到的数据正确则将数据传给数据处理和数据

16、显示模块。3.2 数据处理与存储该模块实现数据处理与存储。当此模块收到数据采集模块传来的数据后asc函数将数据转化为string型。然后判断此温度是否超过所设的最高温度。如果没有超过报警值,则将数据交给显示模块。如果超过则报警,提示用户温度过高。在完成数据的处理和显示后,用writeline函数将数据写入系统日志保存在硬盘上,至此就完成了数据处理与存储。3.3系统参数初始化本程序可以对一些参数进行设置。包括高温报警值,低温报警值,串口波特率,串行端口号选择。参数被设置后将会被保存,以便系统在运行时使用。用户可以根据需要随时更改参数。3.4数据显示数据显示采用了模拟lcd显示的activex控件

17、。并使用了4组显示模块可以同时显示4路不同的温度数据。该显示控件以黑色为底色,用天蓝色来显示温度值,这样的配色很醒目。而且当温度过高时背景色会变成红色以提醒用户温度过高了。3.5图形显示本程序可以根据用户选择的数据源将数据以图形的形式显示在绘图区中,直观的体现温度的变化情况。此模块先将用户选择的数据读入到一个动态数组中然后绘图。用户可以清楚的看到温度的变化。3.6查询本程序将收到的数据以文本的形式保存在一个以当天日期为文件名的文本文件中。用户可以通过打开日志文件来查看某天的温度记录。3.7超温报警本软件设计了报警模块,当数据处理模块发现所收到的数据值大于最高温度时就触发报警模块。报警模块会弹出

18、用户温度过高的警告,并将当前温度以醒目的红色为背景色显示,并控制计算机的小喇叭发出蜂鸣声。这时用户可以选择“确定”来关闭报警对话框或者选择“忽略”,此时系统会自动打开设置对话框,用户可以重新设置高温报警值。第四章 系统软件开发4.1软件开发平台和编程语言的选择本软件在微软windows98平台上开发。经过测试其在最新的windows2000及windowsxp上均可正常运行。本软件使用微软基于basic语言的visual basic软件开发。之所以选择visual basic是因为其提供了大量的控件,为程序的初期界面开发提供了便利。而且本程序对运行速度没有过高的要求,因为相对于当今cpu的处理

19、速度,串口的传输速率不可能超过cpu的处理速度。4.2软件界面设计为使界面美观我是用了xp界面控件,界面美观醒目,格式统一。4.2.1系统主界面 在程序启动时先有一个loading界面(见图41)。 loading界面会自动关闭,然后系统主界面会弹出(见图42)。图 41 系统loading界面图42 系统主界面4.2.2应用系统子界面 本系统子界面包括:设置窗口,高温报警窗口,温度提示窗口,时间显示窗口,数值选择判断窗口,数值输入错误提示窗口,选择绘图数据源窗口。4.3主要模块的实现4.3.1数据采集模块的实现一、mscomm控件介绍在数据采集模块中使用mscomm 控件通过串行端口接收数据

20、,为应 图43 数值输入错误提示窗口用程序提供串行通讯功能。mscomm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的api函数,而且在vc、vb、delphi等语言中均可使用。 microsoft communications control(以下简称mscomm)是microsoft公司提供的简化windows下串行通信编程的activex控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(eventdriven)方法,一是查询法。二、串行通信的两种格式进行串行通信时有以下的两种传输方式:(1)字符形式:

21、通常以小于asc的字符码来传输,通常用于传送指令(2)二进制形式:将数据以二进制编码的方式传送,他可能含有asc128以上的字符码,通常用来传送数据,以节省时间。进行串行通信的双方,一般说来是利用字符串(也就是我们在键盘上可以找到的可见字符,他们通常在asc码128以内)来进行数据的交换,由于传输一般的命令,使用这种可见字符是相当恰当的;不过,在某些需要考虑传输的设计上会用以二进制的方式来传输数据。如当要传输一个100的数值出去,如果使用字符的方式传输的话,将会使用到4个字节;由于1000这个数值,在计算机上可以用一个整数来表示,所以将他改成二进制的方式的话,只要两个字节就可以了,两者之间相差

22、了50%的传输时间。由于串行传输的速度在我们看来还是很快的,这种差异在小量的10组,20组数据传输时可能还没有关系;可是如果这样的数据我们要传送200组,500组时,时间上的差异就非常明显,这种明显的差异表现出来就是系统效能的降低。因此在考虑传输方式时,要特别想到数据量的对少和系统效能之间的关系。三、 mscomm控件两种处理通讯的方式mscomm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式,定时器自动驱动方式。(1)时间驱动方式:事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如:在串口接收缓冲区中有字符,或者 carrier de

23、tect (cd) 或 request to send (rts) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 mscomm 控件的oncomm 事件捕获并处理这些通讯件。oncomm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 commevent 属性。在编程过程中,就可以在oncomm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个mscomm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 mscomm 控件。本程序采用了事件驱动方式,没有采用延时控制,因为本程序要同时接受4路温度数据,延时所带来的

24、误差即不确定性会导致程序无法正确的接受并显示数据。在mscomm1_oncomm()方法中我采用select case 语句来为接受到的数据选择显示地址。以下对 mscomm1_oncomm() 的源代码进行说明:temp = mscomm1.input 接受串口数据并存入字符串temp中sel = left$(temp, 1) 取temp中的第一个字符first = mid(temp, 2, 2) 取temp中的的2,3个字符second = right(temp, 1) 取temp中的最后一个字符temping = val(first + "." + second) 为

25、了显示小数在第2,3字符与最后一个符之间加点select case sel 判断读入的数据应在哪块模拟lcd上显示 case "a" lcdshower1.temperature = temping if temping >= cdbl(optionform.hightemptext.text) then 判断温度是否超过警戒温度 lcdshower1.backcolor = &hff&使lcd显示背景色变为红色 frmmsg.show end if case "b" lcdshower2.temperature = temping

26、 if temping >= cdbl(optionform.hightemptext.text) then lcdshower1.backcolor = &hff& 使lcd显示背景色变为红色 frmmsg.show end if case "c" lcdshower3.temperature = temping if temping >= cdbl(optionform.hightemptext.text) then lcdshower1.backcolor = &hff& 使lcd显示背景色变为红色 frmmsg.showe

27、nd if case "d" lcdshower4.temperature = temping if temping >= cdbl(optionform.hightemptext.text) then lcdshower1.backcolor = &hff& 使lcd显示背景色变为红色 frmmsg.showend if end select temp = "" 清空缓冲区 end sub(2)查询方式 查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 commev

28、ent 属性的值来查询事件和错误。(3)定时器自动驱动方式定时器控件在控制系统中经常被用来执行固定且周期性的工作,该控件中的interval属性用于设置每次执行的间隔时间,只要间隔时间一到,马上就会执行timer时间内的程序代码,这样就达到了不断执行的目的。如果希望每隔100秒执行一次程序代码取得设备数据,最直接的做法就是设置定时器的intertal属性值为100,表面上看这样可以每隔100秒去一次数据了。但每一次向设备要求数据传送时,会执行一段代码,这一段代码所费的时间依代码的大小而不同,以现在的计算机cpu来说,这些时间真的微不足道:可是经实验发现每一次的数据传输尽管使用了最优化设计,还会

29、花上100毫秒左右的时间才能得到一组数据,这个时间还和所传输的数据量的大小有关。如果数据量一大,这个等待时间还必须再拉长。问题出在传输线上,即使现在的cpu进步神速,也只能看到数据在计算机内部处理时的速度加快;连上单片机设备后,一个完整的传输系统中的传输效能就必须看速度最慢的环节-显然这就是传输线本身了,因为他的速率无法无限制的往上提升。所以我把串口通信速度设为1200,这样才可保证数据准确无误的被传送和接收。四、mscomm 控件的常用属性mscomm 控件有很多重要的属性,现在对程序中所用的几个重要的属性进行说明:commport 设置并返回通讯端口号。 settings 以字符

30、串的形式设置并返回波特率、奇偶校验、数据位、停止位。 portopen 设置并返回通讯端口的状态。也可以打开和关闭端口。 input 从接收缓冲区返回和删除字符。 output 向传输缓冲区写一个字符串。下面分别描述: commport属性 设置并返回通讯端口号。语法 object.commportvalue (value 一整型值,说明端口号。) 说明 在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1)。但是如果用 portopen 属性打开一个并不存在的端口时,mscomm 控件会产生错误 68(设备无效)。注意:必

31、须在打开端口之前设置 commport 属性。本程序在端口初始化时设置端口为1即ommport=1,用户也可以点击option按钮在弹出对话框对串口属性进行设置。用户更改设置,点击确定后系统会自动将串口初始值保存。以下是option窗口创建时对下拉框组件的初始化public sub form_load()combo1.additem ("1200") 对串口速率的设置combo1.additem ("1800")combo1.additem ("2400")combo1.additem ("4800")combo1

32、.additem ("7200")combo1.additem ("9600")combo1.itemdata(0) = 1200combo1.itemdata(0) = 1800combo1.itemdata(0) = 2400combo1.itemdata(0) = 4800combo1.itemdata(0) = 7200combo1.itemdata(0) = 9600combo2.additem ("com1") 对串行端口的号的设置combo2.additem ("com2")combo2.itemda

33、ta(0) = 1combo2.itemdata(1) = 2end sub并设置portopen为true: mscomm1.portopen = truerthreshold 属性:在 mscomm 控件设置 commevent 属性为 comevreceive 并产生 oncomm 之前,设置并返回的要接收的字符数。语法:object.rthreshold = value (value 整型表达式,说明在产生 oncomm 事件之前要接收的字符数。 )说明:当接收字符后,若 rthreshold 属性设置为 0(缺省值)则不产生 oncomm 事件。例如,设置 rthreshold 为

34、1,接收缓冲区收到每一个字符都会使 mscomm 控件产生 oncomm 事件。本程序使用mscomm1.hreshold=4,即当串口收到4个字符后触发显示温度的事件 。settings 属性:设置并返回波特率、奇偶校验、数据位、停止位参数。语法::object.settings = value说明:当端口打开时,如果 value 非法,则 mscomm 控件产生错误 380(非法属性值)。value 由四个设置值组成,有如下的格式:“bbbb,p,d,s”bbbb 为波特率,p 为奇偶校验,d 为数据位数,s 为停止位数。value 的缺省值是:“9600,n,8,1”本程序在端口初始化时

35、对此属性进行设置,设置为“1200,n,8,1”:mscomm1.settings = "1200,n,8,1"用户也可以点击option,在弹出的窗口中修改组合框中的端口设置来设定,主程序通过语句:mscomm1.settings = optionform.item + ",n,8,1" 来在初始化是读取设置inputlen 属性:设置并返回 input 属性从接收缓冲区读取的字符数。语法 object.inputlen = valueinputlen 属性语法包括下列部分:value 整型表达式,说明 input 属性从接收缓冲区中读取的字符数。&#

36、160;说明:inputlen 属性的缺省值是 0。设置 inputlen 为 0 时,使用 input 将使 mscomm 控件读取接收缓冲区中全部的内容。若接收缓冲区中 inputlen 字符无效,input 属性返回一个零长度字符串 ("")。在使用 input 前,用户可以选择检查 inbuffercount 属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。4.3.2数据处理与存储模块的实现当串口收到数据时会自动触发数据处理与存储模块,此模块主要是使用windows提供的串口通信控件mscomm来实现的。此模块先将数据

37、保存到一个字符串变量中然后程序判断所收数据属于那一路,并将数据取出。具体实现代码说明:temp = mscomm1.input 从串口取出数据存于字符串变量temp中sel = left$(temp, 1) 取temp的左边第一个字符first = mid(temp, 2, 2) 取temp的从左边第一个字符开始取两个second = right(temp, 1) 取temp的右边第一个字符num1 = asc(first) 返回字符串的ansi码num2 = asc(second)sum = num1 + num2 * 0.1 得到小数temping = str(sum) 将数字变为字符串数

38、据取出并进行转换,将转换后的数据显示在lcd上具体实现代码说明: select case sel case "a" 如果收到的时a路数据 lcdshower1.temperature = temping就将数据显示在第一块lcd上 if temping >= cdbl(optionform.hightemptext.text) then lcdshower1.backcolor = &hff& 使lcd显示背景色变为红色 frmmsg.show textstreama.writeline ("a/" + temping)将数据写入日

39、志保存 end if case "b" lcdshower2.temperature = temping if temping >= cdbl(optionform.hightemptext.text) then lcdshower1.backcolor = &hff& '使lcd显示背景色变为红色 frmmsg.show textstreamb.writeline ("b/" + temping) end if case "c" lcdshower3.temperature = temping if t

40、emping >= cdbl(optionform.hightemptext.text) then lcdshower1.backcolor = &hff& '使lcd显示背景色变为红色 frmmsg.show textstreamc.writeline ("c/" + temping) end if case "d" lcdshower4.temperature = temping if temping >= cdbl(optionform.hightemptext.text) then lcdshower1.bac

41、kcolor = &hff& 使lcd显示背景色变为红色 frmmsg.showtextstreamd.writeline ("d/" + temping) end if end select temp = ""4.3.3系统参数初始化模块的实现在系统参数初始化模块中可以对系统参数进行设置(见图44)。可设置的系统参数包括:高温报警值,低温报警值,波特率,端口号。本模块使用了textbox和combobox两种控件。其中对于波特率和端口号的选择是用了复选框控件。 图44 系统设置模块界面private sub combo1_click()

42、item = combo1.itemdata(combo1.listindex) 取得用户所选相的值end subprivate sub combo2_click()combo2.text = combo2.itemdata(combo2.listindex) end subpublic sub form_load()combo1.additem ("1200") 设置复选框各项的显示值combo1.additem ("1800")combo1.additem ("2400")combo1.additem ("4800&qu

43、ot;)combo1.additem ("7200")combo1.additem ("9600")combo1.itemdata(0) = 1200 定义复选框中选项所对应的值combo1.itemdata(0) = 1800combo1.itemdata(0) = 2400combo1.itemdata(0) = 4800combo1.itemdata(0) = 7200combo1.itemdata(0) = 9600combo2.additem ("com1")combo2.additem ("com2")

44、combo2.itemdata(0) = 1 com1选项所对应的值为整数1combo2.itemdata(1) = 2end sub本模块还要对用户所输入的值进行判断,防止用户因输入无意义或相互矛盾的值而导致系统出现逻辑错误。具体代码如下:hightemp = cdbl(hightemptext.text) 将textbox中的数据转换为double型lowtemp = cdbl(lowtemptext.text)if hightemptext.text = null or lowtemptext.text = null then frmmsg1.show 如果textbox中为空则报错,弹

45、出对话框 elseif hightemp <= lowtemp then frmmsg1.show 如果最高温度低于最低温度则报错,弹出对话框 elseif hightemp >= 99.9 then frmmsg2.show 如果最高温度高于99.9度则报错,弹出对话框 elseif lowtemp <= 0 then frmmsg3.show 如果最低温度低于0度则报错,弹出对话框 else: unload me end if4.3.4数据显示模块的实现数据显示模块是通过编写activex控件来实现的。将温度显示模块作成activex控件是因为考虑到本程序需要同时显示对路

46、温度而且本程序多处用到了数字显示。将其作成可以减少编码的重复劳动为程序以后的扩展和测试提供方便。同时也因为visual basic本身没有提供多线程,所以在处理多路温度显示时会遇到困难。而activex正可以解决此问题。操作系统将activex当作一个独立的exe程序处,所以其运行并不影响主线程。本程序为了使用户清楚的知道系统时间,特别设置了时间显示的activex控件(见图45)。 图4-5时间显示界面 一、activex介绍visual basic的activex控件是建立在visual basic的用户控件对象之上的,当创建一个activex控件时,创建了一个带有扩展名.ctl的控件类v

47、isualbasic使用这种文件来创建实际控件,其扩展名为.ocx。当把这些控件注册到windows之后,将会看到这种控件出现在visual basic的commpinents(组件)对话框中,并很容易被加载到用户的程序中。本程序就在windows的system目录下放了名为cldclock.ocx和tempshower.ocx的两个控件。其中cldclock.ocx负责显示温度数据,tempshower.ocx负责显示时间。两个控件使用了相同的显示机制。下面分别说明两个控件的具体实现方法。二、温度显示控件 本控件有两个属性即端口,temperature和backcolor.temperatu

48、re属性。其中temperature属性将温度值传递给显示函数,显示函数接受到温度数据后。用select case语句判断数字是几,然后调用相应的绘图函数显示此数字。lcd显示数据的原理是:要显示一个数字只需7根线(如图46) 图46 lcd显示原理图要显示温度的标志“c”也只需要画4根线(如图47) 图47 lcd显示c的原理图具体代码说明如下: drawnumber (val(left$(value, 1) 取得数字并调用drawnumber private sub drawnumber(number as integer)select case number case 0 如果数字是0则

49、调用drawsegment函数显示此数字 drawsegment (1) drawsegment (2) drawsegment (3) drawsegment (4) drawsegment (5) drawsegment (6) .end selectend sub private sub drawsegment(segnum as integer) select case segnum case 1 画出0上面的一横 p.line (basepoint.x + 1, basepoint.y)-(basepoint.x + segwidth - 1, basepoint.y) 绘线函数 p

50、.line (basepoint.x + 2, basepoint.y + 1)-(basepoint.x + segwidth - 2, basepoint.y + 1) p.line (basepoint.x + 3, basepoint.y + 2)-(basepoint.x + segwidth -3,basepoint.y + 2). end selectend sub以下为显示背景色函数: property let forecolor(color as long) p.forecolor = colorend property本函数的color参数是通过backcolor.temp

51、erature属性传入的。三、时间显示控件:时间显示控件的原理同温度显示控件基本相同,他只是将时间值传给显示模块:private sub timer1_timer() lcdtest.caption = time 取得系统时间传给显示模块end sub4.3.5图形显示的实现当用户选择要绘图的数据后程序线将数据读入到动态数组中然后调用绘图函数在绘图区中绘图。在主窗口初始化时要首先设定绘图区的相对大小,和背景颜色。绘图时先用graph1.pset函数确定原点坐标,用graph1.line函数绘线。具体实现如下:首先读入数据,使用标准打开对话框commondialog1.dialogtitle =

52、 "请输入绘图数据源" 设置对话框名commondialog1.filter = "source file (*.txt)|*.txt" 文件类型commondialog1.showopenset filesystemobjectr = createobject("scripting.filesystemobject")settextstreamr=filesystemobjectr.opentextfile(commondialog1.filename) 将用户所选的数据源读入dosourcetext = sourcetext +

53、textstreamr.readlineon error goto fileerrorloop 将读入的数据连起来fileerror:count = len(sourcetext) 取得数据长度buf = sourcetextdo until i > (count - 1) * 2 if chr(buf(i) = "/" and i <> (count - 1) * 2 then i = i + 2 do until chr(buf(i) = "a" or chr(buf(i) = "b" or chr(buf(i)

54、 = "c" or chr(buf(i) = "d" or i = count * 2 if chr(buf(i) = "." then number = number + "." else: number = number + chr(buf(i) end if i = i + 2 if i > (count - 1) * 2 then exit do loop 将数据重新组合 graphtemp = number if k = 80 then graph1.cls 清空绘图区 k = 0 end if if graphtemp = "&q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论