在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TwinCAT3 EtherCAT抓包 | 技術集結

RT-Thread官方賬號 ? 2025-05-15 18:04 ? 次閱讀

在使用TwinCAT測試EtherCAT EOE功能時,我們會發現正常是無法使用Wireshark去進行網絡抓包抓取EtherCAT報文的,今天這篇文章就帶大家來上手EtherCAT抓包方式。


準備環境

硬件環境:

EtherKit開發板

網線一根

Type-C USB線一根

軟件環境

TwinCAT3

RT-Thread studio

wireshark


EtherCAT EOE工程下載

首先 RT-Thread studio 安裝 EtherKit SDK 包,然后新建一個示例工程:etherkit_ethercat_eoe,編譯并下載程序;

03bb061c-3174-11f0-8605-92fbcf53809c.png

電腦一端網線連接至 EtherKit 的 ETH0,同時修改以太網適配器IP保持與從站IP在同一網段下:

03cfd2e0-3174-11f0-8605-92fbcf53809c.png

觀察開發板串口狀態,此時可以看到 eoe app 已經正常運行了:

03e13cc4-3174-11f0-8605-92fbcf53809c.png


TwinCAT3 模擬EtherCAT主站啟動

在啟動 TwinCAT3過程中還需要配置ESI文件及安裝Twin CAT驅動,可參考EtherKit用戶手冊,此處不再詳述;

接下來我們主站掃描從站設備,并激活該從站設備:

03f38460-3174-11f0-8605-92fbcf53809c.png

激活從站設備后可以看到 EtherKit 開發板板載以太網指示燈正常工作,同時默認從站DC模式為 SM-Synchron :

04010b94-3174-11f0-8605-92fbcf53809c.png


TwinCAT3配置DC-Synchron

首先我們需要開啟 wireshark 抓包支持,右鍵點擊 Device,在 Adapter 中勾選 Promiscuous Mode(use with Wireshark only)來開啟混雜模式;

040ea330-3174-11f0-8605-92fbcf53809c.png

接著我們需要先切換DC模式,由默認的 SM-Synchron 模式切換為 DC-Synchron;

04010b94-3174-11f0-8605-92fbcf53809c.png

接著我們點擊上方導航欄 TwinCAT->Restart TwinCAT(config Mode);

042f00bc-3174-11f0-8605-92fbcf53809c.png

提示 Restart TwinCAT system in config Mode,點擊確定;

0440be06-3174-11f0-8605-92fbcf53809c.png

shell再次提示 Load IO設備,點擊確定;

044fb99c-3174-11f0-8605-92fbcf53809c.png

然后點擊激活;

045fd926-3174-11f0-8605-92fbcf53809c.png

接著我們再切換回 SM-Synchron,并打開wireshark,選擇對應的網卡設備,此時就可以看到ECAT報文了;

049c9bea-3174-11f0-8605-92fbcf53809c.png


EtherCAT數據幀結構

04e5e0c0-3174-11f0-8605-92fbcf53809c.png

EtherCAT數據直接使用以太網數據幀進行傳輸,幀類型為0x88A4。一個EtherCAT數據包括2個字節的數據頭和44~1498字節的數據,其中數據區由一個或多個EtherCAT子報文組成,每個子報文對應獨立的設備或從站存儲區域;

EtherCAT幀結構定義

0522e150-3174-11f0-8605-92fbcf53809c.png

EtherCAT幀結構定義

每個EtherCAT子報文包括子報文頭、數據域和相應的工作計數器(WKC,Working Counter);WKC記錄了子報文被從站操作的次數,主站為每個通信服務子報文設置預期的WKC,發送子報文中的工作計數器初值為0,子報文被從站正確處理后,工作計數器將增加一個增量,主站比較返回子報文中的WKC和預期WKC來判斷子報文是否被正確處理;WKC由ESC在處理數據幀的同時進行處理,不同的通信服務對WKC的增加方式不同;

EtherCAT子報文結構定義

054ebe1a-3174-11f0-8605-92fbcf53809c.png


EtherCAT報文分析

1.請求報文

首先我們設置過濾規則:

ecat.cmd==BRD && ecat.ado==0x130

057f80d6-3174-11f0-8605-92fbcf53809c.png

我們隨機抓取一條BRD報文,主站向從站發送的偏移地址為 0x130 的報文,表示讀取從站特定寄存器(如設備標識符、狀態字等)的值。此類報文在系統初始化或狀態監測中常被使用。

2.應答報文

從站啟動過程:主站依次向偏移地址 0x120 發送 1、2、4、8 命令,控制從站依次進入初始化(INIT)、預操作(PRE-OP)、安全模式(SAFE-OP)和操作模式(OP):

ecat.ado==0x120 && (ecat.adp==0x03e9 ||ecat.adp==0xffff)

其中 ecat.adp == 0xffff 表示廣播方式,主站向所有從站發送命令;而 ecat.adp==0x03e9(例如)表示特定從站地址(可根據實際地址修改)發送控制命令。

3.控制命令與EOE報文過濾

我們使用如下過濾規則來抓取EtherCAT控制命令與以太網封裝(EOE, Ethernet over EtherCAT)相關的報文:

(ecat.ado==0x120 || ecat_mailbox.eoe) && (ecat.adp==0x03e9 || ecat.adp==0xffff)

解析說明

ecat.ado==0x120:表示抓取訪問地址偏移 0x120 的寄存器命令,此為 從站狀態控制寄存器,主站通過它向從站發送模式切換指令(如INIT、PRE-OP、SAFE-OP、OP);

ecat_mailbox.eoe:表示抓取所有 EOE協議封裝的以太網數據,EOE允許通過EtherCAT傳輸標準以太網幀(如TCP/IP、UDP);

ecat.adp==0x03e9:指定從站地址為 0x03e9(十進制1001),用于單個從站點對點通信;

ecat.adp==0xffff:表示廣播命令,主站向所有從站同時發起操作。

應用場景

此過濾規則可用于同時監控:

主站對某個從站(或全部從站)的工作模式控制行為;

通過EOE傳輸的數據幀(常見于使用TCP/IP通信的EtherCAT從站,如帶IP接口的遠程IO模塊或工業攝像頭);

下面是使用Wireshark實際抓包情況:

05c03c52-3174-11f0-8605-92fbcf53809c.png

4. EtherCAT EOE抓包TCP報文

首先我們修改工程目錄下的 src/hal_entry.c 文件,將該文件全部替換為如下代碼:

/** Copyright (c) 2006-2024, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date Author Notes* 2024-03-11 Wangyuqiang first version*/#include#include"hal_data.h"#include#include#include#include#include#include#defineBUFSZ (1024)staticconstcharsend_data[] ="This is TCP Server from RT-Thread.";voidhal_entry(void){ rt_kprintf("\nHello RT-Thread!\n"); rt_kprintf("==================================================\n"); rt_kprintf("This example project is an ethercat eoe routine!\n"); rt_kprintf("==================================================\n");}staticvoidtcpserv(void*parameter){ char*recv_data;/* 用于接收的指針,后面會做一次動態分配以請求可用內存 */ socklen_tsin_size; intsock, connected, bytes_received; structsockaddr_inserver_addr, client_addr; rt_bool_tstop = RT_FALSE;/* 停止標志 */ intret; recv_data =rt_malloc(BUFSZ +1);/* 分配接收用的數據緩沖 */ if(recv_data == RT_NULL) { rt_kprintf("No memory\n"); return; } /* 一個socket在使用前,需要預先創建出來,指定SOCK_STREAM為TCP的socket */ if((sock =socket(AF_INET, SOCK_STREAM,0)) ==-1) { /* 創建失敗的錯誤處理 */ rt_kprintf("Socket error\n"); /* 釋放已分配的接收緩沖 */ rt_free(recv_data); return; } /* 初始化服務端地址 */ server_addr.sin_family = AF_INET; server_addr.sin_port =htons(5000);/* 服務端工作的端口 */ server_addr.sin_addr.s_addr = INADDR_ANY; rt_memset(&(server_addr.sin_zero),0,sizeof(server_addr.sin_zero)); /* 綁定socket到服務端地址 */ if(bind(sock, (structsockaddr *)&server_addr,sizeof(structsockaddr)) ==-1) { /* 綁定失敗 */ rt_kprintf("Unable to bind\n"); /* 釋放已分配的接收緩沖 */ rt_free(recv_data); return; } /* 在socket上進行監聽 */ if(listen(sock,5) ==-1) { rt_kprintf("Listen error\n"); /* release recv buffer */ rt_free(recv_data); return; } rt_kprintf("\nTCPServer Waiting for client on port 5000...\n"); while(stop != RT_TRUE) { sin_size =sizeof(structsockaddr_in); /* 接受一個客戶端連接socket的請求,這個函數調用是阻塞式的 */ connected =accept(sock, (structsockaddr *)&client_addr, &sin_size); /* 返回的是連接成功的socket */ if(connected

編譯下載后重新燒錄程序并啟動,在從站成功連接到主站后,執行 tcpserv_app 指令來啟動一個 TCP Server:

0609feaa-3174-11f0-8605-92fbcf53809c.png

同時我們打開 TCP 測試軟件,配置 TCP 客戶端,配置信息如下:

目標IP:192.168.10.100(從站IP)

目標端口:5000

06523d6e-3174-11f0-8605-92fbcf53809c.png

同時打開 Wireshark ,查看 EtherCAT EOE網絡下的 TCP報文能夠被成功捕獲:

0693ea34-3174-11f0-8605-92fbcf53809c.png


附錄1 EtherCAT通信服務命令

EtherCAT 子報文所有的服務都是以主站操作描述的。數據鏈路層去規定了從站內部物理存儲、讀寫和交換(讀取并馬上寫入)數據的服務。讀寫操作和尋址方式共同決定了子報文的通信服務類型, 由子報文頭中的命令字節表示:

06e46c5c-3174-11f0-8605-92fbcf53809c.png

主站接收到返回數據幀后,檢查子報文中的WKC,如果不等于預期值,則表示此子報文沒有被正確處理。子報文的WKC預期值與通信服務類型和尋址地址相關。子報文經過某一個從站時,如果是單獨地讀或寫操作, WKC 加1 。如果是讀寫操作, 讀成功時WKC加1,寫成功時WKC 加2 ,讀寫全部完成時WKC加3,子報文由多個從站處理時, WKC是各個從站處理結果的累加。


附錄2 EtherCAT狀態碼

07369766-3174-11f0-8605-92fbcf53809c.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網絡
    +關注

    關注

    14

    文章

    7734

    瀏覽量

    90248
  • 開發板
    +關注

    關注

    25

    文章

    5448

    瀏覽量

    101444
  • ethercat
    +關注

    關注

    19

    文章

    956

    瀏覽量

    39550
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何使用TwinCAT3內部的函數來獲取系統時間?

    打開TwinCAT3(以下簡稱TC3)并新建項目,在項目樹的“PLC”中添加標準PLC,命名為“CPU1”。
    的頭像 發表于 03-07 09:56 ?4335次閱讀

    labview通過ADS通訊,能通訊數組嗎?與TwinCAT3之間

    labview通過ADS通訊,能通訊數組嗎?與TwinCAT3之間
    發表于 05-18 16:24

    如何去使用TwinCAT3中SCOPE功能?

    如何去實現一種基于TwinCAT3的伺服電機控制設計?TwinCAT3的SCOPE功能可同時監控多個變量,但我們如何添加這些變量呢?這些變量有哪些呢?
    發表于 06-28 07:46

    一種倍福TwinCAT3中讀取臺達伺服扭矩

    XML文件添加、IO掃描伺服和變量定義關聯,參照博客TwinCAT3第三方伺服電機——匯川IS620N使用中所講解的方法,TC3使用第三方伺服方法都是一樣的。本篇文章只講解臺達伺服部分。
    發表于 06-28 09:23

    倍福TwinCAT(貝福Beckhoff)基礎教程 TwinCAT安裝配置

    由于TC2和TC3都有可能用到,個人推薦都安裝,但是注意必須是先安裝的TwinCAT2,然后安裝TwinCAT3,如果反了可能兩個都沒法用(打開TcSwitchRuntime提示Both
    發表于 07-02 07:29

    請問如何基于TwinCAT3實現伺服電機控制?

    請問如何基于TwinCAT3實現伺服電機控制?
    發表于 09-26 09:09

    TwinCAT3怎么才能實時讀出電機的力矩值?

    TwinCAT3怎么才能實時讀出電機的力矩值?
    發表于 09-26 06:09

    如何利用TwinCAT3實現伺服電機的控制?

    TwinCAT3中的SCOPE怎么使用?如何利用TwinCAT3實現伺服電機的控制?
    發表于 09-27 06:33

    如何去安裝TwinCAT2與TwinCAT3

    如何去安裝TwinCAT2與TwinCAT3
    發表于 10-08 08:23

    請問倍福TwinCAT3是如何讀取臺達伺服扭矩的?

    請問倍福TwinCAT3是如何讀取臺達伺服扭矩的?
    發表于 10-13 07:50

    使用TwinCAT3實現高級測量數據處理

      TwinCAT3軟件的CX5140嵌入式控制器、TwinCAT狀態監測軟件庫和EtherCAT端子模塊構成的控制平臺基礎上開發TAR9964狀態監測系統。
    發表于 09-25 14:47 ?4次下載

    TwinCAT3的入門教程詳細說明

    TwinCAT3 是基于 PC 的控制軟件并且它開啟了一個新的時代,是倍福公司歷史上又一個里程碑。特別是在高效的工程領域中 TwinCAT3 將模塊化思想以及其靈活的軟件架構,融入到整個平臺。幾乎
    發表于 02-27 08:00 ?0次下載

    TwinCAT 3運動控制教程Version 1.0

    TwinCAT3 是基于 PC 的控制軟件并且它開啟了一個新的時代,是倍福公司歷史上又一 個里程碑。 特別是在高效的工程領域中TwinCAT3將模塊化思想以及其靈活的軟件架構,融入到整 個平臺
    發表于 11-17 15:33 ?4次下載

    RX72M單芯片EtherCAT伺服方案(下)操作說明與規范

    3. 操作說明 3.1 TwinCAT控制電機 本文檔使用的EtherCAT工具是:TwinCAT 3。假設用戶已經成功安裝了
    的頭像 發表于 03-10 17:40 ?1611次閱讀

    如何基于TwinCAT3實現伺服電機控制

    先說一下硬件,伺服電機采用定制的關節無框力矩電機,帶力矩傳感器,EtherCAT通訊,想用在康復機器人上做運動控制研究 如果軟件配置完畢,重啟后右下角應該有一個綠色的齒輪圖標,這個代表TwinCAT3已經啟動了,而在配置模式下則會變為藍色。
    發表于 05-06 11:32 ?5次下載
    如何基于<b class='flag-5'>TwinCAT3</b>實現伺服電機控制
    主站蜘蛛池模板: 国产精品露脸脏话对白 | 国产va免费精品高清在线 | 一区二区三区免费视频播放器 | 日韩一卡 二卡 三卡 四卡 免费视频 | 午夜免费啪视频 | 婷婷激情六月 | 亚洲视频一区在线观看 | 午夜精品一区二区三区在线视 | 亚洲2020天天堂在线观看 | 免费的两性视频网站 | 国产婷婷综合丁香亚洲欧洲 | 天天看人体 | 亚洲视频黄 | 精品国产免费一区二区 | 国产免费的野战视频 | 免费看国产一级片 | 日本免费不卡在线一区二区三区 | 色婷婷色综合缴情在线 | 亚洲一级毛片免费看 | 在线观看a网站 | 日韩三级在线观看视频 | 欧美成人午夜精品一区二区 | 最好看的2019中文字幕1 | 国产精品美女久久久 | 国产精品7m凸凹视频分类大全 | 国产大片免费观看中文字幕 | 国产福利在线观看你懂的 | 成人在线视频网址 | 五月婷婷六月丁香 | 性欧美大战久久久久久久野外 | 五月综合久久 | 黄黄视频在线观看 | 久久夜色精品国产亚洲 | 亚洲一区在线视频 | 一本大道加勒比久久 | 夜夜精品视频 | 色综合久久久久久久久久久 | 性视频久久 | 日本一级黄色毛片 | 免费一级特黄特色大片 | 中文字幕欧美日韩 |