18252776113 发表于 2014-4-1 10:38:29

求教,一个主站能否通过RS485总线接收自己发出的数据?

求教,一个主站能否通过RS485总线接收自己发出的数据?
主站发送完数据后,立即打开接收,能否接收到刚刚发送的数据?
主要是想接收这条已发出的数据,进行比对,检验总线冲突,软件上该怎么做呢?求个思路;
硬件上是否要添加一些东西?请教!

magiczero 发表于 2014-4-1 10:48:35

要先打开接收然后再发送,软件上要能同时处理发和收,并实时的比较是否相同,不同则表示冲突或被干扰了

NJ8888 发表于 2014-4-1 10:54:16

485半双工的

51EDA技术 发表于 2014-4-1 10:55:37

其实。。。。。你需要的是CAN BUS                                                                                                               
这些工作 CAN 硬件会帮你完成。

hcambridge 发表于 2014-4-1 10:58:24

负责的告诉你,不能,楼上是CAN专家,用can吧,专门实现你的需求的。

y595906642 发表于 2014-4-1 11:00:25

can总线带冲突检测和重发机制
贵点还是有原因的{:biggrin:}
485要想监控的话 只能再加一路485并在总线上 只做监控用

18252776113 发表于 2014-4-1 11:04:35

51EDA技术 发表于 2014-4-1 10:55
其实。。。。。你需要的是CAN BUS                                                                      ...

谢谢,因为是要在原来的板子上的是485,现在要在原来的基础上加一个功能,我问问领导能不能修改板子。

cocom 发表于 2014-4-1 11:14:45

485,二线制,收发都在这二条线上,是可以监听自己正在发送的数据的,只要你的485驱动电路有RE控制,在发送时允许接收即可,这里,串口硬件发送完一个字节,接收器立即收到一个字节。

18252776113 发表于 2014-4-1 11:22:42

y595906642 发表于 2014-4-1 11:00
can总线带冲突检测和重发机制
贵点还是有原因的
485要想监控的话 只能再加一路485并在总线上 只 ...

谢谢,我也想过用两片485,正在向领导反映,还未收到答复,能再请教一个问题吗?
主站从站之间通讯,需要唯一地址,领导说,要用唯一的ID号进行差别延时,使单片机自己产生一个通讯地址,但是ID号数值范围太大了,想了1天了,也没想出有什么算法,减少延时又不会产生重复;
然后我才想,随机延时+冲突检测,生成地址,所以才有上面的提问;
按照领导的想法,还是用ID号,产生地址,有什么好的思路呢?请赐教。。。

18252776113 发表于 2014-4-1 11:34:37

本帖最后由 18252776113 于 2014-4-1 12:23 编辑

cocom 发表于 2014-4-1 11:14
485,二线制,收发都在这二条线上,是可以监听自己正在发送的数据的,只要你的485驱动电路有RE控制,在发送 ...

十分感谢,有RE接收控制,在现成的板子上是和DE连在一起的,需要断开;也就说对485的RE、DE,可以用两个IO口分别控制;也可以不用,直接上拉DE、下拉RE,就可以了是吗?
如果总线上有多个站在发送数据,那么发送数据的这个站监听到的数据就会错误,是这样理解吧?再明确一下。
我本来是想再加一片485,但因为板子是现成的,领导不支持过大改动硬件,一直再考虑。所以。。。
其实是这样的,主站从站之间通讯,需要唯一地址,领导说,要用唯一的ID号进行差别延时,使单片机自己产生一个通讯地址,但是ID号数值范围太大了,想了1天了,也没想出有什么算法,减少延时又不会产生重复,比较郁闷;
然后实在没辙了才想,随机延时+冲突检测,生成地址,所以才有上面的提问;谢谢你了;

y595906642 发表于 2014-4-1 11:35:38

你有多少个设备?每个设备用ID号生成一个地址吗?

18252776113 发表于 2014-4-1 11:55:35

y595906642 发表于 2014-4-1 11:35
你有多少个设备?每个设备用ID号生成一个地址吗?

是的,最大30个从站,一般情况下8个,不固定;每个站上电通讯地址==0,用唯一的ID号生成一个延时系数,进行一个差别延时,产生不同的地址;
问题是,ID号范围太大了,如何生成这个有效的延时系数,不能太大,不能重复,这个算法,想了1天没想出来,所以。。。。。。

y595906642 发表于 2014-4-1 12:32:58

我们这边是这样做的
第一种方式用拨码开关做不同的地址选择
第二种方式是加EEPROM存地址,需要的时候挨个配置
我觉得你可以用个简单的办法就是取ID号最后八位

18252776113 发表于 2014-4-1 12:48:58

y595906642 发表于 2014-4-1 12:32
我们这边是这样做的
第一种方式用拨码开关做不同的地址选择
第二种方式是加EEPROM存地址,需要的时候挨个配 ...

谢谢了;
拨码开关做不同的地址选择,我问问领导;
目前就是手动输入存EEROM,太多了很麻烦,所以才被要求改;
目前的想法,就是取ID号的后几位,乘上10ms,就构成了差别延时;问题就在于ID后几位较大的话,这个延时太长了;想把这个数字成倍缩小,又会出现重复;昨天想了1天,就是找不到一个好的算法,解决这个问题,所以纠结了。。。
不管怎么说,真心谢谢你!

myxiaonia 发表于 2014-4-1 16:54:59

18252776113 发表于 2014-4-1 11:04
谢谢,因为是要在原来的板子上的是485,现在要在原来的基础上加一个功能,我问问领导能不能修改板子。 ...

赶紧熟悉下can,然后给你领导推荐下,看能不能说服她

myxiaonia 发表于 2014-4-1 16:59:41

18252776113 发表于 2014-4-1 11:55
是的,最大30个从站,一般情况下8个,不固定;每个站上电通讯地址==0,用唯一的ID号生成一个延时系数,进 ...

看看dhcp,看有没有思路可以参考

18252776113 发表于 2014-4-1 17:08:59

myxiaonia 发表于 2014-4-1 16:59
看看dhcp,看有没有思路可以参考

十分感谢,我马上去看看dhcp。

18252776113 发表于 2014-4-25 11:27:12

感谢楼上各位大侠指导,终于用RS485实现自动生成地址,谢谢!

bsz84 发表于 2014-4-25 12:30:18

感谢楼上各位大侠指导,终于用RS485实现自动生成地址,谢谢!
___________________________________________________________
楼主能说说方法?

18252776113 发表于 2014-5-3 15:05:49

bsz84 发表于 2014-4-25 12:30
感谢楼上各位大侠指导,终于用RS485实现自动生成地址,谢谢!
__________________________________________ ...

你好,大致的思路是这样的;主站不断向从站发送轮询地址的数据,并且判断从站反馈的数据是否正确,正确就认可该从站地址,不正确就发命令给从站重新生成地址;从站随机生成地址,被动接受应答主站轮询命令,反馈数据;当总线上存在地址重复时候,就会发送错误的数据(大多时候是乱码),主站接受判断。。。就是这样的思路;至于这个是否可靠,还不清楚。。。因为现在遇到一个问题,不知道如何解决?
当两个从站地址重复的时候,同时占用总线,想主站发送数据,出现只有一个从站发出数据,另一个从站发不出数据的情况,于是导致了两个重复地址的存在;出现这种情况概率大概是1/50,而且之后发送应答的数据又正确了,对于重复地址可以修正过来;至于真正原因却是不知道,所以很惆怅。。。
页: [1]
查看完整版本: 求教,一个主站能否通过RS485总线接收自己发出的数据?