【轉(zhuǎn)載】modbus-rtu和modbus-tcp和modbus-rtu-Over-tcp/ip

經(jīng)典的modbus協(xié)議幀如圖:


image.png

Modbus-TCP:由TCP頭+地址+PDU組成揍异,
Modbus-RTU:由地址+PDU+CRC校驗(yàn)組成

Modbus的PDU(Protocol Data Unit仁堪,協(xié)議數(shù)據(jù)單元)由功能碼+寄存器地址+寄存器數(shù)量(可選)+寄存器值組成螃宙,PDU在TCP和RTU兩種形式上是相同的墨微。


image.png

說明:
1:Modbus為一問一答協(xié)議,發(fā)送一個(gè)請(qǐng)求后要等待回復(fù)才能發(fā)送第二個(gè)請(qǐng)求辽剧。
2:Modbus-RTU的物理接口為串口排截。
3:Modbus-TCP的物理接口為以太網(wǎng)。
解釋:
因此如果客戶是提供的modbus-rtu協(xié)議挠蛉,那么其實(shí)是需要一個(gè)串口轉(zhuǎn)網(wǎng)絡(luò)的一個(gè)轉(zhuǎn)換模塊(去買這么一個(gè)硬件祭示,也就50多塊錢)(串口轉(zhuǎn)網(wǎng)絡(luò)RJ45轉(zhuǎn)ttl 網(wǎng)口轉(zhuǎn)串口RS232/485),這個(gè)模塊就可以把協(xié)議轉(zhuǎn)為tcp,
但是谴古,
但是质涛,
坑來了,
這個(gè)轉(zhuǎn)換模塊掰担,有可能是硬件原因汇陆,其實(shí)是有坑的,
它會(huì)把串口轉(zhuǎn)為網(wǎng)口带饱,但是數(shù)據(jù)還是傳的modbus-rtu的數(shù)據(jù)毡代,
可以這樣理解,相當(dāng)于外面包了一層modbus-tcp纠炮,但是本質(zhì)還是rtu的數(shù)據(jù)月趟,
那我們可以用網(wǎng)絡(luò)連接(socket,或者nio去建立tcp連接)恢口,但是數(shù)據(jù)傳輸還是用的rtu的數(shù)據(jù)(請(qǐng)求數(shù)據(jù)或者響應(yīng)數(shù)據(jù)都是rtu格式的孝宗,需要進(jìn)行解析)。
真坑呀耕肩。
可能會(huì)有一個(gè)轉(zhuǎn)換的硬件設(shè)備因妇,可以純粹的轉(zhuǎn)為tcp,就是過濾了校驗(yàn)碼這些猿诸,可能是我還不知道吧婚被;

所以:這里就有了三個(gè)協(xié)議:
modbus-rtu:純粹的串口通信
modbus-tcp:TCP網(wǎng)絡(luò)通信
modbus rtu Over tcp/ip:是tcp網(wǎng)絡(luò)通信,但是本質(zhì)上還是rtu梳虽。
modbus仿真軟件就可以看到這三個(gè)協(xié)議:(ModbusSlaveSetup64Bit)

image.png

其中Seria Port就是串口址芯,那用這個(gè)通信的話就是modbus-rtu,

可以使用modbus-rtu連接,例如插入U(xiǎn)SB查看串口谷炸。

image.png

或者自己測試的時(shí)候可以在自己的電腦虛擬兩個(gè)串口北专,工具為(Launch Virtual Serial Port Driver Pro)

image.png

然后modbus tcp/ip,這個(gè)可以用很多工具鏈接了旬陡,很多上位機(jī)軟件(NetAssist)(Modbus Poll)都可以拓颓,程序的話java也提供了很多工具包,(com.digitalpetri.modbus modbus-master-tcp)(或者可以建立socket或者nio鏈接描孟,只不過這個(gè)需要解析格式(報(bào)文頭啊驶睦,校驗(yàn)碼,從機(jī)地址匿醒,功能碼這些))

然后modbus rtu Over tcp/ip : 這個(gè)通信還是 tcp的场航,但是數(shù)據(jù)是rtu的數(shù)據(jù),因此青抛,不能用常規(guī)的modbus-tcp建立鏈接的代碼建立鏈接旗闽,可以采用socket或者nio去建立鏈接酬核,只不過還是要去解析對(duì)應(yīng)的從機(jī)地址蜜另,功能碼,校驗(yàn)位嫡意,數(shù)據(jù)等举瑰。那可以用什么工具去建立鏈接呢,其實(shí)跟modbus-tcp差不多蔬螟,(NetAssist)(Modbus Poll)都可以的此迅;

我這里簡單列舉幾個(gè)例子:

就不用modbus-pull鏈接了,這個(gè)工具很好用旧巾,但是看不到具體發(fā)送的數(shù)據(jù)的細(xì)節(jié)耸序;

1:modbus-rtu-Over-tcp/ip

比如我從機(jī)地址1,兩個(gè)保持寄存器鲁猩,40001是寫入數(shù)據(jù)指令的坎怪,400002是讀取設(shè)備信號(hào)的

image.png

image.png

這里注意選這個(gè);

然后用上位機(jī)鏈接:

image.png

這里為什么要勾選【自動(dòng)發(fā)送校驗(yàn)位】呢廓握?

因?yàn)閞tu數(shù)據(jù)是需要發(fā)送校驗(yàn)位的搅窿,而校驗(yàn)位是需要一個(gè)算法計(jì)算出來的,我就讓這個(gè)軟件自動(dòng)幫我算隙券,如果你自己知道你發(fā)數(shù)據(jù)的校驗(yàn)位男应,那也是可以不用勾選直接自己填也行;

舉例:讀取40001地址的值:slaveId:01娱仔,功能碼03

image.png

舉例:寫入40002地址數(shù)據(jù)沐飘,功能碼06

image.png

解釋下rtu協(xié)議發(fā)送和接受反饋的這個(gè)數(shù)據(jù)格式:

modbus-rtu發(fā)送數(shù)據(jù)的格式:

image.png

modbus-rtu接受反饋信號(hào)的數(shù)據(jù)格式:

image.png

如果用modbus-pull工具的話,更直觀,

image.png

而且發(fā)送數(shù)據(jù)也賊簡單:

image.png

是不是耐朴,這里工具自動(dòng)幫我做了校驗(yàn)碼众弓,功能碼這些封裝,

懂了rtu數(shù)據(jù)格式后隔箍,可以用這個(gè)谓娃,一開始還是建議先用上面的那個(gè),方便加深學(xué)習(xí)蜒滩;

modbus-tcp發(fā)送數(shù)據(jù)的格式:

image.png

其實(shí)tcp除了沒有校驗(yàn)位滨达,跟rtu的區(qū)別就是前面多了這個(gè)報(bào)文頭,

其實(shí)就是5個(gè)0和1個(gè)6俯艰;

而且是不需要勾選CRC校驗(yàn)的捡遍,因?yàn)閠cp不需要校驗(yàn),在報(bào)文頭就會(huì)有校驗(yàn)了竹握;

注意:

image.png

題外話:

1:幾個(gè)寄存器的區(qū)別

離散輸入寄存器 只讀 簡單的開關(guān)量狀態(tài)画株,如是否處于急停
輸入寄存器 只讀 數(shù)值類型的狀態(tài),如系統(tǒng)狀態(tài)啦辐,電量
線圈寄存器 可讀可寫 簡單的開關(guān)量控制谓传,如暫停運(yùn)動(dòng)
保持寄存器 可讀可寫 數(shù)值類型的控制指令,如移動(dòng)到站點(diǎn)/位姿

2:常用的功能碼

0x01: 讀線圈寄存器
0x02: 讀離散輸入寄存器
0x03: 讀保持寄存器
0x04: 讀輸入寄存器

0x05: 寫單個(gè)線圈寄存器
0x06: 寫單個(gè)保持寄存器
0x0f: 寫多個(gè)線圈寄存器
0x10: 寫多個(gè)保持寄存器

這其中有涉及到線圈芹关、離散輸入续挟、保持、輸入四種寄存器侥衬。

Modbus通訊協(xié)議學(xué)習(xí) - 認(rèn)識(shí)篇_pooooong的博客-CSDN博客_modbus通訊協(xié)議學(xué)習(xí)

freemodbus modbus TCP 學(xué)習(xí)筆記_xukai871105的博客-CSDN博客_freemodbus tcp

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诗祸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子轴总,更是在濱河造成了極大的恐慌直颅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怀樟,死亡現(xiàn)場離奇詭異功偿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)漂佩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門脖含,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人投蝉,你說我怎么就攤上這事养葵。” “怎么了瘩缆?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵关拒,是天一觀的道長。 經(jīng)常有香客問我,道長着绊,這世上最難降的妖魔是什么谐算? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮归露,結(jié)果婚禮上洲脂,老公的妹妹穿的比我還像新娘。我一直安慰自己剧包,他們只是感情好恐锦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疆液,像睡著了一般一铅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堕油,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天潘飘,我揣著相機(jī)與錄音,去河邊找鬼掉缺。 笑死卜录,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的攀圈。 我是一名探鬼主播暴凑,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼峦甩,長吁一口氣:“原來是場噩夢啊……” “哼赘来!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凯傲,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤犬辰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后冰单,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幌缝,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年诫欠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涵卵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荒叼,死狀恐怖轿偎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情被廓,我是刑警寧澤坏晦,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響昆婿,放射性物質(zhì)發(fā)生泄漏球碉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一仓蛆、第九天 我趴在偏房一處隱蔽的房頂上張望睁冬。 院中可真熱鬧,春花似錦看疙、人聲如沸痴突。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辽装。三九已至,卻和暖如春相味,著一層夾襖步出監(jiān)牢的瞬間拾积,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工丰涉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拓巧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓一死,卻偏偏與公主長得像肛度,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子投慈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容