基于Linux的嵌入式工业测控系统

发布者:meilidaowl最新更新时间:2007-05-31 来源: 微计算机信息关键字:实时  接口  存储  串口 手机看文章 扫描二维码
随时随地手机看文章

1、前言

随着网络控制技术的快速发展,工业以太网得到逐步完善,在工业控制领域获得越来越广泛的应用。工业以太网使用了TCP/IP协议,便于联网,并具有高速控制网络的优点。随着32位嵌入式CPU价格的下降,性能指标的提高,为嵌入式系统的广泛应用和Linux在嵌入式系统中的发展提供了广阔的空间。由于Linux的高度灵活性,可以容易地根据应用领域的特点对它进行定制开发,以满足实际应用需要。

2、基于Linux的嵌入式系统在测控系统中的设计

计算机测控系统本质上就是计算机控制系统,为了对被控对象实施控制,对其参数和状态进行检测是必不可少的。

2.1 测控系统整体设计

测控系统以基于Linux的嵌入式系统为核心,应用程序可通过网络进行更新,通过键盘进行人机对话,数据可通过LCD现场显示。重要数据可以文件形式保存在Flash存储器中,数据和报警信息还可通过串口向上位机传输,也可通过以太网口向Inernet发布信息。用户通过显示界面查看设备状态,设置设备参数,实现远程监控、远程维护。

2.2 总体框图[1]

图2-1 嵌入式系统总体框图

2.3 嵌入式系统硬件设计

2.3.1 硬件框图

考虑一般测控系统对嵌入式系统要求比较多的功能有:键盘接口、显示接口、A/D(或D/A)转换单元、可扩展的UO接口、打印机接口、与PC机通信的串行接口、以太网口等。实现的嵌入式系统硬件框图如图2-2所示[3]:

图2-2 嵌入式系统硬件框图

2.3.2 Linux下设备驱动程序的开发

Linux系统中,内核提供保护机制,用户空间的进程一般不能直接访问硬件。Linux设备被抽象出来,所有设备都看成文件。用户进程通过文件系统的接口访问设备驱动程序,设备驱动程序主要完成如下功能:

①探测设备和初始化设备;②从设备接受数据并提交给内核;③从内核接受数据送到设备;④检测和处理设备错误。

3、基于 RTAI-Linux的嵌入式系统的软件实现

3.1 RTAI实时硬件抽象层的实现机理

引入新的数据结构rt_hal,形成了实时硬件抽象层RTHAL(Real Time Hardware Abatract Layer),rt_hal结构体的定义如下:

struct rt_hal

{

struct desc_struct*idt table;

void(*disint)(void);

void(*enint)(void);

unsigned int(*getflags)(void);

void(*setflags)(unsigned int flags);

void(*mask_and_ack_8259A)(unsigned int irq);

void(*unmask_8259A_irq)(unsigned int irq);

void(*ack_APIC_irq)(void);

void(*mask_IO_APIC_irq)(unsigned int irq);

void(*unmask_I0_APIC_irq)(unsigned int irq);

unsigned long *Io_apic_irgs;

void*irq_controller_lock;

void*irq_desc;

int *irq_vector;

void *irq_2_pin;

void* ret_from_intr;

struct desc_struct *gdt_table;

volatile int*idle_weight;

void (*lxrt_cli)(void);

};

在usr/src/Linux/arch/i386/kernel/irq.c中初始化为rthal:

struct rt_hal rthal

{

idt_table,/*中断向量表*/

Linux_cli,/*关中断函数*/

Linux_sti,/*开中断函数*/

Linux_save_flags,/*保存中断前的标志*/

Linux_restore_flags, /*恢复中断前的标志*/

Task_and_ack_8259A, /*中断屏蔽*/

Enable_8259A_irq,/*中断使能*/

Linux_ack_APIC_irq,

(),/*在io_apic.c文件中设置*/

&io_apic_irgs,

&irq_controller_lock,

irq_desc,

irq_vector,

(),/*在io_apic.c文件中设置*/

&ret_from_imr,

gdt_table,/*全局描述符表*/

&idle_weight,

()

};

初始化rthal时,指向函数的指针变量指向实现原来标准Linux中开、关中断等功能的函数如下:

static void linux_cli(void)

{

hard_cli();

}

static void linux_sti(void)

{

hard_sti();

}

static unsigned int linux_save_flags(void)

{

int flags;

hard_save_flags(flags)

turn flags

}

static void linux_restore_flags(unsigned int flags)

{

hard_restore_flags(flags);

}

当加载RTAI模块时,执行rt_mount_rtai函数如下:

void rt_mountes_rtai(void)

{

rthal.disint=linux_cli;

rthal.enint=linux_sti;

rthal.getflags=linux_save_flags;

rthal.setflags=linux_restore_flags;

rthal.mask_and_ack_8259A=trpd_mask_and_ack_irq;

rthal.unmask_8259A_irq=trpd_unmask_irq;

}

rthal中指向函数的指针变量指向了RTAI中实现的同名函数,在RTAI中实现的关中断函数如下:

static void linux_cli(void)

{

processor[hard_cpu_id()].intr_flag=0;

}

在RTAI中引入新的数据结构processor,描述和中断有关的处理器的状态:

static struct cpu_own_status

{

volatile unsigned int intr_flag;

volatile unsigned int linux_intr_flag;

volatile unsigned int pending_irqs;

volatile unsigned int activ_irqs;

}

processor[NR_RT_CPUS];

当执行关中断时,只是将数据结构processor中的中断标志位intr_flag设为0,而不是真正的清除eflags寄存器的IF标志来关中断,解决了Linux中长期关中断的问题。

3.2 采用RTAI增强Linux实时性的实现[4]

通过修改Linux内核相关的源文件,形成实时硬件抽象层。执行insmod命令,挂载上提供实时服务的rtai,rtai_sched,rtai_fifos模块,得到如下信息[2]:

Linux tick at 100Hz

Calibrated cpu frequency 551268530Hz

Calibrated 8254-timer-interrupt-to-scheduler latency 8000ns

Calibrated one shot setup time 3000ns

Module Size Used by

rtai_sched 16608 0 unused

rtai_fifos 33468? 0 unused

rtai 20728? 1 (rati_sched rtai-fifos)

加载上应用程序需要的RTAI模块后,就可以在RTAI-Linux环境下开发应用程序。

3.3 基于RTAI-Linux的应用程序的开发

针对工业测控系统的数据采集、数据处理、控制、通信等具体应用,将应用程序分为实时任务和非实时任务。实时任务利用RTAI提供的API来开发,编写成内核模块,工作在Linux的核心态。用户进程可利用Linux操作系统提供的大量资源,进行TCP/IP网络通信,开发图形用户界面程序等。实时任务之间、实时任务和非实时任务之间可通过Fifo队列和共享内存等方法通信。RTAI-Linux应用程序结构如图3-1所示。

图3-1 RTAI-Linux应用程序结构图

数据采集任务的实现在rt_process.c中的主要函数如下:

static void data_collect()

{

rtf_put(FIFO,&data_value,sizeof(data_value);/*将采集的数据放入实时FIFO中*/

rt_task_wait_period();

}

int int_module(void)

rtime tick_period;

rt_set_periodic_mode(); /*将定时器设置为周期模式*/

rt_task_init(&rt_task,data_collect,l,Stack_size,task_priority,1,0);/*初始化数据采集任务*/

return ()

}

void cleanup_module(void)

{

stop_rt_timer();

rtf_destroy(FIFO);

rt_task_delete(&rt_task);

return;

}

数据显示程序的实现在disaplay.c中的主要函数:

int main(void)

{

if((fifo=open("/dev/rtf()",()_rdonly))<0)

{

fprintf(stderr,"Error opening/dev/rtf()\n");

exit(1);

}

read(fifo,&data_value,sizeof(data_value));/*用户进程从实时FIFO中读取数据*/

printf("data%f\n",data_value)

}

4、结论

本文给出了一种应用于测控系统的基于Linux的嵌入式系统的设计方案,能保证测控任务完成的实时性、可靠性,可以连到工业以太网,实现远程监控,在工业控制领域有很好的应用前景。

本文作者的创新点:在嵌入式系统软件的设计与实现上,提供了开发实时应用程序的接口;利用实时应用接口(RTAI)来增强Linux的实时性,并引入实时硬件抽象层结构(rthal)、实时调度器、实时FIFO等实时服务;给出了在RTAI-Linux环境下开发工业测控系统中实时应用程序的方法。

参考文献:
[1] 王跃科等.基于网络互联的分布式测控系统开放体系结构与技术[J].计算机测量与控制,2002.10
[2] 须文波.基于Linux的嵌入式系统在测控系统中的设计与应用[D].江南大学硕士学位论文,2003.3
[3] 胡在华等.一种新型嵌入式测控网络的设计与应用[J].微型机与应用,2002.21
[4] 陈继荣,黄建华.Linux操作系统实时性分析及改进策略[J].微计算机信息,2005年第21卷.第11-2期.P67-P69

关键字:实时  接口  存储  串口 引用地址:基于Linux的嵌入式工业测控系统

上一篇:基于cPCI总线的嵌入式遥测前端处理器系统设计
下一篇:一种基于小波变换的新型压缩编码模型

推荐阅读最新更新时间:2024-05-13 18:36

TI资深工程师对语音接口的解析分享
语音接口已经成为一个改变人机交互方式的全新切入点。这些系统如何工作?打造这样一款设备在硬件方面有什么要求?随着语音控制接口变得越来越普及,德州仪器( TI )的一位工程师对此技术进行了深入的了解,并分享了其对这项技术的认识和看法。 语音接口是什么? 语音识别技术自20世纪50年代起开始出现在我们身边。那时贝尔实验室的工程师创建了一款可以识别单个数字的系统。然而,语音识别只是完整语音接口技术的一部分。语音接口包含传统用户接口的所有方面:它能呈现信息并为用户提供一种操控方式。在语音接口中,操控或者甚至一些信息的呈现都将通过语音实现。在一些如按钮或显示屏等传统的用户接口上,也可能配置语音接口这一选项。 大部分人遇到的第一款语音接
[嵌入式]
经过优化的低成本FPGA中的高性能DSP功能
受诸如视频和静态图像使用的增多以及软件无线电等可重复配置系统需求的增长,数字信号处理(DSP)的应用继续膨胀。其中许多应用把重要的DSP处理要求和对成本的敏感性、对高性能的需求以及低成本的DSP解决方案结合在一起。 通用的DSP芯片和FPGA是实现DSP功能的两种普遍的方法。每种方法都各有优点,其最适宜的方法因应用要求的不同而各异。本文论述了通用DSP的功能,阐述了通用DSP和FPGA之间的差异,比较了现有的用FPGA实现DSP的解决方案,最后介绍了LatticeECP2M DSP的结构以及实现DSP的设计方法。 通用的DSP解决方案与FPGA实现方法的对比 带有加法、减法或累加运算的乘法器是大多数DSP应用的核心。通用D
[嵌入式]
史上最全的OBD接口位置大全
OBD对于许多车主来说比较陌生,那什是OBD?   OBD全称为On Board Diagnostics ,翻译成中文是:车载自动诊断系统。   这个系统随时监控发动机的运行状况和尾气后处理系统的工作状态,一旦发现有可能引起排放超标的情况,会马上发出警示。   当系统出现故障时,故障(MIL)灯或检查发动机(Check Engine)警告灯亮,同时OBD系统会将故障信息存入存储器,通过标准的诊断仪器和诊断接口可以以故障码的形式读取相关信息。   根据故障码的提示,维修人员能迅速准确地确定故障的性质和部位。   从20世纪80年代起,美、日、欧等各大汽车制造企业开始在其生产的电喷汽车上配备OBD,初
[嵌入式]
卡耐基梅隆大学研究人员利用AI 实时预测停车位占用情况
大家都经历过这种情况:驱车数英里到达目的地却发现,所有的停车位都被占满了。虽然谷歌地图(Google Maps)等应用程序可根据历史数据,预测停车位情况,但是该方法仍具有局限性。据外媒报道,美国卡耐基梅隆大学(Carnegie Mellon University)的科学家进行了一项研究,推出了一个人工智能(AI)系统,可实时预测停车位的占用情况。 进行该研究的科学家认为停车场传感器易出现故障和错误,因此不从此类传感器上收集数据,而是利用停车计时器所进行的历史交易,在使用额外数据进行预测之前,先估计是否有空余停车位。据估算,大约有95%的街边收费停车场都通过计时器来进行管理,表明此类模型比独立的传感器系统更具通用性。 研究团队使用
[汽车电子]
卡耐基梅隆大学研究人员利用AI <font color='red'>实时</font>预测停车位占用情况
PIC入门3,SPI通信和串口调试实验
MSSP模块工作于SPI主控方式,这个可以直接在实验板上执行。 程序: //适合3EPIC实验板,配置PIC单片机的MSSP模块工作于SPI主控方式下, //通过一个并/串行转换移位寄存器(74HC165)将接收的并行数据通过SD0口送出的串行数据, //PIC将串行数据存入寄存器,送给D口,驱动LED亮。 #include pic.h #include pic1687x.h volatile unsigned char data; /*************************************************************************/ /*函数名:SPIINT()
[单片机]
电力系统通信的音转接口设计
----摘 要:针对在胜利油田电力系统中不同类型的电力线载波通信设备之间连接和组网时遇到的技术问题,分别介绍了ZBD-3B型与ZJ-5型载波机的自动盘接口的工作和转接原理,从如何将话音与呼叫控制信号进行组合和隔离的分析角度,提出了音转接口板的设计原理和方法,并顺利制作和调试成功,解决了海洋变电站与调度中心的通信问题。 关键词:载波机;自动盘;接口;设计 引言 胜利油田电网是全国目前最大的企业电网之一,随着油田电网专业化管理的进一步深化和加强,作为油田电力系统重要组成部分的电力通信专网在整个电网运行和管理中的地位越来越重要。由于历史的原因,目前胜利油田电力系统通信网中的部分电力专用通讯设备在设计和技术上已显得相对陈旧和落后,致使
[工业控制]
printf重定向到stm32串口
一、什么是重定向 在程序的调试过程中,除了那些高大上的调试手段外,printf无疑是我们最熟悉最顺手的调试方法。通过使用printf,我们可以很方便很直观的获取当前程序的运行状态。 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。但是在单片机开发中,一般情况下并不存在标准输出设备,因此我们需要将printf的输出信息重定向,也就是输出到其他输出设备中去。 二、在stm32平台上实现重定向的方式有两种,重定向至UART,或者通过JTAG的SW模式将printf重定向至SWO引脚输出。 首先介绍第一种,重定向至UART,这种方式我们比较熟悉,ST官方提供的固件库中也是使用的这种方法。 代码如下:在对U
[单片机]
嵌入式系统以太网接口的设计
    摘要: 介绍以8051系列单片机系统为例的嵌入式系统与10Mbps以太网控制器芯片DM9008的硬件接口电路的实现及编程方法。     关键词: 嵌入式系统 以太网 DM9008芯片 单片机 TCP/IP协议 目前,以太网(Ethernet)协议已经非常广泛地应用于各种计算机网络,如办公局域网、工业控制网络、因特网等场合,并且还不断地发展。基于以太网的新技术和联网设备不断出现,以太网已经成为事实上最常用的网络标准之一。 但是,基于以太网的嵌入式系统目前并是很多。其原因除了嵌入式系统本身运行速度较慢、资源较少且不足以实现以太网的各种协议外,更重要是设计以太网的接口及协议相对比较复杂,使人望而却步。
[嵌入式]
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved