| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 984 人关注过本帖, 1 人收藏
标题:vb端接收不到数据,请大神指点,串口助手上可接收到
只看楼主 加入收藏
暗流年
Rank: 1
等 级:新手上路
帖 子:14
专家分:2
注 册:2014-11-7
结帖率:66.67%
收藏(1)
已结贴  问题点数:10 回复次数:10 
vb端接收不到数据,请大神指点,串口助手上可接收到
要求是要显示在text中的值为当前温度值(串口助手中一切显示正常)


代码如下:
Private Sub Command4_Click()
= 3 '...使用Com3口
MSComm1.Settings = "9600,n,8,1" '...设置通讯参数
MSComm1.InBufferSize = 40      '接收缓冲区大小
MSComm1.OutBufferSize = 40     '发送缓冲区大小
MSComm1.RThreshold = 1 '... 接收一个字节就产生oncommm事件
MSComm1.SThreshold = 3  '发送缓冲区中字符小于2时,串口控件设置串口事件为发送,并产生OnComm事件
MSComm1.InputLen = 0   '...一次从接收缓冲区读取字节为1
MSComm1.InputMode = comInputModeText  '接收模式为文本
MSComm1.PortOpen = True '打开通信端口’
End Sub

Private Sub Form_Load() '...初始化
Text1.Text = ""
End Sub
Private Sub MSComm1_OnComm() '...通讯事件发生
Dim indata As Variant
Dim bte(0) As Byte   '定义接收字节
Select Case   '串口事件选择
Case comeEvReceive   '串口事件为接收
indata = MSComm1.Input '...注意!要通过MSComm控件发送或接收二进制数据必须用Variant类型的变量对二进制Byte类型的变量进行转换!
bte(0) = indata
Text1.Text = Text1.Text + "" + Hex(bte(0))
MSComm1.InBufferCount = 0 '...清空输入寄存器
End Select
End Sub
搜索更多相关主题的帖子: 缓冲区 
2015-05-11 19:21
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
是不认识英文字母吗?vb和c差的很远啊

总有那身价贱的人给作业贴回复完整的代码
2015-05-11 19:23
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:10 
回复 楼主 暗流年
这是我在单工程写的双串口交联收发
程序代码:
Private Sub Command1_Click() 'Send data
Dim sendstring() As String
Dim sendbyte() As Byte
Dim i As Integer
sendstring = Split(Text1.Text, " ")
For i = LBound(sendstring) To UBound(sendstring)
    ReDim Preserve sendbyte(i)
    sendbyte(i) = Val(sendstring(i))
Next
MSComm2.Output = sendbyte
End Sub

Private Sub Form_Load()
MSComm1.InBufferSize = 1024 'Comm for receiving data
MSComm1.InBufferCount = 0
MSComm1.InputMode = 1
 = 2
MSComm1.Settings = "9600,N,8,1"


MSComm2.InBufferSize = 1024 'Comm for send data
MSComm2.InBufferCount = 0
MSComm2.InputMode = 0
 = 3
MSComm2.Settings = "9600,N,8,1"

If MSComm1.PortOpen = False Then MSComm1.PortOpen = True: Form1.Caption = MSComm1.Name & " OK"
If MSComm2.PortOpen = False Then MSComm2.PortOpen = True: Form1.Caption = Form1.Caption & "," & MSComm2.Name & " OK"


End Sub

Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
If MSComm2.PortOpen = True Then MSComm2.PortOpen = False
End Sub

Private Sub MSComm1_OnComm() 'Receive data

Dim byte1() As Byte
Dim i As Integer
If MSComm1.InBufferCount > 0 Then
byte1 = MSComm1.Input
For i = 0 To UBound(byte1)
  Text2.Text = Text2.Text & byte1(i) & vbCrLf
Next i
End If

收到的鲜花
  • 暗流年2015-05-12 15:06 送鲜花  3朵   附言:我很赞同

大开眼界
2015-05-12 09:09
暗流年
Rank: 1
等 级:新手上路
帖 子:14
专家分:2
注 册:2014-11-7
收藏
得分:0 
回复 3楼 lianyicq
单片机传送数据12,37,99

PC端vb要接收,分别放入text1,text2,text3怎么做???求大神解答,

我自己学着写的,把数据都放入text1中了,咋办?

[ 本帖最后由 暗流年 于 2015-5-13 02:10 编辑 ]
2015-05-13 01:55
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
text1如果显示为"123799"不合适,要是传回的是个位数比如"33799",不能判断是哪几个数.
如果text1显示有分隔符,那就
dim temp1() as string
dim temp2() as byte
dim i as integer
temp1=split(text1.text," ")
for i=0 to ubound(temp1)
  temp2(i)=val(temp1(i))
next
然后再分别显示.

如果接收的时候用二进制方式,直接赋值文本框

大开眼界
2015-05-13 08:41
暗流年
Rank: 1
等 级:新手上路
帖 子:14
专家分:2
注 册:2014-11-7
收藏
得分:0 
回复 5楼 lianyicq
我是说怎么分别放入text1,text2,text3,

就是12放入text1,37放入text2,99放入text3,这样的话该怎么做?
2015-05-13 10:46
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 6楼 暗流年
不会不知道文本框的text属性?
手工赋值
text1.text="12"
text2.text="37"
text3.text="99"

想要自动赋值就
For i = 0 To UBound(temp1)
  me.controls("text" & i+1).text=temp1(i)  
Next i


[ 本帖最后由 lianyicq 于 2015-5-13 11:00 编辑 ]
收到的鲜花
  • 暗流年2015-05-13 12:39 送鲜花  3朵   附言:我很赞同

大开眼界
2015-05-13 10:58
暗流年
Rank: 1
等 级:新手上路
帖 子:14
专家分:2
注 册:2014-11-7
收藏
得分:0 
回复 7楼 lianyicq
  谢谢   解决了


但是还有问题啊  

Private Sub Text1_Change()
If Val(Text1.Text) < Val(Text2.Text) And Val(Text1.Text) > Val(Text3.Text) Then
Shape2.BackColor = vbWhite And Shape3.BackColor = vbGreen
Else: Shape2.BackColor = vbRed And Shape3.BackColor = vbWhite
End If
End Sub
shape的颜色一直没变化,但是感觉代码是对的,问题出在哪里了呢???求大神帮助,

还有就是Private Sub Command1_Click()
If MSComm1.PortOpen = False Then
  MSComm1.PortOpen = True
  Command1.Caption = "关闭串口"
  Shape1.BackColor = QBColor(9)
Else
  MSComm1.PortOpen = False
  Command1.Caption = "开启串口"
  Shape1.BackColor = vbWhite
End If
End Sub

这个判断的shape颜色也是不变化

[ 本帖最后由 暗流年 于 2015-5-13 12:40 编辑 ]
2015-05-13 12:38
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 8楼 暗流年
你确定用的是shape的backcolor属性,而不是bordercolor或fillcolor.
不能用And 联接两条赋值语句 ,要写在一行,就用":"分隔

大开眼界
2015-05-13 12:42
暗流年
Rank: 1
等 级:新手上路
帖 子:14
专家分:2
注 册:2014-11-7
收藏
得分:0 
回复 9楼 lianyicq
不是啊  ,是我画了三个圆,判断数值大小,填充那三个元的颜色,将整个元填充颜色,怎么办???就这最后一点了,求大神指点
2015-05-13 16:28
快速回复:vb端接收不到数据,请大神指点,串口助手上可接收到
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026540 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved