【應用筆記】【AN004】VB環境下基於RS-485的4-20mA電流採集

XiaomaGee發表於2016-03-07

版本:第一版作者:周新穩 楊帥 日期:20160226

===========================

本資料高清PDF 下載:

http://pan.baidu.com/s/1c1uuhLQ

 

原始碼包下載:

http://pan.baidu.com/s/1LSuXw

===========================

簡介

本應用筆記主要說明如何在VB開發環境下基於RS485實現4-20mA電流採集。

系統組成及工作原理

系統組成如圖1所示,主要包括 PT100鉑電阻溫度感測器、SBWZ溫度變送器、4-20mA電流採集模組(GM1008)、USB轉RS485模組(EVC8001)以及上位機VB 。

2[MOH~WPI4`SD~{`_WMI434

圖1 系統組成框圖

PT100鉑電阻溫度感測器:利用鉑金屬阻值隨溫度變化而變化的特性製成的一種溫度感測器,主要用來測量溫度的變化量。

SBWZ溫度變送器:一種現場安裝式溫度變送單元,主要將鉑電阻的訊號變換成線性4-20mA的輸出訊號。

4-20mA電流採集模組(GM1008):RS485介面的GM1008電流採集模組,主要實現資料的採集與傳輸,並通過RS485介面與上位機進行通訊。

USB轉RS485模組(EVC8001):實現GM1008的RS485介面與上位機的USB介面成功連線。

上位機VB:製作上位機介面,實現被測資料的採集、分析和顯示。

系統工作過程中,當溫度發生變化時,

clip_image002

PT100鉑電阻溫度感測器的電阻值發生變化,其阻值經過SBWZ溫度變送器轉換為電流訊號,並通過4-20mA電流採集模組(GM1008)及USB轉RS485模組(EVC8001)與上位機通訊,從而實現DI電流的採集、分析及顯示。

電流採集模組

系統採用RS485介面的8通道4-20mA電流採集模組(GM1008),不僅能更加快速、精確的把測量資料傳送給上位機,保證系統的效率,而且可以使系統的資訊傳輸更加穩定。

GM1008簡介

GM1008 8通道4-20mA電流採集模組(以下簡稱模組)採用全電器隔離方案,配合高效能微處理器及8通道12位ADC在較小的體積下完成了電流測量功能。

模組內建高效能電源變換電路,供電電壓範圍寬至7.5V-36V,且效率高達90%以上。此特性為長時間使用的電源穩定性提供保障。模組內建1500V雙隔離電源模組,使得供電輸入、模擬測量電路及通訊介面三者之間相互隔離,此特性為測量精度、模組穩定性及通用性提供保證。

模組內建基於磁耦合隔離技術的高品質RS485電路,長期使用穩定可靠,抗干擾強、不掉線。

模組內建32位的高效能ARM微處理器,它不但完成8通道、12位電流採集,而且支援韌體升級功能,為後期功能升級和Bug修復提供技術保證。

VB上位機程式設計

VB開發環境介紹

VB全稱為Visual Basic,是一種由微軟公司開發的包含協助開發環境的時間驅動程式語言,擁有圖形使用者介面和快速應用程式開發系統,可以輕易的使用DAO、RDO、ADO連線資料庫,或輕鬆的建立Active控制元件。鑑於VB的這些效能滿足本系統的應用需求,故在此選擇VB作為本實驗的上位機開發環境。

軟體使用方法

軟體介面如圖2所示。

clip_image004

圖2 軟體介面

軟體的具體操作方法如下:

1. 在Port裡設定埠(埠號由查詢裝置管理器獲得);

2. 在Baudrate裡面設定波特率,一般固定為9600;                                                                  

3. 在Parity裡面設定奇偶校驗,一般固定為None(無校驗);

4. 在Stop Bits裡面設定停止位,一般固定為One(一個停止位);

5. 在Address裡面設定從機地址,固定為1;

6. 點選Open按鍵,自動連線RS485,此按鍵變為Close;

7. 點選Start按鍵,開始採集電流;

8. 點選Stop按鍵,停止採集;

9. 點選Close按鍵,則斷開RS485,清除資料。

軟體核心程式碼

核心程式碼主要有兩部分:CRC校驗程式碼(見附錄1)和資料處理程式碼(見附錄2)。

1. CRC校驗程式碼:CRC校驗是為了保證資料的準確傳輸,其中CRC校驗的方法有多種,本程式採取的是查表法,大大提高了校驗速度。

2. 資料處理程式碼:其中modbus_fun3表示選擇modbus的功能程式碼為3,是讀取保持暫存器功能。此部分程式碼從214行到221行為modbus通訊格式的暫存器設定部分,接下來是資料的傳送命令和接收命令,以及後面對接收到的資料進行處理以方便以物理量的形式顯示。

測量採集演示及說明

配備工具或軟體

1. 12V電源

2. PT100鉑電阻溫度感測器

3. SBWZ系列溫度變送器

4. RS485介面8通道4-20mA電流採集模組(GM1008)

5. USB轉RS485模組(EVC8001)

6. Aligent 34401A臺式六位半數字萬用表

7. 應用平臺:Visual Studio 2015社群版(自行下載)

8. 電腦作業系統:Windows 8.1 x32

系統連線方式

clip_image006

本次實驗主要採集兩個通道的電流資料,為了保持圖片連線清楚整潔,只接入1個SBWZ,另一個連線方式相同。系統主要硬體連線如圖3所示。

圖3 系統主要硬體連線圖

(1) 電源(12V)導線1:正極連線溫度變送器正接線柱,負極連線GM1008的接地埠(GND);

(2) 導線2:連線GM1008的接地埠與GM1008的供電處(POWER)的一個埠;

(3) 導線3:連線溫度變送器與GM1008供電處(POWER)的另一個埠;

(4) 導線4:連線通道與溫度變送器負接線柱;

(5) 導線5:連線EVC8001與GM1008的RS485模組的B-埠;

(6) 導線6:連線EVC8001與GM1008的RS485模組的A+埠;

(7) 方口USB線:連線EVC8001與電腦。

測試步驟

1. 根據系統主要硬體連線圖(圖3)連線各元件;

2. 接入兩個溫度變送器,GM1008配置兩個通道,將CH0設定為開水資料採集通道,CH1設定為打火機火焰資料採集通道;

3. 然後在程式介面設定好埠以及相關引數(從機地址Address一般固定為1);

4. 將兩個PT100鉑電阻分別放入開水與打火機火焰中(具體操作為點選介面的Open按鈕,連線以後點Start按鈕,系統會自動採集資料,操作簡單方便)。

測試結果

實驗採集資料介面如圖4所示,為了驗證測試結果的準確性以及得到準確的溫度,對其進行了實驗測試。

clip_image008

圖4 實驗採集資料圖

(1)精度驗證

為了驗證所測電流值的準確性,把Aligent 34401A 臺式六位半數字萬用表串聯到SBWZ溫度變送器後端的電路中,將萬用表的電流讀數與上位機顯示的電流值進行對比。實驗結果如表1所示,經過多次實驗,兩組資料結果基本相同。

表1 實驗各項資料表

被測物件

GM1008測量值

萬用表 測量值

SBWZ 對應溫度

水(CH0)

7.68mA

7.64mA

92℃

打火機(CH1)

19.67mA

19.65mA

393℃

(2)實驗驗證

由SBWZ溫度變送器以及PT100鉑電阻的量程之間的關係,得出實際測得電流與溫度之間符合關係式:

y=25*x-100

測得的電流值對照計算知所測水溫約為92℃,火焰約為393℃(由於火焰溫度高於PT100的最大測量值,所以到19mA以後停止實驗,以免損壞裝置),測試結果與實際相符。

故由測試可知:本系統在VB開發環境基於RS485測得的資料是真實可靠的,可應用於實際中。

總結

本應用系統的測試成功,充分證明了在VB開發環境下基於RS485的4-20mA電流採集是可行的,上位機軟體製作的介面使測量的操作簡單,資料清晰,便於使用者對工業自動化系統的資料進行實時的監控,滿足行業對資料的需求。


參考資料

1. 《VB語言程式設計》

2. 《C程式設計語言》

相關資源下載

1Visual Studio 2015下載地址:

https://www.visualstudio.com/downloads/download-visual-studio-vs

2、GM1008 簡易手冊:

http://files.cnblogs.com/files/xiaomagee/GM1008%E7%AE%80%E6%98%93%E6%89%8B%E5%86%8CV1.0.pdf

3、GM1008 使用者手冊:

http://files.cnblogs.com/files/xiaomagee/GM1008%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8CV1.0.pdf

4、GM1008 購買地址:

https://item.taobao.com/item.htm?spm=a1z10.3c.w4002251610686.9.zoJaPi&id=522203245449

附錄1CRC校驗程式碼

121 'CRC校驗

122 Function crc(data() As Byte, length As Integer, ByRef ReturnDatalo As Byte, ByRef ReturnDatahi As Byte) As String

123 Dim CRC16Hi As Byte

124 Dim CRC16Lo As Byte

125 CRC16Hi = &HFF

126 CRC16Lo = &HFF

127 Dim i As Integer

128 Dim iIndex As Long

129

130 For i = 0 To length - 1

131 iIndex = CRC16Hi Xor data(i)

132 CRC16Hi = CRC16Lo Xor GetCRCHi(iIndex) '低位處理

133 CRC16Lo = GetCRCLo(iIndex) '高位處理

134 Next i

135 ReturnDatahi = CRC16Hi 'CRC高位

136 ReturnDatalo = CRC16Lo 'CRC低位

137

138 Return 1

139 End Function

205 '資料處理

206 Private Function modbus_fun3(start_address As Integer, read_number As Integer) As Integer

207 Dim sendbyte = New Byte() {0, 0, 0, 0, 0, 0, 0, 0}

208 Dim recvbyte(256) As Byte

209 Dim length As Int32

210 Dim data(24) As Int16

211 Dim crc_value As Int16

212 Dim i As Int16

213 Dim text As String

214 sendbyte(0) = 1 ‘單位識別符號

215 sendbyte(1) = 3 ‘功能碼

216 sendbyte(2) = start_address >> 8 ‘讀暫存器起始地址

217 sendbyte(3) = start_address

218 sendbyte(4) = read_number >> 8 ‘讀暫存器數量

219 sendbyte(5) = read_number

220

221 crc_value = crc(sendbyte, 6,sendbyte(7),sendbyte(6))

222 Try

223 text = ""

224 '傳送命令

225 SerialPort1.Write(sendbyte, 0, 8)

226 '接收資料

227 length = SerialPort1.BytesToRead()

228 While (length < 53)

229 length = SerialPort1.BytesToRead()

230 End While

231 i = SerialPort1.Read(recvbyte, 0, length)

232 For k = 0 To 23

233 data(k) = (recvbyte(k * 2 + 3) * 256) + recvbyte(k * 2 + 4)

234 Next k

235 '數值轉換

236 For i = 0 To 7

237 display_value(i) = (data(i * 3 + 2) / 100.0)

238 Next i

附錄2:顯示通道資料程式

239 Catch ex As Exception

240

241 End Try

242 Return 1

243 End Function

相關文章