搜索
bottom↓
回复: 16

请问一个关于485通信的问题

[复制链接]

出0入0汤圆

发表于 2012-2-13 09:32:14 | 显示全部楼层 |阅读模式
我在485总线上挂了4个节点
然后每个节点将会发送的数据长度不同
A是3个字节或9个字节的
B是5个字节的
C是6个字节的
要怎样才能准确的接收到数据

先说说我的想法
我是打算在串口中断里面接收导数据后判断
A的数据开头是A0,B开头是A1,C开头是A2
根据判断在把接收到的放到对应的数组里面
但是又不想在中断里面做太多的事情
而在死循环里面做的话又担心一个数据还没处理完下一个数据就来了
因为死循环里面还要执行其他操作,有扫描按键,控制输出等。
请问有什么方法

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-2-13 09:37:00 | 显示全部楼层
要不给ABC三个节点每个节点建一个链表,每次收到数据分别放在各自的链表里的最后。这样中断只负责从串口缓冲区复制数据到链表里,再在死循环里分别检测3个链表中的数据

出0入0汤圆

发表于 2012-2-13 11:15:01 | 显示全部楼层
没有协议?

出0入0汤圆

发表于 2012-2-13 11:35:03 | 显示全部楼层
只要有协议就可以的啊。你要多少个字节都没问题。

出0入0汤圆

 楼主| 发表于 2012-2-13 17:13:53 | 显示全部楼层
我想问485总线有没有检测忙信号的这个功能
就是当我节点想发东西的时候我要检测是不是已经有其他节点在发送
如果有的话我延时一下
如果没有就发出去

出0入0汤圆

发表于 2012-2-13 18:23:11 | 显示全部楼层
老师提问学生答,老师没叫到学生,学生不能提问,不允许大家一起发问,这样大家听不清楚

出0入0汤圆

发表于 2012-2-13 19:03:17 | 显示全部楼层
回复【4楼】tianzhiying
我想问485总线有没有检测忙信号的这个功能
就是当我节点想发东西的时候我要检测是不是已经有其他节点在发送
如果有的话我延时一下
如果没有就发出去
-----------------------------------------------------------------------

不行的,还是容易冲突。

出0入0汤圆

发表于 2012-2-14 09:31:53 | 显示全部楼层
接收器如果可以设置超时就很好办.....超时出现就是一个包收到了.

出0入0汤圆

 楼主| 发表于 2012-2-14 11:10:50 | 显示全部楼层
回复【5楼】hefq 何访贤
-----------------------------------------------------------------------


我没有说不允许大家发问
。。。。。

出0入0汤圆

发表于 2012-2-14 11:19:00 | 显示全部楼层
"在串口中断里面接收导数据后判断,A的数据开头是A0,B开头是A1,C开头是A2,根据判断在把接收到的放到对应的数组里面"这对串口中断服务程序来说,工作量不是很大吧?

出0入0汤圆

 楼主| 发表于 2012-2-14 11:53:52 | 显示全部楼层
回复【2楼】huayuliang 花生
-----------------------------------------------------------------------

不明白你所说的协议是什么
各个节点有各个节点的数据
区分的话只是以开头数据+结尾一个字节的校验

出0入0汤圆

发表于 2012-2-14 13:19:28 | 显示全部楼层
不仅区分数据,还要区分从机有没有接受完,主机决定那个从机可以发送数据。

出0入0汤圆

发表于 2012-2-14 16:03:27 | 显示全部楼层
要作下时间上的处理(自己设计来完成),想法如下:

主机发送基点命令时间间隔要大于数据回收的时间,如节点最长回放数据时间用1T来表示,那么主机发送时间间隔最好为4T,所有的节点都要延时处理
这样得到命令的节点回传数据,其余的节点延时等待不处理,延时时间是数据最长发送基点的发送时间间隔两倍,为2T,这样回传数据,只能主机得到,从机都在等待中,当接收完数据后,所有的节点都变成了接收命令状态(接收状态),再过1T-2T时间,主机发来命令,重复以上时序,就可以区分接收每个节点数据了.
整个发送命令,和接收数据就在4T内来完成了.

出0入0汤圆

发表于 2012-2-14 18:34:57 | 显示全部楼层
回复【楼主位】tianzhiying
-----------------------------------------------------------------------

modbus 通信协议

出0入0汤圆

发表于 2012-2-14 19:32:02 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2012-2-15 21:13:48 | 显示全部楼层
一般RS-485采用半双工工作方式,任何时候只能有一点处于发送状态
中断中你肯定要接收数据与转存的:建立一个足够大的缓存数组就可以了;
死循环中:对缓存数组进行数据提取与处理,并清空缓存数组就可以了;
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-27 20:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表