什么是Modbus

什么是Modbus

1. Modbus如何工作

Modbus是通過設備之間的幾根連線來傳遞數據,最簡單的設置就是主站和從站之間用一跟串口線相連。數據通過一串0或者1來傳遞,也就是位。0為正電壓,1為負電壓。位數據傳遞速度非常快,常見的傳輸速度為9600波特(即9600bits/s).

DB9.gif

volts.gif

2. 標準Modbus怎么存儲數據

信息存儲在從站的四個不同的表中。兩個表存儲數字量,稱為線圈;兩個表存儲模擬量,稱為寄存器。線圈和寄存器分別有一個只讀,另一個可讀寫。每個表可存儲9999個值。線圈是一位的,地址從0000到270E;寄存器是一個字的(16位,2字節)地址也是從0000到270E.

Coil/Register NumbersData AddressesTypeTable Name
1-99990000 to 270ERead-WriteDiscrete Output Coils
10001-199990000 to 270ERead-OnlyDiscrete Input Contacts
30001-399990000 to 270ERead-OnlyAnalog Input Registers
40001-499990000 to 270ERead-WriteAnalog Output Holding Registers

線圈/寄存器編號可以看做是位置的名字,它們不出現在實際發送的信息當中,數據地址(Data Address)出現在實際發送的信息中。

舉個例子,第一個Holding Register的編號為40001,數據地址為0000.這兩個數字的區別在于偏移量。

3. 什么是從站ID

在網絡中,每一個從機分配一個唯一的設備地址,從1到247.當主機請求數據時,發送的信息的第一個字節就是從機地址,這樣,從機接收到第一個字節后就知道是否忽略信息。

4. 什么是功能碼

主機發送的第二個字節就是功能碼。這個功能碼告訴從機需要訪問哪個表,是向這個表中寫數據還是讀數據。

Fun CodeActionTable Name
01(01 hex)ReadDiscrete Output Coils
05(05 hex)Write singleDiscrete Output Coil
15(0F hex)Write multipleDiscrete Output Coils
02(02 hex)ReadDiscrete Input Contacts
04(04 hex)ReadAnalog Input Registers
03(03 hex)ReadAnalog Output Holding Registers
06(06 hex)Write singleAnalog Output Holding Register
16(10 hex)Write multipleAnalog Output Holding Registers

5. 什么是CRC

CRC即循環冗余校驗碼(Cyclic Redundancy check),是在每一個發送的信息后面加上的兩字節,用于檢驗發送和接受是否出錯。信息中的每一個字節都用于計算CRC。接受設備同時計算CRC,然后與發送方計算的CRC進行比較,如果兩者不同,則產生錯誤。

6. Modbus發送指令和回應的格式

Modbus發送指令和回應的格式

Data AddressesReadWrite SingleWrite Multiple
Discrete Output Coils 0xxxxFC01FC05FC15
Discrete Input Contacts 1xxxxFC02NANA
Analog Input Registers 3xxxxFC04NANA
Analog Output Holding Registers 4xxxxFC03FC06FC16

注:FC表示Function Code

eg1.
數據請求:
11 01 0013 0025 0E84
11: 從機地址 (0x11 = 17 )
01: 功能碼01(讀線圈狀態)
0013: 線圈首地址(0x0013=19,+1偏移量=#20線圈)
0025: 要讀的線圈數 (0x25 = 37, 20~56 )
0E84: CRC校驗和
回應
11 01 05 CD6BB20E1B 45E6
11: 從機地址 (0x11 = 17 )
01: 功能碼01(讀線圈狀態)
05:后面的字節數(37/8=5字節)
CD:線圈27 - 20 (1100 1101)
6B: 線圈35 - 28 (0110 1011)
B2: 線圈43 - 36 (1011 0010)
0E: 線圈51 - 44 (0000 1110)
1B: 3空格和線圈56 - 52 (0001 1011)
45E6: CRC校驗和

其他例子與此類似,不再贅述。

參考資料:simplyModbus

轉載于:https://www.cnblogs.com/zhengkang/p/4891131.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375528.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375528.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375528.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

博客剛剛開通!

今天老賊開播了!以后請大家多多關照! 轉載于:https://www.cnblogs.com/xiaosayi/p/4065313.html

Android實例-拍攝和分享照片、分享文本(XE8+小米2)

結果: 1.分享文本不好使,原因不明。有大神了解的,請M我,在此十分感謝。 2.如果想支持圖片編輯,將Action事件的Editable改為True。 相關資料: 官網地址:http://docwiki.embarcadero.com/RADStudi…

go語言 expected ; found a

錯誤代碼,這是一段測試go語言類型轉換的代碼 package type_testimport "testing"type MyInt int64func TestImplicit(t *testing.T) {var a int32 1var b int64 3b (int64)avar c MyInt 4// c bt.Log(a, b, c) }報錯代碼 b (int64)a改正 b int6…

win8 metro 調用攝像頭拍攝照片并將照片保存在對應的位置

剛剛做過這類開發&#xff0c;所以就先獻丑了&#xff0c;當然所貼上的源代碼都是經過驗證過的&#xff0c;已經執行成功了&#xff0c;希望能夠給大家一些借鑒&#xff1a; 以下是metro UI代碼&#xff1a; <Pagex:Class"Camera.MainPage"xmlns"http://sche…

poj 3678 Katu Puzzle(2-sat)

Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a boolean operator op (one of AND, OR, XOR) and an integer c (0 ≤ c ≤ 1). One Katu is solvable if one can find each vertex Vi a value Xi (0 ≤ Xi ≤ 1) suc…

go 語言 first argument to append must be slice

錯誤代碼 func TestSliceGrowing(t *testing.T) {s : [4]int{1, 2, 3, 4}for i :0; i<10; i {s append(s, i)t.Log(len(s), cap(s))} }報錯代碼 s append(s, i)原因&#xff1a;append的第一個參數必須是切片 更正 func TestSliceGrowing(t *testing.T) {s : []int{1,…

豆瓣網靜態頁面

divcss網站登錄注冊豆瓣讀書視頻 音樂同城小組閱讀 豆瓣FM東西更多豆瓣視頻 影訊&購票電視劇排行榜 分類影評預告片 向后向前3/5正在熱映全部正在熱映>>即將上映 烈日灼心 4.7終結者&#xff1a;創世紀... 4.7百團大戰 4.7刺客&#xff1a;聶隱娘 4.7近期熱門更多影視…

C++并發編程實戰(豆瓣評分5.4)

評分已說明一切&#xff0c;切勿踩坑&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 推薦的翻譯 C并發編程實戰 關注公眾號回復【C并發編程實…

Please use boost/bind/bind.hpp + using namespace boost::placeholders

The practice of declaring the Bind placeholders (_1, _2, …) in the global namespace is deprecated. Please use <boost/bind/bind.hpp> using namespace boost::placeholders, or define BOOST_BIND_GLOBAL_PLACEHOLDERS to retain the current behavior. 提示w…

奔跑吧,兄弟

10月底的時候&#xff0c;不能忍受老婆的奚落&#xff0c;開始了我的跑步計劃。 說說&#xff0c;跑步需要注意的事項&#xff0c;首先你得有雙跑步鞋&#xff0c;我有一次是穿了薄底鞋跑的&#xff0c;結果&#xff0c;打滿了水泡。跑步前控制飲水&#xff0c;最好在飲食后2個…

2299 Ultra-QuickSort(歸并)

合并排序第一次。連環畫看著合并看著別人的博客的想法。http://poj.org/problem?id2299 #include <stdio.h> #include <stdlib.h>#define MAX 500001int n,a[MAX], t[MAX]; long long int sum;//歸并 void Merge(int l, int m, int r) {int p0;int il, jm1;while…

由openSession、getCurrentSession和HibernateDaoSupport淺談Spring對事物的支持

由openSession、getCurrentSession和HibernateDaoSupport淺談Spring對事物的支持 Spring和Hibernate的集成的一個要點就是對事務的支持&#xff0c;openSession、getCurrentSession都是編程式事務&#xff08;手動設置事務的提交、回滾&#xff09;中重要的對象&#xff0c;Hi…

【tool】沒有需求文檔的時候如何來設計測試用例

沒有需求文檔的時候如何來設計測試用例 1.根據客戶的功能點整理測試需求追朔表&#xff1a; 一般的客戶都要把要開發軟件的功能點寫成一個表格交給市場部&#xff0c;讓市場部門轉交研發部。所以客戶的功能點是編寫測試用例一個最最重要的依據。 2.根據開發人員的Software Spec…

go返回多個值和python返回多個值對比

go package mulVals_test import "testing" func returnMultiValues(n int)(int, int){return n1, n2 }func TestReturnMultiValues(t *testing.T) {// a : returnMultiValues(5)// 這里嘗試用一個值接受多個返回值&#xff0c;將編譯錯誤a, _ : returnMultiValues(…

努力學習 HTML5 (3)—— 改造傳統的 HTML 頁面

要了解和熟悉 HTML5 中的新的語義元素&#xff0c;最好的方式就是拿一經典的 HTML 文檔作例子&#xff0c;然后把 HTML5 的一些新鮮營養充實進入。如下就是我們要改造的頁面&#xff0c;該頁面很簡單&#xff0c;只包含一篇文章。 ApocalypsePage_Original.html&#xff0c;這是…

判斷系統是大端還是小段

大端&#xff1a;高位內存存儲低序字節小端&#xff1a;高位內存存儲高序字節short a 0x0102&#xff0c;其中 01 高序字節&#xff0c; 02 低序字節 #include<stdio.h>int main() {union {short s;char c[sizeof(short)];} un;un.s 0x0102;if (sizeof(short) 2) {if…

手機頁面head中的meta元素

<meta http-equiv"Pragma" content"no-cache"> <meta http-equiv"expires" content"0"> <meta http-equiv"cache-control" content"no-cache"> 清除瀏覽器中的緩存&#xff0c;它和其它幾句合起…

Delphi 關鍵 重啟 注銷

//在初始化的時候獲取權限 varhToken: THandle;Tkp: TTokenPrivileges;Zero: DWORD;beginOpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES orTOKEN_QUERY, hToken);LookupPrivilegeValue(nil, SeShutdownPrivilege, Tkp.Privileges[0].Luid);Tkp.PrivilegeCou…

C語言判斷系統是32位還是64位

long 在 32 位系統中是 4 字節&#xff0c;與 int 表示范圍相同&#xff0c;在 64 位系統中是 8 字節。 #include <stdio.h> #include <stdlib.h> #include <limits.h>int main() {long a INT_MAX;if (a 1 < 0) {printf("32: %ld\n", a);} e…

使用Eclipse搭建Struts2框架

本文轉自http://blog.csdn.net/liaisuo/article/details/9064527 今天在Eclipse搭建了Struts2 框架&#xff0c;并完成了一個很簡單的例子程序。 搭建好的全局圖如下: 第一步:在http://struts.apache.org/download.cgi下載Struts2的最新版即下載Full Distribution&#xff0c;這…