本发明涉及双芯智能电能表领域,具体涉及一种用于双芯智能电能表双芯间稳定通信的方法。
背景技术:
ir46标准作为国际法制计量组织发布的强制性技术法规,包括我国在内的所有国际法制计量组织成员国必须采纳并执行。ir46双芯智能电能表分为两个功能模块:管理模块和基表,依次对应硬件设计上的管理芯与计量芯。在现场应用中,双芯电表一旦挂网,管理芯支持软件更新的功能,可以通过本地更新或通过采集网络进行远程更新,但计量芯的程序不允许升级。在实际应用中,管理芯程序在升级后,现场会存在不同版本的管理芯程序与不同版本的计量芯程序互相组合的情形。如果双芯之间没有一种稳定可靠的通信方案,就会因为计量芯响应慢、管理芯等待响应时间过长等原因,在双芯通信时会产生撞帧、误帧、响应错位、通信不稳定等问题,从而影响双芯电能表系统的稳定工作。
技术实现要素:
本发明所要解决的技术问题是管理芯程序在升级后,现场会存在不同版本的管理芯程序与不同版本的计量芯程序互相组合的情形,导致计量芯响应慢、管理芯等待响应时间过长的技术问题,目的在于提供一种用于双芯智能电能表双芯间稳定通信的方法,可以保证计量芯与管理芯模块之间程序的独立性,又能保障双芯电能表系统的稳定可靠运行。
本发明通过下述技术方案实现:
一种用于双芯智能电能表双芯间稳定通信的方法,基于管理芯和计量芯之间的交互,其特征在于,包括:物理层配置:在物理层上,所述管理芯和计量芯之间采用spi通信方式,其中,管理芯为spi主机,计量芯为spi从机,所述spi主机与spi从机之间时序配置相同;协议层协议:在协议层上,管理芯与计量芯之间统一采用符合dl/t698.45协议规范的通信协议;双芯通信交互模式:所述双芯通信交互模式包括管理芯程序模式和计量芯程序模式;所述管理芯对通信链路的建立与解除进行控制,管理芯程序内设置双芯通信互斥标志spicolflag,当spicolflag为0时,表示管理芯程序正在进行双芯通信任务,spicolflag为1时表示管理芯程序处于双芯通信空闲状态;所述计量芯程序对管理芯下发的每一条命令进行应答;当管理芯下发命令帧后,计量芯返回对应的应答帧;其中,所述管理芯程序模式包括:等待回复模式、闲时发送模式和队列发送模式;所述计量芯程序模式包括:抄读立即回复模式和设置完毕回复模式;
其中,统一物理层配置、协议层协议、通信交互模式,满足管理芯程序在现场升级后,仍然可以与已有的计量芯程序进行稳定的交互;管理芯的三种通信模式可以确保管理芯必须下发的命令帧一定可以下发下去,同时针对计量芯可能存在的响应命令帧耗时较长的情况,队列发送模式可以及时的任务让出,防止管理芯程序阻塞的情况发生,提高程序的健壮性和系统的鲁棒性;计量芯抄读立即回复机制可以保证通信的实时性;计量芯设置完毕回复机制可以保证计量芯每次收到的设置命令后,必须等待实际设置完毕后才返回应答帧,杜绝“假帧”、“空帧”的现象,保证通信的可靠性。
进一步,所述管理芯等待回复模式适用于实时等待计量芯回复的情形,如抄读系统运行关键数据、等待接收设置结果等;所述管理芯下发命令帧后,在计量芯接收到有效数据帧之前,会一直在双芯通信任务中进行等待;所述管理芯在进入等待回复模式后,管理芯首先判断当前是否有通信任务,即判断spicolflag是否为0,若存在上一次通信任务未结束,则管理芯主动通过spi接口不断发送问询字节,等待计量芯的响应,直到管理芯收到一条完整的计量芯应答帧,将上一次通信任务处理掉,然后管理芯调用发送函数将本次命令帧下发给计量芯;否则,进入等待回复模式后检测到spicolflag=1,即管理芯程序处于双芯通信空闲状态,则管理芯直接调用发送函数将命令帧下发给计量芯;所述管理芯将本次的命令帧下发给计量芯后不断发送问询字节,直到管理芯在接收到响应帧头68h后接收一帧计量芯应答数据,所述管理芯处理本次通信任务,将spicolflag置为1,完成一次有效的双芯间通信。
进一步,管理芯空闲发送模式适用于需要频繁调用的、非必要的命令帧,比如频繁的抄读实时电压、电流等;管理芯程序需要抄读当前实时电压、电流时,如果spicolflag=0,即当前程序正在进行双芯通信任务,则直接放弃本次双芯通信请求;反之如果spicolflag=1,管理芯将抄读电流命令帧直接下发给计量芯,然后将spicolflag置为0,命令下发结束,本次数据帧的接收放在管理芯循环任务中进行处理。
进一步,管理芯队列发送模式适用于管理芯发送命令帧后而计量芯处理时间较长的通信情形,采用队列发送模式可以将管理芯的cpu空闲出来,避免程序等待时间过长,比如通过管理芯设置计量芯的rtc等;管理芯程序进入队列发送模式后,如果管理芯双芯通信任务空闲,即spicolflag=1,则管理芯直接调用发送函数,管理芯将本次命令帧下发给计量芯,然后将spicolflag置为0,退出队列发送模式;本次命令下发结束,所述数据帧的接收放在管理芯循环任务中进行处理;否则,管理芯程序进入队列发送模式后,如果spicolflag=0,即当前程序正在进行双芯通信任务,则需要把当前命令帧保存到发送队列数组中去;其中,具体流程如下:管理芯程序首先判断队列是否超长,如果队列超长,则管理芯清除队列第一位保存的内容,将队列内容依次前移一位,然后管理芯将待发送的数据帧保存到队列最后,然后队列长度加1,退出队列发送模式,流程结束;如果管理芯程序判断队列不超长,则管理芯直接将待发送的数据帧保存到队列最后,然后把队列长度加1,退出队列发送模式;流程结束;管理芯退出队列发送模式后,cpu去执行别的任务,队列中的命令帧的真正下发放在循环检测任务中去执行。
进一步,还包括管理芯双芯通信循环检测模式,所述管理芯双芯通信循环检测任务放在管理芯程序主循环内,需要与管理芯空闲发送模式以及管理芯队列发送模式配合使用;进入循环检测任务后,首先管理芯不断对通信互斥标志spicolflag进行轮询,如果spicolflag=0,即当前管理芯程序正在进行双芯通信任务,则管理芯程序发送一次问询字节,用来判断计量芯是否准备好应答数据;如果接收到帧头68h,则管理芯程序继续进入收帧流程,将管理芯上一次通信任务处理掉,随后进入队列轮询流程;如果管理芯接收不到68h帧头则直接进入队列轮询流程;队列轮询流程中对队列长度spiqueuelen进行判断,如果队列长度spiqueuelen为0,则管理芯程序直接结束本次双芯通信循环检测任务,释放cpu去执行其他任务;如果队列长度spiqueuelen不为0,并且管理芯程序处于双芯通信空闲状态,即spicolflag=1,则管理芯程序首先取队列中最前端的数据帧取出下发给计量芯,然后管理芯程序将队列内容依次前移一位,同时队列长度spiqueuelen减1,管理芯程序将spicolflag置为0,结束本次双芯通信循环检测任务。
进一步,所述抄读立即回复模式为:当计量芯将需要频繁抄读的数据(电压、电流、需量等)及时的更新到内存中,当计量芯收到管理芯发出的命令为抄读数据类型时,计量芯立即读取内存中对应的变量值组成应答帧返回给管理芯。
进一步,所述设置完毕回复模式为:当计量芯收到管理芯发出的命令为设置数据类型时,计量芯对应的去设置目标对象(内存、存储器、rtc等)的值,待设置完毕后,计量芯取设置结果组成应答帧返回给管理芯。
进一步,管理芯程序和计量芯程序中设有超时退出机制;在通信任务中,管理芯程序和计量芯程序任何一方检测到通信超时,都能强制结束本次通信任务。
本发明与现有技术相比,具有如下的优点和有益效果:
本发明一种一种用于双芯智能电能表双芯间稳定通信的方法,所述统一物理层配置、协议层协议、通信交互模式,满足管理芯程序在现场升级后,仍然可以与已有的计量芯程序进行稳定的交互。
管理芯的三种通信模式可以确保管理芯必须下发的命令帧一定可以下发下去,同时针对计量芯可能存在的响应命令帧耗时较长的情况,队列发送模式可以及时的任务让出,防止管理芯程序阻塞的情况发生,提高程序的健壮性和系统的鲁棒性;
计量芯抄读立即回复机制可以保证通信的实时性;计量芯设置完毕回复机制可以保证计量芯每次收到的设置命令后,必须等待实际设置完毕后才返回应答帧,杜绝“假帧”、“空帧”的现象,保证通信的可靠性。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:
图1是管理芯等待回复模式流程图。
图2是管理芯队列发送模式流程图。
图3是管理芯双芯通信循环检测流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
在以下描述中,为了提供对本发明的透彻理解阐述了大量特定细节。然而,对于本领域普通技术人员显而易见的是:不必采用这些特定细节来实行本发明。在其他实例中,为了避免混淆本发明,未具体描述公知的结构、电路、材料或方法。
在整个说明书中,对“一个实施例”、“实施例”、“一个示例”或“示例”的提及意味着:结合该实施例或示例描述的特定特征、结构或特性被包含在本发明至少一个实施例中。因此,在整个说明书的各个地方出现的短语“一个实施例”、“实施例”、“一个示例”或“示例”不一定都指同一实施例或示例。此外,可以以任何适当的组合和、或子组合将特定的特征、结构或特性组合在一个或多个实施例或示例中。此外,本领域普通技术人员应当理解,在此提供的示图都是为了说明的目的,并且示图不一定是按比例绘制的。这里使用的术语“和/或”包括一个或多个相关列出的项目的任何和所有组合。
在本发明的描述中,需要理解的是,术语“前”、“后”、“左”、“右”、“上”、“下”、“竖直”、“水平”、“高”、“低”“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明保护范围的限制。
实施例
如图1所示,本发明一种用于双芯智能电能表双芯间稳定通信的方法,该方法即可以保证计量芯与管理芯模块之间程序的独立性,又能保障双芯电能表系统的稳定可靠运行。
物理层上,管理芯与计量芯之间采用spi通信方式,其中管理芯为spi主机,计量芯为spi从机,主从器件之间的时序配置一致。
协议层上,管理芯与计量芯之间采用统一的、符合dl/t698.45协议规范的通信协议。
所述双芯通信保障方法包括管理芯程序与计量芯程序。
管理芯对通信链路的建立与解除进行控制,计量芯程序必须对管理芯下发的每一条命令进行应答。管理芯下发命令帧后,计量芯返回对应的应答帧,这两个环节组成一次有效的双芯间通信过程。
管理芯程序设计三种通信模式:等待回复模式、闲时发送模式、队列发送模式。
等待回复模式:管理芯下发命令帧后,主动通过spi接口不断发送问询字节,等待计量芯的响应,直到管理芯收到一条完整的计量芯应答帧,完成一次有效的双芯间通信。此模式适用于必须实时等待计量芯回复的情形。
闲时发送模式:管理芯程序检测到当前正在进行双芯间通信,则放弃本次通信任务,否则管理芯启动一次双芯间通信。此模式适用于需要进行频繁通信的、偶尔通信失败不影响系统正常运行的情形。
队列发送模式:管理芯程序检测到当前正在进行双芯间通信,则把本次要下发给计量芯的命令帧保存到发送队列中去,管理芯程序继续执行其他任务,避免程序阻塞,待上一次双芯通信任务完成后,再从队列中取命令帧,下发给计量芯,完成一次有效的双芯间通信。此模式适用于必须发送的、而计量芯处理时间较长的通信情形。
计量芯程序设计两种应答机制:抄读立即回复、设置完毕回复,对应管理芯下发的抄读数据命令及设置数据命令。
计量芯抄读立即回复:计量芯将需要频繁抄读的数据及时的更新到内存中,当管理芯抄读数据类型时,计量芯立即取内存中对应的变量值,组成应答帧后上报给管理芯。
计量芯设置完毕回复:计量芯收到的命令为设置数据类型时,对应的去设置目标对象的值,必须等待设置完毕后,取设置结果,组成应答帧,返回给管理芯,防止响应错位的现象发生。
在管理芯程序和计量芯程序中加入超时退出机制,在通信任务中,任何一方检测到通信超时,都能强制结束本次通信任务,防止程序跑飞。
综上所述,本方法的优点在于:
统一物理层配置、协议层协议、通信交互模式,满足管理芯程序在现场升级后,仍然可以与已有的计量芯程序进行稳定的交互。
管理芯的三种通信模式可以确保管理芯必须下发的命令帧一定可以下发下去,同时针对计量芯可能存在的响应命令帧耗时较长的情况,队列发送模式可以及时的任务让出,防止管理芯程序阻塞的情况发生,提高程序的健壮性和系统的鲁棒性;
计量芯抄读立即回复机制可以保证通信的实时性;计量芯设置完毕回复机制可以保证计量芯每次收到的设置命令后,必须等待实际设置完毕后才返回应答帧,杜绝“假帧”、“空帧”的现象,保证通信的可靠性。
双芯间spi通信链路的建立与解除由管理芯进行控制,管理芯程序内设置双芯通信互斥标志spicolflag,当spicolflag为0时,表示管理芯程序正在进行双芯通信任务,spicolflag为1时表示管理芯程序处于双芯通信空闲状态。
管理芯等待回复模式适用于必须实时等待计量芯回复的情形,如抄读系统运行关键数据、等待接收设置结果等。管理芯下发命令帧后,在接收到有效数据帧之前,会一直在双芯通信任务中进行等待。如图1,在进入等待回复模式后,首先判断当前是否有通信任务,即判断spicolflag是否为0,若存在上一次通信任务未结束,则管理芯主动通过spi接口不断发送问询字节,等待计量芯的响应,直到管理芯收到一条完整的计量芯应答帧,将上一次通信任务处理掉,然后调用发送函数将本次命令帧下发给计量芯。反之,进入等待回复模式后检测到spicolflag=1,即管理芯程序处于双芯通信空闲状态,则管理芯直接调用发送函数将命令帧下发给计量芯。管理芯将本次的命令帧下发给计量芯后,不断发送问询字节,直到接收到响应帧头(68h)后,接收一帧计量芯应答数据,处理本次通信任务,将spicolflag置为1,完成一次有效的双芯间通信。
管理芯空闲发送模式适用于需要频繁调用的、非必要的命令帧,比如频繁的抄读实时电压、电流等。以抄读当前电流为例,管理芯程序需要抄读当前电流时,如果spicolflag=0,即当前程序正在进行双芯通信任务,则直接放弃本次双芯通信请求;反之如果spicolflag=1,管理芯将抄读电流命令帧直接下发给计量芯,然后将spicolflag置为0,命令下发结束,本次数据帧的接收放在管理芯循环任务中进行处理。
管理芯队列发送模式适用于必须发送的、而计量芯处理时间较长的通信情形,采用队列发送模式可以将管理芯的cpu及时释放出来,避免程序等待时间过长,比如通过管理芯设置计量芯的rtc等。如图2,管理芯程序进入队列发送模式后,如果管理芯双芯通信任务空闲,即spicolflag=1,则管理芯直接调用发送函数,将本次命令帧下发给计量芯,然后将spicolflag置为0,退出队列发送模式,本次命令下发结束,此次数据帧的接收放在管理芯循环任务中进行处理。反之,进入队列发送模式后,如果spicolflag=0,即当前程序正在进行双芯通信任务,则需要把当前命令帧保存到发送队列数组中去,具体流程如下:程序首先判断队列是否超长,如果队列超长,则清除队列第一位保存的内容,将队列内容依次前移一位,然后将待发送的数据帧保存到队列最后,然后队列长度加1,退出队列发送模式;如果队列不超长,则直接将待发送的数据帧保存到队列最后,然后把队列长度加1,退出队列发送模式。退出队列发送模式后,cpu去执行别的任务,队列中的命令帧的真正下发放在循环检测任务中去执行。
管理芯双芯通信循环检测任务放在程序主循环内,需要与空闲发送模式以及队列发送模式配合使用。如图3,进入循环检测任务,首先不断对通信互斥标志spicolflag进行轮询,如果spicolflag=0,即当前程序正在进行双芯通信任务,则管理芯程序发送一次问询字节,用来判断计量芯是否准备好应答数据,如果接收到帧头(68h),则继续进入收帧流程,将上一次通信任务处理掉,随后进入队列轮询流程;如果接收不到68h帧头则直接进入队列轮询流程。队列轮询流程中对队列长度spiqueuelen进行判断,如果队列长度spiqueuelen为0,则直接结束本次双芯通信循环检测任务,释放cpu去执行其他任务;如果队列长度spiqueuelen不为0,并且管理芯程序处于双芯通信空闲状态,即spicolflag=1,则首先取队列中最前端的数据帧取出下发给计量芯,然后将队列内容依次前移一位,同时队列长度spiqueuelen减1,将spicolflag置为0,结束本次双芯通信循环检测任务。
计量芯程序设计两种应答机制:抄读立即回复、设置完毕回复。
抄读立即回复:计量芯将需要频繁抄读的数据(电压、电流、需量等)及时的更新到内存中,当计量芯收到的命令为抄读数据类型时,立即取内存中对应的变量值,组成应答帧,返回给管理芯;
设置完毕回复:计量芯收到的命令为设置数据类型时,对应的去设置目标对象(内存、存储器、rtc等)的值,待设置完毕后,取设置结果,组成应答帧,返回给管理芯。
为了防止由于基表或者管理模块当中的一方出现故障,导致另外一方卡在通信程序中的情况发生,在管理芯程序和计量芯程序中加入超时退出机制。在通信任务中,任何一方检测到通信超时,都能强制结束本次通信任务,防止程序阻塞或者跑飞的现象发生。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
1.一种用于双芯智能电能表双芯间稳定通信的方法,基于管理芯和计量芯之间的交互,其特征在于,包括:
物理层配置:在物理层上,所述管理芯和计量芯之间采用spi通信方式,其中,管理芯为spi主机,计量芯为spi从机,所述spi主机与spi从机之间时序配置相同;
协议层协议:在协议层上,管理芯与计量芯之间统一采用符合dl/t698.45协议规范的通信协议;
双芯通信交互模式:所述双芯通信交互模式包括管理芯程序模式和计量芯程序模式;所述管理芯对通信链路的建立与解除进行控制,管理芯程序内设置双芯通信互斥标志spicolflag,当spicolflag为0时,表示管理芯程序正在进行双芯通信任务,spicolflag为1时表示管理芯程序处于双芯通信空闲状态;所述计量芯程序对管理芯下发的每一条命令进行应答;当管理芯下发命令帧后,计量芯返回对应的应答帧;
其中,所述管理芯程序模式包括:等待回复模式、闲时发送模式和队列发送模式;所述计量芯程序模式包括:抄读立即回复模式和设置完毕回复模式。
2.根据权利要求1所述的一种用于双芯智能电能表双芯间稳定通信的方法,其特征在于,所述管理芯等待回复模式适用于实时等待计量芯回复的情形,所述管理芯下发命令帧后,在计量芯接收到有效数据帧之前,会一直在双芯通信任务中进行等待;所述管理芯在进入等待回复模式后,管理芯首先判断当前是否有通信任务,即判断spicolflag是否为0,若存在上一次通信任务未结束,则管理芯主动通过spi接口不断发送问询字节,等待计量芯的响应,直到管理芯收到一条完整的计量芯应答帧,将上一次通信任务处理掉,然后管理芯调用发送函数将本次命令帧下发给计量芯;否则,进入等待回复模式后检测到spicolflag=1,即管理芯程序处于双芯通信空闲状态,则管理芯直接调用发送函数将命令帧下发给计量芯;所述管理芯将本次的命令帧下发给计量芯后不断发送问询字节,直到管理芯在接收到响应帧头68h后接收一帧计量芯应答数据,所述管理芯处理本次通信任务,将spicolflag置为1,完成一次有效的双芯间通信。
3.根据权利要求1所述的一种用于双芯智能电能表双芯间稳定通信的方法,其特征在于,管理芯空闲发送模式适用于需要频繁调用的、非必要的命令帧,管理芯程序需要抄读当前实时电压、电流时,如果spicolflag=0,即当前程序正在进行双芯通信任务,则直接放弃本次双芯通信请求;反之如果spicolflag=1,管理芯将抄读电流命令帧直接下发给计量芯,然后将spicolflag置为0,命令下发结束,本次数据帧的接收放在管理芯循环任务中进行处理。
4.根据权利要求1所述的一种用于双芯智能电能表双芯间稳定通信的方法,其特征在于,管理芯队列发送模式适用于管理芯发送命令帧后而计量芯处理时间较长的通信情形,采用队列发送模式可以将管理芯的cpu空闲出来,管理芯程序进入队列发送模式后,如果管理芯双芯通信任务空闲,即spicolflag=1,则管理芯直接调用发送函数,管理芯将本次命令帧下发给计量芯,然后将spicolflag置为0,退出队列发送模式;否则,管理芯程序进入队列发送模式后,如果spicolflag=0,即当前程序正在进行双芯通信任务,则需要把当前命令帧保存到发送队列数组中去;其中,具体流程如下:管理芯程序首先判断队列是否超长,如果队列超长,则管理芯清除队列第一位保存的内容,将队列内容依次前移一位,然后管理芯将待发送的数据帧保存到队列最后,然后队列长度加1,退出队列发送模式,流程结束;如果管理芯程序判断队列不超长,则管理芯直接将待发送的数据帧保存到队列最后,然后把队列长度加1,退出队列发送模式;流程结束。
5.根据权利要求1所述的一种用于双芯智能电能表双芯间稳定通信的方法,其特征在于,还包括管理芯双芯通信循环检测模式,所述管理芯双芯通信循环检测任务放在管理芯程序主循环内,需要与管理芯空闲发送模式以及管理芯队列发送模式配合使用;进入循环检测任务后,首先管理芯不断对通信互斥标志spicolflag进行轮询,如果spicolflag=0,即当前管理芯程序正在进行双芯通信任务,则管理芯程序发送一次问询字节,用来判断计量芯是否准备好应答数据;如果接收到帧头68h,则管理芯程序继续进入收帧流程,将管理芯上一次通信任务处理掉,随后进入队列轮询流程;如果管理芯接收不到68h帧头则直接进入队列轮询流程;队列轮询流程中对队列长度spiqueuelen进行判断,如果队列长度spiqueuelen为0,则管理芯程序直接结束本次双芯通信循环检测任务;如果队列长度spiqueuelen不为0,并且管理芯程序处于双芯通信空闲状态,即spicolflag=1,则管理芯程序首先取队列中最前端的数据帧取出下发给计量芯,然后管理芯程序将队列内容依次前移一位,同时队列长度spiqueuelen减1,管理芯程序将spicolflag置为0,结束本次双芯通信循环检测任务。
6.根据权利要求1所述的一种用于双芯智能电能表双芯间稳定通信的方法,其特征在于,所述抄读立即回复模式为:当计量芯将需要频繁抄读的数据更新到内存中,当计量芯收到管理芯发出的命令为抄读数据类型时,计量芯立即读取内存中对应的变量值组成应答帧返回给管理芯。
7.根据权利要求1所述的一种用于双芯智能电能表双芯间稳定通信的方法,其特征在于,所述设置完毕回复模式为:当计量芯收到管理芯发出的命令为设置数据类型时,计量芯对应的去设置目标对象的值,待设置完毕后,计量芯取设置结果组成应答帧返回给管理芯。
8.根据权利要求1所述的一种用于双芯智能电能表双芯间稳定通信的方法,其特征在于,管理芯程序和计量芯程序中设有超时退出机制;在通信任务中,管理芯程序和计量芯程序任何一方检测到通信超时,都能强制结束本次通信任务。
技术总结