91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

如何在EtherCAT從站上增加模擬量輸入AI變量

工控論壇 ? 來源:工控有得聊 ? 2026-03-11 16:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

“工控有得聊”是機械工業(yè)出版社“機工工控”“機工通信”品牌旗下專業(yè)資訊和服務(wù)平臺,致力于幫助讀者在電氣、通信、自動化領(lǐng)域里,緊跟前沿資訊,掌握核心技術(shù),快速提升專業(yè)素養(yǎng)。點擊藍色微信名可快速關(guān)注我們。

工業(yè)自動化項目中,你是否曾因EtherCAT從站的模擬量輸入(AI)通道不足而頭疼?想要靈活擴展,卻苦于官方手冊語焉不詳?

本文將為你揭秘從站設(shè)備添加AI變量的完整流程——

要在EtherCAT從站增加模擬量輸入AI變量,首先需更新從站設(shè)備程序,定義新的AI變量并初始化。然后,在PDO映射配置中添加該變量,以便主站讀取。接著,在從站驅(qū)動程序中更新數(shù)據(jù)處理邏輯,包括對AI變量的采集和處理。最后,在主站程序中更新對該AI變量的讀取邏輯,實現(xiàn)數(shù)據(jù)交換。通過這些步驟,可以成功在EtherCAT從站上增加模擬量輸入AI變量,并實現(xiàn)與主站的數(shù)據(jù)通信和控制。

修改XML文件有關(guān)模擬量輸入AI的部分

模擬量輸入AI的EtherCAT數(shù)據(jù)通信需要8個AI對象,打開XML文件,點擊第二個“TxPdo”,可以看到其Name是AI Inputs并且其下?lián)碛?個Entry,在其后增加8個自定義的AI變量。具體添加過程如下。

(1)增加變量對應于輸入映射索引0x1a02

增加變量對應于輸入映射索引0x1a02的,需要修改DT1A02數(shù)據(jù)類型以增加8個變量。

①修改DT1A02數(shù)據(jù)類型

利用XMLNotePad打開要修改的XML文件,之后依次點擊節(jié)點:

“EtherCATInfo”→“Descriptions”→“Devices”→“Device”→“Profile”→“Dictionary”→“DataTypes”,依次點擊子節(jié)點“DataType”,直至找到DT1A02所在的位置,在最后的“SubItem”右鍵“Duplicate”復制8個新的SubItem。之后,修改新建的SubItem的SubIdx,Name和Type等信息。

SubIdx按順序遞增,Name等根據(jù)需求定義,BitOffs是上一個SubItem的BitSize和BitOffs的和。因為添加了新的SubItem,所以DT1A02的BitSize要隨之更新,它的值是最后一個SubItem的BitSize和BitOffs的和。XML文件中DT1A02的修改如圖1所示。 97631fba-1c8a-11f1-90a1-92fbcf53809c.png

圖1 XML文件中DT1A02的修改

②修改DT1A02對象

在XMLNotePad中點擊“Dictionary”的子節(jié)點“Objects”,依次點擊“Object”,找到0x1a02所在的位置,修改BitSize即可。這個BitSize值與上面DataType中DT1A02的BitSize要保持一致。本例中修改了0x1a02數(shù)據(jù)對象(輸出映射表),增加8個SubItem,XML文件中0x1a02修改如圖2所示。

97c61020-1c8a-11f1-90a1-92fbcf53809c.png

圖2 XML文件中0x1a02的修改

(2)修改0x6020數(shù)據(jù)類型及對象

由于索引0x1a02將輸出過程數(shù)據(jù)映射到0x6020中,需要修改0x6020數(shù)據(jù)類型和對象。

①修改DT6020數(shù)據(jù)類型

利用XMLNotePad打開要修改的XML文件,之后依次點擊節(jié)點:

“EtherCATInfo”→“Descriptions”→“Devices”→“Device”→“Profile”→“Dictionary”→“DataTypes”,依次點擊子節(jié)點“DataType”,直至找到DT6020所在的位置,新增8個SubItem。之后,修改新建的SubItem的SubIdx,Name和Type等信息。

SubIdx按順序遞增,Name等根據(jù)需求定義,BitOffs是上一個SubItem的BitSize和BitOffs的和。同時因為添加了新的SubItem,所以DT6020的BitSize要隨之更新,它的值是最后一個SubItem的BitSize和BitOffs的和。XML文件中DT6020的修改如圖3所示。

9822fd94-1c8a-11f1-90a1-92fbcf53809c.png

圖3 XML文件中DT6020的修改

②修改DT6020對象

在XMLNotePad中點擊“Dictionary”的子節(jié)點“Objects”,依次點擊“Object”,找到0x6020所在的位置,修改BitSize即可。這個BitSize值與上面DataType中DT6020的BitSize要保持一致。同時增加8個SubItem并進行命名。XML文件中0x6020的修改如圖4所示。

987d02da-1c8a-11f1-90a1-92fbcf53809c.png

圖4 XML文件中0x6020的修改

修改STM32程序有關(guān)模擬量輸入AI的部分

(1)在el9800appl.h文件中修改索引0x1a02的本地存儲變量等相關(guān)信息

① 修改0x1a02的本地存儲

修改TOBJ1A02對應的結(jié)構(gòu)體typedef struct OBJ_STRUCT_PACKED_START。

typedefstructOBJ_STRUCT_PACKED_START
{
  UINT16 u16SubIndex0;/* SubIndex 0*/
  UINT32 aEntries[16];/* Entry buffer*/
} OBJ_STRUCT_PACKED_END
TOBJ1A02  

② 初始化0x1a02與XML文件對應

在圖8-19中,在XML文件中對DT1A02進行修改,增加了8個SubItem,且其最大的子索引是16。在圖8-20中,在XML文件中對0x1a02進行修改,增加了8個SubItem,其DefaultData表示映射索引號。故而在函數(shù)PROTO TOBJ1A02 sAITxPDOMap中進行相應修改:首元素變?yōu)?6,末尾添加8個元素分別是新增的8個SubItem的相應索引號。

PROTO TOBJ1A02 sAITxPDOMap
#ifdef
_EVALBOARD_
= {16, {0x60200101,0x60200201,0x60200302,0x60200502,0x08,0x18020701,0x18020901,0x60201110,0x60201210,0x60201310,0x60201410,0x60201510,0x60201610,0x60201710,0x60201810,0x60201910}}
#endif

③ 修改0x1a02表項描述

修改結(jié)構(gòu)體OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1A02[]。

OBJCONST TSDOINFOENTRYDESCOBJMEM asEntryDesc0x1A02[] =
{
 {DEFTYPE_UNSIGNED8, 0x8, ACCESS_READ },
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
 {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ},
}

(2)在el9800appl.h文件中修改索引0x6020的本地存儲變量等相關(guān)信息

① 修改0x6020的本地存儲

修改TOBJ6020對應的typedef struct OBJ_STRUCT_PACKED_START。

typedefstructOBJ_STRUCT_PACKED_START
{
 UINT16 u16SubIndex0;/* SubIndex 0*/
 BOOLEAN(bUnderrange);/* (SI1) Analog input under range*/
 BOOLEAN(bOverrange);/* (SI2) Analog input over range*/
 BIT2(b2Limit1);/* (SI3) Analog input 1st limit*/
 BIT2(b2Limit2);/* (SI5) Analog input 2nd limit*/
 ALIGN2(SubIndex006)/* 2Bit alignment*/
 ALIGN6(SubIndex007)/* 2Bit alignment*/
 BOOLEAN(bTxPDOState);/* (SI15) TxPdo state*/
 BOOLEAN(bTxPDOToggle);/* (SI16) TxPdo toggle*/
 INT16  i16Analoginput;/* (SI17) Analog input value*/
 INT16  i16AI1;/* (SI18) Analog input value*/
  INT16  i16AI2;/* (SI19) Analog input value*/
  INT16  i16AI3;/* (SI20) Analog input value*/
  INT16  i16AI4;/* (SI21) Analog input value*/
  INT16  i16AI5;/* (SI22) Analog input value*/
  INT16  i16AI6;/* (SI23) Analog input value*/
  INT16  i16AI7;/* (SI24) Analog input value*/
  INT16  i16AI8;/* (SI25) Analog input value*/
} OBJ_STRUCT_PACKED_END
TOBJ6020

② 初始化0x6020與XML文件對應

在圖8-21中,在XML文件中對0x6020進行了修改,增加了8個SubItem,且其最大的子索引是25。對應在函數(shù)PROTO TOBJ6020 sAIInputs中進行修改:首元素變?yōu)樽畲笞铀饕?5,末尾添加8個元素分別是新增的8個SubItem的初始值。

PROTO TOBJ6020 sAIInputs
#ifdef
_EVALBOARD_
= {25,0x00,0x00,0x00,0x00,0,0,0x00,0x00,0x7FFF,0x0001,0x0001,0x0001,0x0001,
0x0001,0x0001,0x0001,0x0001}
#endif

③ 修改0x6020表項描述

修改結(jié)構(gòu)體OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x6020[]。

OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x6020[] = {
 {DEFTYPE_UNSIGNED8, 0x8, ACCESS_READ },
 {DEFTYPE_BOOLEAN, 0x01, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
 {DEFTYPE_BOOLEAN, 0x01, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
 {DEFTYPE_BIT2, 0x02, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
 {0x0000, 0, 0},
 {DEFTYPE_BIT2, 0x02, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
 {0x0000, 0x02, 0},
 {0x0000, 0x06, 0},
 {0x0000, 0, 0},
 {0x0000, 0, 0},
 {0x0000, 0, 0},
 {0x0000, 0, 0},
 {0x0000, 0, 0},
 {0x0000, 0, 0},
 {0x0000, 0, 0},
 {DEFTYPE_BOOLEAN, 0x01, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
 {DEFTYPE_BOOLEAN, 0x01, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
 {DEFTYPE_INTEGER16, 0x10, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
 {DEFTYPE_INTEGER16, 0x10, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
  {DEFTYPE_INTEGER16, 0x10, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
 {DEFTYPE_INTEGER16, 0x10, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
  {DEFTYPE_INTEGER16, 0x10, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
 {DEFTYPE_INTEGER16, 0x10, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
  {DEFTYPE_INTEGER16, 0x10, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
  {DEFTYPE_INTEGER16, 0x10, ACCESS_READ | OBJACCESS_TXPDOMAPPING},
 {DEFTYPE_INTEGER16, 0x10, ACCESS_READ | OBJACCESS_TXPDOMAPPING}
}   

④ 修改0x1a02和0x6020的對象描述

修改TOBJECT OBJMEM ApplicationObjDic[],需要特別注意方框中數(shù)據(jù)要與子索引最大值相對應。

TOBJECT OBJMEM ApplicationObjDic[] =
{ 
  ……
 /* Object 0x1A02 */
  {NULL,NULL,0x1A02, {DEFTYPE_PDOMAPPING,16| (OBJCODE_REC <

(3)修改el9800appl.c源文件中的有關(guān)內(nèi)容

① 在函數(shù)void APPL_Application(void)中給自定義的變量賦值

voidAPPL_Application(void)
{
  ……
  sAIIutputs.i16AI1= sAOOutputs.i16AO01;
sAIIutputs.i16AI2= sAOOutputs.i16AO02;
sAIIutputs.i16AI3= sAOOutputs.i16AO03;
sAIIutputs.i16AI4= sAOOutputs.i16AO04;
sAIIutputs.i16AI5= sAOOutputs.i16AO05;
sAIIutputs.i16AI6= sAOOutputs.i16AO06;
sAIIutputs.i16AI7= sAOOutputs.i16AO07;
sAIIutputs.i16AI8= sAOOutputs.i16AO08;
    ……
}

② 在函數(shù)void APPL_InputMapping(UINT16* pData)中將已添加的變量傳給EtherCAT主站

voidAPPL_InputMapping(UINT16* pData)
{
 UINT16j =0;
 UINT16*pTmpData = (UINT16*)pData;
 /* we go through all entries of the TxPDO Assign object to get the assigned TxPDOs */
 for(j =0; j < sTxPDOassign.u16SubIndex0; j++)
? ?{
? ? ??switch?(sTxPDOassign.aEntries[j])
? ? ? {
? ? ??/* TxPDO 1 */
? ? ??case?0x1A00:
? ? ? ? ?*pTmpData++ = SWAPWORD(((UINT16?*) &sDIInputs)[1]);
? ? ? ? ?break;
? ? ??/* TxPDO 3 */
? ? ??case?0x1A02:
? ? ? ? ? ?*pTmpData++ = SWAPWORD(((UINT16?*) &sAIInputs)[1]);
? ? ? ? ? ?*pTmpData++ = SWAPWORD(((UINT16?*) &sAIInputs)[2]);
 ? *pTmpData++ = SWAPWORD(((UINT16?*) &sAIInputs)[3]);
 ? *pTmpData++ = SWAPWORD(((UINT16?*) &sAIInputs)[4]);
 ? *pTmpData++ = SWAPWORD(((UINT16?*) &sAIInputs)[5]);
 ? *pTmpData++ = SWAPWORD(((UINT16?*) &sAIInputs)[6]);
 ? *pTmpData++ = SWAPWORD(((UINT16?*) &sAIInputs)[7]);
 ? *pTmpData++ = SWAPWORD(((UINT16?*) &sAIInputs)[8]);
 ? *pTmpData++ = SWAPWORD(((UINT16?*) &sAIInputs)[9]);
 ? *pTmpData++ = SWAPWORD(((UINT16?*) &sAIInputs)[10]);
? ? ? ? ?break;
? ? ? }
? ?}
}

本文轉(zhuǎn)自《EtherCAT工業(yè)以太網(wǎng)應用系統(tǒng)設(shè)計》

第8章 EtherCAT從站增加模擬量輸入/輸出(AI/AO)數(shù)據(jù)通信的方法

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

    關(guān)注

    2

    文章

    527

    瀏覽量

    35109
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    39911

    瀏覽量

    301544
  • ethercat
    +關(guān)注

    關(guān)注

    19

    文章

    1513

    瀏覽量

    45300

原文標題:【留言贈書限5名】EtherCAT從站AI通道不夠用?手把手教你擴容模擬量輸入!

文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    模擬量和開關(guān)

    模擬量和開關(guān) 在控制系統(tǒng)中,一個常見的術(shù)語就是模擬量和開關(guān)。 不論輸入還是輸出,一個參數(shù)要么是
    發(fā)表于 12-11 11:38 ?3327次閱讀

    LabVIEW入門到精通之模擬量輸入(AI)程序設(shè)計

    【LabVIEW入門到精通】7.1 模擬量輸入(AI)程序設(shè)計(利用LabVIEW實現(xiàn))
    發(fā)表于 01-08 11:25 ?0次下載

    模擬量輸入AI)程序設(shè)計(利用LabVIEW實現(xiàn))

    【LabVIEW入門到精通】8.1 模擬量輸入AI)程序設(shè)計(利用LabVIEW實現(xiàn))
    發(fā)表于 01-08 16:03 ?0次下載

    通過DAQ實現(xiàn)模擬量輸入AI)_labview程序案例

    程序案例通過DAQ實現(xiàn)模擬量輸入AI),喜歡的朋友可以下載來學習。
    發(fā)表于 01-13 16:12 ?34次下載

    模擬量輸入AI)_labview程序案例

    程序案例模擬量輸入AI),喜歡的朋友可以下載來學習。
    發(fā)表于 01-13 16:12 ?18次下載

    模擬量輸入AI)【集合】DAQ+DLL+普通控件_程序案例

    程序案例 模擬量輸入AI)【集合】DAQ+DLL+普通控件
    發(fā)表于 01-13 16:22 ?24次下載

    利用LabVIEW實現(xiàn)模擬量輸入AI)_程序案例

    程序案例 利用LabVIEW實現(xiàn)模擬量輸入AI
    發(fā)表于 01-13 16:22 ?28次下載

    利用LabWindowsCVI實現(xiàn)模擬量輸入AI_程序案例

    程序案例 利用LabWindowsCVI實現(xiàn)模擬量輸入AI
    發(fā)表于 01-13 16:22 ?30次下載

    基于PLC模擬量輸入接線方式

    本文檔內(nèi)容介紹了基于PLC模擬量輸入接線方式,模擬量是指變量在一定范圍連續(xù)變化的;也就是在一定范圍(定義域)內(nèi)可以取任意值(在值域內(nèi))。
    發(fā)表于 09-25 17:31 ?7次下載
    基于PLC<b class='flag-5'>模擬量</b>的<b class='flag-5'>輸入</b>接線方式

    plc中的模擬量信號如何讀取

    PLC讀取模擬量信號必須要有模擬量輸入模塊,即常說的AI模塊。
    的頭像 發(fā)表于 11-12 16:21 ?1.3w次閱讀

    什么是模擬量?什么是AI和什么是AO?AI輸入還是輸出?

    進行數(shù)據(jù)采集,其經(jīng)過抽樣和量化后可以轉(zhuǎn)換為數(shù)字量。說到模擬量,就不得不提AI和AO,下面就來講解下AI和AO。 AI和AO的講解 (1)AI
    的頭像 發(fā)表于 09-03 10:46 ?3.5w次閱讀

    什么是模擬量,它的概念是怎樣的

    數(shù)據(jù)采集,它通過采樣和量化后可轉(zhuǎn)換成數(shù)字量。談到模擬量,不得不提AI和AO,下面來解釋一下這兩個概念。 對AI和AO的解釋。 AI信號:即模擬量
    發(fā)表于 03-03 14:59 ?3.2w次閱讀

    plc帶模擬量輸入輸出和不帶模擬量輸入輸出有什么區(qū)別啊?

    plc帶模擬量輸入輸出和不帶模擬量輸入輸出有什么區(qū)別??? PLC是一種廣泛應用的自動化控制器,它可通過輸入和輸出控制信號來管理各種自動化過程
    的頭像 發(fā)表于 10-17 16:44 ?2908次閱讀

    請問PLC是如何讀取模擬量信號的?

    PLC讀取模擬量信號必須要有模擬量輸入模塊,即常說的AI模塊。
    的頭像 發(fā)表于 01-02 09:35 ?2063次閱讀
    請問PLC是如何讀取<b class='flag-5'>模擬量</b>信號的?

    Modbus TCP或EtherNet/IP站轉(zhuǎn)6通道輸入模擬量AI)

    FAD-3160是一款將6路模擬量輸入信號(AI)連接到Modbus TCP或者EtherNet/IP網(wǎng)絡(luò)的模塊,每個模擬量輸入通道支持電壓
    的頭像 發(fā)表于 07-17 15:06 ?454次閱讀
    Modbus TCP或EtherNet/IP<b class='flag-5'>從</b>站轉(zhuǎn)6通道<b class='flag-5'>輸入</b><b class='flag-5'>模擬量</b>(<b class='flag-5'>AI</b>)