MSCOMM怎么不能激发OnComm,请帮忙看一下。

Leo Tin 2007-11-22 11:36:59
帮别人写个小程序,以前没搞过,看了很多资料,下了很多源码,轮到自己做就不行了.请大家帮我看一下,有点急!

源码如下
Private Sub Command1_Click()
Dim Instring As String
Dim buf1 As Variant
Dim Data1(32) As Byte
' 设置端口
MSComm1.CommPort = 3
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.RThreshold = 32
MSComm1.InputLen = 0
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
Command1.Enabled = False
If Err Then
MsgBox (Err.Description)
Exit Sub
End If
End If

For i = 0 To 31
'HScroll1取0到90之间的任意数字
Data1(i) = HScroll1(i).Value
Next
buf1 = Data1
MSComm1.Output = buf1
Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0

If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
Command1.Enabled = True
End If
End Sub


Private Sub MSComm1_OnComm()
Dim buf As Variant
Dim arr() As Byte
Select Case MSComm1.CommEvent
Case comEvReceive
buf = MSComm1.Input
MsgBox buf
arr = buf
'为测试,字显示前8个
Text1.Text = arr(0) & arr(1) & arr(2) & arr(3) & arr(4) & arr(5) & arr(6) & arr(7)
End Select
End Sub

...全文
69 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leo Tin 2007-11-23
  • 打赏
  • 举报
回复
谢谢各位,问题解决。
MsgBox buf 这里有点问题。


zdingyun 的代码我稍加修改调试成功,已经作为模板收藏,谢谢
KeleBear 2007-11-23
  • 打赏
  • 举报
回复
在Timer中不断的读。
chiva1224 2007-11-22
  • 打赏
  • 举报
回复
With MSComm1
.CommPort = 1
.Settings = "9600,n,8,1"
.RTSEnable = 1
.RThreshold = 1
.InputMode = 1
.InputLen = 256
.InBufferSize = 4096
.PortOpen = True
End With


放在Form_Load()里面
  • 打赏
  • 举报
回复
不能激发OnComm?先检查一下串口号用的对不对,如果这个写错了那什么数据也收不到了。

看你的代码该不会是想实现数据自发自收吧?那需要把串口的2、3脚连起来才行。
zdingyun 2007-11-22
  • 打赏
  • 举报
回复
你的代码阅读有困难,略加修改供参考:
Option Explicit
Dim i As Integer
Dim strData As String
Dim arr() As Byte
Private Sub Command1_Click()
Dim Data1(31) As Byte
MSComm1.InputLen = 0
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
For i = 0 To 31
'取0到90之间的任意数字
Data1(i) = Int(Rnd * 90) + 1 'HScroll1(i).Value
Next
MSComm1.Output = Data1
End Sub

Private Sub Command2_Click()
MSComm1.PortOpen = True
End Sub

Private Sub Form_Load()
'设置端口
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1 "
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
'MSComm2.CommPort = 2
MSComm2.RThreshold = 1
'MSComm2.PortOpen = True
Text1 = ""
End Sub

Private Sub mscomm1_OnComm()
Dim buf As String
Dim intInputLen As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0
intInputLen = MSComm1.InBufferCount
ReDim arr(intInputLen)
buf = MSComm1.Input
'MsgBox buf
arr() = buf
jieshou
Text1 = strData
Print Len(strData) / 2
End Select
End Sub
Public Function jieshou() '接收数据处理为16进制
For i = 0 To UBound(arr)
If Len(Hex(arr(i))) = 1 Then
strData = strData & "0" & Hex(arr(i))
Else
strData = strData & Hex(arr(i))
End If
Next
End Function

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧