1系统总体结构
系统体系结构如图1所示。该系统主要包括5大功能区,各功能模块如下:(1)模拟量4~20mA:根据CPU以及外围设备正常工作时所需要的供电电压,选取合适的电阻值,从而获得模拟量4~20mA的电流值作为输入。(2)CPU:中央处理单元,专用于对采集到的数据进行处理的单元模块。本设计中通过I/O口接收输入的模拟量,再通过A/D转化模块将模拟量转为数字量并存储在CPU的Registers中。(3)ModbusData:一旦下位机(从站)接收到上位机(主站)下达的正确命令,则从站立刻将CPU所存储的数据进行处理,遵照ModbusRTU协议规范,形成ModbusADU数据包,通过串口发送出去。(4)上位机:基于C#编写实时显示数据软件。接收来自串口传送的数据包,按照ModbusRTU协议对数据包进行解析,获得要显示的数据。(5)组态软件:使用Espider力控6.0组态软件直观显示数据。
2系统设计
2.1硬件电路设计
2.1.1单片机电源模块AT91SAM7X256是基于32位ARMRISC处理器系列微控制器中的一员,集成有256K字节的高速Flash和64K字节的SRAM和全套外围设备。硬件系统采用24V电源作为输入电压,经过两次电路转换(先由24V转为5V,再由5V通过内部电路转为3.3V)后给AT91SAM7X256管脚VDDIN等提供输入标称值为3.3V的电压,AT91SAM7X256工作后通过VDDOUT管脚输出1.8V电压为各个逻辑部件供电。2.1.2串口通信模块系统采用通用的RS232作为串口通信。通过CPU各个管脚PA3、PA4、RXD1、TXD1和VDD3.3与转换芯片连接,达到串口数据收发的目的。
2.2软件设计
软件设计包含3部分:上位机PC界面设计、组态软件设计以及下位机控制系统设计。2.2.1上位机软件设计上位机软件主要完成本机设置和数据实时显示2个任务。本机设置包括对串口通信的设置:选择串口,设置串口(本系统采用默认的串口属性设置。波特率是9600,数据位是8,停止位是1,无校验位),打开串口。串口打开成功即进入数据显示界面,打开失败则提示重新选择正确串口。实时显示数据的变化,开机按钮起到上载数据的作用,关机按钮则用于停止上位机与下位机的通信。上位机软件设计流程如图2所示。2.2.2组态软件设计在Espider软件中进行组态界面设计。本系统通过串口对变量包括数据库组态和IO设备组态进行设置,选择标准的ModbusRTU协议串行口,并对内存区、偏置和数据格式进行设置,用以在界面上显示相应的实时数据。2.2.3下位机控制系统控制系统完成数据的采集及发送功能。系统上电后进入初始化,一切准备工作就绪后,等待上位机命令,一旦接收到发送来的数据即按命令进行处理,随后将所需数据发送到上位机实时显示。控制系统部分流程如图3所示。
3MODBUS通信协议
目前,Modbus通信协议是工业控制领域最为流行的协议,主要分为3种类型:ModbusRTU、ModbusASCII和ModbusTCP/IP。通信协议栈结构见图4。Modbus协议采用主从工作方式,允许一台主机和多台从机进行通信,从机地址由用户设定。地址范围为1-255,地址0用作广播地址,所有主机把它当作一条命令来执行,从设备不作任何回应[5]。本设计采用ModbusRTU协议,因为RTU模式规定了消息、数据的结构、命令和应答方式。在校验上,RTU模式采用16位CRC校验[6],CRC校验保证了数据传输的正确性。在Modbus协议中,一般CRC产生的校验数据位于ModbusADU的后两个字节,比如在本设计中,主站上位机需要向下位机写入的数据是:0x000x000x000x04,按照图5,先后加入从地址(系统默认为1)、功能码和校验位形成ModbusADU(0x010x030x000x000x000x040x440x09),再通过串口发送给下位机,下位机再对接收到的数据包进行解析,从而得知要执行的动作,并将上位机所需的数据(0x010x030x080x000x1a0x000x1e0x000x090x000x1a0xd70xdd)以同样的方式传送给上位机。收到的数据同样包括站号和功能码,该处功能码是3,最后两字节是校验位,0x08表示返回的数据字节数。数据位采用大端模式,0x000x1a0x000x1e0x000x090x000x1a分别表示十进制数26,30,9,26。根据标准Modbus协议规范(Modbus通用数据帧如图5所示),通过串口通信的ADU(ApplicationDataUnit)最大字节长度为256bytes,所以在通信过程中PDU长度是:256-Serveraddress(1byte从地址)-CRC(2byteCRC校验)=253bytes。Serveraddress:从地址。用于标识和上位机通信的下位机模块,具有唯一性。Functioncode:功能码。它是Modbus协议最重要的标志,位于所需数据之前,表示上位机给下位机下达的命令。下位机接收到数据包后解析出功能码,按照功能码执行上位机分配的任务,随后返回上位机所需数据(同时返回相同的功能码以便上位机识别)。本设计使用的Modb-us协议功能码见表1。
4运行结果
4.1上位机运行界面
通过本机设置选择需要连接的串口,打开串口后点击开机按钮,通过RS232接口与下位机通信,将采集到的数据上传到上位机并进行实时显示,运行界面如图6所示。为了更加直观形象地看到数据的动态显示,通过组态软件设计了组态画面,用于对接收到的数据进行模拟显示,部分运行界面如图7所示。
4.2Modscan测试验证
为了测试接收的数据是否正确,选择Modscan软件进行验证,用以读取寄存器中的数值。经过对数据的分析和验证表明该系统数据采集的正确性,如图8所示。
5结语
本设计实现了对AT91SAM7X256单片机中存储的4~20mA模拟量转换为工程值后的数据采集,并使用组态软件进行仿真。对运行结果的分析表明,上位机操作便捷、运行良好。系统充分运用了ModbusRTU协议进行数据传输,协议中的CRC校验减少了数据出错,这一点进一步说明了Modbus协议在工业控制领域中的优势。
作者:朱姣 单位:西安石油大学计算机学院