99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

在使用TwinCAT測(cè)試EtherCAT EOE功能時(shí),我們會(huì)發(fā)現(xiàn)正常是無(wú)法使用Wireshark去進(jìn)行網(wǎng)絡(luò)抓包抓取EtherCAT報(bào)文的,今天這篇文章就帶大家來(lái)上手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 包,然后新建一個(gè)示例工程:etherkit_ethercat_eoe,編譯并下載程序;

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

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

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

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

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


TwinCAT3 模擬EtherCAT主站啟動(dòng)

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

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

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

激活從站設(shè)備后可以看到 EtherKit 開發(fā)板板載以太網(wǎng)指示燈正常工作,同時(shí)默認(rèn)從站DC模式為 SM-Synchron :

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


TwinCAT3配置DC-Synchron

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

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

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

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

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

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

提示 Restart TwinCAT system in config Mode,點(diǎn)擊確定;

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

shell再次提示 Load IO設(shè)備,點(diǎn)擊確定;

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

然后點(diǎn)擊激活;

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

接著我們?cè)偾袚Q回 SM-Synchron,并打開wireshark,選擇對(duì)應(yīng)的網(wǎng)卡設(shè)備,此時(shí)就可以看到ECAT報(bào)文了;

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ù)幀進(jìn)行傳輸,幀類型為0x88A4。一個(gè)EtherCAT數(shù)據(jù)包括2個(gè)字節(jié)的數(shù)據(jù)頭和44~1498字節(jié)的數(shù)據(jù),其中數(shù)據(jù)區(qū)由一個(gè)或多個(gè)EtherCAT子報(bào)文組成,每個(gè)子報(bào)文對(duì)應(yīng)獨(dú)立的設(shè)備或從站存儲(chǔ)區(qū)域;

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

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

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

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

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

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


EtherCAT報(bào)文分析

1.請(qǐng)求報(bào)文

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

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

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

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

2.應(yīng)答報(bào)文

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

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

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

3.控制命令與EOE報(bào)文過濾

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

(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(十進(jìn)制1001),用于單個(gè)從站點(diǎn)對(duì)點(diǎn)通信;

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

應(yīng)用場(chǎng)景

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

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

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

下面是使用Wireshark實(shí)際抓包情況:

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

4. EtherCAT EOE抓包TCP報(bào)文

首先我們修改工程目錄下的 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;/* 用于接收的指針,后面會(huì)做一次動(dòng)態(tài)分配以請(qǐng)求可用內(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; } /* 一個(gè)socket在使用前,需要預(yù)先創(chuàng)建出來(lái),指定SOCK_STREAM為TCP的socket */ if((sock =socket(AF_INET, SOCK_STREAM,0)) ==-1) { /* 創(chuàng)建失敗的錯(cuò)誤處理 */ 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上進(jìn)行監(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); /* 接受一個(gè)客戶端連接socket的請(qǐng)求,這個(gè)函數(shù)調(diào)用是阻塞式的 */ connected =accept(sock, (structsockaddr *)&client_addr, &sin_size); /* 返回的是連接成功的socket */ if(connected

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

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

同時(shí)我們打開 TCP 測(cè)試軟件,配置 TCP 客戶端,配置信息如下:

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

目標(biāo)端口:5000

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

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

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


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

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

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

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


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

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

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

    關(guān)注

    14

    文章

    7801

    瀏覽量

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

    關(guān)注

    25

    文章

    5629

    瀏覽量

    103710
  • ethercat
    +關(guān)注

    關(guān)注

    19

    文章

    1084

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

    如何去使用TwinCAT3中SCOPE功能?

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

    一種倍福TwinCAT3中讀取臺(tái)達(dá)伺服扭矩

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

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

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

    請(qǐng)問如何基于TwinCAT3實(shí)現(xiàn)伺服電機(jī)控制?

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

    TwinCAT3怎么才能實(shí)時(shí)讀出電機(jī)的力矩值?

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

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

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

    如何去安裝TwinCAT2與TwinCAT3

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

    請(qǐng)問倍福TwinCAT3是如何讀取臺(tái)達(dá)伺服扭矩的?

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

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

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

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

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

    TwinCAT 3運(yùn)動(dòng)控制教程Version 1.0

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

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

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

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

    先說一下硬件,伺服電機(jī)采用定制的關(guān)節(jié)無(wú)框力矩電機(jī),帶力矩傳感器,EtherCAT通訊,想用在康復(fù)機(jī)器人上做運(yùn)動(dòng)控制研究 如果軟件配置完畢,重啟后右下角應(yīng)該有一個(gè)綠色的齒輪圖標(biāo),這個(gè)代表TwinCAT3已經(jīng)啟動(dòng)了,而在配置模式下則會(huì)變?yōu)樗{(lán)色。
    發(fā)表于 05-06 11:32 ?5次下載
    如何基于<b class='flag-5'>TwinCAT3</b>實(shí)現(xiàn)伺服電機(jī)控制