<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 基于VB6.0的S7-200PLC與計算機的通訊設計

          基于VB6.0的S7-200PLC與計算機的通訊設計

          作者: 時間:2011-09-01 來源:網(wǎng)絡 收藏

          1 引言

          本文引用地址:http://www.ex-cimer.com/article/202424.htm


            plc 作為一種穩(wěn)定可靠的控制器在工業(yè)控制系統(tǒng)得到了廣泛的應用[1]。但是由于中小型plc的人機接口功能不很完善,不能提供給用戶一個友好的交互界面,因此妨礙了對現(xiàn)場運行過程的跟蹤與監(jiān)控[2~5]。目前一些通用的組態(tài)軟件,以其功能強大、界面友好、開發(fā)簡潔等優(yōu)點在計算機監(jiān)控領域已經(jīng)得到了廣泛的應用,但是一般價格比較昂貴[6~7]。

            visual basic6.0 在開發(fā)可視化環(huán)境下的監(jiān)控系統(tǒng)時具有其獨特的優(yōu)勢,它本身提供的mscomm控件就是為應用程序提供串口通訊而設計的,它屏蔽了通訊過程中的底層操作,只需設置、監(jiān)視mscomm控件的屬性和事件即可完成對串行口的初始化和數(shù)據(jù)輸入輸出[8~10]。西門子s7-200plc由于其體積小,可靠性高,通訊功能強大等特點,在工業(yè)控制領域得到廣泛的應用。s7-200系列plc的通訊方式主要有三種:ppi方式、profibus-dp方式、freeport(自由口)方式。其中自由口方式是由用戶自己定義通訊協(xié)議,具有與外圍設備通訊方便、自由,易于計算機控制軟件的開發(fā)等特點,因此使用自由口通訊方式實現(xiàn)plc與上位機通信的控制方案較多[11~14]。

            本文采用s7-200plc的自由口通訊協(xié)議,基于vb6.0開發(fā)了一種簡單實用且易于功能擴展的監(jiān)控界面,其中計算機作為上位機,通過mscomm控件建立與下位機plc的通訊,可以實現(xiàn)數(shù)字量和模擬量讀寫、存儲及模擬量趨勢曲線繪制。

          2 通訊原理

            在上位機中,通過vb6.0中的mscomm控件完成數(shù)據(jù)的發(fā)送與接收;在下位機中則是通過plc的指令完成數(shù)據(jù)的發(fā)送與接收的。

            2.1 通訊初始化設置

            由于s7-200plc與計算機的自由口通訊是串行通訊,故通訊前需要通訊雙方的串行端口初始化,使雙方通訊參數(shù)保持一致。

            (1) 上位機初始化設置

            上位機使用mscomm控件通過串行端口發(fā)送和接收數(shù)據(jù),因此首先要對mscomm控件進行初始化設置,主要始化設置如下:

          mscomm1.commport=1 `設定通訊端口號
          mscomm1.portopen=true `通訊端口打開
          mscomm1.settings=9600,n,8,1
          mscomm1.inputmode=1

            settings:以字符串的形式設置并返回波特率、奇偶校驗位、數(shù)據(jù)位和停止位。其中以字符n、o、e 分別代表無校驗、奇校驗和偶校驗。

            inputmode:設置從緩沖區(qū)讀取數(shù)據(jù)的格式;0為字符串格式(text),1為二進制格式(binary) [15]。

            (2) 下位機的初始化設置

            為了使下位機與上位機的通訊參數(shù)保持一致,可通過對plc的自由端口控制寄存器smb30(端口0)或smb130(端口1)的設置來實現(xiàn)。由于本文中使用的是cpu222是端口0,因此對plc的通訊設置是通過設置smb30來完成的。smb30的設置主要包括奇偶校驗位、數(shù)據(jù)位、波特率、協(xié)議選擇等參數(shù)。本文smb30設置內容如下,奇偶校驗為不校驗、字符數(shù)據(jù)位為8位/字符、波特率為9600bit/s、協(xié)議選擇為自由口協(xié)議,故smb30設置為9。由于本文是通過接收字符中斷接收數(shù)據(jù),通過定時中斷發(fā)送數(shù)據(jù),因此需要將兩個中斷初始化。

            plc主要初始化設置:

          movb 9, smb30 //將自由口控制存儲器設置9
          movb 200, smb34 //定時中斷時間設置(200ms)
          atch int_0, 8 //接收字符中斷
          atch int_1, 10 //定時中斷
          eni //中斷允許
          2.2 通訊方式

          圖1 數(shù)據(jù)存儲時的界面


            (1) 上位機通訊方式

            首先將上位機待發(fā)送的m個字節(jié)依次存儲在數(shù)組s中,每次待接收的數(shù)據(jù)存儲在變量r中。

            發(fā)送信息時,數(shù)組s中第一個元素s(0)存儲第一個待發(fā)送字節(jié)……最后一個元素s(m-1)存儲最后一個待發(fā)送字節(jié),發(fā)送方式為mscomm1.output=s。

            接收方式為 r=mscomm1.input。

            由于plc中的信息是以byte的形式傳輸?shù)接嬎銠C中,因此上位機需要對接收的數(shù)據(jù)進行數(shù)據(jù)處理。由于plc中模擬量傳感器數(shù)據(jù)是以word的形式存儲在aiw中,而plc在發(fā)送該數(shù)據(jù)時是按照word對應的兩個byte發(fā)送,故計算機在后臺計算中要將其對應的兩個byte轉換為word。為了在人機界面中表達數(shù)字量(qb,ib,mb)的各個狀態(tài),需要在計算機后臺計算中把plc的各數(shù)字量的十進制轉換為八位二進制,通過對八位二進制的每個位做0、1判斷,利用vb6.0可使用多種方法把判斷結果表達在界面中。

          圖2 存儲在excel表格中的部分數(shù)據(jù)


            (2) 下位機通訊方式

            為了在計算機中實時顯示plc運行狀況及傳感器的實時數(shù)據(jù),就需要plc主動發(fā)送信息。為此,本文通過“定時中斷”使plc周期地向計算機發(fā)送數(shù)據(jù)。具體方法是在定時中斷事件里,使用plc自帶的發(fā)送指令xmt發(fā)送數(shù)據(jù),定時中斷的時間設置(1ms~255ms)即為發(fā)送周期。

            s7-200系列的plc接收指令有兩種方法:第一種方法是使用plc自帶的rcv指令來接收計算機數(shù)據(jù);第二種方法采用plc提供的“接收字符中斷”方式,將smb2(自由口接收字符緩沖區(qū))定義指針,使用指針接收數(shù)據(jù)。在這兩種方法中,第二種方法更加靈活,因此在本文中,plc在接收信息時采用指針接收數(shù)據(jù)。即在plc接收數(shù)據(jù)時,每次接收m個字節(jié),僅在第一個字節(jié)進入smb2時定義指針,并將該字節(jié)寫入指針所指向的變量存儲字節(jié);第二個字節(jié)進入smb2時,指針指向下一個變量存儲字節(jié),并把第二個字節(jié)寫入……最后一個字節(jié)進入smb2時,指針指向下一個變量存儲字節(jié),把第m個字節(jié)寫入。若數(shù)據(jù)接收完成,則清空用于計數(shù)的變量存儲字節(jié),等待下次接收數(shù)據(jù),至此完成一次數(shù)據(jù)接收。本文中在接收字符中斷里使用指針接收2個字節(jié):

          ld sm4.5 //變送器閑置時動作
          lps
          ab= vb99, 0 //vb99為0時
          movd vb100, ac1
          //定義指針ac1,存儲于vb100
          lrd
          movb smb2, *ac1
          //指針指向自由口接收字符緩沖區(qū)
          lrd
          incd ac1 //指針遞增
          lrd
          incb vb99 //接收字節(jié)個數(shù)遞增
          lpp
          ab= vb99, 2 //接收字節(jié)個數(shù)為2
          movb 0, vb99 //計數(shù)清零,完成一次接收


          3 數(shù)據(jù)存儲

            vb6.0可將數(shù)據(jù)存儲在多種數(shù)據(jù)庫中(如access、excel等)??紤]到excel簡單實用且應用廣泛,通過設置excel的宏屬性,就可將實時數(shù)據(jù)保存在創(chuàng)建的excel文件中,并可方便的查看歷史數(shù)據(jù)。

            本文通過vb6.0鏈接一個指定的excel文件,在vb程序里定時器的觸發(fā)事件將數(shù)據(jù)存儲至excel文件,存儲方法如下:

            k=k+1

            xlsheet.cells(k,r) = v`數(shù)據(jù)v寫入excel第r列,隨著時間k的增加依次逐行存儲。

            為了建立vb6.0與指定excel文件的鏈接,需要對鏈接的雙方分別進行設置。首先建立并指定一個excel文件,命名為“g”,存儲路徑為“d:g”,通過設置該文件宏屬性,可建立excel向vb6.0的鏈接。exel中的宏屬性設置設置為:

          sub auto_open()
          open d:g for output as #1 `寫標志文件close #1
          end sub
          sub auto_close()
          kill d:g `刪除標志文件end sub

            在vb6.0向excel鏈接時,考慮到數(shù)據(jù)快速地寫入excel,為避免誤操作引起excel運行終止,本文在打開exel時設置excel不可見,當數(shù)據(jù)存儲完畢后,設置excel可見。

          (1) 打開exel(鏈接到指定的exel文件)
          set xlapp=createobject(excel.application) `創(chuàng)建excel應用類
          xlapp.visible = false
          `設置excel不可見
          set xlbook=xlapp.workbooks.open(d:g.xls) `打開excel工作簿
          set xlsheet=xlbook.worksheets(1)
          `打開excel工作表
          xlsheet.activate
          (2) 關閉exel
          xlapp.visible = true `設置excel可見
          set xlapp = nothing `釋放excel對象

          4 運行實例

            為了驗證本設計在實際應用中的有效性,本文利用實驗室現(xiàn)有設備,在cpu222的擴展模塊em235中接入2個位移傳感器,設計了一套簡單實用的人機界面。在界面中,計算機實時的顯示兩個位移傳感器的數(shù)據(jù)及其曲線圖,并能將數(shù)據(jù)自動存儲至指定excel文件中;在界面中可以顯示plc的數(shù)字量輸入、輸出狀態(tài)及模擬量的實時變化曲線;通過“啟動”、“停止”按鈕可以直接控制plc的各輸出點。

            設置plc以200ms為周期每次發(fā)送9個字節(jié),將傳感器1的數(shù)據(jù)存入vw2(發(fā)送vb2和vb3),傳感器2的數(shù)據(jù)存入vw4(發(fā)送vb4和vb5),i0.0~i0.7的狀態(tài)字節(jié)ib0存入vb6,i1.0~i1.7的狀態(tài)字節(jié)ib1存入vb7,q0.0~q0.7的狀態(tài)字節(jié)qb0存入vb8,q1.0~q1.7的狀態(tài)字節(jié)qb1存入vb9,m0.0~m0.7的狀態(tài)位mb0存入vb10。

            計算機每次發(fā)送2個字節(jié),第一個字節(jié)寫入變量存儲字節(jié)vb100中,并將vb100的數(shù)據(jù)賦值給qb0,進而實現(xiàn)點擊“啟動”/“停止”按鈕控制q0.0~q0.7;第二個字節(jié)寫入變量存儲位vb101,該字節(jié)通過比較指令中的“字節(jié)等于”連接發(fā)送指令xmt,實現(xiàn)界面中點擊“開始監(jiān)控”(字節(jié)等于1)時plc開始發(fā)送數(shù)據(jù),點擊“停止監(jiān)控”(字節(jié)等于0)時plc停止發(fā)送數(shù)據(jù)。

            為了實現(xiàn)計算機直接控制plc的數(shù)字量輸出,本設計在界面中使用8對“啟動”/“停止”控制按鈕,其中任何一個控制按鈕的點擊都是一次計算機向plc的數(shù)據(jù)寫入。在qb0中該字節(jié)對應的8個位控制plc的8個數(shù)字量輸出點(q0.0~q0.7),故這里通過定義一個數(shù)組q(0 to 7),數(shù)組中的8個元素分別對應qb0中的8個輸出點,每次點擊界面中控制按鈕都是向對應元素的賦值,并將8個元素的賦值求和,求和的結果即為寫入qb0的內容。其中每個“啟動”按鈕的賦值為對應元素的十進制數(shù)值,任何“停止”按鈕的賦值都為0。

            下面是人機界面運行中的截圖,界面中的圖表橫坐標單位是“s”,縱坐標單位是“mm”,圖表刷新周期為1秒,數(shù)據(jù)存儲至excel文件的周期是200ms。開始監(jiān)控后,使用兩個量程為100mm的位移傳感器,用手動方式移動傳感器的檢測部位,在數(shù)據(jù)存儲過程中,excel文件不可見,停止數(shù)據(jù)存儲后,自動彈出excel文件。在圖2、圖3中,a列和b列分別表示位移傳感器1(黑色曲線)和位移傳感器2(紅色曲線)的歷史數(shù)據(jù)。

          圖3 exel中的數(shù)據(jù)生成圖表


          5 結束語

            本文應用s7-200plc的自由口通訊協(xié)議,以計算機為上位機,plc為下位機,基于vb6.0設計了一套簡單實用且易于實現(xiàn)的監(jiān)控界面。通過mscomm控件建立與下位機plc的通訊,較好地實現(xiàn)了數(shù)字量和模擬量讀寫、存儲及模擬量趨勢曲線繪制。實驗表明該監(jiān)控系統(tǒng)能準確地監(jiān)控各類數(shù)字量(如q,i,m)信息,自動繪制模擬量變化的實時曲線并存儲相應的模擬量數(shù)據(jù)。

            本文設計的通訊方法簡單實用且易于功能擴展,可以plc在中小場合的應用,為plc控制系統(tǒng)信息化、智能化發(fā)展提供了可行的探索路徑。

          西門子plc相關文章:西門子plc視頻教程


          通信相關文章:通信原理




          關鍵詞: PLC VB

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();