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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TwinCAT3 EtherCAT抓包 | 技術(shù)集結(jié)

RT-Thread官方賬號 ? 2025-05-15 18:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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


準(zhǔn)備環(huán)境

硬件環(huán)境:

EtherKit開發(fā)板

網(wǎng)線一根

Type-C USB線一根

軟件環(huán)境

TwinCAT3

RT-Thread studio

wireshark


EtherCAT EOE工程下載

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

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

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

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

觀察開發(fā)板串口狀態(tài),此時可以看到 eoe app 已經(jīng)正常運行了:

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


TwinCAT3 模擬EtherCAT主站啟動

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

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

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

激活從站設(shè)備后可以看到 EtherKit 開發(fā)板板載以太網(wǎng)指示燈正常工作,同時默認(rèn)從站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模式,由默認(rèn)的 SM-Synchron 模式切換為 DC-Synchron;

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

接著我們點擊上方導(dǎo)航欄 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設(shè)備,點擊確定;

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

然后點擊激活;

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

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

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


EtherCAT數(shù)據(jù)幀結(jié)構(gòu)

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

EtherCAT數(shù)據(jù)直接使用以太網(wǎng)數(shù)據(jù)幀進行傳輸,幀類型為0x88A4。一個EtherCAT數(shù)據(jù)包括2個字節(jié)的數(shù)據(jù)頭和44~1498字節(jié)的數(shù)據(jù),其中數(shù)據(jù)區(qū)由一個或多個EtherCAT子報文組成,每個子報文對應(yīng)獨立的設(shè)備或從站存儲區(qū)域;

EtherCAT幀結(jié)構(gòu)定義

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

EtherCAT幀結(jié)構(gòu)定義

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

EtherCAT子報文結(jié)構(gòu)定義

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


EtherCAT報文分析

1.請求報文

首先我們設(shè)置過濾規(guī)則:

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

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

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

2.應(yīng)答報文

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

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

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

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

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

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

解析說明

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

ecat_mailbox.eoe:表示抓取所有 EOE協(xié)議封裝的以太網(wǎng)數(shù)據(jù),EOE允許通過EtherCAT傳輸標(biāo)準(zhǔn)以太網(wǎng)幀(如TCP/IP、UDP);

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

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

應(yīng)用場景

此過濾規(guī)則可用于同時監(jiān)控:

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

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

下面是使用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;/* 用于接收的指針,后面會做一次動態(tài)分配以請求可用內(nèi)存 */ socklen_tsin_size; intsock, connected, bytes_received; structsockaddr_inserver_addr, client_addr; rt_bool_tstop = RT_FALSE;/* 停止標(biāo)志 */ intret; recv_data =rt_malloc(BUFSZ +1);/* 分配接收用的數(shù)據(jù)緩沖 */ if(recv_data == RT_NULL) { rt_kprintf("No memory\n"); return; } /* 一個socket在使用前,需要預(yù)先創(chuàng)建出來,指定SOCK_STREAM為TCP的socket */ if((sock =socket(AF_INET, SOCK_STREAM,0)) ==-1) { /* 創(chuàng)建失敗的錯誤處理 */ rt_kprintf("Socket error\n"); /* 釋放已分配的接收緩沖 */ rt_free(recv_data); return; } /* 初始化服務(wù)端地址 */ server_addr.sin_family = AF_INET; server_addr.sin_port =htons(5000);/* 服務(wù)端工作的端口 */ server_addr.sin_addr.s_addr = INADDR_ANY; rt_memset(&(server_addr.sin_zero),0,sizeof(server_addr.sin_zero)); /* 綁定socket到服務(wù)端地址 */ if(bind(sock, (structsockaddr *)&server_addr,sizeof(structsockaddr)) ==-1) { /* 綁定失敗 */ rt_kprintf("Unable to bind\n"); /* 釋放已分配的接收緩沖 */ rt_free(recv_data); return; } /* 在socket上進行監(jiān)聽 */ 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的請求,這個函數(shù)調(diào)用是阻塞式的 */ connected =accept(sock, (structsockaddr *)&client_addr, &sin_size); /* 返回的是連接成功的socket */ if(connected

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

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

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

目標(biāo)IP:192.168.10.100(從站IP)

目標(biāo)端口:5000

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

同時打開 Wireshark ,查看 EtherCAT EOE網(wǎng)絡(luò)下的 TCP報文能夠被成功捕獲:

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


附錄1 EtherCAT通信服務(wù)命令

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

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

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


附錄2 EtherCAT狀態(tài)碼

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7801

    瀏覽量

    90675
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5634

    瀏覽量

    103784
  • ethercat
    +關(guān)注

    關(guān)注

    19

    文章

    1084

    瀏覽量

    39860
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何使用TwinCAT3內(nèi)部的函數(shù)來獲取系統(tǒng)時間?

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

    labview通過ADS通訊,能通訊數(shù)組嗎?與TwinCAT3之間

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

    如何去使用TwinCAT3中SCOPE功能?

    如何去實現(xiàn)一種基于TwinCAT3的伺服電機控制設(shè)計?TwinCAT3的SCOPE功能可同時監(jiān)控多個變量,但我們?nèi)绾翁砑舆@些變量呢?這些變量有哪些呢?
    發(fā)表于 06-28 07:46

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

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

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

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

    請問如何基于TwinCAT3實現(xiàn)伺服電機控制?

    請問如何基于TwinCAT3實現(xiàn)伺服電機控制?
    發(fā)表于 09-26 09:09

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

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

    如何利用TwinCAT3實現(xiàn)伺服電機的控制?

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

    如何去安裝TwinCAT2與TwinCAT3

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

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

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

    使用TwinCAT3實現(xiàn)高級測量數(shù)據(jù)處理

      TwinCAT3軟件的CX5140嵌入式控制器、TwinCAT狀態(tài)監(jiān)測軟件庫和EtherCAT端子模塊構(gòu)成的控制平臺基礎(chǔ)上開發(fā)TAR9964狀態(tài)監(jiān)測系統(tǒng)。
    發(fā)表于 09-25 14:47 ?4次下載

    TwinCAT3的入門教程詳細(xì)說明

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

    TwinCAT 3運動控制教程Version 1.0

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

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

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

    如何基于TwinCAT3實現(xiàn)伺服電機控制

    先說一下硬件,伺服電機采用定制的關(guān)節(jié)無框力矩電機,帶力矩傳感器,EtherCAT通訊,想用在康復(fù)機器人上做運動控制研究 如果軟件配置完畢,重啟后右下角應(yīng)該有一個綠色的齒輪圖標(biāo),這個代表TwinCAT3已經(jīng)啟動了,而在配置模式下則會變?yōu)樗{色。
    發(fā)表于 05-06 11:32 ?5次下載
    如何基于<b class='flag-5'>TwinCAT3</b>實現(xiàn)伺服電機控制
    主站蜘蛛池模板: nxgx欧美| 欧美性猛交ⅹxxx乱大交免费 | 欧美美女福利视频 | 日本三区四区免费高清不卡 | 五月婷婷在线观看视频 | 国产午夜人做人视频羞羞 | 精品日韩 | 狠狠狠狠操 | 亚洲一区免费视频 | 资源新版在线天堂 | 俺去啦在线视频 | 免费操人视频 | 黄色软件入口 | 黄色自拍偷拍 | 老师啊灬啊灬用力啊快224视频 | 日本在线不卡一区 | www.毛片.com| 日本一区二区三区欧美在线观看 | 免费日本视频 | 久99热 | 国产亚洲精品在天天在线麻豆 | 久久综合色综合 | 精品视频69v精品视频 | 涩久久| 天天操天天干天天爽 | 国产盗摄女子私密保健视频 | 女性私密部位扒开的视频 | 国产精品一级香蕉一区 | 午夜神马 | h文 超乳 奶水 | 午夜欧美性视频在线播放 | 8050网| 日本理论在线 | 男人和女人做a免费视频 | 黑人又大又粗又长又深受不了 | 欧美性色欧美a在线观看 | 亚洲美女激情视频 | 亚洲大成色www永久网 | 西西人体www303sw大胆高清 | 免费国产zzzwww色 | 免播放器av少妇影院 |