智能温度测量仪表课程设计报告

时间:2024.3.19

中国石油大学胜利学院

课程设计报告

课    程:       智能测量仪表           

题    目:       智能测量仪表           

学生姓名:           XXXXXX                

专业年级:        2009 自动化              

指导教师:        XXXXXX  XXXX             

信 息 与 计 算 科 学 系

20##年3月25日

智能测量仪表

本次课程设计中智能温度测量仪表所采用的温度传感器为LM35DZ。其输出电压与摄氏温度成线性比例关系,无需外部校准,在0℃~100℃温度范围内精度为0.4℃~±0.75℃。,输出电压与摄氏温度对应,使用极为方便。灵敏度为10.0mV/℃,重复性好,输出阻抗低,电路接口简单和方便,可单电源和正负电源工作。是一种得到广泛使用的温度传感器。

本次课程设计的主要目的在于让学生把所学到的单片机原理、电子线路设计、传感器技术与原理、过程控制、智能仪器仪表、总线技术、面向对象的程序设计等相关专业课程的内容系统的总结,并能有效的使用到项目研发中来,做到学以致用。课程设计的内容主要分为三个部分,即使用所学编程语言(C或者汇编)完成单片机方面的程序编写、使用VB或VC语言完成PC机人机界面设计(也可以用C+API实现)、按照课程设计规范完成课程设计报告。

目录

1. 课程设计任务和要求…………………………………………………………3

1.1  设计任务……………………………………………………………………………3

2.2  设计要求……………………………………………………………………………3

2.系统硬件设计…………………………………………………………3

2.1  STC12C5A60S2单片机A/D转换简介……………………………………………3

2.2  LM35DZ简介………………………………………………………………………7

2.3  硬件原理图设计……………………………………………………………………7

3.系统软件设计…………………………………………………………10

3.1  设计任务…………………………………………………………………………10

3.2  程序代码…………………………………………………………………………10

3.3  系统软件设计调试………………………………………………………………17

4.系统上位机设计…………………………………………………………18

4.1  设计任务…………………………………………………………………………18

4.2  程序代码…………………………………………………………………………18

4.3  系统上位机软件设计调试………………………………………………………21

5.系统调试与改善…………………………………………………………22

5.1  系统调试…………………………………………………………………………22

5.2  系统改善…………………………………………………………………………22

6.系统设计时常见问题举例与解决办法……………………………………24

7.总结……………………………………………………………………25

1.  课程设计任务和要求

1.1课程设计任务

本次课程设计要求设计出智能化温度测量仪表,要求该测量仪表能够将所测得的温度数据和当前电机设备的运行状况远传给上位机。仪表测量范围为0-100℃;测量精度为±1℃;可以进行温度整定,比如,温度≥30℃,启动压缩机外设;温度≤20℃,关闭压缩机外设;要求上位机和下位机都能显示温度值和电机设备的运行状态并且都能独立控制温度数据采集状态和电机设备的运行状态;通讯方式可以采用RS232C或485。上位机要求人机界面在保证简单实用的基础上做的美观。

1.2课程设计要求

(1)利用所学专业课相关知识合理的选择器材,使用Protel99se绘制出硬件原理图。

(2)使用C语言或者汇编语言完成下位机程序驱动,并且要尽量保证系统的稳定性和可靠性以及实用性。

(3)使用VB或VC语言或用C+API( 应用程序接口调用)实现上位机人机界面的设计,要求上位机发送的命令下位机能及时的给予响应,并且上位机能够实时准确的显示下位机所上传数据以及电机设备的运行状态。

(4)按照课程设计规范撰写课程设计报告。

2.  系统硬件设计

2.1 STC12C5A60S2单片机A/D转换简介

STC12C5A60S2单片机集成有8路10位高速模数转换器(ADC),速度可达到250KHz(25万次/秒,可做温度检测、压力检测、电池电压检测、按键扫描、频谱检测等。STC12C5A60S2单片机片内集成8通道10位模数转换器(ADC)。ADC输入通道与P1口复用,上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D 使用的口可继续作为I/O口使用。

2.1.1 模数转换器的结构图

STC12C5A60S2单片机的模数转换器由多路选择开关、比较器、逐次比较寄存器、10位ADC、转换结果寄存器(ADC_RES和ADC_RESL)以及ADC控制寄存器ADC_CONTR构成。如图2-1所示。

 


图2-1 STC12C5A单片机内部A/D转换结构图

2.1.2 模数转换器的参考电压

STC12C5A60S2单片机A/D转换模块的参考电压源是输入工作电压Vcc,所以一般不用外接参考电压源。如三端稳压电路7805的输出电压是5V,但实际电压可能是4.88V到4.96V,如果用户需要的精度比较高,可在应用产品出厂前将实际测出的工作电压值记录在单片机内部的EEPROM里面,以供程序校正使用。

如果Vcc不稳定(例如电池供电的系统中,电池电压常常在5.3V-4.2V之间漂移), 则需要在8路A/D转换的一个通道外接一个稳定的参考电压源,来计算出此时的工作电压Vcc,再计算出其他几路A/D转换通道的电压。例如,可在ADC转换通道的第七通道外接一个 1.25V的基准参考电压源,由此求出此时的工作电压Vcc,再计算出其它几路A/D转换通道的电压。

2.1.3 与ADC相关的寄存器

1、 P1口模拟功能控制寄存器P1ASF(地址为9DH,复位值为00H)

如果要使用相应口的模拟功能,需将P1ASF特殊功能寄存器中的相应位置为‘1’。如,若要使用P1.6的模拟量功能,则需要将P16ASF设置为1。(注意,P1ASF寄存器不能位寻址,可以使用汇编语言指令ORL  P1ASF, #40H,也可以使用C语言语句P1ASF |= 0x40;)

2、 ADC控制寄存器ADC_CONTR(地址为BCH,复位值为00H)

1)ADC_POWER:ADC电源控制位。

0:关闭ADC电源。1:打开ADC电源。

2)SPEED1、SPEED0:ADC转换速度控制位。

3)ADC_FLAG:A/D转换结束标志位。A/D转换完成后,ADC_FLAG = 1,要由软件清0。不管A/D转换完成后由该位申请产生中断,还是由软件查询该标志位判断A/D转换是否结束,当A/D转换完成后,ADC_FLAG = 1,一定要软件清0。

4)ADC_START:A/D转换启动控制位,ADC_START=1,开始转换;ADC_START=0,停止转换。

5)CHS2、CHS1、CHS0:模拟输入通道选择,如表2-1所示。

表2-1 模拟通道选择表

程序中需要注意的事项:

由于是2套时钟,所以,设置ADC_CONTR控制寄存器后,要加4个空操作延时才可以正确读到ADC_CONTR寄存器的值,原因是设置ADC_CONTR控制寄存器的语句执行后,要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR控制寄存器。

3、 A/D转换结果寄存器ADC_RES、ADC_RESL

特殊功能寄存器ADC_RES(地址为BDH,复位值为00H)和ADC_RESL(地址为BEH,复位值为00H)用于保存A/D转换结果。

A/D转换结果存储格式由辅助寄存器AUXR1(地址为A2H,复位值为00H)中的ADRJ控制,ADRJ是AUXR1中的D2位。

(1)当ADRJ=0时,10位A/D转换结果的高8位放在ADC_RES寄存器,低2位放在ADC_RESL寄存器。存储格式如下:

(2)当ADRJ=1时,10位A/D转换结果的最高2位放在ADC_RES寄存器的低2位,低8位放在ADC_RESL寄存器。存储格式如下:

模/数转换结果计算公式如下:

ADRJ = 0时,取10位结果 (ADC_RES[7:0],ADC_RESL[1:0]) = 1024 × Vin / Vcc

ADRJ = 0时,取8位结果 ADC_RES[7:0] = 256 × Vin / Vcc

ADRJ = 1时,取10位结果 (ADC_RES[1:0],ADC_RESL[7:0]) = 1024 × Vin / Vcc

Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。

4、 与A/D转换中断有关的寄存器

中断允许控制寄存器IE中的EADC位(D5位)用于开放ADC中断,EA位(D7位)用于开放CPU中断;中断优先级寄存器IP中的PADC位(D5位)和IPH中的PADCH位(D5位)用于设置A/D中断的优先级。在中断服务程序中,要使用软件将A/D中断标志位ADC_FLAG(也是A/D转换结束标志位)清0。

2.2 LMDZ35简介

TS-LM35温度传感器是由LM35CZ/DZ 集成电路温度传感器外加金属套密封组装而成,其输出电压与摄氏温度成线性比例关系,无需外部校准,在-55~+150℃温度范围内精度为0.4℃~±0.75℃。,输出电压与摄氏温度对应,使用极为方便。灵敏度为10.0mV/℃,重复性好,输出阻抗低,电路接口简单和方便,可单电源和正负电源工作。是一种得到广泛使用的温度传感器。

LM35技术特性:

 ⑴ 温度范围:LM35DZ 0℃~100℃;LM35CZ -40℃~110℃

⑵ 在摄氏温度下直接校准 ⑶ 线性刻度系数: +10.0mV/℃

 ⑷ 精度:0.5℃  (在25℃) ⑸ 工作电压为4~30V ⑹ 功耗:小于60uA

 ⑺ 自热效应小于0.08℃  ⑻ 非线性:±0。25℃ ⑼ 输出阻抗:0.1Ω/1mA

⑽ 输出电压:+6V~-1.0V适合于远程应用  ⑾ 输出电流 10mA:

2.3 硬件原理图设计

该系统硬件原理图可大体分为这几个模块: 串行通信模块、模拟信号处理模块、4*7LED显示模块以及电源模块等。

1、 串行通信模块原理图如下:

本通信过程采用RS232方式进行,由于单片机中的UART和电脑串口RS232的区别仅在于电平的不同,电脑串口采用232电平,而单片机UART则采用TTL电平,如果不进行电平转换,单片机跟电脑串口就不能进行直接通信,RS232是UART的一种就意味着通信协议的格式是一样的,只要电平统一了,两者之间就可以直接通信,此处应用了MAX232这一芯片,MAX232对两者之间通信的数据没有任何作用,仅仅是中介而已,而其只是负责将两者之间的电平进行统一,使两者之间没有通信障碍。另外,MAX232芯片采用单+5V电源供电,仅需几个外接电容即可完成从TTL到RS232电平的转换,共两路。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。

2、 模拟信号处理模块原理图如下:

此处,我们处理采集到的模拟量电压信号是采用了LM324集成运算放大器管脚排列图见图2-2。LM324系列由四个独立的带有差动输入的,高增益,内部频率补偿运算放大器,其中专为从单电源供电的电压范围经营。从分裂电源的操作也有可能和低电源电流消耗是独立的电源电压的幅度。与单电源应用场合的标准运算放大器相比,它们有一些显著优点。该四放大器可以工作在低到3.0伏或者高到32伏的电源下,静态电流为MC1741的静态电流的五分之一。共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性。每一组运算放大器可用图1所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。

图2-2 LM324集成运算放大器管脚排列图

此模拟量处理模块设计的使用起来比较灵活,图中左边的两路放大器都设计成了电压跟随器的形式,这样就减少了输入信号的损失。我们可以将传感器所测得标准电压信号或者电流信号通过P9或者P10接入(也可以使用杜邦线通过J7或者J8接入信号)LM324的其中一路放大器,然后再经过第二级放大使得处理后的电压信号输出到J9。做此课程设计时我们采用的是LM35DZ温度测量传感器,我们把它的输出信号连接到J8的2脚,由此出输入我们的采集到的信号。我们将上面的一路放大器的输入调至零,然后再经过后一级放大器,将两者之差放大5倍。

3、 4*7LED显示模块原理图如下:

由图中可以看出,我们将数码管的断码端接到了单片机的P2口,控制端接到了P0口的低四位。图中Q2、Q3、Q4、Q5为开关型三极管此处用作数码管的选通控制。

3.  系统软件设计

3.1 设计任务

使用C或者汇编语言编写程序代码。程序代码所实现的功能有:在四位数码管上能够显示温度,所显示的温度数据与使用其他精度较高的温度计测量结果不能差的太多,并且可以把采集数据上传给上位机;温度采集与否和电动机运行状态要能够既可以通过独立按键控制也可以使用上位机发送的命令进行控制;提高系统的稳定性,可靠性,以及上传数据和接收命令以及温度采集数据的准确性。

3.2 程序代码

根据下位机软件设计任务的要求,我们可以把程序代码分为一下几个模块:初始化模块、按键扫描模块、A/D转换数据获取模块、串行口通信模块、运算处理模块、延时模块等。其中初始化模块包括程序当中使用的变量的初始化和串行口通信方式初始化还有A/D转换模块的初始化,按键扫描模块是用于按键控制系统时用来响应按键被按下时的,A/D转换数据获取模块部分可以用查询方式,也可以使用中断的方式实现,串行口通信模块用来接收上位机发送来的命令,以控制和监测系统状态,运算处理模块包括多字节之间的加减乘除运算,延时模块用于程序中一小段时间的等待。

汇编语言编写的程序代码如下:


$ INCLUDE (STC12C5A.INC)

;定义变量千百十个

QIAN EQU  60H

BAI  EQU  61H

SHI EQU 62H

GEWEI EQU 63H

TEMPMH EQU 64H

TEMPML EQU 65H

COUNT EQU 66H

TEMPMMH EQU 67H

TEMPMML EQU 68H

ORG   0000H

LJMP  MAIN

ORG 0023H

LJMP TONGXIN

ORG   002BH

LJMP  ADC_ISR

ORG   0080H

MAIN:

     LCALL MAIN_INIT

     LCALL UART1_INIT

     LCALL ADC_INIT

AAA:

     LCALL SCANFKEYV

     LCALL DISPLAY

     SJMP AAA

MAIN_INIT:

    MOV SP,#70H

     MOV QIAN,#00H

     MOV BAI,#00H

     MOV SHI,#00H

     MOV GEWEI,#00H

     MOV COUNT,#00H

     MOV KEYVALUE,#00H

     MOV TEMPMH,#00H

     MOV TEMPML,#00H

     MOV TEMPMMH,#00H

     MOV TEMPMML,#00H

     RET

UART1_INIT:

    MOV AUXR,#11H

    MOV BRT,#0FDH

     MOV SCON,#50H

    MOV PCON,#00H

    SETB EA

    SETB ES

    RET

SCANFKEYV:

    MOV P1,#0FFH

    MOV A,P1

    CJNE A,#0FDH,KEYS2

    LCALL DELAY10MS

    MOV A,P1

    CJNE A,#0FDH,KEYS2

    SETB EADC

    SJMP NOKEY

KEYS2:

    CJNE A,#0EFH,KEYS3

    LCALL DELAY10MS

    MOV A,P1

    CJNE A,#0EFH,KEYS3

    CLR EADC

    SJMP NOKEY

KEYS3:

    CJNE A,#0DFH,KEYS4

    LCALL DELAY10MS

    MOV A,P1

    CJNE A,#0DFH,KEYS4

    CLR P0.4

    CLR EA

    MOV R7,#04H

A21:

    MOV A,#01H

    MOV SBUF,A

    JNB TI,$

    CLR TI

    DJNZ R7,A21

    SETB EA

    SJMP NOKEY

KEYS4:

    CJNE A,#0BFH,NOKEY

    LCALL DELAY10MS

    MOV A,P1

    CJNE A,#0BFH,NOKEY

    SETB P0.4

    CLR EA

   MOV R7,#04H

A22:

    MOV A,#02H

    MOV SBUF,A

    JNB TI,$

    CLR TI

    DJNZ R7,A22

    SETB EA

    SJMP NOKEY

NOKEY:

    RET

ADC_INIT:

    MOV P1ASF,#01H

    MOV ADC_RES,#00H

    MOV ADC_RESL,#00H

    MOV AUXR1,#04H

    MOV ADC_CONTR,#088H

    LCALL DELAY10MS

    ;SETB EADC

    RET

TONGXIN:

    CLR RI

    MOV A,SBUF

    CJNE A,#46H,COMPEND

    SETB EADC

COMPEND:

    CJNE A,#47H,STAR1

    CLR EADC

STAR1:

    CJNE A,#51H,STAR2

     CLR P0.4

STAR2:

    CJNE A,#03H,END1

    CLR P0.5

END1:

    CJNE A,#54H,END2

    SETB P0.4

END2:

    CJNE A,#04,OUTTONGXIN

    SETB P0.5

OUTTONGXIN:

    RETI

ADC_ISR:

   PUSH PSW

    PUSH ACC

    INC COUNT 

    ANL ADC_CONTR,#0EFH 

    MOV TEMPMH,ADC_RES

    MOV TEMPML,ADC_RESL

    CLR C

    MOV A,TEMPMML

    ADD A,TEMPML

    MOV TEMPMML,A

    MOV A,TEMPMMH

    ADDC A,TEMPMH

    MOV TEMPMMH,A

    MOV A,COUNT

    CJNE A,#20H,OUT0

    MOV COUNT,#00H

    MOV R6,TEMPMMH

    MOV R7,TEMPMML

    MOV R4,#00H

    MOV R5,#20H

    LCALL DBDIV

    MOV TEMPMH,5FH

    MOV TEMPML,5CH

    MOV TEMPMMH,#00H

    MOV TEMPMML,#00H

    LCALL CONVERT

    MOV R7,#4

    MOV R0,#60H

SENDTEMP:

    MOV A,@R0

    MOV SBUF,A

    JNB TI,$

    CLR TI

    INC R0

    DJNZ R7,SENDTEMP

    MOV R4,#240

A12:

    DJNZ R4,A11

    SJMP OUT0

A11:

    LCALL SCANFKEYV

    LCALL DISPLAY

    SJMP A12

OUT0:

    ORL ADC_CONTR,#08H

    POP ACC

    POP PSW

    RETI  

CONVERT:

    MOV R2,TEMPMH

    MOV R3,TEMPML

    MOV R6,#03H

    MOV R7,#0E8H

    LCALL DBMUL

    MOV R3,56H

    MOV R4,57H

    MOV R5,58H

    MOV R2,#04H

    MOV R1,#00H

    LCALL TDSDIV

    MOV R6,5BH

    MOV R7,5AH

    MOV R4,#03H

    MOV R5,#0E8H

    LCALL DBDIV

    MOV QIAN,5CH

    MOV R6,5DH

    MOV R7,5EH

    MOV R4,#00H

    MOV R5,#64H

    LCALL DBDIV

    MOV BAI,5CH

    MOV R6,5DH

    MOV R7,5EH

    MOV R4,#00H

    MOV R5,#0AH

    LCALL DBDIV

    MOV SHI,5CH

    MOV GEWEI,5EH

OUT:   

      RET

DBMUL:

    MOV A,R3

    MOV B,R7

    MUL AB

    XCH A,R7

    MOV R5,B

    MOV B,R2

    MUL AB

    ADD A,R5

    MOV R4,A

    CLR A

    ADDC A,B

    MOV R5,A

    MOV A,R6

    MOV B,R3

    MUL AB

    ADD A,R4

    XCH A,R6

    XCH A,B

    ADDC A,R5

    MOV R5,A

    MOV F0,C

    MOV A,R2

    MUL AB

    ADD A,R5

    MOV R5,A

    CLR A

    MOV ACC.0,C

    MOV C,F0

    ADDC A,B

    MOV R4,A

    MOV 56H,R7

    MOV 57H,R6

    MOV 58H,R5

    MOV 59H,R4

    RET  

TDSDIV: 

    CLR C  

    MOV 30H,#0

    MOV 31H,#0

    MOV 32H,#0

TDSDIV_LOOP:

    CLR C

    MOV A,R3

    SUBB A,R1

    MOV R3,A

    MOV A,R4

    SUBB A,R2

    MOV R4,A

    MOV A,R5

    SUBB A,#0

    MOV R5,A

    JC TDSDIV_END

_INC_SHANG:

    CLR C

    MOV A,30H

    ADDC A,#1

    MOV 30H,A

    MOV A,31H

    ADDC A,#0

    MOV 31H,A

    MOV A,32H

    ADDC A,#0

    MOV 32H,A

    LJMP TDSDIV_LOOP

TDSDIV_END:

    CLR C

    MOV A,R1

    ADDC A,R3

    MOV A,R2

    ADDC A,R4

    MOV R3,30H

    MOV R4,31H

    MOV 5AH,R3

    MOV 5BH,R4

    RET 

DBDIV:

    CLR C

    CLR A

    MOV R2,A

    MOV R3,A

    MOV B,#10H

LOOP: 

    MOV A,R7

    RLC A

    MOV R7,A

    MOV A,R6

    RLC A

    MOV R6,A

    MOV A,R3

    RLC A

    MOV R3,A

    MOV A,R2

    RLC A

    MOV R2,A

    CLR C 

    MOV A,R3

    SUBB A,R5

    PUSH ACC

    MOV A,R2

    SUBB A,R4

    JBC CY,LOOP0

    MOV R2,A

    POP ACC

    MOV R3,A

    SETB C

    SJMP LOOP1

LOOP0:

    POP ACC

LOOP1:

    DJNZ B,LOOP

    MOV A,R7

    RLC A

    MOV R7,A

    MOV A,R6

    RLC A

    MOV R6,A

    MOV A,R2

    MOV R4,A

    MOV A,R3

    MOV R5,A

    MOV 5CH,R7

    MOV 5DH,R4

    MOV 5EH,R5

     MOV 5FH,R6

    RET

DISPLAY:

    MOV DPTR, #TABLE

    MOV A,GEWEI

    MOVC A,@A+DPTR

      MOV P2,A

      CLR P0.0

      LCALL DELAY10MS

      SETB P0.0

      MOV A,SHI

      MOVC A,@A+DPTR

      ORL A,#80H

      MOV P2,A

      CLR P0.1

      LCALL DELAY10MS

      SETB P0.1

      MOV A,BAI

      MOVC A,@A+DPTR

      MOV P2,A

      CLR P0.2

      LCALL DELAY10MS

      SETB P0.2   

      MOV A,QIAN

      MOVC A,@A+DPTR

      MOV P2,A

      CLR P0.3

      LCALL DELAY10MS

      SETB P0.3

      RET 

DELAY10MS:

      MOV R6,#10

D1:

      MOV R7,#248

      DJNZ R7,$

      DJNZ R6,D1

      RET

DELAY100MS:

      MOV R6,#200

D2:

      MOV R7,#248

      DJNZ R7,$

      DJNZ R6,D1

      RET

TABLE:

DB 3FH,06H,5BH,4FH,66H,6DH,

      ;   0   1   2   3   4   5 

      DB 7DH,07H 7FH,6FH,00H,40H,

      ;    6   7  8   9   +   -  

      END


3.3 系统软件设计调试

程序代码编写完成以后再开发环境中编译看是否通过,如检查到有错误编译系统就会报错,然后再根据提示进行修改,至没有错误时,再重新编译文件并生成.hex文件。将此文件烧录到STC12C5A60S2单片机中,连接好硬件电路,给系统上电。观察四位共阴极数码管上面是否显示出我们想要显示的温度数据,如不能再修改程序代码,重新编译,重新烧录程序,观察结果……此过程重复进行,直到所采集温度数据能在数码管上面稳定显示并且准确度较高。此模块疏通后再加入串行通信部分代码,首先用串口助手测试数据的收发,看单片机与上位机之间能否正常收发数据,如不能修改代码,再编译、烧录、观察,直到数据收发正常为止。最后将按键扫描部分加入,调试方法同上,直到下位机系统能正确的按照我们的意愿对某个按键进行响应为止。此三个模块都疏通之后,下位机的软件设计工作也就基本完成,接下来要做的就是简化、优化程序代码。

4.  系统上位机设计

4.1 设计任务

系统上位机设计可以使用VC或者VB语言编写上位机程序,也可以使用C+API(应用程序接口调用)实现。我们使用VB语言来完成系统上位机设计,可以将其分为窗体设计和程序设计。其中窗体设计出来也就是我们可以看到的上位机界面,上面应该能够实现最基本的功能包括:显示出下位机测量出来的温度值和能够发送命令给下位机。程序程序设计能够实现的功能:对下位机上传来的数据正确的分析并实时的在窗体上面显示。

4.2 程序代码

根据上位机软件设计任务的要求,我们将其过程分为窗体设计和代码编写。

1、 根据设计要求我们可以在窗体上添加三个Text控件用来显示温度值和设定温度上下限值。添加六个Lable控件来作为提示信息显示比如“当前温度值(/℃)”、“温度上(下)限值(/℃)”、“上(下)限报警提示”、“电动机运行状态监控(红色停止,绿色运转)”。添加七个CommandButton控件作为控制按钮,其名称分别为“启动测量”、“停止测量”、“启动1号电机”、“停止1号电机”、“启动2号电机”、“停止2号电机”、“结束系统”。再添加四个Shape控件,分别作为温度上下限报警提示和两个电动机的运行状态仿真。再在窗体的顶端居中位置添加一个Picture控件,在其里面放一个Lable控件其Caption属性为课程设计名称。然后再添加最为关键的一个控件,那就是MSComm控件。最后再添加两个Timer控件,一个用来通过其Timer事件来定时的读取下位机上传来的温度数据并作处理,另一个则是通过其Timer事件来是Picture控件里面的Lable控件移动(达到程序运行时课程设计题目在窗体顶端从右往左移动的效果)。最终设计窗体效果如图4-1。

图4-1 系统上位机窗体设计效果图

2、 代码编写

根据系统上位机软件设计要求结合窗体设计现初步编写程序代码如下:


'Option Explicit '要求变量声明

Dim label4_speed

Private Sub Command1_Click()

Dim TT(1 To 1) As Byte

TT(1) = 0

MSComm1.Output = TT

End Sub

Private Sub Command2_Click()

Dim TT(1 To 1) As Byte

TT(1) = 9

MSComm1.Output = TT

End Sub

Private Sub Command3_Click()

MSComm1.PortOpen = False

End

End Sub

Private Sub Command4_Click()

Dim TT(1 To 1) As Byte

TT(1) = 1

MSComm1.Output = TT

Shape4.FillColor = vbGreen

End Sub

Private Sub Command5_Click()

Dim TT(1 To 1) As Byte

TT(1) = 2

MSComm1.Output = TT

Shape4.FillColor = vbRed

End Sub

Private Sub Command6_Click()

Dim TT(1 To 1) As Byte

TT(1) = 3

MSComm1.Output = TT

End Sub

Private Sub Command7_Click()

Dim TT(1 To 1) As Byte

TT(1) = 4

MSComm1.Output = TT

End Sub

Private Sub Form_Load()

Form1.Show

MSComm1.CommPort = 3

MSComm1.Settings = "9600,n,8,1"

MSComm1.InputMode = comInputModeBinary

MSComm1.InputLen = 4

MSComm1.PortOpen = True

Text1.Text = ""

Text2.Text = ""

Text3.Text = ""

Text2.SetFocus

Shape1.FillColor = vbWhite

Shape2.FillColor = vbWhite

Shape3.FillColor = vbRed

Shape4.FillColor = vbRed

label4_speed = 50

Label4.FontSize = 20

Label4.Caption = "中国石油大学胜利学院 20##级 信息与计算科学系 自动化专业综合设计"

Label4.Left = 0

End Sub

Private Sub Timer1_Timer()

Dim value%

If MSComm1.InBufferCount = 0 Then

Text1.Text = ""

Exit Sub

End If

Dim RR() As Byte

Dim k%, buf$

buf = ""

RR = MSComm1.Input

k = Len(MSComm1.Input)

For k = LBound(RR) To UBound(RR)

If k = 0 Then

If Str(RR(k)) = 10 Then

buf1 = "+"

ElseIf Str(RR(k)) = 11 Then

buf1 = "-"

Else: buf1 = Str(RR(k))

End If

ElseIf k = 3 Then

buf1 = "." + Str(RR(k))

Else: buf1 = Str(RR(k))

End If

buf = buf + buf1

Next

MSComm1.InBufferCount = 0

If Val(buf) = 111.1 Then

Shape4.FillColor = vbGreen

Exit Sub

ElseIf Val(buf) = 222.2 Then

Shape4.FillColor = vbRed

Exit Sub

End If

If Val(buf) < Val(Text3.Text) Then

Shape2.FillColor = vbRed

Shape1.FillColor = vbWhite

Text1.Text = Str(Val(buf)) & "℃"

ElseIf Val(buf) > Val(Text2.Text) Then

Shape2.FillColor = vbWhite

Shape1.FillColor = vbRed

Text1.Text = Str(Val(buf)) & "℃"

Else

Shape1.FillColor = vbWhite

Shape2.FillColor = vbWhite

Text1.Text = Str(Val(buf)) & "℃"

End If

End Sub

Private Sub Timer2_Timer()

If Label4.Left > -14280 Then

Label4.Left = Label4.Left - 20

Else

Label4.Left = 8115

End If

End Sub



4.3 系统上位机软件设计调试

系统上位机软件设计调试只是检查程序运行时有没有语法错误和窗体上面的控件能否按照要求实现其功能或者显示其效果。调试方法是:按照以上窗体设计和代码设计,程序单步运行,直到整个程序都仿真运行完成之后,看窗体的反应是否和代码的控制相对应,二者结合所实现的人机操作界面能否达到要求。如果不能则修改其中代码或者修改窗体的控件的相关参数,直到能使系统稳定运行为止。然后再将上位机与下位机用通信线连接起来,首先编写简单的下位机程序(可以使单字节或者双字节数据的收发)来进行上位机与下位机之间的通信状况,直到测试结果为,上位机接收到并显示的数据正好就是下位机上传的数据和下位机接收到的数据正好是上位机发送的数据为止,此间一定要注意上位机上面的端口号的选择和波特率的设置,要保证上位机和下位机的通信方式保持一致。

程序运行时人机界面如图4-2。

图4-2 系统上位机软件设计运行图

5.  系统调试与改善

5.1 系统调试

本课程设计中系统调试部分就是把上位机和下位机的设计综合起来进行测试运行状态,是否与预期的效果一样。调试之前首先按照硬件原理图将下位机系统准备好(此处用发光二极管代替小电机),然后用通信线将上位机与下位机连接起来。然后通过下位机上面的按键或者上位机人机界面上面的按钮测试系统运行状态并记录问题,然后再根据所出现的问题,有针对性的修改,直到能实现课程任务要求。最后再在此基础上对程序代码进行简化,优化,对人机界面进行优化,美化。

系统上位机界面显示第一阶段性运行效果如图5-1。

5.2 系统改善

由图5-1可以看出所设计的人机界面基本上已经完成课程设计的相关任务要求,可是总感觉上面少了点儿东西,那是什么呢,应该是时间吧。显示时间可以用Timer控件再加上若干Text控件或者再加上若干Lable控件可以实现,原先也是这么计划布置窗体增加相关代码的,可是一次偶然的机会让我突然觉得若能以钟表走针的形式显示出来那该多好。所以这次改善就是在原来的基础上增添了走表走针的内容,这部分功能完全用程序代码实现,除了添加个Timer控件别的没再加什么。运行效果如图5-2。

过了一段时间再看看第二阶段的上位机界面运行状态,感觉还是有点儿少了什么。按照一般的情况,每个操作性的相关设备或者控制面板都应该有使用说明,所以这个地方也加入了此项内容。再就是指导老师给的建议,如果上位机人机界面反映下位机电机运行状态的时候使用旋转的效果应该比改颜色来反映的更好。所以呢,这次修改像串口助手一样可以自己设置串口和波特率就好了,于是接下来的时间里也再这方面稍下功夫,比较幸运的是这些修改都进行的比较顺利,基本上完成了上述修改任务。也将仿真电机的运行状态部分做了修改。再者就是我觉着如果我们自己做的界面能够最终运行的效果如图5-3。

图5-1 系统上位机界面第一阶段运行效果图

图5-2 系统上位机界面第二阶段运行效果图

图5-3 系统上位机界面第三阶段运行效果图

6.  系统设计时常见问题举例与解决办法

1、 编写下位机A/D转换程序时,数码管显示的数据始终是零点几,或者显示的数据不随传感器所在环境的温度的改变而改变。

出现调试下位机A/D转换程序时数码管显示的数据始终是零点几的现象是由模拟量处理模块部分,上路电压跟随输入端电压不为零造成的,解决办法就是调整电位器是的上路电压跟随器的输入端电压为零。如果出现数码管上显示的数据不随传感器所处环境的温度改变而改变这种情况就要检查程序代码了,首先要检查的就是代码中当一次数据处理完成后是否启动了下一次A/D转换,没有问题的话就再看看是否在完成一次转换后清掉了完成标志位。因为在A/D转换完成时我们读取转换结果之前是先把标志位清除的,如果不清除的话就容易让程序“死”在这个地方。

2、 上位机显示的数据与预想的效果不一致,或者出现严重错误。

在进行上位机和下位机之间的通信时,我们首先要保证通信线已连接好,并且串口号选择正确和波特率保持一致,数据位、停止位,奇偶校验这些保持一致。在此基础上出现上述问题时,我们先检查下位机相关通信的程序代码,看是否有错误,然后再检查是否上位机发送数据的格式与上位机接收和显示数据的格式一致。

3、 编写上位机代码时,对某些控件的属性或者方法不了解。

在VB中编写程序代码时,我们遇到上述问题时,可以从有关VB的MSDN中获取帮助,里面给我们提供了相关控件的属性或者方法以及相应的参考程序示例。如果没有安装MSDN系统,我们也可以从有关VB程序设计的教材中获取解决问题的方法,这里尤其要特别提出的时,遇到问题时,不防到网上查找下相关资料。网上的资料很多,这给我们提取出对我们用的资料增加了难度,但是它确是特别方便的,其中的资料有时候能给我们解决问题的直接答案,有时候是给我们指了一条如何解决问题的路。

7.  总结

通过本次课程设计,使我们对之前所学的专业课程有了更进一步的学习,并且加强了课程之间的联系。此次课程设计更重要的意义就是增强了我们自己动手设计电路和编写程序的能力,这对于即将进入工作阶段的我们是尤为重要在此次课程设计中我们各小组成员都很认真的完成分配给自己的实验项目,当遇到问题时首先组内成员积极讨论,解决不了的问题然后再请教指导老师。老师认真的讲解使我们在这次课程设计中受益匪浅,掌握了常见问题的解决方法。遇到问题并不可怕,可怕的是不敢面对困难。我们要不怕失败,在不断的改进中和调试中收获更多的知识。在不断的问题中总结自己在日常学习中的不足之处。在理论知识的基础上把自己的实践能力提高,做到学以致用。

更多相关推荐:
数字温度计的课程设计报告

单片机课程设计报告数字温度计1设计要求基本范围50110精度误差小于05LED数码直读显示2扩展功能实现语音报数可以任意设定温度的上下限报警功能数字温度计应教022李世朋摘要随着时代的进步和发展单片机技术已经普...

数字温度计课程设计报告

数字温度计课程设计报告1课题说明随着现代信息技术的飞速发展和传统工业改造的逐步实现能够独立工作的温度检测和显示系统应用于诸多领域传统的温度检测以热敏电阻为温度敏感元件热敏电阻的成本低但需后续信号处理电路而且可靠...

数字温度计设计与总结报告

数字温度计A2题设计与总结报告专科组陈春梁福鑫钟才莉摘要随着时代的进步和发展单片机技术已经普及到我们生活工作科研等各个领域已经成为一种比较成熟的技术本设计在参阅了大量前人设计的数字温度计的基础上利用单片机技术结...

数字温度计课程设计报告

目录1设计概述111设计目标和要求112设计思路12系统方案及硬件设计221设计方案222方案的硬件总体方框图323温度传感器DS18B20测温原理424硬件设计7241主控制器8242复位电路8243时钟振荡...

数字温度计设计报告

数字温度计设计报告姓名班级学号指导教师年62720xx月日数字温度计报警实训报告随着时代的进步和发展单片机技术已经普及到我们生活工作科研各个领域已经成为一种比较成熟的技术本文主要介绍了一个基于89c51单片机的...

数字温度计设计报告

单片机原理与应用技术课程设计报告论文基于单片机控制的数字温度计专业班级应教121姓名董镇玉时间20xx19指导教师宋长源李晓娟20xx年01月09日单片机课程设计项目系列基于单片机控制的数字温度计一设计要求一基...

数字温度计设计报告

数字温度计设计报告课程名称院别专业班级姓名指导教师时间20xx电子课程设计武警工程学院指挥自动化二队一区队王凯03田腾浩邹涛年1月12日23主要内容设计一个数字温度计测量范围0100C温度的实时LED数字显示测...

基于DS18B20传感器温度测量课程设计报告(1)

<<基于DS18B20传感器温度测量>>课程设计报告专业:班级:姓名:指导老师:二0XX年12月27日目录1、(内容)页码2、3、4、1.设计题目《基于DS18B20传感器温度测量》2.课程设计目的通过基于MC…

单片机课程设计 基于数字温度传感器的数字温度计报告

单片机原理及应用课程设计报告书课题名称基于数字温度传感器的数字温度计姓名学号专业指导教师机电与控制工程学院年月日填写说明1正文部分1标题与正文格式定义标准如下一级标题1标题1二级标题11标题2三级标题111标题...

DS18B20数字温度计设计实验报告.待修改1

单片机原理及应用课程设计报告书题目:DS18B20数字温度计姓名:学号:指导老师:设计时间:山西工程技术学院目录1.引言.............................................…

数字温度计报告 含有设计原理图

皖西学院机电学院电子信息科学与技术课程设计报告书摘要随着时代的进步和发展单片机技术已经普及到我们生活工作科研各个领域已经成为一种比较成熟的技术本文主要介绍了一个基于89S51单片机的测温系统详细描述了利用数字温...

数字温度计设计实验报告

数字电子综合性实验报告题目数字温度计学院电气工程与自动化班级姓名学号指导教师一实验任务温度计是工农业生产及科学研究中最常用的测量仪表本课题要求用中小规模集成芯片设计并制作一数字式温度计即用数字显示被测温度具体要...

数字温度计课程设计报告(31篇)