スナック感覚で触れてみる OCPP 2.0 🍟
前書き
EV充電器を制御するためのプロトコルであるOCPP(Open Charge Point Protocol)。
メジャーバージョンとして1.6、2.0の2つがあり、共に非互換のため、充電器メーカーとCPO(Chaging Point Operator)はどちらに対応するかをよくよく熟慮する必要があります。
この記事ではOCPP2.0の特徴の1つ(と私が勝手に思っている)であるEMS(Energy Management System)など外部システムとの連携をベースに、仕様の一部を紹介します。
本文
OCPP 2.0では、スマート充電に関する機能が大幅に強化され、EMSとの連携がより柔軟かつ高度に行えるようになりました。CSMS(充電ステーション管理システム)がハブとなり、EMSからの指示を解釈して充電器に伝える構成が一般的です。
連携のアーキテクチャ
まず、登場するコンポーネントと役割を整理します。
- EV (電気自動車): 充電される対象。ISO 15118対応車両は、自身の充電ニーズ(出発時刻、必要電力量など)を充電器に伝えられます。
- 充電器 (Charging Station): OCPP 2.0を実装し、CSMSと通信します。EVの充電を直接制御します。
- CSMS (Charging Station Management System): 複数の充電器を管理・監視する中央システム。EMSからの指示を受け取り、OCPPメッセージに変換して充電器に送ります。
- EMS (Energy Management System): 事業所や家庭全体の電力需給を管理するシステム。太陽光発電の状況、電力料金、デマンドレスポンスの指令などに基づき、最適な充電電力を計算し、CSMSに指示を出します。
通信フロー:
EMS <--> (API連携) <--> CSMS <--> (OCPP 2.0) <--> 充電器 <--> (PLC/CAN) <--> EV
ユースケース別プロトコル例
ここでは、代表的な3つのシナリオにおける具体的なメッセージのやり取りを解説します。
ケース1:デマンドレスポンスによる出力制御
電力会社からの要請(デマンドレスポンス)に応じて、EMSが充電器全体の出力を一時的に抑制するケースです。
シナリオ: EMSが、電力網の安定化のため、15分間、充電器の最大出力を1台あたり7kWに制限するようCSMSに指示します。
-
EMS → CSMS (API)
- EMSは独自のAPIなどを通じて、CSMSに出力制限を要求します。(例: { "limit": 7000, "duration": 900 })
-
CSMS → 充電器 (OCPP: SetChargingProfile)
- CSMSは、EMSからの指示をOCPPのSetChargingProfileメッセージに変換して充電器に送信します。これにより、特定の期間における充電スケジュールを強制的に適用します。
{
"chargingProfileId": 101,
"transactionId": "some-transaction-id",
"chargingProfile": {
"id": 101,
"stackLevel": 1,
"chargingProfilePurpose": "TxProfile",
"chargingProfileKind": "Absolute",
"recurrencyKind": "Once",
"chargingSchedule": [
{
"id": 201,
"duration": 900, // 制限期間(秒)
"startSchedule": "2025-10-04T14:00:00Z",
"chargingRateUnit": "W",
"chargingSchedulePeriod": [
{
"startPeriod": 0,
"limit": 7000.0 // 出力上限(ワット)
}
],
"minChargingRate": 1000.0
}
]
}
}
- CSMSは、EMSからの指示をOCPPのSetChargingProfileメッセージに変換して充電器に送信します。これにより、特定の期間における充電スケジュールを強制的に適用します。
-
充電器 → CSMS (OCPP: SetChargingProfileResponse)
- 充電器はプロファイルを受け入れたことを"Accepted"ステータスで応答します。
-
充電器
- 充電器は受信したプロファイルに従い、即座に充電出力を7kW以下に制御します。
ケース2:太陽光発電(PV)の余剰電力活用
太陽光発電の発電量に合わせて充電出力をリアルタイムに変動させ、余剰電力を最大限EV充電に活用するケースです。
シナリオ: EMSが現在の余ryo剰電力を5kWと計算し、その範囲内で充電するように指示します。
-
EMS → CSMS (API)
- EMSはリアルタイムの余剰電力(5kW)をCSMSに通知します。
-
CSMS → 充電器 (OCPP: NotifyChargingLimit)
- CSMSは、EMSからの情報を基にNotifyChargingLimitメッセージを生成し、充電器に送信します。このメッセージは、外部のエネルギーマネジメントシステムからの電力制限を通知するためのものです。
{
"chargingLimit": {
"chargingLimitSource": "EMS", // 制限のソースがEMSであることを示す
"isGridCritical": false
},
"chargingSchedule": [
{
"id": 301,
"chargingRateUnit": "W",
"chargingSchedulePeriod": [
{
"startPeriod": 0,
"limit": 5000.0 // 現在の余剰電力に合わせた出力上限
}
]
}
]
}
注: NotifyChargingLimitは応答を必要としない通知メッセージです。
- CSMSは、EMSからの情報を基にNotifyChargingLimitメッセージを生成し、充電器に送信します。このメッセージは、外部のエネルギーマネジメントシステムからの電力制限を通知するためのものです。
-
充電器
- 充電器は通知された電力上限(5kW)を超えないように充電を制御します。
-
充電器 → CSMS (OCPP: TransactionEvent)
- 充電出力が変更されると、充電器はTransactionEventメッセージ("eventType": "Updated")を送信し、現在の充電状況(電力、電力量など)をCSMSに報告します。これにより、CSMSとEMSはリアルタイムで状況を把握できます。
ケース3:EVからの情報を活用した最適充電(ISO 15118連携)
ISO 15118に対応したEVから得られる情報(出発時刻、目標SOCなど)を基に、EMSが最適な充電スケジュールを作成するケースです。
シナリオ: EVが充電器に接続され、「明日の朝7時まで(DepartureTime)にバッテリーを80%(TargetSOC)まで充電したい」というニーズを伝えます。
-
EV → 充電器 (ISO 15118)
- EVは充電器とのPlug & Charge (PnC) 通信シーケンスの中で、自身の充電ニーズを伝えます。
-
充電器 → CSMS (OCPP: NotifyEVChargingNeeds)
- 充電器は、EVから受け取った情報をNotifyEVChargingNeedsメッセージでCSMSに転送します。
{
"evseId": 1,
"maxScheduleTuples": 10,
"chargingNeeds": {
"requestedEnergyTransfer": "AC_single_phase",
"departureTime": "2025-10-05T07:00:00Z", // 出発時刻
"acChargingParameters": {
"energyAmount": 40000, // 要求電力量 (Wh)
"evMinCurrent": 6,
"evMaxCurrent": 32,
"evMaxVoltage": 230
}
}
}
- 充電器は、EVから受け取った情報をNotifyEVChargingNeedsメッセージでCSMSに転送します。
-
CSMS → EMS (API)
- CSMSは受け取ったEVのニーズをEMSに伝えます。
-
EMS → CSMS (API)
- EMSは、EVのニーズ、電力料金の予測、他の電力需要などを考慮して、最適な充電スケジュール(例:深夜の安い時間帯に重点的に充電するスケジュール)を作成し、CSMSに返します。
-
CSMS → 充電器 (OCPP: SetChargingProfile)
- CSMSは、EMSが作成したスケジュールをSetChargingProfileメッセージで充電器に設定します。これにより、EVの要求を満たしつつ、エネルギーコストを最小化する充電が実現されます。
まとめ
OCPP 2.0は、以下のようなメッセージを活用することで、EMSとの高度な連携を実現します。
| メッセージ | 主な役割 |
|---|---|
| SetChargingProfile | CSMSから充電器へ、絶対的または相対的な充電スケジュール(電力・電流の上限)を指示する。 |
| NotifyChargingLimit | EMSなどの外部システムからのリアルタイムな電力制限を充電器に通知する。 |
| NotifyEVChargingNeeds | (ISO 15118連携時) EVからの充電ニーズ(出発時刻など)をCSMS/EMSに伝える。 |
| TransactionEvent | 充電中の状態変化(電力、電力量、SOCなど)をリアルタイムでCSMSに報告する。 |
| これらのプロトコルを組み合わせることで、単なるEVへの充電だけでなく、デマンドレスポンスへの対応、再生可能エネルギーの有効活用、電力系統の安定化といった、より大きなエネルギーマネジメントの枠組みにEV充電を統合することが可能になります。 |
あとがき
OCPP1.6に親しむ方であれば、2.0のユースケースやプロトコルの内容に戸惑うのではないでしょうか。
新たなバージョンであるOCPP2.1も既にOCAで構想されており、こちらは2.0と互換性あり。
我々のようなCPOはEV充電器のスペックに合わせてサービス開発を行うことがありますが、逆に新たなユースケースや価値をEV充電器メーカー様に提案・協議してソリューションを生み出すこともあります。
ハードウェアとの二人三脚に興味がある方は、ぜひこの世界をより深く覗いてみてください。
Discussion