基于嵌入式Linux的无纸记录仪通信设计_第1页
免费预览已结束,剩余4页可下载查看

下载本文档

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

文档简介

1、基于嵌入式linux的无纸记录仪通信设计在工业控制系统中,记录仪起着非常重要的作用,它可以实时采集、监测和记录一些影响工艺过程和产品质量的重要参数,被广泛应用于石化、冶金、电力、机械、医药、轻工业等行业。随着技术的不断进展,记录仪已从传统的有纸模拟式进展到如今的无纸数字式1。与传统的有纸记录仪相比,无纸记录仪无机械磨损、显示直观、用法便利、故障率低和设备耗材少,因此被越来越多的应用于工业控制领域。随着工业过程自动化的高速进展,企业对无纸记录仪提出了越来越高的要求,基于8位的无纸记录仪的功能已远远达不到用户的要求。微处理核的32位risc处理器以其强大的性能丰盛的接口以及优异的性价比等诸多优势,

2、而被越来越多的应用于无纸记录仪,随着硬件的改进,传统的串行通讯办法也迫切需要改进,因此本文提出了基于嵌入式的串口通信计划。嵌入式linux操作系统是在标准linux的基础上针对嵌入式系统举行内核裁剪和优化后形成2,它继承了linux的开放源代码、多任务、稳定性高,内核可裁剪等诸多优点,其内核精简而高效,具有十分好的网络性能。本文将用法嵌入式linux作为无纸记录仪上位机操作系统,并利用其多线程编程技术实现上位机与下位机的串口通信。1 记录仪中的通信协议因为无纸记录仪主要在过程控制现场或监控室中用法,与之举行通信的现场设备接口以串口居多,因此在该装置的开发过程中采纳非常通用的modbus协议作为

3、串口通信协议。 modbus协议是modicon公司于1979年为建立智能设备间的主从式通信而开发的一种通信协议,它规定在一个系统中,每次指令应由系统中主设备发起,从设备通过解析地址位打算是否应答3。该协议具有两种报文传送帧格式,ascii和rtu报文帧格式,分离1和图2所示。将两种报文传送帧格式异同总结如表1。由表1可知,两种报文帧格式各有优劣:ascii格式用法的字符是rtu格式的两倍,但ascii格式数据的译码和处理更为简单一些;用法rtu报文帧格式传输数据时,报文字符必需以延续数据流的形式传送,而用法ascii格式,字符之间允许长达1s的时光间隔。表1 ascii与rtu报文帧格式比较

4、通常状况下,在一个modbus网络中只采纳一种报文帧格式举行数据交换。但在一些特别状况下,同一系统中需要用到不同传输模式的控制器,即同时采纳两种报文帧传输格式。为了使无纸记录仪具有更强的通用性,本文提出了一种新的可同时用法两种报文帧格式的串口通信计划。在以下阐述过程中, 以ascii和rtu报文帧格式传输的数据将分离简称为ascii和rtu数据。2 记录仪的通信实现2.1 整体设计无纸记录仪主要通信对象为工业现场设备,因此通信过程中数据交换应迅速、精确无误。在modbus协议中,ascii与rtu数据打包与解码均不相同,数据读写方面需要自立起来。串口通信功能框架3所示。图3 串口通信功能框架图

5、设备注册扫描模块主要负责设备地址表的维护,每间隔一定时光扫描在线设备,并记录下设备地址和用法的报文帧格式,同时按照扫描得到信息动态开拓ascii和rtu数据缓存区。ascii数据读写模块负责打包和解码ascii数据,rtu数据读写模块负责打包和解码rtu数据。数据发送模块按照优先级罗列好打包好的数据依次发送。数据接收模块仅解码下位机仪表每次传回数据的首位,推断是rtu数据还是ascii数据,存入rtu或ascii数据缓存区,以待处理。为了实现ascii与rtu数据的共存,首要问题是每次设备扫描注册时对用法ascii和用法rtu数据的设备加以区别。由ascii和rtu的报文帧格式可知,传输数据首

6、位是推断数据类型的关键,所以用法rtu报文帧格式的设备地址需避免ascii数据的起始位和结束符。在未知在线设备状况下,上位机将全部设备地址轮询一遍,解析接收数据首位,假如是ascii的起始位,则ascii设备注册,反之,则rtu设备注册。2.2 编程实现软件实现上,采纳linux的多线程编程技术,可以更好的满足工业现场的实时性要求。多线程程序采纳多任务、并发的工作方式4,可以提高应用程序响应时光并且充实程序结构。linux操作系统中提供了linuxthread 库5,它实现了符合posix1003.1c标准的多线程支持,而且是内核级方式。串口通信通过三个线程来实现,主线程、发送子线程和接收数据

7、处理子线程,4所示。同时,为了使收发数据管理越发便利,建立了四个数据缓存区: 发送缓存区,存放预备发送的指令; 已发送缓存区,存放已发送好但未经接收确认的指令; rtu接收缓存区,存放接收到的rtu数据; ascii接收缓存区,存放接收到的ascii数据。全部线程分享上述四个数据缓存区的数据,并设置互斥锁用来确保一个时光段内惟独一个任务在拜访分享数据。图4 串口通信多线程程序流程图主线程主要负责设备的注册,扫描是否有数据发送,假如有发送数据,举行优先级设置,将发送数据转为发送所需的ascii和rtu格式,存入发送缓存区以待发送。串口初始化主要功能为设置串口通信属性,如波特率、数据位、校验位和流

8、控制等。串口通信采纳异步通信模式,并以全局变量作为接收标记。解析数据时应将已收到数据和已发送数据举行匹配,按照发送的数据分析接收数据是否正确,假如接收数据正确则丢弃已发送指令,否则重发。3 迅速数据转换算法因为上位机与下位机的个别数据存储格式不同,需要转换为对方能够识别的数据。下面以浮点数为例,解释本次设计中的数据转换机制。上位机采纳linux操作系统,浮点数采纳ieee-754数据存储格式。ieee规定一个浮点数在内存中占四字节,其数据格式5所示。图5 ieee浮点数数据格式在ieee浮点数数据存储格式下,第1位为符号位,指示浮点数的正负。指数部分共8位,第一个字节的后7位和其次个字节的第1

9、位,表示范围是0 255。事实上的指数值应是-128 127的有符号整数,为了存储便利,指数值都加127转为0 255存储,即实际指数值是e-127。最后23位为小数部分,需要注重的是,在计算时,要将小数部分最高位补1。因此,实际的浮点数值可以通过下面的公式计算:real =(-1)*sign*(d/224)*2e-126下位机浮点数在内存中同样占四字节,其数据格式6所示。图6 下位机浮点数数据格式下位机浮点数数据格式中,数符用来指示浮点数的正负,阶符用于指示指数的正负,阶码有6位,即指数范围是064,小数部分比ieee浮点数数据格式中多1位,因此在计算时高位无需补1。实际的浮点数数值可以通过

10、下面公式计算:real =(-1)*sign*(d/224)*2(-1)*signe*e实际传输过程中,从下位机传来的浮点数,需要先转为ieee标准格式,传给下位机的数据同样需要转为下位机能够识别的格式。因为浮点数存储格式复杂,在转换数据时应尽量避开用法浮点数运算。通过比较图5和图6可知,两种存储格式的最后23位相同,可以共用。因此,在编程时,采纳共同体能够更快的解决两者之间的转换。编写共同体如下:union float fdata;unsigned char byte4;data_change;fdata中存放转换前得浮点数,而字符型数组byte挺直对应浮点数在计算机中以二进制存储的四个字节。通过对字符型数组的容易的加减法及移位计算就可以迅速在两种存储格式之间转换。 实际测试时,采纳共同体的数据转换在响应时光上要显然优于未采纳共同体的数制转换,提高了串口通信的实

温馨提示

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

评论

0/150

提交评论