APP下载

基于RS485总线的远程数据采集模块的构建设计

2022-04-23蒋雪昀

关键词:远程控制数据采集

Construction and Design of Remote Data Acquisition Module Based on RS485 Bus

JIANG Xue-yun

(School of Mechanical and Electrical Engineering, Qingdao Institute of Technology, Qingdao 266300, China)

【摘  要】论文设计了基于RS485总线的远程数据采集模块。模拟信号经A/D转换芯片将模拟量转变为数字量传输到单片机中,单片机根据与上位机使用的ASCII协议,经RS485总线把测量的数据传送到上位机中,以便于上位机进行实时监控。多个RS485数据采集模块可以和上位机构成一个一主多从的分散式采集网络。整个数据采集模块以AT89C52为核心,由A/D转换电路和RS485电路组成。每个数据采集模块可以采集8路标准模拟信号,具有接口简单、可靠性高、使用方便、传输距离远等特点,具有较高的使用价值和研究价值。

【Abstract】This paper designs a remote data acquisition module based on RS485 bus. After the analog signal passes through the A/D conversion chip, the analog quantity is transformed into digital quantity and transmitted to the single chip microcomputer. According to the ASCII protocol used with the host computer, the single chip computer transmits the measured data to the host computer through the RS485 bus, so that the host computer can monitor in real time. Multiple RS485 data acquisition modules can form a master-slave distributed acquisition network with the host computer. The whole data acquisition module takes AT89C52 as the core and is composed of A/D conversion circuit and RS485 circuit. Each data acquisition module can collect eight standard analog signals. It has the characteristics of simple interface, high reliability, convenient use and long transmission distance. It has high use value and research value.

【关键词】AT89C52;数据采集;远程控制;RS485

【Keywords】AT89C52; data acquisition; remote control; RS485

【中图分类号】TP274+.2                                             【文献标志码】A                                                 【文章编号】1673-1069(2022)02-0159-06

1 引言

随着现代工业不断向信息化和规模化的方向逐渐发展,工业控制系统需要采集的控制信息越来越多,对系统数据采集的速度和精度要求也越来越高。传统的数据采集方法无法满足在实际中的要求,作为应用新的数据采集技术的单片机应运而生。随着单片机技术的不断发展,搭建可靠性高,成本低廉,部署快速的数据采集模块就显得很有必要。复杂电磁环境,须使用有较高抗电磁辐射干扰能力的模块。总线传输模块RS485由于具有较强的抗电磁干扰能力而被发现和使用。基于该模块构建的数据信息传输系统,也就具有了较好的抗电磁干扰能力,呈现出可靠的稳定性[1]。

2 设计方案

2.1 系统的工作原理

原理:由于RS485总线具有平衡差分传输的特性,其抗干扰能力强,传输距离远,具有很强的级联能力。它可以实现远程多站的通信,成本低,组网方便,并已广泛应用于工业控制领域。这里的上位机选择“组态王”,下位机选择芯片与单片机。基于RS485总线的远程数据采集模块的连接图如图1所示。

A/D转换模块由单片机进行控制,单片机读取A/D转换芯片的数据,并通过RS485总线将数据传输至组态王。工作時,模块作为从设备,等待组态王发送数据查询命令,命令中包括数据类型及所通信的设备地址,单片机与程序内部中的地址相比较,若相同,则建立点对点的连接,通过485接口电路,将TTL电平转化为RS485电平进行数据发送。

2.2 系统的总体设计

通过使用RS485总线,可以使其进行远距离传输。总体结构如图2所示。

由图2可以看出,系统主电路采用的是以AT89C52为核心,以ADC0808作为模拟量采集端口,MAX487芯片将TTL电平转换为RS485电平。传感器检测到的物理量经过信号调理电路转变为0~5 V的标准信号、由A/D采样后将数字量传送到单片机系统中,单片机根据与上位机通信协议来传输送数据,并把测量数据传送到组态王从而实现实时监控。

3 系统的硬件设计

3.1 单片机最小系统及资源分配

本设计中A/D转换模块,需要8个IO口,3位数据地址选择控制端A、B、C,A/D转换采用循环查询转换方式,需要串行通信接口。单片机AT89C52系统的资源完全可以满足系统设计的资源要求,所以设计中单片机采用AT89C52。

3.1.1 单片机的微结构

AT89C52单片机最小系统包括数个晶体振荡器、回(复)位电路,开关电路,其中晶振方式采用内部时钟方式,外接石英晶体振荡器,接电容C1和C2分别为30 pF,人工复位方式为按键复位,即单片机复位端RST通过100 Ω的电阻与VCC电源连接,按下开关后RST变高,开关弹起后RST端经1 kΩ电阻后接地,从而实现复位[2]。具体连接如图3所示。

在图3中,晶体振荡器X1的频率为11.059 2 MHz,选用这个晶振频率是为了产生各种标准的波特率发生频率为11.059 2 MHz。电阻R2和C3电容的电路组成单片机的上电复位电路。在单片机通电的过程中,R2和C3在上电时产生一个负脉冲通过RST引脚复位。复位时复位信号要使用大于2个机器周期的高电平,R2和C3分别是100 Ω和22 uF,满足时钟宽度要求,按键用于人工复位。EA为1时,CPU访问内部程序存储器。

3.1.2 单片机的资源分配

对于数据采集模块,需要一个串口进行通信,需要定时器来产生相应的波特率,需要8位数据输出端AD0~AD7,3位数据地址选择控制端A、B、C,地址锁存允许ALE经分频后输给ADC0808作为时钟信号,AT89C52的资源完全可以满足要求。

3.2 A/D转化模块的硬件设计

3.2.1 A/D转换器原理

ADC0808是CMOS单片型逐次逼近式A/D转换器,内部结构如图4所示。

首先输入3位地址,并拉高ALE,将地址锁入地址锁存器中。此地址经译码后选通8路模拟输入之一到A/D转换器。START接收到上升沿时将逐次逼近寄存器复位。下降沿便启动 A/D转换,之后EOC被拉低,说明A/D转换正在进行。A/D转换完成之后,EOC被拉高,说明A/D转换已经完成,数据已存入内部的锁存器,需等待三态门打开才会输出数据,这个信号可以作为中断申请[3]。当OE输入“1”时,输出三态门打开,转换结果的数字量输出到数据总线上。

3.2.2 转换芯片硬件连接

由于ADC0808可以与AT89C52单片机直接相连。初始化时,使START和OE信号全为低电平。转换通道的地址要连接到ADD A、ADD B、ADD C端口上。当要开始转换时,先将地址输出到ADC0808的ABC端,再将ALE拉高,锁定地址,START接收到一个正脉冲,启动A/D转换。启动转换后的一段时间,单片机去读取数据,并发送到上位机,完成一次数据采集。ALE输出频率為晶振的1/6,约为1.9 MHz,再经过四分频电路后可以得到480 kHz的脉冲,可以满足ADC0808的工作要求。模拟信号输入通道的选择与地址选择输入端的对应为:通道IN0对应输入地址ADD A:0(字节),ADD B:0(字节),ADD C:0(字节);通道IN1对应输入地址ADD A:1(字节),ADD B:0(字节),ADD C:0(字节);通道IN2对应输入地址ADD A:0(字节),ADD B(字节):1,ADD C:0(字节);通道IN3对应输入地址ADD A(字节):1,ADD B:1(字节),ADD C:0(字节);通道IN4对应输入地址ADD A:0(字节),ADD B:0(字节),ADD C:1(字节);通道IN5对应输入地址ADD A:1(字节),ADD B:0(字节),ADD C:1(字节);通道IN6对应输入地址ADD A:0(字节),ADD B:1(字节),ADD C:1(字节);通道IN7对应输入地址ADD A:1(字节),ADD B:1(字节),ADD C:1(字节)。

3.3 通讯接口

3.3.1 RS485简介

采用差分信号负逻辑,逻辑低电平以两线间的电压差为+2 V~+6 V表示。逻辑高电平以两线间的电压差为-2 V~-6 V表示。RS-232-C比接口信号电平高,就不易损坏接口电路的芯片,RS-485接口是采用平衡驱动器和差分,接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。连接RS-485通信链路时用一对双绞线将各个接口的A、B端连接起来[4]。

3.3.2 RS485电平与TTL电平的转换

在RS485中规定:接口两端(设为A、B)的电压差高于+2 V时为逻辑1,低于-2 V伏时为逻辑0。工作电源为+5 V,额定电流为300 μA,采用半双工通讯方式的MAX487完成将TTL电平转换为RS485电平的功能。MAX487引脚结构如图6所示。

从图6中能看出MAX487的内部是由驱动器和接收器组成的。与单片机连接时只需RO和DI分别与单片机的RXD和TXD相连即可,RO是接收器的输出,DI是驱动器的输入端,/RE是接收使能端DE是发送使能端,A端和B端分别为接收和发送的差分信号端。同时,A和B端加上阻值约为120 Ω的匹配电阻。单片机与芯片连接图见图7。

4 软件设计

程序主体主要分3个部分:命令接收部分、命令分析部分以及A/D转换部分。其中通信程序中的接收部分的优先级最高,A/D转换部分优先级最低。其总体流程如图8所示。

4.1 单片机的串口设置

为了支持RS-485通信,需要对单片机的串行口进行设置。通信串行口的工作由串行口控制寄存器SCON和电源管理寄存器PCON控制。

串行口控制寄存器SCON用以设定串行口的工作方式、多级通信控制、接收/发送状态,发送/接受中断状态。由于数据采集系统传送的数据是由10位二进制数组成的,所以选择串行口工作方式1,即SM0、SM1设置为“01”,波特率由单片机定时器设置,单片机时钟晶振选为11.059 2 MHz,波特率选为19 200 bit/s,所以设置SMOD=0,RCAP2H=0xff;RCAP2L=0xee[5]。

串口初始化程序如下:

void serial_init ()  {

ctrl=0;

SCON= 0x50;

C_T2=0;

RCLK=1;

TCLK=1;

TMOD=0x20;

RCAP2H=0xff;

RCAP2L=0xee;

TR2=1;/*enable Timer2 run*/

ES=1; REN=1; EA=1; SM2=1; /*SM2=1時收到的第9位为1才置位RI标志*/

}

4.2 A/D转换模块程序的设计

对于A/D转换模块,当要对其读取数据时,先将ADC0808的START和ALE引脚拉低,此时可以将通道选择地址输入ADC0808的ABC地址端口。流程见图9。

对应程序如下:

start=0; //使0808复位

oe=0; //数据三态门不允许输出

adca=0;adcb=0;adcc=0;start=1;//锁定地址

start=0;oe=1;for(i=0;i<=40;i++) {} d[1]=P0;//启动AD转换,并将转换后的数据放入P0

for(i=0;i<=40;i++) {} start=0; oe=0; //复位,准备下次转换

adca=1;adcb=0;adcc=0;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[2]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;

adca=0;adcb=1;adcc=0;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[3]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;

adca=1;adcb=1;adcc=0;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[4]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;

adca=0;adcb=0;adcc=1;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[5]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;

adca=1;adcb=0;adcc=1;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[6]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;

adca=0;adcb=1;adcc=1;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[7]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;

adca=1;adcb=1;adcc=1;start=1; start=0;oe=1;for(i=0;i<=40;i++) {} d[8]=P0;for(i=0;i<=40;i++) {} start=0; oe=0;

地址锁存之后,延时一段再将START拉高,便启动了A/D转换。延时一小段时间后,便可以向A/D转换芯片读取数据。单片机控制A/D转换芯片循环采集每一路的数据,并且存放于数组中。当组态王发来查询指令时,根据数据包中的地址来寻找数组中相应的数据,并将其发送到上位机。

4.3 采集模块与组态王的ASCII协议

①通讯口使用RS-485通讯方式。

上位机所设置的参数必须与单片机中的通讯参数一致,例如,波特率、奇偶校验等。

②设备地址的格式。

格式:**.*。

前面的两个字符是设备地址,范围为0~255,此地址是由单片机中的程序决定。

后面的一个字符是用户设定是否打包,“0”为不打包、“1”为打包,如果用户在定义设备没有确定打包,那么上位机就不会处理下位机的时数打包工作,反之则处理。

③寄存器格式在上位电机的定义。

寄存器名称:Xdd;dd上限:65535;dd下限:0;数据类型:BYTE、UINT、FLOAT。

注意:在上位机中定义变量时,某一个寄存器根据所选数据类型(如BYTE占用一个字节,FLOAT占用四个字节),不同的数据类型会对应不同的寄存器地址,同一数据区内不可交叉定义不同数据类型的变量。BYTE是单片机从地址0开始的数据类型的变量,相应的变量在上位机中定义的寄存器为X0、X1……每个变量占一个字节。UINT是单片机从地址100开始的数据类型的变量,相应的变量的寄存器为X100、X102、X108……每个变量占两个字节。FLOAT是单片机从地址200开始的数据类型的变量。在上位机中定义相应的变量的寄存器为X200、X212……每个变量占四个字节。

④上位机与单片机通讯的命令格式。

读写格式(除字头、字尾外所有字节均为ASCII码):

字头:1字节1个ASCII码,40H。

设备地址: 1字节2个ASCII码,0~255(即0---0x0ffH)。

CR:0x0d[6]。

標志:1字节2个ASCII码。

数据地址是 2字节4个ASCII码,0x0000~0xffff。数据字节数是1字节2个ASCII码,1~100,实际读写的数据的字节数。

⑤组态王发送读命令。

下位机应答:若正常:

例如,读15号仪表,数据地址为15的数据。其中数据为100,数据类型为字节,不打包。上位机所发命令如表1所示。

4.4 采集模块与组态王的通讯

通讯程序需要完成的功能:接收上位机传来的查询命令,需要解析出所查数据类型、变量名、设备地址、数据字节数,完成校验功能。接收上位机命令的流程如图10所示。

当接收到组态王发来的信息的字头时,开始接收后面的数据,并组成一个数组,用于做校验及识别组态王命令。

单片机在完整接收完组态王发来的命令后,便开始分析命令。分析的流程如图11所示。

5 调试

设计完采集模块后,需要对采集模块进行通信测试。COM1口连接RS232/RS485转换器,转换器的AB端分别接到数据采集模块的AB端。组态王软件中支持ASCII协议,所以选用组态王进行通信测试。测试之前要对组态王进行设置,之后设定不同的模拟量,观察能否得到正确的A/D转换结果。

测试两个采集模块,每个采集模块的AB端都并联起来,接到RS232/RS485的转换器上即可。

5.1 组态王设置

因为是在PC上读取下位机数据,下位机与上位机连接所使用的串口为COM1,因此,在组态王中要选择COM1,首先就要对组态王进行设置,设置步骤如下:

①首先新建一个工程,在工程浏览器中,找到设备选项见图12。

②找到COM1,在右边选择新建,选择设备时,找到单片机—通用单片机ASCII—串口,之后选择下一步,见图13。

③给设备设置一个名字,之后串口选择COM1,设备地址中每一个模块都要有自己唯一的地址,用以区分不同的模块。其余的设置选择默认即可。见图14、15。

之后在数据词典中建立相关变量即可。再按照相同的步骤,建立地址为4.0的设备。

5.2 采集模块的调试

对于前四路每个输入口给定不同的电压,第一路输入3 V,第二路输入0 V,第三路输入5 V,第四路输入2.5 V,观察四路的数据。测试结果见图16。

对于A/D,0 V对应的数值为0,5 V对应的数值为255,转换在实际结果中我们可以看到,在输入不同的模拟量之后,不同地址的模块也得到了相同的结果,结果见表3、4。至此,数据采集模块的基本功能已经实现。

6 结语

组态王开发监控系统软件,是新型的工业自动控制系统,它以标准的工业计算机软、硬件平台构成的集成系统取代传统的封闭式系统。对于企业使用组态王可以很方便直观的观察各个传感器发送的数据,而且软件灵活度高,功能强大,易于操作,可以省去很多开发时间,提高效率。因而为配合采集模块,采用了组态王作为监控软件。因为其灵活性极高,可以用在大多数工厂的应用场合。

【参考文献】

【1】陈志延,叶晓燕,赵洁.基于AT89C52的远程温度数据采集系统设计[J].科技广场,2008(08):198-200.

【2】彭春明.基于嵌入式的光伏发电自动跟踪控制系统设计[D].南京:南京理工大学,2012.

【3】张荣.智能电液执行机构控制系统的研究[D].兰州:兰州理工大学,2011.

【4】杭和平.单片机原理与应用[M].北京:机械工业出版社,2008.

【5】杨阳.一种多通道的数据采集系统的硬件设计与研究[J].电子世界,2013(10):128.

【6】雷钧,徐洪胜.基于ASCII的单片机与组态王通讯设计[J].工业控制计算机,2010,23(12):17-19.

【作者简介】蒋雪昀(1995-),男,山东肥城人,从事自动化研究。

猜你喜欢

远程控制数据采集
水冷发射机冷却系统故障分析及解决方案
基于GSM的远程控制系统
CS5463在植栽用电子镇流器老化监控系统中的应用
大数据时代高校数据管理的思考
基于广播模式的数据实时采集与处理系统
通用Web表单数据采集系统的设计与实现
基于开源系统的综合业务数据采集系统的开发研究