《用C语言开发测控软件的方法与实践》由会员分享,可在线阅读,更多相关《用C语言开发测控软件的方法与实践(6页珍藏版)》请在金锄头文库上搜索。
1、用 C 语言开发测控软件的方法与实践摘要:本文简单介绍了测控软件,并且深入详细的分析了 C 语言在测控系统软件开发中应用的方法及其相应技术。重点分析了输入输出端口的控制、位运算、 硬件中断程序设计以及曲线的绘制等方面 C 语言的应用。关键词:C 语言 现代测控技术 测控软件 硬件中断程序设计 曲线的绘制1.引言C 语言是目前程序设计语言中使用比较广泛的一种。C 语言功能丰富、表达能力强、使用灵活方便、程序执行效率高并且可移植性好。C 语言不仅具有高级语言的特点,还具备了汇编语言的特点,其系统处理能力非常强大。并且它支持自顶向下逐步求精的程序设计技术。C 语言的函数式结构更为实现程序的模块化设计
2、提供了强有力的保障。因此 C 语言被广泛应用于系统软件和应用软件的开发,例如测控软件。2.测控软件 随着计算机技术、检测技术和控制技术的发展,衍生而来的现代测控技术与系统也迅猛发展起来。现代测控技术与系统是一门综合性技术。在传统的测控技术基础之上,我们融入了现代传感技术、通信技术和计算机技术,并且将现代最新科学研究方法与成果应用于其中。例如,基于网络的测控技术、基于计算机视觉的测控技术、 基于雷达与无线通信的测控技术以及基于虚拟仪器(VI)的测控技术等等。其中,基于虚拟仪器(VI)的测控技术的软件开发工具可用 C+、Java 以及 C 语言编写。现代测控系统基本结构分别建立在 3 种基础模型基
3、础之上,一种是基于DAQ 数据采集体系的测控系统模型,其硬件结构如图 1 所示;一种是基于网络的测控系统模型,另一种是企业的测控管系统模型。测控对象图 1 基于 DAQ 体系的测控系统硬件结构而现在的测控系统通常尤测控软件组成,测控软件主要用于数据采集和测量,测控过程中的控制决策和控制输出,数据的处理、分析和管理。测控组态软件应是一个通用的测控软件平台,它能根据不同的应用目的和环境,方便地构造出各自不同的测控软件。初期的测控组态软件主要是针对数据采集与控制的,是面向任务实现的,主要是给用户提供了一个友好的人机界面。其功能十分有限,没有对实时数据和历史数据进行有效处理和分析的手段,系统的二次传感
4、器件信号处理模数转换执行机构功率放大数模转换通信单元控制器计算机开发能力也较差。如今的组态软件在面向数据采集与控制的功能方面有了很大的提高,例如在数据采集方面,它不仅支持各种传统模拟量、数字量的输入输出,而且支持符合现场总线规约的各种智能传感器和仪表的输入输出,有的还支持各种虚拟仪器。另外,在数据处理方面增加了许多功能,例如对过程数据的统计分析,对测试数据进行各种谱分析、相关分析等等。如今的组态软件已由过去的以应用为中心,转为以数据为中心。组态软件可以提供各种数据接口,可以借助其他软件工具更为灵活地存储、分析和处理测控过程的数据。2.用 C 语言开发测控软件的方法与实践C 语言是目前使用最广泛
5、的一种程序设计语言,语言表达能力强、模块化能力强、数据类型丰富、运算符丰富、可移植性好、提供丰富的库函数、执行速度快、控制硬件处理中断的能力强、绘图能力强、可与其它语言混合编程等等不可代替的优点,使得 C 语言被广泛运用于测量 控制通讯领域中。在测控领域,C 语言主要被应用于实时测量系统程序设计,实时通讯系统程序设计以及实时控制系统程序设计。如图 2 所示,是实时测控系统的实例。图 2 实时测控系统实例在测控软件中,C 语言主要涉及到输入输出端口的控制,硬件中断程序设计,软件中断程序设计,精确定时程序设计,串口通信程序设计,曲线的绘制,并行接口的使用与步进电动机的控制,数据采集与处理程序设计,
6、闭环控制系统程序设计等内容。由于内容较复杂,本文将主要针对用 C 语言开发测控软件时,输入输出端口的控制、位运算、 硬件中断程序设计以及曲线的绘制的不同使用 C 语言的方法以及实践进行深入分析。2.1 C 语言中端口输入/输出函数计算机的 CPU 要与外设间传递信息,必须通过硬件的接口电路来进行。接口电路通常包含一些寄存器,如数据寄存器、状态寄存器、控制寄存器等。一般称这些寄存器为 I/O(输入/输出)端口。 PC 系列微机用 10 条地址线对端口寻址,寻址范围为 0x00 -0x3ff。 C 语言为了控制端口的输入/输出扩展了一些非标准的系统函数。2.1.1 8 位端口输入函数 i n p
7、o r t b( )函数原型为:unsigned char i n p o r t b(int p o r t i d);它的主要功能是从地址为 p o r t i d 的 8 位端口输入一个字节(8 位) ,所读的值是该函数的返回值,由头文件 dos.h 说明。其用法为#include unsigned char b;b = i n p o r t b(端口地址);2.1.2 8 位端口输出函数 o u t p o r t b( )函数原型为:void o u t p o r t b(int p o r t i d ,unsigned char value);其主要功能为:向地址为 p o
8、r t i d 的 8 位端口输出一个字节(8位) ,其值为 value,由头文件 dos.h 说明。它的用法是#include o u t p o r t b(端口地址,无符号字符型数据或变量);2.1.3 16 位端口输入函数 i n p o r t( )函数原型为:int i n p o r t(int p o r t i d);它的功能是:从地址为 p o r t i d 的 16 位端口输入一个字(16 位) ,所读的值是该函数的返回值,由头文件 dos.h 说明。主要用法是: #include int w ;w = i n p o r t(端口地址);2.2 C 语言中的位运算 位
9、运算是直接对操作数的二进制位(bit)进行操作,按二进制位的逻辑运算对控制计算机硬件非常有用。C 语言的位运算符有: 按位与 &,按位或 | ,按位异或,按位取反 ,左移 。位运算符只能用于有符号或无符号的字符型、整型、长整型数据的运算,不能用于浮点数和双精度数据的运算。就按位与运算符 &为例,我们进行详细解释。它的运算规则为: 0&0=0 , 0&1=0 , 1&0=0 , 1&1=1若 a=0x55 ,b=0xf0 a&b= ?0 1 0 1 0 1 0 1 (a=0x55)&) 1 1 1 1 0 0 0 0 (b=0xf0)0 1 0 1 0 0 0 0 (c=0x50)它的规律是;跟
10、 1 相与不变,跟 0 相与清零.在位运算中,按位的与运算可使某些位清 0,其它位不变。例如,欲使地址为 0x61 的 8 位端口 D4 位清零,其他位不变。 D7 D6 D5 D4 D3 D2 D1 D0#include char b;b=i n p o r t b(0x61);b=b&0xef;o u t p o t b(0x61,b);2.3 硬件中断程序设计实模式下的中断系统中断(interrupt)是指计算机“暂停”了正在执行的程序,转去处理一个突发的紧急事件的过程。处理这个紧急事件,计算机要执行一个相应的中断服务子程序。处理完毕之后,计算机又要接着执行刚才被中断了的程序。引起中断的
11、事件称为中断源。例如 86 系列 CPU 可处理 256 个型号的中断,中断类型号为 0x00-0xff 。如图 3 是具体的中断分类。图 3 中断分类其中外部中断通过 CPU 的管脚 NMI 和 INTR 申请中断,也称硬件中断。中断允许标志 IF 可屏蔽 INTR 中断。硬件中断程序设计包括两个部分:1)写一个中断服务子程序,要写成中断函数的形式。2)设置中断向量,即把中断服务子程序的地址放到中断向量表中去。2.3.1 中断服务函数中断服务子程序要写成函数形式,用关键词 interrupt 说明。其格式为:void interrupt m y i n t(void)函数体自定义函数在使用前
12、要说明,格式为:void interrupt m y i n t(void);设置中断向量函数 s e t v e c t( )函数格式如下,由 dos.h 说明:void s e t v e c t(int n u m, void interrupt(*i s r) ( ) );其中 n u m-中断类型号,i s r-指向中断服务函数的函数指针若中断类型号为0x08,中断服务函数名为 m y i n t,程序如下:#include s e t v e c t(0x08, m y i n t);2.3.2 获取中断向量函数 g e t v e c t( )该函数从中断向量表中取出指定中断类型
13、号的中断服务函数的地址,赋给不 可 屏 蔽 中 断 NMI可 屏 蔽 中 断 INTR外 部 中 断内 部 中 断 微 处 理 器 产 生 的 中 断中 断 指 令 产 生 的 软 件 中 断中 断 源一个函数指针。函数用法举例:#include void interrupt(*o l d i n t)();O l d i n t =g e t v e c t(中断类型号) ;2.3.3 屏蔽中断函数 disable( )将 IF 清 0,禁止 CPU 响应 INTR 中断,由 dos.h 说明。函数原形:void disable(void);用法如下所示:#include disable()
14、;2.3.4 开放中断函数 enable( )将 IF 置 1,允许 CPU 响应 INTR 中断,由 dos.h 说明。函数原形:void disable(void);用法如下:#include enable();2.4 曲线的绘制Turbo C 提供了功能较强的绘图功能,包括图形库文件 graphics.lib,图形头文件 graphics.h,显示器驱动程序,字符集字体驱动程序等。2.4.1 图形系统的初始化函数图形系统的初始化函数 i n i t g r a p h(&driver,&mode,”path”)。其中,d i r v e r 图形驱动程序代码,图形驱动程序在系统提供的.B
15、GI 文件中;mode 图形模式代码,选择分辨率和色调;path 图形驱动程序的路径,要用双引号括起,若在当前目录下可用空串“ ”代替。2.4.2 设置背景颜色函数设置背景颜色函数为 s e t b k c o l o r( int c);其中,参数 c 的取值与所对应的颜色:0:黑,1:兰,2:绿,3:青,4:红,5:紫红,6:棕,7:浅灰,8:深灰,9:浅蓝,10:淡绿,11:淡灰,12:淡红,13:淡紫红,14:黄,15:白。2.4.3 关闭图形模式函数 c l o s e g r a p h()该函数关闭图形系统,返回文本方式。c l o s e g r a p h( );2.4.3
16、自动检测图形显示卡该程序将图形驱动器代码设为 DETECT,即自动检测图形显示卡,装入相应的驱动程序,且选用最高分辨率的图形模式。#include main( ) int driver=DETECT,mode;i n i t g r a p h(&driver,&mode, );s e t b k c o l o r(1);circle(320,240,100);g etch( );c l o s e g r a p h( );3.结语 本文主要介绍了用 C 语言开发测控软件的方法与实践,由浅入深地分析了C 语言在测控领域应用的方法和特点。在现代测控系统中,输入输出端口的控制,硬件中断程序设计,软件中断程序设计,精确定时程序设计,串口通信程序设计,曲线的绘制,并行接口的使用与步进