| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 709 人关注过本帖
标题:[求助]我的scomm程序为什么不能用?
只看楼主 加入收藏
it381616212
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-15
收藏
 问题点数:0 回复次数:3 
[求助]我的scomm程序为什么不能用?

Private Sub Command1_Click()
MSComm1.PortOpen = True
MSComm1.OutBufferCount = 0
MSComm1.Output = Text1.Text
End Sub

Private Sub Form_Load()
Me.MSComm1.InBufferCount = 0
Text1.Text = "a123456b"
Me.MSComm1.Handshaking = comXOnXoff
Me.MSComm1.Settings = "4800,n,8,1"
Me.MSComm1.InBufferSize = 1
Me.MSComm1.OutBufferSize = 1
Me.MSComm1.InputMode = comInputModeText
Me.MSComm1.InputLen = 0
Me.MSComm1.RThreshold = 1
Me.MSComm1.SThreshold = 1
End Sub

Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Text2.Text = MSComm1.Input
MSComm1.PortOpen = False
Case comEvSend
MSComm1.Output = "a123456b"
End Select

End Sub

请做串口的高手指导一下.我要做的是读取一个加密锁里的加密字符窜,读取的指令是:a123456b,但是我收到的都是0.这是为什么呢,我是菜鸟.所以你们不要笑我.

搜索更多相关主题的帖子: scomm Sub Private 
2006-06-19 08:54
it381616212
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-15
收藏
得分:0 
贴了半天没有人回.
最后自己研究了半天,看明白是怎么回事了.原来串口只要被打开以后,只要MSComm1.Output里有值它就会自动的发送出去,我上面的程序里连续发送了两次同样的命令,由于两条命令间的时间间隔很短所以就发生了错误.

Private Sub Command1_Click()
MSComm1.PortOpen = True
MSComm1.OutBufferCount = 0
MSComm1.Output = Text1.Text
End Sub

Private Sub Form_Load()
Me.MSComm1.InBufferCount = 0
Text1.Text = "a123456b"
Me.MSComm1.Handshaking = comXOnXoff
Me.MSComm1.Settings = "4800,n,8,1"
Me.MSComm1.InBufferSize = 1
Me.MSComm1.OutBufferSize = 1
Me.MSComm1.InputMode = comInputModeText
Me.MSComm1.InputLen = 0
Me.MSComm1.RThreshold = 1
Me.MSComm1.SThreshold = 1
End Sub

Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Text2.Text = MSComm1.Input
MSComm1.PortOpen = False
Case comEvSend
MSComm1.Output = "a123456b"
End Select

End Sub

改正的方法是将comEvSend时间响应块取掉.然后把MSComm1.PortOpen = True放到form_load里.这样问题就得到了解决.
改完以后的代码如下:有什么问题请高手指教,上面的只是我自己的看法.

Private Sub Command1_Click()
MSComm1.Output = Text1.Text
End Sub

Private Sub Form_Load()
Text1.Text = "a123456b"
Me.MSComm1.Handshaking = comXOnXoff
Me.MSComm1.Settings = "4800,n,8,1"
Me.MSComm1.InBufferSize = 8
Me.MSComm1.OutBufferSize = 8
Me.MSComm1.InputMode = comInputModeText
Me.MSComm1.InputLen = 0
Me.MSComm1.RThreshold = 1
Me.MSComm1.SThreshold = 1
MSComm1.PortOpen = True
End Sub

Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Text2.Text = Text2.Text & MSComm1.Input
MSComm1.OutBufferCount = 0

End Select

End Sub





我的邮箱地址是:381616212@ 我的qq:381616212
2006-06-19 11:05
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 

其实问题主要出在这个地方 :

Case comEvSend
MSComm1.Output = "a123456b"

它的意思是说:字符串 发送成功后再发送一条 "a123456b" ,没猜错的话,没改前,你的程序一直在向设备发送"a123456b"



2006-06-19 12:16
it381616212
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-15
收藏
得分:0 
恩,就是这个问题了,连续发送了N条指令。
没有改之前我接受的文本框是狂闪的,说明它一直在接受数据。

谢谢楼上的。

我的邮箱地址是:381616212@ 我的qq:381616212
2006-06-20 09:49
快速回复:[求助]我的scomm程序为什么不能用?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021090 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved