波多野结衣无码一区,久久久噜噜噜久久中文免费,亚洲性爱一区二区免费看,久久国产国内精品国语对白

首頁
視頻
讓中國物聯(lián)網(wǎng)領(lǐng)先世界
搜索
歷史搜索
搜索發(fā)現(xiàn)

揭秘modbus通訊協(xié)議功能碼

2023-01-13 09:27:25| 來源:聚英電子| | 0

  對于使用 Modbus 作為其通信協(xié)議的各種設(shè)備,您會發(fā)現(xiàn)關(guān)于如何訪問這些設(shè)備中不同類型的數(shù)據(jù)的許多不同的解釋、術(shù)語和標簽。有時,設(shè)備手冊可能僅提及支持的 Modbus 功能代碼以及這些功能代碼可用的偏移范圍。聚英電子逐步介紹 Modbus 功能代碼的細節(jié)以及它們與尋址的關(guān)系,以及它們?nèi)绾斡绊懺?Wonderware 應(yīng)用程序的 TOP Server 中使用的地址。

  TOP 服務(wù)器支持的 Modbus 功能碼

  Modbus 中的功能代碼 (FC) 是 Modbus 請求中使用的特定代碼,用于告訴 Modbus 從設(shè)備訪問哪種類型的內(nèi)存(即保持寄存器、輸入線圈等)以及對該內(nèi)存執(zhí)行什么操作(即讀取或?qū)懽?。下表列出了TOP Server Modbus Suite中包含的所有 Modbus 驅(qū)動程序用于通信的特定 Modbus 功能代碼:

  根據(jù)您從客戶端應(yīng)用程序讀取或?qū)懭氲牡刂奉愋?保持寄存器、內(nèi)部寄存器、輸入線圈或輸出線圈),這將決定 TOP 服務(wù)器 Modbus 驅(qū)動程序?qū)⒃趯δ膶嶋H協(xié)議請求中使用哪些特定功能代碼設(shè)備。

  TOP 服務(wù)器 Modbus 驅(qū)動程序中還有一些特殊設(shè)置,可以為設(shè)備中的不同 Modbus 實現(xiàn)提供更大的靈活性,我們將在稍后介紹。

  而且,雖然我們不會在這篇文章中詳細介紹,但 TOP 服務(wù)器中的 Modbus 靈活性更進一步,它支持特定非標準驅(qū)動程序中的 Modbus 變體,例如Enron Modbus、OMNI Flow、Lufkin ELAM、Honeywell UDC和甚至是基于 Yaskawa Memobus 的驅(qū)動程序。

  Modbus 功能代碼如何對應(yīng)尋址

  正如我們上次提到的,當我們談?wù)?Modbus 協(xié)議和尋址特定數(shù)據(jù)位置(或內(nèi)存類型)時,通常有四種不同類型的 Modbus 地址:

  保持寄存器——具有讀/寫訪問權(quán)限的 16 位(模擬)地址 (4xxxxx)

  內(nèi)部寄存器——具有只讀訪問權(quán)限的 16 位(模擬)地址 (3xxxxx)

  輸入線圈——具有只讀訪問權(quán)限的 1 位(布爾)地址 (1xxxxx)

  輸出線圈——具有讀/寫訪問權(quán)限的 1 位(布爾)地址 (0xxxxx)上次我們還討論了很多設(shè)備文檔并不總是根據(jù)地址類型(例如 4xxxx 或保持寄存器)提供 Modbus 地址的詳細列表。

  因此,由于我們正在更深入地討論 Modbus 功能代碼,因此我們必須根據(jù)特定地址的內(nèi)存類型以及它是否可以讀取和寫入或只能讀取來討論 Modbus 地址從。

  這兩個因素決定了向設(shè)備發(fā)送請求時將使用哪個 Modbus 功能代碼。 讓我們討論每個功能代碼及其執(zhí)行的相應(yīng)地址和功能:

  Modbus 功能代碼 1 (Hex 0x01)

  當請求讀取一個或多個(一次最多 2000 個)輸出線圈或 0xxxxx 類型的離散/布爾地址時,TOP 服務(wù)器使用此功能代碼。

  輸出線圈是讀/寫訪問 - 您將在列表的下方看到對功能代碼 5 和 15 的支持。

  Modbus 功能代碼 2 (Hex 0x02)

  當請求讀取多個(一次最多 2000 個)輸入線圈或 1xxxxx 類型離散/布爾地址中的一個時,TOP 服務(wù)器使用此功能代碼。

  輸入線圈在 Modbus 設(shè)備中是只讀的,因此您會注意到?jīng)]有指定用于寫入 1xxxxx 類型地址的功能代碼。

  Modbus 功能代碼 3 (Hex 0x03)

  當請求讀取一個或多個(一次最多 125 個)保持寄存器或 4xxxxx 類型的模擬地址時,TOP 服務(wù)器使用此功能代碼。

  也可以使用功能代碼 3 訪問保持寄存器中的各個位,只需在末尾附加一個 .x 語法,其中 x 表示您希望讀取的寄存器中的位(即 400001.0 將訪問保持寄存器偏移 1 中的位 0) .

  因為保持寄存器是大多數(shù)支持 Modbus 的設(shè)備中最常支持的內(nèi)存類型,所以 Modbus 功能代碼 3 可能是使用最廣泛的功能代碼。

  并且保持寄存器是讀/寫訪問 - 因此您將在列表的下方看到對功能代碼 6 和 16 的支持。

  Modbus 功能代碼 4 (Hex 0x04)

  當請求讀取一個或多個(一次最多 125 個)內(nèi)部寄存器或 3xxxxx 類型的模擬地址時,TOP 服務(wù)器使用此功能代碼。

  與保持寄存器一樣,也可以使用功能代碼 4 *u,e, 300004.2 訪問內(nèi)部寄存器中的各個位 1) - 稍后繼續(xù)閱讀以獲取基于 1 與 0 的位尋址的信息寄存器內(nèi)。

  與輸入線圈一樣,內(nèi)部寄存器在 Modbus 設(shè)備中是只讀的,因此您不會看到指定用于寫入 3xxxxxx 類型地址的功能代碼。

  筆記: 是的,如果您注意到,F(xiàn)C 3 用于訪問 4xxxxx 地址,F(xiàn)C 4 用于訪問 3xxxxx 地址,就像 FC 1 訪問 0xxxxx 和 FC 2 訪問 1xxxxx 地址一樣——這些不是印刷錯誤。

  Modbus 功能代碼 5 (Hex 0x05)

  此功能代碼由 TOP 服務(wù)器在寫入單個輸出線圈 (0xxxxx) 時使用 - 也稱為“強制”線圈。

  Modbus 功能代碼 6 (Hex 0x06)

  此功能代碼由 TOP 服務(wù)器在寫入單個保持寄存器 (4xxxxx) 時使用 - 也稱為“預(yù)置”寄存器。

Modbus RTU

  Modbus 功能代碼 15 (Hex 0x0F)

  此功能代碼由 TOP 服務(wù)器在寫入(強制)多個輸出線圈 (0xxxxx) 時使用?,F(xiàn)在,某些設(shè)備僅支持 FC 15 對輸出線圈進行單次和多次寫入的情況并不少見。

  為了解決這種情況,TOP 服務(wù)器 Modbus 驅(qū)動程序在設(shè)備設(shè)置中有一個特殊設(shè)置,用于禁用“Modbus 功能 05” - 當禁用時,驅(qū)動程序?qū)H使用 FC 15 對輸出線圈的所有寫入。

  Modbus 功能代碼 16 (Hex 0x10)

  此功能代碼由 TOP 服務(wù)器在寫入(預(yù)設(shè))多個保持寄存器 (4xxxxx) 時使用。與 FC 15 一樣,設(shè)備制造商僅支持 FC 16 以對保持寄存器進行單次和多次寫入的情況并不少見 - 這是一種更便宜的實施方式,只需添加對一個與兩個功能代碼的支持。

  針對這種情況,TOP 服務(wù)器 Modbus 驅(qū)動程序中還有一個設(shè)置,允許您禁用“Modbus 功能 06”,這樣,當禁用時,驅(qū)動程序?qū)H使用 FC 16 對保持寄存器的所有寫入。

  Modbus 功能代碼 22 (Hex 0x16)

  此功能專門用于單個事務(wù)中保持寄存器 (4xxxxx) 中的位寫入 - 默認情況下,在 TOP 服務(wù)器的 Modbus 驅(qū)動程序設(shè)備屬性中禁用它,因為許多 Modbus 設(shè)備不支持 FC 22、選擇代替支持另一種方法。

dam-2222

  另一種方法是默認和最常用的方法,即對保持寄存器中的位執(zhí)行讀/修改/寫操作。

  在此方法中,當客戶端應(yīng)用程序請求寫入保持寄存器位時,會發(fā)生以下情況:

  正如您可能已經(jīng)猜到的那樣,這種常用方法存在一些風(fēng)險,特別是如果您的 Modbus 設(shè)備中的寄存器值經(jīng)常更改 - 執(zhí)行讀取/修改/寫入操作可能會將位更改為不正確的狀態(tài),如果它們之前已更改操作完成所需的時間。

  例如,假設(shè)我們正在對 400001 的第 1 位執(zhí)行讀取/修改/寫入操作。如果第 2 位在操作開始時為“on”,但在寫入之前已切換為“off”,則它將是再次錯誤地“打開”。

  FC 22 旨在通過直接修改保持寄存器中的各個位來避免這種風(fēng)險,而周圍的位保持不變。問題是 FC 22 只有在實際的 Modbus 從設(shè)備實現(xiàn)了對 FC 22 的支持時才能使用,而這種情況通常并非如此。

  因此,請務(wù)必確認您的設(shè)備是否真的支持 FC 22 - 如果支持,您可以在 TOP 服務(wù)器的 Modbus 驅(qū)動程序的設(shè)備屬性中啟用“Holding Register Bit Writes”。

  TOP 服務(wù)器將對整個寄存器執(zhí)行 FC 3 讀取

  然后驅(qū)動程序只修改有問題的位(這會改變該保持寄存器的 16 位值的整體值)

  然后使用 FC 6 或 16 將修改后的 16 位值寫回 Modbus 從設(shè)備(取決于您的設(shè)備支持什么以及根據(jù)剛才描述的特殊設(shè)置啟用什么)。因此,該函數(shù)確定正在訪問哪種類型的內(nèi)存以及它是讀操作還是寫操作。但是功能代碼與 Modbus 請求中的其他信息一起使用,包括所謂的偏移量。

  偏移尋址如何與 Modbus 功能代碼一起使用

  TOP Server Modbus Suite 驅(qū)動程序支持不同內(nèi)存類型的以下地址范圍:

  持有登記冊 – 400001- 465536

  內(nèi)部寄存器 – 300001- 365536

  輸入線圈 – 100001- 165536

  輸出線圈 – 000001- 065536所以我們支持所有內(nèi)存類型的偏移量 1 到 65,536。但什么是偏移量?

  我通常解釋偏移量的方式是,您必須查看地址的第一個數(shù)字(即 4、3、1 或 0)來告訴驅(qū)動程序訪問哪種類型的內(nèi)存。第一個數(shù)字之后的所有內(nèi)容都是偏移量 - 您在該內(nèi)存類型中感興趣的特定內(nèi)存地址。

  Modbus 保持寄存器偏移Modbus 文件說:TOP 服務(wù)器說它支持:400140000140001400001

  Modbus 功能代碼和偏移量在 Modbus 請求中協(xié)同工作,以告知設(shè)備應(yīng)返回或修改的特定信息。

  什么是 Modbus 從零與從一的尋址?

  在討論基于偏移的 Modbus 尋址時,最后一個重要的細節(jié)是設(shè)備是否支持基于零或一的尋址。最初,從零開始的尋址是 Modbus 的預(yù)期實現(xiàn)方式。但是,隨著時間的推移和 Modbus 作為一種開放協(xié)議被如此廣泛地采用,某些設(shè)備制造商采用了一種稱為 one-based 尋址的概念。

  從零開始的尋址涉及從零開始的內(nèi)存類型的第一個偏移量。因此,例如,如果您請求保持寄存器 400001,則實際的 Modbus 協(xié)議請求將為偏移量 0 的 FC 3。而 400002 將請求偏移量 1 的 FC 3,依此類推。

  正如您可以想象的那樣,這可能會令人困惑。因此,一些制造商采用了一種稱為基于一的尋址的實現(xiàn)方式。對于從 1 開始的尋址,偏移量與實際地址請求對齊。例如,如果您請求保持寄存器 1,則該請求仍然使用 FC 3,但用于偏移量 1。而 400002 將請求 FC 3 用于偏移量 2,依此類推。它更加“用戶友好”。

  但是,由于有些設(shè)備支持從零開始尋址,而有些設(shè)備支持從一開始的尋址,因此了解這一點很重要。TOP 服務(wù)器 Modbus 驅(qū)動程序有一個可配置的設(shè)置,用于指定您的 Modbus 從設(shè)備支持的實現(xiàn)。

  “基于零的尋址”的默認設(shè)置已啟用,因為這是 Modbus 規(guī)范的默認設(shè)置。將此設(shè)置切換為禁用將導(dǎo)致驅(qū)動程序使用基于 1 的尋址。始終確保您使用的是正確的設(shè)置,否則意味著顯示的值可能是您設(shè)備中的錯誤地址。

  例如,如果您讀取 400001 的值,并且與您期望的值相比,它是“錯誤”值,請查看它是否是 400001 旁邊的寄存器的值。如果是,您需要從 1 交換為從零開始尋址(反之亦然)。

  此外,還有基于 1 或基于 0 的位尋址。默認情況下,TOP Server Modbus 驅(qū)動程序也支持從零開始的位尋址,因為它是 Modbus 規(guī)范的默認設(shè)置。這意味著位的尋址范圍為 0 到 15。

  基于 1 的位尋址意味著位從 1 到 16 尋址——同樣,對于計算 16 位的人來說,這感覺更自然。而且,TOP Server Modbus 驅(qū)動程序有一個可配置的設(shè)置,這取決于您的設(shè)備支持什么。

  與偏移尋址一樣,在 TOP Server 中選擇的位尋址方法必須與您的設(shè)備支持的匹配 - 否則,如果不正確,您將訪問的位值將用于錯誤的位。該設(shè)置應(yīng)為 0-15 位訪問啟用,或應(yīng)為 1-16 位訪問禁用。

  始終查閱制造商的文檔或與制造商交談以確定他們支持的方法。如果您注意到某位“開啟”但應(yīng)該“關(guān)閉”(反之亦然),您可能需要切換此設(shè)置。

  正如您所看到的,Modbus 有很多怪癖,因為它是一個如此完善和廣泛使用的開放協(xié)議。一個靈活的 Modbus 主站,如 TOP 服務(wù)器,提供了一系列可配置的設(shè)置(包括交換字節(jié)、字和雙字排序,將在以后的文章中介紹)以與最廣泛的 Modbus 從站實現(xiàn)一起工作,無論制造商如何,以獲得最大的兼容性。


聯(lián)系銷售
銷售王經(jīng)理微信 銷售王經(jīng)理
微信公眾號 微信公眾號
服務(wù)熱線
400-6688-400