新闻中心

EEPW首页>嵌入式系统>设计应用> 基于Modbus协议的智能压力传感器研发

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

作者: 时间:2016-12-20 来源:网络 收藏

  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功能码中的起始地址高、低位和寄存器数高、低位设定成一个变量,这样简化了程序,可读性强。


上一页 1 2 下一页

评论


技术专区

关闭