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);
}
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/19349836

浙公网安备 33010602011771号