閱讀 | 訂閱
閱讀 | 訂閱
控製係統

基於VB6.0的西門子PLC與PC的通信實現微機監控功能

星之球激光 來源:中國自動化網2012-02-06 我要評論(0 )   

1 引言 可編程序控製器(programmable controller)簡稱plc是以微處理器為(wei) 基礎的新型控製裝置,是將計算機技術應於(yu) 工業(ye) 控製領域的嶄新產(chan) 品。它集邏輯運算、順序控製、定...

1 引言
  可編程序控製器(programmable controller)簡稱plc是以微處理器為(wei) 基礎的新型控製裝置,是將計算機技術應於(yu) 工業(ye) 控製領域的嶄新產(chan) 品。它集邏輯運算、順序控製、定時、計數、算術運算功能為(wei) 一體(ti) 。另外還可以與(yu) 其他計算機進行通信聯網,這種通信不但包括不同的plc之間的數據交換,而且還包括plc與(yu) 計算機之間的通信。本文介紹筆者使用vb6.0實現plc與(yu) 上位機之間的通信,使運行人員通過油機配電屏的顯示可以監測並控製遠端設備的工作。

2 係統構成
  本係統采用plc采集模擬信號、數據處理,通過串行通信口上傳(chuan) 到計算機,計算機對傳(chuan) 上來的數據進行分析、分類記入數據庫,實時顯示在配電屏上並提供數據查詢。plc為(wei) s7-224,串行通信接口的信號線采用rs-485,此信號線為(wei) 半雙工,即不能同時接收和發送。將plc置於(yu) run狀態,就可以將plc中存於(yu) 發送緩衝(chong) 區中的數據及信號送入上位機的串口,上位機通過串口通信程序接收這些數據後顯示並通過數據庫控件adodc的綁定,把數據記錄到數據庫,從(cong) 而完成數據的采樣。本工程所需采集的數據包括日常量、故障量和設備動作量。對於(yu) 日常量需每時每刻的數據顯示在配電屏的主控製平麵上,以便工作人員觀察實時數據,但是不需要把日常量都記入數據庫,隻需隔一段時間記錄一次(在這裏每隔半小時記錄一次),對於(yu) 故障量和設備動作量要求隻要設備發生故障或動作就要記錄到數據庫,以便工作人員查詢。

3 s7-200的通信方式與(yu) 通信參數的設置
  s7-200的通信功能很強大,有多種通信方式可供用戶選擇,包括單主站方式、多主站方式、使用調製解調器的遠程通信方式等。本工程選擇 step7-micro/win32支持的通信硬件pc/ppi電纜,它所支持的波特率有9.6kbps和19.2kbps,支持的協議為(wei) ppi協議,即點對點接口協議,基於(yu) 開放係統互聯模型osi。ppi是主/從(cong) 協議,網絡上的s7-200cpu均為(wei) 從(cong) 站,其他cpu、simatic編程器或td200 為(wei) 主站。s7-200 cpu的通信端口采用rs-485信號標準的連接口,pc/ppi電纜把s7-200 計算機連接起來,通過使用接收中斷、發送中斷和字符中斷等指令,自由端口通信可以控製s7-200cpu通信口的操作模式。本工程使用的是自由端口模式,允許在cpu處於(yu) run模式時通信口0使用自由端口模式,通過設定smb30的值,我們(men) 可以選擇波特率、奇偶校驗、每個(ge) 字符的數據位和協議。cpu處於(yu) stop模式時,停止自由端口通信,通信口強製轉換成ppi協議模式,此時,就可以向cpu中輸入plc程序,實現編程軟件對plc的編程和控製功能。在這裏的通訊過程采用主從(cong) 方式,即計算機為(wei) 主機,plc為(wei) 從(cong) 機,隻有主機計算機發送請求報文後,從(cong) 機plc才向pc返回發送緩衝(chong) 區中的數據。

4 自由端口模式下plc的通信
  由於(yu) 本工程使用的是pc/ppi電纜,所以要在plc的程序中考慮電纜的切換時間。plc接收到請求報文到它返回發送緩衝(chong) 區的數據的延遲時間必須不小於(yu) 電纜的切換時間。波特率為(wei) 9600bps時,電纜的切換時間是2ms。在本工程的程序中是用定時中斷實現切換延時的。
定時中斷子程序:
network title ’定時中斷程序int_2
ld sm0.0
dtch 10
xmt vb200, 0
  當程序運行到“啟動定時中斷”(即atch int_2, 10)的語句時,就會(hui) 跳到如上所示的中斷子程序中,sm0.0是特殊存儲(chu) 器,該位始終為(wei) 1,即隻要plc處於(yu) run狀態,這一開關(guan) 即是接通的。xmt vb200, 0語句是用來發送數據到串口的,此時發送的是存儲(chu) 在以vb200為(wei) 首地址的連續的存儲(chu) 空間中的數據,是通過端口0發送的。
  另外為(wei) 了提高通信的可靠性,我們(men) 需要使用到異或校驗,即在通信的雙方都將每一幀的每一個(ge) 字符作異或校驗,將兩(liang) 者進行對比,如果不相同則可以判定通信有誤。
network1 network title ’求異或校驗碼的子程序fcs
ld sm0.0
movb 0, #xorc
bti #numb, #numi
for #temp1, +1, #numi
movb 0, #xorc ’用來把異或校驗碼
清零, 用bti#numb,
#numi將字節數
轉換為(wei) 整數
network2
ld sm0.0
xorb *#pnt, #xorc
incd #pnt
network3
next
  for到next語句指明了一個(ge) 循環,從(cong) 這一幀的第一個(ge) 字符開始(不包括起始字符)到該幀中最後一個(ge) 字符作異或運算。通過調用這個(ge) 子程序可以計算所指定的數據存儲(chu) 空間內(nei) 的字符的異或校驗碼,如果在上位機中的vb程序中也有計算校驗碼的子程序,那麽(me) 就可以比較這兩(liang) 次計算的校驗碼是否相同。可以使用語句(call fcs, &vb102, vb99, vb90)來調用該子程序,其中&vb102是指出子程序fcs進行校驗的起始地址,vb99是用來存儲(chu) 需要異或的字節數,而vb90是用來存儲(chu) 計算出來的校驗和。假設把從(cong) 上位機接收到的校驗碼存儲(chu) 在vb91中,比較vb90和 vb91中的數據就可以檢驗這次通信是否正確。同樣,我們(men) 可以使用這個(ge) 子程序計算從(cong) plc中發送的數據的校驗碼,把它送到上位機中某一特定的地址中,在上位機中比較兩(liang) 個(ge) 數據是否正確(在上位機的計算異或校驗碼的vb程序將在後麵給出)。
  因為(wei) 報文的起始字符和結束字符隻有8位,接收的報文數據區內(nei) 出現與(yu) 起始字符和結束字符相同的字符的幾率很大,這就可能會(hui) 是數據區字符與(yu) 起始字符或結束字符發生混淆,為(wei) 了避免這種情況,可以在發送數據前對數據作一下處理,把數據字符轉換為(wei) bcd碼,在s7-200中專(zhuan) 門提供了整數與(yu) bcd碼的轉換指令,可以使用語句(ibcd vw200)就把輸入的整數轉換為(wei) bcd碼,結果送入了vw200中。上位機接收到後需要將其轉換回整數。
  另外,在初始化時要注意自由端口通信協議的設定,一定要使通信過程中的波特率,數據位,奇偶校驗及停止位與(yu) 上位機vb以及通信線上中設定的參數相同,否則將不能實現通信過程,要麽(me) 接收不到數據,要麽(me) 會(hui) 出現“下標越界”的錯誤。

5 上位機的通信部分采用vb語言編程
  上位機通信接口部分采用vb語言來編寫(xie) , 在vb中專(zhuan) 門有一個(ge) 控件microsoft comm control(簡稱mscomm控件)用來提供串行通信。在編程過程中隻要設置mscomm控件的屬性, 就可以實現串行通信。mscomm控件一般不包括在常用的工具框中, 需要在右邊的工具框的空白處點擊鼠標右鍵,選擇components選項,就會(hui) 出現components對話框,在其中的controls標簽下就會(hui) 找到 microsoft comm control6.0,選定它, 點擊確定就可以把這一控件加入到右邊的工具框中, 圖標為(wei) 。
  用鼠標拖動這個(ge) 圖標到form中,即可設置其屬性。在此控件眾(zhong) 多的屬性當中,需要重新定義(yi) 的屬性隻有commport(傳(chuan) 輸數據的通信端口號)、settings(設置數據傳(chuan) 輸的波特率、奇偶校驗、數據位以及停止位,注意,此參數一定要與(yu) plc通信程中設置的參數相一致)、 portopen(設置通信端口的狀態)、inputmode(讀取接收緩衝(chong) 區的格式)等。本工程采用事件驅動方式處理接受信息,即把 rthreshold屬性設置為(wei) 非零的值,此時隻要接收字符或傳(chuan) 輸線發生變化就會(hui) 產(chan) 生串口事件oncomm。通過查詢commevent屬性可以捕獲這些通信事件。
  在vb中實現異或計算的程序及注釋如下:
nbyte(1)=ubound(sdata)+1 ’送數據區字節數#p#分頁標題#e#
fcs=nbyte(1) ’校驗碼初始化
for i=2 to ubound(sdata)+2
nbyte(i)=sdata(i - 2) ’待發送數據報文數
組的數據區
fcs=fcs xor nbyte(i) ’異或運算, 求校驗碼
next
nbyte(i)=fcs ’送校驗碼
  其中sdata為(wei) 發送的數據數組的變量名稱,for-next語句實現所發送的數據每一位都進行異或運算。這樣就可以把發送數據的異或校驗碼送到plc中,在plc比較兩(liang) 次計算出的校驗碼是否相同,從(cong) 而提高通信的可靠性。
  本工程中把計算機向下發送控製命令的部分寫(xie) 成自定義(yi) 函數send(xi)(i從(cong) 1到6),在每一個(ge) 需要發送控製命令的按鈕處調用此函數,隻是在send中參數設置為(wei) 不同的控製數。
 


圖1 設備動作狀態接收表


  圖1為(wei) 模擬一個(ge) 油機配電屏控製麵,該軟件可以對三相輸出電壓、電流、功率因數這些實時信號進行采集、顯示並存儲(chu) ,並對設備的動作狀態、故障情況采集到數據庫中。該控製麵上方有一係列的控製按鈕,點擊某一按鈕就會(hui) 向下位機發送相應的控製命令,控製下位機動作。
  在通信過程中,由於(yu) 計算機為(wei) 主機,而plc為(wei) 從(cong) 機,因此,plc隻有在接收到計算機發送的信息後,才發送數據。計算機發送數據的次數並不是與(yu) 其接收數據次數是一一對應的,計算機每點擊一次發送控製命令的按鈕(請參看圖1)後,plc就要向計算機傳(chuan) 輸存於(yu) 其緩衝(chong) 區內(nei) 的所有數據,而每引發一次 oncomm事件隻能傳(chuan) 輸8個(ge) 字節,因此假如plc的發送緩衝(chong) 區中一共右50個(ge) 數據,那麽(me) 每要求向上傳(chuan) 送一次數據,就會(hui) 相應的引發7次oncomm事件,而且,每引發一次oncomm事件程序就會(hui) 一直執行到end sub為(wei) 止。這一點可以通過在發送數據的程序中加入測試語句 “debug.print‘start’”,在end sub前加一測試語句“debug.print‘end’”來驗證,我們(men) 可以清楚的在立即窗口中發現每一個(ge) start後有7個(ge) end。

6 與(yu) 數據庫綁定的控件
  采集數據的最終目的不僅(jin) 要把需要顯示的數據(比如:日常量)顯示在界麵上,另外還要把數據記錄到數據庫中,以備日後查詢。顯示數據的過程很容易實現,就是把接收緩衝(chong) 區的內(nei) 容按照事先約定好的順序依次取出即可。要把數據記錄到數據庫就需要用到數據庫綁定控件,在本工程中用到的是adodc控件,這一控件也不包括在常用的工具框中,仍然要依照加mscomm控件的方法把工具條microsoft ado data control6.0(sp4)(oledb)加到工具框中,然後就可以把這一控件拖入form(在本次工作中把adodc控件放在了程序運行時不顯示的查詢畫麵中,這樣就可以同時完成記錄到數據庫和查詢工作)中,通過設定adodc1的connectionstring(要求與(yu) 事先建好的數據庫所存儲(chu) 的地址相聯接)、 commandtype(由於(yu) 要向數據庫寫(xie) 入數據因此要把它設置為(wei) 2-adcmdtable)以及recordsource(如果指定的數據庫包含多個(ge) 表,就要選擇一個(ge) 與(yu) 此adodc1相對應的表)屬性(其他屬性用默認值即可)就綁定完畢。
  在編程序時,可以通過下麵的語句把傳(chuan) 遞上來的信息整理並寫(xie) 進數據庫:
if rcv(5) then
with adodc1
.recordset.addnew
.recordset(“設備名稱”)=“斷路器1”
.recordset(“動作狀態”)=“合”
.recordset(“動作時間”)=now
.recordset.update
end with
end if
  其中“設備名稱”“動作狀態”“動作時間”是所綁定的數據庫的字段名,等號後麵的值是滿足條件語句時向所綁定的數據庫的相應的字段所加的字段值,在本工程中在數組rcv中暫放了從(cong) 接收緩衝(chong) 區中接收到的所有數據,而rcv(5)所放置的是是否合斷路器1這個(ge) 動作信息,約定plc送上來的數據中 rcv(5)=1表示合斷路器1,因此有上述語句,其他的動作狀態記錄、故障狀態記錄及日常量記錄與(yu) 上述程序幾乎相同,但是由於(yu) 日常量不需要每時每刻都要記錄到數據庫,因此在日常量向數據庫寫(xie) 入時用了靜態變量count來計時,假如count的值每增加1時間就增加1s,要求每半個(ge) 小時記錄一次,那麽(me) 就可以用count mod 1800 =0來實現這一時間的控製。

7 結束語
  文中列出了筆者認為(wei) plc與(yu) 計算機通信程序編寫(xie) 過程中需要注意的問題,並給出筆者認為(wei) 有難度的程序代碼,本工程已經成功的通過了測試,已交付使用。

參考文獻
[1] 羅朝盛等. visual basic6.0程序設計教程[m]. 北京:人民郵電出版社,2002.
[2] 廖常初. plc編程及應用[m]. 北京:機械工業(ye) 出版社,2002.

轉載請注明出處。

免責聲明

① 凡本網未注明其他出處的作品,版權均屬於(yu) fun88网页下载,未經本網授權不得轉載、摘編或利用其它方式使用。獲本網授權使用作品的,應在授權範圍內(nei) 使 用,並注明"來源:fun88网页下载”。違反上述聲明者,本網將追究其相關(guan) 責任。
② 凡本網注明其他來源的作品及圖片,均轉載自其它媒體(ti) ,轉載目的在於(yu) 傳(chuan) 遞更多信息,並不代表本媒讚同其觀點和對其真實性負責,版權歸原作者所有,如有侵權請聯係我們(men) 刪除。
③ 任何單位或個(ge) 人認為(wei) 本網內(nei) 容可能涉嫌侵犯其合法權益,請及時向本網提出書(shu) 麵權利通知,並提供身份證明、權屬證明、具體(ti) 鏈接(URL)及詳細侵權情況證明。本網在收到上述法律文件後,將會(hui) 依法盡快移除相關(guan) 涉嫌侵權的內(nei) 容。

網友點評
0相關評論
精彩導讀