注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! • 打開購物車 • 查看留言 • 付款方式 • 聯系我們 |
![]() |
首頁 | 電子入門 | 學單片機 | 免費資源 | 下載中心 | 商品列表 | 象棋在線 | 在線繪圖 | 加盟五一 | 加入收藏 | 設為首頁 |
選擇分類:當前分類——電腦工具 相關聯或者相類似的文章: 用VB調試串口通訊(1013) 自制紅外遙控邏輯分析器(785) 簡單的密碼控制器(774) AT89C51制作的簡單計數器(724) 圖解S51并口下載線的制作(552) 8路紅外遙控開關控制器(可擴展為32路)(500) 一款簡單的熱水器控制電路設計(426) 首頁 前頁 后頁 尾頁 本站推薦: | 用VB調試串口通訊 現有電子秤一臺,使用串口與計算機進行通訊。編寫VB程序來訪問串口,達到讀取電子秤上顯示的數據。該電子秤為BE01型儀表,輸出為RS-232C標準接口,波特率為300-9600、偶校驗、7個數據位、2個停止位。所有字符均發送11位ASCII碼,一個起始位。在VB中與串口通訊需要引入控件MSComm串口通訊控件(在Microsoft Comm Control 6.0中)。具體程序如下:控件簡稱:MSC Dim Out(12) As Byte "接收var中的值 Dim var As Variant "接收MSC.input中的數值 Dim nRece As Integer "計算MSC.inputbuffer的個數 Dim i As Integer, j As Integer "隨即變量,計算循環 **************************************************************************** Private Sub Form_Load() ClearText With MSC .CommPort = 1 "設置Com1為通信端口 .Settings = "9600,E,7,2" "設置通信端口參數 9600赫茲、偶校驗、7個數據位、1個停止位.(這里需要進一步說明的是:.Setting=”BBBB,P,D,S”。 含義是:B:Baud Rate(波特率);P:Parity(奇偶);D:Data Bit;S:Stop Bit) .InBufferSize = 40 "設置緩沖區接收數據為40字節 .InputLen = 1 "設置Input一次從接收緩沖讀取字節數為1 .RThreshold = 1 "設置接收一個字節就產生OnComm事件 End With End Sub **************************************************************************** Private Sub ClearText() Text3.Text = "" Text2.Text = "5" Text1.Text = "" End Sub Private Sub Command1_Click() ClearText " nRece = 0 "計數器清零 With MSC .InputMode = comInputModeBinary "設置數據接收模式為二進制形式 .InBufferCount = 0 "清除接收緩沖區 If Not .PortOpen Then .PortOpen = True "打開通信端口 End If End With End Sub Private Sub MSC_OnComm() DelayTime ‘用來延續時間 ClearText With MSC Select Case .CommEvent "判斷通信事件 Case comEvReceive: "收到Rthreshold個字節產生的接收事件 SwichVar 1 If Out(1) = 2 Then "判斷是否為數據的開始標志 .RThreshold = 0 "關閉OnComm事件接收 End If Do DoEvents Loop Until .InBufferCount >= 3 "循環等待接收緩沖區>=3個字節 " nRece = nRece + 1 For i = 2 To 12 SwichVar i Text1.Text = Text1.Text & Chr(Out(i)) Next Text1.Text = LTrim(Text1.Text) Text2.Text = Text2.Text & CStr(nRece) .RThreshold = 1 "打開MSComm事件接收 Case Else " .PortOpen = False End Select End With End Sub **************************************************************************** Private Sub DelayTime() Dim bDT As Boolean Dim sPrevious As Single, sLast As Single bDT = True sPrevious = Timer (Timer可以計算從子夜到現在所經過的秒數,在Microsoft Windows中,Timer函數可以返回一秒的小數部分) Do While bDT If Timer - sPrevious >= 0.3 Then bDT = False Loop bDT = True End Sub (通信傳輸速率為9600bps,則最快速度1.04ms發送一個字節,儀表每秒發送50幀數據,每幀數據有4個字節,即每秒發送200個字節,平均5.0ms 發送一個字節,連續讀取串口數據時要在程序中添加循環等待程序) Private Sub SwichVar(ByVal nNum As Integer) DelayTime var = Null var = MSC.Input Out(nNum) = var(0) End Sub (設置接收數據模式采用二進制形式,即 InputMode=comInputModeBinary,但用Input屬性讀取數據時,不能直接賦值給 Byte 類型變量,只能通過先賦值給一個 Variant 類型變量,返回一個二進制數據的數組,再轉換保存到Byte類型數變量中。) Private Sub Text1_Change() Text3.Text = CText(Text1.Text) - CText(Text2.Text) End Sub **************************************************************************** Private Function CText(ByVal str As String) As Currency If str <> "" Then CText = CCur(Val(str)) Else CText = 0 End If End Function (儀表每秒發送50幀數據,微機收到一幀完整數據至少需要20 ms時間,然后再進行數據處理。如果微機在下一幀數據接收前即20ms內能將數據計算處理完畢,則接收緩沖區內只會保存有一幀數據,不會存有兩幀以上數據,接收緩沖區的大小不會影響實時監測效果(接收緩沖區>4字節),這時完全可以實現實時監測或實時控制;如果微機在20ms內不能將數據計算處理完畢,接收緩沖區設置得又很大,在數據計算處理完畢前,接收緩沖區內就會保存有兩幀以上數據,而且一次工作時間越長,緩沖區內滯留數據幀就越多,數據采集和數據處理之間產生逐漸增大的額外時間差,當接收緩沖區充滿后,時間差不再增大,固定在某一值,部分數據因不能及時采集到接收緩沖區中,數據產生丟失現象,真實工作情況就會和微機處理結果產生較大的時間差,對實時監測和實時控制很不利,這種情況下接收緩沖區的大小就會影響實時監測效果,所以接收緩沖區設置不能過大,以保證數據處理的實時性。) 小結:本文所用的儀表為梅特勒公司出產的BE01型電子秤,其輸出的每個編碼均為標準的ASCII碼。其他的儀表存在發射的編碼中含有BCD壓縮碼,而且分為高低位,需要接收后對其進行解碼換算,之后還要將高位和低位數字進行相加,即可以將其BCD碼換算成實數。另還存在誤差的可能:判斷最大值,儀表在剛開始工作時有干擾,會傳導一些亂碼,位移傳感器有參數偏差,最大值一般都略大于50毫米,所以取51為極限最大值,取-51為極限最小值。暫時先寫這些,當然其他的情況可以依此類推! 1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。 2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! |
本站協議。
版權信息。
關于我們。
本站地圖。
營業執照。
發票說明。
付款方式。
聯系方式
深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102 E-mail:51dz$163.com($改為@);Tel:(0755)27947428 工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389 |