VB串口通信出现实时错误8020

春哥的故事 2014-03-28 10:12:35
本人VB新手,最近用USB转RS232用VB编写出现了8020的问题,操作系统是WIN7 64位。
用串口调试助手测试是没有问题的,可以发送接受数据,驱动说明没有问题。
程序是从CSDN论坛上下载的(VB串口通信程序(VB程序))。请问各位大神有什么办法解决吗?下面附上代码和一些串口调试助手,和端口截图。


代码:


Private Sub CMDRe_Click()
TRe.Text = TRe.Text & vbCrLf & CStr(MSComm1.Input)
MsgBox "2222 first"
End Sub

Private Sub CMDSend_Click()
If MSComm1.PortOpen = True Then
MSComm1.Output = TSend.Text
MsgBox "ccccccc first"
Else
MsgBox "please connect first"
End If
End Sub

Private Sub Connect_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
MsgBox "FALL"
Else
MSComm1.PortOpen = True
End If
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 7
MSComm1.Settings = "9600,n,8,1"
MSComm1.InBufferCount = 0
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
End Sub

Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
TRe.Text = TRe.Text & MSComm1.Input & vbCrLf
End Select
End Sub
程序下载地址:http://download.csdn.net/detail/huphup/1195874
...全文
1261 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_21298339 2015-12-22
  • 打赏
  • 举报
回复
我也遇到这个问题,你要注意一点1,就是单片机和串口都要接电源。2,就是你的串口模块或线坏掉了。我是因为第2点搞了好久。最后换一个就好了。
soller_T 2014-05-02
  • 打赏
  • 举报
回复
是和PLC通讯的串口软件么?
良朋 2014-04-22
  • 打赏
  • 举报
回复
其实.net示例中就带了读串口程序,简单实用。
drowsihead 2014-04-18
  • 打赏
  • 举报
回复
应该是VB6吧? 既然用:Private Sub MSComm1_OnComm() 接收信息显示 为什么还要用:Private Sub CMDRe_Click() 还有,最好在Private Sub MSComm1_OnComm() 中不要直接对控件属性赋值,将值赋值到一内存变量上。否则可能会引发冲突。
lele_nancy 2014-04-07
  • 打赏
  • 举报
回复

有个C#的
 public void PortReciveDataStart()
        {
            _SerPort.DiscardInBuffer();
            _SerPort.DiscardOutBuffer();
            _SerPort.DataReceived += SerialPort_DataReceived;
            IsRecive = true;
            iReciveCount = 0;
       }
 private void SerialPort_DataReceived(System.Object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            if (_SerPort.IsOpen == false)
            {
                return;
            }
            try
            {
                string message = _SerPort.ReadExisting();
                SaveData(message);
                }
            catch (TimeoutException) { }
        }

private void SaveData(string data)
        {
                   if (((data == null) == false) && (!string.IsNullOrEmpty(data)))
            {
                switch (typeTool)
                {
                    case enmType.MT10:
                                   StrRecData strctData = default(StrRecData);
                        strctData.strName = data.Substring(8, 8);
                        strctData.strData = data.Substring(16, 8);
                        strctData.strUnit = data.Substring(24, 8);
                        MeasedData = Convert.ToSingle(strctData.strData.Replace(" ", "")) ;
                        iReciveCount += 1;
                        break;
                    case enmType.LoadCell:
                        string tmpStr = data;
                        Int32 idx = tmpStr.IndexOf("WT");

                        if ((idx != -1))
                        {
                            Int32 idxEnd = tmpStr.IndexOf("\r", idx);

                            if ((idxEnd != -1))
                            {
                                tmpStr = tmpStr.Substring(idx + 3, idxEnd - (idx + 3));
                                Single tmpDbl = Convert.ToSingle(tmpStr);
                                MeasedData = tmpDbl;

                            }
                            else
                            {
                                //RcvTextBox.Text = ("Error")
                            }
                        }
                        else
                        {
                            //RcvTextBox.Text = ("Error")
                        }
                        break;
                }

            }

        }
  • 打赏
  • 举报
回复
楼主,你用的是VB6还是VB.net?使用VB.net时要用到委托,而VB6则不用,还有,你的程序写的有问题,只能显示你接收到的数据最后一位数据。
青岛小帅锅 2014-04-03
  • 打赏
  • 举报
回复
给你几个函数吧。。。唉,新人不容易,好歹大家都是搞工控机的 调用方式 SendCMDtoDriver(13FF80111111)

 Public Function SendCMDtoDriver(ByVal strCMDSend As String)

        If frmMain.SerialPortforLampDriver.IsOpen Then
            frmMain.SerialPortforLampDriver.Close()
        End If
        frmMain.SerialPortforLampDriver.Open()
        Dim bytHex() As Byte
        Dim indata As String


        Dim bytesRead As Int16 = 0
        ReDim bytHex((Len(strCMDSend) \ 2) - 1)
        Dim i As Integer

        indata = ""

        For i = 1 To Len(strCMDSend) Step 2
            bytHex((i - 1) / 2) = Val("&H" & Mid(strCMDSend, i, 2))
        Next
        'MessageBox.Show(frmMain.SerialPortforLampDriver.IsOpen)
        frmMain.SerialPortforLampDriver.Write(bytHex, 0, bytHex.Length)
        'frmMain.SerialPortforLampDriver.DiscardOutBuffer()
        Sleep(50)

        Dim byteToRead As Int16 = frmMain.SerialPortforLampDriver.BytesToRead
        Dim ch(byteToRead) As Byte
        bytesRead = frmMain.SerialPortforLampDriver.Read(ch, 0, byteToRead)
        If bytesRead > 0 Then
            For ii As Int16 = 0 To bytesRead - 1
                indata = indata & DecToHex(ch(ii))
            Next
            Return indata
        Else

        End If
        frmMain.SerialPortforLampDriver.Close()
    End Function
发送SCPI指令的。。。


    Public Function SendCMDtoChroma62012P(ByVal strCMDSend As String) As String
        If frmMain.SerialPortforChroma62012P.IsOpen Then
            frmMain.SerialPortforChroma62012P.Close()
        End If
        frmMain.SerialPortforChroma62012P.Open()
        Try
            frmMain.SerialPortforChroma62012P.DiscardOutBuffer()
            frmMain.SerialPortforChroma62012P.Write(strCMDSend & Chr(13) & Chr(10))
            Sleep(300)
            Return frmMain.SerialPortforChroma62012P.ReadExisting()
            frmMain.SerialPortforChroma62012P.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message & RS232Error, ErrorOccurs, MessageBoxButtons.OK, MessageBoxIcon.Error)
            frmMain.SerialPortforChroma62012P.Close()
            Return 0
        End Try
        frmMain.SerialPortforChroma62012P.Close()
    End Function
greatbody 2014-03-30
  • 打赏
  • 举报
回复
记得考虑缓冲区和触发事件的边界值大小。
春哥的故事 2014-03-30
  • 打赏
  • 举报
回复
引用 4 楼 greatbody 的回复:
记得考虑缓冲区和触发事件的边界值大小。
可是这个程序别人都能用啊。。。为什么到我的 就不能用了。。
春哥的故事 2014-03-29
  • 打赏
  • 举报
回复
不能用MSCOMM吗?? 是MSCOMM有问题?
本拉灯 2014-03-28
  • 打赏
  • 举报
回复
为毛不用SerialPort
sgart 2014-03-28
  • 打赏
  • 举报
回复
我也是这个问题 跪求大神!

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧