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

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

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