CN114374579B - 一种rs485总线竞争型通信方法 - Google Patents
一种rs485总线竞争型通信方法 Download PDFInfo
- Publication number
- CN114374579B CN114374579B CN202210040684.2A CN202210040684A CN114374579B CN 114374579 B CN114374579 B CN 114374579B CN 202210040684 A CN202210040684 A CN 202210040684A CN 114374579 B CN114374579 B CN 114374579B
- Authority
- CN
- China
- Prior art keywords
- bus
- data
- node
- mcu
- collision
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/40—Bus networks
- H04L12/40006—Architecture of a communication node
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04Q—SELECTING
- H04Q9/00—Arrangements in telecontrol or telemetry systems for selectively calling a substation from a main station, in which substation desired apparatus is selected for applying a control signal thereto or for obtaining measured values therefrom
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04Q—SELECTING
- H04Q2209/00—Arrangements in telecontrol or telemetry systems
- H04Q2209/60—Arrangements in telecontrol or telemetry systems for transmitting utility meters data, i.e. transmission of data from the reader of the utility meter
Abstract
本发明通过总线侦听和冲突检测,实现了RS485总线的控制权竞争,不再需要主节点管理控制,打破了主/从节点概念,各节点完全对等,可实现RS485总线中任意节点的数据主动上报,方案实现简单,成本低。
Description
技术领域
本发明涉及一种电能表中RS485总线竞争型通信方法。
背景技术
RS485是一种低成本的通信总线,因为只有2根线,容易部署,且通信距离较远,被广泛应用,是大多数物联网终端及采集设备的标配,如智能电能表。
但是,RS485总线一般只适应于有主节点的星型结构,大多数情况下,是主节点发起通信指令,从节点响应。这样就形成了两个问题,一是从节点有事件发生时,不能主动上报,必须等待主节点轮询到自己,才能上报,造成响应不及时或主节点需不停的轮询,占用总线资源;二是从节点之间不能相互通信,而事实上,RS485总线上的各节点物理上是对等的,应可以实现总线控制权竞争。
早期的以太网是采用同轴电缆传输,所有的电脑都通过BNC头并联在总线上,它与RS485在物理层上是相似的,而同轴电缆以太网的各节点基于CSMA/CD协议来竞争发送数据的总线控制权,因此本发明借用CSMA/CD协议思路来实现。CSMA/CD(Carrier SenseMultiple Access with Collision Detection,载波侦听多路访问/冲突检测协议)是广播型信道中采用一种随机访问技术的竞争型访问方法,其中载波侦听、冲突检测、时序控制是关键。
CSMA/CD(多点接入载波监听/冲突检测)协议,计算机以多点接入的方式连接在一根总线上,协议的实质是“载波监听”和“碰撞检测”。
载波监听就是利用电子技术检测总线上有没有其他计算机也在发送。载波监听实际上就是检测信道。在发送前,每个站不停地检测信道,是为了获得发送权;在发送中检测信道,是为了及时发现有没有其他站的发送和本站发送的碰撞,这就是碰撞检测。总之,载波监听是全程都在进行的。
碰撞检测就是边发送边监听。就是网卡边发送数据边检测总线上的信号电压的变化情况,以便判断自己在发送数据的时候其他站是否也在发送数据。当几个站同时在总线上发送数据时,总线上的信号电压变化幅度将会增大(互相叠加),当网卡检测到的信号电压超过一定的门限值时,说明总线上至少有两个站同时在发送数据,表明产生了碰撞(冲突),所以也称为冲突检测。这时,由于接收的信号已经识别不出来,所以任何一个正在发送的站就会立即停止发送数据,然后等待一段随机事件以后再次发送。
如果RS485也要实现总线控制权竞争,那么就同样需要实现载波侦听和冲突检测。
对于RS485来说,因为RS485与控制器MCU之间是标准的UART通信,UART在字节传输时有附加的起始位、校验位、停止位,通过这些附加位,在接收时,每个字节都能产生一个接收中断,可以用于判断总线的是否忙,相当于CSMA/CD协议中的载波侦听。
冲突检测是要求在数据发送过程中检测其它节点是否存在数据发送,同轴电缆以太网是由网卡上的专用电路或器件来完成的,其检测方法是在发送数据时检测总线上的信号电压的变化情况。而现有的RS485芯片和常规的电路设计都不具备这个能力,故需要对现有的RS485进行改进,以实现竞争通信。
发明内容
为了克服现有技术中RS485从节点不能主动上报事件以及从节点之间不能相互通信的不足,本发明提供一种利用总线侦听方法去捕捉总线空闲状态,配合时序控制,与其他节点竞争通信发送优先权的一种RS485总线竞争型通信方法。
本发明通过以下技术方案来实现:
一种RS485总线竞争型通信方法,包括总线侦听和冲突检测,其中,
总线侦听,每个节点在数据发送前,在接收数据,判断是否有数据发送给自己,由于RS485与控制器MCU之间采用UART通信,每接收一个字节都产生一个接收中断,用于判断总线是否忙;对RS485电路进行改进,将RS485芯片的数据传输端DI脚接地,MCU通过或非门连接使能端RE与DE,MCU的TXD端与或非门的两个输入端连接,或非门的输出端连接RE与DE,数据传输端 RO端连接 MCU的RXD端,冲突检测信号CD接入MCU的I/O中断,总线A线通过上拉电阻连接电源,总线B线通过下拉电阻接地,则当总线为空闲时,总线状态为“1”。 冲突检测,节点在数据发送时,若发送的数据为“0”,TXD为“0”,RS485芯片为发送模式,则正常发出数据“0”,若发送数据为“1”,TXD为“1”,RS485芯片切换到接收模式,并且利用总线空闲时状态为“1”特点,其他节点接收数据为“1”,冲突检测信号CD接入MCU的I/O中断,且CD的逻辑表达式 ,如果此时其他节点有数据发送“0”,则本节点的RXD为“0”,冲突检测信号CD为“0”,判断为总线存在冲突,在检测到冲突后,将RS485总线置为“0”状态超过1个字节的发送时间,这样任何一个节点都能检测到发生了总线冲突,从而放弃已接收的字节,恢复到总线竞争状态。
作为优选,设置有一个4字节传输时间的防冲突处理间隙,当总线有多种通信波特率时,用最低的通信波特率来确定,传输时间小于防冲突处理间隙的报文会被丢弃。
由于RS485与控制器MCU之间是标准的UART通信,UART在字节传输时有附加的起始位、校验位、停止位,通过这些附加位,节点在接收时,每个字节都能产生一个接收中断,可以用于判断总线的是否忙,相当于CSMA/CD协议中的载波侦听。异步串行通信,是以时间宽度来判断每bit数据的,当比特波特率9600bps,无校验,那么每个字节为10bit(1比特起始位+8bit数据+1bit停止位),则每个字节的传输时间为10/9600秒,只要检测到起始位特征,经过10/9600秒,就会产生一个接收中断。
而冲突检测时对RS485的电路进行改进后,若接收数据,TXD为“1”,RS485芯片为正常接收模式,若发送的数据为“0”,TXD为“0”,RS485芯片为发送模式,则正常发出数据“0”,若发送数据为“1”,TXD为“1”,RS485芯片切换到接收模式,且利用总线空闲时状态为“1”特点,相当于发送了数据“1”。实现了在数据发送期间接收到其它节点发送信号的可能,用于冲突检测。如果此时其它节点有数据发送“0”,本节点的RXD为“0”,冲突检测信号CD为“0”,判断为存在总线冲突。
本发明的有益效果在于:本发明实现了RS485总线的控制权竞争,不再需要主节点管理控制,打破了主/从节点概念,各节点完全对等;可实现RS485总线中任意节点的数据主动上报;方案实现简单,成本低。
附图说明
图1是发明RS485的电路结构示意图。
图2是冲突检测信号产生电路。
实施方式
下面结合附图和具体实施方式对发明作进一步详细说明。
一种RS485总线竞争型通信方法,包括总线侦听和冲突检测。
总线侦听,每个节点在数据发送前,在接收数据,判断是否有数据发送给自己,由于RS485与控制器MCU之间采用UART通信,每接收一个字节都产生一个接收中断,可以用于判断总线是否忙。
冲突检测,对RS485电路进行改进。
表1
表1为485芯片的管脚功能表。
如图1所示,将RS485芯片的数据传输端DI脚接地,MCU通过或非门连接使能端RE与DE,数据传输端 RO端连接 MCU的RXD端,RS485的CD端接入MCU的I/O中断,总线A线通过上拉电阻连接电源,总线B线通过下拉电阻接地。节点在数据发送时,若发送的数据为“0”,TXD为“0”,则DE端为高电平有效,RS485芯片为发送模式,则正常发出数据“0”,若发送数据为“1”,TXD为“1”,RE端为低电平有效,RS485芯片切换到接收模式。由于当总线为空闲时, A线上拉,B线下拉,则总线状态为“1”,此时利用总线空闲时状态为“1”特点,其他节点接收数据为“1”。如果此时其他节点有数据发送“0”,则本节点的RXD为“0”,冲突检测信号CD为“0”,其中,,判断为总线存在冲突,在检测到冲突后,将RS485总线置为“0”状态超过1个字节的发送时间,这样任何一个节点都能检测到发生了总线冲突,从而放弃已接收的字节,恢复到总线竞争状态。
节点在不发送数据时,MCU的TXD脚,默认输出为“1”,RS485的收发控制引脚RE为逻辑0状态,RS485芯片处于接收状态,与正常的接收情况一致。如果总线上有数据发送,则接收该数据,由于每个节点都有相应的地址,如果数据是发送给本节点的,则接收数据,如果不是发送给本节点,则丢弃该数据。相当于每个节点在发送前,在接收数据。由于RS485与控制器MCU之间采用UART通信,每个字节上有起始位和停止位,每个字节MCU都能产生一个接收中断,可以用于判断总线的是否忙,相当于CSMA/CD协议中的载波侦听。如果总线处于空闲状态,由于A线做上拉处理、B线做下拉处理,总线状态为“1”,其他节点接收数据为“1”。
节点在发送数据时,如果发送的数据为“0”,MCU的TXD脚输出为“0”,RS485的收发控制引脚DE为1状态,RS485芯片处于发送状态,由于发送数据引脚DI固定接低电平,因此正常发出了数据“0”。
如果发送的数据为“1”,MCU的TXD脚输出为“1”,RS485的收发控制引脚RE为逻辑0状态,RS485芯片处于接收状态,此时利用总线空闲时,总线状态为“1”这一特点,其他节点RS485芯片接收数据为“1”,相当于完成了发送数据“1”,而且此时,本节点处于接收状态,还可以接收来自其他节点发送的数据,用于冲突检测。
冲突检测CD,并将CD接入MCU的I/O中断,CD的逻辑表达式如下:
在此处U符号表示或门,冲突检测只判断TXD脚发送数据为“1”时,如果此时,RXD接收为“0”,则判断为总线冲突。当节点未发送数据阶段,不存在冲突,直接进入总线竞争状态,当发送0时,进行冲突检测的是其他发送节点,当发送1时,检测其他节点是否在发送0。
冲突检测中会出现多种情况,假设发生冲突的节点为E和F:
1)若发送节点E、F完全不同步,这种是大多数情况,因为E和F在发送“0”的时间错位,每个字节数据发送至少有1个起始位“0”出现,双方都很快收到了对方的“0”而使冲突检测信号CD为0;因为E和F发送时间不同步,即使发送相同的数据,也会有错位的情况,比如E开始发送0时,F原来的1还没发送完成,F在这个时间差时就会产生CD为0,此时CD=0的时间可能比较短。
2)若发送节点E、F完全同步,且发送字节一致,此时总线上所有节点都能接收到正确数据,冲突检测顺延到下一字节;
3)若发送节点E、F完全同步,但发送字节不一致,则该发送字节至少有1位不同,假定节点E、F节点分别对应为“0”和“1”,节点F的TXD为1,RXD为0,则CD为0,则节点F能检测到来自节点E的“0”,节点F的冲突检测信号CD为0。
为了保证总线冲突能被其它节点正确判断,在检测到冲突后,将RS485总线置为“0”状态超过1个字节的发送时间,这样任何一个节点都能检测到发生了总线冲突,从而放弃已接收的字节。
冲突发生后,可以采用CSMA/CD的截断二进制指数退避算法来实现重传。
防冲突处理间隙是检测到冲突后,需要经过这么长时间,才能回复总线竞争状态。
最小报文长度就是这个“防冲突处理间隙”折算成对应波特率的字节数,若小于这个字节数,在防冲突检测的时隙内报文就传输完了,期间若冲突发生,接收端会收到有数据位错误的bit,接收端(无冲突的节点)可能无法判断是数据帧的正确与否,将错误的数据当成有效数据进行了处理。设置了最小报文长度后,就可以杜绝这个问题,因为冲突检测后的时隙内有一个字节长时间的总线拉低为0的处理,因为帧接收还没完成,接收端是可知道总线已经发生了冲突的,会放弃数据。
为了保证冲突检测不误判,防冲突处理间隙按4个字节传输时间考虑,且都是每字节11位计算,即防冲突处理间隙44位数据传输时间。当总线的通信波特率为2400bps时,防冲突处理间隙约18.33mS。当通信波特率为115200bps时,防冲突处理间隙约0.38mS。在实际应用中,RS485总线可能存在多种波特率并存的通信情况,如智能电能表应用,不同版本的电能表混装,通信波特率有2400、4800、9600bps,以后还可能更高。
若在总线中要兼容多种通信速率,但报文传输是以字节为单位的,需以最小波特率的防冲突处理间隙来折算每帧报文长度,即低于最小报文长度时,需在报文末尾补充数据使之达到最小报文长度。
时间折算最小报文长度时,还与是否有校验相关,下表是一个兼容2400~115200bps的各种波特率的最小报文长度。
表2
本发明实现了RS485总线的控制权竞争,不再需要主节点管理控制,打破了主/从节点概念,各节点完全对等,可实现RS485总线中任意节点的数据主动上报。可解决很多实际问题,如智能电能表的全事件上报。
本发明中,RS485仍然采用通用的RS485芯片,并未使用专用芯片,仅冲突检测信号CD的产生需要额外增加几个反向与非门电路,实现的成本非常低廉。且算法也很简单,不需要很复杂的高性能MCU,因此,具有较好的推广价值。
Claims (2)
1.一种RS485总线竞争型通信方法,其特征在于:包括总线侦听和冲突检测,其中,
总线侦听,每个节点在数据发送前,在接收数据,判断是否有数据发送给自己,由于RS485与控制器MCU之间采用UART通信,每接收一个字节都产生一个接收中断,用于判断总线是否忙;
对RS485电路进行改进,将RS485芯片的数据传输端DI脚接地,MCU通过或非门连接使能端RE与DE,MCU的TXD端与或非门的两个输入端连接,或非门的输出端连接RE与DE,数据传输端 RO端连接 MCU的RXD端,冲突检测信号CD接入MCU的I/O中断,总线A线通过上拉电阻连接电源,总线B线通过下拉电阻接地,则当总线为空闲时,总线状态为“1”;冲突检测,节点在数据发送时,若发送的数据为“0”,TXD为“0”,RS485芯片为发送模式,则正常发出数据“0”,若发送数据为“1”,TXD为“1”,RS485芯片切换到接收模式,并且利用总线空闲时状态为“1”特点,其他节点接收数据为“1”,将冲突检测信号CD接入MCU的I/O中断,且CD的逻辑表达式,如果此时其他节点有数据发送“0”,则本节点的RXD为“0”,冲突检测信号CD为“0”,判断为总线存在冲突,在检测到冲突后,将RS485总线置为“0”状态超过1个字节的发送时间,这样任何一个节点都能检测到发生了总线冲突,从而放弃已接收的字节,恢复到总线竞争状态。
2.根据权利要求1所述的一种RS485总线竞争型通信方法,其特征在于:设置有一个4字节传输时间的防冲突处理间隙,当总线有多种通信波特率时,用最低的通信波特率来确定,传输时间小于防冲突处理间隙的报文会被丢弃。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210040684.2A CN114374579B (zh) | 2022-01-14 | 2022-01-14 | 一种rs485总线竞争型通信方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210040684.2A CN114374579B (zh) | 2022-01-14 | 2022-01-14 | 一种rs485总线竞争型通信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114374579A CN114374579A (zh) | 2022-04-19 |
CN114374579B true CN114374579B (zh) | 2023-04-28 |
Family
ID=81144463
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210040684.2A Active CN114374579B (zh) | 2022-01-14 | 2022-01-14 | 一种rs485总线竞争型通信方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114374579B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103746890A (zh) * | 2013-06-09 | 2014-04-23 | 国家电网公司 | 竞争式rs-485总线多主通讯系统及其工作方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1342938A (zh) * | 2000-09-11 | 2002-04-03 | 合肥创源智能网络有限责任公司 | Rs-485总线式测控系统中测控模块的即插即用法及其测控模块 |
CN2450713Y (zh) * | 2000-09-11 | 2001-09-26 | 合肥创源智能网络有限责任公司 | Rs-485总线式测控系统中的即插即用测控模块 |
CN101163075B (zh) * | 2006-10-10 | 2011-05-11 | 中兴通讯股份有限公司 | 一种rs485总线竞争实现嵌入式设备地址设置的方法 |
CN101719112A (zh) * | 2009-11-19 | 2010-06-02 | 北京东方信联科技有限公司 | 一种rs485半双工收发自动切换电路 |
KR102108525B1 (ko) * | 2013-01-29 | 2020-05-08 | 삼성전자주식회사 | 통신모듈, 이를 이용하는 멀티형 공기조화장치 및 그 제어 방법 |
CN103746889B (zh) * | 2013-06-09 | 2018-11-16 | 国家电网公司 | 半竞争式rs-485总线多主通讯系统及其工作方法 |
CN207969895U (zh) * | 2017-07-19 | 2018-10-16 | 递易(上海)智能科技有限公司 | 一种基于485总线的智能快递柜 |
CN110071858B (zh) * | 2019-04-12 | 2021-05-28 | 杭州涂鸦信息技术有限公司 | 485接口芯片的防冲突收发切换电路装置 |
CN110943900B (zh) * | 2019-10-25 | 2021-12-17 | 福建和盛高科技产业有限公司 | 带冲突检测的载波监听多路访问的rs485总线电路及方法 |
-
2022
- 2022-01-14 CN CN202210040684.2A patent/CN114374579B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103746890A (zh) * | 2013-06-09 | 2014-04-23 | 国家电网公司 | 竞争式rs-485总线多主通讯系统及其工作方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114374579A (zh) | 2022-04-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5311114A (en) | Apparatus and method for full-duplex ethernet communications | |
EP0076880B1 (en) | A local area contention network data communication system | |
US4785396A (en) | Push-pull serial bus coupled to a plurality of devices each having collision detection circuit and arbitration circuit | |
US4809361A (en) | Optical composite transceiver | |
EP0094180A2 (en) | Dual-count, round-robin distributed arbitration technique for serial buses | |
JPH05219088A (ja) | 通信網制御方法 | |
CN101626334B (zh) | 通讯总线控制方法和装置 | |
US4561092A (en) | Method and apparatus for data communications over local area and small area networks | |
NZ196850A (en) | Single channel bus communication system:digital data transmitted as short and long pulses for zeros and ones | |
US4942572A (en) | Process and device for high speed polling | |
US4380761A (en) | Digital phase decoder with collision detection | |
CN110071858B (zh) | 485接口芯片的防冲突收发切换电路装置 | |
IE922611A1 (en) | Method for data collision detection in a multi processor¹communication system | |
CN113325768B (zh) | 一种工控系统的通信控制装置、方法和工控系统 | |
EP0439646A1 (en) | Optical star network protocol and system with minimised delay between consecutive packets | |
CN112003775B (zh) | 一种单电平单线全双工总线通信方法和系统 | |
KR100274550B1 (ko) | 고속 이더넷의 충돌 방지 장치 및 그 방법 | |
EP0081821A1 (en) | System of local area contention networks | |
US4584575A (en) | Method and device for the asynchronous series communication on the multipoint type of a plurality of logic transceivers | |
CN114374579B (zh) | 一种rs485总线竞争型通信方法 | |
CN111065168B (zh) | 一种基于同频同时全双工的无线接入方法 | |
US4975907A (en) | Method and device for the asynchronous transmission of data by packets | |
US5729547A (en) | Automatic driver/receiver control for half-duplex serial networks | |
EP0076401B1 (en) | Self adjusting, distributed control, access method for a multiplexed single signal data bus | |
US4751700A (en) | Method and apparatus for local area communication networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |