电子秤软件设计毕业设计.docx
《电子秤软件设计毕业设计.docx》由会员分享,可在线阅读,更多相关《电子秤软件设计毕业设计.docx(49页珍藏版)》请在冰豆网上搜索。
电子秤软件设计毕业设计
1引言
1.1课题研究背景
现代社会的发展,对称重技术提出了更高的要求。
目前,台式电子秤在商业贸易中的使用已相当普遍,但存在较大的局限性:
体积大、成本高、需要工频交流电源供应、携带不便、应用场所受到制约。
现有的便携秤为杆秤或以弹簧压缩、拉伸变形来实现计量的弹簧秤,居民用户使用的是国家已经明令淘汰的杆秤。
多年来,人们一直期待测量准确、携带方便、价格低廉的便携式电子秤投放市场[1]。
质量是测量领域中的一个重要参数,称重技术自古以来就被人们所重视。
公元前,人们为了对货物交换量进行估计,起初采用木材或陶土制作的容器对交换货物进行计量。
以后,又采用简单的秤来测定质量。
据考证,世界上最古老的计量器具出土于中东和埃及,最古老的衡器和砝码出自于埃及。
秤是最普遍、最普及的计量设备,电子秤取代机械秤是科学技术发展的必然规律。
低成本、高智能化的电子秤无疑具有及其广阔的市场前景[2]。
1.2称重技术和衡器的发展
衡器是通过作用于被测量物体的重力来确定该物体质量的计量器具。
在整个衡器的发展过程中,先后主要出现了六种类型的衡器:
架盘天平、不等臂平台秤、吊车秤、倾斜象限杆秤、弹簧秤和自动秤。
其中,不等臂平台秤(“十进制”)是当今动态轨道衡的鼻祖,至今它仍是最通用的一种秤[3]。
第一次世界大战后,由于金融贸易和工业发展的需要,急需能进行快速称量的衡器。
机械式衡器在此期间得到很大的发展。
当时以倾斜杠杆案称占绝大多数,读数装置除扇形度盘外,还有滚筒形度盘,从而扩大了读数范围并可附加价格标尺。
以后又出现了用于工业的带双摆锤测量机构的圆形度盘指针式秤和成本低廉、带投影标尺的倾斜式杠杆秤[4]。
第二次世界大战后出现了电子衡器,它主要由称重显示控制器、称重传感器和电器控制等部分组成,其发展过程与其它事物一样,经历了由简单到复杂、由粗糙到精密、由机械到机电结合再到全电子化、由单一功能到多功能的过程[5]。
近30年以来,工艺流程中的现场称量、配料定量称重、以及产品质量的监测等工作,都离不开能输出电信号的电子衡器。
这是因为电子衡器不仅能给出质量或重量值的信号,而且也能作为总系统中的一个单元承担着控制和检验功能,从而推进工业生产和贸易交往的自动化和合理化。
电子衡器具有反应速度快、测量范围广、应用面广、结构简单、使用操作方便、信号远传、便于计算机控制等特点,计量精度高,而且实现了多功能、多用途。
电子衡器已被广泛应用于各个行业,近年来愈来愈多地参与到数据处理和过程控制之中,使现代称重技术和数据系统成为工艺技术、储运技术、预包装技术、收货业务及商业销售领域中不可缺少的组成部分[6]。
1.3我国电子秤的发展现状
电子秤是载于秤的台座、盘、钩上的物品的重量由传感器蠕变反应平衡,而由仪器数字显示的电子衡器。
电子秤集机、电、仪于一体,具有多功能、高精度、快速和动态计量、稳定可靠等特征,代表了衡器产品发展的方向。
电子秤属于日用衡器,为劳动密集型产品[7]。
电子秤产品总的发展趋势是小型化、模块化、集成化、智能化;其技术性能趋向是速率高、准确度高、稳定性高、可靠性高;其功能趋向是称重计量的控制信息和非控制信息并重的“智能化”功能;其应用性能趋向于综合性和组合性[8]。
目前我国产品标准中列入的十大类衡器(案秤、台秤、地上衡、地中衡、吊称、皮带秤、料斗秤、检验秤、轨道衡和特种秤)均已实现了电子化。
据近期统计,工业用衡器(按销售量统计)中的电子产品已占三分之二左右,技术水平比较成熟的静态衡器的计量范围可以从1µg到800t,部分非自动衡器(如电子计价秤、电子台秤、电子地上衡、电子皮带秤、电子吊秤和电子轨道衡等)已达到国际九十年代初期水平,有的产品达到了九十年代中期水平;由于近十年来电子技术的迅速发展,商用衡器的加工能力迅速增长,产品成本大幅度降低,市场稳步发展。
现在,电子计量称重技术已越来越多地应用于工业生产过程控制中,电子衡器的功能及应用拓展到更广泛领域。
随着我国加入WTO组织,经济市场的开放度加大,一批具有国际先进水平的衡器产品和技术(如定量包装秤、自动重量检测秤、标签计价秤、电脑组合秤、耐压式计量给煤机等,以及应变计、称重传感器、称重显示器生产技术)进入我国,这对电子秤的进一步普及和提高必将产生积极的、巨大的影响[9]。
1.4电子秤软件设计实现的意义
电子秤软件的设计,它主要由电源、称重传感器、单片机、LCD显示器等部分构成。
新型便携式电子秤体积小、计量准确、携带方便、操作简单、称量速度快,能够满足商业贸易和居民家庭的使用需求,具有广阔的应用前景[10]。
电子称重技术的发展规律就是不断的加强基础研究并扩大应用,扩展新技术领域,向相邻学科和行业渗透,综合各种技术方法解决称重计量、自动控制、信息处理等问题。
对某些商用电子计价秤而言,只具备称重、计价、显示、打印功能还远远不够,现代商业系统还要求它能提供各种销售信息,把称重与管理自动化紧密结合,使称重、计价、进库、销售管理一体化,实现管理自动化。
这就要求电子计价秤能与电子计算机联网,把称重系统与计算机系统组成一个完整的综合控制系统,为现代商业贸易物流的高效率发展提供强有力的支持[11]。
2软件设计的原理和思路
2.1软件设计原理
电子秤设计过程遵循了简化硬件电路、以软件代替硬件的设计原则,力求最大限度地减小仪器的体积和重量,降低仪器成本[12]。
随着计算机技术的飞速发展及其广泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。
微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。
而单片机具有价格低,功能强,抗干扰能力好,温限宽和面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。
在需要对采集的数据进行分析处理或在远程需要对控制对象的控制过程进行统计或有条件控制时,采用数据库访问技术能有效地解决这类问题[13]。
软件设计的总体思想是,根据预先编制的程序对测量进行控制,软件设计采用模块化结构。
根据仪器的设定功能,将软件划分为若干个功能相对独立的模块,主要有仪器主程序、系统初始化、中断控制、重量读取、LCD显示、单片机与PC机串口通信模块。
2.2软件设计思路
电子秤软件设计包括两大部分,上位机(PC机)和下位机(单片机)。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:
地线、发送、接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但是不是必须的。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通行的端口,这些参数必须匹配[14]。
(1)波特率:
这是一个衡量通信速度的参数。
它表示每秒钟传送的bit的个数。
例如300波特表示每秒钟发送300个bit。
当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。
这意味着串口通信在数据线上的采样率为4800Hz。
通常电话线的波特率为14400,28800和36600。
波特率可以远远大于这些值,但是波特率和距离成反比。
高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
(2)数据位:
这是衡量通信中实际数据位的参数。
当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。
如何设置取决于你想传送的信息。
比如,标准的ASCII码是0~127(7位)。
扩展的ASCII码是0~255(8位)。
如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。
每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。
由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
(3)停止位:
用于表示单个包的最后一位。
典型的值为1,1.5和2位。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。
因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
(4)奇偶校验位:
在串口通信中一种简单的检错方式。
有四种检错方式:
偶、奇、高和低。
当然没有校验位也是可以的。
对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。
例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。
如果是奇校验,校验位位1,这样就有3个逻辑高位。
高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。
这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步[15]。
2.2.1软件设计上位机(PC机)部分
上位机程序的编写是通过VisualBasic6.0软件实现的。
VisualBasic6.0以其强大的功能、使用简单、能在短时间内开发出高效的通信程序而成为Windows系统开发的主要编程语言。
首先表现在VB可直接使用户自定义控件VBX或OCX文件;其次表现在VB可通过调用动态链接库(DLL,dynamiclinklibrary)来加快应用程序关键部分的执行速度。
利用VB提供的这些功能可方便地完成程序设计,本设计将利用VB6.0通信控件Mscomm.vbx及其编程方法,编写计算机与单片机进行数据通信的基本程序。
VB提供的通信控件Mscomm32.ocx,使用前只需从Project菜单下的Components中选择MicrosoftCommControl6.0把Mscomm32.ocx控件调入工具框中即可使用。
利用该控件可对串行通信的数据发送和接收进行设置,还可对串口状态及串行通信的信息格式和协议进行设置。
在通信过程中可以通过触发OnComm事件来追踪、处理通信和错误事件的发生。
由于每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件[16]。
通信控件Mscomm32.ocx提供了两种处理通信的方法:
(1)事件驱动方式
它是一种功能很强的处理串行通信问题的方法,在实际工作中,往往要处理许多通信中的相关事件,可通过对OnComm属性值进行编程来处理,它也包括检测和处理通信错误等方面的问题,CommEvent值返回最近的通信事件或错误的数字代码[17]。
(2)查询方式
在每个重要的程序功能之后检查CommEvent属性值来检测事件和通信错误。
这种方式常用于应用程序较简单和相对独立的应用程序设计中。
通信控件的基本属性
为支持串行通信的实现,VB6.0中Mscomm控件提供了众多的串行通信属性,主要有:
CommPort:
设置和返回PC机串行端口号;
Settings:
初始化传输波特率、奇偶校验位、数据位宽度和停止位宽度;
Input:
从输入缓冲区中读取数据;
InputLen:
输入缓冲区数据长度;
InputMode:
输入模式,ASCII字符或二进制数据;
Output:
将数据写入输出缓冲区;
InBufferSize:
设置并返回接收缓冲区的字节数;
OutBufferSize:
设置并返回输出缓冲区的字节数;
PortOpen:
布尔型,用于打开或关闭串行通信端口;
OnComm:
在发生通讯事件或错误时,将触发OnComm事件,CommEvent属性值将被改变;
Rthreshold:
引发接收事件的字节数,为0时不引发接收事件;
Sthreshold:
引发发送事件的字节数,为0时不引发发送事件。
以下程序分别是获取重量、显示重量和绘制曲线的重要程序。
'获取重量测量值并显示
'每发送一次指令,触发下面事件,返回数据串
PrivateSubMSComm1_OnComm()
DimInbyte()AsByte
DimbufferAsString
Dimdatatemp2a,datatemp2bAsString
Dimdatatemp2AsString
Ifnum>199ThenCallrenew
'读取仪表返回数据串
SelectCaseMSComm1.CommEvent
CasecomEvReceive
Inbyte=MSComm1.Input
Fori=LBound(Inbyte)ToUBound(Inbyte)
buffer=buffer+Hex(Inbyte(i))+Chr(32)
Nexti
CasecomEvSend
EndSelect
'显示测量重量值
Ifdatatemp(num)<>0Then
Grid.Col=1:
Grid.Row=num+1
Grid.Text=Format$(datatemp(num),"000")
TempText=Format$(datatemp(num),"000")'10进制显示,保留一位小数
'Text2.Text=datatemp2'16进制显示
num=num+1
Calldraw'调用绘曲线过程
EndIf
EndSub
'绘制重量实时变化曲线
PrivateSubdraw()
Picture1.Cls
Picture1.DrawWidth=1
Picture1.BackColor=QBColor(15)
Picture1.Scale(-10,100)-(200,0)
Fori=1Tonum-1
X1=(i-1):
Y1=datatemp(i-1)
X2=i:
Y2=datatemp(i)
Picture1.Line(X1,Y1)-(X2,Y2),QBColor(12)
Nexti
EndSub
本设计中的上位机(PC机)通信界面,如图2.1所示。
图2.1上位机(PC机)通信界面
2.2.2软件设计下位机(单片机)部分
下位机程序部分是用C语言编写的。
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。
编写本部分程序是利用Keil软件进行的,图2.2就是KeilC51集成开发环境。
图2.2KeilC51集成开发环境
C语言具有如下五大特点:
(1)C是中级语言。
它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
(2)C是结构式语言。
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
(3)C语言功能齐全。
具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。
另外C语言也具有强大的图形功能,支持多种显示器和驱动器。
而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。
(4)C语言适用范围大。
适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。
(5)C语言文件由数据序列组成,可以构成二进制文件或文本文件。
结构化程序就是用高级语言表示的结构化算法。
结构化程序设计的思路是,把复杂问题分解成一些容易理解和处理的小问题,而这些小问题在结构安排上、组合层次上都有自己的准确定位,每一个小问题的解决都为这一复杂问题的解决服务。
如何合理地在算法上这些小问题加以考虑和在结构上作正确的安排是解决复杂问题必须面对的关键问题[18]。
解决复杂问题首先应该进行模块的划分,把一个较大的问题划分为若干个功能模块,每一个功能模块相对独立;每一个模块又可继续划分为更小的模块。
经过模块划分后,会使得程序具有一种层次结构。
现阶段,模块化程序设计主要有以下两种设计方法。
1、自顶向下
自顶向下程序设计是先设计第一层(即顶层),然后步步深入,逐层细分,逐步求精,直到整个问题可用程序设计语言明确地描述出来为止。
(1)步骤:
首先对问题进行仔细分析,确定其输入、输出数据,写出程序运行的主要过程和任务;然后从大的功能方面把一个问题的解决过程分成几个问题,每个子问题形成一个模块。
(2)特点:
先整体后局部,先抽象后具体。
2、自底向上
自底向上程序设计是先设计底层,最后设计顶层。
(1)优点:
由表及里、由浅入深地解决问题。
(2)不足:
在逐步细化的过程中,可能发现原来的分解细化不够完善。
程序设计的步骤可简单概括如下。
(1)分析问题。
对于待解决的问题,通过分析,明确题目的要求,列出所有已知量、未知量,找出题目的求解范围、解的精度等。
(2)建立数学模型。
对实际问题进行分析之后,找出它的内在规律,就可以建立数学模型。
只有建立了模型的问题,才有可能利用计算机来解决。
(3)确定算法。
建立数学模型后,还不能着手编程序,必须根据数据结构,设计问题的算法。
一般设计算法要注意:
算法的逻辑结构尽可能简单;除了要满足算法的基本要求外,还应注意以下问题。
算法所要求的存储量应尽可能地少。
避免不必要的循环,减少算法的执行时间。
在满足题目条件要求下,使所需的计算量最小。
(4)编写程序。
把整个程序看作一个整体,先全局后局部,自顶向下,一层一层分解处理,如果某些问题的算法相同而仅参数不同,可以用模块化的方式来实现。
(5)调试运行。
(6)分析结果。
(7)写出程序的文档。
文档主要是对程序中的变量、函数或过程作必要的说明,解释编程思路,画出程序流程图,讨论运行结果等。
面对一项复杂的任务,通常采取模块化的解决方法。
首先,分解该复杂任务成几个大的功能模块,根据需要还可以继续细分,直到分解成一个个功能独立的模块为止。
分解的结果可以描述为一棵倒立的大树,其中大任务类似于树根,中间层的小任务类似于树枝,最小的小任务类似于树叶。
其次,对最小的模块单独编写程序代码并调试。
最后,把这些最小的模块按原来分解的逆序组合成最初的大任务。
模块化解决问题的实际方法可简单描述为拆分——编码——组装。
这样做可以使复杂问题简单化,同时可以达到程序结构清晰、层次分明、程序便于编写、便于维护的目的。
任务中模块的功能可以用高级语言的子程序或函数来实现[19]。
函数是构成C语言程序的基本功能模块,它完成一项相对独立的任务。
一个C语言程序是若干函数构成的,在构成C程序的诸多函数中有且只有一个主函数。
函数是程序的最小组成单位。
所有函数之间的关系式平行的,没有从属的概念。
函数的平行关系使得函数的编写相对独立,便于模块化程序设计的实现。
C程序的执行总是从主函数开始,又从主函数结束,其他函数只有通过调用关系发生作用。
在主函数执行的过程中直接或间接调用其他函数,并将程序的执行控制权交给被调函数,调用结束后,继续执行主函数直到结束,才能结束整个程序的执行过程。
C语言规定只允许主函数调用其他函数,反之不能。
函数之间可以互相调用,同一函数可以调用多个函数,一个函数也可以被多个函数调用,函数也可以自己调用自己[20]。
随着结构化程序设计方法的发展和广泛的应用,模块化设计方法逐步成为结构化程序设计方法的主流。
模块化设计方法的主要思想是将整个软件系统分解成若干个功能相对独立的模块,这些功能模块可以单独命名、单独设计、单独编程和调试。
下位机(单片机)程序主要包括系统初始化、中断控制、重量读取、LCD显示、单片机与PC机串口通信等若干模块程序。
根据要求实现的功能和设计程序的顺序,做出了如图2.3所示的程序流程图。
RI=1
Receive‘A’
Receive‘B’
RI=0
图2.3程序流程图
3电子秤软件设计所使用的各类软件介绍
电子秤软件设计所使用的软件有Proteus软件、Keil软件、VisualBasic软件开发工具、串口调试助手。
3.1Proteus软件
3.1.1为什么选择Proteus软件
Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型[21]。
Protues软件具有其它EDA工具软件(例:
multisim)的功能。
这些功能是:
(1)原理布图;
(2)PCB自动或人工布线;
(3)SPICE电路仿真。
Protues软件具有革命性的特点:
(1)互动的电路仿真
用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
(2)仿真处理器及其外围电路
可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。
还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。
图3.1就是该软件仿真环境。
配合系统配置的虚拟逻辑分析仪、示波器等,Protues建立了完备的电子设计开发环境。
图3.1Protues软件仿真环境
3.1.2Proteus软件详细介绍
Proteus软件由ISIS和ARES两个软件构成,其中ISIS是一款便捷的电子系统仿真平台软件,并且是一个操作简便且功能强大的原理绘图工具,它整合了SPICE的仿真模型,拥有超过8000个元件的庞大库结构。
ARES是一款高级的布线编辑软件,可将ISIS的仿真原理图生成PCB版图[22]。
Protues提供了丰富的资源:
(1)Protues可提供的仿真元器件资源:
仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。
(2)Protues可提供的仿真仪表资源:
示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。
理论上同一种仪器可以在一个电路中随意的调用。
(3)除了现实存在的仪器外,Protues还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。
这些虚拟仪器仪表具有理想的参数指标,例如极