CN109800201B - 基于linux的RS485实时收发控制的驱动方法 - Google Patents
基于linux的RS485实时收发控制的驱动方法 Download PDFInfo
- Publication number
- CN109800201B CN109800201B CN201811549681.1A CN201811549681A CN109800201B CN 109800201 B CN109800201 B CN 109800201B CN 201811549681 A CN201811549681 A CN 201811549681A CN 109800201 B CN109800201 B CN 109800201B
- Authority
- CN
- China
- Prior art keywords
- time
- sending
- receiving
- detection state
- cpu
- 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
Landscapes
- Information Transfer Systems (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种基于linux的RS485实时收发控制的驱动方法,包括以下步骤:CPU将所述RS485设备置于发送状态;当所述RS485设备置于发送状态时,CPU通过内核定时器对第一检测状态进行延时达到第一预设时间时,如果发送寄存器准备就绪,则进行数据发送;数据发送结束后,CPU通过内核定时器对第二检测状态进行延时,每次对第二检测状态延时时间达到第二预设时间时,则对接收寄存器是否准备就绪进行检测,直至所述接收寄存器准备就绪,CPU将所述RS485设备置于接收状态。本发明减少RS485收发切换延时带来的CPU消耗,且切换相对实时的方法,既保证了系统性能,也保证了数据的完整性。
Description
技术领域
本发明涉及远距离通讯技术领域,尤其涉及一种基于linux的RS485实时收发控制的驱动方法。
背景技术
电力电子装置中常需要在恶劣的电力环境中进行远距离通讯,RS485成为首选通讯方式。RS485通讯规范定义通讯距离达到1.2km,总线连接的最大256个节点,为了通讯效率,很多基于RS485的通讯协议都严格定义了极短的帧间隔时间。工作在半双工的RS485设备要求发送和接收状态切换的时间必须尽可能短。如果某设备在发送后,未及时切换回接收状态,轻则丢失通讯报文,重则造成RS485硬件损坏。
近年来,电力电子装置的功能需求越来越强大,传统基于单片机无操作系统的电力装置逐渐转向基于linux平台发展。而linux为非实时操作系统,在要求切换时间极短的RS485的应用会存在丢失报文的隐患。
RS485收发控制平常一直处于接收状态,请参照图1所示,现有基于linux的RS485驱动收发切换方法主要如下实现:
1.在t0时刻把收发控制ctl置为发送状态;
2.使用mdelay持续ts时间后在t1时刻进行数据发送;
3.数据发送结束后在t2时刻使用mdelay延时tr时间;
4.t3时刻收发控制置为接收状态。
目前linux支持RS485收发切换的方法为使用mdelay方法作为延时。而mdelay延时会持续占用CPU,其他任务将不能得到运行,当在多通道(多RS485)的应用时,将会严重影响系统性能,甚至因时序不正确导致系统运行出错。
发明内容
为了克服现有技术的不足,本发明的目的在于提供一种基于linux的RS485实时收发控制的驱动方法,其减少RS485收发切换延时带来的CPU消耗,且切换相对实时的方法,既保证了系统性能,也保证了数据的完整性。
为了实现上述目的,本发明采取的技术方案是:
一种基于linux的RS485实时收发控制的驱动方法,用于通过linux操作系统下的嵌入式设备对RS485设备的收发状态进行控制,所述嵌入式设备包括CPU、内核定时器、发送寄存器和接收寄存器,所述RS485设备具有收发控制端,包括以下步骤:
步骤S1、在t0时刻,CPU向所述收发控制端发出第一控制信号,将所述RS485设备置于发送状态;
步骤S2、当所述RS485设备置于发送状态时,所述CPU处于第一检测状态,CPU通过内核定时器对第一检测状态进行延时,当第一检测状态延时时间达到第一预设时间时,CPU检测发送寄存器是否准备就绪,如果发送寄存器准备就绪,则进行数据发送,反之,继续对第一检测状态进行延时,每次对第一检测状态延时的时间达到第一预设时间时对发送寄存器是否准备就绪进行检测,直至发送寄存器准备就绪,进行数据发送,设定数据发送的时刻为t1时刻;
步骤S3、数据发送结束后,设定数据发送结束的时刻为t2时刻,此时,CPU处于第二检测状态,CPU通过内核定时器对第二检测状态进行延时,每次对第二检测状态延时时间达到第二预设时间时,则对接收寄存器是否准备就绪进行检测,直至所述接收寄存器准备就绪,CPU向所述收发控制端发出第二控制信号,将所述RS485设备置于接收状态,设定将所述RS485设备置于接收状态的时刻为t3时刻。
进一步地,所述RS485设备的常态为接收状态。
进一步地,所述步骤S2包括:
步骤S21、CPU通过内核定时器对第一检测状态进行延时,当第一检测状态延时时间达到第一预设时间时,进行步骤S22的操作;
步骤S22、CPU检测发送寄存器是否准备就绪,如果发送寄存器准备就绪,则进行步骤S24的操作,反之则进行步骤S23的操作;
步骤S23、继续对第一检测状态进行延时,当继续对第一检测状态延时的时间达到第一预设时间时,进行步骤S22的操作;
步骤S24、进行数据发送,设定数据发送的时刻为t1时刻。
进一步地,如果第一检测状态延时的总时间超过第一阈值时,所述发送寄存器仍未准备就绪,则放弃本次数据发送。
进一步地,所述步骤S3包括:
步骤S31、数据发送结束后,设定数据发送结束的时刻为t2时刻,此时,CPU处于第二检测状态,CPU通过内核定时器对第二检测状态进行延时,当所述第二检测状态进行延时的时间达到第二预设时间时,进行步骤S32的操作;
步骤S32、CPU检测接收寄存器是否准备就绪,如果接收寄存器准备就绪,则进行步骤S34的操作,反之则进行步骤S33的操作;
步骤S33、继续对第二检测状态进行延时,当继续对第二检测状态延时的时间达到第二预设时间时,进行步骤S22的操作;
步骤S34、CPU向所述收发控制端发出第二控制信号,将所述RS485设备置于接收状态,设定将所述RS485设备置于接收状态的时刻为t3时刻。
进一步地,如果第二检测状态延时的总时间超过第二阈值时,所述接收寄存器仍未准备就绪,则CPU向所述收发控制端发出第二控制信号,将所述RS485设备置于接收状态。
相比现有技术,本发明的有益效果在于:
1、保证了在低成本硬件资源的情况下,系统有良好的性能。
2、快速切换的RS485收发,可同时兼容市面上报文响应快和响应慢的RS485设备,为工程施工以及项目设备选型提供了更好的解决方案。
3、由于收发切换不占CPU资源,可方便扩展RS485接口,更多的接入智能设备,从而减少采集设备的总数量,进一步降低成本。
附图说明
图1为现有基于linux的RS485实时收发控制的驱动方法的状态图;
图2为本发明基于linux的RS485实时收发控制的驱动方法的流程图;
图3为本发明基于linux的RS485实时收发控制的驱动方法的状态图。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。
实施例
本发明实施例公开了一种基于linux的RS485实时收发控制的驱动方法,其通过linux操作系统下的嵌入式设备对RS485设备的收发状态进行控制,RS485设备和嵌入式设备可以是分立的设备,也可以将RS485设备集成于嵌入式设备中,嵌入式设备可以是手机、电脑等带有linux操作系统的终端,其CPU可以是ARM处理器或其他处理器。嵌入式设备包括CPU、内核定时器、发送寄存器和接收寄存器,所述RS485设备具有收发控制端,通过CPU发出控制信号至收发控制端来实现RS485设备的收发状态切换,一般来说,RS485设备平时的状态为接收状态。CPU通过发送高低电平到收发控制端实现RS485状态的切换,例如CPU发送高电平信号至收发控制端时,RS485设备由接收状态转换成发送状态,而在CPU发送低电平信号时,至收发控制端时,RS485设备由发送状态转换成接收状态。请参照图2和3所示,该方法具体包括以下步骤:
110、在t0时刻,CPU向所述收发控制端发出第一控制信号,将所述RS485设备置于发送状态。
此步骤与现有技术相同,第一控制信号以高电平信号为例,则下述的第二控制信号即为低电平信号。
120、当所述RS485设备置于发送状态时,所述CPU处于第一检测状态,CPU通过内核定时器对第一检测状态进行延时,当第一检测状态延时时间达到第一预设时间时,CPU检测发送寄存器是否准备就绪,如果发送寄存器准备就绪,则进行数据发送,反之,继续对第一检测状态进行延时,每次对第一检测状态延时的时间达到第一预设时间时对发送寄存器是否准备就绪进行检测,直至发送寄存器准备就绪,进行数据发送,设定数据发送的时刻为t1时刻。
当所述RS485设备置于发送状态时,即RS485设备处于等待发送数据,CPU对现有技术中的ts时间进行分割切片,其中,ts时间即为第一阈值,分割的每个时间段td即为第一预设时间。
其具体包括以下步骤:
A1、CPU通过内核定时器对第一检测状态进行延时,当第一检测状态延时时间达到第一预设时间时,进行步骤A2的操作。CPU的第一检测状态对于RS485设备而言,即是发送状态的持续时间,使用mod_timer命令通过内核定时器把RS485收发控制延时工作在异步状态,即在CPU处于第一检测状态的过程中,CPU会切换到其他应用中,嵌入式设备的性能得到保证。
A2、CPU检测发送寄存器是否准备就绪,同时也会对接收侧与RS485设备间的光耦电路是否准备就绪进行检测,如果发送寄存器和光耦电路准备就绪,则进行A4的操作,此时发送会比等到ts时刻的方法更及时,反之则执行A3的操作;
A3、继续通过内核定时器对第一检测状态进行延时,当继续对第一检测状态延时的时间达到第一预设时间时,进行A2的操作;
A4、立即进行数据发送,设定数据发送的时刻为t1时刻。
如果第一检测状态延时的总时间超过第一阈值时,所述发送寄存器仍未准备就绪,则放弃本次数据发送。
130、数据发送结束后,设定数据发送结束的时刻为t2时刻,此时,CPU处于第二检测状态,CPU通过内核定时器对第二检测状态进行延时,每次对第二检测状态延时时间达到第二预设时间时,则对接收寄存器是否准备就绪进行检测,直至所述接收寄存器准备就绪,CPU向所述收发控制端发出第二控制信号,将所述RS485设备置于接收状态,设定将所述RS485设备置于接收状态的时刻为t3时刻。
当数据发送完毕后,RS485设备仍处于发送状态,发送状态继续延时一定的时间(其最大值也就是第二阈值,为现有技术中的tr时间),再由CPU切换其至接收状态。CPU对现有技术中的tr时间进行分割切片,其中,tr时间即为第二阈值,分割的每个时间段td即为第二预设时间,当然第二预设时间可以不与第一预设时间相同。
其具体包括以下步骤:
B1、数据发送结束后,设定数据发送结束的时刻为t2时刻,此时,CPU处于第二检测状态,CPU通过内核定时器对第二检测状态进行延时,当所述第二检测状态进行延时的时间达到第二预设时间时,进行B2的操作;
B2、CPU检测接收寄存器是否准备就绪,同时也会对发送侧与RS485设备间的光耦电路是否准备就绪进行检测,如果接收寄存器和光耦电路准备就绪,则进行B4的操作,反之则B3的操作;
B3、继续对第二检测状态进行延时,当继续对第二检测状态延时的时间达到第二预设时间时,进行B2的操作;
B4、CPU向所述收发控制端发出第二控制信号,将所述RS485设备置于接收状态,设定将所述RS485设备置于接收状态的时刻为t3时刻。
如果第二检测状态延时的总时间超过第二阈值时,所述接收寄存器仍未准备就绪,则CPU向所述收发控制端发出第二控制信号,直接将所述RS485设备置于接收状态,从接收状态即t3时刻起开始接收报文数据。
上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。
Claims (6)
1.一种基于linux的RS485实时收发控制的驱动方法,用于通过linux操作系统下的嵌入式设备对RS485设备的收发状态进行控制,所述嵌入式设备包括CPU、内核定时器、发送寄存器和接收寄存器,所述RS485设备具有收发控制端,其特征在于包括以下步骤:
步骤S1、在t0时刻,CPU向所述收发控制端发出第一控制信号,将所述RS485设备置于发送状态;
步骤S2、当所述RS485设备置于发送状态时,所述CPU处于第一检测状态,CPU通过内核定时器对第一检测状态进行延时,当第一检测状态延时时间达到第一预设时间时,CPU检测发送寄存器是否准备就绪,如果发送寄存器准备就绪,则进行数据发送,反之,继续对第一检测状态进行延时,每次对第一检测状态延时的时间达到第一预设时间时对发送寄存器是否准备就绪进行检测,直至发送寄存器准备就绪,进行数据发送,设定数据发送的时刻为t1时刻;
步骤S3、数据发送结束后,设定数据发送结束的时刻为t2时刻,此时,CPU处于第二检测状态,CPU通过内核定时器对第二检测状态进行延时,每次对第二检测状态延时时间达到第二预设时间时,则对接收寄存器是否准备就绪进行检测,直至所述接收寄存器准备就绪,CPU向所述收发控制端发出第二控制信号,将所述RS485设备置于接收状态,设定将所述RS485设备置于接收状态的时刻为t3时刻。
2.如权利要求1所述的基于linux的RS485实时收发控制的驱动方法,其特征在于,所述RS485设备的常态为接收状态。
3.如权利要求1所述的基于linux的RS485实时收发控制的驱动方法,其特征在于,所述步骤S2包括:
步骤S21、CPU通过内核定时器对第一检测状态进行延时,当第一检测状态延时时间达到第一预设时间时,进行步骤S22的操作;
步骤S22、CPU检测发送寄存器是否准备就绪,如果发送寄存器准备就绪,则进行步骤S24的操作,反之则进行步骤S23的操作;
步骤S23、继续对第一检测状态进行延时,当继续对第一检测状态延时的时间达到第一预设时间时,进行步骤S22的操作;
步骤S24、进行数据发送,设定数据发送的时刻为t1时刻。
4.如权利要求3所述的基于linux的RS485实时收发控制的驱动方法,其特征在于,如果第一检测状态延时的总时间超过第一阈值时,所述发送寄存器仍未准备就绪,则放弃本次数据发送。
5.如权利要求1所述的基于linux的RS485实时收发控制的驱动方法,其特征在于,所述步骤S3包括:
步骤S31、数据发送结束后,设定数据发送结束的时刻为t2时刻,此时,CPU处于第二检测状态,CPU通过内核定时器对第二检测状态进行延时,当所述第二检测状态进行延时的时间达到第二预设时间时,进行步骤S32的操作;
步骤S32、CPU检测接收寄存器是否准备就绪,如果接收寄存器准备就绪,则进行步骤S34的操作,反之则进行步骤S33的操作;
步骤S33、继续对第二检测状态进行延时,当继续对第二检测状态延时的时间达到第二预设时间时,进行步骤S22的操作;
步骤S34、CPU向所述收发控制端发出第二控制信号,将所述RS485设备置于接收状态,设定将所述RS485设备置于接收状态的时刻为t3时刻。
6.如权利要求5所述的基于linux的RS485实时收发控制的驱动方法,其特征在于,如果第二检测状态延时的总时间超过第二阈值时,所述接收寄存器仍未准备就绪,则CPU向所述收发控制端发出第二控制信号,将所述RS485设备置于接收状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811549681.1A CN109800201B (zh) | 2018-12-18 | 2018-12-18 | 基于linux的RS485实时收发控制的驱动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811549681.1A CN109800201B (zh) | 2018-12-18 | 2018-12-18 | 基于linux的RS485实时收发控制的驱动方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109800201A CN109800201A (zh) | 2019-05-24 |
CN109800201B true CN109800201B (zh) | 2021-04-13 |
Family
ID=66557183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811549681.1A Active CN109800201B (zh) | 2018-12-18 | 2018-12-18 | 基于linux的RS485实时收发控制的驱动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109800201B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112713910B (zh) * | 2020-12-30 | 2022-08-23 | 重庆芯讯通无线科技有限公司 | Rs485收发状态的转换方法、系统、设备及介质 |
CN115701087A (zh) * | 2021-07-14 | 2023-02-07 | 青岛信芯微电子科技股份有限公司 | 嵌入式设备的数据处理方法及嵌入式设备 |
CN114328336A (zh) * | 2021-12-24 | 2022-04-12 | 深圳市智微智能软件开发有限公司 | 基于Android的串口收发方法、系统、终端及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6604038B1 (en) * | 1999-11-09 | 2003-08-05 | Power Talk, Inc. | Apparatus, method, and computer program product for establishing a remote data link with a vehicle with minimal data transmission delay |
CN101136735A (zh) * | 2006-09-12 | 2008-03-05 | 中兴通讯股份有限公司 | 使用通用异步收发报机的半双工串口通信系统及通信方法 |
CN101241360A (zh) * | 2008-02-27 | 2008-08-13 | 浙江工业大学 | 通用监控系统的采集端控制系统 |
CN101827088A (zh) * | 2010-03-15 | 2010-09-08 | 北京航空航天大学 | 基于cpu总线互联的底层通信协议实现方法 |
CN102521188A (zh) * | 2011-11-30 | 2012-06-27 | 上海新时达电气股份有限公司 | 一种自适应的rs485通讯与rs232通讯的收发电路 |
CN104199338A (zh) * | 2014-08-04 | 2014-12-10 | 珠海中慧微电子有限公司 | 一种rs485通讯电路的通讯控制方法 |
CN105159194A (zh) * | 2015-08-25 | 2015-12-16 | 天津市英贝特航天科技有限公司 | Rs-485串口接收发送数据切换电路及切换方法 |
CN205318153U (zh) * | 2015-12-15 | 2016-06-15 | 天津市天森智能设备有限公司 | 一种rs485信号总线挂起的中间处理电路 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108599799B (zh) * | 2018-03-20 | 2024-04-23 | 四川万益能源科技有限公司 | Rs485电路和通信系统 |
-
2018
- 2018-12-18 CN CN201811549681.1A patent/CN109800201B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6604038B1 (en) * | 1999-11-09 | 2003-08-05 | Power Talk, Inc. | Apparatus, method, and computer program product for establishing a remote data link with a vehicle with minimal data transmission delay |
CN101136735A (zh) * | 2006-09-12 | 2008-03-05 | 中兴通讯股份有限公司 | 使用通用异步收发报机的半双工串口通信系统及通信方法 |
CN101241360A (zh) * | 2008-02-27 | 2008-08-13 | 浙江工业大学 | 通用监控系统的采集端控制系统 |
CN101827088A (zh) * | 2010-03-15 | 2010-09-08 | 北京航空航天大学 | 基于cpu总线互联的底层通信协议实现方法 |
CN102521188A (zh) * | 2011-11-30 | 2012-06-27 | 上海新时达电气股份有限公司 | 一种自适应的rs485通讯与rs232通讯的收发电路 |
CN104199338A (zh) * | 2014-08-04 | 2014-12-10 | 珠海中慧微电子有限公司 | 一种rs485通讯电路的通讯控制方法 |
CN105159194A (zh) * | 2015-08-25 | 2015-12-16 | 天津市英贝特航天科技有限公司 | Rs-485串口接收发送数据切换电路及切换方法 |
CN205318153U (zh) * | 2015-12-15 | 2016-06-15 | 天津市天森智能设备有限公司 | 一种rs485信号总线挂起的中间处理电路 |
Non-Patent Citations (1)
Title |
---|
"嵌入式系统应用中实现RS485的方向切换";吴丽萍;《单片机与嵌入式系统应用》;20140430;第15页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109800201A (zh) | 2019-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110417930B (zh) | 一种串行设备通信地址的自动分配方法 | |
CN1716894B (zh) | 无线lan系统中的省电方法 | |
JP7636521B2 (ja) | 非連続送信方法、信号送信処理方法及び関連機器 | |
CN109800201B (zh) | 基于linux的RS485实时收发控制的驱动方法 | |
US10891242B2 (en) | Embedded USB2 (eUSB2) repeater operation | |
US9578612B2 (en) | Node device and method for communication | |
CN102291808A (zh) | 一种网络通信方法、通信设备以及通信设备的中间件 | |
CN109062847B (zh) | 片上系统、用于rs485串口通讯的ip核及其控制方法 | |
CN112260366B (zh) | 充电方法、充电装置和充电器 | |
CN111277478B (zh) | 一种基于不同波特率从设备的rs485总线复用控制方法 | |
CN103200314A (zh) | 一种移动终端的智能休眠方法及装置 | |
US9635703B2 (en) | Method of controlling operation of a communication device, transceiver operating accordingly, and computer program | |
CN104469905A (zh) | 降低nfc芯片闲置时功耗的方法及系统 | |
CN101393542B (zh) | 通过gpio端口支持usb接口的嵌入式设备及方法 | |
EP3024160A1 (en) | Control method, device and optical transceiver | |
US20100262851A1 (en) | Network apparatus with power saving capability and power saving method applied to network module | |
CN104283592A (zh) | 信息处理方法及电子设备 | |
CN101835200B (zh) | 系统接入方法、通信系统、用户终端及网络侧设备 | |
CN114243954B (zh) | 基于波形特征的无线设备匹配通讯系统及方法与电子设备 | |
CN201774551U (zh) | 两物理隔断网络即时通讯数据摆渡传输器 | |
CN202935897U (zh) | 一种带式输送机急停闭锁开关位置识别装置 | |
KR101236529B1 (ko) | 직렬통신 기반의 순차/동시통신 동시구현 시스템 및 그 방법 | |
CN210405277U (zh) | 一种便携式信号发射装置 | |
JP7151345B2 (ja) | 無線通信装置、時計及び無線通信プログラム | |
CN105527884B (zh) | 支持多通信序列自动构建的wia-pa通信序列控制器 |
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 |