3520|17

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问一个串口编程问题 [复制链接]

在上位机对串口的操作中,由于业务流程的需要,有时需要连续两次项串口发送指令,但是者往往回导致错误。请问在这种情况下,应该怎样控制着两条指令的发送。最理想的情况下是应该等到第一条指令发送的指令得到响应之后再发送第二条指令,但是有一串口响应需要一定的时间,有时无法判断它什么时候响应发出去的指令,我一般的做法是在两条指令之间Sleep一下,但我认为这不是一个好的方法,请问有没有跟好的方法,谢谢!

最新回复

同意  详情 回复 发表于 2009-12-17 00:56
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
使用定时器来控制发送,第一次发送命令A,下一次就发送命令B,定时器的时间间隔设置的大一些(比如100ms,一般串口通信耗时需要30ms左右)
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
就定时 跟延时 的效果是一样的 解决不了根本问题

最好是应该发送完了第一条指令,等待对方返回信息,如果成功了,继续第二条,这就是双方定的串口协议

如果对方不给你返回信息的话,你可以判断本机发送第一条信息 是否发生完成,如果完成了,在继续发送
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
查询发送缓冲器为空以后,延时10ms再发送下一个命令。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢楼上的回答。我在把我的问题在描述详细一些
比如有如下的一个过程
向硬件执行一个操作(不是发指令),硬件就会对这个操作进行响应,上位机得到这个响应后,会向硬件发送一个指令(假设命名为S),然后硬件也会响应这个指令。但是如果我已较快的速度连续做两个这个操作(或者控制两个操作之间的间隔)。就有可能出现这样的情况,硬件响应第二个操作与响应指令S的时间几乎同时,这样很有可能发生错误。请问这种情况应该如何避免?应为操作不是通过发送指令来执行的,上位机无法进行控制,谢谢!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
就是用定时器,不要用sleep延时,延时很浪费cpu资源!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 4 楼 maoloverme1 的回复:
谢谢楼上的回答。我在把我的问题在描述详细一些
比如有如下的一个过程
向硬件执行一个操作(不是发指令),硬件就会对这个操作进行响应,上位机得到这个响应后,会向硬件发送一个指令(假设命名为S),然后硬件也会响应这个指令。但是如果我已较快的速度连续做两个这个操作(或者控制两个操作之间的间隔)。就有可能出现这样的情况,硬件响应第二个操作与响应指令S的时间几乎同时,这样很有可能发生错误。请问这种情况应该如何避免?应为操作不是通过发送指令来执行的,上位机无法进行控制,谢谢!


这个显然不是在上位机能解决的问题
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

8
 
同意6楼,应该在硬件这边想辙,比如响应操作时拒绝响应命令,直到操作完成,也不知这符合你要求不....
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 
看硬件吧
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

10
 
应答式
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
看了半天还是不明白
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

12
 
最好2边一起改
上位机
一般是发一个然后等待一定时间,对面在这段时间内没响应走开
下位机
接受到一个指令后执行或者在一个操作过程中,再不要接收串口数据,即使串口有数据也扔垃圾堆去
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

13
 
1、定时发,延长较大的间隔;
2、收到回应再发,设定一个timeout时间;

推荐第二种,
btw:要有模块和分层的概念,收发要严格分开,消息处理和串口收发要严格分开,以后才会省心;
btw:建议看看TCP/IP和OSI模型,虽然不需要做这么复杂,但看一下会对你有启发。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

14
 
    串口通信还是制定一个简单但是严密的通信协议,两边协调控制,硬件的速度是不可能跟上上位机的速度,两个连续发,上位机没问题,硬件电路受不了。

    比如说,上位机收到硬件发来的一个特殊的指令来表示,你发的信息我已收到,你可以发送下一个了,如果一直没收到这个反馈指令,上位机重发或报错。

    制定通信协议看似麻烦许多,当你的系统变得复杂而不是简简单单的两个指令的时候,你就体会到他的好处了
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

15
 
协议!
双机通信,必须有协议!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

16
 
采用应答式,查看握手信号。
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

17
 
关键在握手。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 16 楼 tcdzyq 的回复:
关键在握手。

同意
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表