渲染及数据结果获取

1 VM方案——获取条码信息----脚本打印日志到本地

通过编写脚本,将获取条码信息 打印日志到本地;
脚本模块使用的是C#语言。

1.1 案例介绍

案例步骤如下:
1,用GetStringValue函数分别获取条码信息;
2,通过FileStream类操作流写入信息到本地;
3,并通过SetstringValue函数输出打印日志的状态信息,给到下一个模块。

在这里插入图片描述
在这里插入图片描述

1.2 添加及编辑脚本

添加一个脚本模块,双击打开,在原有的脚本 模板上添加代码
在这里插入图片描述

双击打开,在原有的脚本 模板上添加代码

在这里插入图片描述

代码编辑如下;
注意需要引用 命名空间

   using System.IO;

在这里插入图片描述

using System;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Script.Methods;
public partial class UserScript:ScriptMethods,IProcessMethods
{
   //********输入变量**********
   
    string Barcode; 				//条码 
    
    //*******输出变量**********
    
    string writeSucceedOrFailed; 	//日志写入状态;
    
    /// <summary>
    /// 预编译时变量初始化
    /// </summary>
    public void Init()
    {
		//变量初始化,其余变量可在该函数中添加
       
    }

    /// <summary>
    /// Enter the process function when running code once
	/// 流程执行一次进入Process函数
    /// </summary>
    /// <returns></returns>
    public bool Process()
    {
        //每次执行将进入该函数,此处添加所需的逻辑流程处理    
       
        GetStringValue("barcode",ref Barcode);				//获取条码信息
        
        try
       {
       	   using(FileStream fsWrite = new FileStream(@"E:\VM_test\Log.txt",FileMode.Append,FileAccess.Write) )
           {
       		  string str= "条码信息:"+ Barcode ;
       		  byte[] buffer=Encoding.Default.GetBytes(str+"\r\n");		
       		  fsWrite.Write(buffer,0,buffer.Length); 		
           }
           writeSucceedOrFailed="写入OKAY";    
       }
         catch
       {
			writeSucceedOrFailed="写入失败";
       }
       SetStringValue("stateOutput",writeSucceedOrFailed);	  //输出日志打印状态
        
        return true;
    }
}
                            

运行后在指定路径 "E:\VM_test\Log.txt"下产生了 Log.txt文件夹,并记录了条码信息
在这里插入图片描述

在这里插入图片描述

2 获取流程1的结果

想要获取上面的VM方案,将结果显示在Winform界面上;
在这里插入图片描述
点击流程1左边的设置按钮
在这里插入图片描述
在输出设置中配置输出数据,条码个数,条码信息
在显示设置中配置渲染结果

在这里插入图片描述

配置好流程输出后点击确定保存,
关闭VM软件,

3 Winform程序开发

进入VS二次开发程序进行设置;

接着上一讲的 方案加载、执行及保存(按钮事件)的程序接续写
在这里插入图片描述

显示渲染结果,需要使用到vmRenderControl控件;

从工具箱中拖出控件到图像显示区,然后在控件属性中将Dock的值改为Fill;

在这里插入图片描述

在这里插入图片描述

获取结果,分为渲染结果和数据结果;

  • 渲染结果显示在界面上,
  • 数据结果获取后用户可进行输出或其它处理,本示例将数据结果显示在消息区;

接着上一讲的代码继续写,在方案执行按钮下面添加一下代码

 private void button3_Click(object sender, EventArgs e)
 {
     VmSolution.Instance.SyncRun();//此函数,会同步执行一次方案中的所有流程
     listBox1.Items.Add("方案执行一次成功!");
     listBox1.TopIndex = listBox1.Items.Count - 1;

     //获取结果,分为渲染结果和数据结果;
     //渲染结果显示在界面上,
     //数据结果获取后用户可进行输出或其它处理,本示例将数据结果显示在消息区;

     //将其与先前VM中配置好输出的流程1进行绑定
     VmProcedure vmProcess1 = (VmProcedure)VmSolution.Instance["流程1"];
     //然后将渲染控件的显示源ModuleSource绑定流程1对象
     vmRenderControl1.ModuleSource = vmProcess1;
     //通过此代码即可获取到格式化中订阅的条码识别结果strValue
     string barCodeResult = vmProcess1.ModuResult.GetOutputString("out1").astStringVal[0].strValue;
     string barNum = vmProcess1.ModuResult.GetOutputInt("out0").pIntVal[0].ToString();
     listBox1.Items.Add("条码识别结果:" + barCodeResult);
     listBox1.TopIndex = listBox1.Items.Count - 1;
     listBox1.Items.Add("条码个数:" + barNum);
     listBox1.TopIndex = listBox1.Items.Count - 1;

 }

4 运行结果

在这里插入图片描述

5 Form1完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using VM.Core;
using VM.PlatformSDKCS;

namespace test1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Vm Sol File|*.sol*";//选择后缀为.sol的文件,VM方案的后缀均为.sol
            DialogResult openFileResult = openFileDialog.ShowDialog();
            if (DialogResult.OK == openFileResult)
            {
                textBox1.Text = openFileDialog.FileName;
            }
            listBox1.Items.Add("选择路径成功!");
            listBox1.TopIndex = listBox1.Items.Count - 1;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            VmSolution.Load(textBox1.Text);//函数中的参数为方案的路径,直接使用文本框textBox1的文本内容;
            listBox1.Items.Add("方案加载成功!");
            listBox1.TopIndex = listBox1.Items.Count - 1;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            VmSolution.Instance.SyncRun();//此函数,会同步执行一次方案中的所有流程
            listBox1.Items.Add("方案执行一次成功!");
            listBox1.TopIndex = listBox1.Items.Count - 1;

            //获取结果,分为渲染结果和数据结果;
            //渲染结果显示在界面上,
            //数据结果获取后用户可进行输出或其它处理,本示例将数据结果显示在消息区;

            //将其与先前VM中配置好输出的流程1进行绑定
            VmProcedure vmProcess1 = (VmProcedure)VmSolution.Instance["流程1"];
            //然后将渲染控件的显示源ModuleSource绑定流程1对象
            vmRenderControl1.ModuleSource = vmProcess1;
            //通过此代码即可获取到格式化中订阅的条码识别结果strValue
            string barCodeResult = vmProcess1.ModuResult.GetOutputString("out1").astStringVal[0].strValue;
            string barNum = vmProcess1.ModuResult.GetOutputInt("out0").pIntVal[0].ToString();
            listBox1.Items.Add("条码识别结果:" + barCodeResult);
            listBox1.TopIndex = listBox1.Items.Count - 1;
            listBox1.Items.Add("条码个数:" + barNum);
            listBox1.TopIndex = listBox1.Items.Count - 1;

        }

        private void button2_Click(object sender, EventArgs e)
        {
            VmSolution.Save(); //Save函数是将方案保存到原始路径直接替换原方案;
            //VmSolution.SaveAs("path");//而SaveAs是将方案另存至自定义的路径
            listBox1.Items.Add("方案保存成功!");
            listBox1.TopIndex = listBox1.Items.Count - 1;
        }
    }
}

上面的代码,变量名没有修改;
为了提高代码的可读性,变量的名字尽可能地包含功能信息;如下面这样

  private void buttonChooseSoluPath_Click(object sender, EventArgs e)
  {
      OpenFileDialog openFileDialog = new OpenFileDialog();
      openFileDialog.Filter = "Vm Sol File|*.sol*";//选择后缀为.sol的文件,VM方案的后缀均为.sol
      DialogResult openFileResult = openFileDialog.ShowDialog();
      if (DialogResult.OK == openFileResult)
      {
          textBoxSolutionPath.Text = openFileDialog.FileName;
      }
      listBoxMsg.Items.Add("选择路径成功!");
      listBoxMsg.TopIndex = listBoxMsg.Items.Count - 1;

  }

  private void buttonLoadSolution_Click(object sender, EventArgs e)
  {
      VmSolution.Load(textBoxSolutionPath.Text);//函数中的参数为方案的路径,直接使用文本框textBox1的文本内容;
      listBoxMsg.Items.Add("方案加载成功!");
      listBoxMsg.TopIndex = listBoxMsg.Items.Count - 1;
  }

  private void buttonExecute_Click(object sender, EventArgs e)
  {
      VmSolution.Instance.SyncRun();//此函数,会同步执行一次方案中的所有流程
      listBoxMsg.Items.Add("方案执行一次成功!");
      listBoxMsg.TopIndex = listBoxMsg.Items.Count - 1;

      //获取结果,分为渲染结果和数据结果;
      //渲染结果显示在界面上,
      //数据结果获取后用户可进行输出或其它处理,本示例将数据结果显示在消息区;

      //将其与先前VM中配置好输出的流程1进行绑定
      VmProcedure vmProcess1 = (VmProcedure)VmSolution.Instance["流程1"];
      //然后将渲染控件的显示源ModuleSource绑定流程1对象
      vmRenderControl1.ModuleSource = vmProcess1;

  }

  private void buttonSave_Click(object sender, EventArgs e)
  {
      VmSolution.Save(); //Save函数是将方案保存到原始路径直接替换原方案;
      //VmSolution.SaveAs("path");//而SaveAs是将方案另存至自定义的路径
      listBoxMsg.Items.Add("方案保存成功!");
      listBoxMsg.TopIndex = listBoxMsg.Items.Count - 1;
  }
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐