版本:V2.1
编制部门:上海软星科技有限公司 智能互联事业部
1. 协议概述
1.1 设计原则:基于RESTful架构,使用HTTP/HTTPS协议,数据交换格式为JSON,保证接口的通用性、可扩展性和安全性。
1.2 通信安全:
- 所有API调用必须使用HTTPS加密传输。
- 采用OAuth 2.0客户端凭证模式进行身份认证。
- 支持IP白名单访问控制。
2. 认证流程
2.1 获取Access Token:
- 请求示例:
```http
POST /oauth/token HTTP/1.1
Host: api.softstar-machine.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=your_client_id&client_secret=your_client_secret
```
- **响应示例**:
```json
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 3600
}
```
3. 核心API接口详解
3.1 获取设备实时状态:
- 端点:GET /api/v2/machines/{machineId}/status
- 响应体:json { "machineId": "CNC-001", "timestamp": "2023-10-27T14:30:25.000Z", "status": "RUNNING", // RUNNING, IDLE, ALARM, SETUP, DOWN "currentProgram": "O1234 (MAIN_PROGRAM)", "executionMode": "AUTO", "feedRateOverride": 100, "spindleSpeedOverride": 100, "spindleSpeed": 4500.5, "feedRate": 1200.0, "axisData": { "X": 125.456, "Y": -25.789, "Z": 0.000, "B": 0.000 }, "alarm": { "isActive": false, "code": null, "message": null } }
3.2 读取报警历史记录:
- 端点:GET /api/v2/machines/{machineId}/alarms?startTime=2023-10-26T00:00:00Z&endTime=2023-10-27T23:59:59Z
- 响应体:json { "alarms": [ { "id": 1001, "code": "SVR-024", "message": "X-axis servo overload", "severity": "ERROR", // WARNING, ERROR, CRITICAL "startTime": "2023-10-27T10:15:30.000Z", "endTime": "2023-10-27T10:16:05.000Z", "duration": 35 } ] }
3.3 上报加工计数:
- 端点:POST /api/v2/machines/{machineId}/count
- 请求体:json { "partNumber": "P-20231027-001", "count": 1, "programName": "O1234", "timestamp": "2023-10-27T14:35:00.000Z" }
4. 数据点列表(部分)
| 数据点标识符 | 描述 | 数据类型 | 单位 | 更新频率 |
|---|---|---|---|---|
sys.status | 设备状态 | Enum | - | 状态变化时 |
spindle.speed | 主轴实际转速 | Float | rpm | 1 Hz |
spindle.load | 主轴负载百分比 | Float | % | 1 Hz |
axis.x.abs | X轴绝对坐标 | Float | mm | 5 Hz |
axis.y.abs | Y轴绝对坐标 | Float | mm | 5 Hz |
alarm.active | 当前报警状态 | Boolean | - | 状态变化时 |
prog.current | 当前运行程序 | String | - | 程序变化时 |
5. 客户端集成示例 (Python)
import requests
import json
def get_machine_status(api_base_url, machine_id, access_token):
headers = {'Authorization': f'Bearer {access_token}'}
url = f"{api_base_url}/machines/{machine_id}/status"
try:
response = requests.get(url, headers=headers, timeout=5)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"Error fetching machine status: {e}")
return None
# 使用示例
api_base_url = "https://api.softstar-machine.com/api/v2"
machine_id = "CNC-001"
access_token = "your_access_token_here"
status_data = get_machine_status(api_base_url, machine_id, access_token)
if status_data:
print(f"Machine {status_data['machineId']} is {status_data['status']}")
print(f"Running program: {status_data['currentProgram']}")