添加项目文件。

This commit is contained in:
17860779768
2023-02-23 14:52:43 +08:00
parent 1db01eda58
commit 157613603c
508 changed files with 94132 additions and 0 deletions

View File

@ -0,0 +1,9 @@
namespace BRS.Common.Interface
{
public interface ICSVOutput
{
string GetCSVHead();
string GetCSVData();
}
}

View File

@ -0,0 +1,14 @@
namespace BRS.Common.Interface
{
//public delegate void ConfigChangedDelegate();
public interface IConfigCtrl<T1, T2>
{
//event ConfigChangedDelegate OnConfigChanged;
T1 Camera { get; set; }
T2 Config { get; set; }
void LoadConfig(T2 t);
T2 GetConfig();
}
}

View File

@ -0,0 +1,44 @@
using BRS.Common.Model;
using BRS.Common.Model.Helper;
using System;
using System.ComponentModel;
using static BRS.Common.Model.Helper.EnumHelper;
namespace BRS.Common.Interface
{
public interface IDevice : IDisposable, INotifyPropertyChanged, ISimpleDevice, ILogger, IExceptionHandler
{
IInitialConfig InitialConfig { get; set; }
EnumHelper.DeviceState CurrentState { get; set; }
event Action<IDevice, DeviceState> OnDeviceStateChanged;
void StateChange(EnumHelper.DeviceState stateToBe);
ResponseMessage RunWrap(IOperationConfig opConfig);
}
public interface ISimpleDevice
{
string Id { get; set; }
string Name { get; set; }
}
public class SimpleDevice : ISimpleDevice
{
public string Id { get; set; }
public string Name { get; set; }
}
/// <summary>
/// 用来记录配置中设备信息的接口
/// </summary>
public interface ISourceDevice
{
/// <summary>
/// 设备信息编号
/// </summary>
string SourceDeviceId { get; set; }
}
}

View File

@ -0,0 +1,41 @@

namespace BRS.Common.Interface
{
/// <summary>
/// 设备配置
/// </summary>
public interface IDeviceConfig
{
/// <summary>
/// 暂时设想的一些不好归类的配置使用json序列化之后保存在该字段
/// </summary>
//string DataConfig { get; set; }
}
/// <summary>
/// 设备初始配置
/// </summary>
public interface IInitialConfig : ILogConfig
{
/// <summary>
/// 设备序号 GUID
/// 因为本项目设备信息未做配置,将索引添加在初始配置中
/// </summary>
string Id { get; set; }
string Name { get; set; }
bool IsEnabled { get; set; }
string DriverType { get; set; }
}
public interface ILogConfig
{
string LogPath { get; set; }
bool IsEnableLog { get; set; }
bool IsEnableCSV { get; set; }
}
}

View File

@ -0,0 +1,9 @@
using System.Collections.Generic;
namespace BRS.Common.Interface
{
public interface IHalconToolPath
{
List<string> GetHalconToolPathList();
}
}

View File

@ -0,0 +1,14 @@
using BRS.Common.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BRS.Common.Interface
{
public interface IIOModuleConfig
{
List<IODefinition> IODefinitionCollection { get; set; }
}
}

View File

@ -0,0 +1,242 @@
using BRS.Common.Model.Helper;
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace BRS.Common.Interface
{
/// <summary>
/// 所有图片类型的基类
/// </summary>
public abstract class BaseImage : object, IDisposable
{
public abstract int Width { get; }
public abstract int Height { get; }
public abstract Mat Mat();
public abstract BaseImage Clone();
public abstract void Dispose();
/// <summary>
/// 转换为Bitmap对象并返回
/// </summary>
/// <returns>返回转换后的Bitmap对象可以在子类种自行做缓存</returns>
public abstract Bitmap ConvertToBitmap();
}
/// <summary>
///
/// </summary>
/// <typeparam name="T">图片类型范围</typeparam>
public interface IImageSet : IDisposable
{
string Id { get; set; }
string CameraId { get; set; }
BaseImage BImage { get; set; }
Bitmap Image { get; set; }
DateTime ImageTime { get; set; }
string PId { get; set; }
string Prefix { get; set; }
object SaveLock { get; set; }
ImageSaveOption ImageSaveOption { get; set; }
/// <summary>
/// 序列化操作的图像信息
/// </summary>
string ImageData { get; set; }
void SaveImage();
// Bitmap ConvertTImageToBitmap(TImg img);
}
public class ImageSaveOption : IComplexDisplay
{
[Category("启用配置")]
[Description("是否启用")]
[DisplayName("是否启用")]
public bool IsEnabled { get; set; } = false;
[Category("图片保存")]
[Description("图片保存文件夹")]
[DisplayName("图片保存文件夹")]
public virtual string ImageSaveDirectory { get; set; }
[Category("图片保存")]
[Description("图片保存格式")]
[DisplayName("图片保存格式")]
public ImageFormat ImageFormat { get; set; } = ImageFormat.Png;
public ImageSaveOption Copy()
{
ImageSaveOption iso = new ImageSaveOption();
iso.ImageSaveDirectory = this.ImageSaveDirectory;
iso.ImageFormat = this.ImageFormat;
iso.IsEnabled = this.IsEnabled;
return iso;
}
public string GetDisplayText()
{
string txt = IsEnabled ? "启用:" : "禁用";
if (!string.IsNullOrWhiteSpace(ImageSaveDirectory))
{
txt += $"目录:{ImageSaveDirectory}";
}
return txt;
}
}
public class VisionImageSaveOption : ImageSaveOption
{
//[Category("图片保存")]
//[Description("true:产品模式,同一个产品 不同工站 处理完的的图片会保存在同一个产品文件夹下false检测工站模式处理完的图片会以 RawImages、PreTreatedImages、PreTreatedAnalysisImages...等路径保存")]
//[DisplayName("是否产品模式")]
//public bool IsProductModel { get; set; } = false;
[Category("图片保存")]
[Description("是否保存原始检测图片")]
[DisplayName("保存原始检测图片")]
public bool IsSaveDetectionOriginImage { get; set; } = false;
[Category("图片保存")]
[Description("是否保存结果图片")]
[DisplayName("保存结果图片")]
public bool IsSaveFitImage { get; set; } = false;
[Category("图片保存")]
[Description("检测结果附加保存类型,针对检测完的结果保存图片,多类型使用\",\"间隔。如要保存OK和NG 裂纹 图片,填写\"OK,NG,裂纹\"")]
[DisplayName("检测结果附加保存类型")]
public string AddtionalSaveType { get; set; } = "NG";
[Browsable(false)]
public override string ImageSaveDirectory { get; set; }
}
public class ImageSet : IImageSet
{
// public virtual Bitmap ConvertTImageToBitmap(TImg img) { return null; }
public DateTime ImageTime { get; set; } = DateTime.Now;
private string id = "";
public string Id
{
get
{
if (string.IsNullOrWhiteSpace(id))
{
id = ImageTime.ToString("HHmmssfff");
}
return id;
}
set
{
id = value;
}
}
public string CameraId { get; set; }
public string Prefix { get; set; }
/// <summary>
/// 原图 HImage
/// </summary>
public BaseImage BImage { get; set; } = null;
/// <summary>
/// 原图 Bitmap
/// </summary>
public Bitmap Image { get; set; } = null;
public string PId { get; set; }
#region Save Option & Result
public virtual ImageSaveOption ImageSaveOption { get; set; } = new ImageSaveOption();
public bool IsSaveOrigin { get; set; } = false;
public object SaveLock { get; set; } = new object();
public virtual string ImageData { get; set; }
public virtual void SaveImage()
{
if (IsSaveOrigin)
{
string imageDir = string.IsNullOrWhiteSpace(Prefix) ? DateTime.Now.ToString("yyyyMMdd") : Path.Combine(Prefix, DateTime.Now.ToString("yyyyMMdd"));
string filename = string.IsNullOrWhiteSpace(Prefix) ? $"{Id}.{ImageSaveOption.ImageFormat.ToString().ToLower()}" : $"{Prefix}_{Id}.{ImageSaveOption.ImageFormat.ToString().ToLower()}";
string filePath = Path.Combine(ImageSaveOption.ImageSaveDirectory, imageDir, filename);
Image.Save(filePath, ImageSaveOption.ImageFormat);
}
}
public virtual void Dispose()
{
Image?.Dispose();
Image = null;
BImage?.Dispose();
BImage = null;
}
#endregion
}
public class DualImageSet : ImageSet
{
public BaseImage HImage_2 { get; set; }
public override void Dispose()
{
base.Dispose();
HImage_2?.Dispose();
HImage_2 = null;
}
public override void SaveImage()
{
//if (string.IsNullOrWhiteSpace(imageName))
//{
// imageName = Id;
//}
//string filePath = "";
//if (image != null)
//{
// filePath = Path.Combine(imageDir, $"{imageName}.{ImageSaveOption.ImageFormat.ToString().ToLower()}");
// image.Save(filePath, ImageSaveOption.ImageFormat);
//}
//else
//{
// filePath = Path.Combine(imageDir, $"{imageName}.tif");
// HImage_2.WriteImage("tiff", 0, filePath);
//}
}
}
}

View File

@ -0,0 +1,50 @@
using System;
using System.Threading;
namespace BRS.Common.Interface
{
/// <summary>
/// 设备的实际运行的硬件输入配置
/// 考虑使用消息接收机制在这里等待外部信号进入
/// </summary>
public interface IInputConfig : IDisposable //: IProcessID
{
/// <summary>
/// 该配置对应的工序编号
/// 考虑到多工序可能对应到同样的配置,工序编号不做固定赋值,在设备运作时随用随赋值
/// </summary>
string ProcessId { get; set; }
/// <summary>
/// 工序名称
/// </summary>
string ProcessName { get; set; }
//Dictionary<string, AutoResetEvent> InputHanlderDict { get; set; }
//Dictionary<string, bool> InputFlagDict { get; set; }
//ConcurrentDictionary<string, AutoResetEvent> InputHanlderDict { get; set; }
//ConcurrentDictionary<string, bool> InputFlagDict { get; set; }
AutoResetEvent InputHandle { get; set; }
///// <summary>
///// 是否已进入输入配置方法标志
///// </summary>
//bool BoundFlag { get; set; }
/// <summary>
/// 是否需要做硬输入(外部输入)判断 false:不需要 true:需要
/// </summary>
bool IsInputNeed { get; set; }
string InputMethodName { get; set; }
/// <summary>
/// 第三方设备输入参数
/// </summary>
dynamic InputPara { get; set; }
}
}

View File

@ -0,0 +1,14 @@
using BRS.Common.Model.Helper;
using System;
using static BRS.Common.Model.Helper.EnumHelper;
namespace BRS.Common.Interface
{
public interface ILogger
{
event Action<LogMsg> OnLog;
LoggerHelper LoggerHelper { get; set; }
//void LogAsync(DateTime dt, LogLevel loglevel, string msg);
void LogAsync(LogMsg msg);
}
}

View File

@ -0,0 +1,49 @@
using BRS.Common.Model.Helper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BRS.Common.Interface
{
public interface IMenuNode
{
// IProcess Process { get; set; }
//void DownloadProcess(IProcess process);
//Action<IProcess> OnUploadProcess { get; set; }
}
public interface IClickableMenuNode : IMenuNode
{
IProcess Process { get; set; }
void OnClick(IProcess process);
}
public interface IProcessObserver
{
IProcess Process { get; set; }
/// <summary>
/// 流程更新时回调函数
/// </summary>
void OnProcessUpdated();
/// <summary>
/// 加载流程
/// </summary>
/// <param name="process"></param>
void DownloadProcess(IProcess process);
}
public interface ILogOutput
{
event Action<LogMsg> OnLogMsgOutput;
void LogDisplay(LogMsg msg);
}
}

View File

@ -0,0 +1,16 @@
using BRS.Common.Model;
using System;
namespace BRS.Common.Interface
{
//public delegate void OnMonitorInvokeDelegate(DateTime dt, string invokeDeviceId, IDevice sourceDevice, MonitorSet monitorSet);
//public delegate void OnMonitorAlarmDelegate(DateTime dt, IDevice device, WarningSet warning);
public interface IMonitor
{
void Monitor();
void ResetAlarm();
Action<DateTime, string, IDevice, IMonitorSet> OnMonitorInvoke { get; set; }
Action<DateTime, IDevice, IWarningSet> OnMonitorAlarm { get; set; }
}
}

View File

@ -0,0 +1,48 @@
using BRS.Common.Model;
using System.Collections.Generic;
namespace BRS.Common.Interface
{
public interface IMonitorSetCollection
{
//List<IMonitorSet> MonitorSetCollection { get; set; }
List<IMonitorSet> GetAllMonitorSet();
}
public interface IMonitorConfig : IMonitorSetCollection
{
bool IsEnableMonitor { get; set; }
int MonitorInterval { get; set; }
int MonitorTimeout { get; set; }
}
public interface IMonitorSet : ISourceDevice
{
string Id { get; set; }
string ExecuteDevice { get; set; }
string MethodCode { get; set; }
string MethodDesc { get; }
IOperationConfig OpConfig { get; set; }
//int TriggerIndex { get; set; }
//int TriggerValue { get; set; }
string Name { get; set; }
string DisplayText { get; }
//string SourceDeviceId { get; set; }
ResponseMessage Response { get; set; }
bool IsOriginOutput { get; set; }
}
}

View File

@ -0,0 +1,42 @@
using System.Collections.Generic;
namespace BRS.Common.Interface
{
/// <summary>
/// 操作配置
/// </summary>
public interface IOperationConfig //: IOperationResult
{
/// <summary>
/// 发生异常时的重新尝试次数
/// </summary>
int ReTryTimes { get; set; }
/// <summary>
/// 输入参数
/// </summary>
List<int> InputPara { get; set; }
int TriggerValue { get; set; }
/// <summary>
/// 当异常发生时的异常反馈值
/// </summary>
int ExceptionValue { get; set; }
/// <summary>
/// 指示该操作的监视配置来源
/// </summary>
string MonitorSetId { get; set; }
/// <summary>
/// 调用该操作配置的设备Id
/// </summary>
string ExecuteDeviceId { get; set; }
/// <summary>
/// 操作执行后部分输出结果,目前拟采用序列化后的字符串方式保存
/// </summary>
string OutputData { get; set; }
}
}

View File

@ -0,0 +1,43 @@
using Bro.Common.Helper;
namespace Bro.Common.Interface
{
public interface IOperationResult //: IProcessID
{
///// <summary>
///// 该配置对应的工序编号
///// 考虑到多工序可能对应到同样的配置,工序编号不做固定赋值,在设备运作时随用随赋值
///// </summary>
//string ProcessId { get; set; }
///// <summary>
///// 工序名称
///// </summary>
//string ProcessName { get; set; }
/// <summary>
/// 结果输出 具体结果参照ConfigOutputAttribute特性指定的枚举
/// </summary>
[ConfigOutputResource("")]
int ResultOutput { get; set; }
///// <summary>
///// 指定该配置在获取输出时调用哪个方法
///// </summary>
//string OutputMethodName { get; set; }
}
public interface IProcessID
{
/// <summary>
/// 该配置对应的工序编号
/// 考虑到多工序可能对应到同样的配置,工序编号不做固定赋值,在设备运作时随用随赋值
/// </summary>
string ProcessId { get; set; }
/// <summary>
/// 工序名称
/// </summary>
string ProcessName { get; set; }
}
}

View File

@ -0,0 +1,95 @@
using BRS.Common.Model.Helper;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Reflection;
using static BRS.Common.Model.Helper.EnumHelper;
namespace BRS.Common.Interface
{
public interface IProcess : ILogger, IExceptionHandler
{
#region
/// <summary>
/// 流程配置
/// </summary>
IProcessConfig IConfig { get; set; }
/// <summary>
/// 带有[ProcessMethod]属性的所有方法集合,供设置界面选择使用
/// </summary>
List<ProcessMethodAttribute> ProcessMethodCollection { get; set; }
/// <summary>
/// 调用方法的字典集合,键:方法名称字符串,值:方法对象
/// KeyMethodCodeValueMethodInfo
/// </summary>
Dictionary<string, MethodInfo> ProcessMethodDict { get; set; }
/// <summary>
/// 流程使用的硬件设备集合
/// </summary>
List<IDevice> DeviceCollection { get; set; }
string ProductionCode { get; set; }
/// <summary>
/// 流程状态
/// </summary>
DeviceState ProcessState { get; set; }
#endregion
#region
/// <summary>
/// 打开
/// </summary>
void Open(bool isServiceMode = false);
void Open();
/// <summary>
/// 关闭
/// </summary>
void Close();
/// <summary>
/// 初始化Process
/// </summary>
void InitialProcess(string configPath);
void InitialProcess();
void InitialProcessMethods();
#endregion
#region
///// <summary>
///// 图像输出事件
///// </summary>
//event Action<string, Bitmap, string> OnBitmapOutput;
event Action<DeviceState> OnProcessStateChanged;
event Action<RunState> OnProcessRunStateChanged;
event Action<IWarningSet> OnAlarmRaised;
event Action<DateTime, object, string> OnUpdateResult;
event Action<DateTime, string> OnUpdateTriggerCount;
event Action<object, float> OnUpdateCT;
#endregion
#region
void SaveProcessConfig(IProcessConfig config);
void CreateNewConfig(IProcessConfig config, string newProductionCode, double pOutsideDiameter, double pHeight);
#endregion
}
}

View File

@ -0,0 +1,51 @@
using System.Collections.Generic;
using System.ComponentModel;
using static BRS.Common.Model.Helper.EnumHelper;
namespace BRS.Common.Interface
{
public interface IProcessConfig : IHalconToolPath, IMonitorSetCollection, INotifyPropertyChanged
{
#region Property
string StationCode { get; set; }
///// <summary>
///// 是否采用离线图片
///// </summary>
//bool IsImageOffline { get; set; }
/// <summary>
/// 运行模式
/// </summary>
//RunMode RunMode { get; set; }
bool IsLogEnabled { get; set; }
// string ImgPath { get; set; }
string LogPath { get; set; }
LogLevel DefaultLogLevel { get; set; }
/// <summary>
/// 是否输出CSV文件
/// </summary>
bool IsCSVOutputEnabled { get; set; }
#endregion
#region
List<IInitialConfig> CameraConfigCollection { get; set; }
//
List<IInitialConfig> PLCConfigCollection { get; set; }
List<IInitialConfig> DeviceConfigs { get; set; }
List<IInitialConfig> RobotConfigCollection { get; set; }
#endregion
#region Method
List<IInitialConfig> GetAllDeviceInitialConfigs();
#endregion
}
}

View File

@ -0,0 +1,34 @@
using BRS.Common.Model;
using BRS.Common.Model.Helper;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace BRS.Common.Interface
{
public interface IProductData
{
string Id { get; set; }
List<DetectStationResult> ResultCollection { get; set; }
//event Action<IImageSet> OnImageSetTimeout;
///// <summary>
///// 序列化操作的图像信息
///// </summary>
//string ImageData { get; set; }
//void SaveImage(string imageDir, Bitmap image = null, string imageName = "");
}
}

View File

@ -0,0 +1,48 @@
using BRS.Common.Model;
using System;
namespace BRS.Common.Interface
{
public interface IRemoteMessage
{
string Id { get; set; }
string MessageType { get; set; }
/// <summary>
/// 表示当前信息是反馈信息
/// </summary>
bool IsEcho { get; set; }
/// <summary>
/// 表示当前信息是否需要即时反馈
/// </summary>
bool EnableEcho { get; set; }
ResponseMessage ResolveMessage(DateTime dt);
}
//public interface IMessageResolver
//{
// static Func<IRemoteMessage, ResponseMessage> ResolveAction { get; set; }
//}
public class RemoteMessageBase : IRemoteMessage
{
public virtual string Id { get; set; } = DateTime.Now.ToString("MMdd_HHmmssfff");
public string MessageType { get; set; } = "";
public bool IsEcho { get; set; } = false;
public bool EnableEcho { get; set; } = false;
//public abstract ResponseMessage ResolveMessage();
public virtual ResponseMessage ResolveMessage(DateTime dt)
{
ResponseMessage msg = new ResponseMessage();
msg.Result = -1;
msg.Message = "消息解析器未实现";
return msg;
}
}
}

View File

@ -0,0 +1,19 @@
namespace BRS.Common.Interface
{
public interface IRunCtrl
{
IDevice Device { get; set; }
//IOperationConfig OpConfig { get; set; }
//void UploadOperationConfig(IOperationConfig opConfig);
//IOperationConfig GetOperationConfig();
}
//public interface IEditCtrl
//{
// IRunCtrl RunCtrl { get; set; }
// IOperationConfig OpConfig { get; set; }
//}
}

View File

@ -0,0 +1,39 @@
using System;
using System.ComponentModel;
using System.Drawing;
using static BRS.Common.Model.Helper.EnumHelper;
namespace BRS.Common.Interface
{
public interface IShapeElement : INotifyPropertyChanged, ICloneable
{
string ID { get; set; }
int Index { get; set; }
int GroupIndex { get; set; }
string Name { get; set; }
void OnMouseDown(PointF point);
void OnMouseUp(PointF point);
void OnMouseMove(PointF point);
void OnMouseDoubleClick(PointF point);
bool IsIntersect(RectangleF rect);
bool IsEnabled { get; set; }
void Draw(Graphics g);
void Translate(float x, float y);
/// <summary>
/// WPF中标识该对象是否已经加入渲染需要显示
/// </summary>
bool IsShowing { get; set; }
void Initial();
bool IsCreatedDone();
ElementState State { get; set; }
}
}

View File

@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
namespace BRS.Common.Interface
{
public interface IWarningSetCollection
{
List<IWarningSet> WarningSetCollection { get; set; }
//List<IWarningSet> GetAllWarningSet();
}
public interface IWarningSet
{
//string Id { get; set; }
//string Name { get; set; }
string DisplayText { get; }
bool TriggerValue { get; set; }
string WarningCode { get; set; }
string WarningDescription { get; set; }
int WarningLvl { get; set; }
bool CurrentStatus { get; set; }
string SourceDevice { get; set; }
DateTime TriggerTime { get; set; }
DateTime LastTriggerTime { get; set; }
bool GetWarningSet(string txt);
}
}