各位大位,小弟最近剛開始著手弄VS2010做上位機,苦于在網上也沒能找到相關例程來學習,現在只能在此求助于各位高手了。
我現在把我上位機串口通信的要求敘述如下,希望高手幫忙。
1、上下位機進行串口通信,資料型別為16進制資料;
2、當上位機接收到下位機資料時,便進行串口中斷接收函式,同時讀取通信緩沖區內的位元組個數,并將緩沖內的資料讀出并保存至指定的資料中。
現在將我的代碼貼上來,和大家一起分享下,希望能指點我的錯誤。
因為現在我在家學車,不在實驗室。所以我所做的上位機程式,希望大家能幫我測驗或者檢查一下,感激不盡了。
'定義RS232串口收發陣列
Dim txbuf(7) As Byte
Dim rxbuf(7) As Byte
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'==========================================================================
'=========================================================================
'串口1初始化配置-------------------------------------------------------------
RS232.Close()
RS232.PortName = "COM1"
RS232.BaudRate = 9600 '波特率
RS232.DataBits = 8 '資料位長度
RS232.Parity = IO.Ports.Parity.None '無校驗
RS232.StopBits = IO.Ports.StopBits.One '1個停止位
RS232.Open()
txbuf(0) = &H1
txbuf(1) = &H2
txbuf(2) = &H3
txbuf(3) = &H4
txbuf(4) = &H5
txbuf(5) = &H6
txbuf(6) = &HBA
txbuf(7) = &HDE
CRC16(txbuf)
‘Timer1.Enabled = True
End Sub
這部分是我的串口接收代碼,我接收的是16進制資料
'RS232通信---串口中斷接收資料
Private Sub RS232_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles RS232.DataReceived
RS232.Read(rxbuf, 0, 8)
RS232.DiscardInBuffer() '丟棄串口接識訓沖區中的資料
If (CRC16(rxbuf) = 0) Then
End If
End Sub
CRC校驗代碼
'CRC校驗函式
Function CRC16(ByVal data_in() As Byte) As Integer
Dim CRC16Lo As Byte, CRC16Hi As Byte 'CRC暫存器
Dim CL As Byte, CH As Byte '多項式碼&HA001
Dim SaveHi As Byte, SaveLo As Byte
Dim i As Integer
Dim Flag As Integer
CRC16Lo = &HFF
CRC16Hi = &HFF
CL = &H1
CH = &HA0
For i = 0 To UBound(data_in)
CRC16Lo = CRC16Lo Xor data_in(i) '每一個資料與CRC暫存器進行異或
For Flag = 0 To 7
SaveHi = CRC16Hi
SaveLo = CRC16Lo
CRC16Hi = CRC16Hi \ 2 '高位右移一位
CRC16Lo = CRC16Lo \ 2 '低位右移一位
If ((SaveHi And &H1) = &H1) Then '如果高位位元組最后一位為1
CRC16Lo = CRC16Lo Or &H80 '則低位位元組右移后前面補1
End If '否則自動補0
If ((SaveLo And &H1) = &H1) Then '如果LSB為1,則與多項式碼進行異或
CRC16Hi = CRC16Hi Xor CH
CRC16Lo = CRC16Lo Xor CL
End If
Next Flag
Next i
Dim ReturnData(1) As Byte
ReturnData(0) = CRC16Hi 'CRC高位
ReturnData(1) = CRC16Lo 'CRC低位
CRC16 = ReturnData(0) * 256 Or ReturnData(1)
End Function
以上就是我的串口發收代碼,接收下位機發送上來的資料,利用串口中斷方式接收16進制資料,另加接收CRC校驗。請高手們不吝賜教。
uj5u.com熱心網友回復:
http://download.csdn.net/detail/veron_04/4037248uj5u.com熱心網友回復:
VB.NET2008的串口工程uj5u.com熱心網友回復:
恩恩,謝謝。對了,你們有沒有用VB上位機驅動列印機列印需要列印 資料?uj5u.com熱心網友回復:
沒有。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/147769.html
標籤:控件
上一篇:求一個演算法代碼
