diff --git a/App/StatorWorkpiecePosition/Doc/vision_modbus_client.mthings b/App/StatorWorkpiecePosition/Doc/vision_modbus_client.mthings index d03f37b5..eb732852 100644 --- a/App/StatorWorkpiecePosition/Doc/vision_modbus_client.mthings +++ b/App/StatorWorkpiecePosition/Doc/vision_modbus_client.mthings @@ -7,7 +7,7 @@ - + diff --git a/App/StatorWorkpiecePosition/Doc/工件定位ModbusTCP协议.md b/App/StatorWorkpiecePosition/Doc/工件定位ModbusTCP协议.md index 360aa6e0..59104aa0 100644 --- a/App/StatorWorkpiecePosition/Doc/工件定位ModbusTCP协议.md +++ b/App/StatorWorkpiecePosition/Doc/工件定位ModbusTCP协议.md @@ -36,7 +36,8 @@ | 写入值 | 命令 | |---:|---| | `1` | 工件检测 | -| `2` | 料框检测 | + +工件检测算法会在定位过程中同步计算所需的料框信息,不需要单独触发料框检测。 ## 5. 状态寄存器 @@ -50,8 +51,6 @@ 工件检测完成且 `Status=1` 后,客户读取工件检测结果寄存器。 -料框检测只通过 `Status` 返回完成或失败,不提供料框几何结果寄存器。 - ## 6. 工件检测结果 当前 Modbus TCP 返回第一个工件结果。 @@ -69,6 +68,21 @@ | `12-13` | 2 | float | `B` | 姿态第 2 项,单位 deg | | `14-15` | 2 | float | `C` | 姿态第 3 项,单位 deg | +`workpieceType` 取值含义如下: + +| `workpieceType` | 含义 | +|---:|---| +| `0` | 中央 | +| `1` | 上边 | +| `2` | 下边 | +| `3` | 左边 | +| `4` | 右边 | +| `5` | 左上角 | +| `6` | 右上角 | +| `7` | 左下角 | +| `8` | 右下角 | +| `9` | 隔板 | + ## 7. 姿态字段顺序 默认姿态字段含义: diff --git a/App/StatorWorkpiecePosition/Doc/工件定位TCP通信协议.md b/App/StatorWorkpiecePosition/Doc/工件定位TCP通信协议.md index dc973abc..ffb7cce3 100644 --- a/App/StatorWorkpiecePosition/Doc/工件定位TCP通信协议.md +++ b/App/StatorWorkpiecePosition/Doc/工件定位TCP通信协议.md @@ -1,4 +1,4 @@ -# WorkpieceTapered / WorkpieceRotor TCP 协议 +# 锥形工件定位 / 转子钢芯定位 TCP 协议 ## 1. 概述 @@ -11,13 +11,6 @@ - 当前模式:眼在手外 - 请求和响应均不使用 JSON -适用项目: - -- `WorkpieceTapered`:锥形工件定位 -- `WorkpieceRotor`:转子钢芯定位 - -两个项目共用同一套 TCP/IP 协议格式。 - ## 2. 请求报文 格式: @@ -30,7 +23,6 @@ ```text S1\r\n -T1\r\n ``` 字段说明: @@ -38,10 +30,10 @@ T1\r\n | 字段 | 说明 | |---|---| | `S1` | `S`=工件检测,后跟相机索引 | -| `T1` | `T`=料框检测,后跟相机索引 | 本项目为眼在手外,检测请求不需要传入机械臂当前 `X/Y/Z/A/B/C`。 -料框检测用于后续工件定位,不通过 TCP/IP 返回料框几何数据。 +工件检测算法会在定位过程中同步计算所需的料框信息,不需要发送单独的料框检测请求, +也不通过 TCP/IP 返回料框几何数据。 ## 3. 工件检测返回报文 @@ -74,6 +66,21 @@ PointNum_Type_X_Y_Z_A_B_C[_Type_X_Y_Z_A_B_C...]\r\n | `X/Y/Z` | 工件位置,单位 mm,保留 3 位小数 | | `A/B/C` | 工件姿态,单位 deg,保留 3 位小数 | +`Type`(`workpieceType`)取值含义如下: + +| `workpieceType` | 含义 | +|---:|---| +| `0` | 中央 | +| `1` | 上边 | +| `2` | 下边 | +| `3` | 左边 | +| `4` | 右边 | +| `5` | 左上角 | +| `6` | 右上角 | +| `7` | 左下角 | +| `8` | 右下角 | +| `9` | 隔板 | + 本项目不输出接近点坐标,只输出工件定位结果。 ## 4. 错误响应 diff --git a/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/Inc/IVrConfig.h b/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/Inc/IVrConfig.h index c45852a9..e47cf21c 100644 --- a/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/Inc/IVrConfig.h +++ b/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/Inc/IVrConfig.h @@ -80,6 +80,8 @@ struct VrRotorCoreParam { double radius = 45.0; double height = 20.0; + double spacerLength = 720.0; // 隔板标称长度 + double spacerWidth = 520.0; // 隔板标称宽度 double layerRatio = 0.5; // 分层系数 double distToSideRatio = 1.1; // 边距系数 double groundRemoveOffset = 200.0; // 地面去除Z偏置 diff --git a/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/Src/VrConfig.cpp b/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/Src/VrConfig.cpp index a61f4ab6..10f17ede 100644 --- a/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/Src/VrConfig.cpp +++ b/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/Src/VrConfig.cpp @@ -169,6 +169,14 @@ int CVrConfig::LoadConfig(const std::string& filePath, ConfigResult& configResul rotorParam.radius = rotorCoreParamElement->DoubleAttribute("radius"); if (rotorCoreParamElement->Attribute("height")) rotorParam.height = rotorCoreParamElement->DoubleAttribute("height"); + if (rotorCoreParamElement->Attribute("spacerLength")) + { + rotorParam.spacerLength = rotorCoreParamElement->DoubleAttribute("spacerLength"); + } + if (rotorCoreParamElement->Attribute("spacerWidth")) + { + rotorParam.spacerWidth = rotorCoreParamElement->DoubleAttribute("spacerWidth"); + } if (rotorCoreParamElement->Attribute("layerRatio")) rotorParam.layerRatio = rotorCoreParamElement->DoubleAttribute("layerRatio"); if (rotorCoreParamElement->Attribute("distToSideRatio")) @@ -437,6 +445,8 @@ bool CVrConfig::SaveConfig(const std::string& filePath, ConfigResult& configResu XMLElement* rotorCoreParamElement = doc.NewElement("RotorCoreParam"); rotorCoreParamElement->SetAttribute("radius", configResult.algorithmParams.rotorCoreParam.radius); rotorCoreParamElement->SetAttribute("height", configResult.algorithmParams.rotorCoreParam.height); + rotorCoreParamElement->SetAttribute("spacerLength", configResult.algorithmParams.rotorCoreParam.spacerLength); + rotorCoreParamElement->SetAttribute("spacerWidth", configResult.algorithmParams.rotorCoreParam.spacerWidth); rotorCoreParamElement->SetAttribute("layerRatio", configResult.algorithmParams.rotorCoreParam.layerRatio); rotorCoreParamElement->SetAttribute("distToSideRatio", configResult.algorithmParams.rotorCoreParam.distToSideRatio); rotorCoreParamElement->SetAttribute("groundRemoveOffset", configResult.algorithmParams.rotorCoreParam.groundRemoveOffset); diff --git a/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/config/config.xml b/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/config/config.xml index 72419007..b6b97d48 100644 --- a/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/config/config.xml +++ b/App/StatorWorkpiecePosition/StatorWorkpiecePositionConfig/config/config.xml @@ -28,7 +28,8 @@ minRectVertex1_0="5000.0" minRectVertex1_1="-5000.0" minRectVertex1_2="0.0" minRectVertex2_0="5000.0" minRectVertex2_1="5000.0" minRectVertex2_2="0.0" minRectVertex3_0="-5000.0" minRectVertex3_1="5000.0" minRectVertex3_2="0.0"/> - +