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

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

3天內不再提示

modbus入門教程 Modbus協議節點講解之【EsDA應用】Modbus應用詳解

AGk5_ZLG_zhiyua ? 來源:ZLG致遠電子 ? 作者:ZLG致遠電子 ? 2023-07-18 11:55 ? 次閱讀
Modbus作為一種公開、免費的現場總線,被廣泛應用于工業電子領域。本文基于EsDA開發平臺,為您詳細介紹Modbus主機功能節點的使用方式,以及如何快速實現讀取Modbus從機數據。 84a6e468-251d-11ee-962d-dac502259ad0.jpgModbus簡介Modbus是一種串行通信協議,由于其公開、免費、易于部署和維護的優點,被廣泛應用于工業電子領域,并且已經成為工業領域通信協議的業界標準。以往我們在使用Modbus協議進行應用開發時,通常需要自己實現諸多的Modbus功能碼,或者移植開源的第三方庫,這個過程往往比較費時費力,耽誤項目的進展。基于EsDA設計的Modbus主機功能節點,可以通過簡單的拖拽、連線方式,快速實現讀取Modbus從機數據,搭配其他功能節點,可以快速搭建出一個集數據采集上報、遠程控制于一體的物聯網應用。 84a6e468-251d-11ee-962d-dac502259ad0.jpgModbus相關節點介紹

目前和Modbus主機相關的節點主要有6個,分別是modbus_master_rtu、modbus_master_in、modbus_master_dynamic_in、modbus_master_out、modbus_parse_in和modbus_parse_out節點。其中,modbus_master_rtu節點屬于配置節點,用于配置Modbus通信設備的參數信息,該節點提供了Modbus RTU和Modbus TCP的主機通信服務;modbus_master_in和modbus_master_dynamic_in是Modbus的輸入節點,主要用于讀取從機設備的線圈量和寄存器數據;modbus_master_out是數據的輸出節點,用于寫線圈量和寄存器;modbus_parse_in和modbus_parse_out是擴展的Modbus功能節點,一般用來對輸入/輸出數據進行處理。

8504b32c-251d-11ee-962d-dac502259ad0.jpgmodbus_master_rtu節點

Modbus主機的配置節點,用于配置與Modbus主機通信的從設備的通信參數,提供了Modbus RTU和Modbus TCP主機功能。該節點需要和對應的功能節點搭配使用,不會在畫布中顯示。

1. 屬性

modbus_master_rtu節點包含了RTU和TCP兩種模式的配置,不同模式需要設置的屬性不同。

1.1RTU模式配置屬性

8523dcac-251d-11ee-962d-dac502259ad0.png
  • 名稱 :節點名稱,用于索引查找本節點;
  • 顯示名稱:用于畫布上顯示的名稱;
  • 傳輸類型:用于設置鏈路層的傳輸模式(rtu/tcp可選);
  • 串口設備名:用于與從設備通信的串口設備名;
  • 波特率:串口波特率參數;
  • 數據位:串口數據位參數;
  • 校驗位:串口奇偶校驗位參數;
  • 停止位:串口停止位參數;
  • 響應時間:從機應答超時時間,單位ms;
  • 最大請求數量:用于配置Modbus主機讀寫請求的最大數量。
1.2 TCP模式配置屬性
8545a530-251d-11ee-962d-dac502259ad0.png
  • IP地址:從機設備(服務器)的IP地址;
  • 端口:從機設備的端口號;
  • 響應時間:從機應答超時時間,單位ms;
  • 最大請求數量:用于配置Modbus主機讀寫請求的最大數量。

2. 使用方法

該節點的使用依附于modbus_master_in、modbus_master_dynamic_in以及modbus_master_out等節點,使用時選擇對應的通信模式,根據從機信息配置相應的配置屬性即可。

8504b32c-251d-11ee-962d-dac502259ad0.jpgmodbus_master_in節點

modbus_master_in是Modbus的輸入節點,主要用于讀取從機設備的線圈量和寄存器數據并輸出給消費者節點。其輸出是原始數據的緩沖區,后續可連接modbus_parse_in節點對數據進行處理。

1. 屬性

857a709e-251d-11ee-962d-dac502259ad0.png
  • 主機參數配置:輸入節點依賴modbus_master_rtu節點,選擇對應的配置節點即可;
  • 讀取模式:選擇節點的觸發方式,可選擇以用戶設定的輸出周期定時向消費者節點輸出數據;也可根據輸入的信息(來自push節點)進行數據讀取并輸出;
  • 從機ID:從機設備的ID地址;
  • 輸出周期:用于周期讀取模式設置讀取和輸出的周期;
  • 寄存器地址:需要被讀取的寄存器/線圈的起始地址;
  • 讀取數量:需要讀取的寄存器/線圈數量;
  • 寄存器類型:用于選擇讀取目標的類型,可選線圈量、離散量、輸入寄存器、保持寄存器。

2. 輸入

該節點屬于pump類型節點,一般不需要數據輸入,但可以使用push節點來實現數據輸入。
  • slaveID:從機設備的ID地址;
  • address:需要被讀取的寄存器/線圈的起始地址;
  • reg_num:需要讀取的寄存器/線圈數量;
  • reg_type:需要讀取的寄存器/線圈類型。

3. 輸出

  • slaveID:從機設備的ID地址,通常用于后級節點區分設備;
  • address:讀取的寄存器起始地址;
  • reg_num:讀取到的寄存器/線圈數量;
  • payload:緩沖區,存儲讀取到的數據;
  • payloadLength:讀取到的數據長度;
  • poll_result:指明讀取是否成功;

4.使用方法

這里我們借助ZC1平臺和一個RS485型的溫濕度變送器來說明節點的使用方法。按照下圖所示分別給ZC1開發板和傳感器供電,并連接好RS485的A、B兩線。85b04ab6-251d-11ee-962d-dac502259ad0.png
4.1 添加節點
添加modbus_master_in、modbus_parse_in、fscript以及log節點到畫布上并連接節點。

864075c8-251d-11ee-962d-dac502259ad0.png

4.2 配置節點

雙擊modbus_master_in節點打開屬性配置面板。

86691e10-251d-11ee-962d-dac502259ad0.png

選擇“添加新的modbus_master_rtu節點”,進入配置主機參數面板。

86915dbc-251d-11ee-962d-dac502259ad0.png

根據實際情況配置完相應的參數后,點擊添加,回到modbus_master_in節點配置界面。86b47d2e-251d-11ee-962d-dac502259ad0.png可以看到已經創建了一個新的主機參數配置,同時配置讀取模式為周期讀取,從機ID、輸出周期、寄存器地址等參數按照實際設備進行配置 。然后雙擊modbus_parse_in節點打開屬性配置面板,對modbus_parse_in進行轉換規則設置。86d2183e-251d-11ee-962d-dac502259ad0.png這里我們選擇多地址轉換模式,分別對溫度和濕度兩個寄存器進行轉換,因此轉換數量設置為2,轉換類型設置為16位。接下來設置modbus_parse_in節點的后級節點fscript,主要是對后續的打印信息進行格式化。由于modbus_parse_in節點的輸出payload是array型對象,這里我們可以通過fscript的內置方法array_get來獲取數據。fscript的內容如下:
a=msg.payload
msg.payload = "溫度:"+array_get(a,0)/10 +",濕度:"+array_get(a,1)/10
4.3 下載驗證

連接好硬件,通過下載接口下載流圖進行驗證。

86eb19ce-251d-11ee-962d-dac502259ad0.png

通過調試面板可以看到讀回的溫濕度數據。8700ea6a-251d-11ee-962d-dac502259ad0.png ?8504b32c-251d-11ee-962d-dac502259ad0.jpgmodbus_master_dynamic_in節點

modbus_master_dynamic_in同樣是Modbus的輸入節點,與modbus_master_in的區別是:modbus_master_dynamic_in節點是filter類型的節點,其根據前級節點輸入的信息向從機設備讀取數據,并輸出給消費者節點。

1. 屬性

873af5f2-251d-11ee-962d-dac502259ad0.png

  • 傳輸類型:用于設置鏈路層的傳輸模式(rtu/tcp可選);
  • 主機參數配置:輸入節點依賴modbus_master_rtu節點,和使用modbus_master_in節點時一樣,選擇對應的配置節點即可;

2. 輸入

  • slaveID:從機設備的ID地址;
  • address:待讀取的寄存器的起始地址;
  • reg_num:待讀取的寄存器的數量;
  • reg_type:待讀取寄存器的類型。

3. 輸出

  • slaveID:從機設備的ID地址;
  • address:待讀取的寄存器的起始地址;
  • reg_num:讀取到的寄存器的數量;
  • payload:數據緩沖區,存儲讀取到的數據;
  • payloadLength:讀取到的數據長度;
  • poll_result:指明讀取是否成功。

3. 使用方式

8758ffb6-251d-11ee-962d-dac502259ad0.pngmodbus_master_dynamic_in節點一般是由fscript節點指明需要讀取的從機設備的信息,節點本身只需要創建并配置相應的主機即可。對于modbus_master_dynamic_in的輸出緩沖區,我們同樣使用modbus_parse_in節點進行處理。

在fscript中指明讀取內容時,只需提供以下信息:

msg.slaveID = 1
msg.address = 0
msg.reg_num = 2
msg.reg_type = 4
8504b32c-251d-11ee-962d-dac502259ad0.jpgmodbus_master_out節點

modbus_master_out節點是Modbus的輸出節點,用于寫線圈量和寄存器。

1. 屬性

8796ba54-251d-11ee-962d-dac502259ad0.png
  • 主機參數配置:輸出節點依賴modbus_master_rtu節點,選擇對應的配置節點即可;
  • 從機ID:待寫入的從機設備ID地址;
  • 錯誤重試次數:發送錯誤情況下的重試次數;
  • 寄存器類型:待寫入寄存器的類型。

2. 輸入

  • slaveID:從機設備的ID地址,如果輸入中包含此參數,則忽略屬性中的地址;
  • address:待寫入的寄存器的起始地址;
  • reg_num:待寫入的寄存器的數量;
  • payload:寫入緩沖區,存儲待寫入的數據,一般由modbus_parse_out輸入;
  • payloadLength:寫入緩沖區的字節長度。

3. 輸出

modbus_master_out節點是sink類型的節點,一般沒有輸出。

4. 使用方法

87bed6ba-251d-11ee-962d-dac502259ad0.png

modbus_master_out節點通常由modbus_parse_out節點進行輸入。使用時和modbus_master_in一樣創建一個主機配置,指明待寫入設備的ID地址以及寄存器類型即可。

其中,modbus_parse_out節點的輸入一般來自fscript節點,我們可以在fscript中借助array對象完成數據輸入。比如我們需要將從機地址為1的設備的寄存器0設置為2,我們只需在fscript中添加如下內容:

var a = array_create();
array_isert(a,0,2);


msg.payload = a;
msg.slaveID = 1;
msg.address = 0;

8504b32c-251d-11ee-962d-dac502259ad0.jpgmodbus_parse_in節點

Modbus輸入數據的轉換節點,這個節點一般用于接收Modbus輸入節點的原始數據,將其轉換成單個value或者array對象,以便于后續處理。

1. 屬性

87f0bc2a-251d-11ee-962d-dac502259ad0.png
  • 數據轉換模式:可以選擇對輸入中的單個地址的數據進行轉換,也可以選擇對指定數量的寄存器、或者對輸入的所有地址進行轉換;
  • 轉換地址:選擇單個寄存器轉換時,填寫需要轉換的寄存器地址;
  • 數據轉換起始地址:選擇轉換多個寄存器時,指明轉換的起始地址;
  • 轉換數量:選擇轉換多個寄存器時,指明轉換數量;
  • 數據轉換類型:選擇按照哪種類型對數據進行轉換;
  • 大小端選擇:大小端系統選擇;
  • 數據主題:數據地址的主題(可選)。

2. 輸入

modbus_parse_in的輸入來自modbus_master_in或modbus_master_dynamic_in節點。
  • slaveID:從機設備的ID地址;
  • address:上一級節點讀取的寄存器起始地址;
  • reg_num:上一級節點讀取到的寄存器數量;
  • payload:數據緩沖區指針,存儲讀取到的數據;
  • payloadLength:讀取到的字節數據長度;
  • poll_result:上一級節點讀取數據是否成功。

3. 輸出

  • slaveID:從機設備ID地址;
  • address:轉換單個寄存器時,指示數據的寄存器地址;在轉換多個寄存器模式下,指示起始的寄存器的地址;
  • payloadType:指示緩沖區的類型是value還是array;
  • payload:轉換后的數據緩沖區,在轉換單個寄存器時,payload的類型是value,可直接讀??;當轉換多個寄存器時,payload是個array對象,可以使用rbuffer進行讀??;
  • topic:屬性中設定的數據主題;
  • poll_result:上一級節點讀取數據是否成功。

4. 使用方法

modbus_parse_in節點使用時需要指定轉換的模式、待轉換的寄存器地址和數量、待轉換寄存器的數據類型以及系統的大小端模式。

88192f70-251d-11ee-962d-dac502259ad0.png

作為filter類型節點,modbus_parse_in通常是從modbus_master_in節點獲取輸入。其輸出有兩種類型,在轉換單個寄存器時,payload的類型是value,可以直接讀取。884939a4-251d-11ee-962d-dac502259ad0.png當轉換多個寄存器時,payload是個array對象,可以在fscript中通過array對象的方法進行處理。88630834-251d-11ee-962d-dac502259ad0.png其中,array對象的使用方式如下:
a = msg.payload


print("濕度 " + array_get(a, 0))
print("溫度 " + array_get(a, 1))

8504b32c-251d-11ee-962d-dac502259ad0.jpgmodbus_parse_out節點

modbus_parse_out節點通常用于將fscript節點輸出的value或array對象轉換成Modbus標準的十六進制格式,后續可以將相應的數據指針傳入Modbus的輸出節點modbus_master_out進行使用。

1. 屬性

88973064-251d-11ee-962d-dac502259ad0.png
  • 寄存器起始地址:指明需要modbus_master_out寫入的寄存器的起始地址,如果節點的輸入不包含msg.address,則使用此屬性指向的地址;
  • 大小端:系統大小端模式選擇;
  • 主題:如果設定了主題,則節點只處理屬于自己的主題消息。

2. 輸入

  • slaveID:從機設備ID地址;
  • address:待寫入的寄存器起始地址;
  • payload:待寫入的值,可以是value類型,也可以是array對象;
  • topic:輸入的數據主題,如果本節點設置了主題屬性,則只有輸入的主題與節點的主題屬性匹配,節點才會對下一節點輸出;

3. 輸出

  • slaveID:從機設備ID地址;
  • address:待寫入的寄存器的起始地址;
  • reg_num:待寫入的寄存器的數量;
  • payload:轉換后的Modbus標準十六進制數組緩沖區指針;
  • payloadLength:數組緩沖區的字節長度。

4. 使用方法

modbus_parse_out節點的前級通常是fscript,使用時在fscript中指明待寫入的從機設備ID地址、并傳遞構建好的array對象即可。其后級節點一般是modbus_master_out節點,通過modbus_master_out節點將數據寫入目標設備。

88aca4d0-251d-11ee-962d-dac502259ad0.png

其中,在fscript中構建array對象的方法如下:
a = array_create();
array_insert(a, 0, u16(1))
array_insert(a, 1, u16(2))
array_insert(a, 2, u16(3))


output.payload = a;
output.slaveID = 10;
output.address = 0;

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

    關注

    28

    文章

    1472

    瀏覽量

    75826
  • 現場總線
    +關注

    關注

    3

    文章

    514

    瀏覽量

    38415
  • ESDA
    +關注

    關注

    0

    文章

    27

    瀏覽量

    7467
  • 串行通信協議

    關注

    0

    文章

    16

    瀏覽量

    7595
  • 致遠電子
    +關注

    關注

    13

    文章

    398

    瀏覽量

    31101

原文標題:【EsDA應用】Modbus應用詳解

文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Modbus庫開發筆記十一:關于Modbus協議棧開發的說明

    `對于Modbus協議棧的整個開發內容,前面已經說得很清楚了,接下來我們說明一下與開發沒有直接關系的內容。首先,關于我為什么開發這個協議棧的問題。我們的初衷只是想能夠在開發產品時不用每次都重寫這一
    發表于 08-27 20:32

    modbus協議講解modbus-rtu以及modbus-tcp協議詳解

    modbus協議講解modbus-rtu以及modbus-tcp協議詳解,見附件。
    發表于 03-01 10:14

    什么是Modbus協議?如何寫穩定的Modbus代碼?

    什么是Modbus協議?Modbus協議有哪些分類?使用Modbus時有哪些注意事項?如何寫穩定的Modbus代碼?
    發表于 07-02 06:54

    modbus協議筆記

    1 Modbus協議概要? Modbus通信協議由Modicon公司(現在的施耐德電氣Schneider Electric)于1979年為可編程邏輯控制(即PLC)通信而發表。目前,Modbu
    發表于 07-02 07:17

    Modbus協議是什么?Modbus協議主要有哪些應用?

    請問一下Modbus協議是什么?Modbus協議主要有哪些應用?
    發表于 07-15 12:04

    Modbus協議的特點是什么

    Modbus協議的特點是什么?Modbus協議有哪幾類功能碼?
    發表于 09-26 08:13

    Modbus協議地址與協議層次

    Modbus協議地址是什么意思?Modbus協議層次有何優勢?
    發表于 09-28 06:27

    Modbus協議是什么

    Modbus協議是什么?MODBUS功能碼有哪些?MODBUS協議有哪幾種傳輸模式?
    發表于 09-29 07:06

    Modbus是什么?Modbus協議有哪些優點

    Modbus是什么?Modbus協議有哪些優點?Modbus協議包括哪些?
    發表于 09-30 08:40

    LabVIEW編程LabVIEW開發Modbus協議講解

    LabVIEW編程LabVIEW開發Modbus協議講解Modbus是一種工業協議,于1979年開發,旨在實現自動化設備之間的通信。 Modbus
    發表于 01-25 20:23

    Modbus協議的理解

    系統的兼容,最好采用通用的通訊協議。   我們可以Modbus協議進行修改,使之能使用在自己的系統中。Modbus協議包括ASCII、RTU、TCP等,并沒有規定物理層。此協議定義了控
    發表于 05-05 16:47

    EsDA應用】Modbus應用詳解

    Modbus作為一種公開、免費的現場總線,被廣泛應用于工業電子領域。本文基于EsDA開發平臺,為您詳細介紹Modbus主機功能節點的使用方式,以及如何快速實現讀取
    的頭像 發表于 03-10 21:50 ?747次閱讀

    EsDA應用】Modbus應用詳解

    Modbus作為一種公開、免費的現場總線,被廣泛應用于工業電子領域。本文基于EsDA開發平臺,為您詳細介紹Modbus主機功能節點的使用方式,以及如何快速實現讀取
    的頭像 發表于 03-18 10:16 ?630次閱讀
    【<b class='flag-5'>EsDA</b>應用】<b class='flag-5'>Modbus</b>應用<b class='flag-5'>詳解</b>

    modbus協議功能碼分類 modbus協議功能碼是什么,有什么作用

    Modbus協議是一種用于工業領域常見的通信協議,它基于主從結構,用于在不同設備之間實現數據交換。Modbus協議的功能碼是決定數據交換類型和操作的重要部分。下面將詳細介紹Modbus協議
    的頭像 發表于 01-31 14:47 ?2676次閱讀

    Modbus協議網關是什么?Modbus協議網關的功能

    Modbus協議網關是一種專門用于工業自動化環境中的網絡設備,其主要功能是實現不同通信協議之間的轉換,尤其是將基于Modbus協議的設備或系統與使用其他協議的設備、控制系統或信息系統連
    的頭像 發表于 04-11 15:51 ?263次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>