摘 要:在現(xiàn)代工業(yè)控制領(lǐng)域中,控制器作為下位機完成現(xiàn)場各種信號和數(shù)據(jù)的采集、運算和控制,上位機則可提供人機交互界面,實現(xiàn)數(shù)據(jù)的處理以及現(xiàn)場數(shù)據(jù)的實時顯示等監(jiān)視和遠程控制等功能。本文介紹了利用VB.NET實現(xiàn)BC8000總線端子控制器與上位機之間串行通訊的原理及方法。
關(guān)鍵詞:VB.NET;串口通訊;SerialPort控件;BC8000
[align=center]Study on COM port Communication between BC8000 and PC Based on VB.NET
DENG Hua-chang,F(xiàn)ANG Kang-ling,LIANG Kai,ZHANG Peng[/align]
Abstract:In the fields of modern industrial controlling,PLC is used to collect,calculate and control every kind of signals and data,while the host computer can provide mutual interface,realizing the functions of managing data and long-distance controlling.This paper introduces the theory and way on the COM port communication between BC8000 and host computer based on VB.NET.
Key Words:VB.NET;COM port communication;SerialPort;BC8000
PC機和控制器之間的通信問題一直是業(yè)界的熱門話題,它廣泛應(yīng)用于工業(yè)控制系統(tǒng)、智能檢測系統(tǒng)、數(shù)據(jù)采集系統(tǒng)等。PC機與控制器之間通常采用兩種通信方式:并行通信和串行通信。并行通信是指將待發(fā)送數(shù)據(jù)的各位同時傳送。串行通信則將數(shù)據(jù)一位一位地按順序傳送。并行通信雖然傳輸效率高、速度快,但可靠性差,所需硬件設(shè)備復雜,不適于長距離通信,所以一般只適用于要求實時性強,傳送速率較高的系統(tǒng)中,實用面較窄。相比之下,串行通信雖然速度較慢、效率較低,但可靠性好,簡單易實現(xiàn),傳輸距離較長,所以被廣泛應(yīng)用于多種場合,特別適合于計算機與控制器之間的通信。
目前實現(xiàn)串口通信的軟件主要有VC++,VB6.0等。VC++對畫面的處理是較差的一環(huán),而且培養(yǎng)一個熟練的VC++設(shè)計師可能需要花費很長的時間。VB6.0具有簡單易用,學習時間較短,畫面變化豐富等優(yōu)點,但是不適合執(zhí)行速度高,通信效率要求嚴格的自動監(jiān)控系統(tǒng)程序。VB.NET是Microsoft最新推出的一種集成開發(fā)環(huán)境,它具有功能強大、界面友好、32位的真正面向?qū)ο?、易學易用等特點,受到廣大用戶的青睞,被廣泛運用于各個領(lǐng)域。本文將介紹如何利用VB.NET來實現(xiàn)BC8000與PC的串口通信。
1 BC8000的串口通訊
1.1 BC8000簡介
BC8000是德國BECKHOFF公司生產(chǎn)的一種總線端子控制器,總線端子控制器即帶PLC功能的總線耦合器 。BC8000控制器長約100mm,寬約47mm,高約68mm,總線端子寬約12mm,最多可以擴展64個總線端子,體積很小,對占用場地有嚴格要求
的特殊環(huán)境BC8000有著無可比擬的優(yōu)勢,它也可以很方便的嵌入到各種儀器儀表中。因其結(jié)構(gòu)緊湊、安裝方便,而且性能穩(wěn)定、價格便宜而得到廣泛的應(yīng)用。BC8000上自帶一個外設(shè)端口(RS485),經(jīng)過RS485/232轉(zhuǎn)換器可直接與PC連接進行數(shù)據(jù)傳輸。如圖1:
[align=center]

圖1 PC與BC8000連接圖[/align]
1.2 通訊設(shè)置
BC8000的RS485通訊模式的初始化是通過KS2000對控制器的table 001的寄存器32,33,34中的通訊參數(shù)進行修改來設(shè)置的波特率、奇偶校驗、停止位和數(shù)據(jù)位數(shù):
寄存器32中設(shè)定波特率:0:38400,1:19200,2:9600,3:57600,4:1200,5:2400,6:4800。
寄存器33中設(shè)定模式:0:7個數(shù)據(jù)位, 偶校驗,1:7個數(shù)據(jù)位, 奇校驗,2:8個數(shù)據(jù)位, 無校驗,3:8個數(shù)據(jù)位, 偶校驗,4:8個數(shù)據(jù)位,奇校驗。
寄存器34設(shè)定停止位:0:1個停止位,1:2個停止位。
配置RS485通訊模式后,在TwinCAT的Library Manager中添加串口通訊庫,調(diào)用以下指令就可以進行數(shù)據(jù)的收發(fā) :
?。?)發(fā)送數(shù)據(jù)指令SendData。可以利用此指令方便地發(fā)送數(shù)據(jù),可以發(fā)送一個或多個字節(jié),最多可發(fā)送255個字節(jié)數(shù)據(jù)。
?。?)接收數(shù)據(jù)指令ReceiveData??梢岳么酥噶罘奖愕亟邮招畔?,可以接收一個或多個字節(jié),最多可接收255個字節(jié)數(shù)據(jù)。
編程完畢后將BC8000的地址選擇開關(guān)設(shè)為99(主站模式)即可進行數(shù)據(jù)的傳輸。
2 串口通信在VB.NET平臺下的實現(xiàn)
Visual Basic.NET是Microsoft Visual Studio.NET套件中主要組成部分之一,是目前微軟.NET架構(gòu)下最具活力的編程語言之一。它是在VB6.0的基礎(chǔ)上增加了許多新的面向?qū)ο蟮奶匦?,諸如封裝、繼承、面向?qū)ο蟮龋@大大加強了VB的功能。VB.NET支持面向?qū)ο缶幊?、多線程處理、結(jié)構(gòu)化異常處理等技術(shù),能有效的保證軟件的穩(wěn)定性和高效性。同時VB.NET在微軟.NET架構(gòu)下能方便高效地實現(xiàn)與SQL Server數(shù)據(jù)庫的連接和操作。因此利用VB.NET實現(xiàn)串口通信具有現(xiàn)實意義。
2.1 VB.NET通信實現(xiàn)方法
利用VB.NET實現(xiàn)串口通信常用的方法有兩種:一種是自己用API函數(shù)編寫串口通信 ,但是程序復雜,可以完成更強大的功能,適合深度開發(fā);另一種是直接使用控件。在VS2005以前的版本中,串行通信控件是Mscomm,而在VS2005中被升級為SerialPort。該控件具有豐富的與串行通信密切相關(guān)的屬性及事件,提供了對串口的各種操作,且操作方便,簡單易行。
2.2 SerialPort控件屬性
此控件所在的類是Microsoft最新在Microsoft .Net Framework 2.0中引進的。下面介紹此控件的主要屬性和驅(qū)動事件:
BaudRate:設(shè)置波特率。
DataBits:數(shù)據(jù)位。
Modifiers:繼承屬性控制,其枚舉值為Public、Protected、Protected Friend、Friend、Private。
Parity:檢驗性,其枚舉值為None、Odd、Even、Mark、Space。
PortName:串口號,對應(yīng)Mscomm控件中的CommPort。
Read:從緩沖區(qū)讀數(shù)據(jù).對應(yīng)Mscomm控件中的Input。
ReadBufferSize:接收緩沖區(qū)的大小。
ReceivedBytesThreshold:接收緩沖區(qū)中接收到一個字符。就產(chǎn)生一次DataReceived事件。
StopBits:停止位。
Write:向緩沖區(qū)寫數(shù)據(jù)。
WriteBufferSize:發(fā)送緩沖區(qū)的大小。
DataReceived事件:是SerialPort最主要的事件,可以在此事件中對數(shù)據(jù)進行處理。
2.3 上位機的通訊程序設(shè)計
由于VB.NET編程語言具有非常方便的界面設(shè)計特性,可以快速地制作風格一致的友好的窗體界面 。程序員在利用SerialPort控件時,只需設(shè)置、監(jiān)視其屬性和事件,即可完成對串行口的初始化和數(shù)據(jù)的傳輸工作。通過標準RS232串行接口將現(xiàn)場數(shù)據(jù)實時傳送到PC,并實現(xiàn)現(xiàn)場數(shù)據(jù)顯示的功能。主要程序示例如下:
Public Class Form1
Dim buffB(50) As Byte ‘串口接收緩沖區(qū)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.BaudRate = 9600 ‘波特率設(shè)定
SerialPort1.PortName = "com1" ‘端口設(shè)定
If SerialPort1.IsOpen = False Then SerialPort1.Open() ‘打開串口
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
SerialPort1.Read(buffB, 0, 50)
BeginInvoke(New EventHandler(Address Of function), SerialPort1.BytesToRead())‘接收字符串
End Sub
Sub function(ByVal sender As System.Object, ByVal e As System.EventArgs)
TextBox1.Text= Encoding.ASCII.GetString(buffB, 0, 30) ‘顯示
End Sub
End Class
3 應(yīng)用舉例
在貴州水鋼二軋廠的數(shù)據(jù)監(jiān)控系統(tǒng)中,需要通過串口采集所軋鋼材的種類及數(shù)目等實時數(shù)據(jù),并對采集的數(shù)據(jù)進行處理、記錄等,為操作者安排生產(chǎn)提供依據(jù)。運用上述系統(tǒng)進行設(shè)計,運行結(jié)果如下圖2:
[align=center]

圖2 數(shù)據(jù)監(jiān)控系統(tǒng)運行畫面[/align]
4 結(jié)語
本文利用VB.NET實現(xiàn)了BC8000總線端子控制器與上位機之間的串行通訊,并通過一個實際應(yīng)用說明該方法是行之有效的。可編程邏輯控制器與上位機之間串行通訊的應(yīng)用,可以有效地提高控制系統(tǒng)的整體自動化程度。為小規(guī)模自動控制系統(tǒng)的數(shù)據(jù)傳輸提供了一條有效的解決途徑。
參考文獻
[1] RS485 Bus coupler BC8000[S].BECKHOFF New Automation Technology. 2006.
[2] 田原,李素若等. VB.NET程序設(shè)計[M].北京:北京交通大學出版社,2006.
[3] 范逸之,廖錦棋等. Visual Basic.NET自動化系統(tǒng)監(jiān)控—RS-232串行通信[M].北京:中國青年出版社,2002.
[4] 陳健波,施東文,奚旦立等.基于VB.NET的礦井廢水監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J].煤礦機械.2004,10:57-59.
[5] 黃衛(wèi)華,方康玲,周紅軍等.基于組態(tài)王和VB的工業(yè)遠程監(jiān)控系統(tǒng)[J].冶金自動化.2005,2:60:62