国产精品天天看大片特色视频_麻豆文化传媒精品一区二区_亚洲精品在线观看视频_精品国产三上悠亚在线观看

ProfiNet應用實例

 2023-11-6     作者:Lee Leen        

本文為ProfiNet介紹文章《嵌入式環(huán)境 實現(xiàn)ProfiNet/PN工業(yè)以太網(wǎng)》的應用實例,使用ESM7000+ETA104+UR205PN


1 硬件安裝:

如圖1,將ETA104V5和UR205PN,以及EM7000核心板,安裝至SBC884底板

2.png

圖1


如圖2,連接編程電腦,交換機,組態(tài)用PC,及SBC884板卡系統(tǒng)。

3.png

圖2,系統(tǒng)組成



2 PC端組態(tài)并配置PLC

2.1 在博圖中安裝設備GSD

將GSD壓縮文件解壓并放置到任意目錄中,目錄中有如下三個文件

4.png


打開博圖,并在菜單欄中,通過“選項->管理通用站點描述文件”進入gsd管理。

5.png

 

選擇第一步GSD文件的解壓路徑,并勾選文件,安裝。

6.png


完成后,可以在博圖的硬件目錄中,“其他現(xiàn)場設備-> PROFINETIO -> I/O-> UreateAutomatic -> VARIABLE I/O ->前端模塊”中找到新添加的設備。


2.2 博圖中組態(tài)最簡PLC系統(tǒng)

首先新建一個博圖項目,然后在拓撲視圖中,添加PLC,交換機,和PN模塊。我這里選擇的PLC是1211C。而模塊的位置如下圖:

7.png


將PLC和UR205PN模塊連接起來。

8.png


然后轉(zhuǎn)到網(wǎng)絡視圖中,添加他們的連接關(guān)系,如圖:

9.png


接著雙擊UR205PN模塊,進入設備視圖,并在設備插槽中,添加4個數(shù)據(jù)交換模塊

10.png


設備插槽中插入數(shù)據(jù)交換模塊,數(shù)據(jù)交換模塊中插入數(shù)據(jù)對象。數(shù)據(jù)對象可以從“1/2/4字節(jié)輸入”或者“1/2/4字節(jié)輸出”中選擇。

接下來分別為每個數(shù)據(jù)模塊添加數(shù)據(jù)對象,如下:

13.png

分別是1個1字節(jié)輸入(兩路DI輸入),1個1字節(jié)輸出(對應一路繼電器輸出),兩個2字節(jié)輸入(對應4-20MA輸入)。


這里添加的四個模塊,對應的是ETA104模塊的輸入輸出通路。其對應關(guān)系如下:

ETA104

UR205PN

信息備注


PKW module_1

PKW問詢式通信通道

1路繼電器輸出

inpupt 1 byte(bit0)

繼電器0=數(shù)據(jù)位0

2路空觸頭輸入

Output 1byte(bit0 ,bit1)

輸入0= 數(shù)據(jù)位0

輸入1= 數(shù)據(jù)位1

電流輸入1

Input 2 byte

16位電流輸入值

電流輸入2

Input 2 byte

16位電流輸入值

 

為模塊添加變量。

首先我們要找到UR205PN各模塊的數(shù)據(jù)地址。

在博圖的設備視圖中選擇UR205PN模塊,并點擊各模塊,即可查看模塊數(shù)據(jù)在PLC中的位置.例如下圖展示的是PKW模塊的示意圖:

12.png


上圖中,說明PKW模塊的輸入,是從PLC數(shù)據(jù)地址68到75,共8個字節(jié)。PKW模塊的輸出,是從64到71,共8個字節(jié)。

以此類推,可以找到所有數(shù)據(jù)的地址.本例中數(shù)據(jù)地址如下表

數(shù)據(jù)模塊

輸入地址

輸出地址

PKW

68-75

64-71

DI :Input 1 byte

76

--

Do:Output 1byte

--

72

AI0:Input 2 byte

77,78

--

AI1:Input 2 byte

79,80

--

根據(jù)數(shù)據(jù)表,我們在PLC中建立如下變量表:

13.png


建立項目的強制列表,該表用于設置輸出值。

14.png


建立項目的監(jiān)視表,該表用于讀取輸入值。

15.png


數(shù)據(jù)變量分為兩個區(qū)域:PKW 和 周期通信。 周期通信比較好理解,就是每次通信都會交換的周期數(shù)據(jù),也是我們在插槽中插入的模塊數(shù)據(jù):如DI,DO,AI,AO。

PKW_開頭的數(shù)據(jù)對象,則屬于PKW訪問過程。該訪問基于一問一答,過程和定義如下:

16.png

17.png

 

所以,PLC如果要發(fā)起PKW通信,需要如下步驟:

1.     PKW_RW_req 設為“0:讀”  或者  “1:寫”

2.     PKW_INDEX_req 設為需要訪問的數(shù)據(jù)索引

3.     PKW_VALUE_req 如果為寫操作,這里需要輸入寫入的值

4.     PKW_COUNT_req 自增1,以表明是新的PKW訪問,觸發(fā)PN操作

當接收數(shù)據(jù)時:

1.     等待PKW_COUNT_rsp與PKW_COUNT_req一致

2.     對比回應的INDEX是否等于請求INDEX

3.     若是讀取操作的回應幀,則獲取PKW_VALUE_rsp


2.3 組態(tài)下載到PLC

完成后將組態(tài)編譯并下載到PLC。

18.png



3 嵌入式端程序編譯及運行

3.1 在PC上建立代碼編譯系統(tǒng)

本案例使用的嵌入式編譯開發(fā)環(huán)境式如下:

操作系統(tǒng)

WIN11 64位

虛擬機操作系統(tǒng)

WSL+Ubuntu-20.04

開發(fā)環(huán)境

VSCODE WSL 遠程連接

C編譯鏈接

arm-poky-linux-gnueabi-gcc

其搭建過程可參考如下文檔:《VSCODE嵌入式編譯環(huán)境搭建》


3.2 PC連接嵌入式板

PC連接嵌入式板的過程,參考英創(chuàng)工控板使用說明。

 

3.3 案例程序文件

解壓縮案例代碼:test_DIO_pn.rar

通過VSCODE ,WSL方式遠程打開該項目。

項目的文件組成如下圖所示:

19.png


3.4 應用層通信協(xié)議簡介

對應用層而言,通信都是建立在周期數(shù)據(jù)交換幀上。其內(nèi)部劃分為兩個功能區(qū):PKW,和周期通信區(qū)。這兩個功能區(qū)在周期通信幀中,他們的位置如下:

20.png


這兩個功能區(qū),對應了嵌入式內(nèi)的兩種通信對象:PKW索引訪問對象和周期通信訪問對象。

21.png


PKW: 數(shù)據(jù)以<索引-值>的方式存放在嵌入式端,用戶可以為某個參數(shù)指明特定的索引號,PLC通過問答方式,訪問該索引。這種方式適用于交換時間不敏感的數(shù)據(jù)。例如一些參數(shù)。其通信幀定義如下:、

22.png

23.png


周期通信對象:數(shù)據(jù)每個通信周期都會交換一次,適合時間敏感的通信對象,往往都是一些輸入輸出值,如DI,DO,AI,AO等。其在幀中定義如下:

24.png


3.5 用戶需要實現(xiàn)的代碼

在案例中,用戶代碼區(qū)域主要有以下代碼段需要維護:

1. 周期通信模塊定義

uint8_t UMList[4]={
       //模塊類型  模塊數(shù)據(jù)存儲區(qū)
       MODULE_1BYTE_INPUT,          //1個字節(jié)的DI輸入
       MODULE_1BYTE_OUTPUT,         //1個字節(jié)的DO輸出
       MODULE_2BYTE_INPUT,          //16位AI輸入
       MODULE_2BYTE_INPUT           //16位AI輸出
};


用戶通過該數(shù)組定義周期通信模塊的數(shù)量和類型。本案例中,模塊如下表:

模塊序號

模塊類型

模塊描述

對應數(shù)據(jù)對象

0

MODULE_1BYTE_INPUT

一個字節(jié)的輸入模塊

BIT0 = DI0

BIT1 = DI1

1

MODULE_1BYTE_OUTPUT

一個字節(jié)的輸處模塊

BIT0=DO0

2

MODULE_2BYTE_INPUT

兩個字節(jié)的輸入

4-20MA輸入1

3

MODULE_2BYTE_INPUT

兩個字節(jié)的輸入

4-20MA輸入2

我們目前支持的模塊類型有:

#define MODULE_1BYTE_INPUT 0X01  //1字節(jié)輸入
#define MODULE_2BYTE_INPUT 0X02  //2字節(jié)輸入
#define MODULE_4BYTE_INPUT 0X04  //4字節(jié)輸入
#define MODULE_1BYTE_OUTPUT 0X81 //1字節(jié)輸出
#define MODULE_2BYTE_OUTPUT 0X82 //2字節(jié)輸出
#define MODULE_4BYTE_OUTPUT 0X84 //4字節(jié)輸出

(注意這里的輸出是以PLC為主站視角,從PLC到嵌入式為輸出;從嵌入式到PLC為輸入。)

 

2. PKW索引訪問區(qū)域模塊定義

sPKWNode UPKWList[]=
{
    {0x0001,PKW_R|PKW_W,0}, //索引為1的可讀寫寄存器
    {0x0012,PKW_R,0},   //索引為8001H的只讀寄存器
    {0x8002,PKW_W,0}    //索引為8002H的只寫寄存器
};

 

3. 周期通信回調(diào)函數(shù)user_Oncycle

當周期通信發(fā)生時,會調(diào)用該回調(diào)函數(shù),用戶在這里將需要傳輸?shù)闹?,與PN上的通信值做交換。

例如在本案例中,回調(diào)函數(shù)如下:

//切換大小端
//pDes 指向切換后的結(jié)果存儲區(qū)
//pSrc 來源
//SIZE 數(shù)據(jù)字節(jié)長度
void sw_bigsmall(uint8_t *pDes, uint8_t *pSrc, uint8_t size)
{
    uint8_t *pD;
    uint8_t *pS;
    for(int i=0;i<size;i++)
    {
          pD = pDes+i;
          pS = pSrc+size-1-i;
          *pD = *pS;
    }
}
 
//用戶在該函數(shù)中,交換模塊和外部設備之間的數(shù)據(jù)
void user_Oncycle(sPNModule *pModule, int modulecount)
{
    uint8_t *src8;
    uint8_t *des8;
 
    //這里處理周期數(shù)據(jù)
    if(pModule[0].moduletype == MODULE_1BYTE_INPUT)//確保模塊類型正確
    {
          *pModule[0].pmoduleBuff =   ETA105_DI ;
         
    }
    if(pModule[1].moduletype == MODULE_1BYTE_OUTPUT)//確保模塊類型正確
          ETA105_DO = *(pModule[1].pmoduleBuff) ;
    if(pModule[2].moduletype == MODULE_2BYTE_INPUT)//確保模塊類型正確
          sw_bigsmall((pModule[2].pmoduleBuff),(uint8_t*)&(ETA105_AI[0]),2);
    if(pModule[3].moduletype == MODULE_2BYTE_INPUT)//確保模塊類型正確
          sw_bigsmall((pModule[3].pmoduleBuff),(uint8_t*)&(ETA105_AI[1]),2);
}


      4. PKW讀索引回調(diào)函數(shù)user_onReadIndex

當PKW中有新的讀取請求時,會執(zhí)行該回調(diào)函數(shù)。用戶在次函數(shù)對該索引數(shù)據(jù)賦值并執(zhí)行一些自定義操作。本案例中程序如下

void   user_onReadIndex(sPKWNode *pNode)
{
    uint8_t *src8;
    uint8_t *des8;
    if(pNode == NULL) return ;
    switch(pNode->index)
    {
          case 0x0001:
              //這里添加讀0001索引對象時的程序
              break;
          case 0x0012:
              //這里添加讀0012索引對象時的程序 假定是波特率
              //這里注意從小端切換成大端
              sw_bigsmall((uint8_t*)&(pNode->value),(uint8_t*)&(m_Serial.baudrate),4);
              break;
          case 0x8002:
              //0x8002不可讀,不操作
              break;
 
    }
}


       5 .PKW寫操作回調(diào)函數(shù)

       當有PKW寫請求時,系統(tǒng)調(diào)用該回調(diào)函數(shù),用戶在此函數(shù)中,將PLC傳輸來得值寫入,并執(zhí)行相應得自定義操作。

//用戶定義的寫縮影回調(diào)函數(shù)
void   user_onWriteIndex(sPKWNode *pNode)
{
    if(pNode == NULL) return ;
    switch(pNode->index)
    {
          case 0x0001:
              //
              break;
          case 0x0012:
              //該對象只讀,不操作
              break;
          case 0x8002:
              //
              break;
 
    }
}

   

3.6 PN程序的入口及退出處理:

入口:

      m_Serial.CDC_ACM_number =0; //初始化通信對象
      m_Serial.baudrate = 115200;
      m_Serial.oncycle = user_Oncycle; //注冊回調(diào)函數(shù)
      m_Serial.onPKWRead = user_onReadIndex;
      m_Serial.onPKWWrite = user_onWriteIndex;
      m_Serial.startPN(); //創(chuàng)建PN工作線程


退出處理:

      m_Serial.stopPN( );


本項目為英創(chuàng)公司與第三方公司合作項目。ProfiNet專業(yè)技術(shù)支持可以聯(lián)系:

電子郵件          99@ureate.com

電話                 028-85550280-815

国产精品天天看大片特色视频_麻豆文化传媒精品一区二区_亚洲精品在线观看视频_精品国产三上悠亚在线观看
<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • 欧美日韩在线影院| 艳妇臀荡乳欲伦亚洲一区| 久久婷婷亚洲| 一区二区三区 在线观看视| 亚洲免费在线观看视频| 亚洲春色另类小说| 国产日韩欧美在线| 欧美日韩一区二区三区免费看| 久久精品中文字幕一区二区三区| 一区二区三区成人| 亚洲国产精品一区在线观看不卡| 国产三级欧美三级| 国产精品美女久久久久久2018 | 欧美成人午夜激情视频| 亚洲欧美日韩精品久久亚洲区| 亚洲三级免费| 亚洲人人精品| 亚洲三级性片| 国产精品r级在线| 欧美日韩免费高清一区色橹橹| 欧美99在线视频观看| 猫咪成人在线观看| 蜜桃视频一区| 欧美国产一区二区| 欧美高清免费| 欧美人妖在线观看| 性欧美video另类hd性玩具| 亚洲一级二级在线| 亚洲影视在线播放| 亚洲欧美精品在线观看| 欧美一级久久| 久久久精品网| 亚洲视屏一区| 午夜精品福利一区二区蜜股av| 一区二区三区我不卡| 在线观看亚洲精品视频| 亚洲电影免费在线观看| 亚洲日本视频| 亚洲综合另类| 亚洲裸体视频| 亚洲自拍偷拍视频| 欧美一区二区成人6969| 老**午夜毛片一区二区三区| 欧美激情第4页| 国产精品久线观看视频| 国内精品福利| 国产精品视频一区二区高潮| 国产一区二区中文| 最新日韩欧美| 香蕉精品999视频一区二区| 久久日韩粉嫩一区二区三区| 欧美激情视频在线免费观看 欧美视频免费一| 欧美激情成人在线视频| 国产精品高潮呻吟久久av无限| 国产在线精品一区二区中文| 亚洲日本电影在线| 欧美在线观看你懂的| 欧美精品色网| 狠狠色综合播放一区二区 | 欧美在线电影| 欧美高清在线| 国产婷婷色一区二区三区| 亚洲精选在线观看| 久久国产66| 国产精品草草| 欧美午夜视频在线观看| 一区免费观看| 午夜精品国产更新| 欧美日韩精品高清| 激情五月***国产精品| 亚洲视频一区| 欧美精品性视频| 欧美日韩一区在线| 亚洲二区免费| 久久久久一区| 国产人妖伪娘一区91| 亚洲色在线视频| 欧美激情综合在线| 亚洲国产精品高清久久久| 香蕉久久国产| 国产精一区二区三区| 中国日韩欧美久久久久久久久| 免费观看不卡av| 狠狠色丁香久久综合频道| 午夜亚洲视频| 国产欧美日韩亚洲一区二区三区| 一区二区精品在线观看| 欧美成人69av| 91久久精品一区二区别| 麻豆成人小视频| 在线日韩av片| 噜噜噜91成人网| 亚洲国产精品久久久久婷婷老年| 欧美综合国产| 黑人一区二区三区四区五区| 久久精品视频一| 国产综合亚洲精品一区二| 久久精品午夜| 在线观看一区二区视频| 噜噜噜噜噜久久久久久91 | 欧美激情二区三区| 最新亚洲一区| 欧美日韩精品久久久| 9久草视频在线视频精品| 欧美日韩国产一区二区| 亚洲视频碰碰| 国产精品三级久久久久久电影| 午夜欧美精品久久久久久久| 国产伦精品一区二区三区照片91| 亚欧成人精品| 在线观看视频一区二区| 欧美激情黄色片| 一个色综合av| 国产亚洲一级| 欧美超级免费视 在线| 在线一区欧美| 国内偷自视频区视频综合| 欧美91大片| 中国成人亚色综合网站| 国产日韩av高清| 欧美高清免费| 午夜视频在线观看一区二区三区| 好吊视频一区二区三区四区| 欧美激情一二三区| 性欧美videos另类喷潮| 亚洲黄色性网站| 国产精品国产三级国产普通话99| 亚洲福利视频免费观看| 欧美一区亚洲二区| 亚洲激情视频网| 国产精品亚洲综合一区在线观看| 久久视频一区| 午夜精品成人在线| 91久久久久久久久| 国产精品美女一区二区| 欧美成人久久| 亚洲欧美日韩直播| 日韩午夜av在线| 国产综合视频在线观看| 欧美午夜片在线观看| 免费成人高清视频| 亚洲精品一区二区在线观看| 国产日韩在线一区| 欧美日韩精品在线观看| 久久琪琪电影院| 欧美诱惑福利视频| 亚洲午夜一区二区三区| 91久久久久久| 亚洲激情成人网| 极品尤物av久久免费看| 国产欧美日韩中文字幕在线| 欧美视频一区二区三区…| 亚洲天堂偷拍| 日韩视频一区二区| 亚洲国产精品久久精品怡红院| 国产亚洲精品aa午夜观看| 久久久久中文| 欧美中文字幕在线播放| 亚洲欧美日韩国产成人| 一区二区久久| 一本色道久久综合亚洲精品不 | 免费在线日韩av| 久久久久青草大香线综合精品| 午夜精品三级视频福利| 一区二区三区国产精品| 夜夜嗨av一区二区三区| 日韩视频在线免费观看| 国产伦精品一区二区三区免费| 欧美三级网址| 国产精品久久久久国产精品日日| 欧美日韩日韩| 国产精品成人播放| 国产精品久久久久9999吃药| 欧美性淫爽ww久久久久无| 国产精品久久久91| 国产精品家庭影院| 国产美女搞久久| 国产日韩欧美亚洲一区| 好看不卡的中文字幕| 亚洲国产精品久久精品怡红院| 亚洲国产精品女人久久久| 亚洲黄色免费网站| 99热免费精品| 亚洲欧美日韩精品久久奇米色影视| 亚洲欧美成人网| 久久久久青草大香线综合精品| 欧美~级网站不卡| 欧美日韩在线亚洲一区蜜芽| 国产精品分类| 国产一区二区精品在线观看| 亚洲电影欧美电影有声小说| 日韩一区二区电影网| 欧美亚洲三级| 欧美不卡在线| 国产精品女主播在线观看| 欧美精品一区二区在线观看| 欧美午夜理伦三级在线观看| 激情一区二区三区| 99国产欧美久久久精品| 久久成人一区|