我要使用COM口的条码扫描枪,读数据到,我是用Windows的超级终端可以读到数据,但是用我的程序就不行,是什么原因呀.下面是我得代码
Option ExplicitPrivate 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 SubPrivate Sub MSComm1_OnComm()
Dim strData As String Select Case MSComm1.CommEvent
Case comEvReceive
MsgBox "1" Case comEvCTS
MsgBox "2"
End Select
End Sub请高手指教
Option ExplicitPrivate 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 SubPrivate Sub MSComm1_OnComm()
Dim strData As String Select Case MSComm1.CommEvent
Case comEvReceive
MsgBox "1" Case comEvCTS
MsgBox "2"
End Select
End Sub请高手指教
解决方案 »
- VB 多串口并行控制
- 只有exe,丢掉了源程序,怎么找回来?
- 如何在命令行方式下,向DOS窗口输出程序结果?
- 请问各位大哥,vb的函数过程中在参数声明时,在参数前加一个ByVal是什么含义,和不加ByVal有什么区别,请具体将一讲,谢谢!
- 大家来讨论,一个老外的题目
- 木马程序的用CLIENT显示SERVER所在机器的资源管理器是怎么实现的?想不通
- 怎样在拨号网络中自动建立新连接
- 當光標到文本樞中怎么讓鼠标雙擊呢?
- 急!!关于Ulead MediaStudio Pro 6.0的问题!!我知道这个贴子放在这里有点不对,可软件使用里面没人会呀!相信编程高手对此问题不在话下!多谢,多谢!!
- EXCEL VBA
- datagrid的数据要怎么更新啊?
- 请问怎么改变滚动条的 “滚动框”的大小,初始只是一个很小的块,太小了啊!!!!
2 是否用阅读器进行了扫描
3 阅读器通讯线有无问题
4 串口是否正常
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
Dim strData As String Select Case MSComm1.CommEvent
Case comEvReceive
MsgBox "1" 'Case comEvCTS
'MsgBox "2"
End Select
End Sub
'Case comEvCTS
'MsgBox "2"
把这两句删掉看能能不能接收 可能是一些硬件的握手问题
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 常数
属性好像是这样吧
设置并返回硬件握手协议。语法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