# 远程命令规范(RemoteCommandService) 说明:本规范基于 `RemoteCommandService.ExecuteAsync` 的实现。命令以逗号 `,` 分隔的字符串形式传入,首项为命令名(Trigger),其余为参数。所有响应通过 callback 回传,格式在每个命令项中说明。 通用规则 - 输入:`command` 字符串,格式 `CommandName,param1,param2,...` - 空或未知命令会被视为视觉流程触发(见底部“视觉流程命令”) - 若参数无效返回:`InvalidParameters` - 大多数命令为异步执行,可能耗时;支持外部取消 token(若上层传入) - 成功返回一般含 `OK` 或具体数据;失败返回 `NG` 或错误码/文本 命令列表与格式 1. LoadProduct - 用途:加载并设置当前产品 - 格式:`LoadProduct,产品名称或编号` - 参数:1 个(产品名称或编号) - 返回:`LoadProduct,OK` 或 `LoadProduct,NG` - 备注:若传入编号也可(字符串形式),内部先按名称查找,再尝试按编号解析。 2. GetProductName - 用途:获取产品名称 - 格式: - `GetProductName` — 返回当前产品名称 - `GetProductName,产品编号` — 根据编号返回名称 - 返回: - 成功:`GetProductName,` - 失败或无数据:`GetProductName,NG` 3. GetProductID - 用途:获取产品编号 - 格式: - `GetProductID` — 返回当前产品编号 - `GetProductID,产品名称` — 根据名称返回编号 - 返回: - 成功:`GetProductID,` - 失败:`GetProductID,NG` 4. GetRobotPointsCountById - 用途:返回机器人点信息(接口使用示例) - 格式:`GetRobotPointsCountById,robotNumber,pointNumber` - 参数:两个整型 - 返回:`GetRobotPointsCountById,` 或 `GetRobotPointsCountById,NG` 5. GetPalletPoint - 用途:获取机器人托盘点位信息 - 格式:`GetPalletPoint,robotNumber,palletNumber,pointNumber` - 返回:`GetPalletPoint,` 或 `GetPalletPoint,NG` 6. CycleTime - 用途:开始/停止节拍计时 - 格式:`CycleTime,1` — 开始;其它值 — 停止 - 返回:`CycleTime,OK` 或 `CycleTime,NG` 7. Record - 用途:记录一条生产计数(计数项) - 格式:`Record,计数项` - 返回:`Record,OK` 或 `Record,NG` - 备注:会在系统数据库中插入一条 `ProductionRecord`(Quantity=1) 8. RecordQuery - 用途:查询指定计数项当前总数 - 格式:`RecordQuery,计数项` - 返回:`RecordQuery,`(数值字符串) 9. RecordReset - 用途:重置当前产品的生产计数(全部或指定项) - 格式:`RecordReset,计数项` - 返回:`RecordReset,OK` 或 `RecordReset,NG` 10. Err - 用途:记录报警 - 格式:`Err,alarmCode,alarmDescription` - 返回:`Err,OK` 或 `Err,NG` - 备注:同时会把报警写入数据库并触发运行信息 11. Info - 用途:记录运行信息(仅消息队列) - 格式:`Info,message` - 返回:`Info,OK` 或 `Info,NG` 12. GetGlobalParam - 用途:获取产品全局参数 - 格式: - `GetGlobalParam,paramNumber` — 返回整个条目字符串 - `GetGlobalParam,paramNumber,itemIndex` — 返回指定项(1..4)或具体值 - 返回:`GetGlobalParam,` 或 `GetGlobalParam,NG` 13. GetSpeed - 用途:获取当前产品运行速度等参数 - 格式:`GetSpeed` - 返回:`GetSpeed,` 或 `GetSpeed,NG` 14. GetToolParam - 用途:获取工具参数 - 格式:`GetToolParam,triggerCommand,toolNumber` - 返回:`GetToolParam,` 或 `GetToolParam,NG` 15. GetProcedureParam - 用途:获取流程参数(TriggerCommand) - 格式:`GetProcedureParam,triggerCommand` - 返回:`GetProcedureParam,` 或 `GetProcedureParam,NG` 16. StartClearMaterial / StopClearMaterial - 用途:启动/停止指定编号的清料任务 - 格式: - `StartClearMaterial,taskNumber` - `StopClearMaterial,taskNumber` - 返回:`StartClearMaterial,OK` / `StopClearMaterial,OK` 或 `...,NG` 17. RobotIsDebugMode - 用途:查询机器人是否处于调试模式 - 格式:`RobotIsDebugMode,robotNumber` - 返回:`RobotIsDebugMode,1`(调试)或 `RobotIsDebugMode,0`(非调试) 错误与状态 - 通用无效参数返回:`InvalidParameters` - 大多数成功/失败以 `OK` / `NG` 表示 - 视觉流程会根据返回的 items 逐条 callback 特殊:视觉流程命令(默认分支) - 说明:如果命令名不在上表,服务将把首项视作某一视觉流程的 TriggerCommand,并寻找当前产品中 `ProcedureModel.TriggerCommand == triggerCommand` 的流程来执行视觉任务。 - 输入格式同样为 `TriggerCommand,param1,param2,...` - 触发参数规则(Feeder 引导任务特有): - 可包含标记:`VibrateFirst`、`CaptureFirst` —— 用于控制振动/拍照顺序(同时存在时以振动优先) - `SetInputs`:用于传入 ToolBlock 输入对,格式在参数序列中为 `SetInputs,key1=val1,key2=val2,...`,解析到遇到第一个非 `key=value` 参数为止 - 坐标参数(普通视觉流程):若传入前三个参数均为 double,视为机器人当前坐标(用于像素->机器人坐标转换) - 返回格式: - 视觉成功:对每个返回项发送回调:`{TriggerCommand},OK,{item}` - 视觉失败:`{TriggerCommand},NG,{errorMessage}`(如果有具体 message) - 输出数据说明: - 当流程输出点位(point)时,点位以 `x,y,u,...` 逗号分隔;若多点,则按配置的 `OutputSeparator` 及 `OutputPointMode` 聚合返回 - 普通输出会被组装为字符串并以 `procedure.OutputSeparator` 连接 - 记录行为(执行成功后): - 在 `ExecutePhoto` 中,视觉运行成功时会调用: - `DatabaseHelper.AddCameraRecords(currentProduct.Name, procedure.Name, outputCollection)` - 即:成功拍照并运行 ToolBlock 后会把 `outputCollection` 写入产品对应数据库(每个产品一个 db 文件,表名为流程名清洗后的标识符) 参数解析与实现约定(实现细节) - 命令分割:以 `,` 分割(不做额外转义),参数内若需包含逗号请先在上层编码/约定方式(目前未实现转义) - 时间格式(写入 _Time):`yyyy-MM-dd HH:mm:ss` - 数据库表/列名会被清洗为仅包含字母数字和下划线,且以字母开头(避免 SQL/文件名问题) - 视觉输出项名会被前置 `_` 作为列前缀存储(例如输出名 `BlobTotalArea` -> 列 `_BlobTotalArea`) 示例 - 加载产品:`LoadProduct,MyProduct` -> `LoadProduct,OK` - 查询当前产品名:`GetProductName` -> `GetProductName,MyProduct` - 触发视觉流程(无 feeder,引擎返回一条字符串):`InspectA,123.45,67.89,0.12` -> 回调 `InspectA,OK,` - 触发 Feeder 引导视觉,并传入输入端:`InspectB,SetInputs,Mode=Fast,Threshold=50` -> 服务会把 Mode/Threshold 注入 ToolBlock 输入 附注 - 若需要扩展命令,请在 `RemoteCommandService.ExecuteAsync` 中追加 `case` 分支,并在文档中更新对应输入/输出约定。 - 若需支持参数中包含逗号或复杂编码,请在协议层增加转义或使用 JSON 编码参数(需要双方约定并修改解析实现)。