VB串行通信中MSComm1.Output 发送的问题

我的代码如下:PrivateSubMSComm1_OnComm()Dima(4)AsBytea(0)=&HAa(1)=&H5Ea(2)=&HAa(3)=&H5Ea(4)=... 我的代码如下:
Private Sub MSComm1_OnComm()
Dim a(4) As Byte
a(0) = &HA
a(1) = &H5E
a(2) = &HA
a(3) = &H5E
a(4) = &H11
MSComm1.Output = a
End Sub
为什么每次发送,收到的都是两个重复的数据,比如上面收到的就是“0A 5E 0A 5E 11 0A 5E 0A 5E 11 ”。
理论上来说,每次发送,收到的应该是“0A 5E 0A 5E 11 ”才对。望高手解答。
我的没有写接收程序,只是定义了MSComm1.RThreshold = 2。初始化子程序如下:
Private Sub Form_Load()
With MSComm1
.CommPort = 2
.Settings = "115200,e,8,1"
.InputMode = 1
.SThreshold = 0
.RThreshold = 2
.InputLen = 0
.OutBufferCount = 0
.InBufferCount = 0
End With
MSComm1.PortOpen = True
End Sub
利用串口调试工具发送“<a”,却收到两次共10个字节数据,但是如果只发送字符一个字符“a”,就能正常收到5个字节数据。尝试过修改.RThreshold的值。仍然无法解决。
展开
 我来答
barocco
2011-03-25
知道答主
回答量:63
采纳率:0%
帮助的人:22.4万
展开全部
我认为是:你在MSCOMM1控件的ONCOMM事件中再次进行发送,于是有以上效果。
追问
非常感谢。我的没有写接收程序,只是定义了MSComm1.RThreshold = 2。初始化子程序如下:
Private Sub Form_Load()
With MSComm1
.CommPort = 2
.Settings = "115200,e,8,1"
.InputMode = 1
.SThreshold = 0
.RThreshold = 2
.InputLen = 0
.OutBufferCount = 0
.InBufferCount = 0
End With
MSComm1.PortOpen = True
End Sub
利用串口调试工具发送“<a”,却收到两次数据
追答
其实首先就应该说明,当使用OnComm,所用的通讯方式就是“事件驱动方式”。
这段是你写的代码吗?
Private Sub MSComm1_OnComm()
Dim a(4) As Byte
a(0) = &HA
a(1) = &H5E
a(2) = &HA
a(3) = &H5E
a(4) = &H11
MSComm1.Output = a
End Sub
不是接收的代码吗?我理解是:OnComm事件就是串行控件接收时所做的事情,应该做的是将接收到的内容送到某地(如将值送到文本框中去),而且你的代码还是在MSComm1控件的OnComm事件中将a送到MSComm1的输出中去再次进行发送。不怪?
另外,应该还有实现“发送”操作的代码吧?
[个人意见,如有错误请批评指正]
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
d6ab7n8qy
2011-03-25 · TA获得超过184个赞
知道答主
回答量:175
采纳率:0%
帮助的人:88.2万
展开全部
sj(0) = &H1
MSComm1.Output =sj
发送2字节
Dim sj(1) As Byte
sj(0) = &H1
sj(1) = &H1A
MSComm1.Output =sj
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
萍水e相逢
2011-03-25 · TA获得超过3万个赞
知道大有可为答主
回答量:5.9万
采纳率:46%
帮助的人:1.4亿
展开全部
同意 楼上的 看法

可能 是你 程序 里 有 2 次接收

贴出 你的 接收 程序
追问
非常感谢。我的没有写接收程序,只是定义了MSComm1.RThreshold = 2。初始化子程序如下:
Private Sub Form_Load()
With MSComm1
.CommPort = 2
.Settings = "115200,e,8,1"
.InputMode = 1
.SThreshold = 0
.RThreshold = 2
.InputLen = 0
.OutBufferCount = 0
.InBufferCount = 0
End With
MSComm1.PortOpen = True
End Sub
利用串口调试工具发送“<a”,却收到两次数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
comica
2011-03-25 · TA获得超过440个赞
知道答主
回答量:154
采纳率:0%
帮助的人:127万
展开全部
肯定有两次事件运行了,你没发现
追问
非常感谢。我的没有写接收程序,只是定义了MSComm1.RThreshold = 2。初始化子程序如下:
Private Sub Form_Load()
With MSComm1
.CommPort = 2
.Settings = "115200,e,8,1"
.InputMode = 1
.SThreshold = 0
.RThreshold = 2
.InputLen = 0
.OutBufferCount = 0
.InBufferCount = 0
End With
MSComm1.PortOpen = True
End Sub
利用串口调试工具发送“<a”,却收到两次数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式