From 002c47c669ab89b3df27f03d9ffccc39cc7d4436 Mon Sep 17 00:00:00 2001 From: wumin <109769592+wmccol@users.noreply.github.com> Date: Wed, 24 Jul 2024 14:31:40 +0800 Subject: [PATCH] Add files via upload --- README.md | 145 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 132 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 4d2c5a9..9ff4162 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,132 @@ -# 果蔬智能装备及产业化 - -此代码涉及海康威视面阵相机**MV-CS050-10GC** - -光谱相机为无锡谱世界生产的RT10。 - -与机械手通讯采用tcp-ip协议,主要发送分级结果给机械手,此部分代码为滕广、方晓东、徐耀创作。 - - - -**注意:依赖文件在release里面,是v3.0版本,记得下载** - - +# 果蔬智能装备及产业化 + +UpmatchinePassion-tomato + 文件夹: +├─***CameraConfig*** +├─debug +│ ├─bearer +│ ├─CameraConfig +│ ├─debug +│ ├─iconengines +│ ├─imageformats +│ ├─Log +│ ├─platforms +│ ├─release +│ ├─***Settings*** +│ │ └─401d +│ ├─styles +│ └─translations +├─dll +├─***image*** +│ ├─L +│ ├─R +│ ├─specImg +│ └─T +│ ├─bottom +│ ├─middle +│ └─top +├─***opencv*** +│ ├─include +│ │ ├─CMakeFiles +│ │ ├─opencv +│ │ └─opencv2 +│ │ +│ └─Withcontrib +│ └─include +│ ├─opencv +│ └─opencv2 +├─release +├─***rgbcamera_sdk*** +│ ├─Includes +│ └─Libraries +├─***RT_SDK*** +│ ├─include +│ ├─lib +└─**src** + +## 0 引言 + +此代码涉及海康威视面阵相机**MV-CS050-10GC** + +光谱相机为无锡谱世界生产的RT10,**settings文件夹一定要放在debug目录下**。 + +与机械手通讯采用tcp-ip协议,主要发送分级结果给机械手。 + +与称重模块通讯以及光谱相机筛选谱段以及拼接。 + + + + +**注意:依赖文件在release里面,是v3.0版本,记得下载** + +## 1 细节 + +福建泉州番茄-百香果 Qt 项目代码,应该是 Qt 人的入门级代码。 + +代码部分一共有三部分,camera^ thread和widget, camera主要内容是相机,负责相 机的初始化和参数设置‘thread主要内容是线程,负责各个线程的工作和启停,widget主要内容是界面按钮和信号的处理。 + +下面进行各个分部分介绍(完整代码都有注释,所以此文档重点介绍一些难理解的点) + +### 1.1 Camera + +此次RGB相机选用的是海康的面阵相机,相机型号为MV-CS050-10GC,关于相机的 用户手册可以去海康官网下载。此次一共用到三个相机。 + +![1721802095232](C:\Users\PC\AppData\Roaming\Typora\typora-user-images\1721802095232.png) + +一共三个相机,分别为图中标的 14、15 和 17,以传送带前进方向为正方向,17 为右 侧相机,14 为左侧相机,15 为顶部相机。因为三个相机,就得确定三个相机的连接顺序, 所以选择根据相机第四位ip来确定顺序,100为右侧相机,150为左侧相机,200为顶部相 机,以下为代码具体实现。 + +```c++ + switch (ip4) + { + case 100: + MV_CC_CreateHandle(&camera_handle1, device_list.pDeviceInfo[i]); + break; + case 150: + MV_CC_CreateHandle(&camera_handle, device_list.pDeviceInfo[i]); + break; + case 200: + MV_CC_CreateHandle(&camera_handle2, device_list.pDeviceInfo[i]); + break; + default: + break; + } +``` + + + +其余代码可参考海康相机调试软件MVS自带的开发指南,里面有完整的抓图程序以及 各个函数接口定义。路径为D:\MVS\Development\Documentations,具体图片如如所示。 + +![1721802263676](C:\Users\PC\AppData\Roaming\Typora\typora-user-images\1721802263676.png) + +光谱相机代码就当图一乐。如果有兴趣, 可以搜索.bil编排格式的光谱数据,即可理解数据筛选。 + +### 1.2 Thread + +线程代码部分开头为三个RGB相机的回调函数,主要功能是相机传输图像的数据,代 码层面接受图像数据并处理,具体内容看海康相机的用户指南,里面有关于回调的详细解释。 + +此次项目一共开设了三个线程,分别为ProcessImg (处理光谱相机数据线程)、 RecvThread (接受python端返回的数据线程)和SendThread (给python端发送数据线程), 所有线程相关的代码都在各个线程类的Run函数内,因为线程在启动后,会执行一次他对 应Run函数,每个线程都写了 while (1)死循环,为的是让线程一直处于监听状态,一旦满 足处理要求就立马进行处理。线程开启代码在widget.cpp内,具体代码如下。 + +//开启线程也就是执行一次对应线程的**run()**函数在**thread**里面有 即执行三个线程的**while** **(1)***死循环*一直监听 + +```c++ +processimg->start(); + +sendthread->start(); +recvthread->start(); +``` + + + +发送和接收线程内,对于数据有对应的协议位,具体协议内容在python端,其中发送 线程内,对于发送的判断条件为什么是: topImgTQueue>15,因为从RGB相机第 一次触发到称重模块之间的果托数量正好是16,所以要再第16次触发后开始发送,这样 读取到的python返回值和读取到的称重数据就能对应上。发送线程为什么要数据对齐,因 为三个RGB相机在空间上是有错位的,而三个相机又是同时触发,所以相机的图片需要进 行数据对齐,既删除掉一些多余的图像。 + +其余代码都是常规代码,问ChatGPT就可以。 + +### 1.3 Widget + +Widget主要是负责一些界面上的信号和函数,这部分重点应该是信号和槽函数的 connect函数的理解,可以自行写一些信号和槽函数的代码,这样可以更深入了解信号和 槽函数对应的关系。 + +Widget内涉及到两个协议,分别是跟机械手通讯的协议和跟PLC通讯的协议。 + +与机械手通讯采用Socket TCP/IP协议,Qt端做服务器,机械手做客户机,端口号为 21123,IP任意,Qt会监听本地指定端口号下的任意IP,通讯报文格式为 [X:0;Y:0;A:0;ATTR:0;ID:0;],ATTR后面是等级,ID后面是果类0是番茄1是百香果。 + +与PLC通讯采用Modbus TCP协议,端口号为2000,IP为192.168.101.110,从机地 址为1, Qt端做主站,PLC做从站,分为收跟发,Qt端会给PLC发送等级信息和编号信 息,Qt端会从PLC读取称重数据。跟PLC商量称重数据放在寄存器40001 上, PLC负责 写,Qt负责读取;编号放在寄存器40002,等级信息放在40003,4XXXX寄存器在PLC端是 16位的数据寄存器,所以所有读取格式都采用uint16_t,但代码中读、写的地址是40000 和40001,这是因为Modbus TCP协议读、写似乎是从指定寄存器地址的下一位地址开始 操作,验证过结果是对的,能正确读、写数据,但具体理论是否如我们假设的一样没去深 究。 \ No newline at end of file