首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB初学者串口有关问题

2013-04-09 
VB菜鸟求助串口问题本帖最后由 bcrun 于 2013-03-31 09:36:53 编辑求教:我用单片机模拟一个字符串数据发送

VB菜鸟求助串口问题
本帖最后由 bcrun 于 2013-03-31 09:36:53 编辑 求教:我用单片机模拟一个字符串数据发送到串口,由VB上位机接受,这里是我的上位机串口设置:

MSComm2.Settings = "2400,n,8,1"
MSComm2.CommPort = 3
MSComm2.InputMode = comInputModeBinary '采用二进制传输
MSComm2.InBufferCount = 0   '清空接受缓冲区
MSComm2.OutBufferCount = 0  '清空传输缓冲区
MSComm2.RThreshold = 0    '产生MSComm事件
MSComm2.InputLen = 0
MSComm2.InBufferSize = 1024
MSComm2.PortOpen = True
 
Private Sub Timer4_Timer()
  Dim strTemp1 As String
   Timer4.Enabled = False '关闭定时器
    
     If MSComm2.InBufferCount > 0 Then 'InBufferCount=0为清除当前已收到的数据
       ReceivedLen = MSComm2.InBufferCount 'InBufferCount接收缓冲区
        inx = MSComm2.Input
        For i = 0 To UBound(inx)
            strTemp1 = strTemp1 & Chr$(inx(i))
        Next i

 
    End If
     
    Timer4.Enabled = True '打开定时器
    
Select Case strTemp1
Case "3EF5C9B"
If numone.Caption = "" Then    '判断汽车驶入记录还是驶出收费
Frame21.Caption = "ID:" & strTemp1
Dim T1 As Date
T1 = Now
numone.Caption = Format(T1, "yyyy-mm-dd    HH:MM:SS")
onetime = numone.Caption                '记录驶入时间
cl = cl + 1    'cl为当前车辆数
Form2.label0.Caption = cl

End Select

MSComm2.InBufferCount = 0   '清空接受缓冲区

End Sub
 
 
为什么不能VB上位机不能接收到这个字符串数据呢?   我用字符触发式的方法可以接受单一字符(例如A,B,C,D),但是我用定时器轮循法就接受不了字符串,我用串口助手是有接受到这个字符串的。
如果是把“3EF5C9B”这个我要接受的字符串,用单片机每隔1秒,发送到串口一次,VB上位机就可以显示出来。不过VB上位机要停顿大概3,4秒才能重新刷新显示
[解决办法]
http://download.csdn.net/detail/veron_04/1262066
[解决办法]
用定时器方式接收串口信息,是一种很糟糕的方法。

因为 RS232 协议是不分主从的,两方都可以随时发送。如果预期中的接收方没有处于接收状态,发送方的信息就有可能丢失。

热点排行