设计了电源监控系统,利用485总线构建上位机PC机与多台TI公司的DSP TMS320F2812的连接,利用VB.NET编写了串口通信程序和Modbus通信协议,并利用多线程技术实时对多台DSP数据进行处理和状态显示。搭建平台,实验证明满足上位机对多台DSP数据传输的实时性和准确性。
随着特种电源用于大规模的生产,对特种电源的集中监控成为迫切需要。特种电源参数多,数据传输量大。一方面上位机在完成对多台电源的状态询问的同时要保证控制指令及时传输到下位机,另一方面上位机要实时地显示电源参数并绘制运行曲线。本设计采用485总线,下位机电源控制器基于TI公司的DSP TMS320F2812,上位机与下位机通信采用VB.NET的SerialPort串行通信类,软件的编写在VS2008环境下实现。
1 监控系统结构
监控系统结构(如图1)包括:上位PC机、多台DSP、232/485转换口、并联2个120Ω的终端电阻、屏蔽双绞线。485总线连接采用半双工通信方式,以上位PC机为主机、多台DSP为从机的主从式结构。现场控制单元以DSP为核心,一方面负责电源各项数据的采集与处理,控制电源的自动运行;另一方面接收上位机的控制命令,对命令进行解析判断后及时调整电源的运行参数。上位机通过232/485转换口连接到485总线上,进行状态数据和控制命令的双向传输,通过上位机软件实时获取现场电源的运行数据和参数,而且可以在线修改工艺参数和远程控制电源运行。
2 监控软件设计
监控软件设计包括通信协议的制定,上位机软件的编写和DSP程序的设计。通信协议除了制定上位机和DSP通信的数据帧格式,还规定了数据收发时状态的转换机制。上位机程序利用SerialPort类和多线程技术完成与多台DSP的通信,同时利用VB.NET中多线程技术和客户自定义事件实现通信,同时进行数据处理、状态显示、曲线绘制等功能。
2.1 通信协议
因为系统采用一主多从的结构,所以通信采用Modbus协议实现。Modbus协议包括ASCII和RTU,考虑到所需传输的数据量比较大,本设计使用RTU协议。协议栈的实现是基于状态机的操作,状态转换如图2所示。
为了满足基本的监控目标,本设计实现了Modbus-RTU协议的基本读写功能,也就是功能号为03 10的功能,其功能说明如表1所示。
基本的协议帧应答数据如表2、表3所示。
2.2软件设计
上位机软件结构如图3所示。
程序初始化时,从数据库中读取设备参数列表,根据读取的设备个数实例化设备类,新建各设备的对象。每台设备对象是在VB2008设计的自定义控件,每一个控件的数据处理和显示单元是一个独立的线程。每台设备下发数据和接收数据都要经过先进先出集合SendQueue和RecQueue。从发送集合SendQueue中取出数据,通过串行通信类SerialPort与下位机进行数据通信,从接收集合RecQueue中取出数据进行相应设备的状态显示。
2.2.1 通信程序设计
通信部分采用两个线程。一个是发送线程,从发送集合SendQueue中取出数据,并从串行端口中发送数据,在发送结束后添加接收数据事件(等待数据的接收)。另一个是数据处理线程,从接收集合RecQueue中取出接收到的数据,判断DSP设备的地址,然后以产生事件的形式通知对相应设备数据的处理。
(1) SerialPort初始化
SerialPort通信参数的初始化在主窗体加载中完成,程序如下: port = New System.IO.Ports.SerialPort() port.PortName =“com1” //打开串行端口1 port.BaudRate=9 600 //设置波特率为9 600 b/s port.DataBits=8 //8位数据位 port.StopBits=System.IO.Ports.StopBits.One //1位停止位 port.Parity=System.IO.Ports.Parity.None //无奇偶校验 port.Open() //打开串行端口1
(2)数据接收事件DataReceived
AddHandler port.DataReceived, AddressOf Me.DataRec //添加接收事件 //接收事件处理程序 Private Sub DataRec(ByVal sender As Object,ByVal e As System.IO.Ports. SerialDataReceivedEventArgs) Dim Bytes As Integer Bytes = port.BytesToRead //获取数据缓冲区数据的字节数 Dim recData as Byte(Bytes-1) //接收数据数组 If Bytes > 0 Then port.Read(recData, 0, Bytes) //读取数据缓冲区的数据到数组 End If
2.2.2 上位机程序设计
(1)多线程技术
首先根据建立的设备对象数量,为每个对象建立一个独立的线程,用于负责该设备的所有实时通信、实时状态显示和数据库读写操作,接着启动各线程。采用多线程平行处理后,程序具有了很好的可定制性,只要根据实际需求修改线程数量即可实现对不同设备数量系统的监控,既简单又可靠。
(2) 并发性问题
因为上位机通过一个串行端口与多台DSP通信,每台设备发送数据和数据处理都需要访问SendQueue和RecQueue,所以须要避免在同一时刻访问集合而产生的冲突。本设计使用VB的SynLock关键字,使用该关键字可以定义必须在线程之间同步的一定范围的语句。通过执行该操作,将锁住该集合,其他设备的数据要想访问该集合,必须等待占用此集合的操作结束并释放此锁后才能进行,这样就避免了同时操作集合而引发的冲突。
(3) 客户自定义事件
因为接收到的数据需要显示、数据处理、保存数据库、绘制曲线等工作,如何保证这些工作能够并行地开展成为要解决的关键问题。本设计采用VB的客户自定义事件,把上述工作都放入到事件的集合中,当产生事件时,就对集合中的每一项工作进行并行处理,这样即实现了“一主多播”。
2.2.3 DSP程序设计
DSP在执行其他任务的同时能及时上传数据和接收上位机数据,提高工作效率。F2812采用中断发送、中断接收方式。下面仅以发送为例,流程图如图4所示。
通过对监控软件的设计,搭建485总线,用PC电脑连接多台DSP控制器。实验证明,本系统满足数据传输的实时性和准确性,符合特种电源监控系统的实际要求。 |