摘 要: 設計了電源監控系統,利用485總線構建上位機PC機與多臺TI公司的DSP TMS320F2812的連接,利用VB.NET編寫了串口通信程序和Modbus通信協議,并利用多線程技術實時對多臺DSP數據進行處理和狀態顯示。搭建平臺,實驗證明滿足上位機對多臺DSP數據傳輸的實時性和準確性。
關鍵詞: .NET; 電源監控; 485總線;多線程
隨著特種電源用于大規模的生產,對特種電源的集中監控成為迫切需要。特種電源參數多,數據傳輸量大。一方面上位機在完成對多臺電源的狀態詢問的同時要保證控制指令及時傳輸到下位機,另一方面上位機要實時地顯示電源參數并繪制運行曲線。本設計采用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控制器。實驗證明,本系統滿足數據傳輸的實時性和準確性,符合特種電源監控系統的實際要求。
參考文獻
[1] 陽憲惠,工業數據通信與控制網絡[M].北京:清華大學出版社,2003.
[2] TROELSEN A..NET 3.5與VB 2008高級編程[M].北京:清華大學出版社, 2009.
[3] 蘇奎峰.TMS320X281xDSP原理及C程序開發[M]. 北京:北京航空航天大學出版社, 2008.
[4] Modicon. Modbus Protocol Reference Guide[Z]. 1996.6