电能表多通信协议的自适应方法

文档序号:6619985阅读:185来源:国知局
电能表多通信协议的自适应方法
【专利摘要】本发明公开了一种电能表多通信协议的自适应方法,首先按照先进先出循环的方式接收数据,放至缓冲区;再对接收数据进行通信协议类型判断;根据判定的协议类型进行与之对应的功能解析;最后发送返回数据。本发明能在不另外烧录程序或不配备相关硬件等方式干预的情况下,进行各种通信协议的自适应通讯;所提供几种协议的辨别方法快速高效;同一个物理通道只有一个缓冲区,各通信协议的发送和接收都共用此缓冲区,节省了RAM资源;本发明的通讯中断仅用于数据的接收和发送,各通信协议类型的甄别、其具体功能的解析和处理都在主循环中完成,中断占用时间少。
【专利说明】电能表多通信协议的自适应方法

【技术领域】
[0001] 本发明涉及一种电能表多通信协议的自适应方法。

【背景技术】
[0002] 随着电能表行业的发展,对通信协议的需求也越来越多样性,目前主要有DL/ T645-2007、DL/T645-1997、Modbus等多种协议,都为半双工的方式。由于历史原因,有些地 方需要DL/T645-1997协议,另外一些地方需要DL/T645-2007协议,还有些地方需要Modbus 协议或者多种协议都需要,如何应对这些多样化需求呢?当前电能表厂家主要采用以下方 式:1、一种通信协议定制一款软件,根据客户需求出厂前烧录特定的软件。此方式需较多的 软件版本,需求不同时需更换软件,且出厂后不能更改,维护成本高。2、一种软件里封装几 种通信协议,通过硬件来选择某种协议,软件对通信协议不能自适应。这种在厂外状态下通 过外露外露的硬件进行协议选择的做法不符合电能表的安全要求,成本也增加了;并且各 协议是平行运行,占用资源大,不利于资源有限的单片机系统。此外,目前的电能表还存在 一个缺陷:通信处理都是放在中断中进行的,占用时间长,不利于其它紧急事件的处理。


【发明内容】

[0003] 本发明的目的是提供一种自动识别常用半双工的电能表通信协议,能在资源较少 的单片机系统上运行,且占用中断时间较少的的电能表多通信协议的自适应方法。
[0004] 本发明提供的这种电能表多通信协议的自适应方法,该方法包括如下步骤: 步骤1,按照先进先出循环的方式接收数据,放至缓冲区; 步骤2,对接收数据进行通信协议类型判断; 步骤3,根据判定的协议类型进行与之对应的功能解析,并备好返回数据; 步骤4,发送返回数据。
[0005] 所述通信协议类型包括Modbus-RTU协议、DL/T645-2007协议、DL/T645-1997协议 和校表协议的一种或一种以上。
[0006] 所述步骤2对每个所述的协议类型都有一个指向缓冲区的数据指针,所述指针采 用先进先出循环的方式不停的向后查找符合要求的协议帧,按协议类型的重要程度顺序的 进行Modbus-RTU协议、DL/T645-2007协议、DL/T645-1997协议、校表协议等通信协议类型 的判断。
[0007] 所述Modbus-RTU协议的协议类型判断按照表地址正确、未接收超时、读写功 能码正确、帧长度正确、校验正确的顺序,依次进行辨认;有任一条件不满足,则不为 Modbus-RTU协议类型。
[0008] 所述DL/T645-2007协议和所述DL/T645-1997协议的协议类型判断按照帧头为 68H、未接收超时、表地址正确、第八个字节为68H、帧长度正确、帧尾为16H、校验和正确、符 合功能码长度要求的顺序,依次进行辨认;有任一条件不满足,则不为DL/T645-2007协议 类型或DL/T645-1997协议类型。
[0009] 所述功能码长度要求在为DL/T645-2007协议类型时设置须为4字节;其在DL/ T645-1997协议类型时设置须为2字节。所述接收数据和所述发送返回数据均采用中断方 式完成;二者共用一个所述缓冲区;接收数据采用先进先出循环的方式进行存储。所述通 信协议类型判断和所述功能解析均在主循环中完成。所述通信协议在同一个物理通道下共 用一个所述缓冲区。
[0010] 与现有技术相比,本发明具有如下优点: 1、 能在不另外烧录程序或不配备相关硬件等方式干预的情况下,进行各种通信协议的 自适应通讯; 2、 提供的Modbus-RTU协议、DL/T645-2007协议、DL/T645-1997协议等协议的辨别方法 快速高效,成功率高; 3、 同一个物理通道只有一个缓冲区,各通信协议的发送和接收都共用此缓冲区,节省 了 RAM资源; 4、 本发明的通讯中断仅用于数据的接收和发送,各通信协议类型的甄别、其具体功能 的解析和处理都在主循环中完成,中断占用时间少。

【专利附图】

【附图说明】
[0011] 图1是本发明的实施方式模块示意图。
[0012] 图2是本发明的主流程图。
[0013] 图3是本发明的中断流程图。
[0014] 图4是本发明的Modbus-RTU帧判断流程框图。
[0015] 图5是本发明的Modbus-RTU帧判断数据流图。
[0016] 图6是本发明的DL/T645帧判断流程框图。
[0017] 图7是本发明的DL/T645帧判断数据流图。

【具体实施方式】
[0018] 如图1所示,本发明包括物理层、数据链路层、协议帧解析/转发层、协议应用层和 主数据库。
[0019] 物理层是各个通讯物理通道和底层接口的集合和抽象,数据链路层接收到物理层 的数据后送给协议帧解析/转发层进行通信协议类型辨别,然后协议应用层按协议类型进 行具体的功能解析并发送返回数据;协议应用层与主数据库进行数据交互。
[0020] 物理层包括底层接口和通讯物理层。底层接口包括EEPR0M、FLASH以及其他接口。 通讯物理层包括485通讯模块、电力载波通讯模块、小无线通讯模块等。
[0021] 数据链路层包括各协议数据发送处理模块、各协议数据接收处理模块等相关处理 模块。数据链路层工作于中断模式,主要用于对物理层的数据进行接收和发送,接收数据采 用先进先出循环的方式,同一个物理通道只有一个缓冲区,各通信协议的发送和接收都共 用此缓冲区。
[0022] 协议帧解析/转发层包括Modbus-RTU协议帧解析模块、DL/T645-2007协议帧解析 模块、DL/T645-1997协议帧解析模块、校表协议帧解析模块等。协议帧解析/转发层主用 于对数据链路层的数据进行初步解析、辨别协议类型,不进行具体的功能解析。本层工作于 main主循环中,每个协议类型都有一个指向接收缓冲的数据指针,指针也采用先进先出循 环的方式不停的向后查找符合的协议帧,按协议的重要程度顺序的进行Modbus-RTU协议、 DL/T645-2007协议、DL/T645-1997协议、校表协议等协议的解析。
[0023] 协议应用层包括Modbus-RTU协议、DL/T645-2007协议、DL/T645-1997协议、校表 协议等。
[0024] 485、电力载波、小无线等通讯物理层的数据经数据链路层接收后,传给协议帧解 析/转发层用于Modbus-RTU协议、DL/T645-2007协议、DL/T645-1997协议、校表协议等通 信协议类别的甄别,然后协议应用层按协议类型进行具体的功能解析,并与电能表的主数 据库进行互动以获取数据源,与底层接口进行EEPROM、FLASH等物理操作,协议应用层完成 具体功能解析后再返回数据链路层及通讯物理层进行数据回复。
[0025] 如图2所示,本发明按先进先出循环的方式接收数据,然后对接收到的数据进行 通信协议类型辨别,再按协议类型进行具体的功能解析,最后发送返回数据。具体步骤如 下: 步骤1,main主循环开始。
[0026] 步骤2,判断数据是否为接收状态,并且判断公共缓冲区(BUFF)中是否有数据;若 该数据是接收状态且缓冲区中有数据,则进入下一步;否则转至步骤1。
[0027] 步骤3,判断是否为Modbus-RTU帧;若是,则置协议号标志位,判得当前协议类型 为Modbus-RTU协议;置为发送状态,将无效缓冲清空,转至下一步。
[0028] 否则判断是否为DL/T645-2007帧;若是,则置协议号标志位,判得当前协议类型 为DL/T645-2007协议;置为发送状态,将无效缓冲清空,转至下一步。
[0029] 否则判断是否为DL/T645-1997帧;若是,则置协议号标志位,判得当前协议类型 为DL/T645-1997协议;置为发送状态,将无效缓冲清空,转至下一步。
[0030] 否则判断是否为校表帧;若是,则置协议号标志位,判得当前协议类型为校表协 议;置为发送状态,将无效缓冲清空,转至下一步;否则转至步骤1。
[0031] 步骤4,根据协议号进行具体功能解析,并准备好发送数据到上述缓冲区中。
[0032] 步骤5,发送延时倒计时开始。延时时间可设置。
[0033] 步骤6,延时时间到,启动发送。
[0034] 步骤7,按照协议号对应的协议流程发送数据,进入发送循环中断 协议帧解析/转发层完成步骤1和步骤2的操作,协议应用层执行步骤3至步骤7的 操作。
[0035] 本发明的协议帧解析/转发层主要用于对数据链路层的数据进行初步解析、辨别 协议类型,不进行具体的功能解析。本层工作于main主循环中,每个协议类型都有一个指 向接收缓冲的数据指针,指针采用先进先出循环的方式不停的向后查找符合的协议帧,按 协议类型的重要程度顺序的进行Modbus-RTU协议、DL/T645-2007协议、DL/T645-1997协 议、校表协议等协议的解析,解析到正确的协议帧后关闭接收并置协议号。
[0036] 本发明的协议应用层也工作于main主循环中,协议帧解析/转发层完成协议类型 甄别后,协议应用层按协议号进行具体的功能解析,并与电能表的主数据库进行互动以获 取数据源,然后准备好发送数据,接着等待接收/发送间延时,时间到后进行数据发送,所 有数据发送完成后复位各标志,重新进入接收状态。
[0037] 如图3所示,本发明的数据链路层工作于中断模式,主要用于对物理层的数据进 行接收和发送,接收采用先进先出循环的方式,同一个物理通道只有一个缓冲区,各通信协 议的发送和接收都共用此缓冲区。
[0038] 具体步骤如下: 步骤1,各通信通道接收、发送中断申请。
[0039] 步骤2,判断是接收状态还是发送状态。
[0040] 步骤3,若是接收状态,则接收指针m自增1,指向数据待存的缓冲区。若该指针m 到了最大值LM,则接收指针m从0开始重新计数。接收数据放入到公共缓冲区的指针所指 位置BUFF[m]中。退出中断模式。
[0041] 若是发送状态,则发送公共缓冲区BUFF中的数据,发送个数减一。当发送个数为 零时,置位发送成功标志。退出中断模式。
[0042] 如图4所示,Modbus-RTU协议类型判断按照以下顺序进行检测判断。
[0043] (1) Modbus-RTU 巾贞解析开始。
[0044] (2)判断表地址是否正确;若是,则转至下一步;否则转至步骤1。
[0045] (3)判断是否接收超时;若是,则转至步骤1 ;否则转至下一步。
[0046] (4)判断读写功能码是否正确;若是,则转至下一步;否则转至步骤1。
[0047] (5)判断帧长度是否正确;若是,则转至下一步;否则转至步骤1。
[0048] (6)判断校验和是否正确;若是,则转至下一步;否则转至步骤1。
[0049] (7)置协议号标志,置巾贞接收成功标志。
[0050] (8 )结束,返回主流程。
[0051] 本流程中不判断寄存器地址,不进行具体的功能解析和操作。
[0052] 如图5所示,本发明的Modbus-RTU帧判断工作流程的具体过程是:首先统计有效 长度L (从Modbus-RTU的当前指针p到公共缓冲区BUFF的接收指针m的长度);如果该长 度L小于1,则继续接收数据;否则判断BUFF[p]的内容是否等于表地址,如不是表地址,则 当前指针P加一并继续向后查找;如是表地址,则记下位置q为等于表地址的指针q,并进 行接收超时判断;如超时,则当前指针P移到当前位置并继续向后查找等于表地址的指针 q ;否则判断从该指针q开始是否收到至少2个字节,如没有2个字节则继续接收数据;否则 判断BUFF[q+l]的内容是否为正确的读写功能码;如不正确则当前指针p加一继续向后查 找等于表地址的指针q ;否则判断后续数据长度是否合理;如长度不够则继续接收数据,如 长度数据值超出缓冲区的大小则当前指针P加一并继续向后查找等于表地址的指针q,如 长度正确则进入校验和计算,校验和不正确则P加一继续向后查找q,如校验和正确则初始 化公共缓冲区,并置位协议号标志及帧判断成功标志,最后退出。
[0053] 如图6所示,DL/T645-2007、DL/T645-1997协议类型判断按照以下顺序进行检测 判断。
[0054] (1) DL/T645 帧解析开始。
[0055] (2)判断DL/T645帧的帧头是否为68H,即判断该DL/T645帧的第一字节是否为 68H ;若是,则转至下一步;否则转至步骤1。
[0056] (3)判断是否接收超时;若是,则转至步骤1 ;否则转至下一步。
[0057] (4)判断表地址是否正确;若是,则转至下一步;否则转至步骤1。
[0058] (5)判断DL/T645帧的第八字节是否为68H ;若是,则转至下一步;否则转至步骤 1〇
[0059] (6)判断帧长度是否正确;若是,则转至下一步;否则转至步骤1。
[0060] (7)结合长度判断该DL/T645帧的最后一个字节是否为16H。若是,则转至下一步; 否则转至步骤1。
[0061] (8)判断校验和是否正确;若是,则转至下一步;否则转至步骤1。
[0062] (9)判断功能码长度; 若该功能码长度为4字节,则置协议号标志为DL/T645-2007协议号标志,置帧接收成 功标志。结束,返回主流程。
[0063] 否则判断该功能码长度是否为2字节,若是,则置协议号标志为DL/T645-1997协 议号标志,置帧接收成功标志。结束,返回主流程。
[0064] 否则转至步骤1。
[0065] 如图7所示,本发明的DL/T645帧判断工作流程的具体过程是:首先统计有效长 度L (从DL/T645的当前指针p到公共缓冲区BUFF的接收指针m的长度);如果该长度L 小于1,则继续接收数据;否则判断BUFF[p]的内容是否等于帧头68H;如不是68H,则当前 指针p加一并继续向后查找;如是帧头68H,则记下位置q为等于68H的指针q,并进行接 收超时判断;如超时则当前指针P移到当前位置并继续向后查找等于68H的指针q,否则 判断从该指针q开始是否收到至少7个字节;如不足7个字节,则继续接收数据;否则判断 BUFF[q+irBUFF[q+6]的内容是否为正确的表地址;如不是,则当前指针p加一并继续向后 查找等于68H的指针q ;否则判断从等于68H的指针q开始是否收到至少8个字节;如不足 8个字节,则继续接收数据;否则判断BUFF[q+7]的内容是否为68H,如不是68H,则当前指 针P加一继续向后查找等于68H的指针q ;如是68H,则判断后续数据长度是否合理;如长 度数据值不够,则继续接收数据,如长度数据值超出缓冲区的大小,则当前指针P加一,并 继续向后查找等于68H的指针q ;如后续数据长度为正确长度,则判断帧尾字节是否为16H ; 如不是16H,则当前指针p加一,并继续向后查找等于68H的指针q ;否则进行校验和计算, 如校验和正确,则进入功能码长度的判断;功能码长度为4字节则为DL/T645-2007协议,功 能码长度如为2字节则为DL/T645-1997协议,如该功能码长度既不为4又不2,则当前指针 P加一,并继续向后查找等于68H的指针q。协议类型判断完成,初始化缓冲区并置协议号 标志及巾贞判断成功标志,最后退出。
[0066] 本发明能自动识别Modbus-RTU协议、DL/T645-2007协议、DL/T645-1997协议、校 表协议等各种半双工的电能表通信协议,能在资源较少的单片机系统上运行。本发明的通 讯中断仅用于数据的接收和发送,通信协议类型的甄别、具体功能的解析和处理都在主循 环中完成,中断占用时间少。
【权利要求】
1. 一种电能表多通信协议的自适应方法,该方法包括如下步骤: 步骤1,按照先进先出循环的方式接收数据,放至缓冲区; 步骤2,对接收数据进行通信协议类型判断; 步骤3,根据判定的协议类型进行与之对应的功能解析,并备好返回数据; 步骤4,发送返回数据。
2. 根据权利要求1所述的电能表多通信协议的自适应方法,其特征在于,所述通信协 议类型包括Modbus-RTU协议、DL/T645-2007协议、DL/T645-1997协议和校表协议的一种或 一种以上。
3. 根据权利要求2所述的电能表多通信协议的自适应方法,其特征在于,所述步骤2对 每个所述的协议类型都有一个指向缓冲区的数据指针,所述指针采用先进先出循环的方式 不停的向后查找符合要求的协议帧,按协议类型的重要程度顺序的进行Modbus-RTU协议、 DL/T645-2007协议、DL/T645-1997协议、校表协议等通信协议类型的判断。
4. 根据权利要求2所述的电能表多通信协议的自适应方法,其特征在于,所述 Modbus-RTU协议的协议类型判断按照表地址正确、未接收超时、读写功能码正确、帧长度正 确、校验正确的顺序,依次进行辨认;有任一条件不满足,则不为Modbus-RTU协议类型。
5. 根据权利要求2所述的电能表多通信协议的自适应方法,其特征在于,所述DL/ T645-2007协议和所述DL/T645-1997协议的协议类型判断按照帧头为68H、未接收超时、 表地址正确、第八个字节为68H、帧长度正确、帧尾为16H、校验和正确、符合功能码长度 要求的顺序,依次进行辨认;有任一条件不满足,则不为DL/T645-2007协议类型或DL/ T645-1997协议类型。
6. 根据权利要求5所述的电能表多通信协议的自适应方法,其特征在于,所述功能码 长度要求在为DL/T645-2007协议类型时设置须为4字节;其在DL/T645-1997协议类型时 设置须为2字节。
7. 根据权利要求1所述的电能表多通信协议的自适应方法,其特征在于,所述接收数 据和所述发送返回数据均采用中断方式完成;二者共用一个所述缓冲区;接收数据采用先 进先出循环的方式进行存储。
8. 根据权利要求1所述的电能表多通信协议的自适应方法,其特征在于,所述通信协 议类型判断和所述功能解析均在主循环中完成。
9. 根据权利要求1所述的电能表多通信协议的自适应方法,其特征在于,所述通信协 议在同一个物理通道下共用一个所述缓冲区。
【文档编号】G06F9/44GK104052758SQ201410333063
【公开日】2014年9月17日 申请日期:2014年7月14日 优先权日:2014年7月14日
【发明者】刘建福, 马亮 申请人:威胜集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1