发明内容
本发明的目的在于提供一种基于DMA的电力线网络系统及其通讯方法,该电力线网络系统及其通讯方法能够解决现有技术中的不足,提高电力线网络系统各节点收发数据的速度,保证PLC组网中数据报文传输的时效性,使PLC组网应用更加灵活、可靠。
为实现上述目的,本发明采用了以下技术方案:一种基于DMA的电力线网络系统,包括主节点和若干个子节点,所述的主节点与各个子节点之间通过电力线交互连接。所述的主节点通过RS232接口与上位机应用平台终端交互连接。所述的若干个子节点分别通过RS485接口与现场应用设备交互连接。该系统是由一个主节点和若干个子节点通过电力线组成的PLC网络,各个子节点通过RS485总线连接现场应用设备。
具体地说,所述的主节点包括第一微控制器、第一载波电路模块、第一耦合电路模块、第一电源管理模块、和第一收发状态显示模块。所述的第一载波电路模块通过第一微控制器的第一UART接口与第一微控制器交互连接。所述的第一耦合电路模块与第一载波电路模块交互连接。所述的第一电源管理模块的输出端分别与第一微控制器的电源信号输入端、第一载波电路模块的电源信号输入端相连。所述的第一收发状态指示模块与第一微控制器的输出端相连。所述的第一微控制器的第二UART接口通过RS232接口与上位机应用平台终端交互连接。第一收发状态指示模块由一系列的发光二极管组成,发光二极管闪烁表示对应的端口有数据正在传输。
所述的子节点包括第二微控制器、第二载波电路模块、第二耦合电路模块、第二电源管理模块、和第二收发状态显示模块。所述的第二载波电路模块通过第二微控制器的第一UART接口与第二微控制器交互连接。所述的第二耦合电路模块与第二载波电路模块交互连接。所述的第二电源管理模块的输出端分别与第二微控制器的电源信号输入端、第二载波电路模块的电源信号输入端相连。所述的第二收发状态指示模块与第二微控制器的输出端相连。所述的第二微控制器的第三UART接口通过RS485接口与现场应用设备交互连接。第二收发状态指示模块由一系列的发光二极管组成,发光二极管闪烁表示对应的端口有数据正在传输。
进一步的,所述的主节点还包括第一看门狗模块、第一无源晶振模块、第一时钟模块、第一液晶显示模块和第一按键输入模块。所述的第一看门狗模块、第一无源晶振模块以及第一按键输入模块的输出端分别与第一微控制器的输入端相连。所述的第一时钟模块与第一微控制器交互连接。所述的第一液晶显示模块的输入端与第一微控制器的输出端相连。第一液晶显示模块和第一按键输入模块实现主节点运行时主要参数的显示。
所述的子节点还包括第二看门狗模块、第二无源晶振模块、第二时钟模块、第二液晶显示模块和第二按键输入模块。所述的第二看门狗模块、第二无源晶振模块以及第二按键输入模块的输出端分别与第二微控制器的输入端相连。所述的第二时钟模块与第二微控制器交互连接。所述的第二液晶显示模块的输入端与第二微控制器的输出端相连。第二液晶显示模块和第二按键输入模块实现子节点运行时主要参数的显示。
更进一步的,所述的第一微控制器和第二微控制器均采用STM32F107VC处理器。所述的第一载波电路模块和第二载波电路模块均采用MAX2992载波芯片。
本发明还涉及一种根据上述基于DMA的电力线网络系统的通讯方法,该方法包括以下步骤:
(1)电力线网络系统初始化,对主节点、子节点以及连接在子节点下的各个现场应用设备的参数进行配置,并对DMA收发缓冲区的长度d、中断触发条件和数据报文分段限定长度L进行设置。在系统初始化阶段,需要配置的参数包括协议类型、主节点地址、子节点地址和连接在子节点下各个现场应用设备的地址。
(2)采用DMA数据传输技术收发数据,并根据DMA收发缓冲区的中断触发条件,将DMA缓存区中的数据读取到固定的接收数据缓存区待处理。
所述的DMA收发缓冲区的中断触发条件包括两个,第一中断触发条件是:当接收数据长度为DMA收发缓冲区长度d的一半时,触发中断。第二中断触发条件是:当接收数据长度等于DMA收发缓冲区长度d时,触发中断。当满足第一中断触发条件时,如是一帧报文接收的开始,微控制器MCU先根据系统初始化配置文件中定义的协议类型,获取报文中的设备地址;再根据设备地址以及配置文件中的映射规则,获取到对应目的子节点的地址。
(3)根据数据报文分段限定长度L和传输的数据报文长度L1间的大小关系,对DMA收发缓冲区收发的数据进行判断处理。
(4)根据判断处理结果,对数据进行转发。具体过程为:
若传输的数据报文长度L1大于数据报文分段限定长度L,则当DMA收发缓冲区的数据长度累积达到分段限定长度L时,DMA收发缓冲区继续接收剩下的数据。与此同时,微控制器MCU将DMA收发缓冲区中接收到长度为L的数据打包成载波数据包,发送到对应的子节点。
若传输的数据报文长度L1小于等于数据报文分段限定长度L,则当一帧数据收发接收后,将DMA收发缓冲区中的数据打包成载波数据包,发送到对应的子节点。
进一步的,所述的DMA收发缓冲区长度d为20字节~30字节。
与现有技术相比,本发明的有益效果为:
1、本发明在电力线网络系统的各个节点中均采用基于DMA方式收发数据,通过有效设置DMA缓存长度以及中断触发条件,在DMA缓存接收数据为0.5个DMA缓存长度和1个DMA缓存长度时分别触发中断让微控制器MCU读取数据。从而有效提高了电力线网络系统各节点收发数据的速度,保证了PLC组网中数据报文传输的时效性。
2、在电力线网络系统主节点的接收转发流程中,利用DMA接收数据无需MCU干涉的特性,对长报文进行分段接收发送。这样无需等待长报文全部接收完成后再组帧进行发送,不仅可实现电力线网络系统节点对长报文的同步收发,减少报文在节点中的处理时间,还能提高报文在PLC网络中的传输速度,有效扩展PLC组网的应用范围。
3、本发明采用配置参数方式,支持多协议在电力线网络系统中的传输。网络系统中的主节点利用配置参数建立协议设备地址到所在子节点的映射关系。主节点接收到上位机应用平台发送的协议后,依据配置参数和映射关系,获取协议报文接收设备对应的子节点地址,无需解析报文,直接发送给该子节点。从而增加了PLC组网应用的灵活性、可靠性,同时也有效降低了应用系统的投资,具有明显的经济效益。
具体实施方式
下面结合附图对本发明做进一步说明:
如图1-图3所示的一种基于DMA的电力线网络系统,包括主节点和若干个子节点,所述的主节点与各个子节点之间通过电力线交互连接。所述的主节点通过RS232接口10与上位机应用平台终端11交互连接。所述的若干个子节点分别通过RS485接口22与现场应用设备23交互连接。该系统是由一个主节点和若干个子节点通过电力线组成的PLC网络,各个子节点通过RS485总线22连接现场应用设备23。只要在RS485总线驱动能力范围内,每个子节点可以连接不同数量的现场应用设备,每个现场应用设备具有一个唯一的设备地址。在该电力线网络系统中,主节点和各个子节点都具有各自唯一的短地址,用于标识各自的身份。各个子节点的短地址是主节点在网络初始化时根据配置参数分配的。在该电力线网络系统的组建过程中,主节点根据配置参数来建立各个子节点下的设备地址与对应子节点地址间的映射关系;与此同时,各个子节点也将分配到的网络短地址设置到各自的载波电路模块中。当该电力线网络系统组建成功后,上位机应用平台可以通过配置参数设置的协议类型发送对应的协议报文,实现和网络中各个子节点下各设备的数据通信。
具体地说,所述的主节点包括第一微控制器1、第一载波电路模块8、第一耦合电路模块9、第一电源管理模块4、和第一收发状态显示模块6。所述的第一载波电路模块8通过第一微控制器1的第一UART接口与第一微控制器1交互连接。所述的第一耦合电路模块9与第一载波电路模块8交互连接。所述的第一电源管理模块4的输出端分别与第一微控制器1的电源信号输入端、第一载波电路模块8的电源信号输入端相连。所述的第一收发状态指示模块12与第一微控制器1的输出端相连。所述的第一微控制器1的第二UART接口通过RS232接口10与上位机应用平台终端11交互连接。第一收发状态指示模块12由一系列的发光二极管组成,发光二极管闪烁表示对应的端口有数据正在传输。
所述的子节点包括第二微控制器13、第二载波电路模块20、第二耦合电路模块21、第二电源管理模块16、和第二收发状态显示模块24。所述的第二载波电路模块20通过第二微控制器13的第一UART接口与第二微控制器13交互连接。所述的第二耦合电路模块21与第二载波电路模块20交互连接。所述的第二电源管理模块16的输出端分别与第二微控制器13的电源信号输入端、第二载波电路模块20的电源信号输入端相连。所述的第二收发状态指示模块24与第二微控制器13的输出端相连。所述的第二微控制器13的第三UART接口通过RS485接口22与现场应用设备23交互连接。第二收发状态指示模块24由一系列的发光二极管组成,发光二极管闪烁表示对应的端口有数据正在传输。
进一步的,所述的主节点还包括第一看门狗模块3、第一无源晶振模块2、第一时钟模块5、第一液晶显示模块6和第一按键输入模块7。所述的第一看门狗模块3、第一无源晶振模块2以及第一按键输入模块7的输出端分别与第一微控制器1的输入端相连。所述的第一时钟模块5与第一微控制器1交互连接。所述的第一液晶显示模块6的输入端与第一微控制器1的输出端相连。第一液晶显示模块6和第一按键输入模块7实现主节点运行时主要参数的显示。
所述的子节点还包括第二看门狗模块15、第二无源晶振模块14、第二时钟模块17、第二液晶显示模块18和第二按键输入模块19。所述的第二看门狗模块15、第二无源晶振模块14以及第二按键输入模块19的输出端分别与第二微控制器13的输入端相连。所述的第二时钟模块17与第二微控制器13交互连接。所述的第二液晶显示模块18的输入端与第二微控制器13的输出端相连。第二液晶显示模块18和第二按键输入模19块实现子节点运行时主要参数的显示。
更进一步的,所述的第一微控制器1和第二微控制器13均采用STM32F107VC处理器。所述的第一载波电路模块8和第二载波电路模块20均采用MAX2992载波芯片。如图2和图3所示,STM32F107VC的UART1接口与载波电路模块交互连接,主节点的UART2接口通过RS232接口与上位机应用平台终端交互连接,子节点的UART3接口通过RS485接口与现场应用设备交互连接。STM32F107VC的OSC_IN管脚接无源晶振模块,5个GPIO管脚分别接看门狗模块、时钟模块、液晶显示模块、按键输入模块和收发状态指示模块。电源管理模块给STM32F107VC的输出信号为3.3V,给MAX2992载波芯片的输出信号为3.3V/12V。MAX2992载波芯片通过STM32F107VC处理器的UART1接口与微控制器MCU通信。微控制器将应用协议报文按其要求封装成对应的载波报文,通过UART1接口发送到MAX2992,再由MAX2992将接收到的报文通过其前端电路耦合到电力线上,实现载波数据的收发,或者接收到电力线上的数据后通过UART1口将数据发送给微控制器MCU。上位机平台通过RS232接口将应用协议报文发送到主节点,主节点通过STM32F107VC处理器的UART2接口以DMA方式接收协议报文。对于子节点来说,子节点将通过STM32F107VC处理器的UART3接口接收到的协议报文经RS485接口发送到各个现场应用设备。
本发明还涉及一种根据上述基于DMA的电力线网络系统的通讯方法,该方法包括以下步骤:
(1)电力线网络系统初始化,对主节点、子节点以及连接在子节点下的各个现场应用设备的参数进行配置,并对DMA收发缓冲区的长度d、中断触发条件和数据报文分段限定长度L进行设置。在系统初始化阶段,需要配置的参数包括协议类型、主节点地址、子节点地址和连接在子节点下各个现场应用设备的地址。
(2)采用DMA数据传输技术收发数据,并根据DMA收发缓冲区的中断触发条件,将DMA缓存区中的数据读取到固定的接收数据缓存区待处理。
所述的DMA收发缓冲区的中断触发条件包括两个,第一中断触发条件是:当接收数据长度为DMA收发缓冲区长度d的一半时,触发中断。第二中断触发条件是:当接收数据长度等于DMA收发缓冲区长度d时,触发中断。当满足第一中断触发条件时,如是一帧报文接收的开始,微控制器MCU先根据系统初始化配置文件中定义的协议类型,获取报文中的设备地址;再根据设备地址以及配置文件中的映射规则,获取到对应目的子节点的地址。
(3)根据数据报文分段限定长度L和传输的数据报文长度L1间的大小关系,对DMA收发缓冲区收发的数据进行判断处理。
(4)根据判断处理结果,对数据进行转发。具体过程为:
若传输的数据报文长度L1大于数据报文分段限定长度L,则当DMA收发缓冲区的数据长度累积达到分段限定长度L时,DMA收发缓冲区继续接收剩下的数据。与此同时,微控制器MCU将DMA收发缓冲区中接收到长度为L的数据打包成载波数据包,发送到对应的子节点。
若传输的数据报文长度L1小于等于数据报文分段限定长度L,则当一帧数据收发接收后,将DMA收发缓冲区中的数据打包成载波数据包,发送到对应的子节点。
进一步的,所述的DMA收发缓冲区长度d为20字节~30字节。
下面,结合图4-图7对数据的接收、处理、转发过程以及多协议映射表进行详细的描述:
图4为主节点采用DMA收发数据的算法过程。在开启一次DMA缓冲区接收数据过程中会有两次触发中断,进入中断函数后判断中断触发类型。若是接收一半中断或者接收满中断,则将DMA缓存区中的数据读取到固定的接收数据缓存区待处理。两种中断读取数据时,数据在DMA缓存区中的位置不同。当接收完数据后,置数帧结束计数器,启动一帧接收结束的判断依据,最后清除相关中断标志位并退出中断。当接收数据DMA模块出现错误时,中断函数根据触发中断的标志位是错误标志位,初始化相关参数后重新使能DMA中断,保证DMA接收数据的可靠性。
图5为数据接收后,判断是否进行转发的判断处理过程。本发明采用微控制器MCU的systick定时中断作为接收数据帧结束的基础。在图3所述的流程图中,每个DMA接收中断后,均将帧结束计数器初始化为一个固定值;且在每次进入systick定时中断函数中时,均对该计数器进行减1操作,当计数器值为0时,则认定一帧接收结束。在图3所示的接收数据的过程中,因为每次接收数据完成后均对计数器进行重新置数,因此在DMA接收数据过程中,计数器值不为0。同时,为了将接收的长帧报文分段同步接收发送,在接收过程中,需要判断接收数据总长度对分段发送限定长度的求余结果。若求余结果为0,则表示接收的数据长度已经符合分段发送的条件,并将数据转发计数器加1。若求余结果不为0,表示接收的数据长度还未达到限定的发送长度;则判断一帧是否收发结束。如果一帧收发已经结束,但接收的数据长度还没有达到限定的发送长度,则将数据转发计数器加1,并转发实际收到的数据。如果一帧收发未结束,则退出中断进行下次判断。
图6为将接收到的数据转发到载波电路模块的算法流程。根据图4所示的算法流程的处理结果,对接收的数据进行转发操作。当转发计数器值不为0时,说明数据接收区中存在需要转发的数据报文。首先,根据配置参数中的协议类型,获取数据报文帧中设备地址的位置,读出设备地址。其次,根据映射表查出该设备地址所在的目的子节点地址,将该地址和数据缓存区的数据报文进行载波帧组包,发送到载波电路模块对应串口的DMA发送缓冲区。再次,使能DMA发送中断,通过载波电路模块将数据报文发送出去。最后,发送完一帧后,根据转发计数器的值判断数据是否已经转发完,没有则继按照前面流程进行转发。
图7给出了本发明中多协议的映射表。在系统组网初始阶段需通过配置参数配置该表,协议类型包含常用的Modbus,DLT645,101等规约。由于不同规约对应的设备地址长度不同,且该地址在不同协议中的位置也不同。因此,主节点在进行组网转发数据前必须通过协议类型得知其转发的是哪种协议报文,并依据不同的协议类型先从数据接收缓冲区中对应协议报文的帧格式读出设备地址,再根据映射表查找出对应的目的子节点地址。下面介绍几种常见协议的协议类型及设备地址:
Modbus协议:协议类型为01,协议设备地址为一个字节,子节点地址为0x0001,该子节点下面对应的设备地址为0x02,0x03。子节点地址为0x0002,该子节点下面对应的设备地址为0x04,0x05,0x06等,其他子节点配置类似。
DLT645协议:协议类型为02,协议设备地址为6个字节,子节点地址为0x001,该子节点下面对应的设备地址为0x000000000002,0x000000000003。子节点地址为0x0002,该子节点下面对应的设备地址为0x000000000004,0x000000000005,0x000000000006等,其他子节点配置类似。
101协议:协议类型为03,协议设备地址为1个字节,子节点地址为0x001,该子节点下面对应的设备地址为0x02,0x03。子节点地址为0x0002,该子节点下面对应的设备地址为0x04,0x05,0x06等,其他子节点配置类似。
当主节点判断协议类型是02,主节点知道应用平台发来的数据帧都为645报文帧,在转发数据的过程中,依据该协议报文帧格式,读出设备地址。比如0x000000000005,查表得知该地址对应的网络子节点地址为0x0002。无需解析具体报文,直接根据获得的子节点地址将该报文组装成都应的载波报文,通过载波模块发送到PLC网络中对应的子节点。子节点通过其载波模块收到主节点发给自己的协议报文,将载波报文帧中的数据直接发送到连接设备RS485总线的串口,实现上位机应用平台和PLC组网中各个子节点下的不同设备的数据通信。
在本发明所述的基于DMA的电力线网络系统中,主节点和子节点均采用DMA接收和发送对应的报文帧。本发明所述的基于DMA的电力线网络系统的通讯方法具有以下特点:
(1)将DMA数据缓冲区的长度d设置成较短的长度(一般设为20~30字节,优选为24字节);并设置第一中断触发条件和第二中断触发条件。所述的第一中断触发条件为:DMA数据缓冲区接收的数据长度等于0.5d。所述的第二中断触发条件为:DMA数据缓冲区接收的数据长度等于d。通过设置两个中断触发条件,在DMA数据缓冲区接收数据期间,微控制器MCU有两次机会对接收的数据进行处理。
微控制器MCU对接收的数据进行处理的过程为:
当满足第一中断触发条件时,如是接收协议数据报文的开始,则根据系统配置文件中定义的协议类型获取报文中的设备地址;然后根据获取的设备地址和配置文件中的映射规则,获取对应目的子节点的地址。
当传输的数据报文长度大于分段限定长度L时,利用DMA接收数据无需MCU干涉的特点,在缓冲区接收的数据累积达到分段限定长度L个字节时,DMA继续接收数据,与此同时,MCU将已收到的数据打包成载波数据包,发送到对应的子节点。从而实现长报文接收一段就发送一段,而无需等长报文全部接收完后再发送。
当传输的数据报文长度小于分段限定长度L时,等帧结束判断有效时,直接将该数据打包成载波数据包,发送到对应的子节点,无需截断发送。
(2)本发明采用的配置参数方式来将多协议快速映射到对应的子节点。在电力线组网过程中,PLC网络中的主节点和子节点的地址是唯一的,主节点通过子节点的地址来进行数据的一一对应收发的。连接在子节点下的各个设备的地址也是唯一的,并且体现在交互的通信协议报文中。
在网络系统的初始化配置阶段,配置参数包括协议类型、主节点地址、子节点地址、子节点下对应的所有设备地址等。上位机应用平台通过微控制器MCU的维护端口将配置参数发送给主节点,主节点根据参数建立各个子节点地址和其下接设备地址之间的映射关系,在系统组网阶段将对应的子节点地址分配给各个子节点。组网成功后,上位机应用平台可以根据配置的协议和各个子节点下的设备进行数据通信。主节点收到通信报文后,首先,根据配置参数判断出协议类型;其次,根据每个协议报文帧中设备地址位置固定的特点,读取出设备地址;再次,根据之前建立的映射关系,快速查找出该报文要发往的目的子节点地址;再次,根据地址和协议报文帧组建成载波数据报文帧,通过串口模块发送给载波模块,由载波模块和耦合电路模块耦合到电力线上,发送到协议目的设备所在的子节点。
以上所述的实施例仅仅是对本发明的优选实施方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案作出的各种变形和改进,均应落入本发明权利要求书确定的保护范围内。