求助VB实现串口通信 点击:2236 | 回复:11



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2005-05-20 13:26:00
楼主
本人想用VB6.0实现串口通信,将RS422转接成RS232,输入的数据一条是168位,都是ASCII码的形式输入的,应该如何实现,请高手指教



zqbai

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 82回
  • 年度积分:0
  • 历史总积分:124
  • 注册:2003年8月21日
发表于:2005-10-31 14:54:00
1楼
找本书看看啦,这么多如何说起

蒋祝乾

  • 精华:0帖
  • 求助:0帖
  • 帖子:47帖 | 480回
  • 年度积分:0
  • 历史总积分:1129
  • 注册:2003年5月20日
发表于:2005-12-20 19:44:00
2楼
推荐一本书给你看看<VISUAL BASIC与RS232串行通信控制>,清华大学出版社出版的,很不错的.

tobetter

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2006年1月03日
发表于:2006-01-03 11:09:00
3楼
用转换模块将422转换成232后,用VB编程。你可以用控件MSCOMM进行编程。在你的FORM中加入MSCOMM后,在初始化中对MSCOMM进行初始化。完成后添件ONCOMM事件。
Private Sub MainMSComm_OnComm()
On Error Resume Next
    If MainMSComm.PortOpen = False Then
        AddInfo DebugInfo, "串口没有打开", RunInfoList
        Exit Sub
    End If
    Select Case MainMSComm.CommEvent
    ' Handle each event or error by placing
    ' code below each case statement
    ' Errors
        Case comEventBreak      ' A Break was received.
        Case comEventFrame      ' Framing Error
        Case comEventOverrun    ' Data Lost.
        Case comEventRxOver     ' Receive buffer overflow.
        Case comEventRxParity   ' Parity Error.
        Case comEventTxFull     ' Transmit buffer full.
        Case comEventDCB        ' Unexpected error retrieving DCB]
    ' Events
        Case comEvCD        ' Change in the CD line.
        Case comEvCTS       ' Change in the CTS line.
        Case comEvDSR       ' Change in the DSR line.
        Case comEvRing      ' Change in the Ring Indicator.
        Case comEvReceive   ' Received RThreshold # of
                            ' chars.            
                            '接收到一个字符产生的消息,判断是否是数据的开始,如果是继续接收168个,如果不是直接退出等待下一个数据
        Case comEvSend      ' There are SThreshold number of
                            ' characters in the transmit
                            ' buffer.
        Case comEvEOF       ' An EOF charater was found in
                            ' the input stream
    End Select
End Sub

徐松惠

  • 精华:1帖
  • 求助:0帖
  • 帖子:13帖 | 33回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2004年4月26日
发表于:2006-01-25 10:54:00
4楼

cn188

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 33回
  • 年度积分:21
  • 历史总积分:315
  • 注册:2005年8月29日
发表于:2006-04-22 10:01:00
5楼
tobetter的方法可行

随风飞规范化

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 108回
  • 年度积分:0
  • 历史总积分:166
  • 注册:2006年3月24日
发表于:2006-04-22 20:23:00
6楼
  用转换模块将422转换成232后,用VB编程。你可以用控件MSCOMM进行编程。在你的FORM中加入MSCOMM后,在初始化中对MSCOMM进行初始化。完成后添件ONCOMM事件。
Private Sub MainMSComm_OnComm()
On Error Resume Next
    If MainMSComm.PortOpen = False Then
        AddInfo DebugInfo, "串口没有打开", RunInfoList
        Exit Sub
    End If
    Select Case MainMSComm.CommEvent
    ' Handle each event or error by placing
    ' code below each case statement
    ' Errors
        Case comEventBreak      ' A Break was received.
        Case comEventFrame      ' Framing Error
        Case comEventOverrun    ' Data Lost.
        Case comEventRxOver     ' Receive buffer overflow.
        Case comEventRxParity   ' Parity Error.
        Case comEventTxFull     ' Transmit buffer full.
        Case comEventDCB        ' Unexpected error retrieving DCB]
    ' Events
        Case comEvCD        ' Change in the CD line.
        Case comEvCTS       ' Change in the CTS line.
        Case comEvDSR       ' Change in the DSR line.
        Case comEvRing      ' Change in the Ring Indicator.
        Case comEvReceive   ' Received RThreshold # of
                            ' chars.            
                            '接收到一个字符产生的消息,判断是否是数据的开始,如果是继续接收168个,如果不是直接退出等待下一个数据
        Case comEvSend      ' There are SThreshold number of
                            ' characters in the transmit
                            ' buffer.
        Case comEvEOF       ' An EOF charater was found in
                            ' the input stream
    End Select
End Sub

liuyangvic

  • 精华:1帖
  • 求助:0帖
  • 帖子:16帖 | 46回
  • 年度积分:0
  • 历史总积分:198
  • 注册:2006年7月09日
发表于:2006-07-10 21:44:00
7楼
用mscomm控件实现~!

卡布基诺

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 7回
  • 年度积分:0
  • 历史总积分:63
  • 注册:2005年5月20日
发表于:2006-07-13 14:53:00
8楼
使用VB的MSComm控件来实现,具体实现过程如下:
Private Sub Button_RECV_C_Click()
  Text_RECV.Text = ""
  Text_SEND.SetFocus
  
End Sub

Private Sub Button_SEND_C_Click()
    Text_SEND.Text = ""
    Text_SEND.SetFocus
End Sub

Private Sub Button_SEND_Click()
    Dim x As String
    If Text_SEND.Text = "" Then
      x = MsgBox("发送数据不能为空", 16)
    Exit Sub
  End If
  If Not MSComm.PortOpen Then
      MSComm.PortOpen = True
  End If
    MSComm.Output = Text_SEND.Text + Chr$(13)
    For i = 1 To 20000000
    Next
    
    
End Sub

Private Sub Form_Load()
    MSComm.CommPort = 1
    MSComm.Settings = "9600,n,8,1"
    MSComm.InputLen = 0
    MSComm.InBufferSize = 1024
    MSComm.OutBufferSize = 512
    MSComm.PortOpen = True
    MSComm.SThreshold = 0
    MSComm.RThreshold = 1
    MSComm.InBufferCount = 0
    MSComm.OutBufferCount = 0
    Text_SEND.Text = ""
    Text_RECV.Text = ""
    
End Sub

Private Sub MSComm_OnComm()
    Select Case MSComm.CommEvent
    Case comEventOverun
      Text_SEND.Text = ""
      Text_RECV.Text = ""
      Text_SEND.SetFocus
    Exit Sub
    Case comEventRxOver
      Text_SEND.Text = ""
      Text_RECV.Text = ""
      Text_SEND.SetFocus
    Exit Sub
    Case comEventTxFull
      Text_SEND.Text = ""
      Text_RECV.Text = ""
      Text_SEND.SetFocus
    Exit Sub
    Case comEvReceive
      Dim str As String
        str = MSComm.Input
        Text_RECV.Text = Text_RECV.Text + str
         End Select
End Sub

newnazi

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 11回
  • 年度积分:0
  • 历史总积分:36
  • 注册:2006年7月03日
发表于:2006-07-15 09:35:00
9楼
我也推荐一本 人民邮电的 “vb串口通信工程与实例”

水边清浅横枝瘦

  • 精华:0帖
  • 求助:4帖
  • 帖子:78帖 | 3488回
  • 年度积分:8
  • 历史总积分:5664
  • 注册:2006年7月11日
发表于:2006-07-17 10:14:00
10楼
在学

水边清浅横枝瘦

  • 精华:0帖
  • 求助:4帖
  • 帖子:78帖 | 3488回
  • 年度积分:8
  • 历史总积分:5664
  • 注册:2006年7月11日
发表于:2006-07-17 10:14:00
11楼
在学

热门招聘
相关主题

官方公众号

智造工程师