陈子杰,沈翔宇,陈思捷,严 正,平 健,沈泽宇
(电力传输与功率变换控制教育部重点实验室(上海交通大学),上海市 200240)
近年来,随着能源市场化改革的不断推进,分布式能源与传统集中供能融合的方案正成为新的供能模式而受到广泛关注[1]。分布式能源具有数量多、分布散等特点,在分布式能源交易中引入区块链技术[2],可确保交易的公开透明、可追溯、不可篡改,以及合约自动执行[3-5]。
目前,已有研究基于区块链开发平台部署了能源区块链应用。文献[6-16]在微电网内部双向拍卖、光伏交易、电能多边交易等场景中引入区块链智能合约技术。然而,上述研究中的上链数据或基于用户自主申报,或由第三方网站模拟生成,并未考虑区块链节点如何与分布式能源智能设备进行数据交互,并且缺乏软硬件结合的完整能源区块链解决方案。
同时,能源区块链的效率问题一直受到学术界的广泛关注。文献[17]评估了能源互联网区块链平台的交易所需时间与验证全部交易所需时间。文献[18]评估了节点数量与交易手续费对私有链网络吞吐率的影响。文献[19]在实验室测试环境下测试了基于区块链实现的可再生能源消纳凭证交易系统的性能。文献[20]对比了权益授权证明共识机制与其他机制下的微电网群平均交易延迟时间。然而,上述研究忽略了区块链层与硬件层间的数据交互时延及物理设备间的通信时延等影响因素。
为此,本文构建了基于区块链的分布式能源交易仿真平台。该平台形成了一种软硬件结合的完整区块链架构,可以模拟园区规模下分布式能源产消者的运行状态,并且可为能源区块链应用面临的链上、链下数据转化难题提供可行的解决方案。
基于区块链的分布式能源交易仿真平台的实物图如图1 所示。仿真平台自下而上包含硬件层、控制层、网络层和区块链层4 层架构,如图2 所示。其中,硬件层中内嵌单片机的物理模型作为实际发用电方主体,工控机作为控制终端;控制层为仿真平台的核心,实现硬件层到区块链层的数据交互;网络层实现各控制终端间的通信;区块链层负责撮合已提交的电能交易请求,记录各笔交易。控制层向区块链层提交交易报单,区块链层向控制层反馈成交信息;控制层软件与硬件层单片机间传输数字信号,使设备发用电状态与电能交易成交情况相联系。
图1 分布式能源交易仿真平台实物图Fig.1 Physical map of simulation platform for distributed energy trading
图2 分布式能源交易仿真平台整体架构Fig.2 Overall architecture of simulation platform for distributed energy trading
硬件层嵌入单片机以采集物理设备的发用电状态并传输控制信号;限于实验条件,本文中的物理设备以物理模型及传感器等来模拟,但此种信号的传输方式适用于目前大多数实际物理设备,具备一定的通过性。同时,工控机作为硬件层的控制终端,与个人计算机相比,具有成本低廉、易安装拆卸、电源强度可靠等优点,能够适应实际工程项目的需要。以太坊开源平台封装的通信机制已被众多去中心化应用(decentralized application,DApp)验证是可靠的,无须做额外改动;网络层基于此通信机制,最终通过网线(或无线网卡)连接方式形成点对点通信的局域网架构。
控制层主体通过Python 程序实现;Python 兼容众多平台,可支持灵活丰富的以太坊、单片机交互;相较于其他编程语言,通过Python 将物理-信息交互接口封装成类库,能够极大地提升开发效率。
硬件层共包含8 个模块,分别为光伏电池模块、风力发电机模块、储能电池模块、工厂模块、楼宇模块、充电桩模块与输电线模块等。每个模块均包含1 个物理模型、1 个控制终端与1 个显示屏。其中,物理模型代表实际分布式能源交易市场中的发用电主体,配备有外部控制接口,支持控制终端的智能管理;显示屏实时展示该主体的运行状态与成交信息。
1.1.1 光伏电池模块
光伏电池模块由1 块光伏电池板、3 个光敏传感器、2 个舵机以及1 个可旋转的支架组成。光伏电池模块通过光敏传感器实时读取当前3 个维度的光照强度,将其转化为电压信号传送给单片机。
单片机根据传感器返回的电压信息,通过串口设备向舵机发送指令,控制舵机转动。当左右两侧传感器的数值超过设置的阈值时,单片机向串口发送水平转动的指令;当上侧传感器的数值超过设置的阈值时,单片机向串口发送垂直转动的指令;当3 个传感器的数值均小于相应的阈值时,转动停止。通过上述控制方式,光伏电池板能够近360°地追溯光源;此特性能够提高发电效率,较好地模拟当前光伏电池板的运行情况。
1.1.2 风力发电机模块
风力发电机模块由1 个等比例缩小的风力发电机模型与1 个振动传感器组成。当风力发电机模型受到外部风力时,传感器就会感受到空气振动,并向电机控制芯片发送高电平信号,驱动电机带动叶片转动固定的时长。此时,风力发电机模型进入发电状态。
1.1.3 储能电池模块
储能电池模块由1 个电池基座和3 个灯环组成;灯环自下而上分别对应0%~25%、25%~50%、50%~75% 和75%~100% 的电池电量区间。当前,电池电量可以从亮起灯环的数量确定。储能电池作为一种广泛使用的储能装置,能够避免分布式电源发电量过剩导致的电能浪费以及用电方需求过大导致的供不应求,从而有利于电网的稳定运行。
1.1.4 工厂模块
工厂模块由1 个工厂外壳模型、1 个控制旋钮、8 条传送带组成。可以通过调节控制旋钮控制工作的传送带数量。同时工作传送带的数量越多,工厂的用电量也就越大。
1.1.5 楼宇模块
楼宇模块由1 个办公楼模型和2 位发光二极管(light-emitting diode,LED)组成;LED 自下而上分别对应1 档、2 档、3 档的光照用电需求。
1.1.6 充电桩模块
充电桩模块由2 个充电桩基座与1 个电动汽车模型组成。电动汽车有剩余电量时,绕轨道行驶;电动汽车电量耗尽时,停于充电桩前等待充电。充电桩基座配置电量显示屏,实时展示电动汽车充电时的荷电状态(state of charge,SOC)状态;SOC 状态分 为0%~20%、20%~40%、40%~60%、60%~80%、80%~100%五档。
1.1.7 输电线路模块
输电线路模块由若干条互相连接、闪烁方向可控的LED 灯带组成,能够更直观地反映仿真平台中电能的流向。每当有电力交易达成时,成交双方之间的灯带将以跑马灯形式闪烁,代表发电方正向用电方传输电能。
1.1.8 工控机
各市场主体模块均配备1 台工控机,型号及运行参数见附录A。工控机作为硬件层物理模型的智能管理者和控制层的执行载体,与物理模型内嵌单片机通用串行总线(universal serial bus,USB)连接。工控机具备内存容量充足、小巧轻便以及多系统兼容性好等优点,符合分布式能源交易仿真平台对于处理器的要求。
1.1.9 显示屏
各市场主体模块均配备1 块显示屏,可显示15 行信息,每行25 个字符。显示屏实时展示对应模块的工作状态信息、市场交易信息,以及对应节点的区块链信息;各项信息均随交易进程变化。例如,某一时刻储能电池模块显示屏展示的主要信息如表1所示。
表1 显示屏展示信息Table 1 Information displayed on screen
控制层是仿真平台整体架构的核心,可实现硬件层到区块链层的数据交互。不同市场主体的控制层不尽相同,但均包含4 个基本控制模块,并且各基本控制模块间呈并列运行状态。4 个基本控制模块的功能详述如下:
1)自由报价模块。自由报价模块负责读取硬件层物理模型的运行状态,并根据工作状态向区块链层提供电能交易请求。
2)“挖矿”模块。“挖矿”模块根据区块链上的请求队列状态,决定节点是否应打包、生成区块。
3)区块链信息展示模块。区块链信息展示模块负责实时更新区块链的运行状态,并将其展示在硬件层的显示屏上。
4)市场交易信息展示模块。市场交易信息展示模块负责读取、展示存储于区块链层的市场成交信息,并相应控制硬件层的物理模型,并改变运行状态。
控制层的物理载体为工控机,其与硬件层、区块链层交互采用Python 实现。
网络层在物理上主要由1 台路由器和网线(或无线网卡)实现。8 台工控机在同一局域网内通过有线或无线方式连接至同一路由器,享有唯一、固定的局域网互联网协议(Internet protocol,IP)地址。在仿真平台运行前,各工控机间通过文件传输协议(file transfer protocol,FTP)向其余所有工控机传输包含自身局域网IP 地址以及区块链节点标识号的文件数据,并等待区块链节点启动并互联。
区块链层基于以太坊(Ethereum,ETH)开源平台的私有链架构,以适应仿真平台高速的数据传输与交易处理需求。
Geth 是基于Go 语言的以太坊官方客户端软件,其提供了一个交互式命令控制台,能够新建、互联、控制区块链节点并监视其运行状态。以太坊智能合约基于Solidity 语言开发,并通过在线编辑器Remix 编译。
仿真平台采用了一种基于挂牌交易的去中心化能源交易所区块链架构[21],并部署了对应的智能合约。智能合约包含限价交易、市价交易、撤单、最优报价查询、转账、发用电量反馈等调用接口。
能源交易场景涉及法币与链上代币的兑换。采用的双币制方案如下:
1)以太坊私有链以太币。在以太坊权威证明(proof of authority,PoA)的共识机制下,节点生成区块将不再获得以太币奖励,因此,以太币在区块创建伊始分配,并用于合约发布与提交交易请求。
2)合约账户余额。设计智能合约为账户增加1 个新的余额属性,法币与代币的兑换比例为1∶100。用户在现实中向管理中心转账X元;管理中心为区块链中账户调用发币合约函数,并在该用户的余额中增加100X代币。合约账户余额可用于电量交易、支付保证金等。
基于区块链的分布式能源交易仿真平台的硬件层主体为内嵌Arduino 单片机的物理模型,具备可交互特性,具体表现为:1)物理模型的电量交易需求随外部环境变化而变化;2)物理模型根据达成的能源交易实时改变运行状态。硬件层的相关控制通过Arduino 及Python 实 现。
Arduino 是一款开源电子原型平台,包含硬件(Arduino 电路板)和软件(Arduino IDE)两大组件[22]。内嵌Arduino 电路板示意图及参数见附录B和附录C。
Arduino 电路板通过多样化的传感器感知环境,并通过灯光、电动机等其他的控制设备反馈。将Arduino IDE 编写的程序编译成二进制文件,并烧录进Arduino 电路板的微控制器中,以实现对Arduino电路板的自动控制。Arduino IDE 程序中储能电池模块的循环控制代码见附录D。
Arduino IDE 程序读取USB 接口传输的数字信号,改变或反馈物理的运行状态。用Python 编写可简化信号传输指令模块,形成面向区块链开发者的外部接口。该Python 库包含command 与st_utill 这2 个模块。其中,command 模块定义了对应不同物理模型的类与控制方式,st_utill 模块定义了USB 接口的选取与数据传输格式。表2 展示了command 模块中部分类的定义与控制方式。
表2 command 模块中部分类的定义与控制方式Table 2 Definition and control mode of some classes in command module
以储能电池为例,通过Python 库外部接口控制物理模型运行状态的步骤如下:1)导入command与st_utill 模块;2)将USB 接口实例化;3)将储能电池模块实例化;4)向USB 实例化对象传输对应储能电池实例化对象中控制函数的数字信号,如USBInstance.send(BatteryInstance.get())。
仿真平台的区块链层采用以太坊私有链架构。首先,需要初始化区块链创世区块配置;然后,新建区块链节点,并部署分布式能源交易智能合约。实际运行时,仅需启动预先设置的区块链节点,即可调用智能合约中的函数,参与分布式能源市场交易。
创世区块是区块链的第1 个区块,是该区块链中所有区块的共同祖先。创世区块拥有唯一的哈希标识,规定该区块链的运行法则。以太坊私有链的创世区块参数设置如表3 所示。
表3 以太坊私有链的创世区块参数设置Table 3 Settings of the creation block of the Ethereum private chain
需要说明的是,在以太坊的PoA 共识机制下,节点不会获得生成区块奖励,但打包区块可成功获得区块中包含所有交易的手续费(gas);此机制保留了gas 以区分交易的优先级。
为满足合约发布和提出交易请求,需要将创世区块配置生成json 文件,并在同一目录下使用geth init 命令新建区块链节点,然后,在geth 控制台中为每个节点建立具有一定初始以太币的账户,用于合约发布与提出交易请求。
每个区块链节点初始启动时处于孤立状态,需要向任一已知节点发送连接请求,以加入该私有链网络。不同工控机中的区块链节点相互连接,需要满足以下条件[23]:1)创世区块配置(json 文件)相同;2)处于同一个局域网内;3)网络ID 标识(chainID)相同。
在满足以上条件的前提下,需使用admin.nodeInfo 命令查询自身节点enode 标识与局域网地址,并通过FTP 连接向其他工控机传输包含上述信息的文件;区块链节点间通过包含节点enode 标识、节点IP 地址、geth 控制台通信端口号3 个要素的admin.addPeer 命令实现相互连接。
命令返回状态为True,表示相互连接成功。随后,以拥有最高区块的节点为基准,各节点间开始区块同步,直至所有节点的区块高度相同。
分布式能源交易仿真平台采用了一种点对点(peer to peer,P2P)的交易机制[21]。该交易机制中,一次完整的交易周期包含交易阶段与结算阶段。上一交易周期的结算阶段与下一交易周期的交易阶段同时进行。其中,交易阶段包括P2P 交易阶段;结算阶段包括交割阶段、绿证流转阶段。
对应上述交易机制,分布式能源交易的智能合约设计方案如下:交易阶段包含获取通证、限价交易、撤单、市价交易、预付费等接口;结算阶段包含发电量反馈、用电量反馈、转账等接口。
首先,通过在线编辑器Remix 编译智能合约,获取对应的二进制编码文件与应用程序二进制接口(application binary interface,ABI),并在任一区块链节点上提交部署合约请求。其中,ABI 接口定义了该智能合约可调用函数的名称、输入输出数据格式、gas 消耗量等参数。然后,该请求被矿工挖出并记录于链上后,自动向请求发起者返回包含该智能合约的地址与区块哈希值。处于同步状态的节点将实时更新区块高度,获取成功部署的智能合约信息。
仿真平台用户可利用Python 的Web3 库调用智能合约,以发起交易请求及确认电量交割。具体操作为:1)检验节点互联状态;2)检验状态为同步后,调用进程间通信(inter-process communication,IPC)文件;3)解锁账户,并核对地址,核对有效则继续,无效则重新解锁;4)定义智能合约的ABI 接口;5)定义智能合约的部署地址;6)通过ABI 接口与部署地址两要素创建智能合约的Contract 实例;7)利用Web3 库Contract 类下function 函数调用智能合约。
在控制层,仿真平台通过Python 控制程序的报价模块、区块链展示模块、市场信息展示模块与区块链层交互。本节以工厂为例阐述模块逻辑,伪代码见附录E。
报价模块负责根据硬件工作状态发起交易请求。工厂的用电量与运行纽带数成正比,可自由调节。因此,报价模块设定如下:在交易阶段伊始(每一交易周期为600 s),自动读取工厂的运行纽带数,以此为依据预计本周期内工厂的用电量;然后,根据设定的交易策略,提交合适的限价订单。
区块链信息展示模块实时读取当前区块链运行状态,并展示在相应模块的显示屏上。该模块监视区块链系统状态,不涉及具体业务逻辑,使得节点宕机、节点异步、请求阻塞等异常情况能被及时发现;同时,该模块能够展现各节点轮流担任区块的生成者,印证区块链系统多方主导、社区共治的价值。
市场交易信息展示模块实时读取当前交易市场成交信息、待出清信息,并展示在相应模块的显示屏上。该模块为市场成员设定交易策略提供参考,保障市场成员的数据共享与信息同步,并为成交双方提供成交信息所在区块高度与交易哈希,作为不可篡改的交易凭证。
基于区块链的分布式能源交易仿真平台采用P2P 交易机制。一个交易周期设定为10 min,前8 min 为交易阶段,后2 min 为W111ii 结算阶段。在交易阶段,各模块可采取的P2P 交易行为包括:
1)提交限价报单。买(卖)方指定成交价格及成交电量,等待卖(买)方提交市价报单成交。
2)提交市价报单。买(卖)方指定数量,但不设定价格,立即与当前市场最优卖(买)方限价报单成交。
3)撤单。买(卖)方放弃购买(出售)电量,清除自身限价报单信息。
在交易阶段开始时,各用电方模块首先根据自身运行状态,提交限价报单;在交易阶段内,发电方模块受外部条件触发,自动提交市价报单,匹配最优的限价报单。交易成功匹配后,买方即刻向卖方传输电量。输电线实时更新电量传输情况,显示屏实时更新市场成交情况。结算阶段中,买卖双方自动根据交易阶段实际交割电量结算电费。
采用18:00—18:10 时段内的一轮分布式能源交易情况进行验证。各时刻限价报单参数如表4所示。
表4 买方限价报单参数Table 4 Parameters of price limited orders of buyers
18:00,各买方模块根据18:00—18:10 内的购买需求,提交限价报单,参数如表4 所示。该笔请求的区块链信息如下:区块高度为267;区块生成者为0xCf4C3CE492deCB3D17850Fc1ccB 和dD3B9F22 3755B(光伏);区块哈希为0x3954c761ef0d9f8b572 fee19686e7165 和 b316f3979e844b6b3a47d2b37a44 1789。
18:02,光伏电池、风力发电机分别受外部触发,提交报量为10 kW·h 和8 kW·h 的市价报单,并自动匹配最优的限价报单。该笔请求的区块链信息如下:区块高度为325;区块生成者为0xDff884f75c1 dC49040f2EF57e5F100C1427B02CF(储能电池);区块哈希为0x00060f2ad289c39be2c9ac24b72374 affe77e38507a432b955e7cbb9abfbd7d1。
18:05,由于长时间没有交易匹配,办公楼选择将剩余7 kW·h 用电需求撤单;充电桩选择将报价提高至70 代币/(kW·h)。该笔请求的区块链信息如下:区块高度为414;区块生成者为0xe17cf648b9e1 cb23033f3bdf3dc4a81bae617eca(充电桩);区块哈希为0x6141e9ab7b81d5ff31bb96842a6c00c75f62e6796 2cb43712e76e0f9b03db42e。
18:07,光伏电池、风力发电机再次受外部触发,分别提交报量为20 kW·h、10 kW·h 的市价交易报单,并自动匹配最优的限价交易报单。该笔请求的区块链信息如下:区块高度为470;区块生成者为0xCf4C3CE492deCB3D17850Fc1ccBdD3B9F22375 5B(光伏);区块哈希为0x7aeb523dac0df264de54af3 b9bd28f11665d39f3f82ea5a97f4144e18342f980。
18:08,交易阶段结束,自动进入结算阶段电费。该交易周期内的市场成交结果如表5 所示。
表5 分布式能源市场成交结果Table 5 Transaction results of distributed energy market
展示用例运行结果表明:
1)基于区块链的分布式能源交易仿真平台能够快速反馈发用电模块的运行状态,并在交易阶段内根据模块需求向以太坊私有链提交合适的交易报单;
2)区块链作为一种去中心化技术,能够在没有权威机构的场景下,维持各节点的交易记录一致,实现分布式能源交易的自组织、自运行;
3)基于区块链的分布式能源交易仿真平台将区块链层的数据流、信息流在硬件层上以可视化形式直观展现,验证了区块链的数据共享、社区共治、记录溯源等价值。
仿真平台以可交互、用户友好的方式,能够从分散式主体的角度展现区块链在分布式能源交易场景下的应用价值:
1)数据共享与同步。仿真平台中各市场主体模块均能够获取市场中的最优报单信息,并通过配备的显示屏实时展示。附录F 图F1 为展示用例中18:02 时各主体显示屏展示的最优报单信息,验证了区块链能够解决发用电双方信息不对等的问题,打破分布式能源市场内各主体间的信息壁垒。
2)社区共治。仿真平台中各市场主体模块轮流充当规则执行者,负责打包固定时段内的交易结果,除规则执行者外的其他市场主体模块可以验证交易结果的正确性;各时段的规则执行者在显示屏上实时展示。由附录F 图F2 可以看出,不同时刻办公楼模块显示屏展示的规则执行者不同,验证了区块链能够赋予各市场主体平等的执行权与监督权,解决了一定规模下分布式能源交易缺乏上层统一机构管理调度的难题。
3)记录溯源。被确认上链的交易记录具有可追溯特性。显示屏实时展示对应市场主体上一交易周期的成交记录;各市场主体模块均能够通过交易被打包的区块高度追溯历史交易。附录F 图F3 为展示用例中18:02 时办公楼模块显示屏展示的上一周期成交信息,验证了区块链的可追溯特性能够实现数据的快速检索,便于交易双方的数据统计与清算。
在该仿真平台架构下,市场主体(区块链节点)提交交易请求需要经过以下阶段:物理电力数据采集、物理电力数据读取、物理电力数据上链、链上数据处理、处理结果响应、结果反馈至物理设备。其中,目前多数研究搭建的单一区块链信息平台仅实现了链上数据处理与处理结果响应阶段,尚未考虑物理电力数据采集、物理电力数据读取、物理电力数据上链、结果反馈至物理设备等阶段的数据交互时延,即本文“物理-信息”的体现。
运行效率是分布式能源实时交易场景需要考虑的关键因素,具体表现为请求确认时间与软硬件数据交互时间。请求确认时间表示从区块链节点发起请求到该请求被打包为区块上链,并受到全部节点认可的时延,即链上数据处理与处理结果响应阶段的时延;软硬件数据交互时间表示控制层接收硬件层状态改变信号或硬件层接收控制层控制信号的时延,即物理电力数据采集、物理电力数据读取、物理电力数据上链、结果反馈至物理设备等阶段的时延。
本文在以太坊平台的PoA 共识机制下,设定出块间隔为2 s,测试100 次请求确认时间、软硬件数据交互时间,以及期间内计算、存储资源消耗量,测试结果与平均值如图3 所示。
图3 以太坊PoA 共识机制下的性能测试结果Fig.3 Performance testing results of Ethereum PoA consensus mechanism
由图3 可知,软硬件交互时间短于请求确认时间,但仍处于同一数量级(毫秒)下,不可被忽略;100 次测试期间内,计算资源消耗量维持在10%~15%区间内,存储资源消耗量基本与请求发起总数成线性关系。总之,在上述技术架构下,秒时间级别的请求确认时间与软硬件数据交互时间、较低的资源消耗量能够基本满足一定规模下分布式能源实时交易的应用需求;但在更大的场景规模下仍存在去中心化、可扩展性、安全性的三角矛盾,能源区块链技术架构仍需进一步优化。
需要说明的是,本文提出的基于区块链的分布式能源交易物理-信息仿真平台采用以太坊的私有架构,但其中应用的软硬件数据交互接口及交易流程可拓展至联盟链、公有链;公有链、联盟链、私有链之间的区别在于准入机制不同,并不影响节点部署后数据交互接口的实现。
当前,能源区块链应用的研究尚未涉及区块链与智能设备的数据交互方式,并缺少实际工程环境下的区块链系统性能测试模拟。为此,提出了基于区块链的分布式能源交易物理-信息仿真平台。模拟测试结果表明,综合考虑软硬件各方面影响因素,以太坊的PoA 共识机制架构已基本满足一定规模下分布式能源实时交易的性能要求。
受限于实验条件,本文设计的物理-信息仿真平台仅模拟了8 个区块链节点/能源主体。未来的研究方向包括:通过软件仿真模拟物理设备与区块链的通信,评估大规模能源区块链应用的表现;通过网络拓扑优化、区块链分区等方式优化区块链网络架构。