数据上传
概述
数据上传功能用于将控制器运行过程中采集的数据(如关节角度、速度、力矩、IO 状态等)按照配置的格式和周期上传至远程服务器。支持 FTP 上传方式,可自定义文件格式、采集周期和上传周期。
工作流程
text
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 控制器 │ │ 上位机 │ │ FTP 服务器│
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
│ │ 配置上传参数 │
│<──────────────│ 0x7333 │
│ │ │
│ 周期采集数据 │ │
│──────┐ │ │
│ │ (采集) │ │
│<─────┘ │ │
│ │ │
│ 上传周期到达 │ │
│──────────────────────────────>│ FTP 上传
│ │ │核心概念
| 概念 | 说明 |
|---|---|
| 采集周期 | 控制器从机器人读取数据的频率 |
| 上传周期 | 将采集到的数据打包上传至服务器的频率 |
| 数据文件 | 包含机器人运行数据的文件(csv/txt) |
| 说明文档 | 包含数据列定义的辅助文件 |
1. 数据传输开关
1.1 上位机设置数据传输开关
命令字: 0x7330
| 参数名 | 类型 | 描述 |
|---|---|---|
| enable | bool | 数据传输开关,true-开启,false-关闭 |
| robot | int | 当前机器人号,范围 [1, 4] |
json
{
"enable": true,
"robot": 1
}开启数据传输后,控制器按配置的采集周期开始采集数据,并按上传周期发送至服务器。
1.2 上位机查询数据传输开关
命令字: 0x7331
| 参数名 | 类型 | 描述 |
|---|---|---|
| robot | int | 当前机器人号,范围 [1, 4] |
json
{
"robot": 1
}1.3 控制器回复数据传输开关
命令字: 0x7332
| 参数名 | 类型 | 描述 |
|---|---|---|
| enable | bool | 数据传输开关 |
| robot | int | 当前机器人号 |
json
{
"enable": false,
"robot": 1
}2. 数据上传参数
2.1 上位机设置数据上传参数
命令字: 0x7333
| 参数名 | 类型 | 范围/取值 | 描述 |
|---|---|---|---|
| dataCollectTime | double | [0.001, 999999] 秒 | 数据采集周期,即每隔多少秒采集一次数据 |
| dataUploadTime | double | [0.001, 999999] 秒 | 数据上传周期,即每隔多少秒上传一次数据文件 |
| fileSuffix | string | "csv" / "txt" | 文件格式。csv 为逗号分隔值,txt 为空格或制表符分隔 |
| filepath | string | - | FTP 服务器上的文件存放路径,如 "/robot_data/" |
| password | string | - | FTP 登录密码 |
| robot | int | [1, 4] | 机器人号 |
| sendInfoFileFlag | bool | - | 是否发送说明文档。true-每次上传同时发送说明文档 |
| serverIP | string | - | FTP 服务器 IP 地址 |
| serverPort | int | (0, 65535] | FTP 服务器端口,默认 21 |
| uploadMode | string | 默认 "FTP" | 上传方式,当前仅支持 "FTP" |
| username | string | - | FTP 登录用户名 |
参数配置建议
| 参数 | 推荐值 | 说明 |
|---|---|---|
| dataCollectTime | 0.01~1.0 s | 高频采集用于精细运动分析,低频用于长期监控 |
| dataUploadTime | 30~300 s | 上传间隔应考虑文件大小和网络带宽 |
| fileSuffix | "csv" | csv 格式兼容性好,易于 Excel 等工具打开 |
| sendInfoFileFlag | true | 首次上传建议开启,便于理解数据列含义 |
json
{
"dataCollectTime": 1.0,
"dataUploadTime": 30.0,
"fileSuffix": "csv",
"filepath": "/robot_data/",
"password": "123456",
"robot": 1,
"sendInfoFileFlag": true,
"serverIP": "192.168.1.14",
"serverPort": 21,
"uploadMode": "FTP",
"username": "admin"
}2.2 上位机查询数据上传参数
命令字: 0x7334
| 参数名 | 类型 | 范围 | 描述 |
|---|---|---|---|
| robot | int | [1, 4] | 机器人号 |
json
{
"robot": 1
}2.3 控制器回复数据上传参数
命令字: 0x7335
| 参数名 | 类型 | 范围/取值 | 描述 |
|---|---|---|---|
| dataCollectTime | double | [0.001, 999999]s | 数据采集周期 |
| dataUploadTime | double | [0.001, 999999]s | 数据上传周期 |
| fileSuffix | string | "csv" / "txt" | 文件格式 |
| filepath | string | - | 文件路径 |
| password | string | - | 密码 |
| robot | int | [1, 4] | 机器人号 |
| sendInfoFileFlag | bool | - | 是否发送说明文档 |
| serverIP | string | - | 服务器 IP |
| serverPort | int | (0, 65535] | 端口号 |
| uploadMode | string | 默认 "FTP" | 上传方式 |
| username | string | - | 用户名 |
json
{
"dataCollectTime": 1.0,
"dataUploadTime": 30.0,
"fileSuffix": "csv",
"filepath": "/robot_data/",
"password": "123456",
"robot": 1,
"sendInfoFileFlag": true,
"serverIP": "192.168.1.14",
"serverPort": 21,
"uploadMode": "FTP",
"username": "admin"
}3. 数据格式
说明: 上位机设置与查询分四次进行,分别对应说明文档文件名、说明文档文件内容、数据文档文件名、数据文档文件内容的格式。
3.1 上位机设置数据格式
命令字: 0x7336
| 参数名 | 类型 | 范围 | 描述 |
|---|---|---|---|
| format | string | - | 数据格式模板,支持占位符 |
| robot | int | [1, 4] | 当前机器人号 |
| type | int | [1, 4] | 当前设置的格式类型 |
type 取值说明
| 值 | 描述 | 应用场景 |
|---|---|---|
| 1 | 说明文档文件名 | 定义发送的说明文档的文件命名规则 |
| 2 | 说明文档文件内容 | 定义说明文档中数据列的名称与排列 |
| 3 | 数据文档文件名 | 定义数据文件的文件命名规则 |
| 4 | 数据文档文件内容 | 定义数据文件中每行数据的排列格式 |
格式模板占位符
格式字符串中使用以下占位符,上传时自动替换为实际值:
| 占位符 | 替换内容 | 示例输出 |
|---|---|---|
$Y% | 4 位年份 | 2024 |
$m% | 2 位月份 | 03 |
$d% | 2 位日期 | 15 |
$H% | 2 位小时(24小时制) | 14 |
$M% | 2 位分钟 | 30 |
$S% | 2 位秒 | 00 |
$R% | 机器人号 | 1 |
$N% | 递增序号 | 001 |
TEXT | 普通文本(原样输出) | Robot-R1 |
type=1 示例(说明文档文件名)
json
{
"format": "Robot-R$R%_$Y%-$m%-$d%_$H%-$M%-$S%_Info.txt",
"robot": 1,
"type": 1
}生成的说明文档文件名示例:
Robot-R1_2024-03-15_14-30-00_Info.txt
type=3 示例(数据文档文件名)
json
{
"format": "Robot-R$R%_$Y%-$m%-$d%_$H%-$M%-$S%",
"robot": 1,
"type": 3
}生成的数据文件名示例:
Robot-R1_2024-03-15_14-30-00.csv
3.2 上位机查询数据格式
命令字: 0x7337
| 参数名 | 类型 | 范围 | 描述 |
|---|---|---|---|
| robot | int | [1, 4] | 当前机器人号 |
| type | int | [1, 4] | 当前设置的格式类型 |
json
{
"robot": 1,
"type": 1
}3.3 控制器回复数据格式
命令字: 0x7338
| 参数名 | 类型 | 范围 | 描述 |
|---|---|---|---|
| format | string | - | 数据格式模板 |
| robot | int | [1, 4] | 当前机器人号 |
| type | int | [1, 4] | 当前设置的格式类型 |
json
{
"format": "Robot-R$R%_$Y%-$m%-$d%_$H%-$M%-$S%",
"robot": 1,
"type": 1
}4. 触发方式
定时触发
数据上传默认采用定时触发方式,由 dataUploadTime 控制上传间隔。
- 控制器内部维护一个上传定时器
- 定时器到达
dataUploadTime时,将采集缓冲区数据写入文件并上传 - 上传完成后重置定时器,进入下一周期
条件触发(手动触发)
命令字: 0x7339
除了定时触发外,上位机可随时发送命令触发一次即时上传。
请求参数
| 参数名 | 类型 | 描述 |
|---|---|---|
| robot | int | 机器人号,范围 [1, 4] |
| command | string | "upload_now"-立即上传,"clear_buffer"-清空采集缓冲区 |
请求示例
json
{
"robot": 1,
"command": "upload_now"
}5. 上传内容定义
数据文件内容(type=4)
type=4 的格式定义决定了数据文件中每行的数据排列。格式字符串由变量名和分隔符组成。
可用数据变量
| 变量名 | 说明 | 数据类型 |
|---|---|---|
$JT1% ~ $JT6% | 关节 1~6 的角度 | double (°) |
$JV1% ~ $JV6% | 关节 1~6 的速度 | double (°/s) |
$JTQ1% ~ $JTQ6% | 关节 1~6 的力矩 | double (Nm) |
$TCX% / $TCY% / $TCZ% | TCP 位置 X/Y/Z | double (mm) |
$TRX% / $TRY% / $TRZ% | TCP 姿态 RX/RY/RZ | double (°) |
$DI1% ~ $DIN% | 数字输入 | int (0/1) |
$DO1% ~ $DON% | 数字输出 | int (0/1) |
$TS% | 时间戳 | int (ms) |
请求示例(type=4)
json
{
"format": "$TS%,$JT1%,$JT2%,$JT3%,$JT4%,$JT5%,$JT6%,$TCX%,$TCY%,$TCZ%",
"robot": 1,
"type": 4
}生成的数据行示例:
12345,10.5,-20.3,45.0,0.5,30.2,-90.0,500.1,100.0,250.5
说明文档内容(type=2)
type=2 定义说明文档中数据列标题。通常与 type=4 的数据排列一一对应。
json
{
"format": "时间戳(ms),关节1(deg),关节2(deg),关节3(deg),关节4(deg),关节5(deg),关节6(deg),TCP_X(mm),TCP_Y(mm),TCP_Z(mm)",
"robot": 1,
"type": 2
}6. 上传状态反馈
控制器上报上传状态
命令字: 0x733A
每次上传操作完成后,控制器主动上报上传结果。
参数说明
| 字段 | 类型 | 描述 |
|---|---|---|
| robot | int | 机器人号 |
| status | int | 上传状态,0-成功,1-失败,2-上传中 |
| fileName | string | 上传的文件名 |
| fileSize | int | 文件大小(字节) |
| errorMsg | string | 错误信息(失败时返回) |
响应示例
json
{
"robot": 1,
"status": 0,
"fileName": "Robot-R1_2024-03-15_14-30-00.csv",
"fileSize": 20480,
"errorMsg": ""
}7. 常见问题
上传失败排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 上传失败 | FTP 服务器地址错误 | 检查 serverIP 和 serverPort |
| 上传失败 | 用户名/密码错误 | 检查 username 和 password |
| 上传失败 | 路径不存在 | 确认 FTP 服务器上 filepath 目录存在 |
| 上传失败 | 网络不通 | 用 ping 测试控制器与 FTP 服务器连通性 |
| 文件为空 | 采集周期过大 | 减小 dataCollectTime,增大 dataUploadTime |
| 文件为空 | 数据变量未配置 | 检查 type=4 格式是否包含有效变量 |
| 文件命名错乱 | 格式占位符错误 | 确认占位符语法正确 |
性能建议
- 长时间运行建议设置较大的上传周期(如 300s),避免产生过多小文件
- 高频采集(dataCollectTime < 0.01s)时注意控制器内存占用
- FTP 服务器应有足够的磁盘空间,定期清理历史数据文件
sendInfoFileFlag改为 false 可减少上传数据量(仅首次需要说明文档)