mscomm问题,为什么接收不到comEvReceive事件,只能接受comEvCTS,大家帮忙,顶有分!

bianchengxiaozi 2005-08-26 06:41:38
我要使用COM口的条码扫描枪,读数据到,我是用Windows的超级终端可以读到数据,但是用我的程序就不行,是什么原因呀.下面是我得代码
Option Explicit

Private Sub Form_Load()
MSComm1.CommPort = 1 '设置串口号
MSComm1.Settings = "9600,n,8,1" '波特率9600bit/s,无校验,8位数据,1位停止位
MSComm1.InputLen = 0 '读取接收缓冲区的所有字符
MSComm1.PortOpen = True '打开串口
MSComm1.SThreshold = 0 '不触发发送事件
MSComm1.RThreshold = 1 '每一个字符到接收缓冲区都触发接收事件
MSComm1.OutBufferCount = 0 '清除发送缓冲区数据
MSComm1.InBufferCount = 0 '清除接收缓冲区数据
MSComm1.InputMode = comInputModeText
If Not MSComm1.PortOpen Then
MSComm1.PortOpen = True
End If
End Sub

Private Sub MSComm1_OnComm()
Dim strData As String

Select Case MSComm1.CommEvent
Case comEvReceive
MsgBox "1"

Case comEvCTS
MsgBox "2"
End Select
End Sub

请高手指教
...全文
467 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zou19820704 2005-10-10
帮你顶呀!自己也学习
回复
bianchengxiaozi 2005-09-05
问题解决了给分,谢谢大家.
回复
byeshuang 2005-09-03
装msdn了吗?下面有mscom的例子。自己看看吧,不难
回复
bianchengxiaozi 2005-08-31
byeshuang(努力不做菜鸟) 还在吗。
回复
bianchengxiaozi 2005-08-31
能不能给我一个最简单的读串口例子,首先发送给串口,然后再接收,多谢了。
回复
byeshuang 2005-08-31
写错了MSComm1.Handshaking =0 or 1 or 2 or 3

Handshaking 属性


设置并返回硬件握手协议。

语法

object.Handshaking [ = value ]

Handshaking 属性的语法包括下列部分:

部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 整型表达式,说明握手约定,如“设置值”中所描述。


设置值

value 设置值是:

设置值 值 描述
comNone 0 (缺省)没有握手。
comXOnXOff 1 (XON/XOFF) 握手。
comRTS 2 RTS/CTS (Request To Send/Clear To Send) 握手。
comRTSXOnXOff 3 Request To Send 和 XON/XOFF 握手皆可。


说明

Handshaking 是指内部通讯协议,通过该协议,数据从硬件端口传输到接收缓冲区。当一个数据字符到达串行端口,通讯设备就把它移到接收缓冲区以使程序可以读它。如果没有接受缓冲区,程序需要直接从硬件读取每一个字符,这很可能会造成数据丢失,因为字符到达的速度可以非常快。

握手协议保证在缓冲区过载时数据不会丢失,缓冲区过载为数据到达端口太快而使通讯设备来不及将它移到接收缓冲区。

数据类型

Integer
回复
byeshuang 2005-08-31
open之前加上MSComm1.Handshake =0 or 1 or 2 or 3
属性好像是这样吧
回复
bianchengxiaozi 2005-08-30
我怎样试一下每个Handshake 常数,能说得清楚点吗,谢谢了。
回复
byeshuang 2005-08-30
Handshake 常数

常数 值 描述
comNone 0 无握手。
comXonXoff 1 XOn/Xoff 握手。
comRTS 2 Request-to-send/clear-to-send 握手。
comRTSXOnXOff 3 Request-to-send 和 clear-to-send 握手皆可。


OnComm 常数

常数 值 描述
comEvSend 1 发送事件。
comEvReceive 2 接收事件。
comEvCTS 3 clear-to-send 线变化。

那就应该是硬件握手的问题了,看看上面
都试一下每个Handshake 常数
回复
domhuang 2005-08-30
Private Sub MSComm1_OnComm()
Dim strData As String

Select Case MSComm1.CommEvent
Case comEvReceive
MsgBox "1"

'Case comEvCTS
'MsgBox "2"
End Select
End Sub


'Case comEvCTS
'MsgBox "2"
把这两句删掉看能能不能接收 可能是一些硬件的握手问题

回复
bianchengxiaozi 2005-08-30
老大,还是不行呀.MSComm1.CommEvent每次都是comEvCTS
回复
bianchengxiaozi 2005-08-29
这些都应该是没有问题的,因为我在windows的超级终端是可以读到数据的.
回复
of123 2005-08-29
1 阅读器是否连接到 COM1
2 是否用阅读器进行了扫描
3 阅读器通讯线有无问题
4 串口是否正常
回复
bianchengxiaozi 2005-08-29
我的MSComm1.CommEvent都是=comEvCTS,而且用MSComm1.input也没有东西,应该是没有条码返回吧.
回复
Winters_lee 2005-08-29
从你的代码倒是看不出有什么不对,你在CommEvent中接收一下串口数据看看有没有条码返回?
回复
bianchengxiaozi 2005-08-29
高手帮看看呀。
回复
byeshuang 2005-08-29
Private Sub Form_Load()
MSComm1.CommPort = 1 '设置串口号
MSComm1.Settings = "9600,n,8,1" '波特率9600bit/s,无校验,8位数据,1位停止位
MSComm1.InputLen = 0 '读取接收缓冲区的所有字符
MSComm1.PortOpen = True '打开串口 ======>>>>>>现在打开后面的设置就没用了,放到最后呀
MSComm1.SThreshold = 0 '不触发发送事件
MSComm1.RThreshold = 1 '每一个字符到接收缓冲区都触发接收事件 ===>>>主要是这个呀
MSComm1.OutBufferCount = 0 '清除发送缓冲区数据
MSComm1.InBufferCount = 0 '清除接收缓冲区数据
MSComm1.InputMode = comInputModeText
If Not MSComm1.PortOpen Then
MSComm1.PortOpen = True
End If
End Sub
回复
bianchengxiaozi 2005-08-29
水来帮帮小弟呀.
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7517

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2005-08-26 06:41
社区公告
暂无公告