国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于modbus通訊的上位監(jiān)控軟件設計

2014-10-21 20:06吳昊罡
中國機械 2014年24期

吳昊罡

摘要:本文基于Modbus通訊協(xié)議,使用VB編寫上位軟件,與西門子CP341-RS422/485模塊進行通訊,對PLC中變量進行讀取,并存入SQLServer數(shù)據(jù)庫,實現(xiàn)對設備的實時監(jiān)控。

關鍵詞:Modbus;VB; SQLServer;PLC

在現(xiàn)代工業(yè)中使用PLC設備進行分散化控制,上位機監(jiān)控軟件提供圖形界面并對下位設備進行數(shù)據(jù)采集、管理,已經(jīng)成為工業(yè)控制系統(tǒng)中普遍使用的監(jiān)控形式。其中Modbus協(xié)議以標準、開放等優(yōu)點廣泛應用于工業(yè)通訊當中,本文基于西門子的CP341模塊作為Modbus從站,使用Visual Basic語言進行編程,在上位計算機中采集、存儲PLC中狀態(tài)變量,實現(xiàn)對設備的實時監(jiān)控。

1.Modbus協(xié)議

一個Modbus通訊數(shù)據(jù)幀由若干個字節(jié)組成,一般通信數(shù)據(jù)幀的格式包括:地址域、功能碼、數(shù)據(jù)域、錯誤校驗(16位CRC校驗)

地址域長度為1個字節(jié),表示從站的地址。功能碼是數(shù)據(jù)幀中傳送的第二個字節(jié),不同的功能碼對應數(shù)據(jù)域格式不盡相同,常用的功能碼有1、2、3、4、5、6、15和16,分別表示讀線圈、讀輸入狀態(tài)、讀保持寄存器、讀輸入寄存器、寫單個線圈、寫單個輸入狀態(tài)、寫多個線圈、寫多個保持寄存器[1]。數(shù)據(jù)幀最后兩個字節(jié)是CRC錯誤校驗域。

若需要讀取05從站以00 00為起始地址的兩個REAL型數(shù)據(jù):3.4和8.9,則主站發(fā)送的報文:05 03 00 00 00 04 C5 8F,從站返回報文:05 03 08 40 59 99 9A 41 0E 66 66 D6 72。

2.西門子CP341的組態(tài)與編程

2.1西門子CP341組態(tài)

本文涉及與計算機通訊的從站為西門子S7-300PLC加裝CP341-RS422/485模塊。在安裝CP341之前需要插入硬件狗Dongle,安裝驅動軟件CP_PTP_PARAM和Modbus-Slave318,然后才能在Step7中對CP341進行組態(tài)。

設置模塊時必須與計算機確認設置的內(nèi)容:從站地址、波特率、數(shù)據(jù)位停止位,校驗位。CP341模塊的參數(shù)應按確認后的內(nèi)容進行配置,波特率通常設為9600即可。本文中通訊參數(shù)設置為9600, 8, 1, n,從站地址為5。

傳輸DINT、REAL數(shù)據(jù)時,應設置FC 03,06,16選項卡,并建立一個DB塊存儲待傳數(shù)據(jù)。本文中所需傳輸?shù)淖兞繑?shù)據(jù)類型為DINT、REAL。傳輸模式選擇Half-Duplex。配置完成后,向CP341下載Modbus Slave驅動。

2.2PLC編程

在Step7中打開 “zXX21_05_PtP_Com_MODSL”項目,將Modbus通訊程序OB100、FB7、FB8、FB80、DB80復制到Step7程序中。在程序中調(diào)用FB80,并將通訊數(shù)據(jù)塊名稱DB80和CP341起始地址填入。建立與計算機通訊用的FC塊并調(diào)用FB80,將通訊數(shù)據(jù)塊名稱DB80和CP341起始地址填入。其中FB80中的OB_MASK的值應始終為1,其余變量根據(jù)需要進行分配。

3.Visual Basic編程實現(xiàn)

為計算機安裝RS485通訊卡,添加各個數(shù)據(jù)顯示控件數(shù)組和MSComm控件。Modbus RTU模式的報文發(fā)送必須控制好字符間隔,1byte數(shù)據(jù)發(fā)送后延時應小于1.5倍字符時間,兩幀報文之間的間隔必須大于3.5倍字符時間間隔。一個字符時間是指按照用戶設定的波特率傳輸一個字節(jié)所需要的時間[2]。

軟件通過串口發(fā)送查詢數(shù)據(jù)幀,對PLC返回的數(shù)據(jù)分解、顯示,PLC返回的內(nèi)容包括各開關狀態(tài)、元件狀態(tài)、運行速度、運行負荷等。從通訊內(nèi)容來說,包括開關量、模擬量,其中開關量均打包為DINT型變量整體發(fā)送。

3.1串口通訊與數(shù)據(jù)處理

在界面中加載VB自帶的MSCOMM控件,在軟件啟動時,程序調(diào)用API函數(shù)自動從配置文件中讀取設置的控件屬性參數(shù),在控件的CommEvent事件中編寫響應程序。

使用Timer控件按照要求的周期發(fā)送報文。主站發(fā)出的查詢報文為05 03 00 00 00 24 44 55(十六進制),通過MSComm.Output指令發(fā)送給從站。

取得從站返回給主站的數(shù)據(jù)幀后,從第4個字節(jié)開始,每4個字節(jié)為一個數(shù)據(jù)。數(shù)據(jù)幀中的DINT型變量按位進行分解,與相應的開關量對應顯示,浮點數(shù)轉換為小數(shù)并顯示在界面上。

3.2數(shù)據(jù)管理

為及時記錄設備運行狀態(tài),分析設備使用情況,軟件將打包傳輸?shù)臄?shù)據(jù)存儲在SQLServer數(shù)據(jù)庫中,以備日后查詢,存儲數(shù)據(jù)的過程根據(jù)MSComm.CommEvent事件觸發(fā)。VB應用程序開發(fā)中,可以通過ADO對微軟所支持的數(shù)據(jù)庫進行操作。

在數(shù)據(jù)庫中建立存儲表,建立不少于傳輸內(nèi)容的字段,分別存儲各開關量數(shù)據(jù)、模擬量數(shù)據(jù)。在VB中編寫讀寫數(shù)據(jù)庫的ADO語句對SQLServer進行操作。

Set Cnn = New ADODB.Connection

Cnn.Open strCnn

Cnn.Execute "INSERT INTO Database (iTime, …) VALUES (SQLtxt)"

需要讀取存儲信息時,可使用SQL查詢語句讀取相應字段進行數(shù)據(jù)轉換和位處理即可,本文不再贅述。4 結論

本文實現(xiàn)了在Modbus通訊的條件下,使用Visual Basic編程實現(xiàn)了在計算機上讀取PLC中少量數(shù)據(jù),并存儲入SQLServer數(shù)據(jù)庫的功能。在只需要監(jiān)控少量數(shù)據(jù)的情況下,可以不必在計算機上安裝其他專業(yè)的工業(yè)控制軟件就能夠滿足需求,只安裝相應的控件補丁和硬件驅動即可。本文所實現(xiàn)的功能降低了監(jiān)控軟件對計算機性能的要求,也使得部署程序更加簡便。

參考文獻:

[1]白焰,鐘艷輝,秦宇飛.基于VC的Modbus協(xié)議通信測試軟件的實現(xiàn)[J].現(xiàn)代電力,2008 25(6):76-80

[2]佟為明,胡素君,劉勇, 李中偉.一種體現(xiàn)Modbus主要技術的實驗系統(tǒng)[J].電子器件,2009 32(4):833-839.