C#+VisionMaster联合开发(三)_操作模块

一、获取模块列表

1、获取方案中的模块列表

// 加载模块列表
ModuleInfoList moduleInfoList = VmSolutionMain.GetAllModuleList();
if (moduleInfoList.nNum > 0)
{
    List<string> vmModuleNames = moduleInfoList.astModuleInfo.Where(a => !string.IsNullOrEmpty(a.strDisplayName)).Select(a => a.strDisplayName).ToList();
}

2、获取流程中的模块列表

ModuleInfoList moduleList = vmProcedure.GetAllModuleList();  // 获取所有模块列表;vmProcedure为流程对象
if (moduleList.nNum > 0)
{
    List<string> modileNames = moduleList.astModuleInfo.Select(a => a.strDisplayName).ToList();
}

二、读写流程中模块的参数(示例为圆查找、直线查找、图像源模块)

1、读取

var moduleObj = VmSolutionMain[$"{processName}.{moduleName}"];  // 获取找圆模块对象
if (moduleObj == null)
{
    MessageBox.Show($"‘读取模块参数’失败!未能在VM方案中找到‘模块[{processName}.{moduleName}]’", "异常", MessageBoxButtons.OK, MessageBoxIcon.Hand);
    return;
}
if (moduleObj is IMVSCircleFindModuTool circleTool1)
{
    circleTool = circleTool1;

    string paramValue = string.Empty;
    circleTool.ModuParams.GetParamValue(moduleParamName, ref paramValue);
    txtModuleParamValue.Text = paramValue;

    ShowLog($"‘读取模块参数’执行完成!模块参数[{moduleParamName}= {paramValue}]");
}
else if (moduleObj is IMVSLineFindModuTool lineTool1)
{
    lineTool = lineTool1;

    string paramValue = string.Empty;
    lineTool.ModuParams.GetParamValue(moduleParamName, ref paramValue);
    txtModuleParamValue.Text = paramValue;

    ShowLog($"‘读取模块参数’执行完成!模块参数[{moduleParamName}= {paramValue}]");
}
else if (moduleObj is ImageSourceModuleTool imageSourceTool1)
{
    imageSourceTool = imageSourceTool1;

    string paramValue = string.Empty;
    imageSourceTool.ModuParams.GetParamValue(moduleParamName, ref paramValue);
    txtModuleParamValue.Text = paramValue;

    ShowLog($"‘读取模块参数’执行完成!模块参数[{moduleParamName}= {paramValue}]");
}
else
{
    MessageBox.Show($"‘读取模块参数’失败!VM方案中的模块‘[{processName}.{moduleName}]’不是本示例需要的模块,请重新选择一个模块!", "异常", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}】

2、写入

var moduleObj = VmSolutionMain[$"{processName}.{moduleName}"];  // 获取找圆模块对象
if (moduleObj == null)
{
    MessageBox.Show($"‘写入模块参数’失败!未能在VM方案中找到‘模块[{processName}.{moduleName}]’", "异常", MessageBoxButtons.OK, MessageBoxIcon.Hand);
    return;
}
if (moduleObj is IMVSCircleFindModuTool circleTool1)
{
    circleTool = circleTool1;
    var result1 = circleTool.ModuParams.SetParamValue(moduleParamName, moduleParamValue);

    ShowLog($"‘写入模块参数’执行完成!模块参数修改为[{moduleParamName}= {moduleParamValue}]");
}
if (moduleObj is IMVSLineFindModuTool lineTool1)
{
    lineTool = lineTool1;
    var result1 = lineTool.ModuParams.SetParamValue(moduleParamName, moduleParamValue);

    ShowLog($"‘写入模块参数’执行完成!模块参数修改为[{moduleParamName}= {moduleParamValue}]");
}
if (moduleObj is ImageSourceModuleTool imageSourceTool1)
{
    imageSourceTool = imageSourceTool1;
    var result1 = imageSourceTool.ModuParams.SetParamValue(moduleParamName, moduleParamValue);

    ShowLog($"‘写入模块参数’执行完成!模块参数修改为[{moduleParamName}= {moduleParamValue}]");
}
else
{
    MessageBox.Show($"‘写入模块参数’失败!VM方案中的模块‘[{processName}.{moduleName}]’不是本示例需要的模块,请重新选择一个模块!", "异常", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}

三、读取流程中模块的结果(示例为圆查找、直线查找、图像源模块)

var moduleObj = VmSolutionMain[$"{processName}.{moduleName}"];  // 获取找圆模块对象
if (moduleObj == null)
{
    MessageBox.Show($"‘获取模块结果’失败!未能在VM方案中找到‘模块[{processName}.{moduleName}]’", "异常", MessageBoxButtons.OK, MessageBoxIcon.Hand);
    return;
}
if (moduleObj is IMVSCircleFindModuTool circleTool1)
{
    circleTool = circleTool1;
    CircleFindResult circleFindResult = circleTool.ModuResult;
    ShowLog($"‘获取模块结果’执行完成!模块状态:{circleFindResult.ModuStatus},圆心坐标:({circleFindResult.OutputCircle.CenterPoint.X},{circleFindResult.OutputCircle.CenterPoint.Y}),半径:{circleFindResult.OutputCircle.Radius}");
}
else if (moduleObj is IMVSLineFindModuTool lineTool1)
{
    lineTool = lineTool1;
    LineFindResult circleFindResult = lineTool.ModuResult;
    ShowLog($"‘获取模块结果’执行完成!模块状态:{circleFindResult.ModuStatus},中点:({circleFindResult.Midpoint.X},{circleFindResult.Midpoint.Y}),直线角度:{circleFindResult.LineAngle}");
}
else if (moduleObj is ImageSourceModuleTool imageSourceTool1)
{
    imageSourceTool = imageSourceTool1;
    ImageSourceResult imageSourceResult = imageSourceTool.ModuResult;
    if (imageSourceResult != null && imageSourceResult.ImageData != null)
    {
        Bitmap outImageData = imageSourceResult.ImageData.ToBitmap();
        picResult1.Image = outImageData;
    }
    ShowLog($"‘获取模块结果’执行完成!帧号:{imageSourceResult?.FrameNum},丢包数:{imageSourceResult?.LostPacketCount}");
}
else
{
    MessageBox.Show($"‘获取模块结果’失败!VM方案中的模块‘[{processName}.{moduleName}]’不是本示例需要的‘圆查找模块’或‘图像模块’,请重新选择一个模块!", "异常", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
posted @ 2025-12-14 20:45  ꧁执笔小白꧂  阅读(5)  评论(0)    收藏  举报