串口接收不到数据

羽熙 2014-11-01 02:14:26
串口和单片机通信,以前可以接收到数据,最近收不到了;有时调试的时候commevent值为2 ,可以看到input里面有数据,但是用一个string字符串取出来后就什么都没有了;有时 Select Case MSComm1.CommEvent可以看到有数据返回,经过case Input 里面的数据就变为空的,这是怎么回事,要怎么解决;有时候也不触发commevent事件
Private Sub Combo1_Click()
Dim Portstr As String
Dim keywords As String
Dim tmp As Long
Dim ret As Long
Dim I, JJ As Integer

Portstr = Combo1.Text
For JJ = 1 To Len(Portstr)
If Asc(Mid(Portstr, JJ, 1)) >= 48 And Asc(Mid(Portstr, JJ, 1)) <= 57 Then
comport = comport & Mid(Portstr, JJ, 1)
Else
I = I + Val(comport)
comport = ""
End If
Next

MSComm1.CommPort = comport
MSComm1.settings = "9600,n,8,1" '设置串口1的参数
MSComm1.InputMode = comInputModeBinary '接收二进制数据
MSComm1.InBufferSize = 2048
MSComm1.RThreshold = 1 ' MSComm1.Input = 0
MSComm1.InputLen = 0
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True '打开通信端口
MsgBox ("端口已打开")
Else
MsgBox ("请重新选择端口号"), 16
End If

If MSComm1.PortOpen = True Then
ret = mySearching(BROADCAST, 0)
If ret >= 0 Then
Shape1.FillColor = vbGreen
End If
End If
End Sub

Private Sub MSComm1_OnComm()
Dim J As Long
Dim I As Integer
Select Case MSComm1.CommEvent
Case 2
strBuff = MSComm1.Input
BytReceived() = strBuff

For I = 0 To UBound(BytReceived)
Print BytReceived(I)
Next
jieshou
'数据处理代码
End Select
End Sub
...全文
581 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2014-11-18
  • 打赏
  • 举报
回复
引用
我接受的是十六进制的数据,应该用什么类型接收呢?
十六进制是一种数据显示或书写格式。我们说数据传输时,说的是数据编码格式,没有十六进制数据的说法。对于串口通讯,只有二进制数据(自然编码),或字符数据(ASCII 编码)之分。当然,如果你传输的是十六进制字符串,那就是字符数据。
赵4老师 2014-11-18
  • 打赏
  • 举报
回复

Dim iBuf() As Byte
Dim lnx As String
Dim i As Long
    ReDim iBuf(bytesTotal - 1)
'   log每个收到的字节
   i = 0
   lnx = "-->BYTE:" + Right("0000000" + Hex(i), 8) + "-"
   For i = 0 To bytesTotal - 1
       lnx = lnx + " " + Right("0" + Hex(iBuf(i)), 2)
       If i Mod 16 = 15 Then
           debug.print  lnx
           lnx = "-->BYTE:" + Right("0000000" + Hex(i + 1), 8) + "-"
       End If
   Next
   i = bytesTotal - 1
   If i Mod 16 <> 15 Then
       debug.print lnx
   End If
笨狗先飞 2014-11-17
  • 打赏
  • 举报
回复
你要用byte型的数组去取数据,不要用字符串去取,ASCII值在128~254之间的字符会被消掉.
hebeiliuzhao0909 2014-11-14
  • 打赏
  • 举报
回复
建议先用串口调试器测试一下,从而验证程序严谨性
羽熙 2014-11-04
  • 打赏
  • 举报
回复
[quote=引用 1 楼 zdingyun 的回复:] 全部代码贴出来很长,这里只是把串口相关的一部分贴出来了,你要用我的贴出来的代码调试肯定会出错
羽熙 2014-11-04
  • 打赏
  • 举报
回复
[quote=引用 1 楼 zdingyun 的回复:] 代码不全还请指出来,我修改
羽熙 2014-11-04
  • 打赏
  • 举报
回复
[quote=引用 2 楼 spt_petrolor 的回复:] 我接受的是十六进制的数据,应该用什么类型接收呢?
王二.麻子 2014-11-02
  • 打赏
  • 举报
回复
可以看到input里面有数据,但是用一个string字符串取出来后就什么都没有了; 用的是二进制接收,那就不要用string变量去取缓冲区里面的数据了,也许接收的数据是不可显示的字符。 有时 Select Case MSComm1.CommEvent可以看到有数据返回,经过case Input 里面的数据就变为空的,这是怎么回事,要怎么解决;有时候也不触发commevent事件 CommEvent接收事件的触发,和RThreshold 属相有关,设置为0不会触发CommEvent接收事件,设置为1每接收到一个字节触发一个CommEvent事件。 RThreshold 属性 在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。 语法 object.Rthreshold [ = value ] Rthreshold 属性语法包括下列部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的对象。 value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 说明 当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。 例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。 数据类型 Integer
zdingyun 2014-11-02
  • 打赏
  • 举报
回复
LZ的代码是哪儿搞来拼凑的。代码又不全,依据关键代码调试发现存在许多错误。现将关键部分代码贴上,供LZ参考:
Option Explicit

Private Sub Form_Load()
    MSComm1.CommPort = 1 'comport
    MSComm1.Settings = "9600,n,8,1"   '设置串口1的参数
    MSComm1.InputMode = comInputModeBinary  '接收二进制数据
    MSComm1.InBufferSize = 2048
    MSComm1.RThreshold = 1 '    MSComm1.Input = 0
    MSComm1.InputLen = 0
    MSComm1.OutBufferCount = 0
    MSComm1.InBufferCount = 0
    MSComm1.PortOpen = True
End Sub

Private Sub MSComm1_OnComm()
    Dim J As Long
    Dim I As Integer
    Dim strBuff As Variant
    Dim BytReceived() As Byte
        Select Case MSComm1.CommEvent
           Case 2
                strBuff = MSComm1.Input
                BytReceived() = strBuff
                For I = 0 To UBound(BytReceived)
                    Print BytReceived(I)
                Next
                'jieshou
                '数据处理代码
        End Select
End Sub

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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