RS485接口、Modbus RTU協(xié)議與BT119P通訊實(shí)例
RS485是一種通用的通訊接口,采用主從通訊方式,即一個(gè)主機(jī)帶多個(gè)從機(jī),很多情況下,通訊鏈路采用一對(duì)雙絞線將各個(gè)接口的“A”、“B”端并聯(lián)起來。數(shù)據(jù)信號(hào)采用差分傳輸方式,邏輯“1”以兩線間的電壓差+(2~6)V表示;邏輯“0”以兩線間的電壓差為-(2~6)V表示。RS485通訊數(shù)據(jù)最高傳輸速率為10Mbps,最大距離可以到1200米,最大支持256個(gè)結(jié)點(diǎn)。
Modbus是一主多從的通訊協(xié)議,需要一個(gè)設(shè)備充當(dāng)主機(jī)(比如電腦、PLC、觸摸屏等),從機(jī)是可以是各種測(cè)量?jī)x表、模塊。主機(jī)在同一時(shí)間內(nèi)只能向一個(gè)從機(jī)發(fā)送命令,總線上每次只有一個(gè)數(shù)據(jù)進(jìn)行傳輸,即主機(jī)發(fā)送,從機(jī)返回,主機(jī)不發(fā)送,總線就沒有數(shù)據(jù)流。
Modbus的傳輸模式也分三種:ASCII、RTU、TCP。以常見的Modbus-RTU為例。數(shù)據(jù)格式如下:
從機(jī)地址 :每個(gè)從機(jī)都有唯一地址,占用一個(gè)字節(jié),范圍0~255
命令碼: 占用一個(gè)地址。
常用命令碼介紹:
命令碼 | 功能說明 |
---|---|
01H | 讀輸出線圈狀態(tài) |
02H | 讀入出線圈狀態(tài) |
03H | 讀保持寄存器 |
04H | 讀輸入寄存器 |
06H | 寫單個(gè)寄存器 |
10H | 寫多個(gè)寄存器 |
數(shù)據(jù): 根據(jù)命令碼不同,有不同數(shù)據(jù)。
校驗(yàn): 在數(shù)據(jù)傳輸過程中可能數(shù)據(jù)會(huì)發(fā)生錯(cuò)誤,CRC檢驗(yàn)接收數(shù)據(jù)是否正確。
分析一下發(fā)送和接收的內(nèi)容:
1:主機(jī)對(duì)從機(jī)讀數(shù)據(jù)
主機(jī)發(fā)送的數(shù)據(jù)格式如下:
從機(jī)地址 | 0x01 |
---|---|
命令碼 | 0x03 |
寄存器地址(高) | 0x00 |
寄存器地址(低) | 0x01 |
數(shù)量(高) | 0x00 |
數(shù)量(低) | 0x01 |
校驗(yàn) | 0xD5 0xCA |
含義:
0x01:從機(jī)地址
0x03:命令碼。讀從機(jī)寄存器地址
0x00 0x01:表示讀的寄存器地址從0x0001開始
0x00 0x01;表示連續(xù)讀取的寄存器數(shù)量
0xD5 0xCA:CRC校驗(yàn)碼
2:主機(jī)對(duì)從機(jī)寫數(shù)據(jù)
從機(jī)地址 | 0x01 |
命令碼 | 0x06 |
寄存器地址(高) | 0x00 |
寄存器地址(低) | 0x01 |
數(shù)量(高 | 0x00 |
數(shù)量(低) | 0x64 |
校驗(yàn) | 0xD9 0xE1 |
含義:
0x01:從機(jī)地址
0x06:命令碼。寫單個(gè)寄存器
0x00 0x01:修改的寄存器地址
0x00 0x64:修改的值
0xD9 0xE1:CRC校驗(yàn)碼
從機(jī)返回?cái)?shù)據(jù)格式如下:
從機(jī)地址 | 0x01 |
命令碼 | 0x06 |
寄存器地址(高) | 0x00 |
寄存器地址(低) | 0x01 |
數(shù)量(高 | 0x00 |
數(shù)量(低) | 0x64 |
校驗(yàn) |
0xD9 0xE1 |
含義:
0x01:從機(jī)地址
0x06:命令碼。寫單個(gè)寄存器
0x00 0x01:修改的寄存器地址
0x00 0x64:修改的值
0xD9 0xE1:CRC校驗(yàn)碼
從機(jī)返回的數(shù)據(jù)是和主機(jī)發(fā)送的數(shù)據(jù)一致,說明寫入正確,否則表示出錯(cuò)了。可再寫一次。
伯特儀表大部分產(chǎn)品,可以配置RS485通訊模塊接口,并支持標(biāo)準(zhǔn)Modbus-RTU通訊協(xié)議,下面我們用一臺(tái)BT119P的溫控表作為從機(jī),電腦端利用組態(tài)王軟件作為主機(jī),來進(jìn)行二者M(jìn)odbusRTU通訊的演示案例。
1、電腦端打開組態(tài)王KyingView軟件,然后新建工程
2、雙擊設(shè)備COM1,配置串口信息,我們配置為:波特率9600,8為數(shù)據(jù)位,無校驗(yàn),1個(gè)停止位。
3、接下來雙擊“新建”選項(xiàng),選擇對(duì)應(yīng)設(shè)備驅(qū)動(dòng)。這里我們依次選擇:設(shè)備驅(qū)動(dòng) -> PLC -> 莫迪康 -> ModbusRTU -> COM。
4、然后根據(jù)實(shí)際情況,選擇對(duì)應(yīng)的串口號(hào),這里我們選擇COM3;下一步,設(shè)置需要與下位機(jī)通訊的地址號(hào),這里我們選擇1。之后就直接下一步完成就可以。
5、然后就在軟件左側(cè)數(shù)據(jù)庫欄,點(diǎn)擊數(shù)據(jù)詞典,雙擊“新建”,彈出“定義變量”對(duì)話框,依次填入對(duì)應(yīng)變量要求。比如我們要讀取BT119儀表的測(cè)量值,那根據(jù)儀表對(duì)應(yīng)的通訊協(xié)議地址表可知,測(cè)量值的寄存器地址為“30001”,數(shù)據(jù)變量選擇“I/O整型”,數(shù)據(jù)類型選擇“SHORT”,連接設(shè)備就選擇前面我們建立的設(shè)備號(hào)“Bt119”。
6、設(shè)備和變量都新建完成,接下來我們就要新建畫面了。點(diǎn)擊左側(cè)文件欄的畫面,然后雙擊“新建”;彈出對(duì)話框,畫面名稱命令為“測(cè)量值”,然后下一步就進(jìn)入組態(tài)畫面。
7、在工具箱中選擇文本,鼠標(biāo)按住不放,拖入組態(tài)畫面中,然后雙擊定義該文本信息。點(diǎn)擊“模擬量輸出”,然后選擇前面我們定義的變量“測(cè)量值”,點(diǎn)擊確認(rèn)完成。
8、上位機(jī)的配置工作完成后,儀表參數(shù)也要相應(yīng)設(shè)置;Add設(shè)置為1,表示儀表的從機(jī)地址,Baud設(shè)置為4,表示采用ModbusRTU通訊協(xié)議,波特率為9600,8個(gè)數(shù)據(jù)位,1個(gè)停止位,無校驗(yàn)。
9、連接好485通訊線。因?yàn)槠胀娔X沒有專門的485接口,這里我們通過485轉(zhuǎn)USB的轉(zhuǎn)換器,來進(jìn)行電腦與儀表的通訊連接。
10、完成硬件連接和軟件的配置之后,通訊準(zhǔn)備工作就基本完成,點(diǎn)擊電腦端組態(tài)王組態(tài)界面上的“文件”->”切換的View”之后,主機(jī)就以每500ms時(shí)間間隔讀取儀表的測(cè)量值了。由于儀表返回整型數(shù),如果是熱電偶、熱電阻類非線性測(cè)量,分辨率固定為0.1℃,將返回?cái)?shù)據(jù)除以10即可。如果是線性信號(hào)測(cè)量,則按儀表dP參數(shù)設(shè)置,分別除以10(dP=1)、100(dP=2)、1000(dP=3)就可以了。
-
RS485
+關(guān)注
關(guān)注
39文章
1162瀏覽量
82412 -
MODBUS
+關(guān)注
關(guān)注
28文章
1812瀏覽量
77089 -
通訊協(xié)議
+關(guān)注
關(guān)注
10文章
277瀏覽量
20374 -
通訊接口
+關(guān)注
關(guān)注
2文章
80瀏覽量
16203 -
RTU
+關(guān)注
關(guān)注
0文章
415瀏覽量
28704
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論