依据:对
D:\Team\Program\TeamAAS-2.0(在产程序)与D:\Program\TeamAAS(本程序)的逐文件源码核对。 结论先行:机器人/相机/Feeder/吸气 的协议与流程已同源移植,标定向导结构与 2.0 对齐; 遗留问题 = VppCalibrationPage 游离计算器 + 2.0 已有的 Feeder 背光联动/畸变校正未移植。
文件:TeamAAS.Core\TeamAAS.Robot\Core\Robots\EpsonRobot.cs(同步 + Async 双版本)
连接层:RobotTcpClient.cs——客户端/服务端双角色、结束符(CR/LF/CRLF)分帧、断线重连;
配置存 Config\Robots.json(IP/Port/ConnectType/Terminator/Encoding)。
应答确认模式:发送后等待回显(rev.Contains("命令字") 即成功,5s 超时)。
| 上位机发送 | 机器人回显 | 实现状态 | 备注 |
|---|---|---|---|
Motor,1 |
Motor |
✅ | 使能 |
Power,1 |
Power |
✅ | 伺服上电 |
Reset |
Reset |
✅ | 复位报警 |
Speed,100 |
Speed |
✅ | PTP 速度 |
Accel,100,100 |
Accels |
✅ | PTP 加速度(双参数) |
Speeds,100 |
Speeds |
✅ | 直线速度 |
Accels,100,100 |
Accels |
✅ | 直线加速度 |
Speedfactor,100 |
Speedfactor |
✅ | 全局速度倍率 |
Go,X,Y,Z,U,V,W,0,0,0 |
Go |
✅ | PTP 点位(Hand,Local,Tool 九段) |
Jump,X,...,LimZ |
Jump |
✅ | 门型拾放(末尾多 LimZ) |
Move,X,... |
Move |
✅ | 直线插补 |
SFree / SLock |
同名 | ✅ | 刹车释放/锁定 |
Jog,axis,d |
Jog |
✅ | 点动 |
Joint,joint,d |
— | ✅(表外补充) | 关节点动 |
SetTool,i,x,y |
SetTool |
✅ | 设置工具坐标 |
SelectTool,i |
— | ✅(表外补充) | 切换工具号 |
CalibParame,0,0,0,0,0,0,0,0 |
CalibParame |
✅ | 8 参数:{夹爪类型(Suction/Clamp)},{吸气IO},{吹气IO},{Speed},{Accel},{Power},{吸真空延时},{破真空延时} |
CalibMotion,X,Y,Z,U,V,W,0,0,0 |
CalibMotion |
✅ | 标定点位动作(末尾多 LimZ) |
CalibOutIO,1 |
CalibOutIO |
✅ | 控制夹爪/吸嘴(吸气=1,放开=0) |
GetRobotPos |
GetRobotPos,X,Y,Z,U,V,W,Hand,Local,Tool |
✅ | 回包解析为 RPoint 坐标对象 |
吸气/真空设计:由机器人侧程序执行 IO,上位机只下发 IO 位号与延时(CalibParame)+ 开关指令(CalibOutIO)。 流程画布层暂无"机器人指令"节点(指令调用集中在标定向导)——需要时按通讯节点模式补一个。
文件依据:2.0 Enums\CameraMount.cs、Services\CameraCalibrationService.cs(九点循环 L1116-1240)、
Services\CalibrationService.cs\ConvertPixelToPosition(L224-312)。我们的 CameraCalibrationService /
CalibrationStore 已移植同款分支。
| 安装方式 | 物理含义 | 标定取点动作 | 运行时像素→机器人换算 | 工具坐标步骤 |
|---|---|---|---|---|
| FixedDown 固定向下 | 相机架工位上方不动,机械手吸标定块在下方走位 | 防遮挡舞蹈(每点):走到点 i → 关吸气放下块 → 退回待机点让出视野 → 拍照 → 走回点 i → 开吸气吸回;九点后回待机 | 仿射矩阵直出机器人坐标 → ComputeTool 转工具坐标;角度符号取反 | 需要(FixedDownCameraTool 分支) |
| FixedUp 固定向上 | 相机朝上(供料背光板下),机械手举块到相机上方 | 走到点 i(带 Z)→ 直接拍照 | 仿射直出 → 转工具坐标 | 需要(FixedUpCameraTool 分支) |
| MobileJ2 | 相机装 J2 臂随臂下移 | 走到点 i → 拍照 | 仿射直出 → 转工具坐标,角度取反 | 需要 |
| MobileJ4 | 相机装末端腕(眼在手,随 U 轴转) | 先走中心点记 Mark 点(工具坐标系);九点矩阵 = Mark点 − (点i − 点1 位移)(把 Mark 拉回相机中心) | 仿射偏移 + 按机器人当前 U 轴构造旋转矩阵修正 + 当前位姿叠加 | 需要(J4MovingDownCameraTool 分支) |
| MobileDown_XYPlatform | 相机装 XY 龙门模组下移 | 同 J4 偏移换算(Mark=中心点) | 同 J4 但旋转角恒 0(模组不旋转) | 跳过 |
| None 独立相机 | 手动示意的独立相机 | 手动 | 手动 | 不适用 |
共同前置(旋转预备标定):机械手走 P0、P0+X、P0+Y 三点各拍一张 → Gram-Schmidt 求图像系↔机器人系
旋转矩阵 + mm/像素比例;九点机器人坐标先经该矩阵逆变换对齐坐标轴,再进仿射求解
(2.0 用 OpenCvSharp EstimateAffine2D;我们用正规方程+高斯消元,数学等价)。
运行时通用入口:CalibrationStore.ConvertPixelToPosition(pixel, robotCur, calib, brand);Schneider 品牌 U 轴取反。
| 主题 | TeamAAS-2.0(生产) | 本程序 | 兼容结论 |
|---|---|---|---|
| 相机 | 7 品牌(海康 MVS 为主/Basler/大恒/大华/OPT/Cognex/UVC),软触发+连续采集(无硬触发),全链路 ICogImage,CameraConfiguration.cfg |
同款海康/大华已移植(MvCamCtrl.Net 原生),Basler/大恒/OPT/UVC 在列;图像用自研 GenImage 统一载体(含 Metadata),Config\Cameras.json |
同源;GenImage 经 GenImageConverter 转各平台,载体设计更通用 |
| Feeder | 独立类库 Team.FFFeederService:TEAM(TCP {K1} 背光/{UV1} 振动/{HC} 停止/方向 {CA~CI}ms)+ Afag aflex;自带环形背光,标定拍照前开灯 |
TeamFeeder 同款 TCP ASCII 命令 + FeederPlugin 流程节点(配方 Config\Feeder_recipes.json) |
同源;缺标定向导的开背光联动 |
| 吸气/真空 | 机器人侧执行:CalibParame 下发 IO 位+延时,CalibOutIO 开关 | 同(PickInfo:Inhal/Blow + WaitSuction/WaitBlow) | ✅ 一致 |
| 通讯 | 每类设备独立 .cfg(JSON)+ 设置页对话框(AddRobot/AddCamera…)+ Service 工厂(Dictionary)+ SendThenResponse/事件;另硬编码 BgCommunicate/BgModbusTcp 后台通道;PLC 三菱/OPC UA
| [Communication] 特性扫描(TcpClient/TcpServer/Serial/Udp/Web + HslCommunication PLC),统一 Config\Communications.json,CommunicationManager.GetByName,流程节点批量读取/批量写入(公式绑定),FlowRunner 订阅 DataReceivedEvent 心跳触发产品 |
我们的模式更可扩展(加协议=加一个类);2.0 的 Settings 添加对话框值得移植 |