Skip to main content

电动汽车充电站OCPP模块规范

1. 系统概述

1.1 总体架构

graph TB
    subgraph "后端基础设施"
        CSMS[中央系统管理服务]
    end
    
    subgraph "电动汽车充电站"
        subgraph "您的职责范围"
            OCPP[OCPP通信模块]
            WS[WebSocket客户端]
            PARSER[消息解析器/生成器]
            QUEUE[消息队列]
        end
        
        subgraph "站点系统(现有)"
            STATION[站点控制器]
            HARDWARE[硬件控制器]
        end
    end
    
    CSMS <--> WS
    WS <--> OCPP
    OCPP <--> PARSER
    OCPP <--> QUEUE
    OCPP <--> STATION
    STATION <--> HARDWARE

1.2 模块用途

主要功能: 使用OCPP 2.0.1协议提供移动充电站与CSMS之间的双向通信

使用场景: 技术员将移动充电站运送给客户或运回基地充电。通过站点控制面板或CSMS移动应用程序控制充电。

接口:

  • 外部接口:与CSMS的WebSocket连接
  • 内部接口:与站点系统集成的API

1.3 OCPP模块方法表

站点端需要实现的方法

方法 描述 调用时机
initialize(config) 使用配置初始化模块 系统启动时
connect() 建立与CSMS的连接 初始化后
disconnect() 终止与CSMS的连接 关机/维护时
sendStationEvent(event) 发送站点事件 站点状态变化时
sendMeterData(data) 发送电表读数 充电期间每10秒
sendStatusUpdate(status) 发送状态更新 站点状态变化时
handleStartCharging(params) 处理开始充电命令 接收到CSMS命令时
handleStopCharging(transactionId) 处理停止充电命令 接收到CSMS命令时
handleDataRequest(requestType) 处理数据请求 接收到CSMS命令时
getStationStatus() 获取当前站点状态 CSMS请求时
getBatteryData() 获取站点电池数据 CSMS请求时
getLocationData() 获取站点GPS坐标 CSMS请求时

CSMS端需要实现的方法

方法 描述 调用时机
handleBootNotification(stationData) 处理站点启动通知 站点连接时
handleStatusNotification(status) 处理状态通知 站点状态变化时
handleTransactionEvent(event) 处理交易事件 充电开始/结束时
handleMeterValues(values) 处理电表读数 充电期间每10秒
handleNotifyEvent(event) 处理错误通知 发生错误时
sendRemoteStart(stationId, params) 发送远程启动命令 用户请求时
sendRemoteStop(transactionId) 发送远程停止命令 用户请求时
requestStationData(stationId, dataType) 请求站点数据 用户请求时
updateStationConfig(stationId, config) 更新站点配置 设置变更时

2. 移动充电站状态

2.1 主要站点状态

stateDiagram-v2
    [*] --> Standby
    Standby --> CustomerCharging: 技术员开始客户充电
    Standby --> StationCharging: 技术员开始站点充电
    CustomerCharging --> Standby: 客户充电完成
    StationCharging --> Standby: 站点充电完成
    
    note right of Standby
        站点已通电
        未进行充电
        准备操作
    end note
    
    note right of CustomerCharging
        客户车辆充电中
        每10秒发送数据
    end note
    
    note right of StationCharging
        站点自充电中
        每10秒发送数据
    end note

2.2 按状态分类的数据

2.2.1 "待机"状态(站点已通电,未进行充电)

发送给CSMS的数据:

{
  "stationStatus": "Available",
  "batteryLevel": 75,
  "batteryVoltage": 48.2,
  "batteryTemperature": 25.5,
  "location": {
    "latitude": 55.7558,
    "longitude": 37.6176,
    "accuracy": 10
  },
  "signalStrength": -65,
  "internalTemperature": 22.0,
  "outputVoltage": 0.0,
  "outputCurrent": 0.0,
  "outputPower": 0.0,
  "connectorStatus": "Available",
  "errorCodes": [],
  "lastMaintenanceDate": "2025-07-10T09:00:00Z"
}

发送频率: 状态变化时 + CSMS请求时

2.2.2 "客户充电"状态(客户车辆充电中)

每10秒发送给CSMS的数据:

{
  "stationStatus": "Charging",
  "transactionId": "TXN_123456",
  "transactionType": "customer_charging",
  "chargingStartTime": "2025-07-12T10:30:00Z",
  "chargingDuration": 1800,
  "energyDelivered": 5.2,
  "currentPower": 7200,
  "outputVoltage": 230.5,
  "outputCurrent": 31.2,
  "vehicleBatteryLevel": 65,
  "estimatedTimeToComplete": 2400,
  "batteryLevel": 68,
  "batteryVoltage": 47.8,
  "batteryTemperature": 28.0,
  "location": {
    "latitude": 55.7558,
    "longitude": 37.6176,
    "accuracy": 10
  },
  "signalStrength": -68,
  "internalTemperature": 32.0,
  "connectorStatus": "Occupied",
  "connectorTemperature": 35.0,
  "errorCodes": [],
  "chargingEfficiency": 92.5
}

发送频率: 充电期间每10秒

2.2.3 "站点充电"状态(站点自充电中)

每10秒发送给CSMS的数据:

{
  "stationStatus": "SelfCharging", 
  "transactionId": "TXN_SELF_789",
  "transactionType": "station_charging",
  "chargingStartTime": "2025-07-12T14:00:00Z",
  "chargingDuration": 3600,
  "energyReceived": 15.8,
  "inputPower": 5000,
  "inputVoltage": 220.0,
  "inputCurrent": 22.7,
  "batteryLevel": 85,
  "batteryVoltage": 49.2,
  "batteryTemperature": 30.0,
  "estimatedTimeToComplete": 1800,
  "location": {
    "latitude": 55.7520,
    "longitude": 37.6140,
    "accuracy": 5
  },
  "signalStrength": -72,
  "internalTemperature": 28.0,
  "connectorStatus": "SelfCharging",
  "chargingSource": "grid",
  "errorCodes": [],
  "chargingEfficiency": 94.2
}

发送频率: 充电期间每10秒

3. OCPP模块接口

3.1 与站点系统的集成API

flowchart LR
    subgraph "站点系统"
        CONTROLLER[站点控制器]
    end
    
    subgraph "OCPP模块API"
        direction TB
        IN[传入事件]
        OUT[传出命令]
        STATUS[状态查询]
        CONFIG[配置]
    end
    
    subgraph "CSMS"
        BACKEND[后端服务器]
    end
    
    CONTROLLER -->|事件| IN
    OUT -->|命令| CONTROLLER
    CONTROLLER -->|查询| STATUS
    CONTROLLER -->|设置| CONFIG
    
    IN -.->|OCPP消息| BACKEND
    BACKEND -.->|OCPP消息| OUT

3.2 来自站点的传入事件

{
  "eventType": "station_event",
  "events": [
    {
      "type": "cable_connected",
      "targetType": "customer|station",
      "evseId": 1,
      "connectorId": 1,
      "timestamp": "2025-07-12T10:30:00Z"
    },
    {
      "type": "charging_started", 
      "chargingType": "customer_charging|station_charging",
      "transactionId": "TXN_123",
      "evseId": 1,
      "connectorId": 1,
      "initiatedBy": "technician|remote",
      "timestamp": "2025-07-12T10:30:00Z"
    },
    {
      "type": "meter_reading",
      "chargingType": "customer_charging|station_charging",
      "evseId": 1,
      "readings": {
        "energy": 5.2,
        "power": 7200,
        "voltage": 230.5,
        "current": 31.2,
        "batteryLevel": 68,
        "batteryTemperature": 28.0,
        "vehicleBatteryLevel": 65,
        "estimatedTimeToComplete": 2400
      },
      "timestamp": "2025-07-12T10:31:00Z"
    },
    {
      "type": "charging_stopped",
      "chargingType": "customer_charging|station_charging", 
      "transactionId": "TXN_123",
      "reason": "technician_stopped|remote_stopped|completed|error",
      "finalEnergy": 8.5,
      "duration": 900,
      "timestamp": "2025-07-12T10:45:00Z"
    },
    {
      "type": "error_detected",
      "errorCode": "connector_lock_failure|overheat|power_loss|communication_error",
      "severity": "warning|alert|critical",
      "component": "charging_connector|battery|power_system|communication",
      "chargingType": "customer_charging|station_charging|none",
      "timestamp": "2025-07-12T10:35:00Z"
    },
    {
      "type": "status_changed",
      "evseId": 1,
      "connectorId": 1,
      "newStatus": "available|preparing|charging|self_charging|faulted|unavailable",
      "previousStatus": "available",
      "reason": "technician_action|remote_command|auto_transition|error",
      "timestamp": "2025-07-12T10:30:00Z"
    },
    {
      "type": "location_changed",
      "location": {
        "latitude": 55.7558,
        "longitude": 37.6176,
        "accuracy": 10,
        "address": "莫斯科,特维尔大街1号"
      },
      "movementDetected": true,
      "timestamp": "2025-07-12T10:30:00Z"
    }
  ]
}

3.3 发送给站点的传出命令

{
  "commandType": "csms_command",
  "commands": [
    {
      "type": "start_customer_charging",
      "evseId": 1,
      "chargingProfile": {
        "maxPower": 7200,
        "phases": 1,
        "duration": 3600
      },
      "estimatedCost": 500.0,
      "customerInfo": {
        "customerId": "CUST_001",
        "vehicleType": "Tesla Model 3"
      }
    },
    {
      "type": "start_station_charging",
      "chargingSource": "grid|solar",
      "maxInputPower": 5000,
      "targetBatteryLevel": 100,
      "chargingLocation": "base|customer_site"
    },
    {
      "type": "stop_charging",
      "transactionId": "TXN_123",
      "chargingType": "customer_charging|station_charging",
      "reason": "remote_stop|emergency_stop|maintenance"
    },
    {
      "type": "request_data",
      "dataType": "battery_status|location|diagnostics|transaction_history",
      "requestId": "REQ_001",
      "timeRange": {
        "from": "2025-07-12T00:00:00Z",
        "to": "2025-07-12T23:59:59Z"
      }
    },
    {
      "type": "update_configuration",
      "parameters": {
        "heartbeatInterval": 300,
        "meterValueSampleInterval": 10,
        "maxChargingPower": 7200,
        "emergencyContactNumber": "+7-495-123-4567"
      }
    },
    {
      "type": "set_location",
      "location": {
        "latitude": 55.7558,
        "longitude": 37.6176,
        "address": "莫斯科,特维尔大街1号",
        "locationType": "customer_site|base|service_center"
      }
    },
    {
      "type": "technician_notification",
      "message": "客户充电已完成。可以断开充电线。",
      "priority": "low|normal|high|urgent",
      "requiresAcknowledgment": true
    },
    {
      "type": "reset_station",
      "resetType": "soft|hard",
      "reason": "maintenance|error_recovery|firmware_update"
    }
  ]
}

4. OCPP通信流程

4.1 连接建立

sequenceDiagram
    participant Station as 站点系统
    participant OCPP as OCPP模块
    participant CSMS as CSMS服务器
    
    Station->>OCPP: 初始化连接
    Note over OCPP: 配置:服务器URL、API密钥、站点ID
    
    OCPP->>CSMS: WebSocket连接
    Note over OCPP,CSMS: wss://csms.server.com/ocpp/{stationId}<br/>Authorization: Bearer {apiKey}
    
    CSMS->>OCPP: 连接已接受
    
    OCPP->>CSMS: BootNotification
    Note over OCPP: 站点信息、固件版本
    
    CSMS->>OCPP: BootNotification响应
    Note over CSMS: 状态:已接受,心跳间隔
    
    OCPP->>Station: 连接已建立
    
    loop 心跳
        OCPP->>CSMS: 心跳(每个间隔)
        CSMS->>OCPP: 心跳响应
    end

4.2 按站点状态处理事件

4.2.1 "待机"状态(站点准备操作)

sequenceDiagram
    participant Technician as 技术员
    participant Station as 站点系统
    participant OCPP as OCPP模块  
    participant CSMS as CSMS服务器
    
    Note over Technician,CSMS: 站点已通电,等待命令
    Station->>OCPP: status_changed事件(Available)
    OCPP->>CSMS: StatusNotification(Available)
    CSMS->>OCPP: StatusNotification响应
    
    Note over Technician,CSMS: 技术员将充电线连接到客户车辆
    Technician->>Station: 充电线连接到客户车辆
    Station->>OCPP: cable_connected事件(customer)
    OCPP->>CSMS: StatusNotification(Preparing)
    CSMS->>OCPP: StatusNotification响应
    
    Note over Technician,CSMS: 技术员通过控制面板开始充电
    Technician->>Station: 开始客户充电
    Station->>OCPP: charging_started事件(customer)
    OCPP->>CSMS: TransactionEvent(Started,customer_charging)
    CSMS->>OCPP: TransactionEvent响应
    
    Note over Technician,CSMS: 替代方案:通过CSMS开始
    CSMS->>OCPP: RemoteStartTransaction
    OCPP->>Station: start_charging命令
    Station->>OCPP: 命令已接受
    OCPP->>CSMS: RemoteStartTransaction响应(Accepted)

4.2.2 "客户充电"状态(客户充电中)

sequenceDiagram
    participant Station as 站点系统
    participant OCPP as OCPP模块  
    participant CSMS as CSMS服务器
    
    Note over Station,CSMS: 客户充电激活
    
    loop 每10秒
        Station->>OCPP: meter_reading事件(客户数据)
        OCPP->>CSMS: MeterValues(客户充电数据)
        Note over OCPP: 包括:energyDelivered,currentPower,<br/>outputVoltage,vehicleBatteryLevel,<br/>站点batteryLevel,location
        CSMS->>OCPP: MeterValues响应
    end
    
    Note over Station,CSMS: 充电期间事件处理
    alt 充电错误
        Station->>OCPP: error_detected事件
        OCPP->>CSMS: NotifyEvent(充电错误)
        OCPP->>CSMS: StatusNotification(SuspendedEVSE)
    else 技术员完成充电
        Station->>OCPP: charging_stopped事件(user_stopped)
        OCPP->>CSMS: TransactionEvent(Ended)
        OCPP->>CSMS: StatusNotification(Available)
    else 远程停止
        CSMS->>OCPP: RemoteStopTransaction
        OCPP->>Station: stop_charging命令
        Station->>OCPP: charging_stopped事件(remote_stopped)
        OCPP->>CSMS: TransactionEvent(Ended)
    end

4.2.3 "站点充电"状态(站点充电中)

sequenceDiagram
    participant Technician as 技术员
    participant Station as 站点系统
    participant OCPP as OCPP模块  
    participant CSMS as CSMS服务器
    
    Note over Technician,CSMS: 技术员将站点连接到电源
    Technician->>Station: 连接到充电源
    Station->>OCPP: station_charging_started事件
    OCPP->>CSMS: TransactionEvent(Started,station_charging)
    CSMS->>OCPP: TransactionEvent响应
    OCPP->>CSMS: StatusNotification(SelfCharging)
    
    Note over Station,CSMS: 站点充电过程
    loop 每10秒
        Station->>OCPP: meter_reading事件(站点数据)
        OCPP->>CSMS: MeterValues(站点充电数据)
        Note over OCPP: 包括:energyReceived,inputPower,<br/>batteryLevel,batteryTemperature,<br/>estimatedTimeToComplete,location
        CSMS->>OCPP: MeterValues响应
    end
    
    Note over Station,CSMS: 站点充电完成
    alt 电池充满
        Station->>OCPP: station_charging_complete事件
        OCPP->>CSMS: TransactionEvent(Ended,BatteryFull)
        OCPP->>CSMS: StatusNotification(Available)
    else 技术员停止充电
        Technician->>Station: 停止站点充电
        Station->>OCPP: station_charging_stopped事件
        OCPP->>CSMS: TransactionEvent(Ended,UserStopped)
        OCPP->>CSMS: StatusNotification(Available)
    else 充电错误
        Station->>OCPP: error_detected事件(charging_fault)
        OCPP->>CSMS: NotifyEvent(站点充电错误)
        OCPP->>CSMS: StatusNotification(Faulted)
    end

4.3 CSMS命令处理

sequenceDiagram
    participant CSMS as CSMS服务器
    participant OCPP as OCPP模块
    participant Station as 站点系统
    participant Technician as 技术员
    
    Note over CSMS,Technician: 远程客户充电启动
    CSMS->>OCPP: RemoteStartTransaction(customer_charging)
    OCPP->>Station: start_customer_charging命令
    Station->>OCPP: 命令已接受
    OCPP->>CSMS: RemoteStartTransaction响应(Accepted)
    Station->>Technician: 通知:"开始客户充电"
    
    Note over CSMS,Technician: 站点数据请求
    CSMS->>OCPP: GetReport(Battery + Location)
    OCPP->>Station: request_data命令
    Station->>OCPP: 数据响应(电池75%,GPS坐标)
    OCPP->>CSMS: GetReport响应
    OCPP->>CSMS: NotifyReport(站点数据)
    
    Note over CSMS,Technician: 远程充电停止
    CSMS->>OCPP: RemoteStopTransaction
    OCPP->>Station: stop_charging命令
    Station->>Technician: 通知:"调度员停止充电"
    Station->>OCPP: 命令已接受
    OCPP->>CSMS: RemoteStopTransaction响应(Accepted)

5. 详细OCPP消息规范

5.1 传出消息(站点 → CSMS)

BootNotification(启动时)

{
  "reason": "PowerUp",
  "chargingStation": {
    "model": "从站点系统获取",
    "vendorName": "从站点系统获取", 
    "firmwareVersion": "从站点系统获取",
    "serialNumber": "从站点系统获取"
  }
}

StatusNotification(状态变化时)

{
  "timestamp": "从站点系统获取",
  "connectorStatus": "Available|Preparing|Charging|SuspendedEVSE|SuspendedEV|Finishing|Reserved|Unavailable|Faulted",
  "evseId": "从站点系统获取",
  "connectorId": "从站点系统获取"
}

TransactionEvent(交易事件)

{
  "eventType": "Started|Updated|Ended", 
  "timestamp": "从站点系统获取",
  "triggerReason": "ChargingStateChanged|ChargingRateChanged|EnergyLimitReached|TimeLimitReached|RemoteStop|RemoteStart|TechnicianStart|TechnicianStop|StationChargingStart|StationChargingComplete",
  "seqNo": "递增编号",
  "transactionInfo": {
    "transactionId": "从站点系统获取",
    "chargingState": "Charging|EVConnected|SuspendedEV|SuspendedEVSE|Idle",
    "chargingType": "customer_charging|station_charging"
  },
  "evse": {
    "id": "从站点系统获取",
    "connectorId": "从站点系统获取"
  },
  "customData": {
    "technicianId": "从站点系统获取",
    "customerInfo": "如果是客户充电则从站点系统获取",
    "chargingLocation": "从站点系统获取"
  },
  "meterValue": [
    {
      "timestamp": "从站点系统获取",
      "sampledValue": [
        {
          "value": "从站点系统获取",
          "measurand": "Energy.Active.Import.Register|Power.Active.Import|Voltage|Current.Import|Temperature",
          "unit": "kWh|kW|V|A|Celsius"
        }
      ]
    }
  ]
}

MeterValues(充电期间每10秒的遥测数据)

{
  "evseId": "从站点系统获取",
  "meterValue": [
    {
      "timestamp": "从站点系统获取",
      "sampledValue": [
        {
          "value": "从站点系统获取",
          "measurand": "Energy.Active.Import.Register|Power.Active.Import|Voltage|Current.Import|Temperature",
          "unit": "kWh|kW|V|A|Celsius"
        }
      ]
    }
  ]
}

NotifyEvent(错误和事件)

{
  "generatedAt": "当前时间",
  "eventData": [
    {
      "eventId": "唯一ID",
      "timestamp": "从站点系统获取",
      "trigger": "Alerting|Delta|Periodic",
      "eventType": "从站点系统获取",
      "component": {
        "name": "从站点系统获取"
      },
      "variable": {
        "name": "从站点系统获取"
      },
      "eventNotificationType": "HardWiredNotification|HardWiredMonitor|PreconfiguredMonitor|CustomMonitor"
    }
  ]
}

5.2 传入消息(CSMS → 站点)

RemoteStartTransaction

从CSMS接收:

{
  "evseId": 1,
  "chargingType": "customer_charging|station_charging",
  "chargingProfile": {
    "id": 1,
    "stackLevel": 0,
    "chargingProfilePurpose": "TxProfile",
    "chargingProfileKind": "Absolute",
    "chargingSchedule": [
      {
        "id": 1,
        "startSchedule": "2025-07-12T10:30:00Z",
        "duration": 3600,
        "chargingRateUnit": "W",
        "chargingSchedulePeriod": [
          {
            "startPeriod": 0,
            "limit": 7200
          }
        ]
      }
    ]
  },
  "customData": {
    "customerInfo": {
      "customerId": "CUST_001",
      "vehicleType": "Tesla Model 3"
    },
    "technicianId": "TECH_005",
    "estimatedDuration": 3600
  }
}

发送给站点系统:

{
  "type": "start_customer_charging",
  "evseId": 1,
  "maxPower": 7200,
  "duration": 3600,
  "customerInfo": {
    "customerId": "CUST_001",
    "vehicleType": "Tesla Model 3"
  },
  "technicianId": "TECH_005"
}

回复给CSMS:

{
  "status": "Accepted|Rejected",
  "statusInfo": {
    "reasonCode": "NoError|Busy|Occupied|Faulted"
  }
}

RemoteStopTransaction

从CSMS接收:

{
  "transactionId": "TXN_123456"
}

发送给站点系统:

{
  "type": "stop_charging",
  "transactionId": "TXN_123456",
  "reason": "remote_stop"
}

GetReport

从CSMS接收:

{
  "requestId": 1,
  "componentVariable": [
    {
      "component": {"name": "BatteryManagement"},
      "variable": {"name": "StateOfCharge"}
    }
  ]
}

发送给站点系统:

{
  "type": "request_data",
  "requestId": 1,
  "dataType": "battery_status"
}

从站点系统接收:

{
  "requestId": 1,
  "batteryLevel": 85,
  "batteryVoltage": 48.2,
  "batteryTemperature": 25.5
}

发送给CSMS(NotifyReport):

{
  "requestId": 1,
  "generatedAt": "当前时间",
  "reportData": [
    {
      "component": {"name": "BatteryManagement"},
      "variable": {"name": "StateOfCharge"},
      "variableAttribute": {
        "value": "85",
        "unit": "Percent"
      }
    }
  ]
}

6. 错误处理和重连

6.1 重连策略

flowchart TD
    DISCONNECT[连接丢失] --> LOG[记录断开事件]
    LOG --> QUEUE[队列传出消息]
    QUEUE --> WAIT[等待期]
    WAIT --> RETRY[尝试重连]
    RETRY --> SUCCESS{已连接?}
    
    SUCCESS -->|是| BOOT[发送BootNotification]
    SUCCESS -->|否| BACKOFF[增加等待期]
    
    BACKOFF --> MAXWAIT{达到最大等待?}
    MAXWAIT -->|否| WAIT
    MAXWAIT -->|是| RESET[重置等待期]
    RESET --> WAIT
    
    BOOT --> SYNC[发送队列消息]
    SYNC --> OPERATIONAL[操作模式]

6.2 超时处理

sequenceDiagram
    participant OCPP as OCPP模块
    participant CSMS as CSMS服务器
    participant Station as 站点系统
    
    OCPP->>CSMS: 请求消息
    Note over OCPP: 启动30秒超时计时器
    
    alt 收到响应
        CSMS->>OCPP: 响应消息
        Note over OCPP: 清除超时,处理响应
    else 发生超时
        Note over OCPP: 30秒已过,无响应
        OCPP->>Station: 通知超时错误
        OCPP->>OCPP: 队列消息重试
    end

7. 模块配置

7.1 连接参数

{
  "connection": {
    "serverUrl": "wss://csms.example.com/ocpp",
    "stationId": "STATION_001",
    "apiKey": "your-api-key-here",
    "reconnectInterval": 30,
    "maxReconnectInterval": 300,
    "messageTimeout": 30,
    "heartbeatInterval": 300
  },
  "station": {
    "model": "EV-CHARGER-V1",
    "vendorName": "YourCompany",
    "serialNumber": "SN123456789",
    "firmwareVersion": "1.0.0"
  },
  "intervals": {
    "meterValueSampleInterval": 10,
    "clockAlignedDataInterval": 900,
    "connectionTimeOut": 60
  }
}

7.2 管理方法

// 模块API伪代码
class OCPPModule {
    // 初始化
    initialize(config) { }
    
    // 连接管理
    connect() { }
    disconnect() { }
    isConnected() { }
    
    // 从站点发送事件
    sendStationEvent(event) { }
    
    // 接收站点命令(回调)
    onStationCommand(callback) { }
    
    // 模块状态
    getStatus() { }
    getLastError() { }
    
    // 日志记录
    enableLogging(level) { }
}

8. 与站点系统的通信协议

8.1 模块初始化

sequenceDiagram
    participant Station as 站点系统
    participant OCPP as OCPP模块
    
    Station->>OCPP: Initialize(config)
    OCPP->>OCPP: 加载配置
    OCPP->>Station: 初始化完成
    
    Station->>OCPP: SetEventHandler(callback)
    OCPP->>Station: 处理程序已注册
    
    Station->>OCPP: Connect()
    OCPP->>OCPP: 建立WebSocket连接
    OCPP->>Station: onStationCommand("connection_established")

8.2 运行时事件处理

sequenceDiagram
    participant Station as 站点系统
    participant OCPP as OCPP模块
    participant CSMS as CSMS服务器
    
    Note over Station,CSMS: 正常事件流
    Station->>OCPP: sendStationEvent(cable_connected)
    OCPP->>CSMS: StatusNotification
    CSMS->>OCPP: StatusNotification响应
    
    Note over Station,CSMS: 来自CSMS的命令
    CSMS->>OCPP: RemoteStartTransaction
    OCPP->>Station: onStationCommand(start_charging)
    Station->>OCPP: 命令响应(已接受)
    OCPP->>CSMS: RemoteStartTransaction响应

本规范定义了与充电站系统集成的OCPP通信模块要求。