基于Modbus协议的智能压力传感器研发

发布者:创意驿站最新更新时间:2014-10-30 来源: ofweek关键字:Modbus协议  压力传感器  rs-485总线 手机看文章 扫描二维码
随时随地手机看文章

  1  引言

  20世纪90年代以来,在传感技术基础上结合微处理器技术发展起来的智能能传感技术成为国际上研究的热点。传感器领域的智能化得到了快速发展,出现了不同种类的智能化传感器产品。但是,单一智能化传感器并不能充分发挥智能化的优点,只有将其与计算机联网才能真正将智能化传感器的特点全面发挥出来。本文根据 rs-485总线以差分平衡方式传输信号,具有抗干扰性好、传输距离远等特点,通过一对双绞线作为传输介质将现场设备与上位机连起来,使系统结构大为简化,同时这也大大降低了系统安装、调试以及维护的成本。通过目前国际上普遍采用的modbus通信协议进行编写,方便操作人员的阅读及使用。
            
  2  modbus rtu通信协议
               
  modbus协议是莫迪康公司1978年发明用于电子控制器进行控制和通信的协议。
               
  modbus协议已经被接受转化成为中国国家标准gb/t 19582-2008 《基于modbus协议的工业自动化网络规范》。
               
  modbus协议采用主从(master-slave)技术,是一种问答方式的通信协议。modbus通讯协议有两种传送方式:rtu方式和ascii方式,相对于ascii方式,rtu模式表达相同的信息需要较少的位数,且在相同通讯速率下具有更大的数据流量。因此本文采用的是modbus rtu模式[2]。
               
  使用rtu模式时,消息发送至少要以3.5个字符时间的停顿间隔开始(如表1中的t1-t2-t3-t4所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0-9,a-f。功能码是每帧通讯信息的第二个字节,根据modbus协议规定 ,不同功能码对应数域格式不尽相同,常用的功能码有 1、2、3、4、5、6、15 和 16 , 分别表示读线圈、读输入状态、读保持寄存器、读输入寄存器、写单个线圈、写单个输入状态、写多个线圈, 写多个保持寄存器。本文根据需要主要是用的3、6、16功能码。网络设备不断侦测网络总线,当第一个域(地址域)接收到,每个设备都进行解码以判断是否发给自己。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。
               
  整个消息帧必须作为一连续的流传输。如果在帧完成之前有超过3.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前一消息开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的crc 域的值不可能是正确的[3]。一典型的rtu模式的消息结构如表1所示。

  3  系统硬件设计
               
  智能传感器(intelligent sensor)是具有信息检测与处理功能的传感器。智能传感器带有微处理机,具有采集、处理、交换信息的能力,是传感器集成化与微处理机相结合的产物。本设计中智能压力传感器的组成如图1所示。

                                           图1  基于c8051f350的智能压力传感器的方框图
               
  整个系统按照各部分功能可分为电源模块、温度采集模块、模拟信号调理模块、数据通信模块等部分。本设计使用c8051f350作为数据采集后的微处理器,c8051f350内部有一个全差分24位sigma-delta模/数转换器(adc),该adc具有在片校准功能。两个独立的抽取滤波器可被编程到1khz的采样率[5]。可以使用内部的2.5v电压基准,也可以用差分外部基准进行比率测量,其中在本设计中使用的是内部电压基准。adc0中包含一个可编程增益放大器,有8种增益设置,最大增益可达128倍,增益调节范围完全符合设计要求。
               
  设计采用陶瓷材料经特殊工艺精制而成的干式陶瓷压阻压力传感器cps181,陶瓷是一种公认的高弹性、抗腐蚀、抗磨损、抗冲击和振动的材料。陶瓷的热稳定特性及它的厚膜电阻可以使它的工作温度范围高达-40~135℃,而且具有测量的高精度、高稳定性。电气绝缘程度>2kv,输出信号强,长期稳定性好[4]。设计使用ds18b20测量工作环境温度。ds18b20具有以下特性:
               
  (1) 独特的单线接口,只需一个接口引脚即可通信;
               
  (2) 不需要外部元件;
               
  (3) 可用数据线供电;
               
  (4) 不需要备份电源等。
               
  测量得到的温度信号经过单线接口送入ds18b20或从ds18b20送出,因此从c8051f350到ds18b20仅需连接一条线。设计的通信通过rs485完成。因为rs-485的数据最高传输速率为10mbps;rs-485接口是采用平衡驱动器和差分接收器的组合,抗共模能力强,即抗噪声干扰性好[6];rs-485接口的最大传输距离可达3000米;支持众多常见的操作系统,易于实现不同网络之间的通信。

  4  系统软件设计
           
  4.1下位机通信程序的创新性设计
               
  系统的下位机程序主要是运用了大家熟悉的c语言进行编程,程序采用了模块化思想,结构清晰易读。主要包括系统初始化、更新传感器温度值、更新传感器供电电压值、更新传感器零漂值、更新传感器压力值、由modbus协议对上位机发来的报文进行解释形成任务标志、执行modbus协议的相应功能代码任务、向上位机发送应答报文、故障诊断、电源管理等模块。
               
  设计的创新点:自定义了一个寄存器数组,数组里包括地址、量程、增益、波特率、零漂、版本号、温度、供电电压、故障信息、压力值等,并对他们进行了编号。寄存器分配一览表如表2所示。
               
  (1)每一寄存器由两个字节构成,高字节在前,低字节在后,高字节存放数值的高位,低字节存放数值的低位。例如:量程代码存放于编号为01h的寄存器中,所占的两个字节规定如下(其中xx为以16进制形式存放的量程代码):

            寄存器编号    字节              高半字节              低半字节
            01h           高字节              0              0
                          低字节              x              x
               
  定义:传感器地址、量程、增益、波特率分别占用一个寄存器(即两个字节),它们的寄存器号分别为00h、01h、02h、03h,在modbus协议功能码03中,起始地址高位、低位可以分别对应传感器地址、量程、增益、波特率的高位、低位。

  (2) 在具体编写程序时,把寄存器数组的所有只写属性放入flash
           
  然后初始化读出。上位机发信息,下位机解释相应命令,读出或写入相应数据。在编写执行03、06、16任务模块时我们把要读取的寄存器数组的起始下标和要读取的数据个数分别根据modbus功能码中的起始地址高、低位和寄存器数高、低位设定成一个变量,这样简化了程序,可读性强。[page]
               
  (3)modbus协议规定,当设备使用rtu模式通信时,整个报文帧必须以连续的字符流发送。报文帧由时长至少为3.5个字符时间的空闲间隔区分。如果两个字符之间的空闲间隔大于1.5个字符时间,则报文帧被认为不完整应该被接收节点丢弃。而在实际通信过程中由于每帧消息不定长,所以程序中最主要的问题是如何找到modbus消息帧的开始和结束时间点,并且要满足两个字符之间的空闲间隔和两个报文帧之间的空闲间隔。程序的解决方法:接收采用中断方式并采用了可重复触发的可编程单稳方式进行处理,在利用modbus协议通信时保证了实时性接收。

  (4)对于报文发错问题(即不符合要发送的报文),已用crc校验程序对其处理。对于发送不符合要求的传感器地址、功能代码、数据、从机设备故障、从机设备忙碌、超时等问题,通过发送不正常响应信息来进行处理。而且上位机也编写了相应的程序代码。
               
  (5) 对于零漂、温漂的补偿以及线性化的问题,通过软件进行补偿处理的。实验证明,系统精度可以控制在千分之五之内。
           
  4.2上位机通信程序的编写

                                                       图2  modbus串口协议通信界面
               
  上位机串口通信是采用 visual basic语言编写,visual basic提供了面向对象的可视化编程工具。开发人员只需按设计要求在屏幕上“画”出所需的用户界面来,并设置这些对象的属性,不必为用户界面设计而编写大量的程序代码[7]。相对于传统编程语言,visual basic最突出的特点是事件驱动编程机制。每个事件都能驱动一段程序的运行。程序员只需编写响应用户动作的代码,各个动作之间不一定有联系,这样的程序一般较短,且易于编写和维护。在visual basic中为了完成串行通信,使用了mscomm控件,它可实现对串口的数据发送和接收。为了实现自动发送功能,还用到了timer控件。这两个控件在程序运行时都是不可见的[8][9],在设计时把它们放在窗体的右上角即可。图3为modbus串口协议通信界面。此串口通信主要完成的功能:
               
  (1)搜索传感器配置信息:当用户在用此传感器时,可能不清楚挂接传感器地址位置以及串口所使用的波特率,为此编写了相应的程序方便用户查询。
               
  (2)读传感器配置信息,包括地址、量程、增益、波特率、程序代码、修正系数、功能代码等。此部分根据modbus功能码03编写,严格按照rtu帧格式编写。
               
  (3)写传感器配置信息。用户可以根据自己的要求,更改地址、量程、增益、波特率、程序代码、修正系数、功能代码等。此部分是根据根据modbus功能码06或16编写。
               
  (4) 采集传感器工作状态。包括传感器压力、供电电压、环境温度、零漂、故障信息等。

  modbus串口协议通信界面如图2所示。
               
  部分程序如下:

            private sub timer1_timer()
                if star_find = true then    `如果有启动搜索命令标志
                 area_num = area_num + 1
                 mscomm1.outbuffercount = 0
                if area_num >= 248 then   `如果现波特率下超出下位机地址范围,则地址清零,重新换波特率搜索
                        area_num = 0
                        timer1.enabled = false
                        ll= msgbox("该波特率下无法搜索到下位机地址,请改变波特率!", vbok, "提示")
                    end if
                    call start_find   `开端口,将搜索命令发给下位机,并确定mscomm1.rthreshold属性
                end if
                if star_read = true then     `如果有启动读命令标志
                    call start_read   `开端口,将读命令发给下位机,并确定mscomm1.rthreshold属性
                end if
                if star_write = true then     `如果有启动写命令标志
                    call start_write      
            `开端口,将配置信息强置给下位机,并确定mscomm1.sthreshold属性
                end if
                if star_acq = true then     `如果有启动采集命令标志
                    if acq_end = true then  `如果有结束采集命令标志
                        timer1.enabled = false  `关闭时钟
                        acq_end = false     `清除结束采集命令标志
                    end if
                    call start_read  `开端口,将读命令发给下位机,并确定mscomm1.rthreshold属性
                end if
            end sub
           
  4.3 编程时应注意以下几个问题
               
  (1) 下位机从应答到发送数据并返回回应消息有一定的时间间隔,程序已根据不同波特率对其进行设定。保证对下位机的信息正确读取。
              
  (2) 在搜索传感器配置信息时,若搜索不到,要有提示通信出错信息,不能无限时间搜索。
               
  (3) 每一次的传输是0-255之间的数据,必须把inputmode属性设置为1(默认为0),表示以二进制格式取回数据。否则当设置为0时,超过128的部分会被当成双字节文字处理,结果出现错误。
            
  5  结束语
               
  利用上述的软硬件设计方法,通过 vb6.0的mscomm控件可以做到基于modbus通信协议的上位机与下位机的相互通信。该方法编程简单、实用,运行稳定可靠,操作简便易行,通用性强,同时降低了开发成本,很好的满足了工业现场的要求。

关键字:Modbus协议  压力传感器  rs-485总线 引用地址:基于Modbus协议的智能压力传感器研发

上一篇:实施隔离以进行通信
下一篇:PLC与CHV系列变频器通信

推荐阅读最新更新时间:2024-05-02 23:16

灵活的4mA至20mA压力传感器变送器,集成电压或电流驱动
 优势和特点   4-20mA 发送器   电压或电流驱动   优化压力传感器   低功耗   应用:   现场仪器仪表和智能发送器   电路功能与优势   图1所示电路是一款灵活的电流发送器,可将压力传感器的差分电压输出转换为4mA至20mA电流输出。   该电路针对各种桥式电压或电流驱动型压力传感器而优化,仅使用了5个有源器件,总不可调整误差低于1%。电源范围为7V至36V,具体取决于元件和传感器驱动器配置。   该电路的输入具有ESD保护功能,并且可提供高于供电轨的电压保护,是工业应用的理想选择。   图1. 压力传感器信号调理电路,具有4mA至20mA输出(显示为传感器电压驱动模式),原理示意图:未显示所有连接
[电源管理]
灵活的4mA至20mA<font color='red'>压力传感器</font>变送器,集成电压或电流驱动
压力传感器的选择常识
1、问:传感器测量的是何种压力?答 您首先要考虑的是您的系统的最大压力。   答:一般您需要的压力传感器压力范围最大值应该达到您系统最大压力值的1.5倍。我们建议的这些额外的压力范围是由于许多的系统,特别是水压和过程控制,有压力尖峰或者连续的脉冲。这些尖峰可能会达到“最大”压力的五倍甚至十倍,且可以造成传感器的损坏。连续的高压脉冲,接近或者超过传感器的最大额定压力,也会缩短传感器的寿命。但是仅仅提高传感器额定压力并不是万全之策,因为这会牺牲传感器的分辨率。您可以使用缓冲器来减弱尖峰,但是这也仅仅是一个折中方案,因为这会降低传感器的响应速度。   所有的压力传感器都在设计成能在2亿个周期中承受最大压力而不会降低性能。您在选择传感器的
[模拟电子]
家用电子医疗箱的软硬件实现方案
一、项目概述 1.1 引言 一瞬间产生了这个想法,就想把它实现一下。 1.2 项目背景/选题动机 随着社会经济的发展,人们的生活水品越来越高,人们现在也越来越多的注重生活质量和健康问题。电子产品的发展给人们提供了这样的途径,比如各种便携式医疗器械等。但是我们发现这些医疗器械功能比较单一而且很大部分需要使用传感器。于是我们就产生了这样一个想法:能不能利用单片机做一个电子医疗箱呢?这个医疗箱是能实现多种功能,比如可以同时使用体温传感器测体温,同时又能使用用温湿度传感器测室内温湿度,还可以同时或者分时使用其他功能如测量体重、血压、心率等等,这个医疗箱是基于传感器的,使用不同的功能需要换相应的传感器。这个医疗箱还可以使人们方便的关
[单片机]
家用电子医疗箱的软硬件实现方案
基于MODBUS协议智能控制系统设计
  0 引言   现场总线作为生产过程自动化发展的重点,对推动自动化技术起到巨大的推动作用,是现代化工业的标志。MODBUS作为现场总线的一种通信协议,它实现了PLC控制器、工控仪表与设备间的通讯和信息交换。具有MODBUS功能的工控仪表虽然应用比较广泛,但是工控仪表和PLC控制器价格较高并且没有形成自主知识产权的产品,阻碍了它的进一步发展。本文从这个问题着手,设计基于MODBUS协议的单片机控制系统,设计合理,价格低廉,自主性强,在工业控制领域具有广泛的应用前景。   1 系统总体设计   系统中计算机PC作为主机,AVR单片机作为从机,采用RS-485工业现场总线通信。由于计算机的串口采用RS232总线标准,因此在主机的
[单片机]
基于<font color='red'>MODBUS协议</font>智能控制系统设计
霍尼威尔PPT智能压力传感器及其应用
    摘要: PPT系列 精密智能压力传感器是霍尼威尔公司生产的高品质压力传感器。可广泛用于工业、航天、军事、医疗器械、大气环保检测及家电等领域。文中介绍了PPT系列传感器的特点、参数和引脚功能。最后介绍了PPT系列精密智能压力传感器的应用电路及设置方法。     关键词: 压力;传感器;检测;控制 根据半导体的硅阻效应,在硅膜片上施加压力将引起阻值的变化。这一点与应变片的100倍,因此,它不会永久地伸展,而能在应力消失后又恢复原来的形状。作为压力传感膜片,硅优于金属,因为硅在工作范围内有着特别好的弹性,通常只有硅片破裂才会停止正常工作。作为压力传感器的专业设计生产,美国霍尼威尔公司生产的高品质PPT智能压
[传感技术]
英飞凌压力传感器预警电池起火 让电动汽车更安全
2018 年 1 月,重庆某小区车库,一辆 电动汽车 在未充电、未被碰撞的情况下,发生自燃… 2019 年 4 月 21 日晚,一辆电动汽车在上海市徐汇区某小区的地下负一层停车场发生自燃并引发火灾… 2020 年 12 月,一辆电动汽车在雪地发生了自燃起火,所幸消防人员很快到场,没有造成更大的财产损失… 电动车燃烧、 电池 热失控诸如此类的事故频频发生,甚至引发了@中国消防的关注,特别制作了一期“新能源汽车的正确灭火方式”向大众科普如何应对电动汽车自燃着火 图源:新浪微博@中国消防 汽车的质量与安全性能一直是消费者选购汽车时考虑的首要因素。大容量电池和超快充电是现阶段纯电动汽车选购的必备条件,但这一切都需要建
[汽车电子]
英飞凌<font color='red'>压力传感器</font>预警电池起火 让电动汽车更安全
迈来芯推出面向严苛汽车应用的新型高精度压力传感器
迈来芯(Melexis),宣布推出一款新型高精度压力传感器--- MLX90818,特别适用于汽车领域的严苛介质应用。 新的MLX90818是一款经过出厂校准的、量程范围从1.0到5.5bar的绝对压力传感器,非常适合在常见的自然吸气、燃油直喷和涡轮增压发动机中应用。这款高集成度的传感器提供一个外部用于温度测量的NTC的信号处理通道,采用4mm x 5mm的小型DFN封装。MLX90818是迄今为止的最小尺寸的器件,它只需要使用很少的外部元器件,因而使OEM厂商可以轻松开发出小型、坚固的进气歧管压力(MAP)传感器。 作为唯一一款没有暴露可被腐蚀金属的可用元器件解决方案,该器件可提供最佳的严苛介质兼容性,特别是对尺寸更小、重量
[嵌入式]
汽修示波器测量汽车进气压力传感器信号及波形分析
进气压力传感器即进气歧管压力传感器。应用于D型电子控制燃油喷射系统(L型的使用空气流量计检测进气量)。进气压力传感器一般安装在节气门后方,通过检测节气门后方的压力变化来计算进气量。它的作用是检测进气歧管内的压力变化,并将发动机进气歧管的进气压力转换为电信号。与空气流量计一样,是发动机控制单元ECU计算基本喷油量、确定最佳点火时间的重要参数。 常见的进气压力传感器有模拟的,数字的,和TMAP的。模拟和数字的都是三条线,一条电源线,一条接地线,一条信号线。而TMAP的相比较于这两者,多了一根温度传感器的信号线。 TMAP型的进气歧管压力传感器集成了温度传感器,发动机电脑对比进气温度传感器和增压温度传感器,如果温差大于8摄氏度,
[测试测量]
汽修示波器测量汽车进气<font color='red'>压力传感器</font>信号及波形分析
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

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