關(guān)于Modbus通信的相關(guān)知識(shí)比較零碎,此處對(duì)查找到的知識(shí)點(diǎn)從理論
,通信協(xié)議
、使用方法
方面進(jìn)行整理。
值得學(xué)習(xí)的博文:Modbus及調(diào)試用軟件介紹;Modbus協(xié)議和上位機(jī)應(yīng)用開(kāi)發(fā)介紹
1. Modbus通信理論
1.1 Modbus通信特點(diǎn)
- Modbus是一種第三方公開(kāi)協(xié)議,采用主從結(jié)構(gòu),主控設(shè)備房稱(chēng)為Modbus Master,從設(shè)備方稱(chēng)為Modbus Slave。
- Modbus物理接口可以選用串口:RS232、RS485、RS422,也可以采用以太網(wǎng)口。
- 采用串口或者以太網(wǎng)口對(duì)應(yīng)的Modbus協(xié)議是不一樣的,使用串口通訊,對(duì)應(yīng)的是Modbus RTU或者M(jìn)odbus ASCII協(xié)議,使用網(wǎng)口的對(duì)應(yīng)的是Modbus TCP協(xié)議。
- Modbus通信遵循以下過(guò)程:主設(shè)備向從設(shè)備發(fā)送請(qǐng)求,從設(shè)備分析并處理主設(shè)備的請(qǐng)求,然后向主設(shè)備發(fā)送結(jié)果,如果出現(xiàn)任何差錯(cuò),從設(shè)備都會(huì)返回一個(gè)異常的功能碼。
- Modbus工作方式是請(qǐng)求和應(yīng)答,每一次都是主設(shè)備發(fā)送指令,可以是廣播或是向特定從站的單播,從站響應(yīng)指令并按要求應(yīng)答或者報(bào)告異常,當(dāng)主站不發(fā)送請(qǐng)求的時(shí)候,從站是不會(huì)自己發(fā)送數(shù)據(jù)的。
- 從站與從站之間是不能直接通信,只能主站對(duì)從站發(fā)送請(qǐng)求,從站響應(yīng)主站的請(qǐng)求。
- 上述關(guān)于Modbus通信過(guò)程不一定準(zhǔn)確,由于具有TCP/IP棧協(xié)議,通常在Modbus TCP通訊的上位機(jī)開(kāi)發(fā)中,上位機(jī)是作為客戶(hù)端,控制器作為服務(wù)器。
Modbus TCP使用基于客戶(hù)端-服務(wù)器的模式,其中 客戶(hù)端是發(fā)送請(qǐng)求的設(shè)備,服務(wù)器是響應(yīng)請(qǐng)求的設(shè)備 ??蛻?hù)端發(fā)送稱(chēng)為"Modbus報(bào)文"的請(qǐng)求到服務(wù)器,服務(wù)器對(duì)請(qǐng)求進(jìn)行解析并返回相應(yīng)的數(shù)據(jù)。這種模式允許多個(gè)客戶(hù)端同時(shí)與服務(wù)器通信。
-20230920
下圖是關(guān)于西門(mén)子1200PLC既能做客戶(hù)端又能做服務(wù)器,這需要具體情況分析
西門(mén)子1200PLC使用ModbusTCP通訊時(shí),1200PLC可以做客戶(hù)端主站,也可以做服務(wù)器從站,做客戶(hù)端時(shí)主動(dòng)請(qǐng)求連接并發(fā)送命令,做服務(wù)器時(shí)被動(dòng)等待連接并反饋狀態(tài)
客戶(hù)端在PLC程序中使用MB_CLIENT指令,服務(wù)器在PLC程序中使用MB_SERVER指令。
- Modbus通信是以報(bào)文形式進(jìn)行,由于Modbus協(xié)議分為Modbus RTU、Modbus ASCII協(xié)議、Modbus TCP協(xié)議也就對(duì)應(yīng)有三種報(bào)文
1.2 存儲(chǔ)區(qū)概念及范圍
1.2.1 存儲(chǔ)區(qū)概念
Modbus通信協(xié)議有4個(gè)存儲(chǔ)區(qū):輸出線(xiàn)圈
、輸入線(xiàn)圈
、輸入寄存器
、保持寄存器(也被稱(chēng)為輸出寄存器)
- 線(xiàn)圈:對(duì)應(yīng)PLC中bool量,1位,輸入線(xiàn)圈相當(dāng)于PLC的輸入點(diǎn),輸出線(xiàn)圈相當(dāng)于PLC的輸出點(diǎn)(存放bool量)
- 寄存器:一個(gè)寄存器占1個(gè)字長(zhǎng)度即2個(gè)字節(jié)(存放數(shù)據(jù))
1.2.2 存儲(chǔ)區(qū)范圍
存儲(chǔ)區(qū)范圍:5位標(biāo)準(zhǔn)地址 6位擴(kuò)展地址(可能在變頻器上出現(xiàn))
輸出線(xiàn)圈 代號(hào)0 00001-09999 000001-065536 可讀可寫(xiě):類(lèi)比可以用PLC程序讀寫(xiě)輸出線(xiàn)圈
輸入線(xiàn)圈 代號(hào)1 10001-19999 100001-165536 只讀:類(lèi)比PLC的I點(diǎn),不能寫(xiě)
輸入寄存器 代號(hào)3 30001-39999 300001-365536 只讀
保持寄存器 代號(hào)4 40001-49999 400001-465536 讀寫(xiě)
輸入線(xiàn)圈和輸入寄存器對(duì)應(yīng)PLC的什么區(qū)呢?
沒(méi)有什么關(guān)系
具體硬件的數(shù)據(jù)保存在輸入寄存器還是保持寄存器中,需要看手冊(cè)
1.3 功能碼
Modbus報(bào)文中包含了Modbus功能碼,功能碼及含義如下所示:(因?yàn)閷W(xué)習(xí)資源來(lái)自于2部分,因此可能會(huì)重復(fù))
主站想要訪(fǎng)問(wèn)從站的什么數(shù)據(jù),就要使用對(duì)應(yīng)的功能碼去訪(fǎng)問(wèn),然后再加上從站對(duì)應(yīng)的站號(hào)地址,數(shù)據(jù)的起始地址,點(diǎn)位數(shù)量,就組成了一條Modbus報(bào)文。
1.4 Modbus通訊協(xié)議和TCP/UDP協(xié)議的區(qū)別
為了便于理解Modbus通訊協(xié)議和TCP/UDP協(xié)議的區(qū)別,關(guān)于OSI參考模型和TCP/IP參考模型的簡(jiǎn)介如下圖:
實(shí)際上OSI七層模型中 應(yīng)用層,表示層,會(huì)話(huà)層,對(duì)應(yīng)的都是四層模型中的應(yīng)用層,因?yàn)閼?yīng)用層、表示層、會(huì)話(huà)層三個(gè)層次提供的服務(wù)相差不是很大,所以都給他合并了。
而數(shù)據(jù)鏈路層和物理層都是歸屬于網(wǎng)絡(luò)接口層,又稱(chēng)之為鏈路層。這是因?yàn)閿?shù)據(jù)鏈路層和物理層的內(nèi)容相差不多,所以在TCP/IP協(xié)議中它們被歸并在網(wǎng)絡(luò)接口層(鏈路層)一個(gè)層次里。
-
Modbus協(xié)議屬于應(yīng)用層(OSI模型第7層)協(xié)議,TCP/UDP協(xié)議屬于傳輸層(OSI模型第4層)協(xié)議,兩者層級(jí)不是并列關(guān)系。
打個(gè)比喻,Modbus協(xié)議就像公司里的總經(jīng)理,TCP/UDP協(xié)議就像公司里的轎車(chē)、商務(wù)車(chē)。某天總經(jīng)理要到機(jī)場(chǎng)去乘飛機(jī),他可以選擇:1)自己開(kāi)轎車(chē)去,2)讓司機(jī)開(kāi)商務(wù)車(chē)送去,3)搭的士/公交車(chē)過(guò)去。若選擇1),那就是總經(jīng)理-轎車(chē)的關(guān)系,Modbus TCP協(xié)議就形同這種關(guān)系。若選擇3),就形同另外的Modbus RTU/ASCII協(xié)議的關(guān)系。
-
Modbus協(xié)議是一種已廣泛應(yīng)用于當(dāng)今工業(yè)控制領(lǐng)域的通用通訊協(xié)議。通過(guò)此協(xié)議,控制器相互之間、或控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))可以和其它設(shè)備之間進(jìn)行通信。Modbus協(xié)議使用的是主從通訊技術(shù),即由主設(shè)備主動(dòng)查詢(xún)和操作從設(shè)備。一般將主控設(shè)備方所使用的協(xié)議稱(chēng)為Modbus Master,從設(shè)備方使用的協(xié)議稱(chēng)為Modbus Slave。典型的主設(shè)備包括工控機(jī)和工業(yè)控制器等;典型的從設(shè)備如PLC可編程控制器等。Modbus通訊物理接口可以選用串口(包括RS232和RS485),也可以選擇以太網(wǎng)口。
-
而Modbus TCP協(xié)議則是在RTU協(xié)議上加一個(gè)MBAP報(bào)文頭,由于TCP是基于可靠連接的服務(wù),RTU協(xié)議中的CRC校驗(yàn)碼就不再需要,所以在Modbus TCP協(xié)議中是沒(méi)有CRC校驗(yàn)碼,用一句比較通俗的話(huà)說(shuō)就是:Modbus TCP協(xié)議就是Modbus RTU協(xié)議在前面加上五個(gè)0以及一個(gè)6,然后去掉兩個(gè)CRC校驗(yàn)碼字節(jié)就OK.雖然這句話(huà)說(shuō)得不是特別準(zhǔn)確,但是也基本上把RTU與TCP之間的區(qū)別說(shuō)得比較清楚了。
下文將介紹Modbus TCP和Modbus RTU兩種協(xié)議。
2. Modbus TCP通信協(xié)議
Modbus TCP報(bào)文格式舉例如下:
2.1 01功能碼讀線(xiàn)圈:
- 事務(wù)處理標(biāo)識(shí):
00 01
,相當(dāng)于報(bào)文的序號(hào),可以是任意的數(shù)字,不會(huì)影響報(bào)文的意義 - 協(xié)議標(biāo)識(shí):默認(rèn)
00 00
即可,也是一個(gè)沒(méi)有意義的數(shù)字 - 報(bào)文長(zhǎng)度:固定為6,指的是報(bào)文長(zhǎng)度這兩個(gè)字節(jié)后總共有6個(gè)字節(jié)
- 單元標(biāo)識(shí):
01
表示訪(fǎng)問(wèn)1號(hào)站,對(duì)應(yīng)下面的"Device ID" - 功能碼:
01
讀線(xiàn)圈,使用1號(hào)功能碼 - 起始地址:從
00 00
開(kāi)始讀 - 寄存器個(gè)數(shù):讀8個(gè)線(xiàn)圈
2.1.1 使用“網(wǎng)絡(luò)調(diào)試助手”模擬Modbus TCP客戶(hù)端,
2.1.2 使用MODSIM模擬Modbus TCP服務(wù)器
使用MODSIM來(lái)模擬Modbus TCP服務(wù)器,軟件的使用參考:【工具使用】Modsim32軟件使用詳解;ModSim基本使用(Modbus模擬器)
下圖顯示已經(jīng)連接上:Address:0001指起始地址為1號(hào)地址即第一個(gè)線(xiàn)圈,Length:8是指對(duì)應(yīng)有8個(gè)線(xiàn)圈
發(fā)送上面第一條指令后,返回如下:
回文格式請(qǐng)參考Modbus TCP通信詳解及仿真第2節(jié)
此案例中返回如下:
當(dāng)把第二個(gè)寄存器也改為1之后,返回的數(shù)據(jù)為03
,這是16進(jìn)制的,對(duì)應(yīng)的二進(jìn)制就是0011
2.2 “03”功能碼讀保持寄存器
- 單元標(biāo)識(shí):
09
表示訪(fǎng)問(wèn)9號(hào)站 - 功能碼:
03
讀保持寄存器 - 起始地址:從
00 06
開(kāi)始讀 - 寄存器個(gè)數(shù):讀2個(gè)寄存器
保持寄存器對(duì)應(yīng)的Modbus的地址是40001開(kāi)始和寄存器的對(duì)應(yīng)關(guān)系如下:
上述報(bào)文的含義是讀4007-4008寄存器,對(duì)應(yīng)的服務(wù)器端可以就是如下圖,設(shè)置兩個(gè)寄存器的值為“00011”和“00020”(十進(jìn)制的值)
發(fā)送報(bào)文之后得到的如下圖:代表9號(hào)站回復(fù)的內(nèi)容
2.3 “0F”功能碼寫(xiě)多個(gè)線(xiàn)圈
寫(xiě)的報(bào)文和上面讀的報(bào)文格式是不一樣的
- 單元標(biāo)識(shí):
23
表示訪(fǎng)問(wèn)十六進(jìn)制23號(hào)站(即十進(jìn)制35號(hào)站),對(duì)應(yīng)下面的"Device ID" - 功能碼:
0F
寫(xiě)多個(gè)線(xiàn)圈 - 起始地址:從
00 00
開(kāi)始寫(xiě) - 寄存器個(gè)數(shù):寫(xiě)十六進(jìn)制的10個(gè)線(xiàn)圈,也就是十進(jìn)制的16個(gè)線(xiàn)圈
- 寫(xiě)入數(shù)據(jù)字節(jié)數(shù):
02
表示寫(xiě)入的數(shù)據(jù)占用2個(gè)字節(jié) - 寫(xiě)入數(shù)據(jù):由于線(xiàn)圈是位元件,也就是二進(jìn)制的,十六進(jìn)制的
FF
轉(zhuǎn)換為二進(jìn)制1111 1111 1111 1111
,也就是16位全部置為1
發(fā)送過(guò)去之后16個(gè)線(xiàn)圈全部置為1
返回報(bào)文如下:
14 32 00 00 00 06 23 0F 00 00 00 10
00 00
表示訪(fǎng)問(wèn)的起始地址;00 10
表示訪(fǎng)問(wèn)16位
將上面的寫(xiě)入的數(shù)據(jù)改為:00 02
,因?yàn)镸odbus報(bào)文是高字節(jié)在前,對(duì)應(yīng)第2個(gè)字節(jié)開(kāi)始的第2個(gè)線(xiàn)圈,也就是第二個(gè)字節(jié)的“0000 0010”(8位中的第二位為1),即得到服務(wù)器端得到如下:
2.4 “10”功能碼寫(xiě)多個(gè)保持寄存器
- 單元標(biāo)識(shí):
32
表示訪(fǎng)問(wèn)十六進(jìn)制32號(hào)站(即十進(jìn)制50號(hào)站),對(duì)應(yīng)下面的"Device ID" - 功能碼:
10
寫(xiě)多個(gè)保持寄存器 - 起始地址:從
00 00
開(kāi)始寫(xiě) - 寄存器個(gè)數(shù):寫(xiě)十六進(jìn)制的3個(gè)線(xiàn)圈也就是4001-4003這三個(gè)
- 寫(xiě)入數(shù)據(jù)字節(jié)數(shù):
06
表示寫(xiě)入的數(shù)據(jù)占用6個(gè)字節(jié) - 寫(xiě)入數(shù)據(jù):
0C BA 2F 0F 1D 9B
,0C BA
寫(xiě)給4001,1D 9B
寫(xiě)給4003
發(fā)送報(bào)文的結(jié)果和回復(fù)的報(bào)文內(nèi)容如下圖:
以上就是對(duì)于Modbus TCP報(bào)文格式的講解。
3. Modbus RTU通信協(xié)議
3.1 Modbus RTU特點(diǎn)
ModbusRTU與ModbusASCII 在報(bào)文數(shù)據(jù)發(fā)送格式上幾乎一樣,但也存在一些區(qū)別,具體體現(xiàn)在:
-
ModbusASCII 有開(kāi)始字符(:)和結(jié)束符(CR LF),可以作為一幀數(shù)據(jù)開(kāi)始和結(jié)束的標(biāo)志,而ModbusRTU沒(méi)有這樣的標(biāo)志,需要用時(shí)聞間隔來(lái)判斷一幀報(bào)文的開(kāi)始和結(jié)束。協(xié)議規(guī)定的時(shí)間為3.5 個(gè)字符周期,就是說(shuō)一幀報(bào)文開(kāi)始前,必須有大于3.5 個(gè)字符周期的空閑時(shí)間,一幀報(bào)文結(jié)束后,也必須要有 3.5 個(gè)字符周期的空閑時(shí)間否則會(huì)出現(xiàn)粘包的情況。
注意:針對(duì) 3.5 個(gè)字符周期,其實(shí)是一個(gè)具體時(shí)間,但是這個(gè)時(shí)間跟波特率相關(guān),在串口通信中,1 個(gè)字符包括 1位起始位,8 位數(shù)據(jù)位(一般情況), 1位校驗(yàn)位上(或者沒(méi)有),1位停止位(一般情況下)。因此1 個(gè)字符包括 11個(gè)位,那么3.5 個(gè)字符就是38.5 個(gè)位,波特率表示的含義是每秒傳輸?shù)亩M(jìn)制位的個(gè)位,因此如果是 9600 波特率,3.5 個(gè)字符周期=1000/9600*38.5=4.01ms -
兩者校驗(yàn)方式不同,ModbusRTU 是CRC 循環(huán)冗余校驗(yàn),ModbusASCII是LCR 縱向冗余校驗(yàn)
-
在 Modbus 標(biāo)準(zhǔn)中,RTU 是必須要求的,ASCII 是可選項(xiàng),即作一個(gè) Modbus 通值設(shè)備可以是支持RTU,也可以支持RTU和ASCII,但不能只支持ASII
3.2 Modbus RTU報(bào)文的格式
ModbusRTU/ASII 報(bào)文格式: 從站地址 (1byte) +功能碼 (1byte) +數(shù)據(jù)(N byte) +校驗(yàn) (2 byte)
對(duì)于讀?。?br> 站地址:要找誰(shuí)?一個(gè)網(wǎng)絡(luò)中每一個(gè)從站設(shè)備都需要有自己的站地址,而且不能重復(fù)
功能碼:要干什么?
數(shù)據(jù):具體要怎么干?
校驗(yàn):其前面的內(nèi)容的校驗(yàn)
下圖為將會(huì)介紹的Modbus RTU報(bào)文的舉例
3.2.1 “1”號(hào)功能碼:讀線(xiàn)圈(輸出線(xiàn)圈)
- 站地址:
01
,占1個(gè)字節(jié) - 功能碼:
01
,占1個(gè)字節(jié) - 寄存器地址:寄存器的起始地址
00 00
,2個(gè)字節(jié) - 寄存器數(shù)量:
00 08
讀取的線(xiàn)圈數(shù)量 - CRC校驗(yàn)碼:根據(jù)其前面的報(bào)文計(jì)算得到,CRC的計(jì)算方法這里不做介紹,一些串口調(diào)試助手可以自動(dòng)計(jì)算得出
3.2.1.1 采用虛擬串口模擬串口硬件連接
仍然使用“Modsim”來(lái)進(jìn)行模擬,利用“串口調(diào)試助手”進(jìn)行模擬。硬件連接上可以有兩種方式:
- 兩根USB轉(zhuǎn)串口的線(xiàn)相連連接到同一臺(tái)電腦,打開(kāi)兩個(gè)串口線(xiàn)生成的COM口,軟件上連接對(duì)應(yīng)的COM口
- 利用虛擬串口軟件,創(chuàng)建兩個(gè)相互連接的虛擬串口
此處采用虛擬串口的軟件,創(chuàng)建一對(duì)相互連接的虛擬串口,虛擬創(chuàng)建COM1
和COM3
聯(lián)通
其他地方截到的軟件全名信息
創(chuàng)建好后去電腦的設(shè)備管理器中去確認(rèn),可以看到COM1
和COM3
相互聯(lián)通
在“串口調(diào)試助手”和“Modsim”中進(jìn)行如下設(shè)置
此處講解說(shuō)“串口調(diào)試助手”是作為主站而“Modsim”作為從站,但我覺(jué)得是講反了,需要后期再研究
發(fā)送上述報(bào)文之后得到的返回結(jié)果如下:
01 01 00 00 00 08 3D OC
01 01 01 21 91 90
返回的報(bào)文分析:01
站地址;01
功能碼;01
是指讀回?cái)?shù)據(jù)21
的字節(jié)計(jì)數(shù),代表一個(gè)字節(jié);21
返回?cái)?shù)據(jù),對(duì)應(yīng)的二進(jìn)制為0010 0001
,可以看到是與Modsim中第1和第6個(gè)線(xiàn)圈為1是對(duì)應(yīng)的,所以讀取的數(shù)據(jù)沒(méi)有問(wèn)題;91 90
是CRC校驗(yàn)碼,可以不用看
3.2.2 “2”號(hào)功能碼:讀離散量輸入(輸入線(xiàn)圈)
離散量輸入也就是開(kāi)關(guān)量輸入,報(bào)文各部分含義基本上與上面的一致
發(fā)送和返回的報(bào)文內(nèi)容如下圖所示:
06 02 00 00 00 10 78 71
06 02 02 23 80 14 E8
報(bào)文返回2個(gè)字節(jié)數(shù)據(jù),23 80
,高字節(jié)在前23
對(duì)應(yīng)二進(jìn)制0010 0011
,與10001-10008位對(duì)應(yīng),80
對(duì)應(yīng)的二進(jìn)制為1000 0000
也是與10009-100016的值是對(duì)應(yīng)的
3.2.3 “3”號(hào)功能碼讀保持寄存器
串口設(shè)備是不停的發(fā)設(shè)備,只需要不停接受就可以,但是Modbus協(xié)議的形式是一發(fā)一回的,發(fā)對(duì)的話(huà)就回。
3.2.4 “4”號(hào)功能碼:讀輸入寄存器
報(bào)文各部分含義基本上與上面的一致
發(fā)送和返回的報(bào)文內(nèi)容如下圖所示:
20 04 00 00 00 06 76 B9
20 04 0C 00 0B 00 0C 00 00 00 00 00 00 0F FF 41 38
返回的報(bào)文分析:20
站地址;04
功能碼;0C
是指讀回?cái)?shù)據(jù)的字節(jié)計(jì)數(shù),代表12個(gè)字節(jié);
一個(gè)寄存器對(duì)應(yīng)2個(gè)字節(jié)即1個(gè)字,00 0B
表示第一個(gè)寄存器值為十進(jìn)制11、00 0C
表示第二個(gè)寄存器的值為十進(jìn)制的12、0F FF
表示第6個(gè)寄存器的值為十進(jìn)制的4095;41 38
是CRC校驗(yàn)碼,可以不用看
3.2.5 “5”號(hào)功能碼:寫(xiě)單個(gè)線(xiàn)圈
此處因?yàn)槭菃蝹€(gè)線(xiàn)圈,只需要單個(gè)線(xiàn)圈的地址和寫(xiě)入的數(shù)據(jù)即可。即將第5個(gè)寄存器置為1,FF 00
是置為1的意思
發(fā)送和返回的報(bào)文內(nèi)容如下圖所示:
08 05 00 04 FF 00 CD 62
08 05 00 04 FF 00 CD 62
發(fā)送及返回報(bào)文一致
3.2.6 “10H”號(hào)功能碼:寫(xiě)多個(gè)保持寄存器(下圖中是寫(xiě)錯(cuò)了)
發(fā)送和返回的報(bào)文內(nèi)容如下圖所示:
12 10 00 00 00 02 04 04 57 08 AE 9E B7
12 10 00 00 00 02 43 6B
以上即為Modbus RTU報(bào)文的講解。
3.2.7 CRC校驗(yàn)碼生成方法
利用“串口調(diào)試助手”,以1號(hào)功能碼的報(bào)文為例,計(jì)算CRC校驗(yàn)碼的方法如下圖所示:
在實(shí)際使用中,設(shè)備之間的報(bào)文可以通過(guò)一些監(jiān)視工具去監(jiān)視通訊報(bào)文
以上大部分內(nèi)容來(lái)自于:Modbus通信講解;
4. Modbus RTU通信實(shí)例
此部分以實(shí)際使用到Modbus的設(shè)備-溫濕度傳感器,并使用ModbusPoll作為主站來(lái)讀取溫濕度,講解 Modbus RTU通信
4.1 Modbus的設(shè)備-溫濕度傳感器
溫濕度傳感器套裝使用說(shuō)明
1、溫濕度傳感器 (4個(gè))
2、開(kāi)關(guān)電源
3、二孔插頭
4、端子(一個(gè)是作為電源端子,一個(gè)是作為485端子)
5、4根1米左右的電線(xiàn),一米要分成5部分,每部分是20cm
6、螺絲刀
7、485轉(zhuǎn)USB轉(zhuǎn)接器
調(diào)試使用:
濕度: 40001,讀取的值要除以10 40001和40002是保持寄存器地址
溫度: 40002,讀取的值要除以10
從站地址: 42001
波特率: 42002(0位2400,1位4800,2位9600)
第一步要分別把4個(gè)模塊地址分別設(shè)置為1 2 3 4
4.2 Modbus RTU通信方法
此處采用模擬的主站連接實(shí)際的存在
:
讀到的值
Tx: 01 03 00 00 00 02 C4 0B
Rx: 01 03 04 00 49 01 29 EB AB
00 49
是濕度值(實(shí)時(shí)變化,不一定和上面截圖一致):0+73=73;01 29
是溫度值:1*256+41=297
通訊鏈路上全都是字節(jié)數(shù)組,上位機(jī)中可以通過(guò)字節(jié)數(shù)組來(lái)存儲(chǔ)數(shù)據(jù)
上述部分參考鏈接:Modbus詳解1;Modbus詳解2;Modbus詳解3;Modbus詳解4
5. 了解基礎(chǔ)比較好的視頻(發(fā)現(xiàn)的比較晚,本人未看,有時(shí)間了再看):
RS232、RS485和TCP上的Modbus通信(1);RS232、RS485和TCP上的Modbus通信(2);RS232、RS485和TCP上的Modbus通信(3)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-535407.html
6. 下一篇將會(huì)以西門(mén)子PLC軟件搭建ModbusTCP仿真環(huán)境,并通過(guò)仿真環(huán)境,介紹基礎(chǔ)知識(shí)及模擬實(shí)際應(yīng)用中寫(xiě)一個(gè)簡(jiǎn)單的通信讀取PLC數(shù)據(jù)方法
7. 使用到的測(cè)試軟件,見(jiàn):Modbus通信從入門(mén)到精通中使用到的測(cè)試軟件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-535407.html
到了這里,關(guān)于Modbus通信從入門(mén)到精通_1_Modbus通信基礎(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!