注册 登录
编程论坛 VB6论坛

vb端接收不到数据,请大神指点,串口助手上可接收到

暗流年 发布于 2015-05-11 19:21, 984 次点击
要求是要显示在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
10 回复
#2
embed_xuel2015-05-11 19:23
是不认识英文字母吗?vb和c差的很远啊
#3
lianyicq2015-05-12 09:09
回复 楼主 暗流年
这是我在单工程写的双串口交联收发
程序代码:
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

#4
暗流年2015-05-13 01:55
回复 3楼 lianyicq
单片机传送数据12,37,99

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

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

[ 本帖最后由 暗流年 于 2015-5-13 02:10 编辑 ]
#5
lianyicq2015-05-13 08:41
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
然后再分别显示.

如果接收的时候用二进制方式,直接赋值文本框
#6
暗流年2015-05-13 10:46
回复 5楼 lianyicq
我是说怎么分别放入text1,text2,text3,

就是12放入text1,37放入text2,99放入text3,这样的话该怎么做?
#7
lianyicq2015-05-13 10:58
回复 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 编辑 ]
#8
暗流年2015-05-13 12:38
回复 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 编辑 ]
#9
lianyicq2015-05-13 12:42
回复 8楼 暗流年
你确定用的是shape的backcolor属性,而不是bordercolor或fillcolor.
不能用And 联接两条赋值语句 ,要写在一行,就用":"分隔
#10
暗流年2015-05-13 16:28
回复 9楼 lianyicq
不是啊  ,是我画了三个圆,判断数值大小,填充那三个元的颜色,将整个元填充颜色,怎么办???就这最后一点了,求大神指点
#11
lianyicq2015-05-13 16:39
shape1.fillstyle=0
shape1.fillcolor=vbred
1