Commit 021a213a 刘韬

稳定版本

1 个父辈 bedca39f
正在显示 34 个修改的文件 包含 2249 行增加200 行删除
<?xml version="1.0"?>
<doc>
<assembly>
<name>Asa.Camera.VisionLib</name>
</assembly>
<members>
<member name="M:CameraVisionLib.Model.BarcodeAPI.eyemImageRead(System.String,System.Int32,CameraVisionLib.Model.BarcodeAPI.EyemImage@)">
<summary>
读取图像
</summary>
<param name="filename"></param>
<param name="iFalgs"></param>
<param name="ucpImage"></param>
<returns></returns>
</member>
<member name="M:CameraVisionLib.Model.BarcodeAPI.eyemImageFree(System.IntPtr)">
<summary>
释放图像资源
</summary>
<param name="ipImage"></param>
</member>
<member name="M:CameraVisionLib.Model.BarcodeAPI.eyemDetectAndDecodeFree(System.IntPtr)">
<summary>
释放工具
</summary>
<param name="hObject"></param>
<returns></returns>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemImage.ucpImage">
<summary>
地址
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemImage.iWidth">
<summary>
图像内存 x 方向大小
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemImage.iHeight">
<summary>
图像内存 y 方向大小
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemImage.iChannel">
<summary>
图像通道数
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemRect.iXs">
<summary>
起始点(左上角) x 坐标
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemRect.iYs">
<summary>
起始点(左上角) y 坐标
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemRect.iWidth">
<summary>
x 方向大小(宽度)
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemRect.iHeight">
<summary>
y 方向大小(高度)
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemBarCode.dAngle">
<summary>
角度
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemBarCode.iCenterX">
<summary>
x坐标
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemBarCode.iCenterY">
<summary>
y坐标
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemBarCode.hType">
<summary>
码类型
</summary>
</member>
<member name="F:CameraVisionLib.Model.BarcodeAPI.EyemBarCode.hText">
<summary>
码内容
</summary>
</member>
<member name="T:CameraVisionLib.Model.BarcodeInfo">
<summary>
条码信息,1DBarcode、2DBarcode
</summary>
</member>
<member name="P:CameraVisionLib.Model.BarcodeInfo.Text">
<summary>
文本
</summary>
</member>
<member name="P:CameraVisionLib.Model.BarcodeInfo.CodeType">
<summary>
条码类型
</summary>
</member>
<member name="P:CameraVisionLib.Model.BarcodeInfo.Center">
<summary>
中心点
</summary>
</member>
<member name="P:CameraVisionLib.Model.BarcodeInfo.Angle">
<summary>
角度,3点钟方向0°,逆时针为正,顺时针为负。
</summary>
</member>
<member name="P:CameraVisionLib.Model.BarcodeInfo.Size">
<summary>
条码尺寸大小
</summary>
</member>
<member name="P:CameraVisionLib.Model.BarcodeInfo.Distance">
<summary>
原点垂直于经过中心点的直线的距离
</summary>
</member>
<member name="M:CameraVisionLib.Model.BarcodeInfo.Clone">
<summary>
副本,深拷贝
</summary>
<returns></returns>
</member>
<member name="T:CameraVisionLib.Model.ScanCodeOrder">
<summary>
扫描条码的顺序
</summary>
</member>
<member name="F:CameraVisionLib.Model.ScanCodeOrder.HalconOnly">
<summary>
仅使用Halcon
</summary>
</member>
<member name="F:CameraVisionLib.Model.ScanCodeOrder.EyemLibOnly">
<summary>
仅使用EyemLib
</summary>
</member>
<member name="F:CameraVisionLib.Model.ScanCodeOrder.HalconEyemLib">
<summary>
优先Halcon,扫码失败时使用EyemLib
</summary>
</member>
<member name="F:CameraVisionLib.Model.ScanCodeOrder.EyemLibHalcon">
<summary>
优先EyemLib,扫码失败时使用Halcon
</summary>
</member>
<member name="T:CameraVisionLib.Model.CodeType">
<summary>
条码类型
</summary>
</member>
<member name="F:CameraVisionLib.Model.CodeType.All">
<summary>
一维和二维条码
</summary>
</member>
<member name="F:CameraVisionLib.Model.CodeType.Barcode1D">
<summary>
一维条码
</summary>
</member>
<member name="F:CameraVisionLib.Model.CodeType.Barcode2D">
<summary>
二维条码,QRCode,DataMatrix,PDF417
</summary>
</member>
<member name="T:CameraVisionLib.Model.IPCameraAPI">
<summary>
CHCNetSDK 的摘要说明。
</summary>
</member>
<member name="F:CameraVisionLib.Model.IPCameraAPI.NET_DVR_IPADDR.sIpV4">
char[16]
</member>
<member name="F:CameraVisionLib.Model.IPCameraAPI.NET_DVR_IPADDR.byRes">
BYTE[128]
</member>
<member name="F:CameraVisionLib.Model.IPCameraAPI.NET_DVR_ATM_FRAMEFORMAT_V30.byRes1">
输入方式:0-网络监听、1网络协议、2-串口监听、3-串口协议
</member>
<member name="F:CameraVisionLib.Model.IPCameraAPI.NET_VCA_POLYGON.dwPointNum">
DWORD->unsigned int
</member>
<member name="F:CameraVisionLib.Model.IPCameraAPI.MAX_OVERLAP_ITEM_NUM">
抓拍机
</member>
<member name="T:CameraVisionLib.Model.IPCameraInfo">
<summary>
登录信息
</summary>
</member>
<member name="T:Asa.Barcode.Identify">
<summary>
条码识别,1DBarcode、2DBarcode
</summary>
</member>
<member name="M:Asa.Barcode.Identify.#ctor(CameraVisionLib.Model.ScanParam)">
<summary>
条码识别,1DBarcode、2DBarcode
</summary>
<param name="param"></param>
</member>
<member name="M:Asa.Barcode.Identify.GetCode(System.Drawing.Bitmap)">
<summary>
获取条码
</summary>
<param name="image"></param>
<returns></returns>
</member>
<member name="T:Asa.Camera.VisionLib">
<summary>
视觉库
</summary>
</member>
<member name="M:Asa.Camera.VisionLib.#ctor(System.String,System.Boolean,System.String)">
<summary>
视觉库
</summary>
<param name="configPath"></param>
<param name="preload"></param>
<param name="logName"></param>
</member>
<member name="M:Asa.Camera.VisionLib.Dispose">
<summary>
释放
</summary>
</member>
<member name="P:Asa.Camera.VisionLib.Count">
<summary>
相机数量
</summary>
</member>
<member name="M:Asa.Camera.VisionLib.Load">
<summary>
加载相机,有预加载了就不需要调用
</summary>
</member>
<member name="M:Asa.Camera.VisionLib.SaveAsConfig(System.String)">
<summary>
另存为配置文件
</summary>
<param name="path"></param>
</member>
<member name="M:Asa.Camera.VisionLib.GetCameraName">
<summary>
获取相机名称
</summary>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.Open">
<summary>
打开
</summary>
</member>
<member name="M:Asa.Camera.VisionLib.Open(System.String)">
<summary>
打开
</summary>
<param name="cameraName"></param>
</member>
<member name="M:Asa.Camera.VisionLib.Close">
<summary>
关闭
</summary>
</member>
<member name="M:Asa.Camera.VisionLib.Close(System.String)">
<summary>
关闭
</summary>
<param name="cameraName"></param>
</member>
<member name="M:Asa.Camera.VisionLib.GetImage">
<summary>
获取当前图像
</summary>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.GetImage(System.Int32)">
<summary>
按索引获取当前图像
</summary>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.GetImage(System.String)">
<summary>
获取当前图像
</summary>
<param name="cameraName"></param>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.SaveImage(System.String,System.String,System.Drawing.Imaging.ImageFormat)">
<summary>
保存当前图像
</summary>
<param name="path">文件夹路径</param>
<param name="fileName">文件名,不带扩展名</param>
<param name="format">图像类型</param>
</member>
<member name="M:Asa.Camera.VisionLib.SaveImage(System.String,System.String,System.String,System.Drawing.Imaging.ImageFormat)">
<summary>
保存当前图像
</summary>
<param name="cameraName">相机名称</param>
<param name="path">文件夹路径</param>
<param name="fileName">文件名,不带扩展名</param>
<param name="format">图像类型</param>
</member>
<member name="M:Asa.Camera.VisionLib.PreviewImage(System.String,System.IntPtr)">
<summary>
预览图像,目前仅支持 HIK.IPCamera
</summary>
<param name="cameraName"></param>
<param name="handle"></param>
</member>
<member name="M:Asa.Camera.VisionLib.GetBarCodeText(System.Collections.Generic.List{System.Drawing.Bitmap}@)">
<summary>
从相机图像获取条码
</summary>
<param name="image"></param>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.GetBarCodeText(System.String,System.Drawing.Bitmap@)">
<summary>
从相机图像获取条码
</summary>
<param name="cameraName"></param>
<param name="image"></param>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.GetBarCodeText(System.Drawing.Bitmap)">
<summary>
从给定的图像中获取条码文本
</summary>
<param name="bmp"></param>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.GetBarCodeText(System.Collections.Generic.List{CameraVisionLib.Model.BarcodeInfo})">
<summary>
从给定的条码中获取条码文本
</summary>
<param name="info"></param>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.GetBarCode(System.Collections.Generic.List{System.Drawing.Bitmap}@)">
<summary>
从相机图像获取条码
</summary>
<param name="image"></param>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.GetBarCode(System.String,System.Drawing.Bitmap@)">
<summary>
从相机图像获取条码
</summary>
<param name="cameraName"></param>
<param name="image"></param>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.GetBarCode(System.Drawing.Bitmap)">
<summary>
从给定的图像中获取条码
</summary>
<param name="bmp"></param>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.FeatureSingleCompare(System.String,System.String,System.Collections.Generic.Dictionary{System.String,System.Boolean}@,System.Drawing.Bitmap@)">
<summary>
特征单张比较图,没有原图
</summary>
<param name="cameraName"></param>
<param name="planName"></param>
<param name="exist"></param>
<param name="image"></param>
<returns></returns>
</member>
<member name="M:Asa.Camera.VisionLib.FeatureSingleCompare(System.Drawing.Bitmap,System.String,System.String,System.Collections.Generic.Dictionary{System.String,System.Boolean}@)">
<summary>
特征单张比较图,没有原图
</summary>
<param name="bmp"></param>
<param name="cameraName"></param>
<param name="planName"></param>
<param name="exist"></param>
<returns></returns>
</member>
<member name="F:Asa.Camera.FrmOpenCamera.components">
<summary>
Required designer variable.
</summary>
</member>
<member name="M:Asa.Camera.FrmOpenCamera.Dispose(System.Boolean)">
<summary>
Clean up any resources being used.
</summary>
<param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
</member>
<member name="M:Asa.Camera.FrmOpenCamera.InitializeComponent">
<summary>
Required method for Designer support - do not modify
the contents of this method with the code editor.
</summary>
</member>
<member name="F:Asa.Camera.FrmSetting.components">
<summary>
Required designer variable.
</summary>
</member>
<member name="M:Asa.Camera.FrmSetting.Dispose(System.Boolean)">
<summary>
Clean up any resources being used.
</summary>
<param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
</member>
<member name="M:Asa.Camera.FrmSetting.InitializeComponent">
<summary>
Required method for Designer support - do not modify
the contents of this method with the code editor.
</summary>
</member>
<member name="T:Asa.HIK.IPCamera">
<summary>
网络监控摄像机
</summary>
</member>
<member name="M:Asa.HIK.IPCamera.#ctor(System.Collections.Generic.List{CameraVisionLib.Model.IPCameraInfo})">
<summary>
网络监控摄像机
</summary>
<param name="info"></param>
</member>
<member name="P:Asa.HIK.IPCamera.Name">
<summary>
相机名称
</summary>
</member>
<member name="P:Asa.HIK.IPCamera.Count">
<summary>
相机总数
</summary>
</member>
<member name="P:Asa.HIK.IPCamera.IsOpen">
<summary>
相机是否打开
</summary>
</member>
<member name="P:Asa.HIK.IPCamera.Size">
<summary>
图像分辨率
</summary>
</member>
<member name="P:Asa.HIK.IPCamera.Image">
<summary>
相机获取到的图像
</summary>
</member>
<member name="M:Asa.HIK.IPCamera.Load">
<summary>
加载
</summary>
<returns></returns>
</member>
<member name="M:Asa.HIK.IPCamera.Dispose">
<summary>
释放所有
</summary>
</member>
<member name="M:Asa.HIK.IPCamera.OpenAll">
<summary>
打开所有摄像机
</summary>
<returns></returns>
</member>
<member name="M:Asa.HIK.IPCamera.CloseAll">
<summary>
关闭所有摄像机
</summary>
</member>
<member name="M:Asa.HIK.IPCamera.Open(System.Int32)">
<summary>
打开摄像机
</summary>
<param name="cameraIndex"></param>
<returns></returns>
</member>
<member name="M:Asa.HIK.IPCamera.Open(System.String)">
<summary>
打开摄像机
</summary>
<param name="cameraName"></param>
<returns></returns>
</member>
<member name="M:Asa.HIK.IPCamera.Close(System.Int32)">
<summary>
关闭摄像机
</summary>
<param name="cameraIndex"></param>
</member>
<member name="M:Asa.HIK.IPCamera.Close(System.String)">
<summary>
关闭摄像机
</summary>
<param name="cameraName"></param>
</member>
<member name="M:Asa.HIK.IPCamera.GrabOne(System.Drawing.Bitmap[]@)">
<summary>
抓取所有摄像机一张图像
</summary>
<param name="bmp"></param>
</member>
<member name="M:Asa.HIK.IPCamera.GrabOne(System.Int32)">
<summary>
抓取一张图像
</summary>
<param name="cameraIndex">相机索引</param>
<returns></returns>
</member>
<member name="M:Asa.HIK.IPCamera.GrabOne(System.Int32,System.Drawing.Bitmap@)">
<summary>
抓取一张图像
</summary>
<param name="cameraIndex">相机索引</param>
<param name="bmp">Bitmap图像</param>
<returns></returns>
</member>
<member name="M:Asa.HIK.IPCamera.GrabOne(System.String,System.Drawing.Bitmap@)">
<summary>
抓取一张图像
</summary>
<param name="cameraName">相机名称</param>
<param name="bmp">Bitmap图像</param>
<returns></returns>
</member>
<member name="M:Asa.HIK.IPCamera.GrabOne(System.Int32,System.Byte[]@,System.Drawing.Imaging.PixelFormat@)">
<summary>
抓取一张图像字节
</summary>
<param name="cameraIndex">相机索引</param>
<param name="buff">图像字节数组</param>
<param name="format"></param>
<returns></returns>
</member>
<member name="M:Asa.HIK.IPCamera.GrabOne(System.Int32,System.IntPtr@,System.Drawing.Imaging.PixelFormat@)">
<summary>
抓取一张图像指针
</summary>
<param name="cameraIndex"></param>
<param name="handle"></param>
<param name="format"></param>
<returns></returns>
</member>
<member name="M:Asa.HIK.IPCamera.PreviewImage(System.String,System.IntPtr)">
<summary>
预览图像
</summary>
<param name="cameraName"></param>
<param name="handle"></param>
<returns></returns>
</member>
<member name="T:Asa.HIK.VisionCamera">
<summary>
机器视觉面阵相机
</summary>
</member>
<member name="M:Asa.HIK.VisionCamera.#ctor">
<summary>
机器视觉面阵相机
</summary>
</member>
<member name="P:Asa.HIK.VisionCamera.Name">
<summary>
相机名称
</summary>
</member>
<member name="P:Asa.HIK.VisionCamera.Count">
<summary>
相机总数
</summary>
</member>
<member name="P:Asa.HIK.VisionCamera.IsOpen">
<summary>
相机是否打开
</summary>
</member>
<member name="P:Asa.HIK.VisionCamera.Size">
<summary>
图像分辨率
</summary>
</member>
<member name="P:Asa.HIK.VisionCamera.Image">
<summary>
相机获取到的图像
</summary>
</member>
<member name="M:Asa.HIK.VisionCamera.Load">
<summary>
加载
</summary>
<returns></returns>
</member>
<member name="M:Asa.HIK.VisionCamera.Dispose">
<summary>
释放所有
</summary>
</member>
<member name="M:Asa.HIK.VisionCamera.OpenAll">
<summary>
打开所有相机
</summary>
<returns></returns>
</member>
<member name="M:Asa.HIK.VisionCamera.CloseAll">
<summary>
关闭所有相机
</summary>
</member>
<member name="M:Asa.HIK.VisionCamera.Open(System.Int32)">
<summary>
打开相机
</summary>
<param name="cameraIndex"></param>
<returns></returns>
</member>
<member name="M:Asa.HIK.VisionCamera.Open(System.String)">
<summary>
打开相机
</summary>
<param name="cameraName"></param>
<returns></returns>
</member>
<member name="M:Asa.HIK.VisionCamera.Close(System.Int32)">
<summary>
关闭相机
</summary>
<param name="cameraIndex"></param>
</member>
<member name="M:Asa.HIK.VisionCamera.Close(System.String)">
<summary>
关闭相机
</summary>
<param name="cameraName"></param>
</member>
<member name="M:Asa.HIK.VisionCamera.GrabOne(System.Drawing.Bitmap[]@)">
<summary>
抓取所有相机一张图像
</summary>
<param name="bmp"></param>
</member>
<member name="M:Asa.HIK.VisionCamera.GrabOne(System.Int32)">
<summary>
抓取一张图像
</summary>
<param name="cameraIndex">相机索引</param>
<returns></returns>
</member>
<member name="M:Asa.HIK.VisionCamera.GrabOne(System.Int32,System.Drawing.Bitmap@)">
<summary>
抓取一张图像
</summary>
<param name="cameraIndex">相机索引</param>
<param name="bmp">Bitmap图像</param>
<returns></returns>
</member>
<member name="M:Asa.HIK.VisionCamera.GrabOne(System.String,System.Drawing.Bitmap@)">
<summary>
抓取一张图像
</summary>
<param name="cameraName">相机名称</param>
<param name="bmp">Bitmap图像</param>
<returns></returns>
</member>
<member name="M:Asa.HIK.VisionCamera.GrabOne(System.Int32,System.Byte[]@,System.Drawing.Imaging.PixelFormat@)">
<summary>
抓取一张图像字节
</summary>
<param name="cameraIndex">相机索引</param>
<param name="buff">图像字节数组</param>
<param name="format"></param>
<returns></returns>
</member>
<member name="M:Asa.HIK.VisionCamera.GrabOne(System.Int32,System.IntPtr@,System.Drawing.Imaging.PixelFormat@)">
<summary>
抓取一张图像指针
</summary>
<param name="cameraIndex"></param>
<param name="handle"></param>
<param name="format"></param>
<returns></returns>
</member>
<member name="T:Asa.Basler.VisionCamera">
<summary>
机器视觉面阵相机
</summary>
</member>
<member name="F:Asa.Basler.VisionCamera.cameraCurr">
<summary>
当前相机
</summary>
</member>
<member name="F:Asa.Basler.VisionCamera.cameraAll">
<summary>
所有相机列表
</summary>
</member>
<member name="F:Asa.Basler.VisionCamera.cameraName">
<summary>
所有相机的名称
</summary>
</member>
<member name="M:Asa.Basler.VisionCamera.#ctor">
<summary>
机器视觉面阵相机
</summary>
</member>
<member name="P:Asa.Basler.VisionCamera.Name">
<summary>
相机名称
</summary>
</member>
<member name="P:Asa.Basler.VisionCamera.Count">
<summary>
相机总数
</summary>
</member>
<member name="P:Asa.Basler.VisionCamera.IsOpen">
<summary>
相机是否打开
</summary>
</member>
<member name="P:Asa.Basler.VisionCamera.Size">
<summary>
图像分辨率
</summary>
</member>
<member name="P:Asa.Basler.VisionCamera.Image">
<summary>
相机获取到的图像
</summary>
</member>
<member name="M:Asa.Basler.VisionCamera.Load">
<summary>
加载
</summary>
<returns></returns>
</member>
<member name="M:Asa.Basler.VisionCamera.Dispose">
<summary>
释放所有
</summary>
</member>
<member name="M:Asa.Basler.VisionCamera.OpenAll">
<summary>
打开所有摄像机
</summary>
<returns></returns>
</member>
<member name="M:Asa.Basler.VisionCamera.CloseAll">
<summary>
关闭所有摄像机
</summary>
</member>
<member name="M:Asa.Basler.VisionCamera.Open(System.Int32)">
<summary>
打开摄像机
</summary>
<param name="cameraIndex"></param>
<returns></returns>
</member>
<member name="M:Asa.Basler.VisionCamera.Open(System.String)">
<summary>
打开相机
</summary>
<param name="cameraName"></param>
<returns></returns>
</member>
<member name="M:Asa.Basler.VisionCamera.Close(System.Int32)">
<summary>
关闭摄像机
</summary>
<param name="cameraIndex"></param>
</member>
<member name="M:Asa.Basler.VisionCamera.Close(System.String)">
<summary>
关闭摄像机
</summary>
<param name="cameraName"></param>
</member>
<member name="M:Asa.Basler.VisionCamera.GrabOne(System.Drawing.Bitmap[]@)">
<summary>
抓取所有摄像机一张图像
</summary>
<param name="bmp"></param>
</member>
<member name="M:Asa.Basler.VisionCamera.GrabOne(System.Int32)">
<summary>
抓取一张图像
</summary>
<param name="cameraIndex">相机索引</param>
<returns></returns>
</member>
<member name="M:Asa.Basler.VisionCamera.GrabOne(System.Int32,System.Drawing.Bitmap@)">
<summary>
抓取一张图像
</summary>
<param name="cameraIndex">相机索引</param>
<param name="bmp">Bitmap图像</param>
<returns></returns>
</member>
<member name="M:Asa.Basler.VisionCamera.GrabOne(System.String,System.Drawing.Bitmap@)">
<summary>
抓取一张图像
</summary>
<param name="cameraName">相机名称</param>
<param name="bmp">Bitmap图像</param>
<returns></returns>
</member>
<member name="M:Asa.Basler.VisionCamera.GrabOne(System.Int32,System.Byte[]@,System.Drawing.Imaging.PixelFormat@)">
<summary>
抓取一张图像字节
</summary>
<param name="cameraIndex">相机索引</param>
<param name="buff">图像字节数组</param>
<param name="format"></param>
<returns></returns>
</member>
<member name="M:Asa.Basler.VisionCamera.GrabOne(System.Int32,System.IntPtr@,System.Drawing.Imaging.PixelFormat@)">
<summary>
抓取一张图像指针
</summary>
<param name="cameraIndex"></param>
<param name="handle"></param>
<param name="format"></param>
<returns></returns>
</member>
<member name="T:Asa.Region.Feature">
<summary>
区域特征
</summary>
</member>
<member name="M:Asa.Region.Feature.#ctor(System.Collections.Generic.List{System.String},System.Collections.Generic.List{CameraVisionLib.Model.RegionAPI.EyemRegion})">
<summary>
区域特征
</summary>
<param name="name"></param>
<param name="regions"></param>
</member>
<member name="M:Asa.Region.Feature.OriginalImage(System.Drawing.Bitmap)">
<summary>
原始图像
</summary>
<param name="image"></param>
<returns></returns>
</member>
<member name="M:Asa.Region.Feature.CompareImage(System.Drawing.Bitmap,System.Collections.Generic.Dictionary{System.String,System.Boolean}@)">
<summary>
比较图像
</summary>
<param name="image"></param>
<param name="exist"></param>
<returns></returns>
</member>
<member name="M:Asa.Region.Feature.CompareImage(System.Drawing.Bitmap,System.Collections.Generic.Dictionary{System.String,System.Boolean}@,System.Drawing.Bitmap@)">
<summary>
比较图像
</summary>
<param name="image"></param>
<param name="exist"></param>
<param name="dspImage"></param>
<returns></returns>
</member>
<member name="M:Asa.Region.Feature.CompareImage(System.IntPtr,System.Drawing.Imaging.PixelFormat,System.Collections.Generic.Dictionary{System.String,System.Boolean}@,System.Drawing.Bitmap@)">
<summary>
比较图像
</summary>
<param name="bmpPtr"></param>
<param name="format"></param>
<param name="exist"></param>
<param name="dspImage"></param>
<returns></returns>
</member>
<member name="M:Asa.Region.Feature.CompareSingleImage(System.Drawing.Bitmap,System.Collections.Generic.Dictionary{System.String,System.Boolean}@)">
<summary>
比较单张图像,没有原图
</summary>
<param name="image"></param>
<param name="exist"></param>
<returns></returns>
</member>
</members>
</doc>
<?xml version="1.0"?>
<doc>
<assembly>
<name>Asa.CarerayImage</name>
</assembly>
<members>
<member name="T:Asa.ONNXAlgoMatch">
<summary>
ONNX算法匹配
</summary>
</member>
<member name="M:Asa.ONNXAlgoMatch.MatchPID(System.String,System.Int32,System.Single@)">
<summary>
匹配算法PID
</summary>
<param name="fileName"></param>
<param name="ShrinkOffset"></param>
<param name="matchDeg">匹配百分比</param>
<returns></returns>
</member>
<member name="T:Asa.eyemLib">
<summary>
点料和解码
</summary>
</member>
<member name="M:Asa.eyemLib.setSkipProcessID(System.Int32)">
<summary>
结束之前的算法计算
</summary>
<param name="pid">-1复位, 0结束</param>
<returns></returns>
</member>
<member name="M:Asa.eyemLib.eyemInitONNXModel(System.String)">
<summary>
初始化ONNX模型(10.0)
</summary>
<param name="extractorModelPath">模型路径</param>
<returns></returns>
</member>
<member name="M:Asa.eyemLib.eyemExtractWithONNX(Asa.eyemLib.EyemImage,System.Single[])">
<summary>
特征提取器
</summary>
<param name="tpImage">图像(128X128)</param>
<param name="fFeatures">特征</param>
<returns></returns>
</member>
<member name="M:Asa.eyemLib.calcSimilarity(System.Single[],System.Single[])">
<summary>
特征匹配
</summary>
<param name="lhs">向量一</param>
<param name="rhs">向量二</param>
<returns></returns>
</member>
<member name="M:Asa.eyemLib.eyemTrainImageSampler(Asa.eyemLib.EyemImage,System.Int32,System.String,System.String,Asa.eyemLib.EyemImage@,Asa.eyemLib.EyemImage@)">
<summary>
对图像进行采样生成训练样本
</summary>
<param name="tpImage">图像</param>
<param name="iSize">尺寸128(最大224)</param>
<param name="ccClassName">类名</param>
<param name="ccToPath">保存路径</param>
<returns></returns>
</member>
<member name="T:Asa.eyemLib.EyemImage">
<summary>
图像信息
</summary>
</member>
<member name="F:Asa.eyemLib.EyemImage.ucpImage">
<summary>
地址
</summary>
</member>
<member name="F:Asa.eyemLib.EyemImage.iWidth">
<summary>
图像内存 x 方向大小
</summary>
</member>
<member name="F:Asa.eyemLib.EyemImage.iHeight">
<summary>
图像内存 y 方向大小
</summary>
</member>
<member name="F:Asa.eyemLib.EyemImage.iDepth">
<summary>
iDepth:
uint8_t 取值范围[0, 255], iDepth = 0(常用,解码图像一般为此种格式)
int8_t 取值范围[-128, 127], iDepth = 1
uint16_t 取值范围[0, 56635], iDepth = 2(常用,点料机图像一般为此种格式)
int16_t 取值范围[-32768, 32767], iDepth = 3
int32_t 取值范围[-2147483648, 2147483647], iDepth = 4
float_t 取值范围[-3.4028235E38, 3.4028235E38], iDepth = 5
double_t 取值范围[-1.7E-308, 1.7E+308], iDepth = 6
</summary>
</member>
<member name="F:Asa.eyemLib.EyemImage.iChannels">
<summary>
彩色图 iChannels=3或4(比RGB多了Alpha通道),一般为3
灰度图 iChannels = 1
</summary>
</member>
<member name="M:Asa.eyemLib.eyemDetectAndDecode(Asa.eyemLib.EyemImage,Asa.eyemLib.EyemRect,System.String,System.String,Asa.eyemLib.DataCodeHandle@,Asa.eyemLib.EyemBarCode*@,System.Int32@,System.Boolean,System.Int32,System.Int32,System.Int32,System.Int32,System.Double,System.Double,System.Double)">
<summary>
扫码接口
</summary>
<param name="tpImage"></param>
<param name="tpRoi">扫码区域</param>
<param name="fileName"></param>
<param name="strCodeType"></param>
<param name="hObject"></param>
<param name="tpResults"></param>
<param name="ipNum"></param>
<param name="bUseNiBlack"></param>
<param name="iBlockSize"></param>
<param name="iRangeC"></param>
<param name="iSymbolMin"></param>
<param name="iSymbolMax"></param>
<param name="dScaleUpAndDown">缩放值</param>
<param name="dToleErr"></param>
<param name="dMinorStep"></param>
<returns></returns>
</member>
<member name="M:Asa.eyemLib.eyemDetectAndDecodeFree(System.IntPtr)">
<summary>
释放工具
</summary>
<param name="hObject"></param>
<returns></returns>
</member>
<member name="T:Asa.eyemLib.DataCodeHandle">
<summary>
释放
</summary>
</member>
<member name="M:Asa.eyemLib.eyemMulFuncTool(Asa.eyemLib.EyemImage,Asa.eyemLib.EyemRect,System.String,System.Double,Asa.eyemLib.EyemOcsFXYR@,Asa.eyemLib.EyemImage@)">
<summary>
</summary>
<param name="tpImage"></param>
<param name="tpRoi"></param>
<param name="funcName">__func1</param>
<param name="dThreshold"></param>
<param name="tpCircle"></param>
<param name="tpDstImg"></param>
<returns></returns>
</member>
<member name="P:Asa.haobo.ImageWidth">
<summary>
图像宽度
</summary>
</member>
<member name="P:Asa.haobo.ImageHeight">
<summary>
图像高度
</summary>
</member>
<member name="P:Asa.haobo.WindowWidth">
<summary>
窗宽
</summary>
</member>
<member name="P:Asa.haobo.WindowLevel">
<summary>
窗位
</summary>
</member>
<member name="M:Asa.haobo.LoadRAW(System.String)">
<summary>
加载本地RAW图片,64字节头
</summary>
<param name="filePath">图片路径</param>
</member>
<member name="M:Asa.haobo.SaveRAW(System.String)">
<summary>
保存本地RAW图片
</summary>
<param name="filePath">图片路径</param>
</member>
<member name="M:Asa.haobo.GenerateTemplate(System.Int32)">
<summary>
校准平板
</summary>
<param name="mode">1:暗场校准,2亮场校准</param>
<returns></returns>
</member>
<member name="F:Asa.HaoboSDK.HBI_FPD_DLL._handel">
<summary>
记录与Detector连接后的句柄
</summary>
</member>
<member name="M:Asa.MatchLib.match(System.String,System.Int32,System.String@)">
<summary>
匹配元器件外观类型
</summary>
<param name="filename">x光图像文件名</param>
<param name="ShrinkOffset">图像剪裁范围</param>
<param name="pn">返回标识</param>
<returns>匹配分值 -1:匹配失败 >=0:匹配成功</returns>
</member>
<member name="M:Asa.MatchLib.learn(System.String,System.Int32,System.String)">
<summary>
学习元器件外观
</summary>
<param name="filename">x光图像</param>
<param name="ShrinkOffset">图像剪裁范围</param>
<param name="pn">标识符</param>
</member>
<member name="T:Asa.XrayImage">
<summary>
Careray平板图像
</summary>
</member>
<member name="F:Asa.XrayImage.AlgoIndex">
<summary>
算法名称对索引应序号
</summary>
</member>
<member name="M:Asa.XrayImage.GetAlgoIndex(System.String[])">
<summary>
返回算法索引序列
</summary>
</member>
<member name="P:Asa.XrayImage.WindowLevel">
<summary>
16位窗位
</summary>
</member>
<member name="P:Asa.XrayImage.WindowWidth">
<summary>
16位窗宽
</summary>
</member>
<member name="M:Asa.XrayImage.#ctor(System.String,Asa.XrayImage.DeviceType)">
<summary>
Careray平板图像
</summary>
</member>
<member name="M:Asa.XrayImage.Open">
<summary>
打开设备
</summary>
<returns></returns>
</member>
<member name="M:Asa.XrayImage.Close">
<summary>
关闭设备
</summary>
<returns></returns>
</member>
<member name="M:Asa.XrayImage.GetImage(System.Int32,System.Int32)">
<summary>
获取图像
</summary>
<returns></returns>
</member>
<member name="M:Asa.XrayImage.Get48bImage">
<summary>
获取48位RGB图像
</summary>
<returns></returns>
</member>
<member name="M:Asa.XrayImage.GetRawBufferHandle">
<summary>
获取raw数据指针
</summary>
<returns></returns>
</member>
<member name="M:Asa.XrayImage.FreeRawBufferHandle">
<summary>
释放raw指针
</summary>
</member>
<member name="M:Asa.XrayImage.GetLocalCount(System.String,System.Int32,System.Int32[]@,System.Drawing.Bitmap@)">
<summary>
本地文件普通器件点料
</summary>
<param name="path"></param>
<param name="ShrinkOffset"></param>
<param name="count"></param>
<param name="tpDstImg"></param>
<returns></returns>
</member>
<member name="M:Asa.XrayImage.GetLocalCountIrregular(System.String,System.Int32,System.String,System.Int32[]@,System.Drawing.Bitmap@)">
<summary>
本地文件异性器件点料
</summary>
<param name="path"></param>
<param name="ShrinkOffset"></param>
<param name="type"></param>
<param name="count"></param>
<param name="tpDstImg"></param>
<returns></returns>
</member>
<member name="M:Asa.XrayImage.GetCountObjectIrregularPartsMultiopt(System.String,System.Int32,System.String[],System.Int32[]@,System.Drawing.Bitmap@)">
<summary>
4盘算法点料
</summary>
</member>
<member name="M:Asa.XrayImage.GetCountObjectIrregularPartsMultiopt(Asa.eyemLib.EyemImage,System.Int32,System.String[],System.Int32[]@,System.Drawing.Bitmap@)">
<summary>
4盘算法点料
</summary>
</member>
<!-- Badly formed XML comment ignored for member "M:Asa.XrayImage.setProcessLevel(System.Double)" -->
<member name="P:Asa.XrayImage.setFineTuning">
<summary>
仅算法A有效
微调元器件黑点与背景之间的图像过滤阈值,一般来说都是0.6-0.85默认值0.7
这个值越小越容易多点,越大越容易少点
</summary>
<returns></returns>
</member>
<member name="M:Asa.XrayImage.GenerateTemplate(System.Int32)">
<summary>
校准平板
</summary>
<param name="mode">1:暗场校准,2亮场校准</param>
<returns></returns>
</member>
<member name="T:Asa.CarerayImage">
<summary>
Careray平板图像
</summary>
</member>
<member name="M:Asa.CarerayImage.#ctor(System.String)">
<summary>
Careray平板图像
</summary>
</member>
<member name="P:Asa.CarerayImage.WindowWidth">
<summary>
窗宽
</summary>
</member>
<member name="P:Asa.CarerayImage.WindowLevel">
<summary>
窗位
</summary>
</member>
<member name="P:Asa.CarerayImage.ImageWidth">
<summary>
图像宽度
</summary>
</member>
<member name="P:Asa.CarerayImage.ImageHeight">
<summary>
图像高度
</summary>
</member>
<member name="P:Asa.CarerayImage.IP">
<summary>
IP地址
</summary>
</member>
<member name="M:Asa.CarerayImage.Open">
<summary>
打开设备
</summary>
<returns></returns>
</member>
<member name="M:Asa.CarerayImage.Close">
<summary>
关闭设备
</summary>
<returns></returns>
</member>
<member name="M:Asa.CarerayImage.GetImage(System.Int32,System.Int32)">
<summary>
获取图像
</summary>
<returns></returns>
</member>
<member name="M:Asa.CarerayImage.LoadRAW(System.String)">
<summary>
加载本地RAW图片,64字节头
</summary>
<param name="filePath">图片路径</param>
</member>
<member name="M:Asa.CarerayImage.SaveRAW(System.String)">
<summary>
保存本地RAW图片
</summary>
<param name="filePath">图片路径</param>
</member>
<member name="M:Asa.CarerayImage.Get48bImage">
<summary>
获取48位RGB图像
</summary>
<returns></returns>
</member>
<member name="M:Asa.CarerayImage.GetRawBufferHandle">
<summary>
获取raw数据指针
</summary>
<returns></returns>
</member>
<member name="M:Asa.CarerayImage.FreeRawBufferHandle">
<summary>
释放RawBuffer指针
</summary>
</member>
<member name="T:Asa.API">
<summary>
CRInterface API
</summary>
</member>
<member name="P:Asa.XrayImageInterface.WindowWidth">
<summary>
窗宽
</summary>
</member>
<member name="P:Asa.XrayImageInterface.WindowLevel">
<summary>
窗位
</summary>
</member>
</members>
</doc>
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<appSettings>
<!--是否开机自动启动料仓-->
<add key="App_AutoRun" value="1" />
<add key="App_Title" value="自动点料机" />
<add key="App_AutoRun" value="1"/>
<add key="App_Title" value="自动点料机"/>
<add key="ServerAddr" value="http://10.85.17.233"/>
<add key="ConfigPath_Robot" value="\RobotConfig\Config_Robot.csv" />
<add key="ConfigPath_XRay" value="\RobotConfig\Config_XRay.csv" />
<add key="ConfigPath_InputEquip" value="\RobotConfig\Config_InputEquip.csv" />
<add key="ConfigPath_OutputEquip" value="\RobotConfig\Config_OutputEquip.csv" />
<add key="CounParamConfig" value="\XRAY\countParam.csv" />
<add key="ConfigPath_Robot" value="\RobotConfig\Config_Robot.csv"/>
<add key="ConfigPath_XRay" value="\RobotConfig\Config_XRay.csv"/>
<add key="ConfigPath_InputEquip" value="\RobotConfig\Config_InputEquip.csv"/>
<add key="ConfigPath_OutputEquip" value="\RobotConfig\Config_OutputEquip.csv"/>
<add key="CounParamConfig" value="\XRAY\countParam.csv"/>
<!--二维码类型列表配置,用#分割,一维码=Barcode 二维码: QR Code#Data Matrix ECC 200#Micro QR Code-->
<add key="CodeType" value="Data Matrix ECC 200#QR Code" />
<add key="CodeType" value="Data Matrix ECC 200#QR Code"/>
<!--<add key="CodeType" value="Data Matrix ECC 200"/>-->
<add key="ACBaudRate" value="115200" />
<add key="ACBaudRate" value="115200"/>
<!--二维码参数文件所在路径,文件名与二维码类型名一样-->
<add key="CodeParamPath" value="\CodeParam\\XRAY\countParam.csv" />
<add key="Config_Pwd" value="123456" />
<add key="CodeParamPath" value="\CodeParam\\XRAY\countParam.csv"/>
<add key="Config_Pwd" value="123456"/>
<add key="UseAIOBOX" value="1" />
<add key="UseAIOBOX" value="1"/>
<!--流水线监听端口-->
<add key="TCPServerPort" value="5246" />
<add key="TCPServerPort" value="5246"/>
<!--AGV调度服务器地址-->
<add key="AgvServerIp" value="10.85.199.20" />
<add key="AgvServerIp" value="10.85.199.20"/>
<!--IO配置-->
<add key="DIMS" value="60" />
<add key="DOMS" value="300" />
<add key="LineRunTest" value="1" />
<add key="DIMS" value="60"/>
<add key="DOMS" value="300"/>
<add key="LineRunTest" value="1"/>
<add key="DefaultPWD" value="123456" />
<add key="Server_Log_Open" value="0" />
<add key="CodeCount" value="3" />
<add key="NeedScanCode" value="1" />
<add key="Agv_Log_Open" value="0" />
<add key="DefaultPWD" value="123456"/>
<add key="Server_Log_Open" value="0"/>
<add key="CodeCount" value="3"/>
<add key="NeedScanCode" value="1"/>
<add key="Agv_Log_Open" value="0"/>
<!--检测到料串自动取料-->
<add key="AutoInput" value="1" />
<add key ="InoutDefaultPosition" value ="1000"/>
<add key="AutoInput" value="1"/>
<add key="InoutDefaultPosition" value="1000"/>
<!--标签文件名称-->
<add key ="LabelName" value ="test2"/>
<add key="LabelName" value="test2"/>
<!--打印机名称ZDesigner GT800-300dpi EPL-->
<add key ="PrinterName" value ="Microsoft Print to PDF"/>
<add key="PrinterName" value="Microsoft Print to PDF"/>
<!--是否启用打印标签-->
<add key ="NeedPrintLabel" value ="0"/>
<add key ="StickingPosJudgment" value ="0"/>
<add key="NeedPrintLabel" value="0"/>
<add key="StickingPosJudgment" value="0"/>
<!--XRay射线最后一次使用时间-->
<add key ="XRay_Data" value ="2020-6-2"/>
<add key ="ThresholdValue" value ="30"/>
<add key ="CounParamConfig" value ="\XRAY\countParam.csv"/>
<add key ="DataPath" value ="\data\DB.db3"/>
<add key ="ResultMinCount" value ="100"/>
<add key ="ComPath_Config" value ="\XRAY\pnDetailedList.csv"/>
<add key ="LabelWaitMS" value ="1000"/>
<add key ="UseLabel" value ="1"/>
<add key="XRay_Data" value="2020-6-2"/>
<add key="ThresholdValue" value="30"/>
<add key="CounParamConfig" value="\XRAY\countParam.csv"/>
<add key="DataPath" value="\data\DB.db3"/>
<add key="ResultMinCount" value="100"/>
<add key="ComPath_Config" value="\XRAY\pnDetailedList.csv"/>
<add key="LabelWaitMS" value="1000"/>
<add key="UseLabel" value="1"/>
</appSettings>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs/autoCount.log" />
<param name="Encoding" value="UTF-8" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd" />
<file value="logs/autoCount.log"/>
<param name="Encoding" value="UTF-8"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t]%-5p %m%n" />
<conversionPattern value="[%date][%t]%-5p %m%n"/>
</layout>
</appender>
<appender name="TheRFID" type="log4net.Appender.RollingFileAppender">
<file value="logs/rfid/TheRFID.log" />
<param name="Encoding" value="UTF-8" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd" />
<file value="logs/rfid/TheRFID.log"/>
<param name="Encoding" value="UTF-8"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t]%-5p %m%n" />
<conversionPattern value="[%date][%t]%-5p %m%n"/>
</layout>
</appender>
<appender name="XRay" type="log4net.Appender.RollingFileAppender">
<file value="logs/xray/XRay.log" />
<param name="Encoding" value="UTF-8" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd" />
<file value="logs/xray/XRay.log"/>
<param name="Encoding" value="UTF-8"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t]%-5p %m%n" />
<conversionPattern value="[%date][%t]%-5p %m%n"/>
</layout>
</appender>
<appender name="Count" type="log4net.Appender.RollingFileAppender">
<file value="logs/Count.log" />
<param name="Encoding" value="UTF-8" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd" />
<file value="logs/Count.log"/>
<param name="Encoding" value="UTF-8"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t]%-5p %m%n" />
<conversionPattern value="[%date][%t]%-5p %m%n"/>
</layout>
</appender>
<appender name="AIOBOX" type="log4net.Appender.RollingFileAppender">
<file value="logs/aio/AIOBOX.log" />
<param name="Encoding" value="UTF-8" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd" />
<file value="logs/aio/AIOBOX.log"/>
<param name="Encoding" value="UTF-8"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t]%-5p %m%n" />
<conversionPattern value="[%date][%t]%-5p %m%n"/>
</layout>
</appender>
<logger name="RollingLogFileAppender">
<level value="Info" />
<appender-ref ref="RollingLogFileAppender" />
<level value="Info"/>
<appender-ref ref="RollingLogFileAppender"/>
</logger>
<logger name="TheRFID">
<level value="Info" />
<appender-ref ref="TheRFID" />
<level value="Info"/>
<appender-ref ref="TheRFID"/>
</logger>
<logger name="XRay">
<level value="Info" />
<appender-ref ref="XRay" />
<level value="Info"/>
<appender-ref ref="XRay"/>
</logger>
<logger name="Count">
<level value="Info" />
<appender-ref ref="Count" />
<level value="Info"/>
<appender-ref ref="Count"/>
</logger>
<logger name="AIOBOX">
<level value="Info" />
<appender-ref ref="AIOBOX" />
<level value="Info"/>
<appender-ref ref="AIOBOX"/>
</logger>
<!--<root>
......@@ -138,6 +138,6 @@
</root>-->
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
</startup>
</configuration>
\ No newline at end of file
</configuration>
......@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OnlineStore.AutoCountClient</RootNamespace>
<AssemblyName>AutoCountClient</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
<PublishUrl>publish\</PublishUrl>
......@@ -63,7 +63,7 @@
</Reference>
<Reference Include="Asa.CarerayImage, Version=1.1.2.1, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\CarerayImage\CarerayImage\bin\Debug\Asa.CarerayImage.dll</HintPath>
<HintPath>..\..\oldDll\Asa.CarerayImage.dll</HintPath>
</Reference>
<Reference Include="Asa.PrintLabel">
<HintPath>..\..\dll\label\Asa.PrintLabel.dll</HintPath>
......
......@@ -364,7 +364,8 @@ namespace OnlineStore.AutoCountClient
{
if (equipBean.runStatus.Equals(RobotRunStatus.Runing))
{
if (equipBean.IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.HIGH) && equipBean.IOValue(IO_Type.X_OLine_Run).Equals(IO_VALUE.LOW))
var re = equipBean.Out_TrayCheck_Test(RobotManager.robot.outputEquip.Config.CameraName, IO_VALUE.HIGH);
if (re.GetValueOrDefault() && equipBean.IOValue(IO_Type.X_OLine_Run).Equals(IO_VALUE.LOW))
{
WorkParam param = new WorkParam();
param.IsTest = true;
......@@ -379,9 +380,9 @@ namespace OnlineStore.AutoCountClient
LogUtil.info(equipBean.Name + "点击:取放料测试");
equipBean.StartWorking(param);
}
else
else if (re.HasValue)
{
if (equipBean.IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.LOW))
if (!re.Value)
{
MessageBox.Show("XRay出口未检测到料盘,取放料测试 失败");
}
......
......@@ -384,7 +384,7 @@
this.批量ToolStripMenuItem,
this.单盘ToolStripMenuItem});
this.元器件学习ToolStripMenuItem.Name = "元器件学习ToolStripMenuItem";
this.元器件学习ToolStripMenuItem.Size = new System.Drawing.Size(160, 26);
this.元器件学习ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
this.元器件学习ToolStripMenuItem.Text = "元器件学习";
this.元器件学习ToolStripMenuItem.Click += new System.EventHandler(this.元器件学习ToolStripMenuItem_Click);
//
......@@ -405,24 +405,24 @@
// toolStripSeparator17
//
this.toolStripSeparator17.Name = "toolStripSeparator17";
this.toolStripSeparator17.Size = new System.Drawing.Size(157, 6);
this.toolStripSeparator17.Size = new System.Drawing.Size(177, 6);
//
// 二维码学习ToolStripMenuItem
//
this.二维码学习ToolStripMenuItem.Name = "二维码学习ToolStripMenuItem";
this.二维码学习ToolStripMenuItem.Size = new System.Drawing.Size(160, 26);
this.二维码学习ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
this.二维码学习ToolStripMenuItem.Text = "二维码学习";
this.二维码学习ToolStripMenuItem.Click += new System.EventHandler(this.二维码学习ToolStripMenuItem_Click);
//
// toolStripSeparator7
//
this.toolStripSeparator7.Name = "toolStripSeparator7";
this.toolStripSeparator7.Size = new System.Drawing.Size(157, 6);
this.toolStripSeparator7.Size = new System.Drawing.Size(177, 6);
//
// toolStripMenuItem2
//
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
this.toolStripMenuItem2.Size = new System.Drawing.Size(160, 26);
this.toolStripMenuItem2.Size = new System.Drawing.Size(180, 26);
this.toolStripMenuItem2.Text = "AGV调试";
this.toolStripMenuItem2.Visible = false;
this.toolStripMenuItem2.Click += new System.EventHandler(this.toolStripMenuItem2_Click);
......@@ -430,13 +430,13 @@
// toolStripSeparator6
//
this.toolStripSeparator6.Name = "toolStripSeparator6";
this.toolStripSeparator6.Size = new System.Drawing.Size(157, 6);
this.toolStripSeparator6.Size = new System.Drawing.Size(177, 6);
this.toolStripSeparator6.Visible = false;
//
// 标签编辑ToolStripMenuItem
//
this.标签编辑ToolStripMenuItem.Name = "标签编辑ToolStripMenuItem";
this.标签编辑ToolStripMenuItem.Size = new System.Drawing.Size(160, 26);
this.标签编辑ToolStripMenuItem.Size = new System.Drawing.Size(180, 26);
this.标签编辑ToolStripMenuItem.Text = "标签编辑";
this.标签编辑ToolStripMenuItem.Click += new System.EventHandler(this.标签编辑ToolStripMenuItem_Click);
//
......@@ -600,6 +600,7 @@
this.启用光栅信号ToolStripMenuItem.Name = "启用光栅信号ToolStripMenuItem";
this.启用光栅信号ToolStripMenuItem.Size = new System.Drawing.Size(213, 26);
this.启用光栅信号ToolStripMenuItem.Text = "启用光栅信号";
this.启用光栅信号ToolStripMenuItem.Visible = false;
this.启用光栅信号ToolStripMenuItem.Click += new System.EventHandler(this.启用光栅信号ToolStripMenuItem_Click);
//
// toolStripSeparator14
......
......@@ -10,6 +10,11 @@ using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Windows.Forms;
using OnlineStore.DeviceLibrary;
using System.Drawing;
using CodeLibrary;
using System.IO;
using System.Text;
using System.Xml.Serialization;
namespace OnlineStore.AutoCountClient
{
......@@ -54,8 +59,15 @@ namespace OnlineStore.AutoCountClient
[STAThread]
static void Main(string[] Args)
{
//string code = " (X: 380,Y: 148) L00000000000WG9D19055;E20191230 0180;B7H.10618.5B1008082019123004000;R0080820191230E9600";
//string r = CodeManager.ReplaceCode(code);
//var b = new Bitmap(@"D:\logs\20230309\xray_监控点1_out_20230309091352_1646057.bmp");
//EyemManager.ReelCheck(b);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
......
......@@ -19,7 +19,7 @@ namespace OnlineStore.AutoCountClient.Properties {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
......@@ -47,8 +47,8 @@ namespace OnlineStore.AutoCountClient.Properties {
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性
/// 重写当前线程的 CurrentUICulture 属性
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
......@@ -58,6 +58,16 @@ namespace OnlineStore.AutoCountClient.Properties {
set {
resourceCulture = value;
}
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _152827 {
get {
object obj = ResourceManager.GetObject("152827", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}
......@@ -12,7 +12,7 @@ namespace OnlineStore.AutoCountClient.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
......
<?xml version="1.0"?>
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<appSettings>
......@@ -33,12 +33,12 @@
<add key="OutStoreWaitSeconds" value="10"/>
<add key="UseAIOBOX" value="1"/>
<!--流水线监听端口-->
<add key ="TCPServerPort" value ="5246"/>
<add key="TCPServerPort" value="5246"/>
</appSettings>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs/Line-RC1246.log"/>
<param name="Encoding" value="UTF-8" />
<param name="Encoding" value="UTF-8"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
......@@ -52,6 +52,6 @@
</root>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
</configuration>
\ No newline at end of file
</configuration>
......@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AssemblyLineSystem</RootNamespace>
<AssemblyName>AssemblyLineSystem</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
......
......@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CodeLibrary</RootNamespace>
<AssemblyName>CodeLibrary</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
......@@ -95,6 +95,7 @@
<Compile Include="ImageHelper.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="CodeResourceControl.cs" />
<Compile Include="RemoteDecodeHelper.cs" />
<Compile Include="ZXingCodeHelper.cs" />
</ItemGroup>
<ItemGroup>
......
......@@ -577,6 +577,7 @@ public class CodeInfo
public int Y = 0;
public string CodeType;
public double Orientation = 0;
public CodeInfo() { }
public CodeInfo(string codeStr,int x,int y)
{
this.CodeStr = codeStr;
......
using CodeLibrary;
using HalconDotNet;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
public class RemoteDecodeHelper
{
static int webclienttimeout = 30 * 1000;
static Process p = new Process();
static string serverhost = "http://127.0.0.1:58137/";
public static List<CodeInfo> DecodeRequest(HObject hoimg, RemoteDecodeParam remoteDecodeParam)
{
byte[] requestdata;
lock (hoimg)
{
using (MemoryStream mStream = new MemoryStream())
{
hoimg.Serialize(mStream);
requestdata = mStream.ToArray();
mStream.Close();
}
}
return DecodeRequest(requestdata, remoteDecodeParam,true);
}
public static List<CodeInfo> DecodeRequest(Bitmap bitmap, RemoteDecodeParam remoteDecodeParam)
{
if (bitmap == null)
return null;
byte[] requestdata;
lock (bitmap)
{
using (MemoryStream mStream = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(mStream, bitmap);
requestdata = mStream.ToArray();
mStream.Close();
}
}
return DecodeRequest(requestdata, remoteDecodeParam);
}
static List<CodeInfo> DecodeRequest(byte[] requestdata, RemoteDecodeParam remoteDecodeParam,bool isHObject=false)
{
try
{
CheckAndRunServer();
}
catch {
return new List<CodeInfo> { new CodeInfo("ScanCodeServer error",0,0) };
}
string param;
using (MemoryStream mStreamparam = new MemoryStream())
{
XmlSerializer xf = new XmlSerializer(typeof(RemoteDecodeParam));
xf.Serialize(mStreamparam, remoteDecodeParam);
param = base64UrlEncode(mStreamparam.ToArray());
mStreamparam.Close();
}
string url = serverhost+"ProcessBitmap?param=";
if (isHObject)
url = serverhost+"Process?param=";
byte[] resp;
try
{
using (MyWebClient webClient = new MyWebClient(webclienttimeout))
{
resp = webClient.UploadData(url + param, requestdata);
requestdata = null;
}
}
catch(WebException we)
{
return null;
}
catch
{
return null;
}
List<CodeInfo> codeInfos=null;
var ss = Encoding.UTF8.GetString(resp).Trim().Trim('"');
ss = ss.Replace(@"\/", "/");
try
{
var bb = Convert.FromBase64String(ss);
using (MemoryStream mStreamResult = new MemoryStream(bb))
{
XmlSerializer xff = new XmlSerializer(typeof(List<CodeInfo>));
codeInfos = (List<CodeInfo>)xff.Deserialize(mStreamResult);
}
}
catch {
throw new Exception(ss);
}
return codeInfos;
}
/// <summary>
/// 在url中传递base64字符串需要替换加号等符号
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
static string base64UrlEncode(byte[] input)
{
return Convert.ToBase64String(input).Replace('+', '-').Replace('/', '_');
}
/// <summary>
/// 检查并自动启动服务器
/// </summary>
static void CheckAndRunServer()
{
lock (p)
{
var pss = Process.GetProcessesByName("ScanCodeServer");
if (pss.Length > 0)
return;
var f = "ScanCodeServer\\ScanCodeServer.exe";
if (!File.Exists(f))
throw new Exception("找不到扫码服务器文件");
p.StartInfo = new ProcessStartInfo(f);
p.Start();
int checkcount = 5;
while (checkcount > 0)
{
checkcount--;
Thread.Sleep(500);
var port = (int)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\ScanCodeServer\\", "port", 58137);
serverhost = "http://127.0.0.1:"+ port + "/";
using (MyWebClient webClient = new MyWebClient(webclienttimeout))
{
var s = webClient.DownloadString(serverhost + "alive");
if (s.Trim() == "\"1\"")
return;
}
}
throw new Exception("扫码服务器打开失败,退出码:"+ p.ExitCode);
}
}
[Serializable]
public struct RemoteDecodeParam
{
public string[] codeTypeList;
public int codeCount;
public int timeout;
}
public class MyWebClient : WebClient
{
private int _timeout;
public MyWebClient(int timeout)
{
this._timeout = timeout;
}
protected override WebRequest GetWebRequest(Uri address)
{
var result = base.GetWebRequest(address);
result.Timeout = this._timeout;
return result;
}
}
}
......@@ -9,7 +9,6 @@ using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using static Asa.eyemLib;
namespace CodeLibrary
{
......
......@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OnlineStore.Common</RootNamespace>
<AssemblyName>MyCommon</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
......
......@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OnlineStore.DeviceLibrary</RootNamespace>
<AssemblyName>DeviceLibrary</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
......@@ -21,7 +21,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PlatformTarget>AnyCPU</PlatformTarget>
<Prefer32Bit>false</Prefer32Bit>
<LangVersion>7.3</LangVersion>
......@@ -41,9 +41,13 @@
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>
<ItemGroup>
<Reference Include="Asa.CarerayImage, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL">
<Reference Include="Asa.Camera.VisionLib, Version=1.3.8398.28384, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\oldDll\Asa.Camera.VisionLib.dll</HintPath>
</Reference>
<Reference Include="Asa.CarerayImage, Version=1.1.2.1, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\CarerayImage\CarerayImage\bin\Debug\Asa.CarerayImage.dll</HintPath>
<HintPath>..\..\oldDll\Asa.CarerayImage.dll</HintPath>
</Reference>
<Reference Include="Asa.IOModule.AIOBOX">
<HintPath>..\..\dll\Asa.IOModule.AIOBOX.dll</HintPath>
......@@ -99,6 +103,8 @@
<Compile Include="bean\BatchMoveBean_Partial.cs" />
<Compile Include="bean\BatchMoveBean.cs" />
<Compile Include="bean\OutputEquip_Shelf.cs" />
<Compile Include="deviceLibrary\Camera.cs" />
<Compile Include="deviceLibrary\EyemManager.cs" />
<Compile Include="deviceLibrary\TestPlate.cs" />
<Compile Include="FrmDevicePause.cs">
<SubType>Form</SubType>
......
......@@ -22,6 +22,7 @@ namespace OnlineStore.DeviceLibrary
/// 手动报警
/// </summary>
public bool NeedAlarm = false;
protected DeviceConfig Config;
protected void SetAllTimer(bool open)
{
......@@ -405,7 +406,11 @@ namespace OnlineStore.DeviceLibrary
{
wait.IsEnd = (span.TotalMilliseconds >= wait.TimeMSeconds);
}
else if (wait.WaitType.Equals(WaitEnum.W013_Action))
{
wait.IsEnd = wait.Action.Invoke(wait);
LogUtil.info($"{Name} 自定义等待 IsEnd={wait.IsEnd},Type={wait.Action.GetType()}");
}
else
{
wait.IsEnd = CheckWaitResult(moveInfo, wait);
......@@ -797,5 +802,23 @@ namespace OnlineStore.DeviceLibrary
SetWarnMsg("");
}
}
public bool? Out_TrayCheck_Test(string CameraName,IO_VALUE iO_VALUE) {
if (!RobotManager.Camera_Out_TrayCheck_Test)
return IOValue(IO_Type.Out_TrayCheck).Equals(iO_VALUE);
//if (iO_VALUE == IO_VALUE.HIGH)
// if (IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.HIGH))
// return true;
var result = EyemManager.CameraTestReel(CameraName);
if (!result.HasValue)
return null;
if (iO_VALUE == IO_VALUE.HIGH)
return result.Value;
else
return !result.Value;
}
}
}
......@@ -530,15 +530,10 @@ namespace OnlineStore.DeviceLibrary
{
return;
}
if (LeftBatchMove.ProcessShelfOut || LeftBatchMove.ProcessShelfEnter || RightBatchMove.ProcessShelfOut || RightBatchMove.ProcessShelfEnter)
{
return;
}
if (CanStartWork()) {
return;
}
if (LeftBatchMove.MoveInfo.MoveStep == StepEnum.Wait)
{
Debug.WriteLine($"GS:{LeftBatchMove.ProcessShelfOut},{LeftBatchMove.ProcessShelfEnter},{RightBatchMove.ProcessShelfOut},{RightBatchMove.ProcessShelfOut}");
return;
}
if (IOValue(IO_Type.LineIn_GratingSignal).Equals(IO_VALUE.LOW))
......@@ -558,7 +553,15 @@ namespace OnlineStore.DeviceLibrary
}
NeedAlarm = false;
}
}
}
if (CanStartWork()) {
return;
}
if (LeftBatchMove.MoveInfo.MoveStep == StepEnum.Wait)
{
return;
}
}
#endregion
......
......@@ -5,6 +5,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
......@@ -13,7 +14,7 @@ namespace OnlineStore.DeviceLibrary
{
public partial class OutputEquip : EquipBase
{
public OutputEquip_Config Config;
public new OutputEquip_Config Config;
public AxisBean MoveZAxis = null;
......@@ -593,6 +594,7 @@ namespace OnlineStore.DeviceLibrary
private Stopwatch needEnterWatch = new Stopwatch();
private Stopwatch needLeaveWatch = new Stopwatch();
private Asa.ClientLevel curAgvOutLevel = Asa.ClientLevel.Low;
DateTime lastCheckOutReelTime = DateTime.Now;
protected override void BaseTimerProcess()
{
if (isInSuddenDown || isNoAirCheck)
......@@ -618,9 +620,10 @@ namespace OnlineStore.DeviceLibrary
}
}
if (MoveInfo.MoveType.Equals(RobotMoveType.None))
if (MoveInfo.MoveType.Equals(RobotMoveType.None) && (DateTime.Now - lastCheckOutReelTime).TotalSeconds > 2)
{
if (NoErrorAlarm() && IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.X_OLine_Run).Equals(IO_VALUE.LOW))
lastCheckOutReelTime = DateTime.Now;
if (NoErrorAlarm() && IOValue(IO_Type.X_OLine_Run).Equals(IO_VALUE.LOW) && Out_TrayCheck_Test(Config.CameraName,IO_VALUE.HIGH).GetValueOrDefault())
{
//料串准备好才能取料
if (OutReelCount >= 0)
......
......@@ -85,7 +85,7 @@ namespace OnlineStore.DeviceLibrary
return false;
}
if (IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.X_OLine_Run).Equals(IO_VALUE.LOW))
if (Out_TrayCheck_Test(Config.CameraName, IO_VALUE.HIGH).GetValueOrDefault() && IOValue(IO_Type.X_OLine_Run).Equals(IO_VALUE.LOW))
{
IsStartLabel = false;
MoveInfo.NewMove(RobotMoveType.Working, StepEnum.OT01_WaitCheck);
......@@ -113,7 +113,7 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.MoveParam.IsNgReel = true;
}
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.HIGH));
//MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.HIGH));
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.X_OLine_Run, IO_VALUE.LOW));
}
return false;
......@@ -387,7 +387,7 @@ namespace OnlineStore.DeviceLibrary
}
else if (MoveInfo.IsStep(StepEnum.OT08_2_Wait_Out_TrayCheck))
{
if (IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.LOW))
if (Out_TrayCheck_Test(Config.CameraName, IO_VALUE.LOW).GetValueOrDefault())
{
TakeReelRetay = 0;
ClearTimeoutAlarm("取料失败");
......@@ -424,13 +424,17 @@ namespace OnlineStore.DeviceLibrary
}
else if (MoveInfo.IsStep(StepEnum.OT08_3_Wait_Out_TrayCheck))
{
if (IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.LOW))
var re = Out_TrayCheck_Test(Config.CameraName, IO_VALUE.LOW);
if (re.GetValueOrDefault())
{
ClearTimeoutAlarm("取料失败");
MoveInfo.NextMoveStep(StepEnum.OT25_NG_NGBack);
NeedAlarm = false;
}
else {
else if (re.HasValue) {
EyemManager.record = true;
Out_TrayCheck_Test(Config.CameraName, IO_VALUE.LOW);
EyemManager.record = false;
WarnMsg = MoveInfo.Name + "[取料:取料失败,已重试3次,请手动取走料盘]";
//WorkLog(WarnMsg);
Alarm(AlarmType.IoSingleTimeOut);
......
......@@ -27,7 +27,7 @@ namespace OnlineStore.DeviceLibrary
public X_RAY_Equip XrayBean;
public OutputEquip outputEquip;
public Dictionary<int, EquipBase> equipsMap = new Dictionary<int, EquipBase>();
public Robot_Config Config = null;
private bool canStart = false;
public SQLite sQLite = null;
......@@ -59,6 +59,7 @@ namespace OnlineStore.DeviceLibrary
inputEquip = new InputEquip("1", fconfig);
XrayBean = new X_RAY_Equip("2", xconfig);
outputEquip = new OutputEquip("3", pconfig);
equipsMap.Add(1, inputEquip);
equipsMap.Add(2, XrayBean);
equipsMap.Add(3, outputEquip);
......@@ -70,6 +71,12 @@ namespace OnlineStore.DeviceLibrary
AgvClient.NodeList.Add(inputEquip.Config.RightAgvName);
AgvClient.NodeList.Add(inputEquip.Config.LeftAgvName);
EyemManager.record = true;
outputEquip.Out_TrayCheck_Test(outputEquip.Config.CameraName, IO_VALUE.HIGH);
EyemManager.record = false;
/*var carerayImage = new CarerayImage();
if (carerayImage.Open())
{
......
......@@ -23,7 +23,7 @@ namespace OnlineStore.DeviceLibrary
public ReelInfo Work_ReelInfo = new ReelInfo();
public ReelInfo Out_ReelInfo = new ReelInfo();
public XRay_Config Config;
public new XRay_Config Config;
public XRay xRay = null;
......@@ -192,13 +192,10 @@ namespace OnlineStore.DeviceLibrary
{
try
{
if (xRay!=null && xRay.IsRayOpen)
{
xRay.Stop();
}
if (xRay != null)
xRay.Close();
xrayImage.Close();
if (xRay!=null && xRay.IsRayOpen)
xRay.Stop();
xRay?.Close();
xrayImage?.Close();
}
catch (Exception ex)
{
......@@ -279,7 +276,7 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.NextMoveStep(StepEnum.XR02_DoorOpen);
CylinderMove(MoveInfo, IO_Type.X_InDoor_Up, IO_Type.X_InDoor_Down);
CylinderMove(MoveInfo, IO_Type.X_OutDoor_Up, IO_Type.X_OutDoor_Down);
if (IOValue(IO_Type.X_ReelCheck).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.HIGH))
if (IOValue(IO_Type.X_ReelCheck).Equals(IO_VALUE.HIGH) && Out_TrayCheck_Test(RobotManager.robot.outputEquip.Config.CameraName, IO_VALUE.HIGH).GetValueOrDefault())
{
WorkLog("XRay复位 :左侧们打开,右侧门打开,挡停下降");
CylinderMove(MoveInfo, IO_Type.X_StopCylinder_Up, IO_Type.X_StopCylinder_Down);
......
......@@ -64,7 +64,7 @@ namespace OnlineStore.DeviceLibrary
{
MoveInfo.NextMoveStep(StepEnum.XW21_WaitOutNoReel);
WorkLog("扫描区有料[" + Work_ReelInfo.ToStr() + "],点料已完成,准备放出料盘");
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.LOW));
MoveInfo.WaitList.Add(WaitResultInfo.WaitAction(new Func<WaitResultInfo, bool>((w)=> { return Out_TrayCheck_Test(RobotManager.robot.outputEquip.Config.CameraName,IO_VALUE.LOW).GetValueOrDefault(); }), $"等待[Out_TrayCheck=Low]"));
}
}
else if (IOValue(IO_Type.X_InLine_Check).Equals(IO_VALUE.HIGH))
......@@ -175,7 +175,7 @@ namespace OnlineStore.DeviceLibrary
{
MoveInfo.NextMoveStep(StepEnum.XW21_WaitOutNoReel);
WorkLog("扫描区NG料 [" + Work_ReelInfo.ToStr() + "],直接放行料盘");
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.LOW));
MoveInfo.WaitList.Add(WaitResultInfo.WaitAction(new Func<WaitResultInfo, bool>((w) => { return Out_TrayCheck_Test(RobotManager.robot.outputEquip.Config.CameraName, IO_VALUE.LOW).GetValueOrDefault(); }), $"等待[Out_TrayCheck=Low]"));
}
else
{
......@@ -281,13 +281,14 @@ namespace OnlineStore.DeviceLibrary
#endregion
else if (MoveInfo.IsStep(StepEnum.XW16_EndCount))
{
if (IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.LOW))
var re = Out_TrayCheck_Test(RobotManager.robot.outputEquip.Config.CameraName, IO_VALUE.LOW);
if (re.GetValueOrDefault())
{
MoveInfo.NextMoveStep(StepEnum.XW21_WaitOutNoReel);
//MoveInfo.TimeOutSeconds = 120;
WorkLog("料盘处理:出口无料盘继续", 0);
}
else if (RobotManager.robot.outputEquip.HasWorkingShelf)
else if (re.HasValue && RobotManager.robot.outputEquip.HasWorkingShelf)
{
if (MoveInfo.IsTimeOut(120)) {
WarnMsg = MoveInfo.Name + "[" + MoveInfo.MoveStep + "]" + "等待 出口皮带线料盘离开X57=Low 超时[" + FormUtil.GetSpanStr(MoveInfo.StepSpan()) + "]";
......@@ -295,7 +296,7 @@ namespace OnlineStore.DeviceLibrary
Alarm(AlarmType.IoSingleTimeOut);
}
}
else {
else if (re.HasValue){
LogUtil.error("当前出口没有料串", MoveInfo.ErrorLogType);
MoveInfo.NextMoveStep(StepEnum.XW16_EndCount);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
......@@ -315,7 +316,7 @@ namespace OnlineStore.DeviceLibrary
WorkLog("料盘处理:右侧门打开,挡停放行", 0);
CylinderMove(MoveInfo, IO_Type.X_OutDoor_Up, IO_Type.X_OutDoor_Down);
CylinderMove(MoveInfo, IO_Type.X_StopCylinder_Down, IO_Type.X_StopCylinder_Up);
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.LOW));
MoveInfo.WaitList.Add(WaitResultInfo.WaitAction(new Func<WaitResultInfo, bool>((w) => { return Out_TrayCheck_Test(RobotManager.robot.outputEquip.Config.CameraName, IO_VALUE.LOW).GetValueOrDefault(); }), $"等待[Out_TrayCheck=Low]"));
}
else if (MoveInfo.IsTimeOut(120))
{
......@@ -326,14 +327,15 @@ namespace OnlineStore.DeviceLibrary
}
else if (MoveInfo.IsStep(StepEnum.XW22_OutDoorOpen))
{
if (IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.HIGH))
var re = Out_TrayCheck_Test(RobotManager.robot.outputEquip.Config.CameraName, IO_VALUE.HIGH);
if (re.HasValue && re.Value)
{
MoveInfo.NextMoveStep(StepEnum.XW21_WaitOutNoReel);
MoveInfo.TimeOutSeconds = 120;
WorkLog("料盘处理:XW22_OutDoorOpen后发现出口有料,再次等待出口无料盘");
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.LOW));
MoveInfo.WaitList.Add(WaitResultInfo.WaitAction(new Func<WaitResultInfo, bool>((w) => { return Out_TrayCheck_Test(RobotManager.robot.outputEquip.Config.CameraName, IO_VALUE.LOW).GetValueOrDefault(); }), $"等待[Out_TrayCheck=Low]"));
}
else
else if (re.HasValue)
{
MoveInfo.NextMoveStep(StepEnum.XW23_OutLineRun);
WorkLog("料盘处理:中间皮带线,出口皮带线转动", 1);
......@@ -354,13 +356,13 @@ namespace OnlineStore.DeviceLibrary
}
else if (MoveInfo.IsStep(StepEnum.XW24_WaitOutCheck))
{
if (IOValue(IO_Type.Out_TrayCheck).Equals(IO_VALUE.HIGH) || Out_TrayCheck_force)
if (Out_TrayCheck_Test(RobotManager.robot.outputEquip.Config.CameraName, IO_VALUE.HIGH).GetValueOrDefault() || Out_TrayCheck_force)
{
MoveInfo.NextMoveStep(StepEnum.XW25_WaitTime);
WorkLog("料盘处理: 中间皮带线先停止,出口皮带线 再转动3秒,挡停先下降");
IOMove(IO_Type.X_MLine_Run, IO_VALUE.LOW);
IOMove(IO_Type.X_OLine_Run, IO_VALUE.HIGH, 3000);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
//MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.HIGH));
CylinderMove(null, IO_Type.X_StopCylinder_Up, IO_Type.X_StopCylinder_Down);
}
......@@ -368,6 +370,7 @@ namespace OnlineStore.DeviceLibrary
{
MoveInfo.NextMoveStep(StepEnum.XW24_WaitOutCheck);
WorkLog("料盘处理:Out_TrayCheck X57没有检测到料盘");
/*
var hasplate = TestPlate.TestIt(RobotManager.robot.outputEquip.Config.CameraName, saveone);
saveone = false;
if (!hasplate[0] && !hasplate[1])
......@@ -382,7 +385,7 @@ namespace OnlineStore.DeviceLibrary
else {
WorkLog("料盘处理:图像检测到料盘,当作有料处理");
//Out_TrayCheck_force = true;
}
}*/
}
}
else if (MoveInfo.IsStep(StepEnum.XW25_WaitTime))
......
using Asa.Camera;
using CodeLibrary;
using OnlineStore;
using OnlineStore.Common;
using OnlineStore.DeviceLibrary;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
public class HIKCamera
{
Thread camerathread;
//static HIKCamera _camera;
Asa.Camera.VisionLib camera;
//public static HIKCamera Current
//{
// get
// {
// if (_camera == null)
// _camera = new HIKCamera();
// return _camera;
// }
//}
public string Name = "";
public event EventHandler<Bitmap> camera_event;
public string DeviceName = "CameraA";
public bool LoadCameraConfig(string CameraID, out string msg)
{
Name = CameraID;
msg = "";
string path = $".\\Config\\{CameraID}.json";
if (!File.Exists(path))
{
msg = Name + "找不到监控相机配置文件";
LogUtil.error(Name + "找不到监控相机配置文件" + path);
return false;
}
try
{
var configtxt = File.ReadAllText(path);
if (configtxt.IndexOf("Pwd") > 0)
{
configtxt = configtxt.Replace("Pwd", "Password");
configtxt = configtxt.Replace("\"8000\"", "8000");
File.WriteAllText(path, configtxt);
}
var m = Regex.Match(configtxt, "name\".*?\"(.+)\"", RegexOptions.IgnoreCase);
DeviceName = m.Groups[1].Value;
camera = new VisionLib(path, true, "HIK.IPCamera");
}
catch (Exception e)
{
msg = Name + "加载监控相机配置文件失败:" + e.ToString();
LogUtil.error(Name + "加载监控相机配置文件失败:" + e.ToString());
return false;
}
for (int i = 0; i < 10; i++)
{
camera.Open(DeviceName);
Thread.Sleep(100);
Bitmap bmp = camera.GetImage(DeviceName);
if (bmp != null)
{
return true;
}
camera.Close(DeviceName);
Thread.Sleep(100);
}
msg = Name + "监控相机打开失败";
LogUtil.error(Name + $"监控相机打开失败");
return false;
//camerathread = new Thread(new ThreadStart(startCamera));
//camerathread.Start();
//GC.KeepAlive(camerathread);
}
int errortimes = 0;
bool camerathreadrun = true;
public void stopCamera() {
camerathreadrun = false;
}
void startCamera()
{
int errorsleeptime = 5000;
camerathreadrun = true;
while (camerathreadrun)
{
try
{
Bitmap bmp = camera.GetImage(DeviceName);
if (bmp != null)
{
errortimes = 0;
errorsleeptime = 5000;
camera_event?.Invoke(this, bmp);
}
else if (bmp == null && errortimes < 5)
{
errortimes++;
LogUtil.error(Name + $"相机获取图像出错,{errortimes}");
Thread.Sleep(errorsleeptime);
}
else if (errortimes == 5)
{
camera.Close(DeviceName);
Thread.Sleep(1000);
camera.Open(DeviceName);
errortimes=0;
errorsleeptime = errorsleeptime * 2;
LogUtil.error(Name + $"相机错误次数过多,重新打开,{errortimes}");
}
else if (errortimes == 6)
{
LogUtil.error(Name + $"相机连接失败, 相机线程退出,{errortimes}");
break;
}
Thread.Sleep(1000 / 5);
}
catch
{
errortimes++;
}
}
try
{
camera.Close(DeviceName);
}
catch { }
camera.Dispose();
}
public Bitmap CameraGrabOne() {
return camera.GetImage(DeviceName);
}
public void CameraGrabOne(string filename)
{
try
{
LogUtil.info(Name + "库位文件名:" + filename);
Bitmap bmp = camera.GetImage(DeviceName);
if (bmp != null)
{
if (File.Exists(filename))
File.Delete(filename);
bmp.Save(filename, ImageFormat.Jpeg);
bmp.Dispose();
}
}
catch (Exception e)
{
LogUtil.error(Name + e.ToString());
}
}
}
public enum FixtureState
{
FromIn,
FromOut,
FromInSide,
FromOutSide,
ToIn,
ToOut,
ToInSide,
ToOutSide,
ToFix,
}
using CodeLibrary;
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
{
public class EyemManager
{
static EyemManager()
{
try
{
//int flag = eyemInitNNDetector(".\\darknet\\detect-tiny-label.cfg", ".\\darknet\\detect-tiny-label.weights", 640, 640);
int flag = eyemInitNNDetector("", ".\\darknet\\best.onnx", 640, 640);
if (flag != 0)
{
LogUtil.error("EyemManager" + $"初始化模型失败");
//return false;
//MessageBox.Show("初始化模型失败!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
}
LogUtil.info("EyemManager" + $"init ok ,flag="+ flag);
eyemNNDetectorParams(0.35f, 0.45f);
}
catch (Exception ex)
{
LogUtil.error(" EyemManager Init error :" + ex.ToString());
}
//return true;
}
public static bool? CameraTestReel(string cameraName) {
//Camera._cam.CaptureOnImage(cameraName, out Bitmap bmp);
var bmp = RobotManager.CameraA.CameraGrabOne();
if (bmp != null) {
return ReelCheck(bmp);
}
return null;
}
public static bool record = false;//是否保存结果图片
public static bool? ReelCheck(Bitmap a)
{
Bitmap b = GetReducedImage(a, 1920, 0);
a.Dispose();
var bl = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadOnly, b.PixelFormat);
EyemImage image = new EyemImage();
image.iWidth = b.Width;
image.iHeight = b.Height;
image.iChannels = 4;
image.iDepth = 0;
image.ucpImage = bl.Scan0;
Directory.CreateDirectory("CameraDebug");
try
{
int ipNum;
BboxContainer bboxes = new BboxContainer();
eyemNNDetector(image, out ipNum, ref bboxes, out EyemImage tpDstImg);
if (record)
{
var c = eyemCvtToBitmap(tpDstImg);
b.Save($"CameraDebug\\{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.jpg");
c.Save($"CameraDebug\\{DateTime.Now:yyyy-MM-dd-HH-mm-ss}_m.jpg");
c.Dispose();
}
eyemImageFree(ref tpDstImg);
if (ipNum > 0)
{
var reellist = bboxes.bboxes.Take(ipNum).Select(bx => new { X = bx.iXs + bx.iWidth / 2, Y = bx.iYs + bx.iHeight / 2 }).ToList();
var has = reellist.FindIndex(rl => {
return IsPointInQuadrilateral(new PointF(rl.X, rl.Y), new PointF(577, 734), new PointF(810, 687), new PointF(877, 886), new PointF(701, 993));
});
LogUtil.info("EyemManager" + $"eyemNNDetector ,ipNum={ipNum},has reel={has >= 0}");
return has >= 0;
}
else
{
LogUtil.info("EyemManager" + $"eyemNNDetector ,ipNum={ipNum},has reel=false");
return false;
}
}
catch (Exception ex)
{
LogUtil.error(" EyemManager ReelCheck error :" + ex.ToString());
return null;
}
finally
{
b.UnlockBits(bl);
b.Dispose();
}
}
#region 通用
//读取图像,支持彩色与多深度
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int eyemImageRead(string filename, int iFlags, out EyemImage tpImage);
//释放图像资源
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern void eyemImageFree(ref EyemImage tpImage);
#endregion
#region 项目
/// <summary>
/// 初始化检测器
/// </summary>
/// <param name="detectorConfigPath">配置文件</param>
/// <param name="detectorModelPath">模型文件</param>
/// <returns></returns>
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int eyemInitNNDetector(string detectorConfigPath, string detectorModelPath, int iNetSizew, int iNetSizeh);
/// <summary>
/// 目标检测器
/// </summary>
/// <param name="tpImage">输入图像</param>
/// <returns></returns>
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int eyemNNDetector(EyemImage tpImage, out int ipNum, ref BboxContainer container, out EyemImage tpDstImg);
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int eyemNNDetectorParams(float fConfidence, float fNMSThreshold);
#endregion
#region 结构体
//图像信息
[StructLayout(LayoutKind.Sequential)]
public struct EyemImage
{
public IntPtr ucpImage; // 地址
public int iWidth; // 图像内存 x 方向大小
public int iHeight; // 图像内存 y 方向大小
public int iDepth; // 图像位深度(详见说明)
public int iChannels; // 图像通道数
}
// 矩形定义
[StructLayout(LayoutKind.Sequential)]
public struct EyemRect
{
public int iXs; // 起始点(左上角) x 坐标
public int iYs; // 起始点(左上角) y 坐标
public int iWidth; // x 方向大小(宽度)
public int iHeight; // y 方向大小(高度)
}
[StructLayout(LayoutKind.Sequential)]
public struct BboxContainer
{
//最多支持100个目标
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
public EyemRect[] bboxes;
}
#endregion
/// <summary>
/// 生成缩略图重载方法1,返回缩略图的Image对象
/// </summary>
/// <param name="width">缩略图的宽度</param>
/// <param name="height">缩略图的高度</param>
/// <returns>缩略图的Image对象</returns>
private static Bitmap GetReducedImage(Bitmap resourceImage, int width, int height)
{
if (height == 0)
{
var sc = resourceImage.Width / (float)width;
height = (int)(resourceImage.Height / sc);
}
try
{
Bitmap data = null;
//用指定的大小和格式初始化Bitmap类的新实例
using (Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format24bppRgb))
{
//从指定的Image对象创建新Graphics对象
using (Graphics graphics = Graphics.FromImage(bitmap))
{
//清除整个绘图面并以透明背景色填充
//graphics.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制原图片对象
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
graphics.DrawImage(resourceImage, new Rectangle(0, 0, width, height));
}
data = new Bitmap(bitmap);
}
return data;
}
catch (Exception e)
{
throw e;
}
}
public T DeepClone<T>(T _object)
{
T dstobject;
using (MemoryStream mStream = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(mStream, _object);
mStream.Seek(0, SeekOrigin.Begin);//指定当前流的位置为流的开头。
dstobject = (T)bf.Deserialize(mStream);
mStream.Close();
}
return dstobject;
}
#region EyemImage转换成Bitmap
public static unsafe Bitmap eyemCvtToBitmap(EyemImage tpImage)
{
if (tpImage.ucpImage == IntPtr.Zero)
throw new ArgumentNullException("图像不存在");
if (tpImage.iDepth != 0)
throw new ArgumentException("图像必须是8位无符号整型");
PixelFormat format;
switch (tpImage.iChannels)
{
case 1:
format = PixelFormat.Format8bppIndexed;
break;
case 3:
format = PixelFormat.Format24bppRgb;
break;
case 4:
format = PixelFormat.Format32bppArgb;
break;
default:
return null;
}
Bitmap bitmap = new Bitmap(tpImage.iWidth, tpImage.iHeight, format);
//对于输出灰度图像
if (format == PixelFormat.Format8bppIndexed)
{
ColorPalette palette = bitmap.Palette;
for (int i = 0; i < 256; i++)
{
palette.Entries[i] = Color.FromArgb(i, i, i);
}
bitmap.Palette = palette;
}
//锁定数据区
BitmapData bd = bitmap.LockBits(new Rectangle(0, 0, tpImage.iWidth, tpImage.iHeight),
ImageLockMode.WriteOnly, format);
try
{
int pd = ((tpImage.iWidth * tpImage.iChannels) + 3) / 4 * 4;
long bytesToCopy = tpImage.iWidth * tpImage.iChannels;
for (int y = 0; y < tpImage.iHeight; y++)
{
long offsetSrc = (y * tpImage.iWidth * tpImage.iChannels);
long offsetDst = (y * pd);
Buffer.MemoryCopy((byte*)(tpImage.ucpImage.ToPointer()) + offsetSrc, (byte*)(bd.Scan0.ToPointer()) + offsetDst, bytesToCopy, bytesToCopy);
}
}
catch (Exception ex)
{
LogUtil.error("EyemManager eyemCvtToBitmap error:" + ex);
}
finally
{
bitmap.UnlockBits(bd);
}
return bitmap;
}
#endregion
public static bool IsPointInQuadrilateral(PointF p0, PointF p1, PointF p2, PointF p3, PointF p4)
{
// 判断p0是否在p1p2p3p4所在的平面内
float d1 = ((p0.X - p1.X) * (p2.Y - p1.Y)) - ((p2.X - p1.X) * (p0.Y - p1.Y));
float d2 = ((p0.X - p2.X) * (p3.Y - p2.Y)) - ((p3.X - p2.X) * (p0.Y - p2.Y));
float d3 = ((p0.X - p3.X) * (p4.Y - p3.Y)) - ((p4.X - p3.X) * (p0.Y - p3.Y));
float d4 = ((p0.X - p4.X) * (p1.Y - p4.Y)) - ((p1.X - p4.X) * (p0.Y - p4.Y));
// 判断p0是否在p1p2p3p4所构成的四边形内部
return ((d1 > 0 && d2 > 0 && d3 > 0 && d4 > 0) || (d1 < 0 && d2 < 0 && d3 < 0 && d4 < 0));
}
}
}
......@@ -7,6 +7,7 @@ using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Reflection.Emit;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Text;
......@@ -152,58 +153,32 @@ namespace OnlineStore.DeviceLibrary
CamErrCount[deviceName] = 0;
LogUtil.debug(deviceName + " 【" + cameraName + "】取图片完成,开始扫码");
string r = "";
List<CodeInfo> tlci = EyemDecode2.Decoder(ref bmp);
foreach (CodeInfo code in tlci) {
LogUtil.info(deviceName + " 【" + cameraName + "】[eyemDecode]" + code.CodeType + "(X: " + code.X + ",Y: " + code.Y + ") " + code.CodeStr);
string str = CodeManager.ReplaceCode(code.CodeStr);
if (!codeList.Contains(str))
{
codeList.Add(str);
r = r + "##eyemDecode|" + code.CodeType + "|" + str;
if (!findRightCode)
{
findRightCode = HasRightCode(str);
}
if (HasRightCode(str) && ccall.FindAll(x=> x.CodeStr == str).Count()==0)
ccall.Add(code);
}
}
if (!findRightCode)
RemoteDecodeHelper.RemoteDecodeParam remoteDecodeParam = new RemoteDecodeHelper.RemoteDecodeParam
{
foreach (string codeType in codeTypeList)
codeTypeList = codeTypeList.ToArray(),
codeCount = codeCount,
timeout = 2500
};
cc = RemoteDecodeHelper.DecodeRequest(bmp, remoteDecodeParam);
if (cc != null && cc.Count > 0) {
foreach (CodeInfo c in cc)
{
//判断是否是一维码
if (codeType.ToLower().Equals("barcode"))
string str = CodeManager.ReplaceCode(c.CodeStr);
if (!codeList.Contains(str))
{
cc = HDCodeHelper.DecodeBarCode(ho_Image);
}
else
{
cc = HDCodeHelper.DecodeCode(ho_Image, codeType, GetCodeParamFilePath(codeType), codeCount, 2500);
}
codeList.Add(str);
r = r + "|" + c.CodeType + "|" + str;
foreach (CodeInfo c in cc)
{
string str = CodeManager.ReplaceCode(c.CodeStr);
if (!codeList.Contains(str))
if (!findRightCode)
{
codeList.Add(str);
r = r + "##Halcon|" + codeType + "|" + str;
if (!findRightCode)
findRightCode = HasRightCode(str);
if (findRightCode)
{
findRightCode = HasRightCode(str);
if (findRightCode)
{
ccall.Add(c);
nosave = false;
}
ccall.Add(c);
///nosave = false;
}
//if (HasRightCode(str) && ccall.FindAll(x => x.CodeStr == str).Count() == 0)
}
//if (HasRightCode(str) && ccall.FindAll(x => x.CodeStr == str).Count() == 0)
}
}
}
......
......@@ -24,7 +24,7 @@ namespace OnlineStore.DeviceLibrary
public static RobotBean robot = null;
public static Robot_Config Config = null;
public static Dictionary<int, DeviceConfig> allConfigMap = null;
public static HIKCamera CameraA = new HIKCamera();
public RobotManager()
{
}
......@@ -46,6 +46,7 @@ namespace OnlineStore.DeviceLibrary
}
}
}
public static bool Camera_Out_TrayCheck_Test = true;
public static bool Init()
{
try
......@@ -91,8 +92,17 @@ namespace OnlineStore.DeviceLibrary
outconfig.SetIO(subType);
allConfigMap.Add(subType, outconfig);
ACServerManager.LogEvent += ACServerManager_LogEvent;
if (!CameraA.LoadCameraConfig("CameraA", out string errmsg))
{
LogUtil.info("监控相机加载出错!");
Camera_Out_TrayCheck_Test = false;
}
robot = new RobotBean(Config, inputConfig, XrayConfig, outconfig);
InitPrint();
LogUtil.info("加载 完成!");
return true;
......
......@@ -291,6 +291,14 @@ namespace OnlineStore.DeviceLibrary
wait.WaitType = WaitEnum.W301_DLineScanCode;
return wait;
}
public static WaitResultInfo WaitAction(Func<WaitResultInfo, bool> a, string msg)
{
WaitResultInfo wait = new WaitResultInfo();
wait.WaitType = WaitEnum.W013_Action;
wait.Action = a;
wait.ActionMsg = msg;
return wait;
}
public string ToStr()
{
if (WaitType.Equals(WaitEnum.W001_AxisMove))
......@@ -403,7 +411,11 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
public int HeightValue { get; set; }
/// <summary>
/// 等待事件代理
/// </summary>
public Func<WaitResultInfo, bool> Action { get; set; }
public string ActionMsg { get; set; }
}
internal class WaitEnum
{
......@@ -431,6 +443,8 @@ namespace OnlineStore.DeviceLibrary
/// 轴原点信号
/// </summary>
internal static int W006_AxisOrg = 6;
internal static int W013_Action = 7;
......
......@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>OnlineStore.LoadCSVLibrary</RootNamespace>
<AssemblyName>LoadCSVLibrary</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
......
......@@ -19,7 +19,7 @@ namespace UserFromControl.Properties {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
......@@ -47,8 +47,8 @@ namespace UserFromControl.Properties {
}
/// <summary>
/// 使用此强类型资源类,为所有资源查找
/// 重写当前线程的 CurrentUICulture 属性
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
......
......@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>UserFromControl</RootNamespace>
<AssemblyName>UserFromControl</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!