
C#
文章平均质量分 69
以实例记录C#学习的关键知识点
CoderIsArt
内视、慎独、无悔代码人生;数字化、人性化、科学化;自省的底层程序员,努力与世界同步。
展开
-
ACS SPiiPlus 运动控制器的核心托管接口
ACS的核心API 类分析与应用原创 2025-05-30 10:42:56 · 374 阅读 · 0 评论 -
现场总线(Fieldbus)的配置映射FieldbusMappings 类
FieldbusMappings类管理现场总线通信配置,支持Hilscher卡、Modbus主/从站等多种连接方式。核心功能包括XML配置的序列化/反序列化、名称唯一性验证和变更事件通知。类结构包含多个映射集合,通过泛型接口INamedCollection统一管理。初始化时从XML文件加载配置,变更时通过configurationChangedHandler持久化到XML。名称验证CheckNameExists方法确保变量名合法且不重复,支持多种现场总线变量类型。原创 2025-05-29 17:24:02 · 654 阅读 · 0 评论 -
高精度模拟量控制命令集
高精度模拟量控制命令集类的设计原创 2025-05-28 11:58:51 · 372 阅读 · 0 评论 -
多任务控制系统的中央管理器
TasksCollection类是工业控制系统中任务管理的核心组件,实现了多任务状态监控、批量操作和资源调度。其架构采用装饰器模式封装数据,支持TaskMask位运算进行任务组操作。优化建议包括:增强线程安全(添加锁机制)、性能优化(状态缓存)、错误恢复(重试机制)及关键问题修复(掩码运算溢出防护)。扩展功能建议添加任务优先级调度和实时监控事件。典型应用场景包括紧急停止、状态监控和负载均衡。性能优化方案含批量读取加速和结构体布局优化,满足工业控制系统对实时性(延迟<10ms)、可靠性和可扩展性的严苛要求。原创 2025-05-28 11:19:41 · 313 阅读 · 0 评论 -
自动加工脚本程序变量管理器
数控系统程序变量管理器ProgramVariableCollection的核心功能与优化建议。该组件负责动态管理任务程序变量和系统堆栈变量,通过与编译器集成实现变量解析。文章从架构设计、工业场景优化、问题修复、性能优化等维度进行深入分析,提出线程安全增强、缓存策略、批量操作等改进方案。特别针对资源泄漏、数组越界等隐患提供修复方案,并给出G代码监控、刀具补偿等典型应用场景。优化后的设计可满足工业环境对实时性(访问延迟<10μs)、可靠性和可维护性的严苛要求,适用于数控系统和机器人控制器等实时控制场景。原创 2025-05-28 11:01:04 · 448 阅读 · 0 评论 -
工业变量集合模板类VariableCollection<TType>实现
VariableCollection<TType>是一个工业控制系统中的强类型变量集合类,主要用于管理硬件信号变量。它支持通过名称和索引两种方式访问变量,并提供高性能的批量读写操作。类内部通过委托模式实现多协议适配,可兼容Modbus、Profinet等工业协议。关键特性包括类型安全、双重索引访问(名称/地址)、批量操作优化通信效率、动态容量管理和上下文隔离。典型应用场景包括模拟量采集和数字量输出控制,能显著提升工业自动化软件的确定性和性能。该类还预留了缓冲池技术、SIMD加速等优化空间。原创 2025-05-27 11:26:44 · 938 阅读 · 0 评论 -
工业控制系统中输入/输出信号的类型化容器类实现
本文解析了工业控制系统中InputOutputContainer<TType>类的设计与实现,重点阐述了其在IO信号管理中的核心作用。该类采用输入/输出通道严格隔离的设计,通过泛型确保类型安全,支持批量读写操作提升性能(吞吐量可提升10-100倍)。其特点包括:标准化信号命名(符合IEC61131-3)、委托机制实现硬件解耦、线程安全保证等,适用于模拟量监控(如温度传感器)和数字量控制(如急停按钮)等工业场景。文中还提出了预分配缓冲区、信号别名服务等优化建议,体现了工业自动化软件对确定性、可靠性和高性能原创 2025-05-27 11:01:52 · 275 阅读 · 0 评论 -
工业控制变量系统的神经中枢CoreVariableHelper类
CoreVariableHelper类在工业控制系统中的核心作用,它作为变量管理的中枢模块,实现了三大关键功能:1)变量元数据解析,连接变量名与硬件地址;2)类型系统转换,桥接PLC与C#数据类型;3)上下文路由,按变量类型分配控制环境。类中设计了复合键映射机制和静态构造函数,支持200+种工业协议数据类型的转换,包括Modbus和现场总线信号处理。该实现采用工厂模式、委托注入等设计模式,通过批量处理、零分配设计和编译器句柄池优化性能,确保实时性要求(响应时间<50μs)。原创 2025-05-26 16:36:44 · 548 阅读 · 0 评论 -
工业控制系统中变量的抽象基类Variable抽象类
本文解析了工业控制系统中Variable抽象类的设计架构。该基类通过委托模式实现硬件访问抽象化,支持多上下文变量管理(全局/任务/IO等),包含核心字段如硬件标识结构体、读写委托等。其特性包括类型安全机制(模拟量/数字量等)、运行时行为优化(减少装箱开销)和工业协议兼容性。典型应用场景展示了对现场总线信号的监控实现,并提出了线程安全锁、事件通知等改进建议。该设计体现了工业控制系统对实时性、可靠性和扩展性的核心要求,是变量抽象层的经典范式。原创 2025-05-26 15:47:15 · 398 阅读 · 0 评论 -
工业现场总线Fieldbus变量的统一管理容器设计
FieldbusVariableContainer类是一个工业现场总线变量管理容器,支持Modbus TCP(主/从)、驱动器Modbus和Hilscher协议。采用延迟加载和缓存机制优化性能,通过分层架构实现对不同协议变量的统一访问。核心功能包括变量解析、连接信息管理及数组变量处理,严格遵循工业协议规范。设计亮点包括协议抽象、动态扩展和资源安全管理,适用于工业控制场景,建议后续增加异步支持和协议扩展能力。原创 2025-05-26 15:02:34 · 677 阅读 · 0 评论 -
虚拟输入输出VirtualIO 类的实现
VirtualIO类是工业控制系统中虚拟IO信号的管理核心,提供二进制(bool)和寄存器(double)两类信号处理。二进制信号支持2048点分块读写,通过ChunkBinaryRead/Write优化性能;寄存器信号支持896个数组批量操作。类设计采用硬件抽象模式,通过委托将原生API与业务逻辑解耦,包含索引器快速定位、异常统一处理等工业级特性。典型应用包括PLC信号交互、模拟量处理等场景,其固定内存分配和批量操作策略有效保障了实时性要求。原创 2025-05-26 14:30:24 · 836 阅读 · 0 评论 -
功能“递归模式”在 C# 7.3 中不可用,请使用 8.0 或更高的语言版本的一种兼容处理方案
摘要:本文展示了C#中控制参数创建器的两种实现方式,分别针对C# 8.0+和早期版本。通过条件编译符号(CSHARP_8_OR_NEWER)隔离不同语法:C# 8.0+使用简洁的switch表达式,而C# 7.3采用传统switch-case语句。项目配置建议在.csproj文件中自动或手动设置语言版本,确保语法兼容性。这种实现方式既保持了功能一致性,又提供了版本适配灵活性,使代码能平滑过渡到新版本语法。原创 2025-05-26 11:27:44 · 540 阅读 · 0 评论 -
控制器参数模板类ControllerParameter<T>的C#实现
本文解析了ControllerParameter<T>类的设计与实现。这是一个内部泛型类,继承自TypedParameter<T>并约束T必须实现IComparable接口,主要用于封装与底层控制器的参数交互。类中包含两个构造函数和核心方法getValue()与setValue(),实现了类型安全的参数读写功能,支持字符串、整数、浮点数等多种数据类型。设计上注重性能优化(如预分配字符串缓冲区)和异常处理,通过抽象底层细节为上层提供简洁的接口。典型应用场景如温度控制器参数的读写操作,体原创 2025-05-26 10:23:58 · 424 阅读 · 0 评论 -
用于控制器数据采集和管理的核心类Data
Data 类是一个用于数据采集和管理的核心类,主要用于控制器的诊断数据收集、配置和检索。其主要功能包括数据采集配置、采集控制(立即采集、连续采集、停止采集)、数据检索(同步和带进度回调)以及诊断数据获取。关键组件包括 ContinuousDataCollectionPoller(处理连续数据采集)、AxesDiagPacketRetriever(获取轴诊断数据)和 DataCollectionStatus(封装采集状态)。代码依赖 Wrapper 类与底层硬件交互,并通过 ExceptionResolver原创 2025-05-23 11:44:35 · 287 阅读 · 0 评论 -
A3200 运动控制系统的核心参数管理类BaseParameters
基本参数管理类原创 2025-05-21 14:27:50 · 541 阅读 · 0 评论 -
A3200 运动控制系统的全局静态Global类
A3200全局配置静态类原创 2025-05-20 16:06:59 · 328 阅读 · 0 评论 -
命名常量集合接口INamedConstantCollection<T>实现
INamedConstantCollection<TObject, TName> 是一个泛型接口,旨在定义命名常量集合的基本契约,结合了索引访问和枚举能力。该接口允许通过名称或位置索引访问集合中的元素,并提供了获取元素数量和集合容量的属性。泛型参数 TObject 表示集合中存储的元素类型,而 TName 表示元素名称的类型,且必须实现 IComparable 接口以确保名称可比较。原创 2025-05-20 15:34:44 · 335 阅读 · 0 评论 -
一个轴信息类AxisInfo实现
AxisInfo 类是一个用于封装和管理运动控制系统中轴信息的类,实现了 INamed<string> 接口。该类通过延迟加载模式优化性能,仅在首次访问时从控制器获取数据,并通过字段缓存已获取的信息。核心属性包括轴编号、名称、类型、伺服速率、最大电流、最大电压、固件版本、FPGA版本、闪存配置状态等。类中使用了异常处理机制和 invalidateData() 方法来清空缓存,强制重新获取数据。AxisInfo 类通过 Controller 对象执行命令和获取参数,适用于获取轴信息、监控轴状态和固件升级检查等原创 2025-05-20 15:08:22 · 701 阅读 · 0 评论 -
WPF Data Binding 及经典应用示例
DataBinding(数据绑定)是WPF中的核心机制,用于建立UI元素与数据对象之间的连接,实现数据的自动同步。其核心概念包括绑定源(Source)、绑定目标(Target)、绑定路径(Path)和绑定模式(BindingMode)。DataBinding支持多种绑定模式,如OneWay、TwoWay、OneWayToSource和OneTime,确保数据与UI的双向或单向同步。通过XAML语法,开发者可以轻松实现属性绑定、集合绑定、主从绑定、数据转换和命令绑定等操作。原创 2025-05-19 20:39:34 · 909 阅读 · 0 评论 -
异步委托执行管理器:更新
DelegateSpooler:异步委托执行管理器DelegateSpooler 是一个异步委托执行管理器,核心功能包括委托队列管理、异步任务调度、执行状态跟踪和线程安全控制。它通过管道ID(pipe)组织任务,使用 BeginInvoke/EndInvoke 实现异步执行,并通过锁机制保护共享资源。其设计采用双缓冲任务队列,确保线程安全,并通过后台工作循环持续监控任务状态。DelegateSpooler 适用于硬件控制系统的异步操作和事件聚合处理等场景,但存在内存泄漏和线程池压力等潜在问题。原创 2025-05-19 16:53:00 · 709 阅读 · 0 评论 -
C#中的ThreadStart委托
ThreadStart 是 .NET 中的一个内置委托类型,用于表示无参数且无返回值的方法,通常作为线程的入口方法。通过 List<ThreadStart> 可以创建一个线程任务队列,存储多个待执行的任务。典型使用场景包括多任务队列管理和延迟执行控制。技术细节中,ThreadStart 委托可以传递给 Thread 构造函数,启动线程执行任务。由于 List<T> 非线程安全,多线程操作时需加锁。现代 C# 推荐使用 Task 和 ConcurrentQueue 替代 ThreadStart 。原创 2025-05-19 15:50:48 · 436 阅读 · 0 评论 -
线程池模式与C#中用法
线程池是一种管理线程生命周期的技术,旨在减少线程创建和销毁的开销,控制并发度,并通过任务队列有序处理异步请求。在.NET中,线程池通过System.Threading.ThreadPool实现,核心方法包括QueueUserWorkItem用于提交任务。线程池由工作线程、I/O完成端口和任务队列组成。使用线程池时,可以通过QueueUserWorkItem提交任务,并通过GetAvailableThreads等方法获取线程池状态。高级配置包括设置线程数限制和使用Task封装任务。原创 2025-05-19 15:33:10 · 457 阅读 · 0 评论 -
轴诊断数据采集器AxesDiagPacketRetriever类的设计
AxesDiagPacketRetriever 类是一个用于多轴诊断数据采集的工具,主要功能包括实时采集32个轴的状态数据、将原始数据转换为工程单位,并将扁平数组重组为结构化对象。其设计采用了工厂方法、策略模式和缓存模式,以提高效率和灵活性。核心数据结构包括每个轴需要采集的27种数据项ID、特殊项配置以及硬件API所需的项ID数组。关键流程涉及数据采集和数据结构转换,性能优化点包括请求数据缓存和批量读取。典型使用场景包括实时监控和故障诊断。原创 2025-05-19 13:56:25 · 884 阅读 · 0 评论 -
参数系统的基类Parameter抽象类
Parameter 是一个抽象类,作为参数系统的基类,负责管理类型安全的参数值,支持多种原始类型(如 int、double、float、long、string),并提供边界验证、缓存机制和上下文感知功能。其设计采用了模板方法模式、装饰器模式和策略模式,确保子类实现特定硬件访问逻辑,同时复用通用逻辑如边界检查和类型验证。核心组件包括 ParameterBounds、ParameterInfoProvider、PrimitiveType 和 ParameterContext,分别用于存储参数范围、提供元数据等。原创 2025-05-15 16:24:24 · 503 阅读 · 0 评论 -
控制器状态信息管理中心ControllerInformation类
ControllerInformation 类是一个用于管理控制器状态信息的核心类,主要负责硬件信息收集、重置事件管理、数据缓存与失效以及线程安全的事件通知。其设计模式包括观察者模式、延迟初始化和后台线程监控,确保在控制器重置前后能够精确处理状态变化。类中通过NamedMaskedConstantCollection管理轴信息,ControllerVersion封装控制器版本,InitializationInformation管理子系统初始化状态。原创 2025-05-15 14:55:25 · 519 阅读 · 0 评论 -
硬件控制系统的中枢管理类Controller实现
Controller 类是一个用于管理硬件控制系统的核心类,主要负责硬件连接的生命周期管理、子系统协调以及全局状态的维护。该类采用了多种设计模式,包括单例模式、组合模式和观察者模式,以确保系统的稳定性和可扩展性。单例模式通过静态字段和互斥锁(mutex)确保全局唯一连接实例的线程安全;组合模式通过独立类实现子系统的解耦,并通过统一接口暴露子组件;观察者模式则通过事件驱动机制实现硬件状态变化的通知。原创 2025-05-14 16:44:33 · 395 阅读 · 0 评论 -
可执行任务单元Task类的设计
Task 类是一个表示可执行任务单元的类,主要职责包括任务状态管理、程序关联、回调处理和硬件交互。该类实现了 INamed<TaskId> 接口,确保任务名称的类型安全,并通过 ControllerHandle 与底层硬件进行通信。关键设计包括强类型命名、硬件交互模式、状态封装和延迟初始化。Task 类通过 TaskCallbackContainer 管理异步事件,并通过 ControllerHandle 管理原生资源。典型使用场景包括任务控制、回调注册和状态监控。原创 2025-05-14 15:58:54 · 419 阅读 · 0 评论 -
泛型命名常量集合NamedConstantCollection<TObject, TName>类实现
NamedConstantCollection<TObject, TName> 是一个泛型命名常量集合类,支持通过名称或索引访问元素,并确保类型安全。其核心功能包括:通过 TName 类型名称或 int 索引双检索方式访问元素,要求 TObject 实现 INamed<TName> 接口,TName 实现 IComparable 接口,并支持轻量级迭代。设计上,索引器分为名称索引(线性搜索,O(n))和位置索引(直接数组访问,O(1)),底层使用 TObject[] 数组存储,支持外部注入数组。原创 2025-05-14 14:46:11 · 235 阅读 · 0 评论 -
错误码到异常类型的解析器ExceptionResolver类实现
异常处理原创 2025-05-14 11:47:12 · 287 阅读 · 0 评论 -
控制器回调注册管理器CallbackRegistrar类的实现
CallbackRegistrar 类是一个控制器回调注册管理器,负责统一管理多任务(Task)的回调注册、线程安全的回调监听、类型安全的参数传递以及错误处理机制。其核心设计模式包括分层架构和生产者-消费者模型。外层 CallbackRegistrar 提供面向用户的 API,按 TaskId 分发请求,内层 PerTaskCallbackHandler 处理单个任务的回调逻辑。原创 2025-05-14 11:05:57 · 409 阅读 · 0 评论 -
任务状态轮询器TaskStatesPoller 类实现
TaskStatesPoller 类是一个实现 IDataPoller 接口的任务状态轮询器,主要用于定期轮询控制器的任务状态,并通过线程安全的事件通知机制处理新状态数据和轮询异常。其核心功能包括动态启停控制、事件订阅管理以及异常处理。类设计采用了共享线程管理器 Threader<Controller> 来统一管理轮询线程,避免为每个实例创建独立线程,并通过 DelegateSpooler 确保事件在正确线程上下文执行。原创 2025-05-14 10:12:41 · 329 阅读 · 0 评论 -
一个内部工具类InternalUtility的实现
InternalUtilities 是一个内部工具类,提供了多种跨模块的通用辅助方法,涵盖类型转换、数组/集合操作、线程控制、调试输出、文件/XML处理以及多文化适配等功能。其核心方法包括数组操作(如截取、填充、反转)、类型转换(如枚举、字符串、指针)、位掩码操作、线程安全控制、调试工具、文件/XML处理、指针操作以及多文化适配。设计亮点在于其文化意识、线程安全性和防御性编程,确保代码的可靠性和国际化兼容性。改进建议包括增强异常处理、优化性能、扩展对Span<T>的支持以及补充文档说明。原创 2025-05-13 16:22:53 · 543 阅读 · 0 评论 -
异步委托任务队列管理器DelegateSpooler类实现
DelegateSpooler 是一个异步委托任务队列管理器,核心功能包括多管道委托任务调度、异步调用与回调处理以及线程安全的任务管理。它通过 pipe(管道ID)管理不同任务的执行状态,使用 BeginInvoke/EndInvoke 实现异步执行,并支持动态添加、清理和状态检查。关键成员包括 delegates 列表和 execed 字典,分别用于存储待执行和正在执行的任务。后台工作线程 worker 持续运行 bgWorker 方法,轮询处理任务队列。核心方法包括 Set、InitQueue 等。原创 2025-05-13 15:43:38 · 380 阅读 · 0 评论 -
一个泛型线程管理器实现Threader<TObject>
Threader<TObject> 是一个泛型线程管理器,用于对一组对象进行后台轮询操作。其核心功能包括定时调用委托方法、线程安全的对象订阅管理以及异步任务队列处理。关键成员包括控制线程运行的 worker 和 keepRunning,轮询间隔时间 interval,以及用于线程安全的 subscriptionMutex 和 threadMutex。核心方法如 AddSubscriber 和 RemoveSubscriber 用于管理订阅对象,StopAll 用于强制停止所有轮询。原创 2025-05-13 15:00:51 · 795 阅读 · 0 评论 -
诊断数据轮询器DiagPacketPoller类实现
DiagPacketPoller 是一个实现了 IDataPoller 接口的诊断数据轮询器,主要用于定期从控制器(Controller)获取诊断数据包(ControllerDiagPacket),并通过事件机制通知订阅者新数据到达或发生错误原创 2025-05-13 14:23:12 · 345 阅读 · 0 评论 -
WPF的UI元素类型详解
WPF提供了多种UI元素类型,每种类型都有其特定的用途和特性。ContentControl是最基本的内容控件,只能包含一个子元素,常见派生类包括Button和Label。HeaderedContentControl继承自ContentControl,包含标题和内容两部分,常用于分组相关控件,如GroupBox和TabItem。ItemsControl用于显示项目集合,支持数据绑定和项目模板,常见派生类有ListBox和ComboBox。H原创 2025-05-13 11:52:12 · 542 阅读 · 0 评论 -
C#集中管理数据轮询器的设计
ControlCenter 类是一个用于管理和协调多个数据轮询器的核心组件,主要包含诊断数据包轮询器(DiagPacketPoller)和任务状态轮询器(TaskStatesPoller)。通过构造函数注入 Controller 实例,初始化并管理这些轮询器。类提供了 UnsubscribeAll() 方法用于取消所有轮询器的订阅,以及 Disable() 方法用于暂停轮询器的工作。设计上,ControlCenter 通过依赖注入和接口抽象提高了灵活性和可扩展性,同时通过只读属性暴露轮询器实例,保证安全行。原创 2025-05-12 15:48:44 · 428 阅读 · 0 评论 -
C#中SetProperty方法使用
SetProperty 是 MVVM 模式中实现属性变更通知(INotifyPropertyChanged)的核心方法,用于在属性值变化时自动更新 UI 绑定。其主要功能包括:更新字段值、触发 PropertyChanged 事件通知 UI 更新,以及避免重复更新以提高性能。SetProperty 通常在 ViewModel 基类中定义,支持自动属性名推断和自定义回调,简化了 INotifyPropertyChanged 的实现,并提高了代码的简洁性和安全性原创 2025-05-12 11:25:47 · 597 阅读 · 0 评论 -
三个概念:DataBinding,Dependency Property 与DataTemplate
数据绑定等三个特征原创 2025-04-30 15:51:52 · 749 阅读 · 0 评论 -
Abstract Factory 模式与C++/C#的代码实现
设计模式:抽象工厂原创 2025-04-29 21:43:51 · 657 阅读 · 0 评论