'这是自动发送1秒/次
Private Sub Timer1_Timer()
On Error Resume Next
Me.Timer1.Enabled = False
Dim bytData1(0) As Byte
Dim bytData(21) As Byte
Dim i As Integer
bytData1(0) = 9
bytData(0) = 3
bytData(20) = 12
bytData(21) = 136
MSComm1.Settings = "19200,m,8,2"
Call SendData(bytData1) '发送命令
MSComm1.Settings = "19200,s,8,2"
Call SendData(bytData)
Me.Timer1.Enabled = True
End Sub
Public Function SendData(ByRef bytData() As Byte) As Long
On Error Resume NextMSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.Output = bytData '发送数据Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕
MSComm1.OutBufferCount = 0 '清空发送缓冲区
End Function
'以下是我的自动接收.10/MS
Private Sub Timer2_Timer()
On Error Resume Next
Dim BytesReceived() As Byte
Dim buffer As String
Dim HData As Variant
Dim i As Integer
Me.Timer2.Enabled = False
MSComm1.Settings = "19200,m,8,2" '改变MSComm.Settings值
DoEvents
Select Case MSComm1.CommEvent
Case comEvReceive '接收十六进制数据。并以十六进制显示
If MSComm1.InBufferCount <= 0 Then
Me.Timer2.Enabled = True
Exit Sub
End If
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary '设置当前以二进制数接收数据
buffer = MSComm1.Input '接收数据至字符串中
BytesReceived() = buffer '将数据转入BYTE中
For i = 0 To UBound(BytesReceived) '显示结果以十六进制显示
If Len(Hex(BytesReceived(i))) = 1 Then
HData = 0 & Hex(BytesReceived(i))
Else
HData = Hex(BytesReceived(i))
End If MSComm1.OutBufferCount = 0 '清除发送缓冲区
MSComm1.InBufferCount = 0 '清除接收缓冲区
Text1.Text = HData '最后将结果后入Text1中
Next
End Select
Me.Timer2.Enabled = True
End Sub程序发送第一组数据以M发送.以后以S发送.接收以S接收程序设置是发送1秒一次.接收也是1秒一次.可是接收到的数据全部3F.
如果我将发送设置1秒一次.接收10豪秒一次.接收大部份情况正常.还有就是当我连续发送多条数据时返回来的结果又是3F.
请问我这段程序错误在哪里?
以上是我的接收与发送程序.万分感谢.在线等.谢谢
Private Sub Timer1_Timer()
On Error Resume Next
Me.Timer1.Enabled = False
Dim bytData1(0) As Byte
Dim bytData(21) As Byte
Dim i As Integer
bytData1(0) = 9
bytData(0) = 3
bytData(20) = 12
bytData(21) = 136
MSComm1.Settings = "19200,m,8,2"
Call SendData(bytData1) '发送命令
MSComm1.Settings = "19200,s,8,2"
Call SendData(bytData)
Me.Timer1.Enabled = True
End Sub
Public Function SendData(ByRef bytData() As Byte) As Long
On Error Resume NextMSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.Output = bytData '发送数据Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕
MSComm1.OutBufferCount = 0 '清空发送缓冲区
End Function
'以下是我的自动接收.10/MS
Private Sub Timer2_Timer()
On Error Resume Next
Dim BytesReceived() As Byte
Dim buffer As String
Dim HData As Variant
Dim i As Integer
Me.Timer2.Enabled = False
MSComm1.Settings = "19200,m,8,2" '改变MSComm.Settings值
DoEvents
Select Case MSComm1.CommEvent
Case comEvReceive '接收十六进制数据。并以十六进制显示
If MSComm1.InBufferCount <= 0 Then
Me.Timer2.Enabled = True
Exit Sub
End If
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary '设置当前以二进制数接收数据
buffer = MSComm1.Input '接收数据至字符串中
BytesReceived() = buffer '将数据转入BYTE中
For i = 0 To UBound(BytesReceived) '显示结果以十六进制显示
If Len(Hex(BytesReceived(i))) = 1 Then
HData = 0 & Hex(BytesReceived(i))
Else
HData = Hex(BytesReceived(i))
End If MSComm1.OutBufferCount = 0 '清除发送缓冲区
MSComm1.InBufferCount = 0 '清除接收缓冲区
Text1.Text = HData '最后将结果后入Text1中
Next
End Select
Me.Timer2.Enabled = True
End Sub程序发送第一组数据以M发送.以后以S发送.接收以S接收程序设置是发送1秒一次.接收也是1秒一次.可是接收到的数据全部3F.
如果我将发送设置1秒一次.接收10豪秒一次.接收大部份情况正常.还有就是当我连续发送多条数据时返回来的结果又是3F.
请问我这段程序错误在哪里?
以上是我的接收与发送程序.万分感谢.在线等.谢谢
解决方案 »
- ListView控件的一个问题
- 呀0~,几天没登录,今天一看,有5个小角了,呵呵~~
- 请问各位高手:在VB窗体中如何给水晶报表的参数字段赋值
- 如何把控件捆绑到EXE程序中?
- 急急急!如何获得图片的大小尺寸
- 难道这里没有VB高手吗﹐连这个问题都解决不了???
- 乾隆中的即时数据(价格、买一、买二等)怎么能读到。
- 求帮助,写完程序可以发到我的邮箱不甚感激。[email protected]
- 如何做象VB一样的菜单项,即左边为图标,右边是名称!
- 请教一个很菜的问题:关于wcex.lpfnWndProc!
- 为何VB6的程序打包安装没有安装VB6的机器上VB程序连接数据库错误?
- 怎样防止局域网中的计算机对我计算机的远程关闭!
MSComm1.Settings = "19200,s,8,2"
前加一个适当的延时。
Me.MSComm1.CommPort = 2
Me.MSComm1.PortOpen = True
Me.MSComm1.RThreshold = 1
End SubPrivate Sub MSComm1_OnComm()
On Error Resume Next
Dim BytesReceived() As Byte
Dim buffer As String
Dim HData As String
Dim i As Integer
'Me.Timer2.Enabled = False
MSComm1.Settings = "19200,m,8,2" '改变MSComm.Settings值
DoEvents
Select Case MSComm1.CommEvent
Case comEvReceive '接收十六进制数据。并以十六进制显示
If MSComm1.InBufferCount <= 0 Then
Me.Timer2.Enabled = True
Exit Sub
End If
'MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary '设置当前以二进制数接收数据
buffer = MSComm1.Input '接收数据至字符串中
BytesReceived() = buffer '将数据转入BYTE中
For i = 0 To UBound(BytesReceived) '显示结果以十六进制显示
If Len(Hex(BytesReceived(i))) = 1 Then
HData = HData & "0" & Hex(BytesReceived(i))
Else
HData = HData & Hex(BytesReceived(i))
End If
Text1.Text = HData '最后将结果后入Text1中
MSComm1.OutBufferCount = 0 '清除发送缓冲区
MSComm1.InBufferCount = 0 '清除接收缓冲区
Next
End Select
'Me.Timer2.Enabled = TrueEnd SubPrivate Sub Timer1_Timer()
On Error Resume Next
'Me.Timer1.Enabled = False
Dim bytData1(0) As Byte
Dim bytData(21) As Byte
Dim i As Integer
bytData1(0) = 9
bytData(0) = 3
bytData(20) = 12
bytData(21) = 136
MSComm1.Settings = "19200,m,8,2"
Call SendData(bytData1) '发送命令
MSComm1.Settings = "19200,s,8,2"
Call SendData(bytData)
'Me.Timer1.Enabled = True
End Sub
Public Function SendData(ByRef bytData() As Byte) As Long
On Error Resume NextMSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.Output = bytData '发送数据Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕
MSComm1.OutBufferCount = 0 '清空发送缓冲区
End Function
'以下是我的自动接收.10/MS
Private Sub Timer2_Timer()
'Me.Timer2.Enabled = True
End Sub