具体实施方式
为更进一步阐述本发明为实现预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明的具体实施方式、结构、特征及其功效,详细说明如后。
参阅图1,其为本发明实施例提供的基于云平台的智能电表系统100的示意图。如图1所示,智能电表系统100包括:云端10a、控制主机10、多个楼层模块20以及多个智能电表30。其中,控制主机10与云端10a之间通过互联网相连,而多个楼层模块20与控制主机10相连,每个楼层模块20与多个智能电表30相连。
具体地,控制主机10与楼层模块20之间,以及楼层模块20与智能电表30之间通过8芯线缆连接,同时提供供电与通信功能。
在一个实施例中,8芯线缆的线序定义如下:
P1:电源+5V
P2:接地-
P3:保留
P4:RS485A+
P5:RS485B-
P6:保留
P7:Unit Enable(地址线)
P8:Data Enable(数据控制)
可以理解的是,8芯线缆的线序定义并不受上述限制,本领域普通技术人员可以根据具体的需要进行调整。
参阅图1,每个楼层模块20还包括上端通信接口201与下端通信接口202,对于每个20楼层模块,若其具有上游楼层模块20,则其上端通信接口201与其上游楼层模块20的下端通信接口202连接,若其具有下游楼层模块20,则其下端通信接口202与所述下游楼层模块20的上端通信接口201连接。通过这种方式,所有的楼层模块20被串联在一起,而位于队首的楼层模块20可直接与控制主机10相连接。楼层模块20之间也可以采用如上述的8芯线缆进行连接,在8芯线缆的接口上可以实现不同的通信接口,例如RS232串行通信接口。
每个楼层模块20向其上游楼层模块20请求分配模块序号,还根据其下游楼层模块20的请求给其下游楼层模块20分配模块序号。
具体地,参阅图2,分配模块序号的流程包括以下步骤:
步骤S31,楼层模块20启动其下端通信接口202进行侦听(服务端模式),并启动其上端通信接口201进行通信连接(客户端模式)。
步骤S32,若上端通信接口201通信连接成功后发送其身份标识给其上游楼层模块20。其上游楼层模块接收到身份标识后会进行身份验证,身份验证通过后根据自身的模块序号计算新的模块序号,然后将计算得到的模块序号发送给楼层模块20。
步骤S33,若下端通信接口202接收到其下游楼层模块20发送的身份标识,则楼层模块20对接收到的身份标识进行验证,验证通过后根据自身的模块序号计算新的模块序号,然后将计算得到的模块序号发送给其下游楼层模块。
由于位于队首的楼层模块20不具有上游楼层模块,因此,其模块序号保持为默认值(例如0)。计算新的模块序号最简单的方式就是使模块序号+1,但可以理解的是,序号的规则并不受限制,也可是+2,+3或者任意值。
若对每个楼层模块20均执行上述过程,则每个楼层模块20会自动为其下游楼层模块分配模块序号。当其中某个楼层模块20被移除后,模块序号又会被重新分配,从而可以保证模块序号与实际的物理连接关系一一对应。
当在机架上安装楼层模块20时,只要使楼层模块20的连接顺序与某种顺序保持对应(例如从上到下、从下到上、从左到右、或者从右到右),则楼层模块20的序号就准确反应了该顺序。如此,只要楼层模块20在上报的数据内包含自身的模块序号,则控制主机10就可以按照模块序号为序对数据进行处理,非常适用于对数据索引顺序有要求的电表数据采集场合。
此外,楼层模块20的上端通信接口201与下端通信接口202的作用并不限于自动分配模块序号,还可以用于传输数据。例如,楼层模块20将采集的数据加上其自身的模块序号后上报至其上游楼层模块20。同时,楼层模块20也接收其下游楼层模块20上报的数据,直接转发至其上游楼层模块20。当楼层模块20不具有上游楼层模块时,可将数据发送给控制主机10。通过这种方式,并不是所有的楼层模块20均需要直接与控制主机10相连,从而可以增加控制主机10所能接入的楼层模块20的数量。
由于楼层模块20之间建立的是全双工通信通道,所以上游楼层模块20不需要轮询下游楼层模块20的数据,下游楼层模块20采集数据后与上一次上报的数据比较数据变化(Change Of Value,COV)是否超过设定的阈值,如果COV小于阈值则可以忽略数据,大于或等于阈值时则主动将数据推送给其上游楼层模块20或者控制主机10。采用这种方式可以最优化楼层模块20的数据传输性能。
可以理解的是,楼层模块20采集的数据并不限于向其上游楼层模块20上报,还可以直接上报给控制主机10,此时需要在所有的楼层模块20与控制主机10之间实现通信连接。
在一个实施方式中,楼层模块20通过上述的8芯线缆与控制主机10相连。基于8芯线缆中的引脚P4与P5,在控制主机10与楼层模块20之间实现一个串行总线(例如RS485)通信系统,其中,控制主机10为主机,而楼层模块20为从机。串行总线具有通信距离长和多从机支持的优点。但是串行总线中的从机要求具有唯一的地址。
在本实施例中,从机的地址可通过地址线(引脚P7)进行分配,参阅图3,其具体过程如下:
步骤S11,主机启动后初始化多个I/O端口为输入模式。
I/O端口的数量依赖于从机的数量,与从机的数量一一对应。本实施例中,从机数量为6个,则主机可初始化I/O端口D4~D9为输入模式。缺省时,主机地直线端口输入模式为低电平(当然也可以定义为高电平)。
现在的CPU都具有大量的I/O端口,每条地址线只占用主机和从机各一个I/O端口,同时地址线只需要传输一个地址数据,所以只需要设计低速通信,不需要占用特殊端口(例如SPI、I2C、1-Wire或UART)等。当然采用这些特殊端口同样可行。
步骤S21,从机启动后通过地址线连接主机对应的I/O端口,发送连接信号。
假设从机对应的主机的I/O端口为D4,则从机启动后通过地址线连接主机的D4端口。具体地,从机初始化端口D2为输出模式,发送一个电平信号(低-高-低)至主机的D4端口。例如,输出低电平保持50ms(时间可以定义为其他值),然后将端口D2拉高电平保持50ms(时间也可以定义为其他值),然后拉低电平。可以理解的是,此处的电平信号也可以任意约定。而上述的电平信号即为从机发送的连接信号。
步骤S22,从机将端口D2设置为输入模式,并开始侦听输入的地址信号。
例如,从机在端口D2启动摩斯电码侦听。当然,这里可以采用任何通信设计,能够传输要传输的数据即可。
步骤S23,若在设定周期(例如10s)内没有接收到任何数据,则从机停止侦听程序新重新执行步骤S21。
步骤S12,主机持续侦听I/O端口,当监测到预定的连接信号(例如电平信号下降沿高-低)时,表示有从机接入,执行步骤S13。
步骤S13,主机将分配的地址发送给从机。
首先,主机获取一个未被使用的地址,例如地址可以默认从1开始,每次分配使地址+1。然后,主机在延时预定时间(例如50ms)后在端口D4启动摩斯电码发送所分配的通信地址1。
步骤S24,从机接收到主机发送的地址后按照接收到的通信地址初始化串行总线通信,准备接收主机发送的握手信号。
步骤S14,在步骤S13之后主机延时预定时间(例如100ms)后通过串行通信总线向分配的地址(例如1)发送握手信号。
步骤S25,从机在接收到主机握手信号后返回从机身份验证信息。
步骤S15,主机根据从机返回的身份验证信息进行验证,若验证从机成功,则完成通信地址的自动分配。
步骤S16,主机通过串行总线定时向从机发出轮询请求以获取数据,若请求超时,则主机重新侦听地址线发送的连接信号,即执行步骤S12。
步骤S26,从机在指定的时间内没有接收到主机请求,则从机重新执行步骤S21直至获得正确的总线通信地址。
在完成地址的分配后,主机与从机之间就可以采用串行通信总线完成通信。
此外,可以理解的是,在图1所示的智能电表系统100中,串行通信总线并不限用于控制主机10与楼层模块20之间的网络连接。如图1所示,楼层模块20内可包括多个(图1所示为6个)智能电表21,楼层模块20与智能电表21之间也可以通过串行通信总线连接。此时,楼层模块20内的主控制器为主机,而各智能电表21为从机,主控制器给各智能电表21分配地址的过程可与上述过程相同。在分配地址后,各智能电表21通过串行通信总线与楼层模块20通信,完成数据上报的操作。
串行总线总是通过主机轮询从机,当从机数量很多以及从机采集数据量较大时,串行总线通信效率下降,数据延时较大。为提升通信效率,可以通过只传输变化数据和产生新数据时从机主动通知主机推送数据,参阅图4,其具体过程可如下:
步骤S41,缓存每一条采集的数据。
步骤S42,将当前采集的数据与上一次上报的数据进行比较,如果变化幅度大于或等于设定阈值则执行步骤S43;否则,忽略掉当前采集的数据,并可从缓存中清除当前采集的数据。
步骤S43,更新从机的数据变化索引。
在初始状态下,从机的数据变化索引为一个默认值(例如0)。此后,每产生一条待上报的数据,可使从机的数据变化索引按照预定的规则增加或者减少,例如,每产生一条COV数据,可使从机的数据变化索引增加1。
步骤S44,当接收到主机发送的数据轮询请求时根据轮询请求内的变化索引值获取所有待上报的数据返回给主机。
主机在接收到从机上报的数据后,会缓存上报的数据内包含的变化索引值,在下次发送数据轮询请求内可将该变化索引值包含在轮询请求内作为请求参数。
从机可将轮询请求内包括的变化索引值与从机数据变化索引进行比较,若两者相同,则说明距离上一次上报数据未产生新的待上报数据,此时获取的待上报的数据为空,此时从机可返回空数据包或者直接返回从机数据变化索引;若从机的数据变化索引值等于轮询请求内的变化索引的值+1,则说明距离上一次上报数据,有一条待上报的数据产生,此时,从机可最新的一条待上报数据与从机变化索引一并返回给主机;其他状态表示距离上一次上报数据,有多条待上报的数据产生,此时,从机可以获取上一次上报至今产生的所有待上报数据,并将其与从机数据变化索引一并返回。
由于现实物理世界中很多数据在短时间内基本保持不变,这种方式在不改变基本通信原则的前提下,可以级数级提升数据轮询速度和减少总线带宽占用。
串行总线轮询方式当从机数量很多时还是不能解决数据传输及时性,从机可通过复用地址线主动通知主机有新数据需要上报,参阅图5,其具体过程如下:
步骤S51,当主机成功给从机分配串行总线地址后,主机侦听与从机地址线连接端口;
步骤S52,从机产生新的变化数据后,调用地址线发送数据更新信号。
例如,调用地址线发送一个电平信号(低—高—低)。如上所述,在主机给从机分配地址的过程中,从机发送的连接信号也可以是低高低的电平信号。因此,要求主机能够根据不同的工作状态将相同的电平信号分别解析成连接信号与数据更新信号。具体地,当某个I/O端口已经被分配地址且处于正常通信过程中时接收到的电平信号即为数据更新信号,否则,即为连接信号。
步骤S53,主机接收到数据更新信号则调用串行总线发送数据请求,以获取从机变化数据。
为保证数据同步可靠性,可同时启用地址线数据推送通知和串行总线定时轮询(轮询周期可设置较长)。从机主动推送数据通知的方式在从机数量较多时可以很大的提升数据同步实时性。
此外,除了利用地址线发送数据更新信号,还可以采用其他的引脚,例如8芯电缆的引脚8发送数据更新信号。此时,数据更新信号与连接信号分别在不同的I/O端口中传输,更加可靠,但需要占用主机与从机更多的I/O端口。
参阅图6,在一个实施例中,上述的智能电表系统100还可执行以下方法:
步骤S61,智能电表在开机后将其内预存的身份信息发送给其对应的楼层模块。
步骤S62,楼层模块在有智能电表连接时向将所述身份信息发送给所述控制主机。
步骤S63,控制主机通过互联网将向所述云端发送智能电表接入通知,所述智能电表接入通知内包括对应智能电表的身份识别信息及所述控制主机以及楼层模块自身的定位信息。
通过这种方式,当智能电表被接入智能电表系统中时,在云端会自动发现有新的智能电表接入,而且由于智能电表将自身携带的身份信息发送给云端,云端就可以唯一的确定智能电表的身份,而无须维护人员手动输入智能电表对应的用户数据,可以避免数据输入过程中的错误。
进一步地,参阅图7,在一个实施例中,智能电表系统100还可以在图6所示方法的基础上执行以下步骤:
步骤S64,当检测到失去与所述智能电表的连接且超出指定时间没有恢复通信,则所述楼层模块判断智能电表已离线,所述控制主机向所述云端发送智能电表离线通知,所述智能电表离线通知内包括离线智能电表的身份识别信息及所述控制主机、楼层模块的定位信息;
步骤S65,云端在接收到所述智能电表离线通知后更新电表数据库。
根据本实施例的方法,当智能电表离线时,云端也会自动接到离线通知,而离线有两种情形,一种是主动拆除,此时无须执行进一步的操作;另一种是智能电表发生了故障,此时,就可以将相关信息推送给维护人员去检修。如此,可以降低智能电表的故障线,提升智能电表采集系统的效率。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭示如上,然而并非用以限定本发明,任何本领域技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简介修改、等同变化与修饰,均仍属于本发明技术方案的范围内。