- 博客(302)
- 收藏
- 关注
原创 C#上位机工厂模式
添加新产品只需添加新工厂类。:客户端与具体产品类解耦。:对象创建逻辑集中在一处。:对扩展开放,对修改关闭。:每个产品对应一个工厂类。
2026-01-21 21:49:23
368
1
原创 C#上位机状态模式
在C#中实现状态模式(State Pattern),首先需要理解状态模式的基本概念和用途。状态模式允许一个对象在其内部状态改变时改变它的行为,这使得对象的行为可以根据其内部状态的不同而变化。这对于处理复杂的业务逻辑非常有用,尤其是当对象的行为依赖于它的状态时。
2025-12-28 12:07:17
297
原创 C#上位机策略模式
/ 使用快速排序算法。// 创建文件日志器。// 支付后自动变为已支付状态。你 支付宝/微信/现金/信用卡 收银。// 工厂模式:关心"创建什么对象"// 策略模式:关心"使用什么算法"// 策略模式:客户端主动选择策略。// 状态模式:状态自动转换。// 不同数据类型的验证策略。:需要知道不同策略的区别。// 不同的图像处理算法。
2025-12-28 12:02:35
692
原创 C#上位机生产者消费者模式
生产者(Producer):产生数据缓冲区(Buffer):存放数据(队列)消费者(Consumer):处理数据需求推荐方案关键代码数据只处理一次传统单队列多个消费者共享数据广播模式broadcastBlock.LinkTo(多个ActionBlock)消费者独立互不影响多队列复制为每个消费者创建独立队列 + 数据克隆复杂事件处理Rx.NETSubject.Subscribe(多个处理器)简单监控数据事件委托核心原则如果消费者会修改数据状态→ 用单消费者或深度拷贝如果只是读取/显示数据。
2025-12-28 11:47:13
1012
原创 C#上位机观察者模式
首先,定义一个观察者接口,该接口应包含一个更新方法。接下来,定义一个主题接口和具体的主题类,该类实现主题接口,并维护一个观察者列表。if (!Notify();// 当状态改变时通知所有观察者。
2025-12-28 10:35:16
341
原创 奥姆龙PLC与C#数据类型对应表
地址对齐:32位和64位类型必须从偶数地址开始字节顺序:奥姆龙使用大端序(Big-Endian)连续占用:32位类型占用2个字,64位类型占用4个字BCD转换:需要专门的转换函数处理BCD码数据
2025-10-29 10:53:12
574
原创 C# 取消机制(CancellationTokenSource/CancellationToken)
成员类型说明Token属性获取关联的 CancellationToken属性检查是否已请求取消Cancel()方法请求取消操作方法在指定时间后自动取消方法在指定毫秒数后自动取消Dispose()方法释放资源静态方法创建链接的取消源。
2025-10-24 14:34:48
686
原创 SqlSugar 文档
SugarTable("Students")] // 指定表名set;[SugarColumn(Length = 50, ColumnDescription = "学生姓名")]set;set;set;[SugarColumn(IsIgnore = true)] // 忽略映射[SugarColumn(IsOnlyIgnoreInsert = true)] // 仅插入时忽略set;
2025-10-16 11:44:28
1909
原创 C#中获取程序执行时间
对于大多数应用场景,推荐使用Stopwatch类,因为它提供了更高的精度和灵活性。如果你仅仅需要快速获取两个时间点之间的差异,并且不介意精度问题,那么使用DateTime类或Environment.TickCount/Environment.TickCount64也是可行的。选择哪种方法取决于你的具体需求和精度要求。
2025-10-14 14:14:48
761
原创 上位机通信常用校验方式全面详解
奇偶校验是最简单的错误检测方法,通过在数据位后添加一个校验位来确保数据中"1"的个数为奇数或偶数。基于多项式除法的强大校验方法,将数据视为二进制多项式,用生成多项式相除得到余数作为校验码。传输数据: D(x) × x^k + R(x) (k为生成多项式的次数)BCC是一种块级校验方法,通常指对数据块进行异或运算得到的校验字符。:根据协议要求选择(TCP用和校验,Ethernet用CRC-32)对数据块中所有字节的对应位进行纵向校验,常用于串行通信协议。:使用CRC-32或SHA-256。
2025-10-13 16:31:42
1181
原创 WPF依赖属性
依赖属性的设计是为了解决WPF复杂应用场景下的需求:内存效率:一个典型的WPF界面有成千上万的属性(如Width, Height, Background)。如果每个属性都用一个字段存储,内存消耗巨大。依赖属性只在被显式设置过值时才存储,否则使用默认值,这大大节省了内存。动态值解析:一个依赖属性的最终值可能由多个提供者决定(本地值、样式、模板、动画、继承值等)。WPF属性系统会按照一个确定的优先级来计算出最终的、有效的属性值。这是普通属性无法做到的。声明式编程:WPF的核心是XAML这种声明式语言。依赖属性完
2025-10-10 14:52:25
876
原创 【机械视觉】Halcon—【十五、一维码(条形码)和二维码识别】
一维码是由黑白条纹组成的图形标识,通过条纹的宽度和间隔来表示数据。Halcon支持多种一维码标准,如EAN-13、UPC-A、Code 128等。
2025-06-19 21:01:50
1287
原创 【机械视觉】Halcon—【十四、模版匹配和金字塔详解】
Halcon提供了丰富的模板匹配方法,每种方法针对不同的应用场景和需求进行了优化。模板匹配是机器视觉中的核心技术,用于在图像中定位已知模板的位置和方向。Halcon提供了多种强大的模板匹配方法,适用于不同场景需求。best_match。
2025-06-19 15:02:20
2120
原创 【机械视觉】Halcon—【十二、边缘提取】
以坐标为种子坐标,向四周进行搜索,寻找合适的区域,这个区域满足灰度值与当前的均值图。类似Sobel,但卷积核不同(Sobel更注重中心像素,Prewitt更平均)。:卷积核大小(3、5、7、9等,越大抗噪性越强但边缘越模糊)对噪声有一定的平滑作用,但不如高斯类算子(如Canny)。:滞后阈值(低阈值用于弱边缘,高阈值用于强边缘):平滑系数(越小越平滑,推荐0.5~2.0),对噪声敏感,通常需要先做高斯平滑。:卷积核大小(3、5、7等):高斯平滑系数(越大越平滑),计算简单,但对噪声敏感。
2025-06-09 20:45:57
1418
原创 【机械视觉】Halcon—【十、实例—木头检测_充电宝检测_豆子检测】
摘要:本文介绍了三个基于Halcon的机械视觉检测项目:1)木头检测通过阈值分割、腐蚀膨胀运算和区域合并,统计木材数量;2)充电宝小孔检测采用手动绘制检测区域后进行阈值分割和形状筛选;3)豆子检测使用binary_threshold自动阈值分割,配合腐蚀操作去除噪声。三个项目均包含图像预处理、特征提取和数量统计的核心流程,展示了Halcon在工业视觉检测中的典型应用方法。关键技术包括阈值分割、形态学运算和区域统计等图像处理算法。
2025-06-06 16:03:48
406
原创 【机械视觉】Halcon—【八、灰度形态学操作和生成棋盘格】
在图像处理中,形态学操作是一种基于形状的分析方法,常用于图像的滤波、边缘检测、噪声移除等。在Halcon中,形态学操作可以通过使用形态学滤波器(如膨胀、腐蚀、开运算、闭运算等)来实现。下面将详细介绍如何在Halcon中使用形态学操作来调整灰度图像。
2025-06-06 14:27:52
454
原创 【机械视觉】Halcon—【七、blob阈值分割—regiongrowing区域生长法目标提取—直方图】
本文介绍了Halcon中Blob阈值分割的实现方法。主要内容包括:1)基础阈值分割步骤:读取图像、灰度转换、阈值分割、Blob分析和结果可视化;2)自动阈值分割算子auto_threshold的原理与应用,通过高斯平滑直方图寻找波谷作为阈值;3)针对不同对比度图像提供sigma参数选择建议(高对比度3-5,低对比度6-10)。文章通过具体代码示例演示了两种分割方法,并详细解析了自动阈值分割的灰度直方图处理过程。Halcon提供的丰富图像处理函数能满足各种复杂分析需求。
2025-06-05 16:32:41
782
原创 【机械视觉】Halcon—【六、交集并集差集和仿射变换、透视矩阵】
在图像处理和计算机视觉领域,交集、并集和差集是基本的集合操作,它们在图像分析中尤为重要,特别是在图像分割、特征提取和对象识别等任务中。Halcon(现为MVTEC Vision++)是一个强大的机器视觉软件,提供了丰富的图像处理函数,可以用来执行这些集合操作。
2025-05-30 22:11:42
1003
原创 【机械视觉】Halcon—【五、霍夫变换(查找几何图形)hough】
本文介绍了使用Halcon进行霍夫变换检测几何图形的过程。首先通过图像预处理(裁剪、边缘提取、阈值分割和形状筛选)准备输入区域,然后利用hough_lines算子检测直线,参数包括角度步长、阈值等控制精度。检测结果包含直线的法向量角度和原点距离,最后通过形状筛选(角度和坐标约束)提取特定方向的直线并用不同颜色显示。该方法可扩展用于检测圆、椭圆等其他几何图形。
2025-05-30 11:17:06
737
原创 【机械视觉】Halcon—【四、Halcon中的图像预处理】
本文系统介绍了Halcon中的图像预处理技术,重点涵盖图像增强、滤波和频域处理三大类方法。在图像增强方面,详细解析了空间域(灰度变换、直方图修正)和频域法(傅里叶变换滤波)的原理与算子实现,如emphasize对比度增强和equ_histo_image直方图均衡化。针对噪声处理,对比了均值滤波(高斯噪声)、中值滤波(椒盐噪声)和高斯滤波的特点及算子应用(如median_image)等等。
2025-05-30 10:29:20
1808
原创 【机械视觉】Halcon—【三、Halcon中的一些基础操作(图片操作,剪切,窗体操作,ROI绘制,正则,加载图像划分区域,生成网格图像,进制转换,文本标记,正弘图像,旋转绘制,保存窗口文和文件)】
本篇文章分享一下halcon中的基础操作。aaa和bbb都是窗体。
2025-05-28 20:04:45
1245
原创 【机械视觉】Halcon—【二、Halcon算子全面介绍(超详细版)】
Halcon 的算子(operators)按照功能被系统性地划分为多个类别,官方文档中目前(Halcon 22.11 版本)共有 19 个主分类,每个主分类下还有若干子分类。本人在此对这19个分类的常用核心算子进行了一系列的总结,且本人在文章最后还总结了一些案例经验。注意:跨分类调用:某些算子可能在多个分类中,但官方文档中会明确其主分类。例如: read_image(文件操作)常被其他分类(如图像处理)的示例调用,但其核心功能是文件读取。
2025-05-23 21:03:12
3478
原创 【机械视觉】Halcon—【一、Halcon的介绍和基础语法】
Halcon是由德国MVTec Software GmbH开发的一款功能强大的机器视觉软件,广泛应用于工业检测、医学成像、机器人引导和三维视觉等领域。其核心特点包括丰富的图像处理算法库(包含1800多个算子)、跨平台支持(Windows、Linux、macOS及嵌入式设备)、多语言集成(C++、C#、Python等)以及深度学习功能。Halcon支持GPU加速和多核CPU并行计算,适合实时处理需求,并提供灵活的授权方式(永久授权和订阅制)。其典型应用场景包括工业检测、机器人引导、医疗影像分析、物流分拣和自动
2025-05-23 16:36:23
6964
原创 C#—Lazy<T> 类型(延迟初始化/懒加载模式)
Lazy<T> 是 C# 中的一个类,用于实现延迟初始化(懒加载)模式。它提供了一种线程安全的方式来延迟创建大型或资源密集型对象,直到第一次实际需要时才进行初始化。
2025-04-21 21:40:09
1442
原创 【机械视觉】C#+VisionPro联合编程之连接硬件工业相机———【七、分享两种C#+VisionPro抓取相机并操作的方式】(本文有介绍CogFrameGrabbers相机抓取类)
本文通过使用两个小例子介绍两种抓取相机的方式。第一种抓取方式是通过visionPro中的cogacqfifotool工具进行检测相机,并且进行配置,配置完成后将工具保存本地用于在WINFORM中加载。第二种方式是在C#中通过Cognex.VisionPro.CogFrameGrabbers类进行抓取相机,然后通过抓取到的相机对象创建ICogAcqFifo相机采集接口。从而进行操作。
2025-03-28 15:13:49
2453
原创 【机械视觉】C#+VisionPro联合编程———【六、visionPro连接工业相机设备】
通常连接相机涉及到硬件接口和软件配置。硬件方面,常见的接口有GigE、USB3、Camera Link等,需要确认相机的型号和接口类型,以及安装驱动。软件方面,VisionPro可能需要通过工具像QuickBuild来配置相机,或者使用CogAcqFifoTool来检测和连接相机。
2025-03-26 21:53:09
3392
原创 【C#高阶编程】—单例模式详解
单例模式是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式常用于需要全局唯一对象的场景,比如配置文件管理、日志记录、数据库连接池等。
2025-03-19 21:39:43
895
原创 【C#高级编程】—表达式树详解
表达式树是一种强大的工具,它允许你将代码逻辑表示为数据结构,并在运行时分析和操作这些逻辑。它的核心作用包括动态生成代码、分析代码逻辑以及与外部系统交互。表达式树在 LINQ、ORM 框架(如 Entity Framework)和动态查询等场景中发挥着重要作用。
2025-03-18 21:22:13
1265
原创 C#—【特性详解以及自定义特性和通过反射读取特性】
目录C#—【特性详解以及自定义特性和通过反射读取特性特性的主要用途(举一些直观例子)1. 标记代码,让框架自动处理2. 数据验证(表单/模型校验)3. 控制序列化行为4. 生成文档(如API接口说明)5. 实现AOP(面向切面编程)为什么用特性而不用其他方法?日常开发中的高频场景一句话总结常见预定义特性(Predefined Attributes)示例代码自定义特性(Custom Attribute)一、如何定义自定义特性?二、如何应用自定义特性?三、如何通过反射读取特性?总结自定义特性和反射的应用实例。
2025-03-17 06:15:00
2717
原创 C#—【在不同的场景该用哪种线程?】
避免在 UI 线程或 ASP.NET 请求上下文中使用(会导致死锁)在C#中有很多种线程操作方法但都运用在不同的场景。:尤其对于 I/O 操作,99% 的场景应首选。(ASP.NET Core 已优化线程池调度):避免长期占用线程池线程,导致其他任务排队。:结合线程池的复用能力和异步的高效 I/O。:集中捕获异常,避免未处理异常导致进程崩溃。:线程池复用线程,避免频繁创建/销毁开销。:长时间操作(>1秒)使用独立线程或。:异步释放线程,避免阻塞线程池线程。:线程池线程无法设置优先级或名称。
2025-03-14 11:23:44
1187
原创 C#—线程池详解
线程池(ThreadPool)是 .NET 提供的一种线程管理机制,通过复用线程减少创建/销毁开销,适用于高并发、短期任务的场景。核心作用:自动管理线程生命周期,优化资源利用率。适用场景:处理耗时 <1 秒的短期任务(如 HTTP 请求、轻量计算)。默认行为最小线程数 = CPU 核心数最大线程数 ≈ 1000(不同 .NET 版本有差异)使用原则短期任务用线程池,长期任务用独立线程避免阻塞线程池线程(使用释放线程)合理配置线程数(通过优先使用Task类(更现代的 API,支持取消/延续等操作)
2025-03-14 10:32:54
1840
原创 C# 的 ManualResetEvent(线程同步操作) 类详解
是用于线程同步操作的类,允许一个或多个线程等待特定信号,以协调多个线程的执行顺序。它通过事件通知机制实现,确保线程在收到信号前保持阻塞,直到其他线程显式发出信号。多个工作线程需要等待某个公共条件(如资源初始化完成)满足后,才能同时开始工作。例如:主线程启动后台任务后需等待其初始化完成,再执行后续操作。:一旦处于终止状态(Signaled),所有等待线程立即释放,直到手动重置。:分阶段任务中,后续阶段需等待前一阶段所有线程完成。:多个工作线程等待某个共享资源(如数据加载完成)。进入阻塞状态,等待初始化完成。
2025-03-13 21:54:17
1939
原创 C#—闭包详解
定义:闭包是一个函数(如委托、Lambda表达式)与其引用的外部变量的绑定。这些变量的生命周期被延长,与闭包共存。捕获变量:闭包捕获的是变量的引用(而非值),因此外部变量的修改会反映到闭包内。// Lambda捕获count变量// 输出1// 输出2(闭包维持count状态)优势:简化代码结构,支持状态封装,增强函数灵活性。注意点:理解变量捕获机制,避免循环中的错误捕获,管理资源释放。
2025-03-13 15:38:30
898
原创 【机械视觉】C#+VisionPro联合编程———【五、硬币检测小项目实现(C#+VisionPro联合编程和csv文件格式操作)】
总共有十二张检测的图片,当点击检测按钮时检测当前展示的图片并且将检测效果展示在表格中,当点击上一页或下一页时换检测图片,点击保存本地时通过csv文件格式将表格数据保存,当下一次运行时将数据读取出来并且展示在表格中。此项目通过异步进行优化,在加载时改变了以往卡顿的情况,加载变得流畅。此项目检测时的逻辑代码是在visionPro中完成的。
2025-03-11 21:49:03
681
如果安装MySQL数据库?
2024-06-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅