在现代工业自动化领域,EtherCAT(Ethernet for Control Automation Technology)以其高速、实时和开放的特性,成为现场总线通信的主流协议之一。EtherCAT网络中,主站(Master)负责调度和管理,而从站(Slave)则连接各类传感器、执行器等设备。如何高效、低成本地实现EtherCAT从站,是嵌入式开发者关注的重点。SOES(Simple Open EtherCAT Slave)正是为此而生的开源协议栈解决方案。


目录

    • 一、SOES开源项目简介
    • 二、SOES源码结构详解
    • 三、SOES项目与核心知识点的对应关系
    • 四、SOES与EtherCAT从站芯片的关系
    • 五、编译与使用流程(参考 soes/doc/tutorial.txt)
    • 六、典型开发流程
    • 七、 SOES 从站开发案例
      • 1、开发概述
      • 2、启动代码示例
      • 3、配置流程
        • 3.1. 硬件初始化
        • 3.2. 软件初始化
        • 3.3. 应用循环
      • 4、应用层处理(DIG_process)
        • 4.1. 输出处理
        • 4.2. 输入处理
      • 5、应用数据与过程数据映射
        • SII-EEPROM
        • ESI 文件
        • 对象字典(Object Dictionary)
      • 6、SDO 参数与对象处理
      • 7、开发案例总结
    • 八、总结
    • 其他资源
      • 1. 直接使用EtherCAT协议开发从站的难点
      • 2. SOES的作用和优势
      • (1)协议栈封装
      • (2)兼容性和可靠性
      • (3)移植性和扩展性
      • (4)开发效率高
      • 3. 总结
    • 1. **开源协议栈**
      • (1)**EtherLab IgH EtherCAT Slave Stack**
      • (2)**OpenEtherCAT Slave**
    • 2. **商业协议栈**
      • (1)**Beckhoff EtherCAT Slave Stack Code (SSC)**
      • (2)**acontis EC-Master/EC-Slave**
      • (3)**Port GmbH EtherCAT Slave Stack**
    • 3. **芯片厂商自带协议栈**
    • 4. **FPGA/软核实现**
    • 5. **对比与选择建议**

一、SOES开源项目简介

SOES(Simple Open EtherCAT Slave)是一个面向嵌入式系统的开源EtherCAT从站协议栈。它以C语言实现,代码精简、结构清晰,适合资源受限的MCU/SoC平台。SOES的目标是为开发者提供一个易于移植、易于理解的EtherCAT从站实现,支持工业现场的高实时性和高可靠性需求。

开源项目地址:https://github.com/OpenEtherCATsociety/SOES

主要特性:

  • 支持EtherCAT协议的核心功能,包括COE(CANopen over EtherCAT)、PDO、SDO、状态机管理、同步机制等。
  • 代码高度模块化,便于在不同硬件平台上移植和扩展。
  • 提供多种硬件平台的参考实现(如树莓派、XMC4300、TI AM335x等)。
  • 适合学习、教学、产品开发和二次定制。

二、SOES源码结构详解

SOES项目结构清晰,主要目录和文件说明如下:

SOES-master/
├── applications/         # 各硬件平台的示例工程
│   ├── linux_lan9252demo/
│   ├── raspberry_lan9252demo/
│   ├── rtl_lwip_eoe/
│   ├── rtl_slavedemo/
│   ├── rtl_xmc4_dynpdo/
│   ├── tiesc_am335x/
│   ├── tiesc_k2gice/
│   └── xmc4300_slavedemo/
├── cmake/                # CMake构建脚本及工具链
├── drivers/              # EtherCAT芯片驱动(如LAN9252)
├── soes/                 # 协议栈核心代码
│   ├── hal/              # 硬件抽象层(不同平台适配)
│   ├── doc/              # 文档(含tutorial.txt)
│   ├── ecat_slv.c/h      # 协议栈主控与状态机
│   ├── esc.c/h           # EtherCAT核心功能
│   ├── esc_coe.c/h       # COE协议支持
│   ├── esc_eep.c/h       # EEPROM支持
│   ├── esc_eoe.c/h       # EOE协议支持
│   ├── esc_foe.c/h       # FOE协议支持
│   └── ...               # 其他协议与工具
├── README.md             # 项目说明
└── version.h.in

三、SOES项目与核心知识点的对应关系

  1. EtherCAT协议栈实现

    • 协议栈的核心代码主要在 soes/ 目录下,如 ecat_slv.cesc.cesc_coe.c 等文件,分别实现了EtherCAT协议的各个层级和COE(CANopen over EtherCAT)等扩展协议。
  2. 从站设备初始化

    • 各平台的初始化代码在 applications/ 下的不同子目录(如 main.c),以及 soes/hal/ 目录下的硬件抽象层(HAL)代码(如 esc_hw.c),负责初始化硬件和协议栈。
  3. 数据处理

    • 数据的收发和处理主要在 ecat_slv.c 和各平台的 main.c 文件中实现,负责与主站的数据交互。
  4. PDO映射

    • PDO的定义和映射通常在 objectlist.cslave_objectlist.c 等文件中实现,这些文件定义了从站的过程数据对象结构。
  5. SDO通信

    • SDO相关的处理在 esc_coe.c 文件中实现,支持主站对从站参数的读写和配置。
  6. 同步机制

    • 同步相关的代码分布在 ecat_slv.cesc.c,支持分布式时钟(DC)和主站同步命令的响应。
  7. 状态机管理

    • 从站状态机的实现主要在 ecat_slv.c,负责从站的各个状态(如INIT、PRE-OP、SAFE-OP、OP)的切换和管理。
  8. 错误处理机制

    • 错误检测和处理逻辑分布在协议栈各层代码中,如 esc.cecat_slv.c,并通过EtherCAT标准的错误寄存器和报警机制上报主站。
  9. 配置与诊断功能

    • 相关功能在 esc_coe.cesc_eep.c 等文件中实现,支持主站对从站的配置和诊断。
  10. 代码的可移植性和模块化

    • SOES项目结构清晰,协议栈与硬件平台解耦,便于在不同MCU/SoC平台上移植。hal/ 目录下为不同平台提供了硬件适配层。

知识点SOES源码位置/实现说明
EtherCAT协议栈soes/ecat_slv.c, soes/esc.c, soes/esc_coe.c
从站设备初始化applications/xxx/main.csoes/hal/下各平台代码
数据处理soes/ecat_slv.c,各平台main.c
PDO映射applications/xxx/objectlist.cslave_objectlist.c
SDO通信soes/esc_coe.c
同步机制soes/ecat_slv.c, soes/esc.c
状态机管理soes/ecat_slv.c
错误处理机制soes/esc.c, soes/ecat_slv.c
配置与诊断功能soes/esc_coe.c, soes/esc_eep.c
可移植性和模块化soes/hal/,各平台applications/

四、SOES与EtherCAT从站芯片的关系

虽然SOES是软实现的协议栈,但在实际应用中,通常仍需配合专用的EtherCAT从站芯片(如LAN9252、ET1100等)或具备EtherCAT功能的硬件外设

  • 物理层与MAC层的实时性要求:EtherCAT对以太网帧的转发延迟和时序有极高要求,专用芯片可在硬件层面实现帧的级联转发,保证网络的实时性和确定性。
  • SOES的定位:SOES主要实现协议栈的上层逻辑(如对象字典、数据处理、状态机等),而底层的帧收发、转发、同步等高实时性操作,依赖硬件实现。SOES通过硬件抽象层(HAL)与这些芯片对接。
  • 软实现的局限性:理论上可以用MCU的以太网外设+软件模拟EtherCAT底层,但很难达到工业级的实时性和兼容性。只有极少数高性能MCU/FPGA能做到全软实现,但通常也会有专门的EtherCAT硬件模块辅助。

五、编译与使用流程(参考 soes/doc/tutorial.txt)

SOES项目的编译和使用流程大致如下:

  1. 准备开发环境

    • 安装CMake、GCC/ARM-GCC等交叉编译工具链。
    • 准备目标硬件开发板(如树莓派、XMC4300、AM335x等)。
  2. 选择目标平台

    • 进入applications/目录,选择对应硬件平台的子目录(如linux_lan9252demo)。
  3. 配置与编译

    • 使用CMake生成Makefile或工程文件。例如:
      cd applications/linux_lan9252demo
      mkdir build && cd build
      cmake ..
      make
      
    • 具体编译参数和平台相关配置可参考CMakeLists.txtREADME.md
  4. 烧录与运行

    • 将编译生成的二进制文件烧录到目标硬件。
    • 连接EtherCAT主站(如TwinCAT、EtherLab等)进行网络测试。
  5. 调试与扩展

    • 可根据实际需求修改objectlist.c等文件,调整PDO/SDO映射和对象字典。
    • 如需适配新硬件,需在soes/hal/下添加对应的硬件抽象层代码。

详细的编译和移植说明可参考 soes/doc/tutorial.txt 文件。


六、典型开发流程

  • 选择目标硬件平台,适配HAL层代码。
  • 配置对象字典(PDO/SDO)。
  • 编译并烧录到目标设备。
  • 使用EtherCAT主站软件进行测试和调试。

七、 SOES 从站开发案例

1、开发概述

SOES 是一个库,为微控制器用户应用提供访问 EtherCAT 现场总线通信环境的能力,包括:

  • EtherCAT 状态机
  • 邮箱接口
  • 协议支持
    • CoE(CANopen over EtherCAT)
    • FoE(File over EtherCAT)及引导模板

邮箱和协议的支持是典型的应用场景,通常需要从站协议栈来控制 EtherCAT 的应用层。PDI(Process Data Interface,过程数据接口)通常是 SPI 或其他微控制器接口。

本教程将展示如何快速上手 SOES,并设计一个简单的从站应用。所有代码均为本地应用或全局变量,便于根据实际需求进行优化和调整。

目标应用示例:

  • 输入 40bit
    • 一个按钮(8bit)
    • 一个编码器值(32bit)
  • 输出 8bit
    • LED(8bit)
  • 参数
    • 编码器设置
  • 从站命令
    • 复位计数器

2、启动代码示例

main 函数的作用是启动两个任务:一个执行 SOES 协议栈,一个控制错误 LED。部分 ESC(EtherCAT Slave Controller)芯片自带 RUN/ERROR LED 引脚,否则可由微控制器控制。

int main (void)
{rprintp ("SOES (Simple Open EtherCAT Slave)\nsoes test\n");// 启动 led_error 任务task_spawn ("led_error", led_error, 15, 512, NULL);// 启动 soes 任务task_spawn ("soes", soes, 9, 1024, NULL);return (0);
}

3、配置流程

soes 函数是 EtherCAT 从站的主入口,可分为三部分:硬件初始化、软件初始化、应用循环。

3.1. 硬件初始化
  • esc_reset:如无物理 EEPROM,用于 ESC 复位(应用层本地实现)。
  • ESC_init:初始化 SPI 通信或类似接口。
  • 等待 ESC 启动,检测 SPI 是否正常,查询 ESC 寄存器 DL 状态,确认 EEPROM 加载和 PDI 正常。
void soes (void *arg)
{TXPDOsize = SM3_sml = sizeTXPDO ();RXPDOsize = SM2_sml = sizeRXPDO ();esc_reset ();ESC_init ((void *)spi_name);task_delay (tick_from_ms (200));// 等待 ESC 启动while ((ESCvar.DLstatus & 0x0001) == 0){ESC_read (ESCREG_DLSTATUS, (void *) &ESCvar.DLstatus,sizeof (ESCvar.DLstatus));ESCvar.DLstatus = etohs (ESCvar.DLstatus);}// 复位 ESC 到初始化状态ESC_ALstatus (ESCinit);...
}
3.2. 软件初始化
  • 复位从站到 Init 状态,清除错误,停止应用层(禁用 SyncManager,阻止数据交换)。
void soes (void *arg)
{
...while ((ESCvar.DLstatus & 0x0001) == 0){ESC_read (ESCREG_DLSTATUS, (void *) &ESCvar.DLstatus,sizeof (ESCvar.DLstatus));ESCvar.DLstatus = etohs (ESCvar.DLstatus);}// 复位 ESC 到初始化状态ESC_ALstatus (ESCinit);ESC_ALerror (ALERR_NONE);ESC_stopmbx ();ESC_stopinput ();ESC_stopoutput ();// 应用主循环while (1)...
}
3.3. 应用循环
  • 处理 ALevent(状态变化、SyncManager 变化等)
  • 处理 ESC 状态机
  • 处理邮箱及协议(如 CoE、FoE)
  • 调用应用层处理函数(如 DIG_process)
void soes (void *arg)
{
...while (1){if((ESCvar.ALstatus & 0x0f) == ESCinit){txpdomap = DEFAULTTXPDOMAP;rxpdomap = DEFAULTRXPDOMAP;txpdoitems = DEFAULTTXPDOITEMS;rxpdoitems = DEFAULTTXPDOITEMS;}ESC_read (ESCREG_LOCALTIME, (void *) &ESCvar.Time, sizeof (ESCvar.Time));ESCvar.Time = etohl (ESCvar.Time);ESC_state ();if (ESC_mbxprocess ()){ESC_coeprocess ();ESC_foeprocess ();ESC_xoeprocess ();}DIG_process ();};
}

4、应用层处理(DIG_process)

4.1. 输出处理
  • 判断当前是否处于支持输出的状态(如 OP 状态)。
  • 若在 OP 状态,从 SyncManager2 读取输出 PDO 数据,刷新本地变量(如 LED 状态),并写入实际硬件(如 GPIO)。
  • 包含看门狗机制,超时则关闭输出并切换到安全状态。
void RXPDO_update (void)
{ESC_read (SM2_sma, &Wb.LED, RXPDOsize);
}void DIG_process (void)
{if (App.state & APPSTATE_OUTPUT){if (ESCvar.ALevent & ESCREG_ALEVENT_SM2)  // SM2 触发{RXPDO_update ();reset_wd ();gpio_set(GPIO_LED, Wb.LED & BIT(0));}if (!wd_cnt){ESC_stopoutput ();// 看门狗,输出无效ESC_ALerror (ALERR_WATCHDOG);// 切换到安全操作状态并设置错误位ESC_ALstatus (ESCsafeop | ESCerror);wd_trigger = 1;}}else{reset_wd ();}
...
}
4.2. 输入处理
  • 在安全操作状态下持续更新输入。
  • 读取用户应用数据(如 GPIO),写入本地 PDO 变量,再通过 SyncManager3 写入 ESC RAM,供主站读取。
void TXPDO_update (void)
{ESC_write (SM3_sma, &Rb.button, TXPDOsize);
}void DIG_process (void)
{
...Rb.button = gpio_get(GPIO_WAKEUP);Cb.reset_counter++;Rb.encoder =  Cb.reset_counter;TXPDO_update ();
}

5、应用数据与过程数据映射

要通过 EtherCAT 过程数据传递应用数据,需要用三种对象来描述数据:

  • ESI 文件(EtherCAT Slave Information,XML)
  • SII-EEPROM(Slave Information Interface,硬件存储)
  • CoE 对象字典(Object Dictionary)

ESI 和 SII-EEPROM 是必需的,CoE 对象字典用于描述复杂从站。

SII-EEPROM
  • 存储设备标识、组、设备描述、SyncManager、Mailbox、DC(分布式时钟)、EEPROM 配置等信息。
ESI 文件
  • XML 格式,描述从站的厂商、设备、组、SyncManager、Mailbox、CoE 支持、DC 支持等。
对象字典(Object Dictionary)
  • 遵循 CANopen DS301 范围,分区明确(如输入区、输出区、配置区等)。
  • RxPDO、TxPDO 分别映射到 0x1600-0x17FF、0x1A00-0x1BFF。
  • 通过对象字典将本地变量与 EtherCAT PDO/SDO 映射关联。

示例:

// objectlist.h
FLASHSTORE _objd SDO7000[] =
{ {0x00, DTYPE_UNSIGNED8, 8, ATYPE_R, &acNameNOE[0], 0x01, nil},{0x01, DTYPE_UNSIGNED8, 8, ATYPE_RW, &acName7000_01[0], 0, &(Wb.LED)}
};typedef struct
{uint8 LED;
} _Wbuffer;

6、SDO 参数与对象处理

  • SDO 参数可异步读写,支持参数镜像、写入钩子等功能。
  • 通过 ESC_objecthandler 钩子函数可在 SDO 下载时执行自定义逻辑。
void ESC_objecthandler (uint16 index, uint8 subindex)
{switch (index){case 0x7100:{switch (subindex){case 0x01:{encoder_scale_mirror = encoder_scale;break;}}break;}}
}

7、开发案例总结

本案例详细介绍了 SOES 的初始化、主循环、输入输出处理、对象字典与过程数据映射、SDO 参数处理等关键流程。开发者可根据实际需求,灵活调整和扩展应用层逻辑,实现自定义的 EtherCAT 从站设备。

建议:

  • 结合本教程和源码,快速上手 SOES 项目。
  • 参考 ETG 官方文档,深入理解 EtherCAT 协议和对象字典设计。
  • 根据硬件平台适配 HAL 层,完善 ESI/SII/OD 配置,实现高效可靠的工业现场通信。

八、总结

SOES作为软实现的EtherCAT从站协议栈,极大降低了嵌入式设备接入EtherCAT网络的门槛。它专注于协议和应用层的实现,配合专用的EtherCAT从站芯片或具备EtherCAT功能的硬件外设,能够满足工业现场对实时性和可靠性的严苛要求。

对于开发者而言,SOES不仅是学习EtherCAT协议的绝佳范例,也是开发自定义EtherCAT从站设备的有力工具。

建议开发者结合官方文档、项目源码和soes/doc/tutorial.txt,快速上手并根据实际需求进行二次开发。


如需进一步了解SOES的移植、与具体芯片的对接方法,或协议栈的详细实现,欢迎留言交流!

其他资源

你的问题非常好,很多初学者在接触EtherCAT从站开发时都会有类似疑问。下面我用通俗的语言详细解答:


1. 直接使用EtherCAT协议开发从站的难点

EtherCAT协议本身是一套非常复杂且严格的工业以太网协议,它不仅仅是普通的以太网通信,还包括了:

  • 实时性极高的帧转发机制(帧级联、极低延迟)
  • 多种同步机制(分布式时钟、同步管理器等)
  • 多层协议支持(如CoE、FoE、SDO、PDO、状态机等)
  • 严格的状态机和错误处理
  • 邮箱机制、对象字典、EEPROM/SII、ESI文件等

如果你“直接”开发EtherCAT从站协议栈,意味着你要从零实现上述所有功能,这对个人开发者或小团队来说,几乎是不现实的,主要原因有:

  • 协议复杂度高:EtherCAT协议文档庞大,细节繁多,容易出错。
  • 兼容性要求高:工业主站(如TwinCAT、Codesys等)对从站的兼容性要求极高,自己写的代码很难一次通过主站和官方一致性测试(CTT)。
  • 实时性和可靠性要求高:工业现场对实时性和稳定性要求极高,自己开发难以保证。
  • 开发周期长、维护难度大:从零开发协议栈,周期长,后续维护和升级也很困难。

2. SOES的作用和优势

SOES(Simple Open EtherCAT Slave)就是为了解决上述难题而诞生的。它的作用和优势体现在:

(1)协议栈封装

  • SOES已经实现了EtherCAT从站协议的核心功能,包括状态机、邮箱、CoE/SDO/PDO、同步、错误处理等。
  • 你只需要关注应用层的数据处理和硬件适配,不用关心底层复杂的协议细节。

(2)兼容性和可靠性

  • SOES经过大量实际项目和主站测试,兼容性和稳定性有保障。
  • 只要按照SOES的接口和流程开发,基本可以顺利通过主站的识别和一致性测试。

(3)移植性和扩展性

  • SOES结构清晰,模块化设计,便于在不同MCU/SoC/平台上移植。
  • 你可以很方便地扩展自己的对象字典、PDO/SDO、应用逻辑等。

(4)开发效率高

  • 你只需专注于“我的设备有哪些输入输出、参数、命令”,而不用关心EtherCAT协议的底层实现。
  • 大大缩短开发周期,降低开发和维护成本。

3. 总结

  • 直接开发EtherCAT从站协议栈,难度极高、风险极大、周期极长,且很难保证兼容性和稳定性。
  • SOES等开源协议栈,为开发者屏蔽了底层复杂性,让你专注于应用和硬件,极大提升开发效率和产品质量。

所以,SOES不是可有可无的“工具”,而是开发EtherCAT从站设备的“基础设施”!


当然,除了SOES(Simple Open EtherCAT Slave)之外,市面上还有多种EtherCAT从站协议栈可供选择,涵盖开源、闭源、商业授权等多种类型。下面为你详细介绍几种常见的替代方案:


1. 开源协议栈

(1)EtherLab IgH EtherCAT Slave Stack

  • 简介:由德国汉诺威工业大学(IgH)主导开发,原本以主站(Master)协议栈著称,也有从站(Slave)实现。
  • 特点:支持Linux平台,代码结构较为复杂,适合有一定底层开发经验的用户。
  • 网址:EtherLab EtherCAT

(2)OpenEtherCAT Slave

  • 简介:由Beckhoff等公司推动的开源项目,部分代码可用,但功能和文档不如SOES完善。
  • 特点:适合学习和实验,工业应用需谨慎。

2. 商业协议栈

(1)Beckhoff EtherCAT Slave Stack Code (SSC)

  • 简介:由EtherCAT协议的发明者Beckhoff官方提供,功能最全、兼容性最好。
  • 特点:支持所有EtherCAT协议特性,文档齐全,广泛应用于工业产品。
  • 授权:需向Beckhoff申请授权(免费/付费视具体用途)。
  • 网址:Beckhoff EtherCAT SSC

(2)acontis EC-Master/EC-Slave

  • 简介:德国acontis公司出品,全球知名的EtherCAT协议栈供应商。
  • 特点:支持多平台,性能优异,技术支持完善。
  • 授权:商业授权,适合企业级产品。
  • 网址:acontis EC-Slave

(3)Port GmbH EtherCAT Slave Stack

  • 简介:德国Port公司出品,专注于工业通信协议栈。
  • 特点:支持多种MCU/FPGA,提供定制服务。
  • 授权:商业授权。
  • 网址:Port EtherCAT

3. 芯片厂商自带协议栈

许多EtherCAT从站芯片或SoC厂商会提供官方协议栈或参考实现,例如:

  • Microchip LAN9252/9253:自带参考固件和协议栈。
  • TI(德州仪器)PRU-ICSS EtherCAT Slave:TI官方提供完整的协议栈和例程。
  • Infineon/XMC4300/4800:自带EtherCAT从站固件和协议栈。

这些协议栈通常针对自家硬件高度优化,适合特定芯片平台。


4. FPGA/软核实现

  • Altera/Intel、Xilinx等FPGA厂商:提供EtherCAT从站IP核,配合软硬件协议栈使用,适合高性能、定制化场景。

5. 对比与选择建议

  • 学习/实验/轻量级应用:SOES、EtherLab等开源协议栈。
  • 工业产品/高可靠性/全功能需求:Beckhoff SSC、acontis、Port等商业协议栈。
  • 特定芯片平台:优先考虑芯片厂商官方协议栈。
  • 高性能/定制化:FPGA+IP核+协议栈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89321.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89321.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/89321.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[simdjson] 填充字符串 | `document` 对象 | on-demand 模式

第二章:填充字符串 在第一章解析器中,我们学习了simdjson::dom::parser和simdjson::ondemand::parser作为可复用内存的JSON解析工具。 本章将深入解析JSON数据输入的核心要求——“填充字符串”。 为何需要填充? simdjson通过SIMD&#x…

扭蛋机小程序开发:开启线上娱乐新风尚

在当今数字化浪潮席卷的时代,娱乐方式正经历着前所未有的变革。传统的扭蛋机,那充满惊喜与期待的实体装置,曾是无数人童年回忆中的欢乐源泉。如今,随着科技的飞速发展,扭蛋机小程序开发应运而生,将这份经典…

【React Native】布局和 Stack 、Slot

布局和Stack 点击链接后,页面切换时最好是有动画效果。页面一般都有头部,里面有页面的标题之类的东西。 在app目录里,新建一个_layout.js文件,这是项目的布局文件。 这个名字是固定的,前面必须有一个_ 。 布局的意…

3C电子产品蓝光三维扫描检测方案-中科米堆CASAIM

随着3C电子产品向轻薄化、精密化方向发展,传统的二维检测技术已难以满足现代制造业对产品精度的高标准要求。特别是在智能手机、平板电脑等消费电子领域,微小的结构偏差都可能导致产品组装困难或性能下降。当前行业内普遍面临检测效率低、数据采集不完整…

Docker 镜像原理

Union FS(联合文件系统) Union File System 是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。UnionFS 是一种为 Linux,FreeBSD 和 NetBSD 操作系统…

为什么IoTDB成为物联网场景的技术优选?

在物联网、工业监控等领域,时序数据的高效管理成为技术架构设计的关键环节。时序数据库作为专门处理带时间戳数据的系统,其选型需兼顾性能、兼容性与场景适配性。本文将从技术角度解析 IoTDB 的设计理念与实践方法,为时序数据库选型提供参考。…

js中的微任务和宏任务的理解

在JavaScript中,微任务(Microtask)和宏任务(Macrotask)是异步任务执行机制的重要组成部分,它们共同构成了JavaScript事件循环(Event Loop)的核心逻辑。理解这两个概念对于编写高性能…

Spring-AI系列-AI模型-Model

原文-知识库,欢迎大家评论互动 AI Model API Portable ModelAPI across AI providers for Chat, Text to Image, Audio Transcription, Text to Speech, and Embedding models. Both synchronous and stream API options are supported. Dropping down to access mo…

MySQL查询今天、昨天、上周、近30天、去年等的数据的方法

目录 常用的MySQL查询今天、昨天、上周、近30天、去年等数据的方法 0、Sql server中DateDiff()用法 1、MySQL的DATE_SUB()函数 定义和用法 语法 实例 2、MySQL的TO_DAYS(date) 3、MySQL的DATE() 函数 定义和用法 4、MySQL NOW() 函数 定义和用法 语法 实例 例子 …

Linux —— B / 基础开发工具

一、软件包管理器1.1什么是软件包1.2 Linux软件生态1.3 yum具体操作1.3.1 查看软件包1.3.2 安装软件1.3.3 卸载软件1.3.4 注意事项1.4 安装源二、编辑器Vim2-1 Linux编辑器-vim使用2-2 vim的基本概念2-3 vim的基本操作2-4 vim正常模式命令集2-5 vim末行模式命令集2-6 vim操作总…

SQL,在join中,on和where的区别

0.结论 两个表在,join时,首先做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤。 先on,再join,再…

SD-WAN在储能网络中的应用,传统方案如何借力智能化升级?(附网络架构图)

一、储能网络的建设挑战在储能项目中,网络系统通常需要实现以下目标:高可靠性:实时采集和传输储能设备状态数据,链路中断可能导致系统故障。灵活扩展:分布式站点部署广泛,传统网络扩展需重新铺设线路&#…

Oracle11.2.0.4 RAC迁移升级Oracle19.3 RAC

问题描述 填写问题的基础信息。 系统名称 Oracle11.2.0.4迁移升级Oracle19.3 IP地址 操作系统 Centos7.5 数据库 Oracle11.2.0.4迁移升级Oracle19.3 症状表现 问题的症状表现如下 需要将单机的Oracle11.2.0.4环境升级到Oracle19.3.0RAC环境,采用迁移升级的…

SAP-ABAP:SAP的‘cl_http_utility=>escape_url‘对URL进行安全编码方法详解

SAP的’cl_http_utility>escape_url’对URL进行安全编码方法详解 核心作用:对 URL 进行安全编码,将特殊字符转换为 %XX 格式,确保符合 HTTP 传输规范。1. 功能与作用 ✅ URL 安全编码 将非安全字符转换为十六进制 ASCII 码(%XX…

基于HarmonyOS的智能灯光控制系统设计:从定时触发到动作联动全流程实战

摘要 随着智能家居的快速普及,人们对居住环境的智能化需求越来越高,其中智能灯光控制是最基础、也是最常用的功能之一。从最初的远程控制发展到如今能“感知环境、自动响应”的智能灯光系统,背后依赖的是强大的系统联动能力。鸿蒙系统作为面向…

ROS1/Linux——linux虚拟机主ip地址:网络信息不可用

ROS1/Linux——linux虚拟机主ip地址:网络信息不可用 文章目录ROS1/Linux——linux虚拟机主ip地址:网络信息不可用参考亿点链接问题描述最终解决方案参考亿点链接 Unable to fetch some archives, maybe run apt-get update or try with –fix-missingli…

ssl相关命令生成证书

当前环境 OpenSSL 3.5.1 1 Jul 2025 (Library: OpenSSL 3.5.1 1 Jul 2025) GmSSL 3.1.2 Dev 本地gmssl命令 #生成证书公私钥对 gmssl sm2keygen -pass 1234 -out sm2.key -pubout sm2pub.pem #使用certgen命令生成自签名证书cert.crt gmssl certgen -C CN -ST Beijing -L Ha…

TensorFlow深度学习实战——DCGAN详解与实现

TensorFlow深度学习实战——DCGAN详解与实现0. 前言1. DCGAN 架构2. 构建 DCGAN 生成手写数字图像2.1 生成器与判别器架构2.2 构建 DCGAN相关链接0. 前言 深度卷积生成对抗网络 (Deep Convolutional Generative Adversarial Network, DCGAN) 是一种基于生成对抗网络 (Generati…

SpringBoot 使用MyBatisPlus

引入依赖<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.3.0</version> </dependency>写一个interface 继承basemapMapper public in…

Git 中如何查看提交历史?常用命令有哪些?

回答重点在 Git 中&#xff0c;我们可以使用 git log 命令来查看提交历史。这个命令会列出所有的提交记录&#xff0c;显示每个提交的哈希值、作者信息、提交时间和提交信息。常用的 git log 命令及其选项有&#xff1a;1&#xff09; git log &#xff1a;显示完整的提交历史。…