SOES:軟實現EtherCAT從站協議棧項目介紹及從站開發案例

在現代工業自動化領域,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;顯示完整的提交歷史。…