天堂√8在线中文,国产少妇后入,影音先锋99人妻,城中村嫖老熟女88AV

首頁
搜索
歷史搜索
搜索發(fā)現

揭秘modbus通訊協議功能碼

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

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

  TOP 服務器支持的 Modbus 功能碼

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

  根據您從客戶端應用程序讀取或寫入的地址類型(保持寄存器、內部寄存器、輸入線圈或輸出線圈),這將決定 TOP 服務器 Modbus 驅動程序將在對您的實際協議請求中使用哪些特定功能代碼設備。

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

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

  Modbus 功能代碼如何對應尋址

  正如我們上次提到的,當我們談論 Modbus 協議和尋址特定數據位置(或內存類型)時,通常有四種不同類型的 Modbus 地址:

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

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

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

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

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

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

  Modbus 功能代碼 1 (Hex 0x01)

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

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

  Modbus 功能代碼 2 (Hex 0x02)

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

  輸入線圈在 Modbus 設備中是只讀的,因此您會注意到沒有指定用于寫入 1xxxxx 類型地址的功能代碼。

  Modbus 功能代碼 3 (Hex 0x03)

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

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

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

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

  Modbus 功能代碼 4 (Hex 0x04)

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

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

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

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

  Modbus 功能代碼 5 (Hex 0x05)

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

  Modbus 功能代碼 6 (Hex 0x06)

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

Modbus RTU

  Modbus 功能代碼 15 (Hex 0x0F)

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

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

  Modbus 功能代碼 16 (Hex 0x10)

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

  針對這種情況,TOP 服務器 Modbus 驅動程序中還有一個設置,允許您禁用“Modbus 功能 06”,這樣,當禁用時,驅動程序將僅使用 FC 16 對保持寄存器的所有寫入。

  Modbus 功能代碼 22 (Hex 0x16)

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

dam-2222

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

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

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

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

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

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

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

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

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

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

  TOP Server Modbus Suite 驅動程序支持不同內存類型的以下地址范圍:

  持有登記冊 – 400001- 465536

  內部寄存器 – 300001- 365536

  輸入線圈 – 100001- 165536

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

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

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

  Modbus 功能代碼和偏移量在 Modbus 請求中協同工作,以告知設備應返回或修改的特定信息。

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

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

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

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

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

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

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

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

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

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

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

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


聯系銷售
銷售王經理微信 銷售王經理
微信公眾號 微信公眾號
服務熱線
400-6688-400