Mil代码编程的基本概述
Posted Thomas会写字
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mil代码编程的基本概述相关的知识,希望对你有一定的参考价值。
一、概述
Mil代码有自己的一套逻辑:App-->Sys-->Func-->Free,共四个模块,其中每一个模块都是有自己的唯一MI_ID来表示自己的资源。
Mil资源调用基本原则是谁调用谁释放,先创建后释放。
-
谁调用谁释放:每个模块都有自己的ID专用释放函数,由自己负责释放比如MilApp 有MAppFree,MilSys有MilSysFree。
-
先创建后释放:就是说资源的释放是有顺序的,先创建的资源后释放,后创建的资源先释放。
在新版本的 Mil 中,针对C++开发环境增加了一个新特性,可以不用释放。
在旧版Mil开发时是 MIL_ID abc; Alloc(& abc); Free(abc);这个套路。
在新版Mil开发时发现了新的讨论:MIL_UNIQUE_XXX_ID abc; Alloc(& abc);,这里XXX可以是APP,CAL等等。重点是不用释放。
Mil的资源可以分成3类:App、System、Function。
- App:通常来说一个进程使用一个MilAppID,这个ID是进程内全局的资源容器。
- System:是App容器下的一个组件,按照采集方式来分配。一个App下可以有多个Sys,不同Sys是根据图像的采集方式来区分的:比如Host、GigE、Mil不同采集卡等等。当系统中需要初始化多个Sys时需要注意,我们老大说不同Sys之间的bufCopy会比同一个Sys下来的慢,所以在最初系统设计时这些都要考虑清楚。
- Function:是Sys容器下的一个组件,是指Mil的函数类,比如Cal、Mod、Edge、Blob等等。每一个Sys下可以有多个函数ID,并没有数量限制。
二、基本配置
在Mil初次安装时需要把可能用到的模块一次性装全,否则后期拓展只能卸载当前Mil环境重新装过。而且Mil的卸载并不干净,可能导致下次的安装需要,这时需要在卸载后运行MilClear来清理下,然后再次安装就不会有问题了。
Mil的配置,默认的就可以,不用做任何修改。但两个地方需要注意:General下DefaultValues中的SystemType,看看默认的对不对。还有一个就是Updates,如果需要更新的话可以在这里填写相关信息后更新新版本的Mil,但是高血压、暴脾气的就算了,因为网速巨慢。。。
如果是新手第一次使用Mil的话,建议从Mil的Example开始看起,CoPilot和工具箱先不要弄,首先熟悉下Mil的基本套路,上手会快一些。
三、Mil函数基本套路
Mil里面 有很多函数,他们的命名都是有规律的,例如MappXXX都是设计MilApp相关的操作,Mblob都是blob相关的操作。Mil将所有的函数都是按照需求列好。
Mapp | 当前exe中Mil容器的设置 |
Msys | 当前的Mil采集系统,host、GigE、其它采集卡等等,通常来说一个方式只用一个Sys就可以。 |
Mbead | 一个曲线测量的类 |
Mblob | Blob分析 |
Mbuf | 图片的读写、复制、创建等 |
Mcal | 标定相关 |
Mcode | 条码读取相关 |
Mcol | 颜色分析相关 |
Mdig | 采集相关 |
Mdisp | 显示相关 |
Medge | 纹理分析,在有些软件里叫做Path,是一个东西 |
Mgra | 绘图相关 |
Mim | 图像操作相关 |
Mmeas | 测量相关 |
Mmet | 形态学测量相关 |
Mmod | 模板匹配相关 |
Mocr | 字符识别 |
Mpat | 灰度匹配 |
Mreg | 图像拼接 |
Mstr | 字符串识别 |
Mthr | Mil线程 |
通常来说,每一类函数的套路规律:
- Alloc 分配一个资源ID
- AllocResult 分配资源ID的结果ID,一个资源ID可以绑定多个结果ID
- Control 参数设置
- Caculate,Find 计算
- Inquire 查询资源ID的参数设置
- GerResult 获取结果
- Draw 绘制结果
- Free 释放资源ID和结果ID
- Save 保存
- Restore 读取保存的内容
四、Mil的环境配置
Mil的环境配置 -- C++:
- VC++ --> 包含目录:MIL\\Include 和 MIL\\Include\\MILDyn
- VC++ --> 库目录:MIL\\LIB
- 连接器 --> 输入 --> 附加依赖项:库目录下所有文件名
Mil的环境配置 -- C#:
- 引用 MIL\\MIL.NET\\Matrox.MatroxImagingLibrary.dll
- using Matrox.MatroxImagingLibrary;
以上是关于Mil代码编程的基本概述的主要内容,如果未能解决你的问题,请参考以下文章
Java网络编程-第二节:套接字(Socket)编程基本概述