當(dāng)前位置:機(jī)電之家首頁(yè) >> PLC技術(shù)>> PLC基礎(chǔ) >> 現(xiàn)場(chǎng)總線 >> modbus協(xié)議使用常見(jiàn)問(wèn)題分析
modbus協(xié)議使用常見(jiàn)問(wèn)題分析

modbus協(xié)議最初由modicon公司開(kāi)發(fā)出來(lái),是針對(duì)設(shè)備設(shè)計(jì)的基于串行總線的主從模式的應(yīng)用層總線設(shè)備協(xié)議。modbustcp是封裝在tcp包內(nèi)的modbus協(xié)議,雖然有一些變化,但是根本上還是主從模式。

隨著嵌入式技術(shù)的發(fā)展,國(guó)內(nèi)很多系統(tǒng)的控制和采集單元部分為公司自主研發(fā),一般建議這些公司的串行通訊協(xié)議采用modbus協(xié)議,很多用戶(hù)在modbus協(xié)議存在著理解錯(cuò)誤,現(xiàn)在分析如下:

一、modbus的保持和輸入寄存器是以word(16bit)為單位的。

比如4****(保持寄存器/輸出寄存器)和3****(輸入寄存器)是以字為單位的。所以,如果讀40001寄存器開(kāi)始的一個(gè)16位的無(wú)符號(hào)數(shù),那么返回2個(gè)byte,并可以從40002開(kāi)始讀下一個(gè)16位的無(wú)符號(hào)數(shù)。

但是,如果讀40001寄存器開(kāi)始的一個(gè)32位浮點(diǎn)數(shù),那么,返回4個(gè)byte,而且,下一個(gè)32位浮點(diǎn)數(shù)必須從40003開(kāi)始。

常見(jiàn)問(wèn)題:

1)、將40001定義為一個(gè)byte的數(shù)據(jù);

2)、將40001定義為32位浮點(diǎn)數(shù),40002為下一個(gè)32位浮點(diǎn)數(shù)。

二、寄存器最小地址為1,而報(bào)文起始地址為0。

在數(shù)據(jù)報(bào)文中,所有的modbus地址都是從0開(kāi)始的。也就是首次出現(xiàn)的數(shù)據(jù)項(xiàng)在報(bào)文中的地址為0。比如:

1.在控制器中,“線圈1”在modbus報(bào)文的地址域中的地址為00 00。

2.線圈127的十六進(jìn)制報(bào)文地址為007e hex(十進(jìn)制的126)

3.保持寄存器40001的報(bào)文地址為00 00。因?yàn)閳?bào)文功能碼明確要操作“保持寄存器”,所以,協(xié)議就以“4xxxx”代表這個(gè)寄存器。

4.保持寄存器40108的報(bào)文地址為006b hex (十進(jìn)制107)

總之,modbus地址一般指4****(保持寄存器/輸出寄存器)和3****(輸入寄存器),這時(shí)應(yīng)用層面的:

比如設(shè)備說(shuō)明書(shū)可以簡(jiǎn)要說(shuō)明設(shè)備支持modbus rtu標(biāo)準(zhǔn)協(xié)議,并詳細(xì)描述其地址對(duì)應(yīng)關(guān)系為:40001 -- 模擬量采集通道1,16位有符號(hào)數(shù),.....。比如組態(tài)軟件的地址設(shè)置,一般為輸出寄存器,從地址1開(kāi)始,連續(xù)多少個(gè)?;蛘咧该?00001:16位有符號(hào)數(shù)。但是,在數(shù)據(jù)報(bào)文層面,寄存器起始地址從0開(kāi)始。

數(shù)據(jù)報(bào)文包括:設(shè)備地址+功能碼+起始地址+寄存器個(gè)數(shù)+校驗(yàn)位。其中,起始地址是從0開(kāi)始的。

舉例說(shuō)明:從設(shè)備17讀40001開(kāi)始的2個(gè)寄存器數(shù)據(jù)的報(bào)文

設(shè)備地址 功能碼 起始地址 寄存器個(gè)數(shù) 校驗(yàn)

11 03 00 00 00 02 --

常見(jiàn)問(wèn)題:

1、使用和定義40000地址;

2、分析報(bào)文時(shí),直接將報(bào)文起始地址當(dāng)作應(yīng)用層寄存器地址。

3、modbus的寫(xiě)寄存器命令的不同。

常用modbus寄存器有:線圈(coil)、輸入(bbbbb)、保持寄存器(holding registers)和輸入寄存器(bbbbb registers)。

從modbus設(shè)備角度看,輸入是上位機(jī)采集modbus設(shè)備的信息,也就是這些寄存器是只讀的,所以,modbus協(xié)議沒(méi)有寫(xiě)輸入(bbbbb)和輸入寄存器(bbbbb registers)的命令。

線圈(coil)是狀態(tài)量,對(duì)應(yīng)modbus設(shè)備的開(kāi)關(guān)量輸出(do),保持寄存器(holding registers)是模擬量,對(duì)應(yīng)modbus設(shè)備模擬量輸出(ao),這些寄存器需要modbus設(shè)備的上位機(jī)進(jìn)行設(shè)置,也就是為可以寫(xiě)的寄存器。

在modicon_modbus協(xié)議 協(xié)議中,寫(xiě)線圈(coil)和保持寄存器(holding registers)都有兩種寫(xiě)命令:

1)、寫(xiě)單個(gè)寄存器:

置單線圈(force single coil)功能碼05(0x05)

寫(xiě)單個(gè)寄存器(preset single holding register)功能碼06(0x06)

2)、寫(xiě)多個(gè)寄存器

寫(xiě)多線圈(force multiple coils)功能碼15(0x0f)

寫(xiě)多個(gè)寄存器(preset multiple registers)功能碼16(0x10)

作者:未知 點(diǎn)擊:1009次 [打印] [關(guān)閉] [返回頂部]
本文標(biāo)簽:modbus協(xié)議使用常見(jiàn)問(wèn)題分析
* 由于無(wú)法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報(bào)酬未能及時(shí)支付,在此深表歉意,請(qǐng)《modbus協(xié)議使用常見(jiàn)問(wèn)題分析》相關(guān)權(quán)利人與機(jī)電之家網(wǎng)取得聯(lián)系。
電子樣本

SN系列樣冊(cè)
:鞏經(jīng)理
:13915946763
:南京塞姆泵業(yè)有限公司
個(gè)人求購(gòu)

吳小姐 【求購(gòu)】  粉碎機(jī)  2025-12-5
 【求購(gòu)】  冶煉用的重...  2025-12-5
柳女士 【求購(gòu)】  斷路器  2025-12-5
林志揚(yáng) 【求購(gòu)】  無(wú)石棉墊片  2025-12-4
張一帆 【求購(gòu)】  首件測(cè)試儀  2025-12-4
王飛 【求購(gòu)】  gf流量計(jì)  2025-12-4
 【求購(gòu)】  全自動(dòng)印刷...  2025-12-4
 【求購(gòu)】  LED屏  2025-12-3
VIP公司推薦