halcon和C#混编的时候几段要注意的代码202009


(一)

注意下面的img不能放在线程外面写。

而是要放在lamada写法的线程里面。

 public string ccdTopWork()
        {
     
            HObject img = new HObject();
            img.Dispose();
            var time = stringHelper.GetHHmmss();

            try
            {
                if (CCDTopDelayTime == 0) CCDTopDelayTime = 5;
                Thread.Sleep(CCDTopDelayTime);
                if (CCDIsDebugMode)
                {
                    img = ccdTop.GrabImage(CCDTopImgFilePath);
                    new Thread(new ThreadStart(() =>
                    {
                        ccdTopLogic(img, 0, time);
                        img.Dispose();
                    })).Start();
                }
                else
                {
                    img = ccdTop.GrabImage();
                    new Thread(new ThreadStart(() =>
                    {
                        ccdTopLogic(img, 0, time);
                        img.Dispose();
                    })).Start();
                }
                return string.Format("P3,{0}", time);
            }
            }

正确写法如下:

public string ccdTopWork()
        {
     
            HObject img = new HObject();
            img.Dispose();
            var time = stringHelper.GetHHmmss();

            try
            {
                if (CCDTopDelayTime == 0) CCDTopDelayTime = 5;
                Thread.Sleep(CCDTopDelayTime);
                if (CCDIsDebugMode)
                {
                    new Thread(new ThreadStart(() =>
                    {
                        ccdTopLogic(ccdTop.GrabImage(CCDTopImgFilePath), 0, time);
                        img.Dispose();
                    })).Start();
                }
                else
                {
                    new Thread(new ThreadStart(() =>
                    {
                        ccdTopLogic(ccdTop.GrabImage(), 0, time);
                        img.Dispose();
                    })).Start();
                }
                return string.Format("P3,{0}", time);
            }

错误的写法会造成执行执行外部这句出错, ProcCall.Execute()


    ProcCall.SetInputIconicParamObject("Image", img);
    ProcCall.SetInputCtrlParamTuple("parameter", paramList);
    ProcCall.SetInputCtrlParamTuple("test_parameter", testNum);

    ProcCall.Execute();

image.png



(二)


在使用halcon引擎的时候,如果你有多个相机要并发执行外部函数,请注意一定要每个相机有自己的HDevProcedureCall。

如果你每个相机都用同一个HDevProcedureCall,会有很不幸的事情发生。

你会发生外部函数调用经常会报传出的对象异常之类的报错。

而你分别运行这几个外部函数却是没有问题的。


重要的事再强调一下:多相机并发的时候,你不能使用同一个HDevProcedureCall来调用外部函数。


另外,你的设备不管有多少个相机,注意都只需要一个halcon引擎(HDevEngine )哦。

private HDevEngine MyEngine = new HDevEngine();

public HDevProcedureCall ProcCall;
var halconExamples = HSystem.GetSystem("example_dir");
var ProgramPathString = halconExamples + @"\hdevengine\hdevelop\fin_detection.hdev";
var Program = new HDevProcedure(CCDProgramPath);
ProcCall = new HDevProcedureCall(Program);


(三)


记个题外话。

在线建立一个空的仓库后,想把本地目录下的工程上传到新建仓库怎么搞?


  1. 首先,本地目录下执行  git init

  2. 再执行指令把本地目录和远程仓库建立联系

      git remote add origin  远程仓库地址

  3. 再执行 git pull origi master 试一下

    如果还有错误,再百度一下吧。

另外,极有可能出现下面的错误:

git push error: failed to push some refs to

出现错误的原因是github中的README.md文件不在本地代码目录中。

也就是说我们需要先将远程代码库中的任何文件先pull到本地代码库中,才能push新的代码到github代码库中。

使用如下命令:git pull --rebase origin master

然后再进行上传: git push -u origin master



多人协作改代码怎么搞?

这个只需要对你的线上仓库做一个协助邀请就可以了。

image.png

image.png

image.png

在这里输入你同事的git账号名,就可以了。

image.png

然后你的同事去账号对应的注册邮箱收邀请邮件即可。

成功后他会在自己的git下面看到这个项目了。



--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864