请求算法?关于串口读写速度问题。

cyczl666 2003-09-11 09:20:24
请求算法:
我现在有十块仪表串联接到串口,上位机监控数据,但需要向每块表发送指令才能得到相应的返回数据,串口通讯的速度一定小于语句的速度,每块表需要读4个数据,这样一共40此发送和接收,怎样使得速度最快还不会出现冲突。

...全文
116 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
136196 2003-09-17
  • 打赏
  • 举报
回复
(1)此处向你提供一种实例参考:
单片机主从分布,即所有子单片机的接收端接主单片机发送端,所有子单片机的发送端接主单片机接收端;
使用中断方式3;
初始化时剔除未响应设备,及报错,那么在实际执行中,将很少用到超时;
轮讯;
波特率9600,10台外设,轮讯周期为1/32秒。
(2)分级式控制,分级汇报,汇总:
将使用更多的CPU;且主单片机及从主单片机将具有双串口。
xiaocha 2003-09-16
  • 打赏
  • 举报
回复
???通讯正常时1.5秒循环一次,每次发出指令等待返回,超过150ms就超时???
难道正常时也每次都超时???
收完一个下位机的数据,立即切换可能会更快些!!!
dboy1981 2003-09-16
  • 打赏
  • 举报
回复
Solution 1: 可以模仿环形令牌网的方式,一个表传完数据后让下个表传输数据。最好通过硬件来实现,一个表传输完后从某个口输出一个脉冲,通知下个表传输,缺点是成本提高,而且距离大的话可能实现有困难,且其中一个表坏了,整个网络都不通。

Solution 2: 在上位机软件的算法方面解决。在通信协议上,采用 ht_toto(独眼龙) 的建议,将四个数据一起传输,并定义数据串的前导符和终止符以及每个数据的分隔符;在串口的设置上,设定每个字符触发一次串口事件;算法如下:定义一个全局字符变量,当受到的字符串的第一个字符为前导字符,将字符串赋值给全局变量,同时检测最后一个字符是否为终止字符,如果不是,则返回,如果是,则发送下一个采样指令,然后提取、处理数据,初始化全局变量。这样就可以在最大程度上使数据的传输保持连续。

如果有什么考虑不周全的地方,请大家指出讨论。
ht_toto 2003-09-14
  • 打赏
  • 举报
回复
可以采用一次读取4个数据的方法,以减少上位机的发送次数和收发切换的次数。这样,在理论上,用于数据传输上的时间可以减少到原来的62.5%,而用于收发切换的时间则可减少到原来的25%。
cyczl666 2003-09-13
  • 打赏
  • 举报
回复
波特率9600,还好,现在通讯正常时1.5秒循环一次,每次发出指令等待返回,超过150ms就超时,这样速度不算快,但准确性还能保证。
888yifeng 2003-09-12
  • 打赏
  • 举报
回复
你只要保证同一时间只有一个CPU“发话”
再保证每个CPU的驱动能力一般就没问题了。


如果负载很多,那速度要提高就只能靠驱动了。
要不然波特率高了波形就会失真,幅度也会下降,
建议你用示波器,看一下波形,一般是可以看出问题的。
cyczl666 2003-09-12
  • 打赏
  • 举报
回复
我本来就是多地址的,每块标有一个Addr。查询就是很慢,快了就容易冲突。
888yifeng 2003-09-11
  • 打赏
  • 举报
回复
用单片机也不难,给每块表编个地址就可以了,只是速度不可能太高。
程序处理也比较麻烦。
888yifeng 2003-09-11
  • 打赏
  • 举报
回复
用DSP吗?
如果是可以设串口模式为地址位多处理器模式。

地址对应才通信,而之后的数据由于其没有地址位下位机不动作。
而其波特率可以达到1。8MBit/S,应该可以满足你的要求。

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧