基于Modbus协议的RS485总线通讯方法及基于该通讯方法的电力电子系统的制作方法

文档序号:7807522阅读:219来源:国知局
基于Modbus协议的RS485总线通讯方法及基于该通讯方法的电力电子系统的制作方法
【专利摘要】本发明公开了一种基于Modbus协议的RS485总线通讯方法及基于该通讯方法的电力电子系统,该电力电子系统中主控制器和从控制之间通过基于Modbus协议的RS485总线方法通讯进行通信,该RS485总线通讯方法中通过定义控制器生成的通讯帧的结构,通过通讯程序的结构化设计,定义合理的通讯帧及处理逻辑,提高通讯效率和RS485总线通讯系统的利用率,加快数据的响应速度,大大降低了传输延时,且采用该RS485总线通信系统通讯可靠性强,成本较低,易于实现,适合在大规模电力电子系统中应用。
【专利说明】基于Modbus协议的RS485总线通讯方法及基于该通讯方法 的电力电子系统

【技术领域】
[0001] 本发明属于电力电子应用【技术领域】,具体涉及一种基于Modbus协议的RS485总线 通讯方法及基于该通讯方法的电力电子系统。

【背景技术】
[0002] 电力电子技术的日益发展成熟和电力自动化设备的广泛应用有力地推进了工业 生产力发展和电气自动化水平的提高,但是由于单台电力电子装置的容量限制问题,使其 在大功率应用领域受到制约。
[0003] 利用现有的小容量电力电子装置的成熟技术,通过模块化并联组合的方式实现大 容量场合的应用成为研究的热点。同时在某些情况下,需要将不同种类的电力电子装置 (电力电子模块)组合在一起实现系统功能。实现这些应用的关键性问题之一是如何解决 好不同电力电子装置之间的通讯协作问题,由此促使了大规模电力电子系统通讯总线体系 的出现和发展。
[0004] 随着各种编码、接口技术的发展和系统规模的不断扩大,出现了各种不同数据格 式和接口的电力电子通讯系统和高速总线。
[0005] 张怀晟等人在标题为大容量变换器的光纤CAN通信总线定时方案(清华大学学 报:自然科学版.2007, 47(1) : 17-20)中提出了一种物理层运用光纤的高速CAN总线通讯方 法,实现了强电磁干扰环境下的高波特率和高可靠性。但是CAN总线的使用基于实现协议 的芯片,成本较高,特别是在PC机上实现CAN时使用的CAN插卡,比其他总线如RS485所使 用的接口转换电路成本要高很多。特别对于大规模电力电子系统,由于模块数众多,需要的 光纤数量也极为庞大,一方面造成成本上升,另一方面,由于连接关系复杂,导致通信可靠 性降低,极大的限制其在大规模电力电子系统中的应用。
[0006] 穆斌等人在标题为RS-485总线网络应用中的安全与可靠性(光学精密工 程.2003 (02) : 193-197)中通过分析和改进RS485总线的硬件电路,保证总线网络的安全 性,提高了通讯的可靠性,且成本低。但是由于RS485总线对应的应用层没有标准的协议, 而通讯协议的构建及其逻辑处理的效率很大程度上会影响RS485总线通讯的利用率和传 输延时。而模块数众多的大规模电力电子系统需要进行多机通讯,且对数据传输的实时性 要求较高,因此,RS485总线通讯在大规模电力电子系统的应用也受到了严重限制。


【发明内容】

[0007] 针对现有技术中存在的不足,本发明提供了一种基于Modbus协议的RS485总线通 讯方法及基于该通讯方法的电力电子系统。
[0008] -种基于Modbus协议的RS485总线通讯方法,实施于包括一个主控制器和若干个 从控制器的RS485总线多机通信系统,所述的RS485总线通讯方法包括:
[0009] (1)主控制器根据用户输入的读写指令或者状态查询指令生成相应的控制指令, 并将所述的控制指令封装成控制帧后发送到RS485总线上;
[0010] (2)从控制器侦听RS485总线,当侦听到控制帧到达后开始接收并处理侦听到的 控制帧形成相应的响应帧,并将形成的响应帧发送到RS485总线上;
[0011] (3)主控制器通过侦听RS485总线接收响应帧,并判断接收到的响应帧是否正确:
[0012] 若主控制器在设定的时间间隔内未接收到响应帧或接收到的响应帧不正确,则重 新发送该控制帧,直至接收到正确的响应帧或连续发送Μ次都未接收到正确的响应帧后停 止发送该控制帧,并结束侦听RS485总线,重新使能用户输入的读写指令和运行状态查询 指令;
[0013] 所述的控制帧和响应帧均包括5个字段,分别为起始段、控制器地址段、功能标志 段、分控信息段和错误校验段。
[0014] 本发明的RS485总线通讯方法中通过定义控制器生成的通讯帧的结构(主控制 器生成的控制帧和从控制生成的响应帧),使RS485总线通信系统采用基于Modbus协议的 自定义帧进行通信,通过通讯程序的结构化设计,定义合理的通讯帧及处理逻辑,不需要另 外构建通讯协议,提高通讯效率,加快数据的响应速度,提高了 RS485总线通讯系统的利用 率,还大大降低了传输延时,且采用RS485总线通信系统通讯可靠性强,成本较低,易于实 现,适合在大规模电力电子系统中应用。
[0015] 本发明的RS485总线通讯方法中主控制器和从控制器之间支持通用异步接收/发 送(UART)通信模式,控制器(包括主控制器和从控制器)的接收器与自身帧同步,外部发 送和接收器不需要使用串行同步时钟,时钟可以由内部产生。主控制器接收响应帧,在接收 到的响应帧不正确时还重新发送控制帧,有利于提高RS485通信系统中可靠性。相应的,为 保证能够重发,主控制器发送控制帧前,还对控制帧进行了备份,先将控制帧存储到一个数 据缓冲区中,再次发送时,直接从该数据缓冲区中调取相应的控制帧。当接收到正确的响应 帧后,认为该控制帧成功发送,则更新该数据缓冲区中的控制帧为下一个控制帧。且本发明 的方法中在多次发送后仍然未接收到正确的响应帧时,认为该控制帧发送失败,还产生发 送错误告警。
[0016] 所述的起始段用于表示控制帧或响应帧的开始;
[0017] 所述的控制器地址段用于表示控制帧或响应帧所指向的控制器的地址;
[0018] 所述的功能标志段用于表示控制帧或响应帧的对应的控制指令的类型;
[0019] 所述的分控信息段用于表示控制指令的内容或执行结果;
[0020] 所述的错误校验段用于检验对应的控制帧或响应帧的正确性。
[0021] 分控信息段与功能标志段对应的控制指令的类型有关,对于控制帧,分控信息段 用于表示控制指令的内容,对于响应帧,分控信息段表示执行该控制指令后的结果。
[0022] (a)对于控制帧:
[0023] 若对应的控制指令为读取指令或运行状态查询指令,则所述的分控信息段用于表 示待读取或待查询的寄存器的个数和寄存器的首地址;
[0024] 若为写入指令,则分控信息段用于表示待写入的寄存器的个数、寄存器的首地址 和待与入的内容;
[0025] (b)对于响应帧:
[0026] 若为读取指令或运行状态查询指令,则分控信息段用于表示读取的寄存器的数量 和读取到的数据;
[0027] 若为写入指令,则所述的分控信息段用表示待写入的寄存器的个数、寄存器的首 地址和待写入的内容。
[0028] 读取指令分为单个寄存器的读取指令和多个寄存器的读取指令,当为单个寄存器 的读取指令时,为减小通讯数据量,提高通讯效率和降低延时,控制帧和响应帧中分控信息 段中可以不表示待读取或待查询的寄存器的个数。写入指令也包括单个寄存器的写入指令 和多个寄存器的写入指令,当为单个寄存器的写入指令时,控制帧和响应帧中分控信息段 中可以不表示待写入的寄存器的个数。
[0029] 起始段为1?16位,控制器地址段根据需要支持的系统模块数决定,通常为1?8 位,功能标志段包括2?8位,错误校验段为2个字节,分控信息段的长度取决于控制指令 的类型。通讯帧(包括控制帧和响应帧)的长度是由位(二进制数据位)构成的,依据功 能码的不同,读写帧的长度各异。为了优化通讯程序结构,提高程序处理效率和降低通讯延 时,通讯帧的帧结构的定义按照字节进行,故通讯帧各个字段大小的定义都是以字节为单 位的,也即通讯帧接收和发送的过程中每个字段的发送都需要经过8次移位操作。
[0030] 所述步骤⑴中通过解析控制指令将控制指令封装成控制帧。
[0031] 通过解析控制指令所指向的从控制器的地址、控制指令的类型、控制指令的内容, 然后将解析结果作为控制帧的控制器地址段、功能标志段和分控信息段封装成帧,并且添 加起始段,为提高可靠性,根据起始段、控制器地址段、功能标志段和分控信息段生成错误 校验段插入到帧的末尾从而得到相应的控制帧。其中,控制指令的类型可分为写入指令 (用户输入的写入指令)和读取指令(状态查询指令或用户输入的读取指令),也可以有其 他划分标准,为便于表示,通常根据划分结果对各个类型进行编号,通过用户设定,功能标 志段实际上为控制指令的类型的编号。
[0032] Μ和时间间隔的设置直接关系到RS485总线多机通信系统的传输时延和可靠性, 通常Μ和时间间隔越大,可靠性越高,但是会增大传输时延。为综合考虑,在传输时延和可 靠性之间取得平衡,Μ和时间间隔不可过大。作为优选,所述的Μ为3,所述的时间间隔为 lms〇
[0033] 所述步骤(1)中主控制器通过sci通讯中断将控制帧发送到RS485总线上。
[0034] 为保证中断后的数据恢复,通常需要对该数据缓冲区进行扩展(通常扩展为原来 的2倍),将中断发送该控制帧时产生的中断数据也放在发送数据缓冲区,以便中断后进行 通信恢复。
[0035] 所述步骤(2)中的从控制器通过以下步骤接收并处理控制帧形成响应帧:
[0036] (2-1)接收控制帧的起始段,并判断控制帧的起始段是否有效:若有效,则继续接 收控制器地址段;否则,返回继续侦听RS485总线;
[0037] (2-2)判断控制帧的控制器地址段与自身的地址是否一致,若不一致,则停止接 收;若一致,则继续进行如下操作:
[0038] (2-21)接收功能标志段、分控信息段和错误校验段,接收完成后根据接收到的起 始段、控制器地址段、功能标志段和分控信息段采用Modbus协议通用的CRC16校验方法生 成校验码;
[0039] (2-22)比较生成的校验码与接收到的错误校验段,若二者一致,则执行该控制帧, 并根据执行结果生成相应的响应帧;否则,不操作。
[0040] 从控制器按照字段接收控制帧,且依次判断起始段和控制器地址段的有效性判断 自身是否为该控制帧所指向的目标,然后接收剩余的字段。为了避免执行错误的控制帧,提 高可靠性,从控制器利用Modbus协议通用的CRC16校验方法检验接收到的控制巾贞的正确 性,正确时(生成的校验码与接收到的错误校验段一致时)才执行接收到的控制帧对应的 控制指令,另一方面,还节省了执行错误控制帧的时间,进一步降低了传输时延。
[0041] 所述步骤(2-22)中通过以下方法生成响应帧:
[0042] 根据接收到的功能标志段确定该控制帧对应的控制指令的类型:
[0043] 若为写入指令,则将控制帧的起始段、功能标志段和分控信息段分别作为响应帧 的起始段、功能标志段和分控信息段,响应帧的控制器地址段装载主控制器的地址,根据响 应帧的起始段、控制器地址段、功能标志段和分控信息段生成错误校验段,得到响应帧;
[0044] 若为读取指令或状态查询指令,则将控制帧的起始段、功能标志段作为响应帧的 起始段、功能标志段,将读取结果作为响应帧的分控信息段,响应帧的控制器地址段装载主 控制器的地址,并根据响应帧的起始段、控制器地址段、功能标志段和分控信息段生成错误 校验段生成错误校验段,得到响应帧。
[0045] 所述步骤(3)包括如下步骤:
[0046] (3-1)主控制器侦听到响应帧到达后,接收响应帧的起始段,并判断响应帧的起始 段是否有效:若有效,则继续接收控制器地址段;否则,返回继续侦听RS485总线;
[0047] (3-2)判断响应帧的控制器地址段与自身的地址是否一致,若不一致,则停止接 收;若一致,则继续进行如下操作:
[0048] (3-21)接收功能标志段、分控信息段和错误校验段,接收完成后根据接收到的起 始段、控制器地址段、功能标志段和分控信息段采用Modbus协议通用的CRC16校验方法生 成校验码;
[0049] (3-22)比较生成的校验码与接收到的错误校验段,若二者一致,则判断接收到的 响应帧正确;否则,判断接收到的响应帧不正确。
[0050] 主控制器按照字段接收响应帧,RS485通信系统中,主控制器以及各个从控制器 都具有唯一的地址,若响应帧中的控制器地址段与RS485通信系统中主控制器的地址不一 致,则直接跳过不接收剩余的字段,节约了数据传输时间,有利于提高通讯效率,降低传输 时延。主控制器利用Modbus协议通用的CRC16校验方法判断接收到的响应帧的正确性,实 现方法简单。
[0051] 起始段的有效性可根据实际应用设定,作为优选,所述的起始段为1个特定内容 的字节。起始段的有效性根据用户需求设定。
[0052] 本发明的RS485通信方法中主控制器与从控制器之间采用SCI异步通信方式,该 通信方式中通讯帧中的每个数据位占用8个SCICLK时钟周期。相应的,控制器接收通讯帧 的各个字段时是按数据位进行接收的,具体过程如下:
[0053] 控制器检测到连续4个低电平后开始接收数据位,这4个电平称为有效起始位。 只有接收有效起始位后,控制器才开始接收该数据位。当控制器接收到数据位后,控制器对 接收到的数据位进行3次采样,确定该数据位的值。本发明中三次采样分别发生在第4、5、 6个SCICLK周期,三次采样中两次以上相同的值即为该数据位的值。
[0054] 本发明还提供了一种基于该通讯方法的电力电子系统,包括若干个电力电子模 块,用于控制各个电力电子模块的从控制器,以及一个主控制器,各个从控制器通过RS485 总线与主控制器并联连接,呈节点式分布结构;
[0055] 所述的主控制器用于根据用户输入的读写指令或者运行状态查询指令生成相应 的控制指令,并将所述的控制指令封装成控制帧发送到RS485总线,还用于发送完控制帧 后通过侦听RS485总线接收响应帧,并判断接收到的响应帧是否正确;
[0056] 所述的从控制器用于侦听RS485总线,当侦听到控制帧到达后开始接收并处理控 制帧形成响应帧,并将形成的响应帧发送到RS485总线上;
[0057] 所述控制帧和响应帧包括5个字段,分别为起始段、控制器地址段、功能标志段、 分控信息段和错误校验段。
[0058] 本发明的电力电子系统中通讯帧(包括控制帧和响应帧)采用基于Modbus协议 的自定义格式,设定通讯帧中包括若干个字段,每个字段都包含一个完整有用的信息,控制 器(包括主控制器和从控制器)可以对每个数据帧进行逐字段的处理而不用等到接收完 整的帧后再统一处理各个字段,这就使得程序可以智能地提早筛选出针对本控制器的通讯 帧,对目标对象非本控制器的通讯帧提早屏蔽,节省了本身控制器的内存和程序空间,提高 了总线利用效率,同时也不需要刻意压缩帧的长度,保证了传输内容的完整性和丰富性。
[0059] 主控制器一方面接收用户输入的读写指令,另一方面每隔一定周期自动查询从控 制器对应的电力电子模块的相关信息,如电压信息、电流信息、运行指标参数(如THD、功率 因数、负载率等)以及故障状态。电压信息、电流信息依据种类不同定义相应的查询字节大 小,电压信息和电流信息用以表征从模块是否过欠压和过流,供给主控制器进行相应控制 调节。运行指标参数用以表征从模块运行特性,表明其功能是否正常及其投入运行后对系 统的改善效果,若运行效果不佳,一般通过主控制器进行用户输入指令进行调节。故障状态 为各个从控制器对应的电力电子模块的工作状态,一般定义为1个字节,共8位,每一位初 始化为〇,变为1时可以表征该模块的一种故障,故总共可以反馈8种故障类型,同时也可依 据模块的复杂程度进行该故障查询字节的扩展,但是会增加通讯量和逻辑判断的复杂性, 可视实际情况而定。
[0060] 主控制器将用户输入的读写指令或运行状态查询指令封装成控制帧后,通过设置 485通讯芯片的相应引脚经主控制器配置成发送模式,将控制帧沿RS485总线向下转发,发 送成功后再将485通讯芯片的相应引脚配置成接收模式,此时用户输入的读写指令和状态 查询指令无效。初始情况下,各个从控制器的485通讯芯片的相应引脚配置为接收模式,实 时侦听RS485总线,接收来自主控制器的控制帧并对控制帧的控制器地址段进行解析。受 控的从控制器根据接收到的控制帧,完成相应的控制指令,并将执行结果装载至响应帧中, 然后将485通讯芯片的相应引脚配置成发送模式,将该响应帧通过RS485总线反馈给主控 制器,发送完成后将485通讯芯片的相应引脚配置成接收模式。
[0061] 考虑到通讯距离和通讯速度要求,本发明的电子电子系统中从控制器最多为32 个。
[0062] 所述的主控制器还用于进行如下操作:
[0063] 若在设定的时间间隔内未接收到响应帧或接收到的响应帧不正确,则重新发送所 述的控制帧,直至接收到正确的响应帧或连续发送Μ次都未接收到正确的响应帧后停止发 送所述的控制帧,并结束侦听RS485总线,重新使能用户输入的读写指令和运行状态查询 指令。
[0064] 重新使能用户输入的读写指令和运行状态查询指令是指使用户输入的读写指令 或运行状态查询指令能够生效产生相应的通讯中断,形成相应的控制指令并封装成控制 帧。
[0065] 控制器按字段接收和处理侦听到的通讯帧,所述的控制器为主控制器或从控制 器,若为主控制器,则对应的通讯帧为控制帧,若为从控制器,则对应的通讯帧为响应帧,具 体如下:
[0066] (2-1)控制器接收到达的通讯帧的起始段,并判断通讯帧的起始段是否有效:若 有效,则继续接收通讯帧的控制器地址段;否则,返回继续侦听RS485总线;
[0067] (2-2)判断通讯帧的控制器地址段与自身的地址是否一致,若不一致,则停止接 收;若一致,则继续进行如下操作:
[0068] (2-21)接收通讯帧的功能标志段、分控信息段和错误校验段,接收完成后根据接 收到的起始段、控制器地址段、功能标志段和分控信息段生成校验码;
[0069] (2-22)比较生成的校验码与接收到的错误校验段:
[0070] 若二者不一致,则判断接收到的通讯帧不正确;
[0071] 若二者一致,则判断接收到的通讯帧正确,且对于从控制器,当判断接收到的控制 帧正确时,继续执行该控制帧,并根据执行结果生成相应的响应帧发送到RS485总线上。
[0072] 本发明的基于Modbus协议的电力电子系统的RS485总线通讯系统和方法中从控 制器和主控制之间通过RS485总线连接,通过定义主控制器生成的控制帧和从控制生成响 应帧的结构,使RS485总线通讯系统基于Modbus协议进行通信,提高了 RS485总线通讯系 统的利用率,还大大降低了传输延时且采用RS485总线通信系统通讯可靠性强,且成本较 低,易于实现,适合在大规模电力电子模块化系统中应用。

【专利附图】

【附图说明】
[0073] 图1为本实施例的基于Modbus协议的RS485总线通讯方法的流程图;
[0074] 图2为本实施例的电力电子系统的结构图;
[0075] 图3为SCI异步通信时序示意图。

【具体实施方式】
[0076] 下面结合附图和具体实施例对本发明作进一步的说明。
[0077] -种基于Modbus协议的RS485总线通讯方法,实施于包括一个主控制器和若干个 从控制器的RS485总线多机通信系统,该RS485总线通讯方法如图1所示,包括:
[0078] (1)主控制器根据用户输入的读写指令或者状态查询指令生成相应的控制指令, 并将控制指令封装成控制帧后通过sci通讯中断将封装后的控制帧发送到RS485总线上;
[0079] (2)从控制器侦听RS485总线,当侦听到控制帧到达后开始接收并处理侦听到的 控制帧形成相应的响应帧,并将形成的响应帧发送到RS485总线上;
[0080] (3)主控制器通过侦听RS485总线接收响应帧,并判断接收到的响应帧是否正确:
[0081] 若主控制器在设定的时间间隔内未接收到响应帧或接收到的响应帧不正确,则重 新发送该控制帧,直至接收到正确的响应帧或连续发送Μ次都未接收到正确的响应帧后停 止发送该控制帧,并结束侦听RS485总线,重新使能用户输入的读写指令和运行状态查询 指令。
[0082] 本实施例中时间间隔为1ms,Μ为3。
[0083] 本实施的RS485总线通讯方法中的控制帧和响应帧均包括5个字段,分别为起始 段、控制器地址段、功能标志段、分控信息段和错误校验段。起始段用于表示控制帧或响应 帧的开始;控制器地址段用于表示控制帧或响应帧所指向的控制器的地址;功能标志段用 于表示控制帧或响应帧的对应的控制指令的类型;分控信息段取决于功能标志段对应的控 制指令的类型,对于控制帧,分控信息段用于表示控制指令的内容,对于响应帧,分控信息 段表示控制指令的执行结果;错误校验段用于检验对应的控制帧或响应帧的正确性。
[0084] 本实施例中起始段为1个字节,控制器地址段为1个字节,功能标志段为为1个字 节,错误校验段为2个字节,分控信息段的长度取决于控制指令的类型。本实施例中规定起 始段为OxAA时有效。
[0085] 对于控制帧,若对应的控制指令为读取指令或运行状态查询指令,则分控信息段 用于表示待读取或待查询的寄存器的个数(即读取数量段,1个字节)和寄存器的首地址 (即读取地址段,2个字节);若为写入指令,则分控信息段用于表示待写入的寄存器的个数 (即写入数量段,1个字节)、寄存器的首地址(即写入地址段,2个字节)和待写入的内容 (即写入数值段,长度取决于待写入的寄存器的个数)。
[0086] 对于响应帧,若为读取指令或运行状态查询指令,则分控信息段用于表示读取的 寄存器的数量(读取数量段,1个字节)和各个寄存器的对应的内容(即读取数值段,该段 长度取决于读取寄存器个数的多少);若为写入指令,则分控信息段用于表示待写入的寄 存器的个数(即写入数量段,1个字节),寄存器的首地址(即写入地址段,2个字节)和待 写入的内容(即写入数值段,长度取决于写入寄存器个数的多少)。
[0087] 读取指令分为单个寄存器的读取指令和多个寄存器的读取指令,当为单个寄存器 的读取指令时,控制帧和响应帧中分控信息段中不表示待读取或待查询的寄存器的个数。 同样写入指令也包括单个寄存器的写入指令和多个寄存器的写入指令,当为单个寄存器的 写入指令时,控制帧和响应帧中分控信息段中不表示待写入的寄存器的个数。
[0088] 基于该通讯方法的电力电子系统如图2所示,包括N个电力电子模块(本实施例 中为有源电力滤波器模块(即APF模块,分别为APF1,APF2,……APFN,APF模块通过断路 器连接到电网,用于补偿电网的非线性负载谐波,本实施例中N = 4),用于控制各个电力电 子模块的从控制器,分别为从控制器1,从控制器2,……从控制器N,以及一个主控制器,各 个从控制器通过RS485总线与主控制器并联连接,呈节点式分布结构,用户通过输入单元 向向主控制输入读写指令,实现对各个从控制器的控制。
[0089] 主控制器用于根据用户输入的读写指令或者运行状态查询指令生成的控制指令, 将控制指令封装成控制帧发送到RS485总线上,发送完成后还用于通过侦听RS485总线接 收响应帧,并判断接收到的响应帧是否正确;
[0090] 从控制器侦听RS485总线,侦听到控制帧到达后开始接收并处理控制帧形成响应 帧,并将形成的响应帧发送到RS485总线上。
[0091] 本实施例中从控制器的控制芯片采用TI公司的TMS320F2812,该芯片是一款用于 控制的高性能、多功能、高性价比的32位定点DSP芯片,最高可在150MHz主频下工作,它的 串行通信接口(SCI)用于实现本发明提出的总线通讯方法。为了提高控制性能,主控制器 一般采用性能更强的处理芯片,以便于进行更复杂的运算,但是出于模块化生产和归一化 管理的考虑,本实施例中,采用的主控制器和从控制器在结构上完全相同,均采用TI公司 的TMS320F2812实现,只是主控制器运行的程序区别于从控制器。
[0092] 本实施例中控制器(包括接收器和发送器)发送或者接收485通讯帧之前要先进 行相应的初始化和通过GPI0 口进行引脚的配置。控制器的接收器与自身帧同步,所以外部 发送和接收器不需要使用串行同步时钟,时钟可以由内部产生。控制器的接收器接收完通 讯帧之后进行解析处理均通过PIE中断的方式引入一个程序处理入口,同样发送器发送数 据也是通过中断的方式进行的。
[0093] 主控制器和从控制器之间通过SCI异步通信模式进行通信。图3为SCI异步通信 的时序示意图,每个数据位占用8个SCICLK时钟周期,图中SCIRXD是指SCI异步串行端口 接收的数据,LSB(least significant bit)为接收的数据的最低有效位。本实施例中控制器 接收通讯帧的各个字段时是按数据位进行接收的,具体过程如下:
[0094] 控制器检测到连续4个低电平后开始接收数据位,这个4个电平称为有效起始位。 只有接收有效起始位后,控制器才开始接收数据位。当控制器接收到数据位后,控制器对接 收到的数据位的进行3次采样,确定该数据位的值。本实施例中三次采样分别发生在第4、 5、6个SCICLK周期,三次采样中两次以上相同的值即为该数据位的值。以接收起始段为例: [0095] 本实施例中起始段长度为1个字节,即包括8个数据位,因此需要分8次进行接 收,每检测到一个有效起始位后就接收一个数据位。每次接收一个数据位完成后,针对每个 数据位进行3次采样,确定该数据位的具体值。
[0096] 本实施例的电力电子系统针对不同的控制指令的处理过程不同。
[0097](一)当控制帧对应的控制指令为用户输入的写入指令时:
[0098] 以用户输入针对3号APF模块的选择性谐波补偿次数设定指令为例,假定原先3 号APF模块的补偿次数设定为50以内谐波全补,现通过用户指令输入界面输入写入指令将 其改为只补偿5、7、11、13次谐波,本实施例的电力电子系统的处理流程如下:
[0099] (S1)主控制器接收用户输入指令,并将该指令封装成相应控制帧,并将自身的 485通讯芯片引脚配置成发送模式,然后将控制帧内容逐字节依次发送,发送完成后,引脚 重新配置成接收模式,主控制器开始侦听总线,准备接收来自3号APF模块对应的从控制器 的响应帧。
[0100] 该控制帧的具体格式和内容为:
[0101] a.起始段是一个特定内容的字节,装载内容为OxAA;
[0102] b.该用户输入指令是针对3号APF模块的操作,故控制器地址段装载内容为 0x03 ;
[0103] c.该用户输入指令是针对谐波补偿次数的修改操作,控制指令是单个寄存器的写 入指令,设定控制指令对应的功能码标志段,本实施例中为0x06 ;
[0104] d.该用户输入指令是修改补偿谐波次数,补偿谐波次数的设定是放在在程序内部 一个名为Select的内存变量里的,所以要针对此变量进行操作,由于是单个寄存器的写入 操作,分控信息段可以不表示寄存器的个数,即不存在写入数量段。同时需在分控信息段先 给出该变量对应的内存地址,以供从控制器进行查找提取,假定该地址值为OxAOOl,则将该 地址装载至分控信息的写入地址段。而谐波次数内容是通过解析Select的各个位(各个 数据位)来确定的,该位为1,表示该位对应的谐波次数需补偿,为〇则表示不补偿。如原来 的设定是50次以内全补,对应的Select变量值为OxFFFF,即每一位都是1,现改为只补偿 5、7、11、13次,故对应的Select值应变为OxOOOF,则将该值装载至分控信息段的写入数值 段,故完整的分控信息段的内容为OxAO, 0x01,0x00, OxOF。
[0105] e.为了保证控制帧内容的可靠性,降低误码率,所以在控制帧内容的尾部加上一 个两字节的校验,该校验码是通过Modbus协议通用的CRC16校验算法得来的,根据此帧的 内容,该错误校验程序的输入内容为OxAA,0x03,0x06,0xA0,0x01,0x00,0x0F,校验程序运 算得到的校验码高字节为0x19,低字节为0x8D,并装载至错误校验段。
[0106] f.至此,该控制帧内容装载完毕,完成的帧字节依次为0xAA,0x03,0x06,0xA0, 0x01,0x00,0x0F,0x19,0x8D〇
[0107] (S2) 3号APF模块对应的从控制器正常情况下实时侦听总线,从控制器每侦听到 一个有效起始位时,通过8次单个数据位的接收得到一个起始段;与此同时,1、2、4号APF 模块对应的从控制器也通过该方法检测到起始段,进行接收工作,具体如下:
[0108] (S2-1) 3号APF模块对应的从控制器读取该控制帧的控制器地址段,解析得到目 标从控地址为0x03,然后和自身的地址0x03比较,发现一致,故继续进行下一步操作;1、2、 4号APF模块对应的从控制器同样读取控制器地址段信息,但是由于得到的目标从控地址 与自身的地址(分别为0x01,〇χ〇2,0x04)不符,故不再接收后续的帧字节;
[0109] (S2-2) 3号APF模块对应的从控制器继续接收剩余的字段,包括功能标志段、分控 信息段和错误校验段。接收完成后,通过中断引入一个地址进入帧错误校验程序,输入对象 为之前接收到的起始段、控制器地址段、功能标志段和分控信息段,程序输出为根据上述对 象生成的一组高低位校验码,将该校验码与接收到的错误校验段高低位字节进行比较,若 没有出现错误传输,则从控制器校验得到的校验码和接收得到的主控制器发送的校验码应 该是一致的,进入步骤(S2-3);若两者不一致,则说明该从控制器判断接收到的控制帧错 误,需要主控制器重新传送;
[0110] (S2-3) 3号APF模块对应的从控制器执行该控制帧:
[0111] (S2-31)解析功能标志段,结果为0x06,即单个寄存器的写操作,故先提取写操作 的对象内存地址,即先获取分控信息段的前两个字节,将分控信息段的首字节左移8位,力口 上该段的第二个字节,得到该写入巾贞的目标内存地址address_write = OxAOOl。然后将分 控信息段的第三个字节左移8位,加上该段的第四个字节,获取该写入帧的待写入的变量 值 y = OxOOOF。
[0112] (S2-32)将步骤(S2-31)解析得到的待写入的变量值写入相应的变量地址(即目 标内存地址),完成控制操作。下一个时钟周期3号APF模块对应的从控制器解析该模块补 偿次数设定时,得到的补偿次数即为5、7、11、13次谐波了。同时3号从控制器(3号APF模 块对应的从控制器)还需生成相应的响应帧,告知主控制器已完成控制操作,该帧的具体 内容和格式为:
[0113] a.起始段装载内各为OxAA ;
[0114] b.该响应帧是发往主控制器的,故控制器地址段装载内容为0x00 ;
[0115] c.该响应帧的功能标志段、分控信息段跟接收帧的功能标志段、分控信息段取一 致,故响应帧功能标志段的装载内容为0x06,分控信息段的写入地址段装载内容为OxAO, 0x01,写入数值段装载内容为〇x〇〇,〇x〇F,表示该响应帧是针对上次写控制功能的操作响 应;
[0116] d.同理,在以上响应帧内容的尾部加上一个两字节的校验码,根据此帧的内容,该 错误校验程序的输入内容为OxAA,0x00,0x06, OxAO, 0x01,0x00, OxOF,运算得到的校验码高 字节为0xD7,低字节为0x6D,并装载至错误校验段;
[0117] e.至此,响应帧内容装载完毕,帧字节依次为OxAA,0x03,0x06,0xA0,0x01,0x00, 0x0F,0xD7,0x6D〇
[0118] (S3)主控制器实时侦听RS485总线,检测到有效的起始段之后继续进行如下操 作:
[0119] (S3-1)主控制器接收响应帧的地址段,解析得到0x00,是发往自身的响应帧,故 接收剩下的所有字段,包括功能标志段、分控信息段和错误校验段。
[0120] (S3-2)接收完成后,通过中断引入一个地址进入帧错误校验程序,生成一组高低 位校验码,将该校验码与接收到的响应帧的错误校验段高低位字节进行比较,若没有出现 错误传输,则主控制器校验得到的校验码和接收得到的从控制器发送的校验码应该是一致 的,进入下一步;若两者不一致,则说明主控制器接收到的某一个或者多个字节存在误码, 主控制器直接判定未接收到正确的响应帧,重新发送之前的控制帧;
[0121] (S3-3)解析该响应帧的功能标志段和分控信息段,是否为之前发往目标从控制器 的控制内容,若一致,则判断接收到的响应帧正确,说明控制操作成功,且主控制器得到相 应响应,可以重新开放用户指令输入和状态查询指令;若不一致或者在设定的时间间隔内 未收到来自目标从控制器的响应帧,则将之前发送过的通讯帧再次发送,直至收到正确的 响应帧或者重发设定次数Μ次失败后报告通讯错误为止。
[0122] (二)当控制帧对应的控制指令为读取指令时:
[0123] 以主控制器查询3号从控制器故障状态信息为例,本实施例的电力电子系统的处 理流程如下:
[0124] (S1)主控制器每隔一定周期(本实施例中为2s)生成一个查询指令查询3号APF 模块的故障状态,并将其封装成控制帧后,主控制器的485通讯芯片引脚配置成发送模式, 然后将该控制帧逐字节依次发送,发送完成后,引脚重新配置成接收模式,主控制器开始侦 听总线,准备接收来自3号从控制器(3号APF模块对应的从控制器)的响应帧。
[0125] 该控制帧的具体格式和内容如下:
[0126] a.起始段装载内各为OxAA ;
[0127] b.该查询指令是针对3号APF模块的操作,故控制器地址段装载内容为0x03 ;
[0128] c.该查询是针对故障状态变量的读取操作,控制指令类型是单个寄存器的读取指 令,将该控制指令的类型装载至功能标志段中(本实施例为0x03);
[0129] d.分控信息段的主要内容是读取目标变量个数和读取变量首地址,由于是单个寄 存器的读取操作,所以分控信息段不表示寄存器的个数,即分控信息段中不存在读取数量 段。故障状态变量在程序中的定义是一个字节,假设故障状态变量的内存地址(寄存器的 首地址)为OxBOOl,则将该内存地址装载至读取地址段,得到的分控信息段的状态内容为 OxBO,0x01 ;
[0130] e.为了提高通讯的可靠性,在帧结尾加上一组校验码,根据此帧的内容,该错误校 验程序的输入内容为OxAA,0x03,0x03, OxBO, 0x01,校验程序运算得到的校验码高字节为 0xA0,低字节为0x6A,并将运算结果装载至错误校验段中;
[0131] f.至此,该控制帧内容装载完毕,完成的帧字节依次为0xAA,0x03,0x03,0xB0, 0x01,0xA0,0x6A。
[0132] (S2) 3号APF模块的从控制器正常情况下实时侦听总线,从控制器每侦听到一个 有效的起始位时接收一个数据位,通过8次单个数据位的接收得到一个起始段;与此同时, 1、2、4号APF模块对应的从控制器也检测到该有效的起始段,进行接收工作。接收的过程如 下:
[0133] (S2_l)3号APF模块的从控制器读取该控制帧的控制器地址段,解析得到目标从 控制器的地址为0x03,然后和自身的地址0x03比较,发现一致,故继续进行下一步操作 (S2-2) ;1、2、4号APF模块对应的从控制器同样读取控制器地址段信息,但是由于得到的目 标从控地址与自身的地址(分别为〇x〇l,〇x〇2,〇 x〇4)不符,故不再接收后续的帧字节;
[0134] (S2-2) 3号APF模块的从控制器继续接收剩余的字段,包括功能标志段、分控信息 段和错误校验段。接收完成后,通过中断引入一个地址进入帧错误校验程序,输入对象为接 收到的起始段、控制器地址段、功能标志段和分控信息段,程序输出为根据上述字段生成的 一组高低位校验码,将该校验码与接收到的错误校验段高低位字节进行比较,若没有出现 错误传输,则从控制器校验得到的校验码和接收得到的控制帧的错误校验码是一致的,判 断接收到的控制帧正确,进入下一步;若两者不一致,则说明从控制器接收到的某一个或者 多个字节存在误码,判断接收到的控制帧不正确,需要主控制器重新传送;
[0135] (S2-3) 3号APF模块的从控制器解析功能标志段,结果为0x03,即单个寄存器的 读取指令,故先设置一个字节的存储空间用于存储待读取的变量。然后将分控信息段的第 一个字节左移8位,加上该段的第二个字节,获取该待读取的变量首地址address_read = OxBOOl。
[0136] (S2-4)将步骤(S2-3)解析得到的变量首地址开始的1个字节的内容读取出来, 并存入相应的存储空间中,记为Fault_status = 0x0000,全零表示该模块没有故障。然后 3号APF模块对应的从控制器需生成相应的响应帧,反馈给主控制器该变量的值以供查询, 该帧的具体内容和格式为:
[0137] a.起始段装载内各为OxAA ;
[0138] b.该响应帧是发往主控制器的,故控制器地址段装载内容为0x00 ;
[0139] c.该响应帧的功能标志段跟控制帧的功能标志段取一致,故响应帧功能标志的装 载内容为0x03 ;
[0140] d.该响应帧的分控信息段应反馈回读取的单个寄存器的变量值,故将读取的变量 值装载至读取数值段中,即分控信息段装载内容为〇 X〇〇,〇X〇〇 ;
[0141] e.在以上响应帧内容的尾部加上一个两字节的校验码,根据此帧的内容,该错误 校验程序的输入内容为OxAA,0x00,0x03,0x00,0x00,运算得到的校验码高字节为0x35,低 字节为0x9A ;
[0142] f.至此,响应帧内容装载完毕,帧字节依次为OxAA,0x00,0x03,0x00,0x00,0x35, 0x9A〇
[0143] (S3)主控制器此时在实时侦听RS485总线,检测到有效的起始段之后接收器开始 工作,具体如下;
[0144] (S3-1)主控制器接收响应帧的地址段,解析得到0x00,是发往自身的响应帧,故 接收剩下的所有字段,包括功能标志段、分控信息段和错误校验段。同理接收完成后,通过 中断引入一个地址进入帧错误校验程序,生成一组高低位校验码,将该校验码与接收到的 响应帧的错误校验段高低位字节进行比较,若没有出现错误传输,则主控制器校验得到的 校验码和接收得到的从控制器发送的校验码应该是一致的,判断接收到的响应帧不正确, 进入步骤(S3-2);若两者不一致,则说明主控制器接收到的某一个或者多个字节存在误 码,主控制器直接判定未接收到正确的响应帧,重新发送之前的控制帧。
[0145] (S3-2)解析该响应帧的功能标志段,是否与之前发往目标从控制器的控制指令一 致,若一致,则将分控信息段的内容读取出来存入相应的变量,然后解析该故障状态变量的 各个位以判断3号从模块是否有故障。至此,主控制器得到读取帧的相应响应,可以重新开 放下一轮读取操作;若不一致或者未在规定时间内收到来自目标从控制器的响应帧,则将 之前发送过的通讯帧再次发送,直至收到正确的响应帧或者重发设定次数Μ次失败后报告 通讯错误为止。
[0146] 根据上述两种情况下主从控制器的处理逻辑和步骤,可以举一反三类推其他所有 情况下的处理模式。例如所有的主控查询从控状态的控制指令(包括查询从控的电压、电 流状态信息、运行指标参数等)均可按照第二种情况下的处理模式进行,所有修改从控参 数的操作均可按照第一种情况下的处理模式进行,如修改从控制器的控制环ΡΙ参数、从控 制器的从控程序内部过欠压保护阈值等。
[0147] 本实施例中未作特殊说明,均采用Modbus协议通用的CRC16校验方法生成错误校 验码,具体方法如下:
[0148] (a)设置一个16位寄存器,预装全1 ;
[0149] (b)装载欲校验的一个8位字节,与寄存器中的值进行异或运算,然后结果向最低 有效位(LSB)方向移动1位,最高有效位(MSB)位置充零;
[0150] (c)提取并检查LSB:如果LSB为1,则寄存器中的值与一个固定的预置值进行异 或运算;如果LSB为0,则不进行异或操作,直接进入下一步;
[0151] (d)重复步骤(b)、(c),直至该字节完成8次移位操作,进入下一步;
[0152] (e)装载下一个8位字节,与寄存器的当前值进行异或运算,重复步骤(b)、(c)、 (d),直至通讯帧中所有欲校验的字节全部参与运算后结束,进入下一步;
[0153] (f)将寄存器中的最终值和OxOOFF进行与运算,得到校验码的低字节;将寄存器 中的最终值和OxFFOO进行与运算,然后右移8位,高位填零,得到校验码的高字节,进而得 到校验码。
[0154] 以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何 熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应 涵盖在本发明的保护范围之内。
【权利要求】
1. 一种基于Modbus协议的RS485总线通讯方法,实施于包括一个主控制器和若干个从 控制器的RS485总线多机通信系统,其特征在于,所述的RS485总线通讯方法包括: (1) 主控制器根据用户输入的读写指令或者状态查询指令生成相应的控制指令,并将 所述的控制指令封装成控制帧后发送到RS485总线上; (2) 从控制器侦听RS485总线,当侦听到控制帧到达后开始接收并处理侦听到的控制 帧形成相应的响应帧,并将形成的响应帧发送到RS485总线上; (3) 主控制器通过侦听RS485总线接收响应帧,并判断接收到的响应帧是否正确: 若主控制器在设定的时间间隔内未接收到响应帧或接收到的响应帧不正确,则重新发 送该控制帧,直至接收到正确的响应帧或连续发送Μ次都未接收到正确的响应帧后停止发 送该控制帧,并结束侦听RS485总线,重新使能用户输入的读写指令和运行状态查询指令; 所述的控制帧和响应帧均包括5个字段,分别为起始段、控制器地址段、功能标志段、 分控信息段和错误校验段。
2. 如权利要求1所述的基于Modbus协议的RS485总线通讯方法,其特征在于,所述的 起始段用于表示控制巾贞或响应巾贞的开始; 所述的控制器地址段用于表示控制帧或响应帧所指向的控制器的地址; 所述的功能标志段用于表示控制帧或响应帧的对应的控制指令的类型; 所述的分控信息段用于表示控制指令的内容或执行结果; 所述的错误校验段用于检验对应的控制帧或响应帧的正确性。
3. 如权利要求2所述的基于Modbus协议的RS485总线通讯方法,其特征在于,所述步 骤(1)中通过解析控制指令将控制指令封装成控制帧。
4. 如权利要求2所述的基于Modbus协议的RS485总线通讯方法,其特征在于,所述步 骤(1)中主控制器通过sci通讯中断将控制帧发送到RS485总线上。
5. 如权利要求2所述的基于Modbus协议的RS485总线通讯方法,其特征在于,所述步 骤(2)中的从控制器通过以下步骤接收并处理控制帧形成响应帧: (2-1)接收控制帧的起始段,并判断控制帧的起始段是否有效:若有效,则继续接收控 制器地址段;否则,返回继续侦听RS485总线; (2-2)判断控制帧的控制器地址段与自身的地址是否一致,若不一致,则停止接收;若 一致,则继续进行如下操作: (2-21)接收功能标志段、分控信息段和错误校验段,接收完成后根据接收到的起始段、 控制器地址段、功能标志段和分控信息段采用Modbus协议通用的CRC16校验方法生成校验 码; (2-22)比较生成的校验码与接收到的错误校验段,若二者一致,则执行该控制帧,并根 据执行结果生成相应的响应帧;否则,不操作。
6. 如权利要求5所述的基于Modbus协议的RS485总线通讯方法,其特征在于,所述步 骤(2-22)中通过以下方法生成响应帧: 根据接收到的功能标志段确定该控制帧对应的控制指令的类型: 若为写入指令,则将控制帧的起始段、功能标志段和分控信息段分别作为响应帧的起 始段、功能标志段和分控信息段,响应帧的控制器地址段装载主控制器的地址,根据响应帧 的起始段、控制器地址段、功能标志段和分控信息段生成错误校验段,得到响应帧; 若为读取指令或状态查询指令,则将控制巾贞的起始段、功能标志段作为响应巾贞的起始 段、功能标志段,将读取结果作为响应帧的分控信息段,响应帧的控制器地址段装载主控制 器的地址,并根据响应帧的起始段、控制器地址段、功能标志段和分控信息段生成错误校验 段生成错误校验段,得到响应帧。
7. 如权利要求6所述的基于Modbus协议的RS485总线通讯方法,其特征在于,所述步 骤(3)包括如下步骤: (3-1)主控制器侦听到响应帧到达后,接收响应帧的起始段,并判断响应帧的起始段是 否有效:若有效,则继续接收控制器地址段;否则,返回继续侦听RS485总线; (3-2)判断响应帧的控制器地址段与自身的地址是否一致,若不一致,则停止接收;若 一致,则继续进行如下操作: (3-21)接收功能标志段、分控信息段和错误校验段,接收完成后根据接收到的起始段、 控制器地址段、功能标志段和分控信息段采用Modbus协议通用的CRC16校验方法生成校验 码; (3-22)比较生成的校验码与接收到的错误校验段,若二者一致,则判断接收到的响应 帧正确;否则,判断接收到的响应帧不正确。
8. -种基于权利要求1所述的通讯方法的电力电子系统,其特征在于,包括若干个电 力电子模块,用于控制各个电力电子模块的从控制器,以及一个主控制器,各个从控制器通 过RS485总线与主控制器并联连接,呈节点式分布结构; 所述的主控制器用于根据用户输入的读写指令或者运行状态查询指令生成相应的控 制指令,并将所述的控制指令封装成控制帧发送到RS485总线,还用于发送完控制帧后通 过侦听RS485总线接收响应帧,并判断接收到的响应帧是否正确; 所述的从控制器用于侦听RS485总线,当侦听到控制帧到达后开始接收并处理控制帧 形成响应帧,并将形成的响应帧发送到RS485总线上; 所述控制帧和响应帧包括5个字段,分别为起始段、控制器地址段、功能标志段、分控 信息段和错误校验段。
9. 如权利要求8所述的基于Modbus协议和RS485总线的电力电子系统,其特征在于, 所述的主控制器还用于进行如下操作: 若在设定的时间间隔内未接收到响应帧或接收到的响应帧不正确,则重新发送所述的 控制帧,直至接收到正确的响应帧或连续发送Μ次都未接收到正确的响应帧后停止发送所 述的控制帧,并结束侦听RS485总线,重新使能用户输入的读写指令和运行状态查询指令。
10. 如权利要求8所述的基于Modbus协议和RS485总线的电力电子系统,其特征在于, 控制器按字段接收和处理侦听到的通讯帧,所述的控制器为主控制器或从控制器,若为主 控制器,则对应的通讯帧为控制帧,若为从控制器,则对应的通讯帧为响应帧,具体如下: (2-1)控制器接收到达的通讯帧的起始段,并判断通讯帧的起始段是否有效:若有效, 则继续接收通讯帧的控制器地址段;否则,返回继续侦听RS485总线; (2-2)判断通讯帧的控制器地址段与自身的地址是否一致,若不一致,则停止接收;若 一致,则继续进行如下操作: (2-21)接收通讯帧的功能标志段、分控信息段和错误校验段,接收完成后根据接收到 的起始段、控制器地址段、功能标志段和分控信息段生成校验码; (2-22)比较生成的校验码与接收到的错误校验段: 若二者不一致,则判断接收到的通讯帧不正确; 若二者一致,则判断接收到的通讯帧正确,且对于从控制器,当判断接收到的控制帧正 确时,继续执行该控制帧,并根据执行结果生成相应的响应帧发送到RS485总线上。
【文档编号】H04L12/40GK104065545SQ201410301602
【公开日】2014年9月24日 申请日期:2014年6月27日 优先权日:2014年6月27日
【发明者】陈国柱, 徐群伟, 王异凡 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1