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