程序代码如下:
Case comEvReceive
requ_flag = 0
stop_flag = 0
b(0) = MSComm1.Input //串口接收到的数据放入b(0)中
Text2.Text = Text2.Text + b(0) '& vbCrLf '回车换行
目前text2中显示为$PAU
If b(0) = "$STA\r\n" Then //If b(0) = "$STA" Then 这样写也不可以
requ_flag = 1
ElseIf b(0) = "$PAU\r\n" Then //ElseIf Text2.text = "$PAU\r\n" Then 这样也不行
stop_flag = 1 ??问题在这,就是进不了这句
不知到为什么?不知道是不是因为串口 马上要接收$STA,速度太快引起的。目前调试结果来看$STA好像没有接收到,因为TEXT2中没显示出来。大家看看
Case comEvReceive
requ_flag = 0
stop_flag = 0
b(0) = MSComm1.Input //串口接收到的数据放入b(0)中
Text2.Text = Text2.Text + b(0) '& vbCrLf '回车换行
目前text2中显示为$PAU
If b(0) = "$STA\r\n" Then //If b(0) = "$STA" Then 这样写也不可以
requ_flag = 1
ElseIf b(0) = "$PAU\r\n" Then //ElseIf Text2.text = "$PAU\r\n" Then 这样也不行
stop_flag = 1 ??问题在这,就是进不了这句
不知到为什么?不知道是不是因为串口 马上要接收$STA,速度太快引起的。目前调试结果来看$STA好像没有接收到,因为TEXT2中没显示出来。大家看看
*****************************************************************************
欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
feiyun0112 的ElseIf left(Text2.text,4) = "$PAU" 也可以
非常感谢!!!
不过我有不明白的,就是下位机发给这边串口 的是$PAU\r\n,由刚才我调试看b(0)中也确实接收到了$PAU\r\n,但为什么让它在text2中显示出来却只显示$PAU,我想的是是不是在text2中转化为实际的行动了,就是回车换行了,等待下面接收到的问题,忘明白的给予正解第二个问题是,我下位机发送了$PAU\r\n命令,上位机接收到了也执行了相应的语句,很短时间内下位机就发送$STA\r\n命令,我现在这个命令收不到,我用串口 调试助手试了一下,可以收到的,说明下位机这个命令是发出来的,只是上位机这边接收不到,不知到问题出在哪,感觉不像程序出了问题吧,因为$PAU\r\n这个命令能接收到,难道第一次接收完了要清什么东西吗?高手正解,谢谢
If stop_flag = 1 Then
Do
Loop Until requ_flag = 1 ???单步执行程序走到这就不动了
requ_flag = 0
stop_flag = 0
End If
……
……
会不会像上面那样一直在这执行,当串口那有数据进来时也不去响应oncomm事件了??该怎么解决这类问题呢
不过想想虽然程序一直在loop这执行,但是当串口那有数据进来时,相当于有中断了,程序应该去处理oncomm事件了啊,处理完了再回到loop这,是不是应该这样呢?
Do
doevents
Loop Until requ_flag = 1
requ_flag = 0
stop_flag = 0
End If
doevents
Loop Until requ_flag = 1
List1.AddItem "正在发送数据……"
Do While Not EOF(1) '循环至文件尾
'读出一行数据放入one_line中
Line Input #1, one_line
List1.AddItem one_line
'得到一行数据,然后串口发送处理
MSComm1.Output = one_line
'延时50ms
Sleep (50)
DoEvents
If stop_flag = 1 Then
Do
DoEvents
Loop Until requ_flag = 1
requ_flag = 0
stop_flag = 0
End If LoopClose #1
'数据发送完毕发结束标志
Text1.Text = "$END\r\n"
MSComm1.Output = Text1.Text
List1.AddItem "数据发送完毕"Private Sub MSComm1_OnComm()
Text2.Text = ""
'在CommEvwnt中接收数据
Select Case MSComm1.CommEvent
Case comEvReceive
b(0) = MSComm1.Input
Text2.Text = Text2.Text + b(0) '& vbCrLf '回车换行
If b(0) = "$STA" & vbCrLf Then
requ_flag = 1
ElseIf b(0) = "$PAU" & vbCrLf Then
stop_flag = 1
Else
'打开文件
Open "d:\sun\temp.txt" For Append As #1
'写入文件
Print #1, b(0)
List1.AddItem "保存完成"
'MSComm1.InBufferCount = 0
'关闭文件
Close #1
End If
Case comEvSend
End Select
End Sub主要目的是发几包数据后接收到下位机的暂停命令,暂停发送数据,等接收到下位 机的开始命令,再继续发,我在想现在能收到暂停命令却收不到开始命令,会不会是因为这两个命令之间的间隔太小的缘故啊