发明内容
针对现有技术中存在的不足,本发明提供了一种基于Modbus协议的RS485总线通讯方法及基于该通讯方法的电力电子系统。
一种基于Modbus协议的RS485总线通讯方法,实施于包括一个主控制器和若干个从控制器的RS485总线多机通信系统,所述的RS485总线通讯方法包括:
(1)主控制器根据用户输入的读写指令或者状态查询指令生成相应的控制指令,并将所述的控制指令封装成控制帧后发送到RS485总线上;
(2)从控制器侦听RS485总线,当侦听到控制帧到达后开始接收并处理侦听到的控制帧形成相应的响应帧,并将形成的响应帧发送到RS485总线上;
(3)主控制器通过侦听RS485总线接收响应帧,并判断接收到的响应帧是否正确:
若主控制器在设定的时间间隔内未接收到响应帧或接收到的响应帧不正确,则重新发送该控制帧,直至接收到正确的响应帧或连续发送M次都未接收到正确的响应帧后停止发送该控制帧,并结束侦听RS485总线,重新使能用户输入的读写指令和运行状态查询指令;
所述的控制帧和响应帧均包括5个字段,分别为起始段、控制器地址段、功能标志段、分控信息段和错误校验段。
本发明的RS485总线通讯方法中通过定义控制器生成的通讯帧的结构(主控制器生成的控制帧和从控制生成的响应帧),使RS485总线通信系统采用基于Modbus协议的自定义帧进行通信,通过通讯程序的结构化设计,定义合理的通讯帧及处理逻辑,不需要另外构建通讯协议,提高通讯效率,加快数据的响应速度,提高了RS485总线通讯系统的利用率,还大大降低了传输延时,且采用RS485总线通信系统通讯可靠性强,成本较低,易于实现,适合在大规模电力电子系统中应用。
本发明的RS485总线通讯方法中主控制器和从控制器之间支持通用异步接收/发送(UART)通信模式,控制器(包括主控制器和从控制器)的接收器与自身帧同步,外部发送和接收器不需要使用串行同步时钟,时钟可以由内部产生。主控制器接收响应帧,在接收到的响应帧不正确时还重新发送控制帧,有利于提高RS485通信系统中可靠性。相应的,为保证能够重发,主控制器发送控制帧前,还对控制帧进行了备份,先将控制帧存储到一个数据缓冲区中,再次发送时,直接从该数据缓冲区中调取相应的控制帧。当接收到正确的响应帧后,认为该控制帧成功发送,则更新该数据缓冲区中的控制帧为下一个控制帧。且本发明的方法中在多次发送后仍然未接收到正确的响应帧时,认为该控制帧发送失败,还产生发送错误告警。
所述的起始段用于表示控制帧或响应帧的开始;
所述的控制器地址段用于表示控制帧或响应帧所指向的控制器的地址;
所述的功能标志段用于表示控制帧或响应帧的对应的控制指令的类型;
所述的分控信息段用于表示控制指令的内容或执行结果;
所述的错误校验段用于检验对应的控制帧或响应帧的正确性。
分控信息段与功能标志段对应的控制指令的类型有关,对于控制帧,分控信息段用于表示控制指令的内容,对于响应帧,分控信息段表示执行该控制指令后的结果。
(a)对于控制帧:
若对应的控制指令为读取指令或运行状态查询指令,则所述的分控信息段用于表示待读取或待查询的寄存器的个数和寄存器的首地址;
若为写入指令,则分控信息段用于表示待写入的寄存器的个数、寄存器的首地址和待写入的内容;
(b)对于响应帧:
若为读取指令或运行状态查询指令,则分控信息段用于表示读取的寄存器的数量和读取到的数据;
若为写入指令,则所述的分控信息段用表示待写入的寄存器的个数、寄存器的首地址和待写入的内容。
读取指令分为单个寄存器的读取指令和多个寄存器的读取指令,当为单个寄存器的读取指令时,为减小通讯数据量,提高通讯效率和降低延时,控制帧和响应帧中分控信息段中可以不表示待读取或待查询的寄存器的个数。写入指令也包括单个寄存器的写入指令和多个寄存器的写入指令,当为单个寄存器的写入指令时,控制帧和响应帧中分控信息段中可以不表示待写入的寄存器的个数。
起始段为1~16位,控制器地址段根据需要支持的系统模块数决定,通常为1~8位,功能标志段包括2~8位,错误校验段为2个字节,分控信息段的长度取决于控制指令的类型。通讯帧(包括控制帧和响应帧)的长度是由位(二进制数据位)构成的,依据功能码的不同,读写帧的长度各异。为了优化通讯程序结构,提高程序处理效率和降低通讯延时,通讯帧的帧结构的定义按照字节进行,故通讯帧各个字段大小的定义都是以字节为单位的,也即通讯帧接收和发送的过程中每个字段的发送都需要经过8次移位操作。
所述步骤(1)中通过解析控制指令将控制指令封装成控制帧。
通过解析控制指令所指向的从控制器的地址、控制指令的类型、控制指令的内容,然后将解析结果作为控制帧的控制器地址段、功能标志段和分控信息段封装成帧,并且添加起始段,为提高可靠性,根据起始段、控制器地址段、功能标志段和分控信息段生成错误校验段插入到帧的末尾从而得到相应的控制帧。其中,控制指令的类型可分为写入指令(用户输入的写入指令)和读取指令(状态查询指令或用户输入的读取指令),也可以有其他划分标准,为便于表示,通常根据划分结果对各个类型进行编号,通过用户设定,功能标志段实际上为控制指令的类型的编号。
M和时间间隔的设置直接关系到RS485总线多机通信系统的传输时延和可靠性,通常M和时间间隔越大,可靠性越高,但是会增大传输时延。为综合考虑,在传输时延和可靠性之间取得平衡,M和时间间隔不可过大。作为优选,所述的M为3,所述的时间间隔为1ms。
所述步骤(1)中主控制器通过sci通讯中断将控制帧发送到RS485总线上。
为保证中断后的数据恢复,通常需要对该数据缓冲区进行扩展(通常扩展为原来的2倍),将中断发送该控制帧时产生的中断数据也放在发送数据缓冲区,以便中断后进行通信恢复。
所述步骤(2)中的从控制器通过以下步骤接收并处理控制帧形成响应帧:
(2-1)接收控制帧的起始段,并判断控制帧的起始段是否有效:若有效,则继续接收控制器地址段;否则,返回继续侦听RS485总线;
(2-2)判断控制帧的控制器地址段与自身的地址是否一致,若不一致,则停止接收;若一致,则继续进行如下操作:
(2-21)接收功能标志段、分控信息段和错误校验段,接收完成后根据接收到的起始段、控制器地址段、功能标志段和分控信息段采用Modbus协议通用的CRC16校验方法生成校验码;
(2-22)比较生成的校验码与接收到的错误校验段,若二者一致,则执行该控制帧,并根据执行结果生成相应的响应帧;否则,不操作。
从控制器按照字段接收控制帧,且依次判断起始段和控制器地址段的有效性判断自身是否为该控制帧所指向的目标,然后接收剩余的字段。为了避免执行错误的控制帧,提高可靠性,从控制器利用Modbus协议通用的CRC16校验方法检验接收到的控制帧的正确性,正确时(生成的校验码与接收到的错误校验段一致时)才执行接收到的控制帧对应的控制指令,另一方面,还节省了执行错误控制帧的时间,进一步降低了传输时延。
所述步骤(2-22)中通过以下方法生成响应帧:
根据接收到的功能标志段确定该控制帧对应的控制指令的类型:
若为写入指令,则将控制帧的起始段、功能标志段和分控信息段分别作为响应帧的起始段、功能标志段和分控信息段,响应帧的控制器地址段装载主控制器的地址,根据响应帧的起始段、控制器地址段、功能标志段和分控信息段生成错误校验段,得到响应帧;
若为读取指令或状态查询指令,则将控制帧的起始段、功能标志段作为响应帧的起始段、功能标志段,将读取结果作为响应帧的分控信息段,响应帧的控制器地址段装载主控制器的地址,并根据响应帧的起始段、控制器地址段、功能标志段和分控信息段生成错误校验段生成错误校验段,得到响应帧。
所述步骤(3)包括如下步骤:
(3-1)主控制器侦听到响应帧到达后,接收响应帧的起始段,并判断响应帧的起始段是否有效:若有效,则继续接收控制器地址段;否则,返回继续侦听RS485总线;
(3-2)判断响应帧的控制器地址段与自身的地址是否一致,若不一致,则停止接收;若一致,则继续进行如下操作:
(3-21)接收功能标志段、分控信息段和错误校验段,接收完成后根据接收到的起始段、控制器地址段、功能标志段和分控信息段采用Modbus协议通用的CRC16校验方法生成校验码;
(3-22)比较生成的校验码与接收到的错误校验段,若二者一致,则判断接收到的响应帧正确;否则,判断接收到的响应帧不正确。
主控制器按照字段接收响应帧,RS485通信系统中,主控制器以及各个从控制器都具有唯一的地址,若响应帧中的控制器地址段与RS485通信系统中主控制器的地址不一致,则直接跳过不接收剩余的字段,节约了数据传输时间,有利于提高通讯效率,降低传输时延。主控制器利用Modbus协议通用的CRC16校验方法判断接收到的响应帧的正确性,实现方法简单。
起始段的有效性可根据实际应用设定,作为优选,所述的起始段为1个特定内容的字节。起始段的有效性根据用户需求设定。
本发明的RS485通信方法中主控制器与从控制器之间采用SCI异步通信方式,该通信方式中通讯帧中的每个数据位占用8个SCICLK时钟周期。相应的,控制器接收通讯帧的各个字段时是按数据位进行接收的,具体过程如下:
控制器检测到连续4个低电平后开始接收数据位,这4个电平称为有效起始位。只有接收有效起始位后,控制器才开始接收该数据位。当控制器接收到数据位后,控制器对接收到的数据位进行3次采样,确定该数据位的值。本发明中三次采样分别发生在第4、5、6个SCICLK周期,三次采样中两次以上相同的值即为该数据位的值。
本发明还提供了一种基于该通讯方法的电力电子系统,包括若干个电力电子模块,用于控制各个电力电子模块的从控制器,以及一个主控制器,各个从控制器通过RS485总线与主控制器并联连接,呈节点式分布结构;
所述的主控制器用于根据用户输入的读写指令或者运行状态查询指令生成相应的控制指令,并将所述的控制指令封装成控制帧发送到RS485总线,还用于发送完控制帧后通过侦听RS485总线接收响应帧,并判断接收到的响应帧是否正确;
所述的从控制器用于侦听RS485总线,当侦听到控制帧到达后开始接收并处理控制帧形成响应帧,并将形成的响应帧发送到RS485总线上;
所述控制帧和响应帧包括5个字段,分别为起始段、控制器地址段、功能标志段、分控信息段和错误校验段。
本发明的电力电子系统中通讯帧(包括控制帧和响应帧)采用基于Modbus协议的自定义格式,设定通讯帧中包括若干个字段,每个字段都包含一个完整有用的信息,控制器(包括主控制器和从控制器)可以对每个数据帧进行逐字段的处理而不用等到接收完整的帧后再统一处理各个字段,这就使得程序可以智能地提早筛选出针对本控制器的通讯帧,对目标对象非本控制器的通讯帧提早屏蔽,节省了本身控制器的内存和程序空间,提高了总线利用效率,同时也不需要刻意压缩帧的长度,保证了传输内容的完整性和丰富性。
主控制器一方面接收用户输入的读写指令,另一方面每隔一定周期自动查询从控制器对应的电力电子模块的相关信息,如电压信息、电流信息、运行指标参数(如THD、功率因数、负载率等)以及故障状态。电压信息、电流信息依据种类不同定义相应的查询字节大小,电压信息和电流信息用以表征从模块是否过欠压和过流,供给主控制器进行相应控制调节。运行指标参数用以表征从模块运行特性,表明其功能是否正常及其投入运行后对系统的改善效果,若运行效果不佳,一般通过主控制器进行用户输入指令进行调节。故障状态为各个从控制器对应的电力电子模块的工作状态,一般定义为1个字节,共8位,每一位初始化为0,变为1时可以表征该模块的一种故障,故总共可以反馈8种故障类型,同时也可依据模块的复杂程度进行该故障查询字节的扩展,但是会增加通讯量和逻辑判断的复杂性,可视实际情况而定。
主控制器将用户输入的读写指令或运行状态查询指令封装成控制帧后,通过设置485通讯芯片的相应引脚经主控制器配置成发送模式,将控制帧沿RS485总线向下转发,发送成功后再将485通讯芯片的相应引脚配置成接收模式,此时用户输入的读写指令和状态查询指令无效。初始情况下,各个从控制器的485通讯芯片的相应引脚配置为接收模式,实时侦听RS485总线,接收来自主控制器的控制帧并对控制帧的控制器地址段进行解析。受控的从控制器根据接收到的控制帧,完成相应的控制指令,并将执行结果装载至响应帧中,然后将485通讯芯片的相应引脚配置成发送模式,将该响应帧通过RS485总线反馈给主控制器,发送完成后将485通讯芯片的相应引脚配置成接收模式。
考虑到通讯距离和通讯速度要求,本发明的电子电子系统中从控制器最多为32个。
所述的主控制器还用于进行如下操作:
若在设定的时间间隔内未接收到响应帧或接收到的响应帧不正确,则重新发送所述的控制帧,直至接收到正确的响应帧或连续发送M次都未接收到正确的响应帧后停止发送所述的控制帧,并结束侦听RS485总线,重新使能用户输入的读写指令和运行状态查询指令。
重新使能用户输入的读写指令和运行状态查询指令是指使用户输入的读写指令或运行状态查询指令能够生效产生相应的通讯中断,形成相应的控制指令并封装成控制帧。
控制器按字段接收和处理侦听到的通讯帧,所述的控制器为主控制器或从控制器,若为主控制器,则对应的通讯帧为控制帧,若为从控制器,则对应的通讯帧为响应帧,具体如下:
(2-1)控制器接收到达的通讯帧的起始段,并判断通讯帧的起始段是否有效:若有效,则继续接收通讯帧的控制器地址段;否则,返回继续侦听RS485总线;
(2-2)判断通讯帧的控制器地址段与自身的地址是否一致,若不一致,则停止接收;若一致,则继续进行如下操作:
(2-21)接收通讯帧的功能标志段、分控信息段和错误校验段,接收完成后根据接收到的起始段、控制器地址段、功能标志段和分控信息段生成校验码;
(2-22)比较生成的校验码与接收到的错误校验段:
若二者不一致,则判断接收到的通讯帧不正确;
若二者一致,则判断接收到的通讯帧正确,且对于从控制器,当判断接收到的控制帧正确时,继续执行该控制帧,并根据执行结果生成相应的响应帧发送到RS485总线上。
本发明的基于Modbus协议的电力电子系统的RS485总线通讯系统和方法中从控制器和主控制之间通过RS485总线连接,通过定义主控制器生成的控制帧和从控制生成响应帧的结构,使RS485总线通讯系统基于Modbus协议进行通信,提高了RS485总线通讯系统的利用率,还大大降低了传输延时且采用RS485总线通信系统通讯可靠性强,且成本较低,易于实现,适合在大规模电力电子模块化系统中应用。
具体实施方式
下面结合附图和具体实施例对本发明作进一步的说明。
一种基于Modbus协议的RS485总线通讯方法,实施于包括一个主控制器和若干个从控制器的RS485总线多机通信系统,该RS485总线通讯方法如图1所示,包括:
(1)主控制器根据用户输入的读写指令或者状态查询指令生成相应的控制指令,并将控制指令封装成控制帧后通过sci通讯中断将封装后的控制帧发送到RS485总线上;
(2)从控制器侦听RS485总线,当侦听到控制帧到达后开始接收并处理侦听到的控制帧形成相应的响应帧,并将形成的响应帧发送到RS485总线上;
(3)主控制器通过侦听RS485总线接收响应帧,并判断接收到的响应帧是否正确:
若主控制器在设定的时间间隔内未接收到响应帧或接收到的响应帧不正确,则重新发送该控制帧,直至接收到正确的响应帧或连续发送M次都未接收到正确的响应帧后停止发送该控制帧,并结束侦听RS485总线,重新使能用户输入的读写指令和运行状态查询指令。
本实施例中时间间隔为1ms,M为3。
本实施的RS485总线通讯方法中的控制帧和响应帧均包括5个字段,分别为起始段、控制器地址段、功能标志段、分控信息段和错误校验段。起始段用于表示控制帧或响应帧的开始;控制器地址段用于表示控制帧或响应帧所指向的控制器的地址;功能标志段用于表示控制帧或响应帧的对应的控制指令的类型;分控信息段取决于功能标志段对应的控制指令的类型,对于控制帧,分控信息段用于表示控制指令的内容,对于响应帧,分控信息段表示控制指令的执行结果;错误校验段用于检验对应的控制帧或响应帧的正确性。
本实施例中起始段为1个字节,控制器地址段为1个字节,功能标志段为为1个字节,错误校验段为2个字节,分控信息段的长度取决于控制指令的类型。本实施例中规定起始段为0xAA时有效。
对于控制帧,若对应的控制指令为读取指令或运行状态查询指令,则分控信息段用于表示待读取或待查询的寄存器的个数(即读取数量段,1个字节)和寄存器的首地址(即读取地址段,2个字节);若为写入指令,则分控信息段用于表示待写入的寄存器的个数(即写入数量段,1个字节)、寄存器的首地址(即写入地址段,2个字节)和待写入的内容(即写入数值段,长度取决于待写入的寄存器的个数)。
对于响应帧,若为读取指令或运行状态查询指令,则分控信息段用于表示读取的寄存器的数量(读取数量段,1个字节)和各个寄存器的对应的内容(即读取数值段,该段长度取决于读取寄存器个数的多少);若为写入指令,则分控信息段用于表示待写入的寄存器的个数(即写入数量段,1个字节),寄存器的首地址(即写入地址段,2个字节)和待写入的内容(即写入数值段,长度取决于写入寄存器个数的多少)。
读取指令分为单个寄存器的读取指令和多个寄存器的读取指令,当为单个寄存器的读取指令时,控制帧和响应帧中分控信息段中不表示待读取或待查询的寄存器的个数。同样写入指令也包括单个寄存器的写入指令和多个寄存器的写入指令,当为单个寄存器的写入指令时,控制帧和响应帧中分控信息段中不表示待写入的寄存器的个数。
基于该通讯方法的电力电子系统如图2所示,包括N个电力电子模块(本实施例中为有源电力滤波器模块(即APF模块,分别为APF1,APF2,……APFN,APF模块通过断路器连接到电网,用于补偿电网的非线性负载谐波,本实施例中N=4),用于控制各个电力电子模块的从控制器,分别为从控制器1,从控制器2,……从控制器N,以及一个主控制器,各个从控制器通过RS485总线与主控制器并联连接,呈节点式分布结构,用户通过输入单元向向主控制输入读写指令,实现对各个从控制器的控制。
主控制器用于根据用户输入的读写指令或者运行状态查询指令生成的控制指令,将控制指令封装成控制帧发送到RS485总线上,发送完成后还用于通过侦听RS485总线接收响应帧,并判断接收到的响应帧是否正确;
从控制器侦听RS485总线,侦听到控制帧到达后开始接收并处理控制帧形成响应帧,并将形成的响应帧发送到RS485总线上。
本实施例中从控制器的控制芯片采用TI公司的TMS320F2812,该芯片是一款用于控制的高性能、多功能、高性价比的32位定点DSP芯片,最高可在150MHz主频下工作,它的串行通信接口(SCI)用于实现本发明提出的总线通讯方法。为了提高控制性能,主控制器一般采用性能更强的处理芯片,以便于进行更复杂的运算,但是出于模块化生产和归一化管理的考虑,本实施例中,采用的主控制器和从控制器在结构上完全相同,均采用TI公司的TMS320F2812实现,只是主控制器运行的程序区别于从控制器。
本实施例中控制器(包括接收器和发送器)发送或者接收485通讯帧之前要先进行相应的初始化和通过GPIO口进行引脚的配置。控制器的接收器与自身帧同步,所以外部发送和接收器不需要使用串行同步时钟,时钟可以由内部产生。控制器的接收器接收完通讯帧之后进行解析处理均通过PIE中断的方式引入一个程序处理入口,同样发送器发送数据也是通过中断的方式进行的。
主控制器和从控制器之间通过SCI异步通信模式进行通信。图3为SCI异步通信的时序示意图,每个数据位占用8个SCICLK时钟周期,图中SCIRXD是指SCI异步串行端口接收的数据,LSB(least significant bit)为接收的数据的最低有效位。本实施例中控制器接收通讯帧的各个字段时是按数据位进行接收的,具体过程如下:
控制器检测到连续4个低电平后开始接收数据位,这个4个电平称为有效起始位。只有接收有效起始位后,控制器才开始接收数据位。当控制器接收到数据位后,控制器对接收到的数据位的进行3次采样,确定该数据位的值。本实施例中三次采样分别发生在第4、5、6个SCICLK周期,三次采样中两次以上相同的值即为该数据位的值。以接收起始段为例:
本实施例中起始段长度为1个字节,即包括8个数据位,因此需要分8次进行接收,每检测到一个有效起始位后就接收一个数据位。每次接收一个数据位完成后,针对每个数据位进行3次采样,确定该数据位的具体值。
本实施例的电力电子系统针对不同的控制指令的处理过程不同。
(一)当控制帧对应的控制指令为用户输入的写入指令时:
以用户输入针对3号APF模块的选择性谐波补偿次数设定指令为例,假定原先3号APF模块的补偿次数设定为50以内谐波全补,现通过用户指令输入界面输入写入指令将其改为只补偿5、7、11、13次谐波,本实施例的电力电子系统的处理流程如下:
(S1)主控制器接收用户输入指令,并将该指令封装成相应控制帧,并将自身的485通讯芯片引脚配置成发送模式,然后将控制帧内容逐字节依次发送,发送完成后,引脚重新配置成接收模式,主控制器开始侦听总线,准备接收来自3号APF模块对应的从控制器的响应帧。
该控制帧的具体格式和内容为:
a.起始段是一个特定内容的字节,装载内容为0xAA;
b.该用户输入指令是针对3号APF模块的操作,故控制器地址段装载内容为0x03;
c.该用户输入指令是针对谐波补偿次数的修改操作,控制指令是单个寄存器的写入指令,设定控制指令对应的功能码标志段,本实施例中为0x06;
d.该用户输入指令是修改补偿谐波次数,补偿谐波次数的设定是放在在程序内部一个名为Select的内存变量里的,所以要针对此变量进行操作,由于是单个寄存器的写入操作,分控信息段可以不表示寄存器的个数,即不存在写入数量段。同时需在分控信息段先给出该变量对应的内存地址,以供从控制器进行查找提取,假定该地址值为0xA001,则将该地址装载至分控信息的写入地址段。而谐波次数内容是通过解析Select的各个位(各个数据位)来确定的,该位为1,表示该位对应的谐波次数需补偿,为0则表示不补偿。如原来的设定是50次以内全补,对应的Select变量值为0xFFFF,即每一位都是1,现改为只补偿5、7、11、13次,故对应的Select值应变为0x000F,则将该值装载至分控信息段的写入数值段,故完整的分控信息段的内容为0xA0,0x01,0x00,0x0F。
e.为了保证控制帧内容的可靠性,降低误码率,所以在控制帧内容的尾部加上一个两字节的校验,该校验码是通过Modbus协议通用的CRC16校验算法得来的,根据此帧的内容,该错误校验程序的输入内容为0xAA,0x03,0x06,0xA0,0x01,0x00,0x0F,校验程序运算得到的校验码高字节为0x19,低字节为0x8D,并装载至错误校验段。
f.至此,该控制帧内容装载完毕,完成的帧字节依次为0xAA,0x03,0x06,0xA0,0x01,0x00,0x0F,0x19,0x8D。
(S2)3号APF模块对应的从控制器正常情况下实时侦听总线,从控制器每侦听到一个有效起始位时,通过8次单个数据位的接收得到一个起始段;与此同时,1、2、4号APF模块对应的从控制器也通过该方法检测到起始段,进行接收工作,具体如下:
(S2-1)3号APF模块对应的从控制器读取该控制帧的控制器地址段,解析得到目标从控地址为0x03,然后和自身的地址0x03比较,发现一致,故继续进行下一步操作;1、2、4号APF模块对应的从控制器同样读取控制器地址段信息,但是由于得到的目标从控地址与自身的地址(分别为0x01,0x02,0x04)不符,故不再接收后续的帧字节;
(S2-2)3号APF模块对应的从控制器继续接收剩余的字段,包括功能标志段、分控信息段和错误校验段。接收完成后,通过中断引入一个地址进入帧错误校验程序,输入对象为之前接收到的起始段、控制器地址段、功能标志段和分控信息段,程序输出为根据上述对象生成的一组高低位校验码,将该校验码与接收到的错误校验段高低位字节进行比较,若没有出现错误传输,则从控制器校验得到的校验码和接收得到的主控制器发送的校验码应该是一致的,进入步骤(S2-3);若两者不一致,则说明该从控制器判断接收到的控制帧错误,需要主控制器重新传送;
(S2-3)3号APF模块对应的从控制器执行该控制帧:
(S2-31)解析功能标志段,结果为0x06,即单个寄存器的写操作,故先提取写操作的对象内存地址,即先获取分控信息段的前两个字节,将分控信息段的首字节左移8位,加上该段的第二个字节,得到该写入帧的目标内存地址address_write=0xA001。然后将分控信息段的第三个字节左移8位,加上该段的第四个字节,获取该写入帧的待写入的变量值y=0x000F。
(S2-32)将步骤(S2-31)解析得到的待写入的变量值写入相应的变量地址(即目标内存地址),完成控制操作。下一个时钟周期3号APF模块对应的从控制器解析该模块补偿次数设定时,得到的补偿次数即为5、7、11、13次谐波了。同时3号从控制器(3号APF模块对应的从控制器)还需生成相应的响应帧,告知主控制器已完成控制操作,该帧的具体内容和格式为:
a.起始段装载内容为0xAA;
b.该响应帧是发往主控制器的,故控制器地址段装载内容为0x00;
c.该响应帧的功能标志段、分控信息段跟接收帧的功能标志段、分控信息段取一致,故响应帧功能标志段的装载内容为0x06,分控信息段的写入地址段装载内容为0xA0,0x01,写入数值段装载内容为0x00,0x0F,表示该响应帧是针对上次写控制功能的操作响应;
d.同理,在以上响应帧内容的尾部加上一个两字节的校验码,根据此帧的内容,该错误校验程序的输入内容为0xAA,0x00,0x06,0xA0,0x01,0x00,0x0F,运算得到的校验码高字节为0xD7,低字节为0x6D,并装载至错误校验段;
e.至此,响应帧内容装载完毕,帧字节依次为0xAA,0x03,0x06,0xA0,0x01,0x00,0x0F,0xD7,0x6D。
(S3)主控制器实时侦听RS485总线,检测到有效的起始段之后继续进行如下操作:
(S3-1)主控制器接收响应帧的地址段,解析得到0x00,是发往自身的响应帧,故接收剩下的所有字段,包括功能标志段、分控信息段和错误校验段。
(S3-2)接收完成后,通过中断引入一个地址进入帧错误校验程序,生成一组高低位校验码,将该校验码与接收到的响应帧的错误校验段高低位字节进行比较,若没有出现错误传输,则主控制器校验得到的校验码和接收得到的从控制器发送的校验码应该是一致的,进入下一步;若两者不一致,则说明主控制器接收到的某一个或者多个字节存在误码,主控制器直接判定未接收到正确的响应帧,重新发送之前的控制帧;
(S3-3)解析该响应帧的功能标志段和分控信息段,是否为之前发往目标从控制器的控制内容,若一致,则判断接收到的响应帧正确,说明控制操作成功,且主控制器得到相应响应,可以重新开放用户指令输入和状态查询指令;若不一致或者在设定的时间间隔内未收到来自目标从控制器的响应帧,则将之前发送过的通讯帧再次发送,直至收到正确的响应帧或者重发设定次数M次失败后报告通讯错误为止。
(二)当控制帧对应的控制指令为读取指令时:
以主控制器查询3号从控制器故障状态信息为例,本实施例的电力电子系统的处理流程如下:
(S1)主控制器每隔一定周期(本实施例中为2s)生成一个查询指令查询3号APF模块的故障状态,并将其封装成控制帧后,主控制器的485通讯芯片引脚配置成发送模式,然后将该控制帧逐字节依次发送,发送完成后,引脚重新配置成接收模式,主控制器开始侦听总线,准备接收来自3号从控制器(3号APF模块对应的从控制器)的响应帧。
该控制帧的具体格式和内容如下:
a.起始段装载内容为0xAA;
b.该查询指令是针对3号APF模块的操作,故控制器地址段装载内容为0x03;
c.该查询是针对故障状态变量的读取操作,控制指令类型是单个寄存器的读取指令,将该控制指令的类型装载至功能标志段中(本实施例为0x03);
d.分控信息段的主要内容是读取目标变量个数和读取变量首地址,由于是单个寄存器的读取操作,所以分控信息段不表示寄存器的个数,即分控信息段中不存在读取数量段。故障状态变量在程序中的定义是一个字节,假设故障状态变量的内存地址(寄存器的首地址)为0xB001,则将该内存地址装载至读取地址段,得到的分控信息段的状态内容为0xB0,0x01;
e.为了提高通讯的可靠性,在帧结尾加上一组校验码,根据此帧的内容,该错误校验程序的输入内容为0xAA,0x03,0x03,0xB0,0x01,校验程序运算得到的校验码高字节为0xA0,低字节为0x6A,并将运算结果装载至错误校验段中;
f.至此,该控制帧内容装载完毕,完成的帧字节依次为0xAA,0x03,0x03,0xB0,0x01,0xA0,0x6A。
(S2)3号APF模块的从控制器正常情况下实时侦听总线,从控制器每侦听到一个有效的起始位时接收一个数据位,通过8次单个数据位的接收得到一个起始段;与此同时,1、2、4号APF模块对应的从控制器也检测到该有效的起始段,进行接收工作。接收的过程如下:
(S2-1)3号APF模块的从控制器读取该控制帧的控制器地址段,解析得到目标从控制器的地址为0x03,然后和自身的地址0x03比较,发现一致,故继续进行下一步操作(S2-2);1、2、4号APF模块对应的从控制器同样读取控制器地址段信息,但是由于得到的目标从控地址与自身的地址(分别为0x01,0x02,0x04)不符,故不再接收后续的帧字节;
(S2-2)3号APF模块的从控制器继续接收剩余的字段,包括功能标志段、分控信息段和错误校验段。接收完成后,通过中断引入一个地址进入帧错误校验程序,输入对象为接收到的起始段、控制器地址段、功能标志段和分控信息段,程序输出为根据上述字段生成的一组高低位校验码,将该校验码与接收到的错误校验段高低位字节进行比较,若没有出现错误传输,则从控制器校验得到的校验码和接收得到的控制帧的错误校验码是一致的,判断接收到的控制帧正确,进入下一步;若两者不一致,则说明从控制器接收到的某一个或者多个字节存在误码,判断接收到的控制帧不正确,需要主控制器重新传送;
(S2-3)3号APF模块的从控制器解析功能标志段,结果为0x03,即单个寄存器的读取指令,故先设置一个字节的存储空间用于存储待读取的变量。然后将分控信息段的第一个字节左移8位,加上该段的第二个字节,获取该待读取的变量首地址address_read=0xB001。
(S2-4)将步骤(S2-3)解析得到的变量首地址开始的1个字节的内容读取出来,并存入相应的存储空间中,记为Fault_status=0x0000,全零表示该模块没有故障。然后3号APF模块对应的从控制器需生成相应的响应帧,反馈给主控制器该变量的值以供查询,该帧的具体内容和格式为:
a.起始段装载内容为0xAA;
b.该响应帧是发往主控制器的,故控制器地址段装载内容为0x00;
c.该响应帧的功能标志段跟控制帧的功能标志段取一致,故响应帧功能标志的装载内容为0x03;
d.该响应帧的分控信息段应反馈回读取的单个寄存器的变量值,故将读取的变量值装载至读取数值段中,即分控信息段装载内容为0x00,0x00;
e.在以上响应帧内容的尾部加上一个两字节的校验码,根据此帧的内容,该错误校验程序的输入内容为0xAA,0x00,0x03,0x00,0x00,运算得到的校验码高字节为0x35,低字节为0x9A;
f.至此,响应帧内容装载完毕,帧字节依次为0xAA,0x00,0x03,0x00,0x00,0x35,0x9A。
(S3)主控制器此时在实时侦听RS485总线,检测到有效的起始段之后接收器开始工作,具体如下;
(S3-1)主控制器接收响应帧的地址段,解析得到0x00,是发往自身的响应帧,故接收剩下的所有字段,包括功能标志段、分控信息段和错误校验段。同理接收完成后,通过中断引入一个地址进入帧错误校验程序,生成一组高低位校验码,将该校验码与接收到的响应帧的错误校验段高低位字节进行比较,若没有出现错误传输,则主控制器校验得到的校验码和接收得到的从控制器发送的校验码应该是一致的,判断接收到的响应帧不正确,进入步骤(S3-2);若两者不一致,则说明主控制器接收到的某一个或者多个字节存在误码,主控制器直接判定未接收到正确的响应帧,重新发送之前的控制帧。
(S3-2)解析该响应帧的功能标志段,是否与之前发往目标从控制器的控制指令一致,若一致,则将分控信息段的内容读取出来存入相应的变量,然后解析该故障状态变量的各个位以判断3号从模块是否有故障。至此,主控制器得到读取帧的相应响应,可以重新开放下一轮读取操作;若不一致或者未在规定时间内收到来自目标从控制器的响应帧,则将之前发送过的通讯帧再次发送,直至收到正确的响应帧或者重发设定次数M次失败后报告通讯错误为止。
根据上述两种情况下主从控制器的处理逻辑和步骤,可以举一反三类推其他所有情况下的处理模式。例如所有的主控查询从控状态的控制指令(包括查询从控的电压、电流状态信息、运行指标参数等)均可按照第二种情况下的处理模式进行,所有修改从控参数的操作均可按照第一种情况下的处理模式进行,如修改从控制器的控制环PI参数、从控制器的从控程序内部过欠压保护阈值等。
本实施例中未作特殊说明,均采用Modbus协议通用的CRC16校验方法生成错误校验码,具体方法如下:
(a)设置一个16位寄存器,预装全1;
(b)装载欲校验的一个8位字节,与寄存器中的值进行异或运算,然后结果向最低有效位(LSB)方向移动1位,最高有效位(MSB)位置充零;
(c)提取并检查LSB:如果LSB为1,则寄存器中的值与一个固定的预置值进行异或运算;如果LSB为0,则不进行异或操作,直接进入下一步;
(d)重复步骤(b)、(c),直至该字节完成8次移位操作,进入下一步;
(e)装载下一个8位字节,与寄存器的当前值进行异或运算,重复步骤(b)、(c)、(d),直至通讯帧中所有欲校验的字节全部参与运算后结束,进入下一步;
(f)将寄存器中的最终值和0x00FF进行与运算,得到校验码的低字节;将寄存器中的最终值和0xFF00进行与运算,然后右移8位,高位填零,得到校验码的高字节,进而得到校验码。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。