rs485 多机通信问题! 点击:4942 | 回复:11



phil

    
  • 精华:2帖
  • 求助:0帖
  • 帖子:2帖 | 1回
  • 年度积分:0
  • 历史总积分:67
  • 注册:2003年8月05日
发表于:2003-12-22 20:00:00
楼主
最近用rs485做一个系统,现在进行的是测试系统,主要是再pc上通过转接头来把rs232转成了485,然后再用这个485来驱动几个单片机,每个单片机采集各自的数据发回来. 现在我们是用75184的半双工的芯片来做. 我们采用的是主发从受的功能.就是说如果主机呼叫的是从机的地址,从机采回送信号应答主机. 从机地址是用波盘开关,用p2口来查询读入. 现在的问题是单片设为1#号机一对一(pc对一台单片机)没有问题,主机发完同步头再发地址,从机能返回对应的地址和数据,非常正常,但是如果再接上一个2#号单片机,则主机(pc机)发1#机地址,则!#机响应,再发2#机地址,按道理应该2#机响应,但是这个时候没有反映.再发1#号机地址,1#号机子又响应.就好像1#和2#机来了个竞争,开始发了谁,后来发这机就能再响应,而发别的就不可以. 我在单片机程序中每次接受后都有清ri,侧过一个发送回传结束后,两台机子的rs485都是处于接受态.按道理不应该有这种现象.两台单片机程序一样.每次发送结束都有用jbc语句判断并清ti. 且半双工的方向控制确定没有错且都及时调整了,不然一对一发送也不会成功了. 实在不明白为什么会这样,把很多因数都考虑了 ,很茫然现在. 希望大家给点建议. (1#机或2#号机是相对说的,就是说如果先发了2#机那么1#也会出现和上面说的2#机那样的状况,就是不响应对它的地址操作.) 我的email: systemview@sina.com.cn qq:3519425. 希望大家帮帮我,快郁闷死了.谢谢



串口专家

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 55回
  • 年度积分:0
  • 历史总积分:78
  • 注册:2003年4月09日
发表于:2003-08-06 10:27:00
1楼
www.rs232.net.cn本网站上有两种产品可以解决你的问题。8520、8521。去看看吧。

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-08-06 10:51:00
2楼
感觉是单片机内的程序 logical 有问题, 没有将不相干的 address/command 给 skip 掉, 反而陷入某个 loop 中. 您也可以再多接一颗 I-7520 + PC 来监视 RS-485 上的信号. 看看是不是 command 有正常送出/信号冲突? 看看 #2 有没有回应/冲突? http://www.icpdas.com.cn/products/7000/i-7520_c.htm 这两天我也遇到一个小 bug. 在单一device 时运作正常, 两个 device 时运作有误. 後来发现是 buffer 内没有完全清为 0, 尚有其它东西残留, 所以多了些不该出现的东西.

老九

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 121回
  • 年度积分:0
  • 历史总积分:188
  • 注册:2003年6月21日
发表于:2003-08-06 13:15:00
3楼
单片机程序有问题,仔细检查M2的值有没有即使更新。

phil

  • 精华:2帖
  • 求助:0帖
  • 帖子:2帖 | 1回
  • 年度积分:0
  • 历史总积分:67
  • 注册:2003年8月05日
发表于:2003-08-10 21:55:00
4楼
谢谢各位,这个问题我已经解决了. 其实是我程序上的一个bug导致的. 我改成查询就一切ok了. 现在带很多台单片机都可以正常通信了. 谢谢大家.

danasun

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 7回
  • 年度积分:0
  • 历史总积分:19
  • 注册:2004年1月07日
发表于:2004-03-23 11:05:00
5楼
to phil, 我现在也在做类似你所作的DD,也出现你的这种问题,我是故意不设M2的,我采用的方法如下: 1.PC机端程序用VC++编写(网上查的),用(9600,n,8,1)发送接收数据,PC机接232/485转换器,通过max485作单片机接口。 2.单片机没设 M2,当1#单片机读到自己的代码1时,发送数据到PC,而2#单片机读到1时,不是自己相对应的代码,则将RS485处于发送数据状态1S(单片机发送数据只需几毫秒),这样1#单片机在发送数据时2#单片机的RS485处于发送数据状态也不会接收到数据。 不过这样做之后我也出现你的这种问题,只能读到其中一个单片机的数据。您看这样是否可行,若可行,我的问题可能出现在那里? 我不会写PC机的程序,故只能出此下策。(我曾该PC机程序用(9600,m,8,1)发送数据,以(9600,n,8,1)接收数据,但程序修改后只能用在RS232接口时,数据收发正常,接在RS485上时,不能通信)。 请你指导一下。万分感谢!

danasun

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 7回
  • 年度积分:0
  • 历史总积分:19
  • 注册:2004年1月07日
发表于:2004-03-28 11:57:00
6楼
我得问题解决的,谢谢大家.

guangtoujian

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 14回
  • 年度积分:0
  • 历史总积分:32
  • 注册:2005年3月06日
发表于:2005-04-14 22:24:00
7楼
想问一下,如果用一台PC机与多台单片机用MODBUS协议组成一网络,有没有可能实时采集各个单片机上的数据(比如说运行电流),要每台都要实时显示? 是不是PC逐一地对每个单片机都发送请求数据信号,然后接收1#单片机数据信号,然后再发送对2#数据请求,在接收2#数据,如此类推?? 这样好象很慢,实时性不是很高..... 还望指点一下实时网络具体怎么传输数据的,谢谢.

秋的深沉

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 5回
  • 年度积分:0
  • 历史总积分:15
  • 注册:2005年4月05日
发表于:2005-04-25 14:00:00
8楼
danasun把你的PC机端的程序发给我一份可以吗? xingchuanxi@163.com 谢谢你了,我也在做你哪个设计,交流一下啊?我的QQ:5503119

xxxxxxxx

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 12回
  • 年度积分:0
  • 历史总积分:92
  • 注册:2005年3月07日
发表于:2005-05-23 10:18:00
9楼
phil,你好 我是新人,我现在也在做这个题目,我的是“基于RS485通讯网络设计”,其他都没问题,就是通讯协议不会写,写不好。我想向你学习学习,希望你能给我发一份你的设计,非常感激。 我的地址是: mll119@sina.com 我的QQ号是:79614434 我们大家常交流,相互学习,共同进步!

vinyio

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2005年6月08日
发表于:2005-11-14 22:25:00
10楼
我也想要一份,麻烦发到我邮箱:cwy-304@163.com  万分感谢!

autoyx.com

  • 精华:0帖
  • 求助:0帖
  • 帖子:32帖 | 634回
  • 年度积分:0
  • 历史总积分:882
  • 注册:2005年9月27日
发表于:2005-11-23 13:54:00
11楼
485通信编程的难点在于完整正确的数据包的提取,一般有二种方法:
  1: 数据包前加同步帧,包长度信息,校验码.
  2: 通过接收数据的时间判断,如>50ms未有新数据,判断一个包接收结束. 
欢迎到我网站下载 http://www.tiasky.com/
  串口调试工具:SPCfgTest.zip 大小为 252 KB 
   调整字节串接收时间(10mS~200mS),可将一般串口调试工具收不全的数据全收全;或

不应断开收的数据收全、收完整。

热门招聘
相关主题

官方公众号

智造工程师