RS485转接RS232下的冲突检测 点击:4173 | 回复:7



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2004-01-16 09:54:00
楼主
一条RS485总线,用RS232-485转接器与PC通讯。由于485是半全工协议,存在冲突可能。但在PC端,怎样通过操作RS232来检测冲突发生? 请赐教!



gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-09-27 21:45:00
1楼
请Garylin等大侠指教: 以CSMA/CD(带冲突检测)协议为参考,如果发送端可以检测信道,如果两个节点同时发送,两个节点同时能发现冲突,立即停止发送而不必等到帧发送完毕,随机延时后重发。 如果只能由接收方检测信道。则如果两个节点同时发送,一直到发送完毕都无法知道冲突。只能采用接收方发送应答信号的方式。如果发生冲突,接收方无应答。发送方收不到应答,随机延时后重发。无疑这样的效率很低。是不是类似CSMA的协议? 常用RS485芯片中带不带冲突检测?经转接器后有无等价之RS232操作?

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-09-28 00:46:00
2楼
CSMA/CD 是在信号发送前, 以及发送后都作信号冲突检测. 等待回应, 应该是上层 (Application) 的事情. 目前在 Ethernet 上常用的是 10/100M 的通信速度, CSMA/CD 的表现尚称良好. 但当用户数很多时, 信号冲突的问题就会显得比较明显, 效率会较差. 485 芯片恐怕是不支持这功能吧?! 我不确定! 在 485 网络上, 多是一个主机, 一或多个从机, 由主机主控通信顺序, 采用一问一答. 这方式的确简单好用. 您所谓的等价之 RS-232 操作, 意指?

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-09-28 06:54:00
3楼
因为没研究过485的芯片,不知道有无检测冲突之功能。 但看RS232说明。错误检测好象只用在接收信道,而发送信道没有(也许因为RS232只设计来双机通讯),既使485芯片有此功能,也无法用转换器转换成RS232上等价操作。

zsbs

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 145回
  • 年度积分:1
  • 历史总积分:234
  • 注册:2003年11月27日
发表于:2004-01-04 18:59:00
4楼
(1)RS485是一种半双工通讯协议,在整个RS485网络中,任一时刻只能有1个站点发送信息,决不允许有2个以上的站点发信息,否则出现冲突,因而通常在RS485网络中只能有1个主站,能主动发命令,其它从站只能在接收到主站人命令后才能发信息,即从通讯协议上保证不出现冲突。 (2)RS232—485转换器的收发切换是自动实现的,但不能识别冲线上的冲突

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2004-01-05 10:51:00
5楼
《RS485能否从机向主机发出请求?冲突如何解决?》 http://www.gongkong.com/tech/detail.asp?id=195659 《转自中国电子技术信息网的关于如何处理RS485竞争》 http://www.gongkong.com/tech/detail.asp?id=197782

linac

  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 48回
  • 年度积分:0
  • 历史总积分:312
  • 注册:2002年7月21日
发表于:2004-01-15 22:58:00
6楼
Garylin推荐的两个贴子都看了,有一点想法。 1.采用CSMA/CD必须要485芯片支持冲突检测,否则免谈。 2.你所说: “建议将 --从机向主机请求, 待主机应答-- 的动作略过, 因为, 少一次通信就少一次碰撞冲突的机会.   Step-1. 从机送出 主机(目的)站号/来源(从机)站号/通信编号/从机数据 给主机.   Step-2. 主机回应 从机(目的)站号/通信编号/OK 给从机.   则通信编号重覆, 则表示上次回覆的 OK 弄丢了. 再回应一次 Step-2 (此次则不将数据重覆记录).   Step-3. 若从机未收到 Step-2 的回应, 则表示冲突发生. 随机 delay 一段时间后, 重作 Step-1 的通信 (使用原通信编号/序号). " 我的想法,从机请求,主机应答的过程在某些场合还是有必要的。比如数据帧比较大。 我的建议,在发起通讯前,必须监听线路,待线路空闲后,至少等待一个时间隙(这个时间隙留给原通讯的双方继续通信或应答)。再发起通讯请求,如果其它站点同时发出通讯请求,就发生冲突,因为此处硬件无冲突检测机制,发送方无法得知冲突,继续发送完全帧。而接收方得不到正确的帧,无法应答。 发送方收不到应答,再随机等待,监听信道,如闲,再发请求。 这样的好处是,一旦抢到信道,其它站点不会干扰。 如果直接发送数据帧,因为数据帧较大,冲突-重试要浪费很多信道。而通讯请求帧极短,可以仅有数字节,效率较高。

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2004-01-16 09:54:00
7楼
上述两例中的应用, 其通信量都很少. 此时通信次数愈少应该会愈好, 可减少冲突的机会... 个人认为. 您的想法很好, 从机发送前先监听线路上的通信, 待其他设备的通信结束后再开始发送. 当某从机取得 token 时, 您也得确保其它从机一并被知会才行, 以避免其它从机从中作梗. 另外, 从机取得 token 后, 其它的从机得等待多久(或是不断的监听?)才可以作下一次的通信请求? 这或许您也得依您的系统作计算, 取得一个合理且安全的值.

热门招聘
相关主题

官方公众号

智造工程师