脚本实现contains

#!/bin/bash
# method one
# $1 -> base string; $2 -> target string
contains=$(echo $1 | grep $2 | wc -l)
if [ ${contains} = 0 ];
then
    echo $1 "does not contain" $2
else
    echo $1 "contains" $2
fi  
#!/bin/bash
# method two
# $1 -> base string; $2 -> target string
[[ $1 =~ $2 ]] && echo $1 "contains" $2 || echo $1 "does not contain" $2
#!/bin/bash
# method three
# $1 -> base string; $2 -> target string
[[ $1 = *$2* ]] && echo $1 "contains" $2 || echo $1 "does not contain" $2
<think>我们参考用户提供的引用和之前的问题,用户希望使用脚本实现VisionPro的结果输出。根据引用[1]和[4],VisionPro的脚本功能可以在工具组(ToolBlock)的GroupRun方法中编写自定义逻辑,访问工具的输出值并设置到ToolBlock的输出终端。 关键步骤: 1. 在ToolBlock的脚本编辑器中,重写GroupRun方法。 2. 在GroupRun方法中,遍历运行工具(使用RunTool方法)。 3. 从各个工具的Results中获取所需的数据(如坐标值)。 4. 将获取的数据赋值给ToolBlock的Outputs,以便外部访问。 示例代码(参考引用[4]): 假设我们有一个CogFindLineTool(找线工具),我们想要获取线的起点坐标(X, Y)和角度(Rotation),并根据条件设置最终的检测结果(Result)。 另外,引用[5]提供了一种自动将内部ToolBlock的输入输出与外部ToolBlock的输入输出关联的方法,但用户当前需求主要是输出结果,我们可以简化处理。 下面是一个具体的示例,展示如何通过脚本获取工具结果并输出:</think>### VisionPro 脚本实现结果输出详解 通过脚本实现 VisionPro 结果输出需在工具组(ToolGroup/ToolBlock)的脚本编辑器中编写逻辑,核心是重写 `GroupRun` 方法并操作输入输出终端。以下是关键步骤和示例: --- #### 一、基础输出流程 1. **重写 GroupRun 方法** 在脚本编辑器中继承 `CogToolGroup`,重写执行方法: ```csharp public override bool GroupRun(ref string message, ref CogToolResultConstants result) { // 1. 运行所有工具 foreach (ICogTool tool in mToolBlock.Tools) { mToolBlock.RunTool(tool, ref message, ref result); } // 2. 获取工具结果 CogPMAlignTool pmTool = mToolBlock.Tools["CogPMAlignTool1"] as CogPMAlignTool; double x = pmTool.Results[0].GetPose().TranslationX; double y = pmTool.Results[0].GetPose().TranslationY; // 3. 输出到ToolBlock终端 mToolBlock.Outputs["OutputX"].Value = x; // 绑定到输出终端 mToolBlock.Outputs["OutputY"].Value = y; return true; // 返回执行状态 } ``` 2. **结果验证逻辑**(引用[4]) 添加条件判断确保结果有效性: ```csharp if (y < -0.1 || y > 0.38) { mToolBlock.Outputs["Result"].Value = false; // 输出异常标志 return false; // 终止流程 } ``` --- #### 二、高级输出技巧 1. **自动传递输入输出**(引用[5]) 实现内外层ToolBlock的自动数据传递: ```csharp // 清空输出终端 foreach (CogToolBlockTerminal ctbt in mToolBlock.Outputs) { ctbt.Value = null; } // 自动映射内部工具输出 CogToolBlock innerTB = mToolBlock.Tools["InnerToolBlock"] as CogToolBlock; foreach (CogToolBlockTerminal ctbt in mToolBlock.Outputs) { if (innerTB.Outputs.Contains(ctbt.Name)) { ctbt.Value = innerTB.Outputs[ctbt.Name].Value; // 自动传递 } } ``` 2. **多工具结果聚合** 收集多个工具结果统一输出: ```csharp var results = new System.Data.DataTable(); results.Columns.Add("ToolName"); results.Columns.Add("X"); results.Columns.Add("Y"); foreach (ICogTool tool in mToolBlock.Tools) { if (tool is CogPMAlignTool pmTool) { results.Rows.Add(pmTool.Name, pmTool.TranslationX, pmTool.TranslationY); } } mToolBlock.Outputs["AllResults"].Value = results; // 输出结构化数据 ``` --- #### 三、调试与错误处理 1. **断点调试**(引用[5]) 在脚本中插入调试断点: ```csharp if (System.Diagnostics.Debugger.IsAttached) { System.Diagnostics.Debugger.Break(); // 触发调试器 } ``` 2. **异常捕获** 确保脚本健壮性: ```csharp try { mToolBlock.RunTool(tool, ref message, ref result); } catch (Exception ex) { mToolBlock.Outputs["ErrorMsg"].Value = ex.Message; // 输出错误信息 } ``` --- #### 四、实时显示结果(引用[2]) 在C#界面中显示脚本输出: ```csharp private void RunScript() { // 执行ToolBlock mToolBlock.Run(); // 显示图像结果 cogRecordDisplay1.Record = mToolBlock.CreateLastRunRecord().SubRecords[1]; // 获取脚本输出的坐标 double x = (double)mToolBlock.Outputs["OutputX"].Value; double y = (double)mToolBlock.Outputs["OutputY"].Value; // 更新UI lblResult.Text = $"X={x:F2}, Y={y:F2}"; } ``` --- #### 五、最佳实践 1. **输入输出绑定** - 在QuickBuild中创建与脚本同名的输入/输出终端 - 通过 `mToolBlock.Inputs["名称"].Value` 获取输入(引用[3]) - 通过 `mToolBlock.Outputs["名称"].Value` 设置输出 2. **性能优化** ```csharp // 仅当工具结果有效时处理 if (pmTool.Results.Status == CogToolResultConstants.Accept) { // 处理结果... } ``` 3. **结果持久化** ```csharp // 输出到CSV文件 File.AppendAllText(@"D:\Results.csv", $"{DateTime.Now},{x},{y}\n"); ``` > 关键提示:脚本中所有输出终端需在 **ToolBlock属性窗口** 提前创建[^1][^5],调试时使用 **F8单步执行** 验证逻辑[^2]。 --- ### 相关问题 1. 如何将脚本输出结果实时传输到PLC系统? 2. 脚本中如何处理多个工具的依赖执行顺序? 3. VisionPro脚本如何与数据库交互实现结果存储? 4. 怎样在脚本实现坐标系的动态转换? 5. 如何优化脚本性能以适应高速检测场景? [^1]: VisionPro脚本基础与GroupRun重写方法 [^2]: CogRecordDisplay控件显示运行结果 [^3]: ToolBlock输入输出终端操作 [^4]: 脚本中的条件判断与结果控制 [^5]: 自动数据传递与调试技巧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值