- 博客(67)
- 收藏
- 关注
原创 从 Tool Calling 到 AI Native CAD:大语言模型、CAD Planner 与 World Model 在下一代智能 CAD/CAM 系统中的应用思考
例如,在“设计一个法兰”任务中,系统首先由LLM解析需求,再由Planner拆解为草图、旋转体、中心孔、螺栓孔阵列及倒角等子任务,Workflow逐步执行并持续接收OpenCascade反馈。例如,在“设计一个法兰”任务中,系统首先由LLM解析需求,再由Planner拆解为草图、旋转体、中心孔、螺栓孔阵列及倒角等子任务,Workflow逐步执行并持续接收OpenCascade反馈。LLM负责需求理解,Planner负责决策,Workflow负责调度,OpenCascade负责几何计算,并形成闭环反馈。
2026-06-27 09:47:27
173
原创 从CAD/CAM到Agent工程:大模型、MCP与工业AI的技术路线分析
重点讨论大模型在工业软件中的真实定位、Agent系统的工作机制、MCP协议的意义,以及神经网络、强化学习等技术在CAM参数优化中的应用价值,并进一步分析未来CAD/CAM工程师的能力发展方向。未来工业软件的发展方向并非“让GPT完成所有工作”,而是构建以Agent为中心、以Tool为能力单元、以CAD/CAM内核为计算基础的智能工程平台。对于从事OpenCASCADE、CAM、机器人及智能制造研究的工程师而言,最值得投入精力的方向仍然是几何算法、工艺规划、刀路生成以及机器学习优化模型的研究。
2026-06-25 11:45:45
189
原创 从 RS232 到 EtherCAT:工业总线、现场总线与现代运动控制系统的本质
工业自动化的发展历程,本质上也是工业通信技术不断演进的过程。从最早的点对点串口通信,到现场总线网络,再到现代工业以太网与 EtherCAT 实时控制系统,通信技术的发展始终围绕着三个核心目标展开:提高通信带宽、增强实时性以及提升多设备同步能力。对于初学工业自动化、机器人或数控系统的人而言,RS232、RS485、CAN、Modbus、CANOpen、PROFINET、EtherNet/IP、EtherCAT 等名词往往令人困惑。
2026-06-24 18:51:50
183
原创 从运动规划到前瞻控制:轨迹规划、速度规划、S曲线与Look-Ahead算法详解
本文系统总结运动规划(Motion Planning)领域中的核心概念,包括路径规划、轨迹规划、速度规划、S曲线速度规划以及前瞻(Look-Ahead)算法。文章以CAD/CAM、数控加工、机器人运动控制和复杂曲面激光加工为背景,从数学定义、工程实现和实际案例三个层面分析各模块之间的关系,并澄清轨迹规划与速度规划、S曲线规划与前瞻算法之间容易混淆的问题。对于复杂曲面激光加工、高速五轴加工等应用,仅仅生成正确的刀具路径已经不足以保证加工质量,更关键的问题在于如何控制速度、加速度以及运动平滑性。
2026-06-23 10:46:28
241
原创 从CAD到CAM:刀路规划、碰撞检测与G代码的本质
本文系统梳理了CAD/CAM领域中CAM系统的核心工作流程,包括加工特征识别、刀路生成、碰撞检测、后处理器以及G代码等关键技术。文章从工程实践与软件架构角度出发,解释CAM究竟在做什么、刀路为何是CAM的核心、碰撞检测如何保障加工安全、后处理器为何不可或缺,以及G代码为何在诞生七十余年后仍然是工业界事实标准。CAD模型 → 特征识别 → 加工策略 → 刀路规划 → 仿真验证 → 后处理 → G代码 → CNC机床。其中,曲面交线、参数化、扫描线填充、等弧长规划等研究内容,已经属于现代CAM核心算法范畴。
2026-06-22 11:07:33
214
原创 现代CAD几何内核中的求交算法——从曲线求交到曲面求交的原理与实现
无论是模型布尔运算、特征建模、曲面修剪、装配分析,还是数控加工中的刀具路径规划,其底层都离不开各种形式的几何求交。然而在工业级CAD内核中,由于大量采用NURBS曲线与曲面表示复杂几何对象,传统解析求解方法已经难以适用,取而代之的是基于参数空间、数值迭代以及拓扑重建的一整套工程化算法体系。本文从CAD几何内核的角度出发,系统介绍曲线求交、曲线曲面求交以及曲面曲面求交的数学本质和工程实现流程,并结合OpenCASCADE等主流CAD内核的实现思想,帮助读者建立完整的几何求交知识框架。
2026-06-21 09:59:00
256
原创 从 STL 到 STEP:深入理解 CAD 模型表达与布尔运算的本质
本文首先分析 STL 与 STEP 的模型表达原理,阐述为什么 STEP 文件远比 STL 文件复杂;STL 与 STEP 都能够表示三维模型,为什么工业 CAD 软件更偏向于使用 STEP,而 STL 更多用于 3D 打印和可视化?先将所有参与运算的实体切分为拓扑一致的 Cell,再根据逻辑规则选择需要保留的 Cell,最终重建为新的 B-Rep 实体。STEP 与 STL 的区别并不仅仅是文件格式不同,而是模型表达思想的根本差异。要回答这些问题,必须首先理解 CAD 模型究竟是如何表达几何对象的。
2026-06-20 10:32:49
209
原创 Opencascade读取或保存文件异常
有时候使用opencascade读取或保存step、iges等文件出现异常,跳到xmemory,是因为读取路径的字符问题,可以考虑更换字符类型。
2025-12-13 20:17:33
154
原创 在c#里的两种opencascade视图显示方式实例(2)
方法中,控件监听了大小变化事件,当 WPF 中承载该控件的容器的大小改变时,会调整原生窗口的大小,并且根据新的大小强制调整 Opencascade 的视图大小,并触发重新绘制。类,可以在 WPF 应用程序中嵌入原生的 Win32 控件,从而实现更丰富的用户界面体验。整体来说,这个类实现了将 Opencascade 的 3D 视图显示在 WPF 应用程序中的功能。是 WPF 中的一个基类,它允许在 WPF 应用程序中承载 Win32 控件。类是一个自定义的 WPF 控件,继承自。
2024-05-20 10:36:12
231
原创 在c#里的两种opencascade视图显示方式实例
首先,添加occtproxy文件,然后在c#项目里引用(注意把c#项目也设置成64位,否则可能抛出异常说程序集引用异常)在以前的博客中已经有提到,有两种让opencascade视图在c#中显示的方式,接下来我们一一介绍。如果想实现winform控件在wpf中显示视图,那么学习如何在wpf中使用winform控件即可。在form1.cs文件中设置一个panel控件。一.使用winform控件。
2024-05-17 22:43:25
12
原创 arduino使用光电开关控制电动平台回零
然后根据你的情况把白色的或者黑色的线接到该引脚上,我这里接的是黑线,白色线不用管。如果如果你希望在物体未被遮挡时无需关注输出信号,而在物体遮挡时发送一个信号并在遮挡持续期间保持这个信号状态,那么您应该使用。然后5v和0v都可以使用arduino自带的接口。注意:NPN和PNP型光电开关的接线方式不同。
2024-04-22 18:40:33
68
原创 数据结构总结
栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。当然,表也包括了很多类型,例如:线性表(链表),散列表,队列、栈等,他们都是表的一种特殊情况,而他们各自又可以根据情况不同,而使用不同的类型,比如说链表在不同的情况下可使用链表、双链表,循环链表。在这里,数值[0]所对应的便是milk,数值[3]所对应的便是apple,当我们查找apple时,它便会立马定位到数值[3],而不是通过遍历的方式从数值[0]一直往后遍历,因此它的时间复杂度仅为O(1)。
2024-04-12 14:58:50
1897
1
原创 mega2560读取sick位移传感器
1.在测量200-900mm的时候,发现所得串口数值都是不变的,这是因为传感器内部设置的问题,传感器内部设置在900mm以下的时候,都处于4ma以下的一个固定值,所以不管你怎么增大距离,得到的串口数值是不变的,这需要你联系商家,询问他们这一块的设置问题。同理,在20ma时,也会设置一个最大量程,如果你的量程超过了这个示数,那么它依然只输出20ma,你得到的串口数值也会达到一个最大量,你再增大你的位移传感器示数,你得到的串口值也不会变化,此时,需要你在传感器的设置中更改它在20ma时的最大量程。
2024-04-09 16:14:20
403
原创 算法题2两数相加
注意链表分为逆序和顺序,比如123,顺序为1-2-3,逆序则为3-2-1,链表在顺序中的第一个数是1,在逆序中的第一个数是3。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。返回dummy.next是因为dummy第一位是0,它的下一位节点才是我们需要的。的链表,表示两个非负的整数。它们每位数字都是按照。的方式存储的,并且每个节点只能存储。
2024-03-30 15:34:07
322
原创 数据结构与算法 哈希表(散列表)
因此,散列表的时间复杂度O(1)。当我们需要在数组里查找一个数时,就可以考虑到使用哈希表来降低时间复杂度了。所以,我们需要尽可能地高的填装因子和一个良好的散列函数,才能提高哈希表的性能。3.哈希表发生冲突时。
2024-03-29 14:59:51
777
原创 算法题1两数之和
问题:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。但是,数组中同一个元素在答案里不能重复出现。不同于数组,哈希表找数的时间复杂度为O(1),所以这里的时间复杂度应为O(n)输入:nums = [2,7,11,15], target = 9。最容易理解,但是他的时间复杂为O(n2),因为这是两个for循环。
2024-03-29 14:43:33
532
原创 数据结构与算法分析2栈、队列
1.栈和队列本质上都是表,所以他们都有两种实现方式,链表实现和数列实现。栈的特点是后进先出。4.栈的危险操作:用尽栈空间,导致内容占用到别的寄存器里面去了,从而出现异常。6.队列的效果示意图。
2024-03-29 12:35:12
225
原创 数据结构与算法分析2表、链表
2.表的相关操作都可以由数组实现。但为了避免插入和删除的线性开销(所有元素都需要相应移动),发明了链表。下图就是表的一种表现方式。8.当所用高级语言没有指针时,使用游标实现法来实现链表。5.给出一个链表的类型声明和一些处理的函数。6.介绍双链表和循环链表。
2024-03-28 10:11:21
345
原创 数据结构与算法分析引论1
1.解决问题的算法有很多,但是在输入不同的情况下,不同算法之间的差异也很大,我们总是追求一个更快、更有效的方法。比如说普通的依次查找和二分查找,两者的差异就很大。我们使用大O表示法来表示算法的速度。依次查找就是O(n),而二分查找就是O(log2n)。假设4亿个数据,依次查找需要时间为4亿,而二分查找则是log2的4亿,当然这指的都是他们的最长时间,大O表示法指出了最糟糕情况下的运行时间。当然,不是所有问题都有好方法。2.在计算机科学中,除非有特别的说明,所有的对数都是以2为底的。
2024-03-26 22:36:56
392
原创 三.寄存器(内存访问)
2.并不是所有cpu都支持将数据段送入段寄存器,所以有时候用个别的寄存器先把数据段存储起来,再把该寄存器mov到段寄存器。
2024-03-24 20:41:15
211
原创 二.寄存器
10.在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时,CPU从内存FFFFOH单元中读取指令执行,FFFFOH单元中的指令是8086PC机开机后执行的第一条指令。所以,要让CPU执行我们放在代码段中的指令,必须要将CS:IP指向所定义的代码段中的第一条指令的首地址。5.al,ah,ax在接受汇编指令时,并不相等,若是al、ah,就只是一个八位寄存器来使用,此时注意溢出的数值要清零。3.一个字是两个字节。
2024-03-23 22:59:40
426
原创 一.基础知识
前面所讲的内存读或写命令是由几根控制线综合发出的,其中有一根称为“读信号输出”的控制线负责由CPU向外传送读信号,CPU向该控制线上输出低电平表示将要读取数据;这也就是说,CPU在操控它们的时候,把它们都当作内存来对待,把它们总的看作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。举例来讲,一个CPU的地址总线宽度为10,那么可以寻址1024个内存单元,这1024个可寻到的内存单元就构成这个CPU的内存地址空间。13.不同的计算机系统的内存地址空间的分配情况是不同的。
2024-03-21 22:57:46
495
原创 c#学习记录 委托lambda
3.委托有点类似于类里面的重载和模板,都是因为无法封闭,所以想出来的新办法。1.一些方法无法封闭,所以我们可以使用委托来封闭。2.方法里使用委托时,可以用lambda代替来写。
2024-03-19 14:32:44
187
原创 c#学习记录2
2.类里面override的方法必须继承自虚方法。virtual和override是对应的。多态的基础就是virtual和override,一个父类,多种实现。1.标为abstract的类是抽象类,不能实例化,只是用来继承的,并且內部不能有方法的具体实现除了构造函数。3.面向对象与面向过程的差异在于延展性,面向过程是写死的,很难再拓展的,但是面向对象是可以拓展更新的。8.结构体也是值类型 ,也有一种构造函数,但是构造函数必须要有参数。5.因为继承只能继承一个类,所以有了接口。4.is是判断,as是转换。
2024-03-17 16:58:12
1105
原创 c#学习记录
8.readline读取的是字符串,parse()用来解析字符串,int a1=int.parse(read)即可使read变为int类型,当然read要是数字,否则会出问题。4.string a = ""与string a=string.empty等价,但是不等价于string a = null。5.类型可分为值类型和引用类型,string,list属于引用类型,并且null只能赋值给引用类型。例如:string a = @"123\t123";7.var是隐式类型,是自动给变量找到它的类型的。
2024-03-16 16:31:27
853
原创 opencascade在vs和qt下改变视图方向和设置线框模式
3.在lzzcad.cpp中设置槽与信号的连接,并在工具栏上显示。4.在view.cpp中给出函数实现。但存在bug,需要修复,此处只做演示。一.改变视图方向(以顶部视图为例)2.在view.h中设置好槽函数。1.在qt的界面代码中设置好。5.给出快捷键实现方式。
2024-02-24 13:12:30
378
原创 youtube opencascade总结
重点:创建可视化,ws切换显示模式,各种按键切换为六个视角,还有fit模式,导入brep文件,将自己所绘图形导出为brep文件保存路径可以自己决定。
2024-01-27 16:49:06
933
原创 深入理解计算机系统学习记录5
3.当执行一个运算时,如果一个有算数有符号,一个运算数无符号,这时会把有符号转换为无符号,并假设这两个数都非负的来执行这个运算。4.无符号数扩展位采用零扩展,有符号数扩展位采用符号扩展。无符号数加零即可,有符号数加最高有效位的值,即0或1。2.%d,%u和%x分别以有符号十进制、无符号十进制、十六进制格式输出一个数字。1.强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。
2023-12-14 14:30:11
129
原创 深入理解计算机学习系统学习记录3
1.在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。2.二进制代码很少能在不同机器和操作系统组合之间移植。3.位级运算的一个常见用法就是实现掩码运算。
2023-12-10 21:41:14
101
原创 深入理解计算机系统学习记录2
2.操作系统两个基本功能:(1)防止硬件被失控的应用程序滥用(2)向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。3.进程是操作系统对一个正在运行的程序的一种抽象。而并发运行,则是一个进程的指令和另一个进程的指令交错运行。1.我们可以把操作系统看成是应用程序和硬件之间插入的一层软件。5.堆和栈在运行时都可以动态地扩展和收缩,调用一个函数,栈增长,从一个函数返回,栈收缩。7.要想显著加速整个系统,必须提升全系统中相当大的部分的速度。4.一个进程实际上可以由多个称为线程的执行单元组成。
2023-12-09 21:37:35
104
原创 深入理解计算机系统学习记录1
处理器看上去是按照一个非常简单的指令执行模型来操作的,这个模型是由指令集架构来决定的,但实际上现代处理器使用了非常复杂的机制来加速程序的执行,因为我们将处理器的指令集架构和处理器的微体系结构区分开来,指令集架构描述的是每条机器代码指令的效果,而微体系结构描述的是处理器实际上是如何实现的。一个简单的hello程序执行顺序:键盘输入,读入寄存器,传到内存,执行指令,从内存传到主存,pc读主存,执行其机器语言指令,字节复制到寄存器,再从寄存器复制到显示器显示。1.在unix系统上,从。0.信息就是位+上下文。
2023-12-07 22:55:20
124
原创 mayo编译配置
加入dll文件和qt的platforms即可解决,注意,dll和platforms要放在mayo的debug文件夹下,再编译,即可运行。基本上是所有的if、endif(除了头文件那里),编译,报错,显示缺少dll,这时,参考我的文章。报新的错误,是io-occ.cpp文件里面有一部分代码未能完全实现,注释掉就行。4.打开io-occ.cpp文件,根据提示注释掉不需要的代码。在c++命令行里删除下面的命令,再编译。1.打开pro文件,运行,报错。3.配置完成,此时再编译,报错。
2023-10-25 09:07:00
468
空空如也
c#调用c++dll
2024-08-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅