[ 博客首页 ]
黄杰, 2018-04-19
root[a]linuxsand.info
(这次不知道怎么起个合适的标题)
前言:最近要测试我给一个国产机器人编写的程序库是否有问题(视觉二维引导方面),需要搭建测试环境;其中一个要求就是快速做出视觉程序。 我以前基于 Cognex VisionPro 做的视觉应用太重了些,同时通信部分需要重写来适配新的消息格式——因此干脆从头做这个视觉应用。 反正就我自己用,那么不考虑易用性,突发奇想:做一个命令行驱动的应用,在这个应用里可以完成视觉工程的编写,也能直接运行起来。
这回受了 FANUC KCL 很大的启发,但为了方便查看图片,必须有个图像显示(CogRecordDisplay Control);于是做成了这样:
目前它支持的命令如下:
newtb tbname
创建一个叫做 tbname 的新 CogToolBlock 对象,同时弹出一个窗口(CogToolBlock Edit Control)去编辑它renametb oldname newname
重命名 CogToolBlock 对象loadtb tbpath
从磁盘加载 vpp 文件并反序列化成 CogToolBlock 对象loadtbs tbsfolder
从磁盘加载存有若干 vpp 文件的目录,并依次反序列化成 CogToolBlocklisttbs
列出已经加载了的 CogToolBlockshowtb tbname
详细打印出该 CogToolBlock 的信息,包括输入输出终端、包含的工具edittb tbname
弹出窗口编辑某个 CogToolBlockdeltb tbname
从内存中删除某个 CogToolBlocksetrunorder tb1 tb2 ...
为内存中已经加载了的 CogToolBlock 们排序,提供给 run 命令使用run
运行已经排过序的 CogToolBlock,这个不通用,我这里默认除了最后一个 ToolBlock,其它的输入输出都是 CogImage8Grey 类型gc
手动调用 .NET 垃圾收集器lsvpp path
列出某个磁盘路径下的 vpp 文件clear
清屏help
显示帮助信息cmd
呼叫出一个 cmd.exeexit
退出程序典型的使用过程:
newtb tbname
,自行保存;或者加载磁盘上的 vpp,loadtb tbpath
或 loadtbs tbsfolder
setrunorder tb1 tb2 ...
run
运行之后,会将最后一个 ToolBlock 产出的图像(带图线 Records)显示出来;同时将结果打印出来,并以文本文件的形式保存到磁盘某处。之所以用文本文件,是为了尽可能通用,减少特定项目的硬编码。
这个 Mini Console 内建了一个 socket server,它接收客户端的特定指令,去运行一串 ToolBlock,将结果(即上面持久化到磁盘的文本文件)读取解析出来,再封装成合法的消息返回给客户端。当然通信逻辑和消息格式是硬编码的,暂时没时间和精力去抽象出来。
做这个东西花了今天白天的大部分时间,做完仍然觉得挺有意思:相信它能持续改善,发光发热。