您现在所在的是:

电脑编程

回帖:13个,阅读:8378 [上一页] [1] [2] [下一页]
939
绚烂静美
文章数:8
年度积分:50
历史总积分:939
注册时间:2004/9/23
发站内信
发表于:2004/10/29 12:52:00
#0楼
发送端程序
MSComm1.Output = "aaaaa"             '以aaaaa作为数据起始标志
MSComm1.Output = Text1.Text
MSComm1.Output = "zzzzz"          ' 以zzzzz作为数据结束标志
             
接收端程序
Private Sub MSComm1_OnComm()
Dim rec(100) As String
      Dim testtag(5) As String
      Dim enddata As Integer
      Dim realdata As Integer
      Dim i As Integer
      Dim j As Integer
        j = 0
       realdata = 0
       enddata = 0
     
      On Error Resume Next           '出错处理语句
     
      Select Case MSComm1.CommEvent  '在此可插入处理各种不同错误或事件的代码
               Case comEventFrame
                 lable1.Caption = "硬件检测到一个数据帧错误"
               Case comEventDCB
                 Label1.Caption = "检取端口DCB时发生了没有预料到的错误"
               Case comEventTxFull
                 labell1.Caption = "发送缓冲区已满"
               Case comEventRxParity
                 Label1.Caption = "奇偶校验错"
               Case comEventRxOver
                 Label1.Caption = " 接收缓冲区已满"
               Case comEventOverrun
                 Label1.Caption = "端口溢出"
               Case comEventCTSTO
                 Label1.Caption = "在发送字符时,在系统指定的事件内,CTS线是低电平"
                 
               Case comEvReceive
                             
                  Do While realdata = 0   '判断是否有有效数据到达
                       For i = 0 To 4
                           testtag(i) = MSComm1.Input
                       Next i
                     labal1.Caption = "暂时没有收到有效数据"
                   
                            If testtag(0) = "a" And testtag(1) = "a" And testtag(2) = "a" And testtag(3) = "a" And testtag(4) = "a" Then                                       '判断是否收到起始标志
                             
                                         realdata = 1
                                         
                             End If
                   Loop
                         
                   
                  Do While enddata = 0
                        Label4.Caption = "正在接收数据……"
                       rec(j) = MSComm1.Input  '接收存储有效数据
                       Text1.Text = Text1.Text + rec(j)       '显示有效数据
                       If rec(j) = "z " And rec(j - 1) = "z" And rec(j - 2) = "z" And rec(j - 3) = "z" And rec(j - 4) = "z" Then
                                   enddata = 1
                               
                       End If
                       j = j + 1
                   Loop
                                         
                               
                                labal1.Caption = "数据接收完毕"
         
   End Select
End Sub
这样能不能收到正确数据呢  我上次是收到乱码 里面好多  ???????的  这是我帮别人写的 调试不方便  高手看怎么改好啊  ?我以前没写过这些东东的 表情
1137
刘岩利
文章数:111
年度积分:50
历史总积分:1137
注册时间:2004/1/20
发站内信
发表于:2004/10/29 14:12:00
#1楼
For i = 0 To 4
   testtag(i) = MSComm1.Input
Next i

这三行代码有问题,你根本不能确切的知道 MSComm1.Input 中是几个字符。甚至除了i=0时,你根本不能确认有没有字符。

当数据发送太快,你会丢字符(可能性到是不大),数据传送太慢,你会收到很多无意义的空字符(应该就是你目前的状态)。

后面接收的程序也是一样的问题。
939
绚烂静美
文章数:8
年度积分:50
历史总积分:939
注册时间:2004/9/23
发站内信
发表于:2004/10/29 16:06:00
#2楼
我设置了   MSComm1.InputLen = 1     '设定串口读入的字符串长度为1
              MSComm1.RThreshold = 1 '当接收寄存器达到一个字符时引发接收事件
那数据发送太慢怎么解决呢?
1137
刘岩利
文章数:111
年度积分:50
历史总积分:1137
注册时间:2004/1/20
发站内信
发表于:2004/10/29 18:20:00
#3楼
你可以用循环和 DoEvents 来等,不过,这是个很糟糕的注意。而且,即使这样,你也不能保证在你读去时,缓冲区里只有一个字节。

建议,每次只读出当前缓冲区中全部字节,把收到的字节保存在全局变量或者静态变量里。


[此贴子已经被作者于2004-10-29 18:24:37编辑过]
939
绚烂静美
文章数:8
年度积分:50
历史总积分:939
注册时间:2004/9/23
发站内信
发表于:2004/10/30 10:36:00
#4楼
设置Handshaking=RTS/CTS        ‘使用RTS/CTS握手协议
再在   发送程序里 加判断条件 CTSHolding=true  就发数据  否则 等待  这样能解决速度不一致的问题了吗?  大伙随便说说呀    我真是身边连个问的人都冒得哦   :(
39948
tigermu 版主
文章数:14925
年度积分:906
历史总积分:39948
注册时间:2004/8/12
发站内信
2018论坛优秀版主
2018春节活动(二)
2017论坛优秀版主
2017国庆活动(一)
2016论坛优秀版主
2016国庆活动(一)
2015论坛优秀版主
西门子logo体验(三)
英威腾PLC体验(三)
2015春节活动
2014论坛优秀版主
2013论坛优秀版主
2012论坛优秀版主
2010年度论坛贡献奖
发表于:2004/10/30 14:12:00
#5楼
发完开始标志和数据的后面都应该加延时。否则数据不会接受正确。
清泉石上,明月松间。
938
dq_zcm
文章数:12
年度积分:50
历史总积分:938
注册时间:2005/1/25
发站内信
发表于:2005/1/25 22:07:00
#6楼
以下是引用绚烂静美在2004-10-29 16:06:00的发言:
我设置了   MSComm1.InputLen = 1     '设定串口读入的字符串长度为1
               MSComm1.RThreshold = 1 '当接收寄存器达到一个字符时引发接收事件
那数据发送太慢怎么解决呢?
这个方法是硬件交握,您有软交握的可靠方法吗?
938
dq_zcm
文章数:12
年度积分:50
历史总积分:938
注册时间:2005/1/25
发站内信
发表于:2005/3/9 11:07:00
#7楼
就是,有软交握的可靠办法吗
943
sjc0626
文章数:16
年度积分:50
历史总积分:943
注册时间:2007/5/6
发站内信
发表于:2007/8/8 20:11:00
#8楼
乱码可能是发送的太快,而接受太慢,造成乱码
6541
甘陵至尊
文章数:562
年度积分:326
历史总积分:6541
注册时间:2005/7/3
发站内信
发表于:2007/9/27 9:33:00
#9楼
打开看看
 心底无私天地宽

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

109.2007