基于linux的RS485实时收发控制的驱动方法与流程

文档序号:17762505发布日期:2019-05-24 21:49阅读:3203来源:国知局
基于linux的RS485实时收发控制的驱动方法与流程

本发明涉及远距离通讯技术领域,尤其涉及一种基于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时刻起开始接收报文数据。

上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1