RemoteCommandSpecification.md 7.1 KB

远程命令规范(RemoteCommandService)

说明:本规范基于 RemoteCommandService.ExecuteAsync 的实现。命令以逗号 , 分隔的字符串形式传入,首项为命令名(Trigger),其余为参数。所有响应通过 callback 回传,格式在每个命令项中说明。

通用规则

  • 输入:command 字符串,格式 CommandName,param1,param2,...
  • 空或未知命令会被视为视觉流程触发(见底部“视觉流程命令”)
  • 若参数无效返回:InvalidParameters
  • 大多数命令为异步执行,可能耗时;支持外部取消 token(若上层传入)
  • 成功返回一般含 OK 或具体数据;失败返回 NG 或错误码/文本

命令列表与格式

  1. LoadProduct
  2. 用途:加载并设置当前产品
  3. 格式:LoadProduct,产品名称或编号
  4. 参数:1 个(产品名称或编号)
  5. 返回:LoadProduct,OKLoadProduct,NG
  6. 备注:若传入编号也可(字符串形式),内部先按名称查找,再尝试按编号解析。

  7. GetProductName

  8. 用途:获取产品名称

  9. 格式:

    • GetProductName — 返回当前产品名称
    • GetProductName,产品编号 — 根据编号返回名称
  10. 返回:

    • 成功:GetProductName,<ProductName>
    • 失败或无数据:GetProductName,NG
  11. GetProductID

  12. 用途:获取产品编号

  13. 格式:

    • GetProductID — 返回当前产品编号
    • GetProductID,产品名称 — 根据名称返回编号
  14. 返回:

    • 成功:GetProductID,<Number>
    • 失败:GetProductID,NG
  15. GetRobotPointsCountById

  16. 用途:返回机器人点信息(接口使用示例)

  17. 格式:GetRobotPointsCountById,robotNumber,pointNumber

  18. 参数:两个整型

  19. 返回:GetRobotPointsCountById,<info>GetRobotPointsCountById,NG

  20. GetPalletPoint

  21. 用途:获取机器人托盘点位信息

  22. 格式:GetPalletPoint,robotNumber,palletNumber,pointNumber

  23. 返回:GetPalletPoint,<comma-separated-data>GetPalletPoint,NG

  24. CycleTime

  25. 用途:开始/停止节拍计时

  26. 格式:CycleTime,1 — 开始;其它值 — 停止

  27. 返回:CycleTime,OKCycleTime,NG

  28. Record

  29. 用途:记录一条生产计数(计数项)

  30. 格式:Record,计数项

  31. 返回:Record,OKRecord,NG

  32. 备注:会在系统数据库中插入一条 ProductionRecord(Quantity=1)

  33. RecordQuery

  34. 用途:查询指定计数项当前总数

  35. 格式:RecordQuery,计数项

  36. 返回:RecordQuery,<number>(数值字符串)

  37. RecordReset

  38. 用途:重置当前产品的生产计数(全部或指定项)

  39. 格式:RecordReset,计数项

  40. 返回:RecordReset,OKRecordReset,NG

  41. Err

  42. 用途:记录报警

  43. 格式:Err,alarmCode,alarmDescription

  44. 返回:Err,OKErr,NG

  45. 备注:同时会把报警写入数据库并触发运行信息

  46. Info

  47. 用途:记录运行信息(仅消息队列)

  48. 格式:Info,message

  49. 返回:Info,OKInfo,NG

  50. GetGlobalParam

  51. 用途:获取产品全局参数

  52. 格式:

    • GetGlobalParam,paramNumber — 返回整个条目字符串
    • GetGlobalParam,paramNumber,itemIndex — 返回指定项(1..4)或具体值
  53. 返回:GetGlobalParam,<value>GetGlobalParam,NG

  54. GetSpeed

  55. 用途:获取当前产品运行速度等参数

  56. 格式:GetSpeed

  57. 返回:GetSpeed,<csv-values>GetSpeed,NG

  58. GetToolParam

  59. 用途:获取工具参数

  60. 格式:GetToolParam,triggerCommand,toolNumber

  61. 返回:GetToolParam,<csv-values>GetToolParam,NG

  62. GetProcedureParam

  63. 用途:获取流程参数(TriggerCommand)

  64. 格式:GetProcedureParam,triggerCommand

  65. 返回:GetProcedureParam,<csv-values>GetProcedureParam,NG

  66. StartClearMaterial / StopClearMaterial

  67. 用途:启动/停止指定编号的清料任务

  68. 格式:

    • StartClearMaterial,taskNumber
    • StopClearMaterial,taskNumber
  69. 返回:StartClearMaterial,OK / StopClearMaterial,OK...,NG

  70. RobotIsDebugMode

  71. 用途:查询机器人是否处于调试模式

  72. 格式:RobotIsDebugMode,robotNumber

  73. 返回:RobotIsDebugMode,1(调试)或 RobotIsDebugMode,0(非调试)

错误与状态

  • 通用无效参数返回:InvalidParameters
  • 大多数成功/失败以 OK / NG 表示
  • 视觉流程会根据返回的 items 逐条 callback

特殊:视觉流程命令(默认分支)

  • 说明:如果命令名不在上表,服务将把首项视作某一视觉流程的 TriggerCommand,并寻找当前产品中 ProcedureModel.TriggerCommand == triggerCommand 的流程来执行视觉任务。
  • 输入格式同样为 TriggerCommand,param1,param2,...
  • 触发参数规则(Feeder 引导任务特有):
    • 可包含标记:VibrateFirstCaptureFirst —— 用于控制振动/拍照顺序(同时存在时以振动优先)
    • SetInputs:用于传入 ToolBlock 输入对,格式在参数序列中为 SetInputs,key1=val1,key2=val2,...,解析到遇到第一个非 key=value 参数为止
    • 坐标参数(普通视觉流程):若传入前三个参数均为 double,视为机器人当前坐标(用于像素->机器人坐标转换)
  • 返回格式:
    • 视觉成功:对每个返回项发送回调:{TriggerCommand},OK,{item}
    • 视觉失败:{TriggerCommand},NG,{errorMessage}(如果有具体 message)
  • 输出数据说明:
    • 当流程输出点位(point)时,点位以 x,y,u,... 逗号分隔;若多点,则按配置的 OutputSeparatorOutputPointMode 聚合返回
    • 普通输出会被组装为字符串并以 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,<result-string>
  • 触发 Feeder 引导视觉,并传入输入端:InspectB,SetInputs,Mode=Fast,Threshold=50 -> 服务会把 Mode/Threshold 注入 ToolBlock 输入

附注

  • 若需要扩展命令,请在 RemoteCommandService.ExecuteAsync 中追加 case 分支,并在文档中更新对应输入/输出约定。
  • 若需支持参数中包含逗号或复杂编码,请在协议层增加转义或使用 JSON 编码参数(需要双方约定并修改解析实现)。