大家好!有个问题需要大家帮忙。单片机通过MSCOMM给上位机上传96个数,数字在0-4000不等,但使我变得上位机VB 的监控界面收不到,不知为什么?
代码如下:
Private Sub MSComm1_OnComm()Dim InPutLen As Integer
Dim i As Integer
Dim InData As String
Dim arr() As String
Select Case MSComm1.CommEvent
Case comEvReceiveInPutLen = MSComm1.InBufferCount
ReDim arr(InPutLen)
For i = LBound(arr()) To UBound(arr()) - 1
arr(i) = MSComm1.Input
Text1(i).Text = arr(i)Next iEnd Select
End Sub
请高手帮忙,多谢!!
代码如下:
Private Sub MSComm1_OnComm()Dim InPutLen As Integer
Dim i As Integer
Dim InData As String
Dim arr() As String
Select Case MSComm1.CommEvent
Case comEvReceiveInPutLen = MSComm1.InBufferCount
ReDim arr(InPutLen)
For i = LBound(arr()) To UBound(arr()) - 1
arr(i) = MSComm1.Input
Text1(i).Text = arr(i)Next iEnd Select
End Sub
请高手帮忙,多谢!!
解决方案 »
- VB 关于在mdiform窗体上添加图片的问题
- 为何右键菜单总是弹不出来?急
- 如何生成一组最小数~最大数之间的字符组合,每个字符串由12个数字组成,不足12个数的前面补0。
- 当在VB环境中打开一个窗体时,鼠标指针变成十字形,说明什么问题呀?即这种鼠标指针的型状说明什么,是发生错误的表示吗?
- ====那里可以找到DHTMLEdit和WebBrowser的开发SDK资料,我快急疯了=====
- 找不到工程或库的问题
- 提问: 用VB可以做哪些方面的开发?
- 请问如何在vb里做到点击按钮就在注册表里写入,删除或编辑相应的键值呢,应该怎么写?
- 急急急!!!!!!word文档怎样正确显示?
- 请教这样的SQL怎么写???
- vb的实时错误'28' 堆栈空间溢出
- 串口通信 单片机上传96组数给text1(i)显示
Dim i As Integer
Dim InData As String
Dim arr() As byte
Select Case MSComm1.CommEvent
Case comEvReceive
arr = MSComm1.Input
For i = 0 To UBound(arr())
Text1(i).Text = arr(i)
Next iEnd Select
End Sub注意你接收的格式,如果是字符串,你不必装入数组,如果是二进制方式,你必须装入字节数组。
我得目的是这样的:从单片机串上来96组数,每个数大小介于0-4000之间,一般为3334,那么我想做个VB界面,建立一个动态数组来显示着96组数据。
我估计这个程序在数据转换上还有很大的问题,我现在还没有彻底高清楚。我用串口精灵现实是对的,十六进制模式的。MSComm1.inputmode=comInputModeText
这样设置可以能实现吗?请个高手帮忙修改一下,不胜感激!
Option ExplicitPrivate Sub cleanCommand3_Click()
Dim i As Integer
For i = 0 To 95
Text1(i).Text = ""
Next i
End Sub
Private Sub EndCommand1_Click()
End
End SubPrivate Sub Form_Load()MSComm1.CommPort = 1
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
Else
MsgBox ("先打开串行口!")
End IfMSComm1.RThreshold = 92
MSComm1.SThreshold = 0
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeText
MSComm1.InPutLen = 1End SubPrivate Sub Label4_Click()End SubPrivate Sub SendCommand2_Click()
Dim outputdata As String
outputdata = Text2.Text
MSComm1.Output = outputdata
End SubPrivate Sub MSComm1_OnComm()Dim InPutLen As Integer
Dim i As Integer
Dim arr() As IntegerSelect Case MSComm1.CommEvent
Case comEvReceiveInPutLen = MSComm1.InBufferCount
ReDim arr(InPutLen)
For i = 0 To UBound(arr()) - 1
arr(i) = Asc(MSComm1.Input)
Text1(i) = arr(i)Next iEnd Select
End SubPrivate Sub Timer1_Timer()
cleanCommand3_Click
Label3.Caption = Time
SendCommand2_Click
End Sub
我的油箱:[email protected]
源代码如下:
Private Sub Form_Load()MSComm1.CommPort = 1
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
Else
MsgBox ("先打开串行口!")
End IfMSComm1.RThreshold = 192
MSComm1.SThreshold = 0
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.InputLen = 0End SubPrivate Sub Label4_Click()End SubPrivate Sub SendCommand2_Click()
Dim outputdata As String
outputdata = Text2.Text
MSComm1.Output = outputdata
End SubPrivate Sub MSComm1_OnComm()Dim i As Integer
Dim j As Integer
Dim arr(192) As Byte
Dim cellvol(96) As IntegerSelect Case MSComm1.CommEvent
Case comEvReceive
For i = 0 To 191
arr(i) = MSComm1.InputNext iFor j = 0 To 95cellvol(j) = arr(2 * j)
cellvol(j) = cellvol(j) * 256
cellvol(j) = arr(2 * i + 1)
Text1(i) = cellvol(j)
Next j
End Select
End Sub
ReDim indata(1 To (ll + 1) / 2) For ii = 0 To UBound(inbuff) strHex = strHex & Right("0" & Hex(inbuff(ii)), 2) Text1 = strHex Next ii '处理接收的数据 For ii = 1 To Len(strHex) Step 4 indata((ii + 3) / 4) = Val("&H" & Mid(strHex, ii + 2, 2) & Mid(strHex, ii, 2)) '低高字节倒序 Next我又改进了一些,在监视框里能看到arr()数组里的数据,可是该处cellvol(j) = arr(2 * j) * 256 + arr(2 * j + 1)显示下标越界,不知为什么?
不知到这样将BYTE型移位相加后付值给 INTEGER型 行不行?
请高手指教:源代码如下:
Private Sub Form_Load()MSComm1.CommPort = 1
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
Else
MsgBox ("先打开串行口!")
End IfMSComm1.RThreshold = 192
MSComm1.SThreshold = 0
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.InPutLen = 192End Sub
Private Sub SendCommand2_Click()
Dim outputdata As Variant
outputdata = Text2.Text
MSComm1.Output = outputdata
End SubPrivate Sub MSComm1_OnComm()Dim InPutLen As Integer
Dim i As Integer
Dim j As Integer
Dim arr() As Byte
Dim cellvol() As Integer
Select Case MSComm1.CommEvent
Case comEvReceivei = MSComm1.InBufferCount
ReDim arr(i)
arr = MSComm1.Input
For j = 0 To (95)
cellvol(j) = arr(2 * j) * 256 + arr(2 * j + 1) 该处现实下标越界
Text1(j).Text = Hex(cellvol(j))Next jEnd Select
End Sub