戴峻峰
(淮阴工学院 计算机工程学院,江苏 淮安 223003)
数据的远程传输是各种数据采集与处理系统所必须的,而那些应用于有线网络无法覆盖的场合的设备就需要使用一种可靠的无线远程数据传输方案来实现。根据这种远程无线数据传输的特点,可以使用现存的无线通信网来实现。当今3G无线通信技术的发展和数据传输速度的不断提高[1],为远程无线数据的实时传输提供了可能。另外NiosⅡ是Altera公司推出的第二代IP软核处理器,它与其他IP核可构成SoPC(System on a Programmable Chip)系统的主要部分[2]。SoPC技术是借助于以计算机为平台的NiosⅡ开发工具进行开发的,具有设计灵活和软硬件在系统可编程的功能[3]。根据以上特点,如果使用NiosⅡ作为3G无线数据传输的控制器,同时在FPGA上使用SoPC技术还可以实现数据采集与处理电路[4],将会使系统设计与实现更加灵活,同时提高开发效率并且易于升级换代。
远程数据传输主要为了实现控制系统的远程监控和远程数据处理与分析,为了实现远程数据传输的需求,不仅需要数据采集系统还需要相应的远程数据传输通信系统的支持。本设计使用FPGA芯片作为主控芯片,在其中使用SoPC技术构建一个NiosⅡ微处理器作为控制器完成数据传输控制。由3G无线数据传输模块完成无线数据传输,由于模块的接口为RS232协议接口[5],所以在NiosⅡ微处理和3G无线数据传输模块之间需要在FPGA芯片上设计满足3G无线数据传输模块协议要求的UART接口电路,再结合RS232协议电平转换电路即可实现两者之间的电气连接。
运用SoPC Builder工具,在系统中通过IP核,分别使 用 NiosII Processor、On-Chip Memory(RAM or ROM)、Avalon-MM TristateBridge、JTAG UART、Flash Memory(CFI)和SDRAM Controler核构建以上资源。根据外围接口的具体存储器型号选择Flash Memory(CFI)和SDRAM Controler的具体参数。
该部分电路同样使用软核的方式在同一片FPGA中实现。电路构成如图1所示。
图1 3G模块接口电路构成
如图1,在FPGA芯片上使用UART软核构造一个同时包括RTS和CTS信号的异步串行口。UART1的UART_RXD和UART_TXD为与3G模块进行数据传输的数据接收和数据发送引脚,引脚UART_RTS在发送数据前输出有效信号(低电平),请求数据发送给3G模块,3G模块通过UART_CTS应答控制器允许其发送数据或命令,完成数据发送的握手,同时UART_CTS信号还可以用于检测3G模块是否在线。
3G数据传输模块是3G无线通信网的一个调制解调器,上电后需要对其进行初始化,根据实际需求的不同初始化的流程也是不同的,从而实现的功能也就不同,所以需要根据远程数据传输的需求进行相应流程的初始化。
根据3G模块的通信协议,得知其控制命令的发送使用异步串口实现,指令形式为ASCII码字符串,并且以回车换行为结束符。所以在设计3G模块命令发送功能时为了充分提高代码利用率,只是将AT指令码进行字符串预处理,即在原有AT指令的字符串后增加“ ”和“ ”两个字符构成AT指令命令字符串。发送使用通用的串口数据发送函数实现,该函数原型为void Uart1_send_n(unsigned char*ptr,unsigned char n)。模块在上电初始化过程中不但需要使用AT指令进行初始化,而且该模块还会回送一些相应的状态字符串来告知主控设备的当前设备或指令执行状态,如上电时模块会回送COM_READY和^DEEI:0状态信息。每个指令发送后,会送 一个OK以示确认接收正确,并且其每回送一个状态字符串其前后都含有回车换行“ ”和“ ”两个字符。所以根据该特点设计了3G模块命令回送码读函数void G3readCommand(unchar*cm),该函数指令流程如图2所示。该函数每次执行都读取一个夹在两对回车换行之间的一个字符串。
图2 3G模块命令回送码读程序流程
3G模块初始化过程主要调用2.1节所设计的相关函数,根据TCP/IP数据服务应用的初始化需求完成的具体初始化流程如图3所示。
图3 3G模块初始化流程
系统上电,在完成串口的初始化后,开始3G模块的初始化。由于系统刚上电,3G模块可能还没有启动成功,所以需要通过串口读取其上传的状态信息。当3G模块上电启动后可以接受AT指令时,它将上传两条状态信息,分别是“COM_READY”和 “^DEEI:0”,所以当系统读到 “^DEEI:0”信息时才可以向 3G模块发送指令,开始对其初始化。首先需要取消3G模块的自动休眠,而且要及时取消,否则其上电启动后几秒钟之内就会进入休眠状态,其不再能够接受AT指令,从而无法完成3G模块的初始化等工作。因此读到 “^DEEI:0”信息之后,立即通过串口向其发送 AT指令 “T^DSLP=0,0”即可。为了保证3G模块的数据通信的正确性,使用CRC校验方式进行串口数据校验,通过发送“AT+CRC=1”指令开启3G模块的CRC校验功能。之后完成一系列的上报设置后,即可进入3G模块的开机设置。开机设置主要使用 AT 指令“AT+CFUN=5”、“AT+CFUN=1”和“AT+COPS=0”完成SIM卡和协议栈的激活,以及网络的注册。在注册了网络之后,使用指令“AT+CGDCONT=1,"IP","CMNET",,0,0”设置网络服务模式为 CMNET,为后续的数据服务做准备。下面依次使用相应的AT指令完成向网络申请下载上传的带宽、激活TCP/IP应用任务和拨号的工作。最后使用“AT^DIPSTART=1,xxx.xxx.xxx.xxx,yyyyy”与远端服务器xxx.xxx.xxx.xxx端口yyyyy建立连接,该AT指令的第一个参数1表示现在是以TCP协议进行连接请求,如果为数字2则为以UDP协议与服务器进行数据通信。最后一条指令为数据通信开始,参数为发送数据长度,其必须小于4 096。在此之后该3G模块就按照以上初始化的工作方式进行工作,所有通过串口连续送往该模块的数据都将被3G模块以 TCP(或 UDP)方式进行数据发送,不再接收 AT指令。值得注意的是在此情况下如何退出数据发送模式返回AT指令接收模式。当用于接收数据的通信接口(串口)超过100 ms没有收到任何字节且之后连续收3个“+”字符(即“+++”字符串)时,其退出数据传输模式,进入AT指令模式。
在完成了3G模块的初始化,进入数据传输模式后,即可开始使用3G模块进行应用层数据通信。要想完成应用层数据通信,还必须制定相应的应用层通信协议,在客户端系统上编写数据收发程序使用制定的相应应用层协议进行数据收发,同时在服务器端同样必须编写相应的通信和处理程序完成对客户端的数据收发和处理(包括显示和指示)。下面使用电力系统数据采集的应用背景对这三方面进行介绍。
应用层数据传输,主要应该定义相应的包格式,根据不同的包格式进行不同的数据传输和数据应用。接收端根据接收的不同数据包进行不同的数据处理和功能控制。数据包主要可以分为先好协调包、指令包和应用数据包。每个包中定义相应的包类型字段、包长度字段、包内容字段、包校验字段以及包尾标志。包内容字段长度因不同的包类型不同,还可以细分不同的子字段。本文设计的电力系统参数采集装置的协调包主要完成客户端(NiosII系统端)与服务器端数据发送与接收的协调调度工作,包括客户端的IP地址的获取,客户端数据发送的轮询协调等。指令包主要实现客户端控制,客户端根据服务器传输的不同控制指令进行用户用电设备的电能供给和报警控制等。数据传输主要实现客户端监测的数据的上传和服务器对客户端的运行参数的配置。
图4 NiosII系统数据发送流程
在NiosII系统中,根据应用层数据通信协议和3G数据传输的特点,使用C语言进行编程,完成数据收发。数据发送的过程如图4所示。3G模块作为数据传输终端,通过串口与NiosII系统进行数据交换。NiosII系统中的程序主要是针对串口的数据收发设计的。电力参数有很多,有基本的电压、电流、相位、功率等基本信息,也有谐波、简谐波和实时波形数据等细节信息。信息数据有整数类型也有实数类型。本文在数据传输时统一使用同一种数据格式,即16位整数形式进行传输,因此需要进行实数/整数转换。在数据发送之前NiosII系统首先需要从存储器中读取数据采集系统采集到的电力参数数据,之后将读取到的参数数据根据不同类型进行数据拆分和数据转换,再根据应用层协议进行数据封包。最后根据当前服务器请求状态进行数据发送。数据包的发送使用串口数据发送函数void Uart_send_n(SramBuf,num)实现,其第一个参数为协议数据包存储地址,第二个参数为协议数据包总字节数。NiosII系统中的3G数据接收使用中断方式实现,当系统中接收到3G模块发送过来的串口数据时,中断系统自动响应并调用void Uart_ISR(void*context)进行数据读取,之后根据应用层数据通信协议进行解包和功能识别与应用。
远程终端即服务器端主要实现对NiosII系统端的参数、数据的显示和存储以及工作参数配置与控制。服务器端软件主要包括系统界面设计和通信程序设计。本系统软件使用C/S结构,服务器使用固定IP地址,使用Socket编程模式实现,设备终端 (即客户端,NiosII系统端)在工作过程中向服务器提出连接请求,建立连接后,服务器端作为数据传输的控制端,根据实际用户的软件界面上的操作选择某设备终端与服务器端进行数据实时交换、显示和存储。如果系统需要实时保存每个设备终端的电力参数,在建立连接之后即开始数据传输,界面操作只是进行显示切换。不过由于电力参数多,如果用户设备终端较多,则系统服务器压力会比较大。服务器端应用程序可以根据不同的应用需求进行具体设计,实现具体功能。图5是实现的电力参数数据远程采集系统的一个原型系统软件界面。包括文本数据信息的显示,图形矢量信息和波形信息的显示,同时包括各种与电力参数相关的功能界面以及参数设置和控制界面。有效地实现了供电或大功率用电场合的供电参数采集及远程监控。
图5 服务器端应用程序界面
本3G无线网络数据传输系统使用SoPC技术在FPGA上建立一NiosII处理器,根据3G无线网络数据传输应用的需要设计NiosII控制程序,实现了通过3G模块的远程数据传输功能。设计中,针对3G模块的特点设计数据收发程序、模块初始化程序和数据应用层通信协议,为系统的远程数据传输的实现提供了一种相对通用的方法,易于实现各种远程数据传输的应用系统开发。本系统通过实地试验证明系统结构合理,实现灵活,充分满足实际需求,系统运行稳定。Nios II处理器作为本接口电路的主控芯片,既简化了程序设计,又提高了系统性能和开发效率,而且易于升级换代。
[1]谢兵,许金彤.基于3G网络的输电线路防外力破坏智能视频监控系统研究[J].华东电力,2010,38(11):1729-1731.
[2]YIANNACOURAS P,STEFFAN J G,ROSE J.Exploration and customization of FPGA-based soft processors[J].Computer-Aided Design of Integrated Circuits and Systems,2007,26(2):266-277.
[3]周润景,图雅,张丽敏.基于 QuartusII的 FPGA/CPLD数字系统设计实例[M].北京:电子工业出版社,2007.
[4]胡继胜,李洪.基于 SoPC/Nios II的信号发生器设计与实现[J].电子技术应用,2011,37(6):91-94.
[5]王盛学,李著信,何平.基于 3G无线网络的工业监控系统设计[J].电子技术应用,2011,37(8):75-77,81.