摘 要: 設計了電源監(jiān)控系統(tǒng),利用485總線構建上位機PC機與多臺TI公司的DSP TMS320F2812的連接,,利用VB.NET編寫了串口通信程序和Modbus通信協(xié)議,,并利用多線程技術實時對多臺DSP數(shù)據(jù)進行處理和狀態(tài)顯示。搭建平臺,,實驗證明滿足上位機對多臺DSP數(shù)據(jù)傳輸?shù)膶崟r性和準確性,。
關鍵詞: .NET; 電源監(jiān)控,; 485總線,;多線程
隨著特種電源用于大規(guī)模的生產,對特種電源的集中監(jiān)控成為迫切需要,。特種電源參數(shù)多,,數(shù)據(jù)傳輸量大。一方面上位機在完成對多臺電源的狀態(tài)詢問的同時要保證控制指令及時傳輸?shù)较挛粰C,,另一方面上位機要實時地顯示電源參數(shù)并繪制運行曲線,。本設計采用485總線,下位機電源控制器基于TI公司的DSP TMS320F2812,,上位機與下位機通信采用VB.NET的SerialPort串行通信類,,軟件的編寫在VS2008環(huán)境下實現(xiàn)。
1 監(jiān)控系統(tǒng)結構
監(jiān)控系統(tǒng)結構(如圖1)包括:上位PC機、多臺DSP,、232/485轉換口,、并聯(lián)2個120 Ω的終端電阻、屏蔽雙絞線,。485總線連接采用半雙工通信方式,,以上位PC機為主機、多臺DSP為從機的主從式結構?,F(xiàn)場控制單元以DSP為核心,一方面負責電源各項數(shù)據(jù)的采集與處理,控制電源的自動運行;另一方面接收上位機的控制命令,對命令進行解析判斷后及時調整電源的運行參數(shù),。上位機通過232/485轉換口連接到485總線上,進行狀態(tài)數(shù)據(jù)和控制命令的雙向傳輸,通過上位機軟件實時獲取現(xiàn)場電源的運行數(shù)據(jù)和參數(shù),而且可以在線修改工藝參數(shù)和遠程控制電源運行,。
2 監(jiān)控軟件設計
監(jiān)控軟件設計包括通信協(xié)議的制定,,上位機軟件的編寫和DSP程序的設計。通信協(xié)議除了制定上位機和DSP通信的數(shù)據(jù)幀格式,,還規(guī)定了數(shù)據(jù)收發(fā)時狀態(tài)的轉換機制,。上位機程序利用SerialPort類和多線程技術完成與多臺DSP的通信,同時利用VB.NET中多線程技術和客戶自定義事件實現(xiàn)通信,,同時進行數(shù)據(jù)處理,、狀態(tài)顯示、曲線繪制等功能,。
2.1 通信協(xié)議
因為系統(tǒng)采用一主多從的結構,,所以通信采用Modbus協(xié)議實現(xiàn)。Modbus協(xié)議包括ASCII和RTU,,考慮到所需傳輸?shù)臄?shù)據(jù)量比較大,本設計使用RTU協(xié)議,。協(xié)議棧的實現(xiàn)是基于狀態(tài)機的操作,,狀態(tài)轉換如圖2所示。
\
為了滿足基本的監(jiān)控目標,,本設計實現(xiàn)了Modbus-RTU協(xié)議的基本讀寫功能,,也就是功能號為03 10的功能,其功能說明如表1所示,。
基本的協(xié)議幀應答數(shù)據(jù)如表2,、表3所示。
2.2軟件設計
上位機軟件結構如圖3所示,。
程序初始化時,,從數(shù)據(jù)庫中讀取設備參數(shù)列表,根據(jù)讀取的設備個數(shù)實例化設備類,,新建各設備的對象,。每臺設備對象是在VB2008設計的自定義控件,每一個控件的數(shù)據(jù)處理和顯示單元是一個獨立的線程。每臺設備下發(fā)數(shù)據(jù)和接收數(shù)據(jù)都要經(jīng)過先進先出集合SendQueue和RecQueue,。從發(fā)送集合SendQueue中取出數(shù)據(jù),,通過串行通信類SerialPort與下位機進行數(shù)據(jù)通信,從接收集合RecQueue中取出數(shù)據(jù)進行相應設備的狀態(tài)顯示,。
2.2.1 通信程序設計
通信部分采用兩個線程,。一個是發(fā)送線程,從發(fā)送集合SendQueue中取出數(shù)據(jù),,并從串行端口中發(fā)送數(shù)據(jù),在發(fā)送結束后添加接收數(shù)據(jù)事件(等待數(shù)據(jù)的接收),。另一個是數(shù)據(jù)處理線程,從接收集合RecQueue中取出接收到的數(shù)據(jù),,判斷DSP設備的地址,,然后以產生事件的形式通知對相應設備數(shù)據(jù)的處理。
(1) SerialPort初始化
SerialPort通信參數(shù)的初始化在主窗體加載中完成,,程序如下:
port = New System.IO.Ports.SerialPort()
port.PortName =“com1” //打開串行端口1
port.BaudRate=9 600 //設置波特率為9 600 b/s
port.DataBits=8 //8位數(shù)據(jù)位
port.StopBits=System.IO.Ports.StopBits.One //1位停止位
port.Parity=System.IO.Ports.Parity.None //無奇偶校驗
port.Open() //打開串行端口1
(2)數(shù)據(jù)接收事件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
//獲取數(shù)據(jù)緩沖區(qū)數(shù)據(jù)的字節(jié)數(shù)
Dim recData as Byte(Bytes-1) //接收數(shù)據(jù)數(shù)組
If Bytes > 0 Then
port.Read(recData, 0, Bytes)
//讀取數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)到數(shù)組
End If
2.2.2 上位機程序設計
(1)多線程技術
首先根據(jù)建立的設備對象數(shù)量,為每個對象建立一個獨立的線程,用于負責該設備的所有實時通信,、實時狀態(tài)顯示和數(shù)據(jù)庫讀寫操作,接著啟動各線程。采用多線程平行處理后,程序具有了很好的可定制性,只要根據(jù)實際需求修改線程數(shù)量即可實現(xiàn)對不同設備數(shù)量系統(tǒng)的監(jiān)控,既簡單又可靠,。
(2) 并發(fā)性問題
因為上位機通過一個串行端口與多臺DSP通信,,每臺設備發(fā)送數(shù)據(jù)和數(shù)據(jù)處理都需要訪問SendQueue和RecQueue,所以須要避免在同一時刻訪問集合而產生的沖突,。本設計使用VB的SynLock關鍵字,,使用該關鍵字可以定義必須在線程之間同步的一定范圍的語句。通過執(zhí)行該操作,,將鎖住該集合,,其他設備的數(shù)據(jù)要想訪問該集合,必須等待占用此集合的操作結束并釋放此鎖后才能進行,,這樣就避免了同時操作集合而引發(fā)的沖突,。
(3) 客戶自定義事件
因為接收到的數(shù)據(jù)需要顯示、數(shù)據(jù)處理,、保存數(shù)據(jù)庫,、繪制曲線等工作,如何保證這些工作能夠并行地開展成為要解決的關鍵問題,。本設計采用VB的客戶自定義事件,,把上述工作都放入到事件的集合中,當產生事件時,,就對集合中的每一項工作進行并行處理,,這樣即實現(xiàn)了“一主多播”。
2.2.3 DSP程序設計
DSP在執(zhí)行其他任務的同時能及時上傳數(shù)據(jù)和接收上位機數(shù)據(jù),,提高工作效率,。F2812采用中斷發(fā)送,、中斷接收方式。下面僅以發(fā)送為例,,流程圖如圖4所示,。
通過對監(jiān)控軟件的設計,搭建485總線,,用PC電腦連接多臺DSP控制器,。實驗證明,本系統(tǒng)滿足數(shù)據(jù)傳輸?shù)膶崟r性和準確性,,符合特種電源監(jiān)控系統(tǒng)的實際要求,。
參考文獻
[1] 陽憲惠,工業(yè)數(shù)據(jù)通信與控制網(wǎng)絡[M].北京:清華大學出版社,2003.
[2] TROELSEN A..NET 3.5與VB 2008高級編程[M].北京:清華大學出版社, 2009.
[3] 蘇奎峰.TMS320X281xDSP原理及C程序開發(fā)[M]. 北京:北京航空航天大學出版社, 2008.
[4] Modicon. Modbus Protocol Reference Guide[Z]. 1996.6