在工業(yè)自動化發(fā)展的進程中,,Modbus成為了工業(yè)控制系統(tǒng)中的一種通用協(xié)議,。由于該協(xié)議的簡單且通用,得到眾多儀表廠商的支持,,成為儀表及智能終端的一項工業(yè)標準,,在工業(yè)監(jiān)控系統(tǒng)中得到廣泛的應用。通過此協(xié)議,,控制器相互之間,、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以進行通信,。它的開放性、可擴充性和標準化使不同廠商生產(chǎn)的控制設(shè)備可以簡單可靠地連成工業(yè)網(wǎng)絡(luò),,進行系統(tǒng)的集中監(jiān)控,,從而成為最流行的協(xié)議之一。同樣,,世紀星組態(tài)軟件也提供支持上位機和下位設(shè)備進行Modbus通信的驅(qū)動程序,,使用戶可以方便地使用裝有世紀星軟件的上位機和下位的設(shè)備進行通信。
1,、Modbus 設(shè)備選擇
進入世紀星設(shè)備列表PLC大類中的標準Modbus協(xié)議,,可以看到我們有5種Modbus設(shè)備,分別是Modbus RTU(十進制地址),、Modbus RTU(十六進制地址),、Modbus ASCII(十進制地址)、Modbus ASCII(十六進制地址)以及Modbus TCP/IP(十進制地址),。
首先,,Modbus的三種通信方式:Modbus RTU、Modbus ASCII以及Modbus TCP/IP世紀星都全面支持,,用戶可以根據(jù)設(shè)備的通訊說明進行相應的選擇,。
其次,Modbus設(shè)備十進制和十六進制的區(qū)分除了方便一部分用戶的同時,,在設(shè)備選擇的方面也給另一部分的用戶造成困擾,,針對這個問題我會給大家兩點解釋,第一:同樣的一個設(shè)備,,如果用十進制地址的Modbus驅(qū)動能連接得上的話,,用十六進制地址的Modbus驅(qū)動肯定也沒問題,確定這點之后,,我們提前預想周全的貼心功能就不會在選擇設(shè)備時給您造成困擾了,。第二:Modbus協(xié)議已經(jīng)成為工業(yè)控制系統(tǒng)中的一種通用協(xié)議,很多儀表廠商都采用Modbus協(xié)議與上位機進行通信,,有些廠商協(xié)議的說明文檔中,,采用十進制的寄存器地址說明,如表1所示,。
而有些廠商采用十六進制的寄存器地址說明,,如表2所示。為避免用戶在連接變量時再去做繁瑣的十進制和十六進制的轉(zhuǎn)化工作,,我們將Modbus RTU以及Modbus ASCII分別做成用十進制的寄存器地址連接變量的驅(qū)動和用十六進制的寄存器地址連接變量的驅(qū)動,。舉個例子(假定表1表2中列出的寄存器支持03號功能碼),對于表1這樣的協(xié)議說明方式,,我們可以選擇十進制的Modbus驅(qū)動,,用4x10這個寄存器連接環(huán)境溫度這個參數(shù),;而對于表2這樣的協(xié)議說明方式,我們可以選擇十六進制的Modbus驅(qū)動,,用4 x 000A這個寄存器連接環(huán)境溫度參數(shù)。
表一
表二
2.寄存器連接
要正確連接一個寄存器,,有三個關(guān)鍵信息要從協(xié)議說明文檔中獲得:第一是該寄存器支持的功能碼,,第二是該寄存器的地址,第三是該寄存器的數(shù)據(jù)類型,。
1)功能碼
世紀星是根據(jù)Modbus協(xié)議中的功能碼來區(qū)別寄存器名稱,,具體信息如表3所述:
表三
在廠商所提供的協(xié)議說明文檔中,都會注明寄存器所支持的功能碼,,用戶可以根據(jù)上述表格對世紀星里的寄存器進行選擇,。例如:支持03H功能碼的就選擇4x,支持01H功能碼的就選擇0x,。
2)寄存器地址
寄存器地址在協(xié)議說明文檔中都會比較直觀的列出,,參看表1、表2,,每個具體的參數(shù)都會對應一個寄存器地址,,連接寄存器時只要將地址號連接在相應的寄存器名后面即可。
3)數(shù)據(jù)類型
位寄存器的連接方式比較單一,,如圖1所示,。變量類型為I/O離散,數(shù)據(jù)類型為BIT,,根據(jù)功能碼選擇寄存器名,,并加上寄存器地址就可以正確連接該位寄存器。
圖一
模擬量寄存器的連接方式就比較多樣化,,如表4所示(下面對于寄存器名和寄存器地址暫不進行說明),。
表四
表五
主電機電壓:變量類型選擇I/O整數(shù),數(shù)據(jù)類型選擇LONG(有符號32位整數(shù)),;
主電機電流:變量類型選擇I/O實數(shù),,數(shù)據(jù)類型選擇FLOAT(我們的浮點數(shù)格式符合IEEE754標準);
環(huán)境溫度:變量類型選擇I/O整數(shù),,數(shù)據(jù)類型選擇UINT(無符號16位整數(shù)),;
T1:變量類型選擇I/O整數(shù),數(shù)據(jù)類型選擇INT(有符號16為整數(shù)),;
T2:變量類型選擇I/O整數(shù),,數(shù)據(jù)類型選擇BCD(16位BCD碼);
T3:變量類型選擇I/O實數(shù),,數(shù)據(jù)類型為UINT或者INT,,由于傳送數(shù)據(jù)是實際值的100倍,,所以在定義變量時需要做一個線性變換,如圖2所示,,使最大值[IO]為最大值的100倍,,最小值[IO]是最小值的100倍,并在轉(zhuǎn)換選項中選擇線性轉(zhuǎn)換就可以在工程中直接顯示實際值,;
圖二
STATUS:變量類型選擇I/O整數(shù),,數(shù)據(jù)類型選擇UINT,需要在工程中對STATUS中的某個位進行顯示和設(shè)置時,,要使用世紀星中的Bit(Tagname,BitNo)和BitSet(“Tagname”,,BitNo,Discrete_Value)這兩個函數(shù),,具體的使用方式可以參考世紀星中的函數(shù)說明,。
今天給大家介紹了如何選擇Modbus設(shè)備以及如何連接寄存器,對于標準的Modbus協(xié)議來說,,掌握這些已經(jīng)可以從設(shè)備中讀出一個正確的數(shù)據(jù),,但有些廠家的Modbus協(xié)議在字節(jié)順序以及功能碼的使用方面和標準Modbus協(xié)議,是有一些小的出入,,針對這種情況,,我們的Modbus驅(qū)動也做了相應的調(diào)整,通過設(shè)置初始化字解決這個問題,,其具體的設(shè)置方式我將會在下一篇介紹給大家,,感謝您的關(guān)注!