当前位置:编程学习 > VB >>

VS2010 串口通信


 各位大位,小弟最近刚开始着手弄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校验。请高手们不吝赐教。  
VS2005  VS2010  串口 --------------------编程问答-------------------- http://download.csdn.net/detail/veron_04/4037248 --------------------编程问答-------------------- VB.NET2008的串口工程 --------------------编程问答-------------------- 恩恩,谢谢。对了,你们有没有用VB上位机驱动打印机打印需要打印 数据? --------------------编程问答--------------------
引用 3 楼 u011465497 的回复:
恩恩,谢谢。对了,你们有没有用VB上位机驱动打印机打印需要打印 数据?


没有。 --------------------编程问答-------------------- 除
补充:VB ,  控件
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,