当前位置: 首页 > article >正文

Arduino PLC IDE入门:用五种工业语言实现计数器

1. 项目概述当Arduino遇见工业标准如果你是从Arduino IDE玩过来的开发者第一次打开Arduino PLC IDE可能会有点懵。左边是熟悉的项目树右边却多了些“梯形图”、“功能块”的标签页这感觉就像习惯了开手动挡轿车突然坐进了挖掘机的驾驶室——工具更专业了能干重活了但操作逻辑完全不同。这个项目就是带你从零开始用工业自动化领域通行的IEC-61131-3标准下的五种编程语言在Arduino Opta或Portenta Machine Control这样的工业级硬件上实现一个最基础的计数器功能。核心目标不是让你成为PLC编程专家而是帮你打通“单片机思维”到“工控编程思维”的任督二脉理解如何在同一个项目里让C语言风格的ST结构化文本和图形化的梯形图协同工作。为什么这件事有价值在传统的工业控制柜里你可能需要为逻辑控制写梯形图为复杂的流程写SFC顺序功能图为算法写ST。过去这些往往在不同的软件甚至不同的控制器里完成。而Arduino PLC IDE试图把这些整合到一个面向Arduino硬件的环境中让开发者尤其是那些有嵌入式背景但想进入工控领域的朋友能用一套熟悉的硬件平台接触并掌握工业界的标准语言。这就像给你一套乐高但说明书同时提供了步骤图、零件清单和3D建模软件文件让你能从不同维度理解同一个作品。2. 环境准备与核心概念解析2.1 硬件选型与固件分区工欲善其事必先利其器。这个项目支持Arduino Opta系列Lite, RS485, WiFi和Portenta Machine Control。选择哪一款如果你的应用场景只是本地逻辑控制Opta Lite就足够了如果需要连接多个设备组成网络Opta RS485是首选若要求无线监控或数据上报那就选Opta WiFi。Portenta Machine Control则面向更复杂的机器控制集成了更多工业接口。我手头用的是一台Opta WiFi因为它兼顾了有线连接的稳定性和无线调试的便利性。注意无论你用的是全新的设备还是之前用Arduino IDE玩过的旧设备第一步都必须进行“内存分区”。这是很多新手容易忽略然后导致PLC IDE无法下载程序或运行异常的关键一步。为什么需要分区传统的Arduino IDE将整个闪存视为一个统一的编程空间。而PLC IDE基于一个实时操作系统RTOS运行它需要将闪存划分为不同的区域一部分存放PLC运行时Runtime系统一部分存放你的IEC-61131-3程序还有一部分可能用于文件系统。不进行分区硬件就不知道如何正确引导和运行PLC环境。操作很简单在PLC IDE中找到“Tools” - “Partitioning Opta/Portenta Machine Control”按照向导操作即可。这个过程会擦除闪存所以请提前备份好原有程序。2.2 PLC IDE界面初探与手册使用打开Arduino PLC IDE界面布局和传统的Arduino IDE差异很大。左侧是“项目资源管理器”你的程序、变量、任务都在这棵树里。中间是编辑区域会根据你打开的语言类型如梯形图、ST变化。右侧通常是“库树”或“工具箱”存放着可拖拽的功能块。下方则可能有“监视”、“输出”等窗口。一个极其重要但容易被忽视的宝藏是内置用户手册。你可以在顶部菜单栏点击“Help” - “Index”打开它。我强烈建议你在开始编程前花15分钟浏览一下手册的目录。它详细解释了项目管理、每种语言的语法、调试工具的使用。很多操作疑问比如“如何给功能块添加一个输入引脚”或者“任务周期怎么配置”都能在里面找到答案。把它当成随时可查的说明书而不是事后补救的故障指南。2.3 理解IEC-61131-3的编程范式IEC-61131-3标准定义了五种语言它们不是互斥的而是可以混合使用的工具。理解这一点至关重要。结构化文本ST 语法类似Pascal或C适合编写复杂的算法、数学计算和数据处理。如果你有C语言基础上手最快的就是它。指令表IL 类似汇编语言是一种低级、基于指令的文本语言。现在直接用的比较少但理解它有助于读懂一些老设备程序或深入理解PLC执行原理。梯形图LD 源自继电器控制电路图用触点和线圈的串联/并联来表示逻辑关系。它最直观非常适合描述开关量逻辑比如“当按钮A按下且传感器B未触发则启动电机C”。功能块图FBD 用图形化的“块”和连接线来表示信号或数据的流向。每个块代表一个函数如AND, ADD, TIMER。它适合描述数据流和控制流程在过程控制中常用。顺序功能图SFC 类似于流程图用于描述程序执行的顺序和步骤。它把程序分解为一系列的“步”和“转换”非常适合编写复杂的顺序控制或状态机程序。这五种语言可以在同一个项目中并存。一个SFC的“步”里可以调用一个用ST写的动作一个FBD网络里可以嵌入一个LD程序段。它们通过“变量”进行通信。这就是PLC编程的模块化思想用最合适的语言做最合适的事。3. 项目实战从Arduino Sketch到五种语言我们的目标是将一个简单的Arduino计数器Sketch用五种语言分别实现。原始Sketch逻辑很简单一个全局变量counter在每个循环loop中递增1。// Arduino Sketch 示例 int counter 0; void setup() { // 初始化代码 } void loop() { counter counter 1; delay(100); // 模拟一个周期 }3.1 变量声明全局与局部的舞台在PLC IDE中变量是程序间通信的桥梁。首先要分清全局变量和局部变量。全局变量 在“Project”标签页下双击Global_vars全局变量表。在这里声明的变量项目中的所有程序无论哪种语言都能访问和修改。这类似于Arduino Sketch中在顶层定义的变量。右键点击表格选择“Insert”即可添加。你需要定义“名称”如gCounter、“类型”如INT表示整数、“初始值”和“注释”。对于计数器我们定义一个INT类型的gCounter初始值为0。局部变量 当你双击打开一个具体的程序比如一个ST程序时编辑器顶部会有一个“局部变量表”。这里声明的变量只在该程序内部有效。这有助于封装避免命名冲突。实操心得良好的命名习惯能省去大量调试时间。我习惯全局变量加g_前缀如g_Counter局部变量则根据功能命名如stepTimer。对于BOOL布尔类型可以用b前缀。在团队协作或项目复杂后这套约定会让你感激自己。3.2 任务配置程序执行的节拍器在Arduino IDE里你只有一个loop()。在PLC IDE里你有多个“任务”这让你能更精细地控制程序执行。INIT 初始化任务仅在上电或启动时执行一次。适合放硬件初始化、参数预加载的代码。FAST 快速循环任务默认每10ms执行一次。这个周期是可以配置的。适合放需要快速响应的逻辑如高速计数、紧急停止。SLOW 慢速循环任务固定每100ms执行一次。适合放主控制逻辑、常规扫描。BACKGROUND 后台任务固定每500ms执行一次。适合放通信处理、非实时性计算等。如何分配程序在“Project”标签页找到“Tasks”。你可以直接将编写好的程序从项目树拖拽到相应的任务如SLOW下。一个任务下可以挂载多个程序它们将按照在任务列表中的从上到下的顺序依次执行。注意事项默认情况下新建的MAIN程序会被挂在FAST任务下。如果你写了一个复杂的ST算法执行一次需要15ms而FAST任务周期是10ms那就会导致任务超时可能引发看门狗复位或系统不稳定。务必根据程序的实际执行时间合理选择任务和配置周期。右键点击任务如FAST选择“Task configuration”即可修改其循环时间。3.3 核心实现五语言编写计数器现在我们为每种语言创建一个新程序。在“Project”菜单选择“New object” - “New program”命名如Counter_ST并选择对应语言。3.3.1 结构化文本ST实现ST的实现最直接几乎和C语言一样。创建一个ST程序在局部变量表声明一个INT类型的localCounter或者直接使用全局变量gCounter。在代码编辑区写入// ST程序代码 localCounter : localCounter 1; // 注意赋值符号是 : 不是 // 或者使用全局变量 gCounter : gCounter 1;关键点ST中的赋值运算符是:相等比较是。这是从Pascal语言沿袭来的和C语言的与不同刚开始很容易写错。3.3.2 梯形图LD实现梯形图的核心思想是“能流”。从左边的“电源线”开始经过一系列触点条件如果通路形成则右边的线圈输出得电。从右侧“Library Tree”中拖拽一个“ADD”功能块到编辑网格。ADD块默认有两个输入IN1、IN2和一个输出OUT。我们需要实现counter counter 1。我们需要一个“自保持”的路径。通常我们会用一个常闭触点代表“总是导通”作为起始条件。从库中拖拽一个“常开触点”代表TRUE放在ADD块左侧。连接将gCounter变量连接到ADD块的IN1将一个常数1从库中拖拽“常数”块并设置为1连接到IN2。将ADD块的OUT输出连接回gCounter变量。但这样每个扫描周期都会加1太快了。我们需要一个沿触发。更常见的做法是配合一个自身触点和一个上升沿检测块来构成一个每次扫描只加一次的回路但在简单演示中我们可以利用任务周期如SLOW任务的100ms来控制速度。一个更接近工业实践的计数器会使用“递增计数器”功能块CTU直接从库中搜索并拖拽CTU块设置其CU端为TRUEPV预设值为一个很大的数CV当前值输出连接到gCounter即可。避坑技巧在图形化语言中连接变量时确保数据类型匹配。试图将一个INT输出连接到BOOL输入IDE通常会报错或显示连接线为虚线。养成连接后检查连线状态的习惯。3.3.3 功能块图FBD实现FBD和LD在思路上有相似之处但更侧重于数据流。拖拽一个“ADD”功能块到画布。拖拽两个“变量”块或直接从项目树拖拽全局变量gCounter和一个常数1。将gCounter变量块连接到ADD的IN1常数1连接到IN2。将ADD的OUT输出连接到另一个“变量”块并将其关联到gCounter这代表写入。这里会出现一个“反馈”回路PLC IDE通常能处理这种简单的代数环。但更严谨的做法是使用一个“D触发器”或“寄存器”块在时钟边沿将新值锁存到gCounter避免在一个扫描周期内同时读写同一变量可能引发的逻辑歧义。3.3.4 顺序功能图SFC实现SFC适合描述过程。我们的计数器过程很简单初始步 - 执行计数 - 判断总是真- 跳回计数步构成循环。创建一个SFC程序。初始会有一个“初始步”STEP0和一个“转换”TRANS0。我们需要一个“动作”来执行计数。右键点击SFC程序节点选择“New action”。新建一个动作命名为Act_Count语言选择ST。在这个ST动作里写入gCounter : gCounter 1;。回到SFC编辑器。初始步STEP0通常用于初始化。我们右键画布插入一个新的“步”Step命名为Step_Count。右键点击Step_Count选择“关联动作”将Act_Count关联上去。这样当程序执行到这一步时就会调用这个ST动作。从Step_Count引出一个“转换”Transition。在转换的条件里可以写TRUE或1表示无条件通过。从这个转换我们需要跳转回Step_Count以形成循环。使用“跳转”Jump功能指向Step_Count。同时也需要从初始转换连接到Step_Count作为入口。3.3.5 指令表IL实现IL是一种底层语言这里简单展示其样貌。创建一个IL程序代码大致如下LD gCounter // 将gCounter的值加载到累加器 ADD 1 // 累加器值加1 ST gCounter // 将累加器结果存回gCounter这非常类似于汇编语言LD是加载ADD是加ST是存储。对于现代编程除非维护老旧系统否则直接使用IL的场景很少。4. 调试与监视让程序运行可视化程序写完了怎么知道它跑得对不对PLC IDE提供了强大的在线监视功能。4.1 变量监视窗口点击“View” - “Tool windows” - “Watch”打开监视窗口。你可以直接从项目树的“Global_vars”或程序内的局部变量表中将变量如gCounter拖拽到这个窗口。下载并运行程序到硬件后这个窗口就会实时显示变量的当前值。你会看到gCounter的值每隔一个任务周期例如SLOW任务的100ms就增加1。4.2 程序调试与状态查看对于图形化语言LD, FBD, SFC在在线状态下通过的“能流”或活动的“步”会高亮显示通常是蓝色。你可以清晰地看到程序的执行路径。对于SFC当前激活的“步”会变色让你直观地跟踪流程走到了哪一步。这是图形化语言调试的巨大优势。4.3 库管理扩展功能PLC IDE的库管理与Arduino IDE不同。它更结构化。你需要手动添加库的精确名称和版本。点击“Resources”标签页在“Sketch”下找到“Libraries”。点击“Add”输入库名例如Arduino_MachineControl和所需版本例如1.1.1。版本信息可以从Arduino Library Reference网站查询或者如果你在Arduino IDE里已经安装了该库可以在本地库文件夹的library.properties文件中找到。常见问题添加库后编译报错“找不到库”首先检查库名和版本号是否完全正确包括大小写。其次PLC IDE目前主要支持官方或广泛认可的公开库。一些非常个人化或未发布的库可能无法添加。确保你的库是兼容Arduino PLC IDE运行时的。5. 进阶技巧与避坑指南5.1 变量作用域与冲突解决当你在多个程序里使用同名变量时作用域规则是局部变量优先于全局变量。但最佳实践是避免命名冲突。如果你在一个ST程序里声明了localCounter又在另一个FBD程序里试图直接使用localCounter这是不允许的因为它是局部的。跨程序通信必须通过全局变量或者通过程序的输入输出参数类似于调用函数传参来实现。5.2 图形化编程的“代数环”问题在FBD或LD中如果你直接将一个功能块的输出连接回它自己的输入就像我们之前设想的gCounter直接反馈到ADD的输入会形成一个“代数环”。PLC的扫描周期是顺序执行的理论上需要知道gCounter的新值才能计算gCounter1但新值又依赖于本次计算。大多数PLC系统包括Arduino PLC IDE的编译器或运行时会检测并处理这种简单环但对于复杂环可能导致无法编译或逻辑错误。解决方案引入一个扫描周期的延迟。使用一个“寄存器”或“延迟块”。将ADD的结果先存到一个中间变量Temp然后在下一个扫描周期再将Temp赋值给gCounter。或者直接使用系统提供的“计数器”功能块CTU它内部已经处理好了时序逻辑。5.3 任务周期与执行时间的权衡这是工业PLC编程的核心考量。不要把所有程序都扔进FAST任务。周期越短的任务对程序执行时间的要求越苛刻。你需要估算或实际测量每个程序的执行时间。测量方法可以在程序开始和结束处读取一个高精度计时器的值计算差值并通过全局变量在监视窗口查看。经验法则一个任务的循环周期应该至少是该任务下所有程序最坏情况执行时间总和的2-3倍。为系统留出处理中断、通信等后台事务的时间。优化如果某个ST程序计算量太大考虑将其拆分非实时部分移到SLOW或BACKGROUND任务或者优化算法。5.4 从Sketch到PLC程序的思维转换最大的思维转换是从“顺序执行延迟”到“循环扫描任务调度”。Arduino Sketchloop()函数从头跑到尾遇到delay()就真的停下来等待。程序状态管理通常靠全局变量和millis()。PLC程序 每个任务周期性地、从头到尾地执行其下的所有程序。没有delay()函数。如果你想让某个动作持续2秒你需要使用“定时器”功能块TON并检查其输出。状态管理更适合用SFC或专门的标志位序列来实现。例如实现一个“按下按钮后灯亮2秒”的功能Sketch思维在loop里检测按钮按下然后digitalWrite(HIGH); delay(2000); digitalWrite(LOW);。这会阻塞整个循环。PLC思维在FAST任务中用一个LD或FBD网络。使用一个上升沿检测块触发一个TON定时器块定时器设置PT2s。灯的线圈由定时器的Q输出直接控制。整个逻辑在一个扫描周期内完成判断不阻塞其他任何程序的执行。掌握这种“非阻塞”、“基于状态和扫描”的编程思维才是玩转工业PLC的核心。通过这个简单的计数器项目你不仅学会了五种语言的语法更重要的是迈出了理解这种工业控制范式第一步。接下来尝试用SFC做一个三色灯流水灯用FBD实现一个简单的PID温度控制模拟把图形化和文本语言混合使用你会对Arduino PLC IDE的强大和工业编程的乐趣有更深体会。

相关文章:

Arduino PLC IDE入门:用五种工业语言实现计数器

1. 项目概述:当Arduino遇见工业标准如果你是从Arduino IDE玩过来的开发者,第一次打开Arduino PLC IDE,可能会有点懵。左边是熟悉的项目树,右边却多了些“梯形图”、“功能块”的标签页,这感觉就像习惯了开手动挡轿车&a…...

告别命令行恐惧:用Tcl脚本一键搞定VC LP低功耗验证(附完整脚本)

告别命令行恐惧:用Tcl脚本自动化VC LP低功耗验证全流程 在数字IC验证领域,低功耗验证已经成为不可或缺的一环。VC LP作为业内广泛使用的低功耗验证工具,其重要性不言而喻。然而,许多工程师仍然习惯于在交互式命令行中逐条输入命令…...

AISMM白皮书没说透的3个致命陷阱:模型幻觉评级缺失、多模态对齐盲区、实时推理SLA断层——附官方补丁V1.2预览

更多请点击: https://intelliparadigm.com 第一章:AISMM白皮书下载:2026奇点智能技术大会首发 白皮书核心价值与定位 AISMM(Artificial Intelligence System Maturity Model)白皮书是面向AI系统工程化落地的首套全生…...

你的ADC采样率真的够吗?一个FFT频谱泄露的实战排查与修复记录

你的ADC采样率真的够吗?一个FFT频谱泄露的实战排查与修复记录 在嵌入式振动监测设备的开发中,频谱分析是诊断机械故障的核心手段。但当我们试图用STM32的ADC采集电机轴承振动信号时,FFT频谱图上却出现了令人困惑的"拖尾"现象——本…...

智能代码助手WeClaw:基于LLM的开发者效率革命

1. 项目概述:一个面向开发者的智能代码助手 最近在GitHub上看到一个挺有意思的项目,叫 fastclaw-ai/weclaw 。乍一看这个名字,可能会有点摸不着头脑,但如果你是一个经常和代码打交道的开发者,尤其是需要处理大量重复…...

TwinCAT3伺服调试实战:如何用MC_ReadStatus和MC_SetOverride功能块优化运动性能与诊断问题

TwinCAT3伺服调试实战:MC_ReadStatus与MC_SetOverride功能块的高级应用 在工业自动化领域,运动控制的稳定性和精确度直接影响生产效率和产品质量。作为倍福(Beckhoff)TwinCAT3平台的核心功能,伺服控制功能块为工程师提…...

5G NR PDSCH DMRS配置实战:从DCI解析到天线端口映射(Type 1/Type 2详解)

5G NR PDSCH DMRS配置实战:从DCI解析到天线端口映射(Type 1/Type 2详解) 在5G NR物理层开发中,PDSCH(物理下行共享信道)的DMRS(解调参考信号)配置直接影响下行数据传输的可靠性与效率…...

【AISMM人才吸引黄金72小时法则】:从大会签约到Offer接受的转化率提升210%实战复盘

更多请点击: https://intelliparadigm.com 第一章:2026奇点智能技术大会:AISMM与人才吸引 2026奇点智能技术大会(Singularity Intelligence Summit 2026)首次正式发布人工智能系统成熟度模型(AISMM&#x…...

Taotoken模型广场如何帮助开发者快速进行模型选型与对比

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken模型广场如何帮助开发者快速进行模型选型与对比 面对市场上众多的大语言模型,开发者常常需要花费大量时间调研…...

115proxy-for-Kodi插件终极配置指南:三步实现云端视频原码播放

115proxy-for-Kodi插件终极配置指南:三步实现云端视频原码播放 【免费下载链接】115proxy-for-kodi 115原码播放服务Kodi插件 项目地址: https://gitcode.com/gh_mirrors/11/115proxy-for-kodi 还在为本地存储空间不足而无法观看115网盘的高清视频烦恼吗&…...

告别默认标题栏!手把手教你用Tauri 2.0打造高颜值自定义窗口(附完整CSS与Rust代码)

告别默认标题栏!手把手教你用Tauri 2.0打造高颜值自定义窗口(附完整CSS与Rust代码) 在桌面应用开发中,默认的系统标题栏往往成为视觉体验的"短板"。它们不仅风格陈旧,还破坏了应用设计的整体性。想象一下&a…...

使用Deno Deploy部署Azure OpenAI代理,无缝兼容开源ChatGPT客户端

1. 项目概述与核心价值 如果你正在使用一些开源的 ChatGPT 客户端,比如 ChatGPT-Next-Web、LobeChat 或者 OpenCat,但苦于 OpenAI 的 API 访问不稳定或者费用较高,那么将后端切换到微软 Azure OpenAI 服务是一个相当靠谱的选择。Azure 的服务…...

别再瞎折腾了!TMS320F28377D的TMU和FPU加速到底该选谁?实测数据告诉你答案

TMS320F28377D加速方案深度评测:TMU与FPU的性能博弈与工程实践 在嵌入式系统开发中,性能优化永远是工程师们绕不开的话题。当你的电机控制算法因为计算瓶颈无法达到预期采样频率,或是数字电源设计中的复杂变换运算拖慢了整个系统的响应速度时…...

10分钟打造专属AI歌手:Retrieval-based-Voice-Conversion-WebUI实战指南

10分钟打造专属AI歌手&#xff1a;Retrieval-based-Voice-Conversion-WebUI实战指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-ba…...

从微软Surface战略迷思看硬件定价、生态与市场定位

1. 项目概述&#xff1a;一场迟到的平板战争2012年&#xff0c;当微软在洛杉矶的发布会上&#xff0c;从一张看似普通的桌子下抽出那台名为“Surface”的平板电脑时&#xff0c;整个科技圈都屏住了呼吸。镁光灯闪烁&#xff0c;媒体头条争相报道&#xff0c;这似乎是微软对苹果…...

通过用量看板分析不同开发阶段的大模型API消耗模式

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过用量看板分析不同开发阶段的大模型API消耗模式 在软件开发项目中&#xff0c;大模型API的调用并非一成不变&#xff0c;其消耗…...

STM32按键消抖别再只用延时了!用CubeMX配置TIM3定时器实现10ms精准检测(附长短按完整代码)

STM32按键消抖的进阶实践&#xff1a;基于定时器的非阻塞解决方案 在嵌入式开发中&#xff0c;按键处理看似简单却暗藏玄机。许多开发者习惯使用HAL_Delay进行简单的延时消抖&#xff0c;这种方法虽然容易实现&#xff0c;却会带来CPU资源浪费、系统响应延迟等问题。特别是在需…...

用OpenCV和Python手把手实现Meanshift目标跟踪(附完整代码与避坑指南)

用OpenCV和Python手把手实现Meanshift目标跟踪&#xff08;附完整代码与避坑指南&#xff09; 在计算机视觉领域&#xff0c;目标跟踪是一个基础而重要的任务。想象一下这样的场景&#xff1a;你正在开发一个智能监控系统&#xff0c;需要持续追踪画面中的特定行人&#xff1b;…...

告别命令行!用C语言封装AD9361 IIO驱动,在Vitis里实现一键读写(附完整代码)

告别命令行&#xff01;用C语言封装AD9361 IIO驱动&#xff0c;在Vitis里实现一键读写&#xff08;附完整代码&#xff09; 在嵌入式射频系统开发中&#xff0c;AD9361作为一款高性能射频捷变收发器&#xff0c;其配置过程往往需要频繁操作Linux IIO接口。传统方式通过命令行手…...

FABulous嵌入式FPGA生成框架:从CSV定义到GDSII流片的完整指南

1. 项目概述与核心价值 如果你是一名硬件工程师&#xff0c;正在为一个SoC项目寻找一个可嵌入的、可定制的FPGA模块&#xff0c;或者你是一个研究者&#xff0c;希望探索不同工艺节点下FPGA架构的潜力&#xff0c;那么FABulous这个名字很可能已经出现在你的雷达上。简单来说&a…...

专业开发者完全指南:高效配置八大网盘直链下载助手的最佳实践

专业开发者完全指南&#xff1a;高效配置八大网盘直链下载助手的最佳实践 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘…...

3步搞定iOS微信聊天记录永久保存:WeChatExporter完整指南

3步搞定iOS微信聊天记录永久保存&#xff1a;WeChatExporter完整指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因手机丢失、系统升级或误删而懊悔丢失了珍…...

别再手动调Excel格式了!用EasyExcel 3.x模板填充,5分钟搞定复杂报表导出(附完整代码)

告别Excel格式噩梦&#xff1a;EasyExcel 3.x模板填充实战指南 每次看到产品经理发来的Excel报表需求&#xff0c;我的手指就会不自觉地颤抖——那些多级表头、动态统计行、跨列合并单元格&#xff0c;还有永远对不齐的日期格式。直到我发现EasyExcel的模板填充功能&#xff0c…...

大白话科普:GAIA、AgentBench 到底是啥?

目录 大白话科普&#xff1a;GAIA、AgentBench 到底是啥&#xff1f;&#xff08;附一键跑通操作手册&#xff09; 一、先一句话讲明白 二、GAIA 完整操作手册&#xff08;一键跑测评&#xff09; 1. 是什么&#xff08;极简版&#xff09; 2. 环境准备 3. 运行测评&…...

Fast-GitHub终极指南:三步解决国内GitHub访问慢的完整方案

Fast-GitHub终极指南&#xff1a;三步解决国内GitHub访问慢的完整方案 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是否曾经因…...

告别SGM的漫长等待:用ELAS算法1秒搞定百万像素双目匹配(附C++/OpenCV实战代码)

百万像素双目匹配的实时革命&#xff1a;ELAS算法深度解析与工程实践 双目立体视觉在机器人导航、自动驾驶和工业检测等领域扮演着关键角色&#xff0c;但传统方法如SGM&#xff08;Semi-Global Matching&#xff09;在百万像素级图像处理时往往面临严重的性能瓶颈。当我在开发…...

MyBatis的工作流程及源码连贯阅读方式

MyBatis 的工作流程可概括为以下核心步骤&#xff1a;加载配置 读取全局配置文件&#xff08;mybatis-config.xml&#xff09;&#xff0c;解析数据源、事务管理器、映射文件&#xff08;mapper.xml&#xff09;或注解配置。创建 SqlSessionFactory 使用配置信息构建 SqlSessio…...

保姆级教程:给你的Oh My Zsh装上这4个插件,终端效率直接翻倍(附避坑指南)

终极效率指南&#xff1a;Oh My Zsh四大插件深度配置与实战技巧 如果你已经用上了Oh My Zsh但总觉得还能更高效&#xff0c;这篇文章就是为你准备的。想象一下&#xff1a;输入命令时自动补全、语法错误即时高亮显示、历史命令智能推荐——这些功能不是未来&#xff0c;而是今天…...

别再死记硬背五层需求了!用马斯洛理论设计产品,这3个实战案例让你秒懂

产品设计的底层密码&#xff1a;用马斯洛需求理论打造用户无法拒绝的体验 深夜两点&#xff0c;某社交App的产品经理盯着用户留存曲线发愁——明明新增功能增加了30%&#xff0c;次日留存率却下降了5个百分点。这场景你是否熟悉&#xff1f;当我们沉迷于功能堆砌和界面美化时&a…...

如何精准诊断并解决机械键盘连击问题:Keyboard Chatter Blocker深度配置指南

如何精准诊断并解决机械键盘连击问题&#xff1a;Keyboard Chatter Blocker深度配置指南 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker …...