VB MScomm_oncomm 没办法触发
Dimoutbyte()AsByte'输出数据Diminbyte()AsByte'输入数据PrivateSubForm_Load()'工程载入函数'初始始化MSComm1...
Dim outbyte() As Byte '输出数据
Dim inbyte() As Byte '输入数据
Private Sub Form_Load() '工程载入函数
'初始始化
MSComm1.CommPort = 1 '...使用comm1口
MSComm1.Settings = "9600,n,8,1"
If False = MSComm1.PortOpen Then '打开串口
MSComm1.PortOpen = True '打开串口
End If
End Sub
Private Sub Command1_Click()
'...发送数据
Dim datan(0) As Byte
Dim number As Integer
If Text1.Text >= 0 & Text1.Text < 256 Then
number = Val(Text1.Text)
datan(0) = number
MSComm1.OutBufferCount = 0 '...清空输出寄存器
MSComm1.Output = datan '送出数据
'Text2.Text = datan(0)
End If
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement
' 错误
Case comEventBreak ' 收到 Break。
Text2.Text = 0
Case comEventCDTO ' CD (RLSD) 超时。
Text2.Text = 0
Case comEventCTSTO ' CTS Timeout。
Text2.Text = 0
Case comEventDSRTO ' DSR Timeout。
Text2.Text = 0
Case comEventFrame ' Framing Error
Text2.Text = 0
Case comEventOverrun '数据丢失。
Text2.Text = 0
Case comEventRxOver '接收缓冲区溢出。
Text2.Text = 0
Case comEventRxParity ' Parity 错误。
Text2.Text = 0
Case comEventTxFull '传输缓冲区已满。
Text2.Text = 0
Case comEventDCB '获取 DCB] 时意外错误
Text2.Text = 0
' 事件
Case comEvCD ' CD 线状态变化。
Case comEvCTS ' CTS 线状态变化。
Case comEvDSR ' DSR 线状态变化。
Case comEvRing ' Ring Indicator 变化。
Case comEvReceive ' 收到 RThreshold # of chars.
inbyte(0) = MSComm1.Input
Text2.Text = inbyte
Case comEvSend ' 传输缓冲区有 Sthreshold 个字符'
Case comEvEOF ' 输入数据流中发现 EOF 字符
End Select
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False '关闭串口
End
End Sub
我用串口调试助手时能够正确收到下位机发送回来的数据,用VB的这个程序就不行.设置断点后发现根本就不进MScomm_oncomm过程,是不是还有什么在方没有设置好呢?
修改了RThreshold = 1之后能够触发MScomm_oncomm,也能够正确进入到comEvReceive 但是无论下位机发送什么都只能收到"",根本没收别的数据,这是怎么回事,是不是还有哪里没设置好? 展开
Dim inbyte() As Byte '输入数据
Private Sub Form_Load() '工程载入函数
'初始始化
MSComm1.CommPort = 1 '...使用comm1口
MSComm1.Settings = "9600,n,8,1"
If False = MSComm1.PortOpen Then '打开串口
MSComm1.PortOpen = True '打开串口
End If
End Sub
Private Sub Command1_Click()
'...发送数据
Dim datan(0) As Byte
Dim number As Integer
If Text1.Text >= 0 & Text1.Text < 256 Then
number = Val(Text1.Text)
datan(0) = number
MSComm1.OutBufferCount = 0 '...清空输出寄存器
MSComm1.Output = datan '送出数据
'Text2.Text = datan(0)
End If
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement
' 错误
Case comEventBreak ' 收到 Break。
Text2.Text = 0
Case comEventCDTO ' CD (RLSD) 超时。
Text2.Text = 0
Case comEventCTSTO ' CTS Timeout。
Text2.Text = 0
Case comEventDSRTO ' DSR Timeout。
Text2.Text = 0
Case comEventFrame ' Framing Error
Text2.Text = 0
Case comEventOverrun '数据丢失。
Text2.Text = 0
Case comEventRxOver '接收缓冲区溢出。
Text2.Text = 0
Case comEventRxParity ' Parity 错误。
Text2.Text = 0
Case comEventTxFull '传输缓冲区已满。
Text2.Text = 0
Case comEventDCB '获取 DCB] 时意外错误
Text2.Text = 0
' 事件
Case comEvCD ' CD 线状态变化。
Case comEvCTS ' CTS 线状态变化。
Case comEvDSR ' DSR 线状态变化。
Case comEvRing ' Ring Indicator 变化。
Case comEvReceive ' 收到 RThreshold # of chars.
inbyte(0) = MSComm1.Input
Text2.Text = inbyte
Case comEvSend ' 传输缓冲区有 Sthreshold 个字符'
Case comEvEOF ' 输入数据流中发现 EOF 字符
End Select
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False '关闭串口
End
End Sub
我用串口调试助手时能够正确收到下位机发送回来的数据,用VB的这个程序就不行.设置断点后发现根本就不进MScomm_oncomm过程,是不是还有什么在方没有设置好呢?
修改了RThreshold = 1之后能够触发MScomm_oncomm,也能够正确进入到comEvReceive 但是无论下位机发送什么都只能收到"",根本没收别的数据,这是怎么回事,是不是还有哪里没设置好? 展开
2个回答
2009-09-06
展开全部
把
inbyte(0) = MSComm1.Input
Text2.Text = inbyte
改成
inbyte = MSComm1.Input
Text2.Text = inbyte(0) (不一定是0,你要显示哪一位就写几)
试试..
(我对VB的格式不熟悉,不过看起来多半是这个问题)
inbyte(0) = MSComm1.Input
Text2.Text = inbyte
改成
inbyte = MSComm1.Input
Text2.Text = inbyte(0) (不一定是0,你要显示哪一位就写几)
试试..
(我对VB的格式不熟悉,不过看起来多半是这个问题)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询