一、简介
OCPP1.6 分为-J、-S,不用关注-S,目前基本只用-J,如下。那好,主包接下来的讲解,站在充电桩角度的哈~

因此,主包推荐如下学习文档:
1、ocpp-1.6 edition 2,OCPP 业务层报文,重要!!!

2、ocpp-j-1.6-specification,HTTP 握手、Cjson帧格式,重要!!!

3、其他,按需学习


二、整体流程图
在OCPP1.6 整个流程中,从TCP连接开始的流程如下,主要有:
1、TCP 三次握手(TCP 流程主包这里不赘述)
2、若需加密,则还需要走TLS流程(TLS 流程主包这里不赘述)
3、HTTP 握手(HTTP 转 WebSocket)
4、OCPP1.6 的业务流程

三、HTTP 握手
在 TCP 建立后,紧接着就是发起一次 HTTP 握手了。
3.1、URL
URL 的全称是 Uniform Resource Locator,中文译为统一资源定位符。URL 是互联网上用来标识和定位资源(如网页、图片、文件等)地址的字符串,也就是我们平常说的"网址"。
通常格式:协议://主机名:端口/路径?查询参数#片段
所以 EVSE 在连接 OCPP 平台前,肯定是要有 URL 才能连接的,OCPP 的 URL 如下:

3.2、HTTP Req
当 TCP 连接后,EVSE 发起 HTTP 握手请求,请求内容如下:

1、黑色加粗字体是固定的
2、其他根据 URL 填充
3、KEY值生成规则:

3.3、HTTP Res
OCPP 平台收到 EVSE 的 HTTP Req 后,需要返回如下的 HTTP 响应信息

As we all know,当 HTTP Req 的路径或其他信息出错了,平台可以回复 404 等其他错误码。
3.4、Accept 值


因此,EVSE 在收到 HTTP Res 响应后需要做以下验证:
1、HTTP 响应码是否为 101
2、用自身生成的 KEY 进行同样的运算得到的 My_Accept 和 Accept 对比是否一致
至此,HTTP 握手阶段工作完成,后续 EVSE 和 OCPP 平台的通信机制,将遵循 WebSocket
四、WebSocket
4.1、为啥要用 WebSocket 呢?
HTTP 的机制是“请求-响应”,只能客户端发起Req,服务端响应Res,这种机制不方便。因此,我们在握手的时候发起 HTTP请求的同时 Upgrade WebSocket,后续通信机制变为WebSocket。
WebSocket 的核心价值:全双工(Full-Duplex)持久连接
1、一次握手,长期保持连接
2、服务器和客户端都能主动发送消息、主动断开、主动探测心跳 Ping Pong
3、这正是 OCPP 需要的(中央系统要主动下发"远程启动充电"等指令)
4.2、WebSocket 帧格式
4.2.1、帧格式




4.2.2、Hi 举例说明




4.2.3、举例说明

4.2.4、多包发送

4.3、WebSocket 通信机制
WebSocket 阶段,简单来说就三个,数据传输、心跳、断连



4.3.1、三种心跳
OCPP 通信基于三层分别是 TCP、WebSocket、OCPP应用层,因此通常会有三层的心跳机制。

4.3.2、断连处理



五、业务层报文定义
在 HTTP 握手通过以后,接下来就是进行业务流程的通信了,OCPP 报文是基于 Cjson 帧格式的。
5.1、请求/响应的机制
首先,我们知道业务层的通信机制也是 请求/响应 的模式

5.2、OCPP 帧格式
5.2.1、消息类型

5.2.2、消息ID

5.2.3、Call


5.2.4、CallResult

5.2.5、CallError




例如,当某个协议不支持的时候,可以如下回复 CallError

5.3、安全
关于 OCPP 安全方面的内容,可以参考 OCPP1.6 OCA,OCPP1.6 白皮书,下面简单讲解一下。

5.3.1、With TLS
What can I say,通信要安全就只能 TCP 连接后走 TLS 的四次握手咯,TLS 还可以选择单端or双端验证,验证双方的证书.....那主播这里就不讨论 TLS 内容,TLS 内容还是很多滴。


5.3.2、HTTP Basic 认证
当 TLS 阶段完成加密和证书验证后,接着就是 HTTP 握手,这里要进行 HTTP Basic 认证。





六、业务层报文
接下来,将要讲解 OCPP 业务层的报文了,重点内容来了~,那主包将用正常充电流程(例如刷卡启动)的业务场景,来讲解报文吧,其他的业务场景自行阅读协议学习吧~
6.1、充电流程

6.2、报文详解
6.2.1、BootNotification
登录注册,上线通知


举例说明

6.2.2、Heartbeat
按 interval 定期发送,保持心跳

举例说明

6.2.3、StatusNotification
当桩状态变化时上报,如空闲->插枪->充电中....



举例说明

6.2.4、Authorize
当桩端启动(如刷卡启动),需要走鉴权,鉴权通过后才能 StartTransaction

举例说明

6.2.5、StartTransaction
启动充电事务,启动交易。

举例说明

6.2.6、MeterValues
充电中周期上报电表数据。

举例说明

6.2.7、StopTransaction
停止充电事务,停止充电

举例说明


七、总结
其他的业务场景流程,自行阅读 OCPP 文档学习吧,主包就将这么多~

7212

被折叠的 条评论
为什么被折叠?



