控制数字输入输出接口的方法、处理器
技术领域
本发明涉及计算机应用领域,特别是涉及一种控制数字输入输出接口的方法和用于控制数字输入输出的处理器。
背景技术
目前人们常用的数字输入输出接口通常由X86平台主板的GPIO(General PurposeInput Output,通用输入/输出口)实现,通过这种方式得到的数字输入输出接口通常没有中断,需要通过软件不停地扫描数字输入接口以获取电平变化等信息,不仅占用大量的软件资源,还容易遗漏某一个数字输入接口短时间的脉冲突变。此外,传统的GPIO可扩展性较差,数字输入输出接口的控制功能较为单一。
发明内容
基于此,有必要针对数字输入输出接口没有中断、控制功能较为单一的问题,提供一种控制数字输入输出接口的方法。
此外,还有必要针对数字输入输出接口没有中断、控制功能较为单一的问题,提供一种用于控制数字输入输出的处理器。
一种控制数字输入输出接口的方法,包括以下步骤:
检测数字输入接口是否发生中断;
当检测到数字输入接口发生中断时,根据所述中断生成第一数据包,并将所述第一数据包发送给主机,以使所述主机解析所述第一数据包并根据解析结果获取所述数字输入接口的信息;
接收由所述主机发送的第二数据包,所述第二数据包根据所述主机调用的预设函数生成;
解析所述第二数据包;
根据解析结果获取数字输出接口的信息,并根据所述数字输出接口的信息设置所述数字输出接口。
一种用于控制数字输入输出接口的处理器,所述处理器包括:
检测模块,用于检测数字输入接口是否发生中断;
发送模块,用于当检测到数字输入接口发生中断时,根据所述中断生成第一数据包,并将所述第一数据包发送给主机,以使所述主机解析所述第一数据包并根据解析结果获取所述数字输入接口的信息;
接收模块,用于接收由所述主机发送的第二数据包,所述第二数据包根据所述主机调用的预设函数生成;
解析模块,用于解析所述第二数据包;
设置模块,用于根据解析结果获取数字输出接口的信息,并根据所述数字输出接口的信息设置所述数字输出接口。
上述控制数字输入输出接口的方法和用于控制数字输入输出的处理器,处理器可检测数字输入接口的中断并上传中断信息给主机,方便主机对与数字输入接口连接的设备进行监测,且不需要通过软件不停地扫描数字输入接口,节约资源,提高应用软件的执行效率。主机通过调用预设的函数向处理器发送设置信息,对数字输出接口进行控制,使数字输入输出接口的控制功能更加可靠和多样,能适用于各种应用场合。
此外,能够为用户提供标准的接口函数,可扩展性强,方便用户进行开发,且处理器的数据处理对于用户是隐藏的,当升级处理器时不影响用户使用。处理器通过串行接口与主机连接,实现了数字输入输出接口与主机的剥离,对安全性、可靠性与工业现场的布线都有一定的优化,方便进行远距离传输。
附图说明
图1为一个实施例中控制数字输入输出接口的方法的流程示意图;
图2为一个实施例中本发明的硬件结构示意图;
图3为一个实施例中修改波特率的流程示意图;
图4为一个实施例中上传数字输入接口信息的流程示意图;
图5为一个实施例中重新上传数字输入接口信息的流程示意图;
图6为一个实施例中设置数字输出接口的流程示意图;
图7为一个实施例中用于控制数字输入输出接口的处理器的结构示意图;
图8为另一个实施例中用于控制数字输入输出接口的处理器的结构示意图;
图9为一个实施例中发送模块的内部结构示意图;
图10为一个实施例中设置模块的内部结构示意图;
图11为另一个实施例中用于控制数字输入输出接口的处理器的结构示意图;
图12为一个实施例中控制数字输入输出接口的系统的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
如图1所示,一种控制数字输入输出接口的方法,包括以下步骤:
步骤S110,检测数字输入接口是否发生中断,若是,则执行步骤S120,若否,则继续执行步骤S110。
具体的,处理器与主机建立通信连接,处理器可为嵌入式ARM(Advanced RISCMachines)、DSP(Digital Signal Processing,数字信号处理)等支持GPIO具有中断功能的处理器,当其中任意一个GPI(通用输入口)发生中断,处理器即可检测到中断,并将中断信息上传至主机。中断类型可包括外接设备请求中断、电源故障中断、实时时钟中断等,外接设备请求中断为外接设备请求处理器提供服务发生的中断,一般可包括外接设备启动、关闭、运行、故障等产生的中断。每个GPI产生中断的中断源可能不同,将会导致中断优先级不同,处理器可设置全部GPI的中断优先级相同,并采用并行处理的方式处理GPI发生的中断。处理器只要检测到中断,即可上传中断信息,而不是采用X86平台的查询方式,可节约资源开销。
进一步的实施例中,在步骤检测数字输入接口是否发生中断之前,还包括步骤a和步骤b:
步骤a:采用串行接口与主机建立通信连接。
具体的,处理器可采用串行接口与主机建立通信连接,串行接口可为RS-232、RS485等能实现数据通信的接口,主机通过串行接口监控GPIO功能,且能适应远距离传输数据的要求,使数据传输更为可靠。处理器通过串行接口与主机连接,实现了数字输入输出接口与主机的剥离,对安全性、可靠性与工业现场的布线都有一定的优化。在其它的实施例中,处理器也可采用IIC(Inter-Integrated Circuit,集成电路总线)等其它方式与主机建立通信连接。
步骤b:通过串行接口与主机进行数据传输。
具体的,处理器与主机通过串行接口进行数据传输,可预先通过对处理器进行编程,定义通信协议,处理器与主机根据定义的通信协议实现数据传输,用户只需对主机进行操作,即可通过串口实现控制GPIO功能。
步骤S120,根据中断生成第一数据包,并将第一数据包发送给主机,以使主机解析第一数据包并根据解析结果获取数字输入接口的信息。
具体的,处理器根据检测到的中断生成第一数据包,第一数据包中包括GPI的中断信息,处理器按照预先定义的通信协议通过串行接口将第一数据包发送给主机。主机接收第一数据包后,根据通信协议进行解析,并根据解析结果获取数字输入接口的信息,数字输入接口的信息可包括所有数字输入接口的输入电平、部分数字输入接口的输入电平、一个数字输入接口的输入电平及波特率参数中的一种或多种。主机通过获取的GPI信息可对GPI进行监测,一旦与GPI连接的外接设备发生电平变化,例如因继电器开关、电机档位、设备状态变化等发生电平变化,GPI即会产生相应的中断,处理器将中断信息发送至主机,使主机可随时对GPI和外接设备进行监测。
进一步的实施例中,上述方法还包括步骤:根据预设的通信协议与主机进行数据传输。
具体的,通信协议可根据实际应用需求进行规定。在本实施例中,定义通信协议的长度固定为8字节,命令帧的格式包括帧头、命令字节、参数设置区及校验和,具体如表1所示:
表1
其中,帧头占用2字节,帧头命名可将命令帧分为主动帧、被动帧、应答帧等,例如,可规定帧头为55AA表示主动帧,AA55表示被动帧,66BB表示应答帧等。对命令帧进行命名,可方便处理器及主机对其进行处理辨别。
命令字节占用1字节,用来分辨命令类型为原始命令或是回传命令等,例如可规定命令第6位为1表示原始命令,第7位为1表示回传命令等。
参数设置区用来传递数据,占用4字节,且根据不同的命令数据不同。
校验和占用1字节,校验和为命令帧内前7字节按无符号数累加求和。
例如,设置GPO(通用输出口)电平时,主机给处理器发送的初始化GPIO报文,如表2所示:
表2
帧头 |
帧头 |
命令字节 |
数据0 |
数据1 |
数据2 |
数据3 |
效验和 |
33 |
CC |
01 |
FF |
00 |
00 |
00 |
00 |
数据0定义GPO16-GPO9的电平,数据1定义GPO8-GPO1的电平,数据2定义GPI16-GPI9的电平,数据3定义GPI8-GPI1的电平,上表表示设置GPO9-GPO16输出高电平,GPO1-GPO8输出低电平。
若主机与处理器通信成功,处理器向主机应答,应答报文如表3所示:
表3
帧头 |
帧头 |
命令字节 |
数据0 |
数据1 |
数据2 |
数据3 |
效验和 |
CC |
33 |
81 |
00 |
00 |
FF |
00 |
00 |
数据0定义GPI16-GPI9的电平,数据1定义GPI8-GPI1的电平,数据2定义GPO16-GPO9的电平,数据3定义GPO8-GPO1的电平,上表表示GPI1-GPI16输入全为低电平,GPO9-GPO16输出高电平,GPO1-GPO8输出低电平。
通信协议可根据实际应用需求进行设置,在此基础上也可设置其它报文形式,如通信协议的协议报文可改变长度、增加帧长命令、帧尾、CRC(Cyclical Redundancy Check,循环冗余码校验)校验等。
步骤S130,接收由主机发送的第二数据包。
具体的,第二数据包根据主机调用预设的函数生成,预设的函数可包括获取一个GPO输出电平、获取所有GPO输出电平、获取部分GPO输出电平、初始化所有GPO输出电平、设置一个GPO输出电平、获取所有GPI输入电平、获取一个GPI输入电平、获取部分GPI输入电平、设置波特率参数、获取波特率参数等中的一个或多个。主机可预先设置函数,处理器也可设置一些基本函数,例如上传所有GPI输入电平、上传一个GPI输入电平、上传部分GPI输入电平、获取波特率参数、上传波特率参数等,用于完成上传GPI信息的功能。主机通过调用预设的函数可实现设置GPO信息、获取GPIO信息及设置波特率等功能。为用户提供这些函数,使得GPIO的扩展性变强,当用户需要进行开发时,只需增加新的函数即可实现更多的控制GPIO功能。
进一步的实施例中,在步骤接收由主机发送的第二数据包之后,还包括步骤:根据命令帧格式中的校验和判断接收的第二数据包是否正确,若所述校验和发生错误,则丢弃所述第二数据包。
具体的,数据包中加入了校验和,接收端通过判断校验和是否正确来判断所接收的数据包是否发生错误。处理器接收第二数据包并判断第二数据包中的校验和是否正确,当校验和发生错误时,丢弃第二数据包,此时,主机得不到处理器应答,将会重新发送第二数据包。此外,当处理器向主机发送第一数据包时,主机接收第一数据包并判断第一数据包中的校验和是否正确,当校验和发生错误时,丢弃第一数据包,由处理器重新发送第一数据包。可保证数据的正确性和完整性。
步骤S140,解析第二数据包。
具体的,处理器根据通信协议解析第二数据包,并获取GPO信息。
步骤S150,根据解析结果获取数字输出接口的信息,并根据该数字输出接口的信息设置数字输出接口。
具体的,数字输出接口的信息可包括所有数字输出接口的输出电平、部分数字输出接口的输出电平、一个数字输出接口的输出电平及波特率参数中的一种或多种。处理器根据获取的GPO信息对GPO进行设置,实现对GPIO功能的控制。
在进一步的实施例中,上述方法还可包括步骤:接收由主机每隔特定时间发送的心跳包。
具体的,该特定时间可根据需求进行设置,例如3s(秒)、5s等,当串行接口空闲超过该特定时间时,即表示处理器与主机处于无数据传输的空闲时间,主机通过串行接口向处理器发送心跳包,一旦处理器无应答,主机的系统应用层即可快速发现通信异常并进行报警,通信异常可能由主机端口错误、串行接口线连接出错、外界干扰及GPIO功能出错等问题导致。心跳包占用的系统资源少,在无数据传输的空闲时间,主机每隔特定时间向处理器发送心跳包可保证通信正常。
上述控制数字输入输出接口的方法,处理器可检测数字输入接口的中断并上传中断信息给主机,方便主机对与数字输入接口连接的设备进行监测,且不需要通过软件不停地扫描数字输入接口,节约资源,提高应用软件的执行效率。主机通过调用预设的函数向处理器发送设置信息,对数字输出接口进行控制,使数字输入输出接口的控制功能更加可靠和多样,能适用于各种应用场合。
此外,能够为用户提供标准的接口函数,可扩展性强,方便用户进行开发,且处理器的数据处理对于用户是隐藏的,当升级处理器时不影响用户使用。处理器通过串行接口与主机连接,实现了数字输入输出接口与主机的剥离,对安全性、可靠性与工业现场的布线都有一定的优化,方便进行远距离传输。
图2为一个实施例中本发明的硬件结构示意图。如图2所示,在一个实施例中,处理器为ARM M0系列的ARM M054芯片,用来控制数字输入输出接口,利用串行接口RS-232和/或RS-485作为传输总线,与主机的DB9串行接口建立通信连接。处理器与主机之间以串行接口协议为基础,可定义一组通信协议完成数据的双向通信。在ARM M054芯片的控制下,扩展出16路隔离的数字输入接口及16路数字输出接口。总线驱动为数字输入输出的驱动电路,其供电能力强,满足工业现场使用。处理器还加入了组合逻辑电路,当关闭软件控制数字输入输出功能,可由硬件完成简单的数字输入输出功能。
数字输入接口及数字输出接口利用光耦进行隔离,使数字输入接口及数字输出接口具有防干扰能力。ARM M054芯片支持所有GPIO具有中断功能,只要检测到中断,即可上传中断信息至主机,节约资源花销,且ARM M054芯片的GPIO中断时钟源可以设置高达48Mhz(兆赫),对于极短的电平变化,都可以高效准确地侦测到,同时,ARM M054芯片的GPIO还可设置具有去抖动功能,能够减少外界环境因素引起的误判断,提高侦测判断能力及效率。
此外,ARM M054芯片可采用指令冗余、软件陷阱和看门狗等确保程序的可靠正确运行。在各工业应用环境中,例如水利、电力、交通等行业都可使用本发明对外接设备及数字输入输出接口进行控制及监控,且性能可靠、成本低廉。在其它的实施例中,处理器还可为ARM M3系列芯片、ARM M4系列芯片、DSP芯片等。
如图3所示,在一个实施例中,上述方法,还包括以下步骤:
步骤S302,接收由主机发送的第二数据包。
步骤S304,解析第二数据包,并根据解析结果获取波特率设置信息。
具体的,主机通过调用设置波特率参数的函数进行设置波特率,并生成第二数据包。处理器接收包含波特率设置信息的第二数据包,根据通信协议解析第二数据包并获取波特率设置信息。波特率为处理器或主机在串行接口通信时的速率。
步骤S306,向主机应答,并反馈波特率信息。
具体的,处理器接收成功后,向主机发送应答报文,应答报文中包含波特率信息,波特率信息可包括原波特率及待设置的波特率。
步骤S308,判断主机是否应答,若是,则执行步骤S312,若否,则执行步骤S310。
具体的,处理器向主机反馈波特率信息后,判断主机是否应答,若主机应答,则表示通信成功,根据波特率设置信息修改波特率,同时,主机也根据波特率设置信息修改波特率。若主机无应答,则处理器重新向主机反馈波特率信息。
步骤S310,记录反馈次数,并判断反馈次数是否超过第一阈值,若是,则执行步骤S312,若否,则执行步骤S306。
具体的,处理器记录反馈次数,当反馈次数超过第一阈值时,不再向主机反馈波特率信息,直接根据波特率设置信息修改波特率。第一阈值可根据实际应用情况进行设置,例如4次、5次等。
步骤S312,根据波特率设置信息修改波特率。
步骤S314,将修改后的波特率进行存储。
具体的,处理器可将修改后的波特率写入内部Flash(闪存)存储器中进行存储。此外,除了由通过主机调用函数进行修改波特率外,还可对处理器硬件设计固定波特率,防止用户使用出错。
上述控制数字输入输出接口的方法,可通过调用函数设置波特率信息,满足不同用户波特率的需求,使串行接口控制更加灵活。此外,设置的波特率信息可掉电保存,在不需要修改的情况下,串行接口能以掉电之前的波特率继续工作,节省人力的开销和维护。
如图4所示,一个实施例中,步骤将第一数据包发送给主机,具体包括以下步骤:
步骤S402,通过串行接口向主机发送第一数据包。
具体的,GPI的所有引脚可全部设置为边沿变化中断,当电平发生变化时,即可产生中断,处理器可即时将电平变化信息上传至主机。
步骤S404,第一预设时间后判断主机是否应答,若是,则执行步骤S406,若否,则执行步骤S408。
具体的,第一预设时间可根据实际应用情况进行设置,例如设置为20ms(毫秒)、30ms等,若在第一预设时间内主机无应答,则可认为通信失败,处理器重新向主机发送第一数据包。
步骤S406,通信成功。
步骤S408,记录重发次数,判断重发次数是否超过第二阈值,若是,则执行步骤S410,若否,则执行步骤S402。
具体的,记录重发次数,当重发次数超过第二阈值时,则停止向主机发送第一数据包。第二阈值可根据实际应用情况进行设置,例如5次、7次等。
步骤S410,停止重新发送第一数据包。
上述控制数字输入输出接口的方法,主机通过获取的GPI信息可对GPI进行监测,一旦与GPI连接的外接设备发生电平变化,例如因继电器开关、电机档位、设备状态变化等发生电平变化,GPI即会产生相应的中断,处理器将中断信息发送至主机,使主机可随时对GPI和外接设备进行监测。除了上传GPI信息,处理器向主机上传GPO信息、波特率信息等时也可采用上述步骤进行上传。
如图5所示,在一个实施例中,上述方法还包括以下步骤:
步骤S502,标记需要重新向主机发送第一数据包的数字输入接口。
具体的,因处理器可预先设置所有GPI的中断优先级相同,并采用并行处理各GPI发生的中断,对于需要重新上传的GPI,先分别标记,然后并行处理重发数据,当一个GPI多次触发重发机制时,处理器将处理该GPI最后一次状态变化产生的中断信息。
步骤S504,计时到第二预设时间。
具体的,第二预设时间可根据实际应用需求进行设置,例如设置为40ms、50ms等,计时到后才对被标记的GPI进行索引。
步骤S506,对被标记的数字输入接口进行索引。
具体的,GPI可预先设置标记位,当需要重新上传数据时,该标记位发生变化,例如从0变为1,或是从1变为0,分别对被标记的各个GPI进行索引。
步骤S508,判断被标记的数字输入接口的中断标志是否有效,若是,则执行步骤S510,若否,则执行步骤S512。
具体的,中断标志用来描述中断状态,通常可表示是否发生中断,一般情况下,当GPI发生中断,中断标志从0变为1,表示发生中断,当中断标志从1变为0,则表示中断失效。处理器对被标记的各个GPI进行索引并判断其中断标志是否有效,当该中断标志有效时,处理器重新向主机发送该被索引的GPI的数据。
步骤S510,重新向主机发送与该数字输入接口对应的第一数据包并记录索引次数。
步骤S512,判断索引次数是否超过第三阈值,若是,则执行步骤S514,若否,则执行步骤S504。
具体的,第三阈值可根据实际应用需求进行设置,例如5次、8次等。当索引次数超过第三阈值时,清除所有GPI的中断标志、索引次数以及相关变量,若索引次数未超过第三阈值,则第二预设时间后继续索引下一个被标记的GPI并判断其中断标志是否有效。
步骤S514,清除所有数字输入接口的中断标志及索引次数。
具体的,将所有GPI的中断标志重置为0,即不产生中断时的状态,将索引次数重置为0,并将相关变量进行重置,相关变量可为实时计时等。
上述控制数字输入输出接口的方法,利用通信协议建立处理器与主机之间的重发机制,当二者通信发生异常时,将触发该重发机制,并采用并行处理的方式,更为快速有效,能保证处理器与主机之间数据传输正确。上述重发机制除了应用于处理器向主机上传GPI信息,也可应用于主机向处理器发送设置GPO信息。
如图6所示,在一个实施例中,步骤根据解析结果获取数字输出接口的信息,并根据数字输出接口的信息设置数字输出接口,具体包括以下步骤:
步骤S602,根据解析结果获取数字输出接口的设置信息。
具体的,处理器接收由主机发送的第二数据包,并根据通信协议解析该第二数据包获取GPO的设置信息。主机通过调用预设的函数,并生成对应的第二数据包发送给处理器来设置GPO功能。
步骤S604,根据设置信息设置对应的数字输出接口。
具体的,处理器根据设置信息设置对应的GPO,可包括设置全部GPO输出电平、部分GPO输出电平、一个GPO输出电平等。
步骤S608,判断数字输出接口是否设置成功,若是,则执行步骤S610,若否,则执行步骤S612。
具体的,在部分应用场景下,处理器常常需要判断GPO是否设置成功,例如当外接设备发生故障时,可能会产生设置失败的情况等。可在处理器中增加相应的硬件侦测和软件判断处理过程,用于判断是否发生人为操作失误、环境干扰、机器设备故障等异常状况,从而提高处理器的可靠性,保证控制数字输入输出接口功能的可靠性、安全性。当GPO设置成功,处理器向主机发送应答报文,表示设置成功,当设置失败时,处理器对该GPO重新进行设置。
步骤S610,向主机应答成功。
步骤S612,记录重设次数,判断重设次数是否超过第四阈值,若是,则执行步骤S614,若否,则执行步骤S604。
具体的,第四阈值可根据实际应用需求进行设置,例如5次、6次等,当重设次数超过第四阈值,则处理器停止重新设置,并向主机反馈错误及该GPO的输出电平。
步骤S614,向主机反馈错误及数字输出接口的输出电平。
在进一步的实施例中,上述方法还包括步骤:开机上电后,初始化输出电平。
具体的,处量器及主机开机上电后,GPO的输出电平具有可配置功能,即开机上电后GPO的输出电平可定制化,方便用户需求。
步骤开机上电后,初始化输出电平,具体包括以下步骤:
(1)判断数字输出接口是否使能,若是,则读取预先分配的配置表,根据配置表获取初始输出电平。
具体的,可预先将GPO的配置信息通过烧录工具等写入处理器内部Flash或外部EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)等存储器中,生成对应的配置表,通过该配置表可对GPO的初始输出电平进行设置。当开机上电后,处理器通过GPO的使能位状态判断GPO是否使能,若GPO使能,即表示配置表功能打开,则直接从内部Flash或外部EEPROM等存储器中读取配置表,并根据配置表获取GPO的初始输出电平并进行设置。此外,也可通过主机调用预设的函数对GPO初始输出电平进行设置。
(2)若否,则等待接收由主机发送的第二数据包,然后解析第二数据包,并根据解析结果获取初始输出电平。
具体的,若GPO不使能,即表示配置表功能关闭,或是内部Flash或外部EEPROM等存储器中不存在配置表,则由主机调用预设的函数对GPO初始输出电平进行设置。处理器接收由主机发送的第二数据包,并根据通信协议进行解析获取GPO初始输出电平进行设置。
上述控制数字输入输出接口的方法,可通过调用函数设置GPO功能,满足不同的控制数字数入输出需求。此外,设置的GPO初始化输出电平可掉电保存,在不需要重新设置的情况下,GPO能以掉电之前的输出电平继续工作,节省人力的开销和维护。
如图7所示,一种用于控制数字输入输出接口的处理器,包括通信模块710、检测模块720、发送模块730、接收模块740、解析模块750及设置模块760。
通信模块710,用于采用串行接口与主机建立通信连接。
具体的,处理器可采用串行接口与主机建立通信连接,串行接口可为RS-232、RS485等能实现数据通信的接口,主机通过串行接口监控GPIO功能,且能适应远距离传输数据的要求,使数据传输更为可靠。处理器通过串行接口与主机连接,实现了数字输入输出接口与主机的剥离,对安全性、可靠性与工业现场的布线都有一定的优化。在其它的实施例中,处理器也可采用IIC等其它方式与主机建立通信连接。
检测模块720,用于检测数字输入接口是否发生中断。
具体的,处理器与主机建立通信连接,处理器可为嵌入式ARM、DSP等支持GPIO具有中断功能的处理器,当其中任意一个GPI发生中断,处理器即可检测到中断,并将中断信息上传至主机。中断类型可包括外接设备请求中断、电源故障中断、实时时钟中断等,外接设备请求中断为外接设备请求处理器提供服务发生的中断,一般可包括外接设备启动、关闭、运行、故障等产生的中断。每个GPI产生中断的中断源可能不同,将会导致中断优先级不同,处理器可设置全部GPI的中断优先级相同,并采用并行处理的方式处理GPI发生的中断。处理器只要检测到中断,即可上传中断信息,而不是采用X86平台的查询方式,可节约资源开销。
发送模块730,用于当检测到数字输入接口发生中断时,根据中断生成第一数据包,并将第一数据包发送给主机,以使主机解析第一数据包并根据解析结果获取数字输入接口的信息。
具体的,处理器根据检测到的中断生成第一数据包,第一数据包中包括GPI的中断信息,处理器按照预先定义的通信协议通过串行接口将第一数据包发送给主机。主机接收第一数据包后,根据通信协议进行解析,并根据解析结果获取数字输入接口的信息,数字输入接口的信息可包括所有数字输入接口的输入电平、部分数字输入接口的输入电平、一个数字输入接口的输入电平及波特率参数中的一种或多种。主机通过获取的GPI信息可对GPI进行监测,一旦与GPI连接的外接设备发生电平变化,例如因继电器开关、电机档位、设备状态变化等发生电平变化,GPI即会产生相应的中断,处理器将中断信息发送至主机,使主机可随时对GPI和外接设备进行监测。
接收模块740,用于接收由主机发送的第二数据包。
具体的,第二数据包根据主机调用预设的函数生成,预设的函数可包括获取一个GPO输出电平、获取所有GPO输出电平、获取部分GPO输出电平、初始化所有GPO输出电平、设置一个GPO输出电平、获取所有GPI输入电平、获取一个GPI输入电平、获取部分GPI输入电平、设置波特率参数、获取波特率参数等中的一个或多个。主机可预先设置函数,处理器也可设置一些基本函数,例如上传所有GPI输入电平、上传一个GPI输入电平、上传部分GPI输入电平、获取波特率参数、上传波特率参数等,用于完成上传GPI信息的功能。主机通过调用预设的函数可实现设置GPO信息、获取GPIO信息及设置波特率等功能。为用户提供这些函数,使得GPIO的扩展性变强,当用户需要进行开发时,只需增加新的函数即可实现更多的控制GPIO功能。
发送模块730和接收模块740还用于通过串行接口与主机进行数据传输。
具体的,处理器与主机通过串行接口进行数据传输,可预先通过对处理器进行编程,定义通信协议,处理器与主机根据定义的通信协议实现数据传输,用户只需对主机进行操作,即可通过串口实现控制GPIO功能。
解析模块750,用于解析第二数据包。
具体的,处理器根据通信协议解析第二数据包,并获取GPO信息。
设置模块760,用于根据解析结果获取数字输出接口的信息,并根据数字输出接口的信息设置所述数字输出接口。
具体的,数字输出接口的信息可包括所有数字输出接口的输出电平、部分数字输出接口的输出电平、一个数字输出接口的输出电平及波特率参数中的一种或多种。处理器根据获取的GPO信息对GPO进行设置,实现对GPIO功能的控制。
在进一步的实施例中,上述处理器还包括协议模块和校验模块。
协议模块,用于根据预设的通信协议与主机进行数据传输。
具体的,通信协议可根据实际应用需求进行规定。在本实施例中,定义通信协议的长度固定为8字节,命令帧的格式包括帧头、命令字节、参数设置区及校验和,具体如表1所示。
其中,帧头占用2字节,帧头命名可将命令帧分为主动帧、被动帧、应答帧等,例如,可规定帧头为55AA表示主动帧,AA55表示被动帧,66BB表示应答帧等。对命令帧进行命名,可方便处理器及主机对其进行处理辨别。
命令字节占用1字节,用来分辨命令类型为原始命令或是回传命令等,例如可规定命令第6位为1表示原始命令,第7位为1表示回传命令等。
参数设置区用来传递数据,占用4字节,且根据不同的命令数据不同。
校验和占用1字节,校验和为命令帧内前7字节按无符号数累加求和。
例如,设置GPO电平时,主机给处理器发送的初始化GPIO报文如表2所示。若主机与处理器通信成功,处理器向主机应答,应答报文如表3所示。
通信协议可根据实际应用需求进行设置,在此基础上也可设置其它报文形式,如通信协议的协议报文可改变长度、增加帧长命令、帧尾、CRC校验等。
校验模块,用于根据命令帧格式中的校验和判断接收的第二数据包是否正确,若校验和发生错误,则丢弃第二数据包。
具体的,数据包中加入了校验和,接收端通过判断校验和是否正确来判断所接收的数据包是否发生错误。处理器接收第二数据包并判断第二数据包中的校验和是否正确,当校验和发生错误时,丢弃第二数据包,此时,主机得不到处理器应答,将会重新发送第二数据包。此外,当处理器向主机发送第一数据包时,主机接收第一数据包并判断第一数据包中的校验和是否正确,当校验和发生错误时,丢弃第一数据包,由处理器重新发送第一数据包。可保证数据的正确性和完整性。
在进一步的实施例中,上述处理器还包括心跳包模块。
心跳包模块,用于接收由主机每隔特定时间发送的心跳包。
具体的,该特定时间可根据需求进行设置,例如3s、5s等,当串行接口空闲超过该特定时间时,即表示处理器与主机处于无数据传输的空闲时间,主机通过串行接口向处理器发送心跳包,一旦处理器无应答,主机的系统应用层即可快速发现通信异常并进行报警,通信异常可能由主机端口错误、串行接口线连接出错、外界干扰及GPIO功能出错等问题导致。心跳包占用的系统资源少,在无数据传输的空闲时间,主机每隔特定时间向处理器发送心跳包可保证通信正常。
上述用于控制数字输入输出接口的处理器,处理器可检测数字输入接口的中断并上传中断信息给主机,方便主机对与数字输入接口连接的设备进行监测,且不需要通过软件不停地扫描数字输入接口,节约资源,提高应用软件的执行效率。主机通过调用预设的函数向处理器发送设置信息,对数字输出接口进行控制,使数字输入输出接口的控制功能更加可靠和多样,能适用于各种应用场合。
此外,能够为用户提供标准的接口函数,可扩展性强,方便用户进行开发,且处理器的数据处理对于用户是隐藏的,当升级处理器时不影响用户使用。处理器通过串行接口与主机连接,实现了数字输入输出接口与主机的剥离,对安全性、可靠性与工业现场的布线都有一定的优化,方便进行远距离传输。
如图8所示,在一个实施例中,上述处理器还包括获取波特率模块810、反馈波特率模块820、修改波特率模块830和存储波特率模块840。
获取波特率模块810,用于接收由主机发送的第二数据包,解析第二数据包,并根据解析结果获取波特率设置信息。
具体的,主机通过调用设置波特率参数的函数进行设置波特率,并生成第二数据包。处理器接收包含波特率设置信息的第二数据包,根据通信协议解析第二数据包并获取波特率设置信息。波特率为处理器或主机在串行接口通信时的速率。
反馈波特率模块820,用于向主机应答,并反馈波特率信息。
具体的,处理器接收成功后,向主机发送应答报文,应答报文中包含波特率信息,波特率信息可包括原波特率及待设置的波特率。
修改波特率模块830,用于当判断出主机应答时,根据波特率设置信息修改波特率。
具体的,处理器向主机反馈波特率信息后,判断主机是否应答,若主机应答,则表示通信成功,根据波特率设置信息修改波特率,同时,主机也根据波特率设置信息修改波特率。若主机无应答,则处理器重新向主机反馈波特率信息。
反馈波特率模块820还用于当判断出主机无应答时,重新向主机反馈波特率信息并记录反馈次数。
修改波特率模块830还用于当反馈次数超过第一阈值时,根据波特率设置信息修改波特率。
具体的,处理器记录反馈次数,当反馈次数超过第一阈值时,不再向主机反馈波特率信息,直接根据波特率设置信息修改波特率。第一阈值可根据实际应用情况进行设置,例如4次、5次等。
存储波特率模块840,用于将修改后的波特率进行存储。
具体的,处理器可将修改后的波特率写入内部Flash存储器中进行存储。此外,除了由通过主机调用函数进行修改波特率外,还可对处理器硬件设计固定波特率,防止用户使用出错。
上述用于控制数字输入输出接口的处理器,可通过调用函数设置波特率信息,满足不同用户波特率的需求,使串行接口控制更加灵活。此外,设置的波特率信息可掉电保存,在不需要修改的情况下,串行接口能以掉电之前的波特率继续工作,节省人力的开销和维护。
如图9所示,在一个实施例中,发送模块720包括发送单元202、判断单元204、停止单元206、标记单元208、索引单元210及清除单元212。
发送单元202,用于通过串行接口向主机发送第一数据包。
具体的,GPI的所有引脚可全部设置为边沿变化中断,当电平发生变化时,即可产生中断,处理器可即时将电平变化信息上传至主机。
判断单元204,用于第一预设时间后判断主机是否应答,若主机应答,则通信成功。
具体的,第一预设时间可根据实际应用情况进行设置,例如设置为20ms(毫秒)、30ms等,若在第一预设时间内主机无应答,则可认为通信失败,处理器重新向主机发送第一数据包。发送单元202还用于当判断出主机无应答时,重新向主机发送第一数据包并记录重发次数。
停止单元206,用于当重发次数超过第二阈值时,停止重新发送第一数据包。
具体的,记录重发次数,当重发次数超过第二阈值时,则停止向主机发送第一数据包。第二阈值可根据实际应用情况进行设置,例如5次、7次等。
标记单元208,用于标记需要重新向主机发送第一数据包的数字输入接口。
具体的,因处理器可预先设置所有GPI的中断优先级相同,并采用并行处理各GPI发生的中断,对于需要重新上传的GPI,先分别标记,然后并行处理重发数据,当一个GPI多次触发重发机制时,处理器将处理该GPI最后一次状态变化产生的中断信息。
索引单元210,用于第二预设时间后对被标记的数字输入接口进行索引并判断被标记的数字输入接口的中断标志是否有效。
具体的,第二预设时间可根据实际应用需求进行设置,例如设置为40ms、50ms等,计时到后才对被标记的GPI进行索引。GPI可预先设置标记位,当需要重新上传数据时,该标记位发生变化,例如从0变为1,或是从1变为0,分别对被标记的各个GPI进行索引。中断标志用来描述中断状态,通常可表示是否发生中断,一般情况下,当GPI发生中断,中断标志从0变为1,表示发生中断,当中断标志从1变为0,则表示中断失效。处理器对被标记的各个GPI进行索引并判断其中断标志是否有效,当该中断标志有效时,处理器重新向主机发送该被索引的GPI的数据。
发送单元202还用于当中断标记有效时,重新向主机发送与数字输入接口对应的第一数据包并记录索引次数。
索引单元210还用于当判断出索引次数未超过第三阈值时,则第二预设时间后继续索引并判断下一个被标记的数字输入接口的中断标志是否有效。
具体的,第三阈值可根据实际应用需求进行设置,例如5次、8次等。当索引次数超过第三阈值时,清除所有GPI的中断标志、索引次数以及相关变量,若索引次数未超过第三阈值,则第二预设时间后继续索引下一个被标记的GPI并判断其中断标志是否有效。
清除单元212,用于当判断出索引次数超过第三阈值时,清除所有数字输入接口的中断标记及索引次数。
具体的,将所有GPI的中断标志重置为0,即不产生中断时的状态,将索引次数重置为0,并将相关变量进行重置,相关变量可为实时计时等。
上述用于控制数字输入输出接口的处理器,利用通信协议建立处理器与主机之间的重发机制,当二者通信发生异常时,将触发该重发机制,并采用并行处理的方式,更为快速有效,能保证处理器与主机之间数据传输正确。上述重发机制除了应用于处理器向主机上传GPI信息,也可应用于主机向处理器发送设置GPO信息。
如图10所示,在一个实施例中,设置模块750包括获取单元752、设置单元754、判断单元756及反馈单元758。
获取单元752,用于根据解析结果获取数字输出接口的设置信息。
具体的,处理器接收由主机发送的第二数据包,并根据通信协议解析该第二数据包获取GPO的设置信息。主机通过调用预设的函数,并生成对应的第二数据包发送给处理器来设置GPO功能。
设置单元754,用于根据设置信息设置对应的数字输出接口。
具体的,处理器根据设置信息设置对应的GPO,可包括设置全部GPO输出电平、部分GPO输出电平、一个GPO输出电平等。
判断单元756,用于判断数字输出接口是否设置成功,若设置成功,则向主机应答成功。
具体的,在部分应用场景下,处理器常常需要判断GPO是否设置成功,例如当外接设备发生故障时,可能会产生设置失败的情况等。可在处理器中增加相应的硬件侦测和软件判断处理过程,用于判断是否发生人为操作失误、环境干扰、机器设备故障等异常状况,从而提高处理器的可靠性,保证控制数字输入输出接口功能的可靠性、安全性。当GPO设置成功,处理器向主机发送应答报文,表示设置成功,当设置失败时,处理器对该GPO重新进行设置。
设置单元754还用于判断出数字输出接口设置不成功时,重新进行设置并记录重设次数。
反馈单元758,用于当重设次数超过第四阈值时,向主机反馈错误及数字输出接口的输出电平。
具体的,第四阈值可根据实际应用需求进行设置,例如5次、6次等,当重设次数超过第四阈值,则处理器停止重新设置,并向主机反馈错误及该GPO的输出电平。
上述用于控制数字输入输出接口的处理器,主机通过调用预设的函数向处理器发送设置信息,对数字输出接口进行控制,使数字输入输出接口的控制功能更加可靠和多样,能适用于各种应用场合,满足不同的控制数字数入输出需求。
如图11所示,在一个实施例中,上述处理器除了包括通信模块710、检测模块720、发送模块730、接收模块740、解析模块750及设置模块760,还包括初始化模块770。
初始化模块770,用于开机上电后,初始化输出电平。
初始化模块770包括读取单元772和等待单元774。
读取单元772,用于当判断出数字输出接口使能时,读取预先分配的配置表,根据配置表获取初始输出电平。
具体的,可预先将GPO的配置信息通过烧录工具等写入处理器内部Flash或外部EEPROM等存储器中,生成对应的配置表,通过该配置表可对GPO的初始输出电平进行设置。当开机上电后,处理器通过GPO的使能位状态判断GPO是否使能,若GPO使能,即表示配置表功能打开,则直接从内部Flash或外部EEPROM等存储器中读取配置表,并根据配置表获取GPO的初始输出电平并进行设置。此外,也可通过主机调用预设的函数对GPO初始输出电平进行设置。
等待单元774,用于当判断出数字输出接口不使能时,等待接收由主机发送的第二数据包,然后解析第二数据包,并根据解析结果获取初始输出电平。
具体的,若GPO不使能,即表示配置表功能关闭,或是内部Flash或外部EEPROM等存储器中不存在配置表,则由主机调用预设的函数对GPO初始输出电平进行设置。处理器接收由主机发送的第二数据包,并根据通信协议进行解析获取GPO初始输出电平进行设置。
上述用于控制数字输入输出接口的处理器,主机可通过调用函数设置GPO初始输出电平,满足不同的控制数字数入输出需求。此外,设置的GPO初始化输出电平可掉电保存,在不需要重新设置的情况下,GPO能以掉电之前的输出电平继续工作,节省人力的开销和维护。
如图12所示,一种控制数字输入输出接口的系统,包括主机10和用于控制数字输入输出接口的处理器20,处理器20与主机10建立通信连接。处理器20检测数字输入接口是否发生中断,当检测到数字输入接口发生中断时,处理器20根据中断生成第一数据包,通过预先规定的通信协议将第一数据包发送给主机10。主机10根据通信协议解析第一数据包并根据解析结果获取数字输入接口的信息,主机10调用预设函数,并根据被调用的预设函数生成第二数据包,将第二数据包发送给处理器20。处理器20接收由主机10发送的第二数据包,处理器20根据解析结果获取数字输出接口的信息,并根据数字输出接口的信息设置数字输出接口。处理器20的其他功能与控制数字输入输出接口的方法中所描述一致,在此不再赘述。
上述控制数字输入输出接口的系统,处理器可检测数字输入接口的中断并上传中断信息给主机,方便主机对与数字输入接口连接的设备进行监测,且不需要通过软件不停地扫描数字输入接口,节约资源,提高应用软件的执行效率。主机通过调用预设的函数向处理器发送设置信息,对数字输出接口进行控制,使数字输入输出接口的控制功能更加可靠和多样,能适用于各种应用场合。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。