本系統(tǒng)PLC的編程使用CX-ProgrammerV3.1編寫,實現(xiàn)PLC對故障繼電器的初步監(jiān)控;上位機監(jiān)控使用VisualBasic6.0編寫主監(jiān)控程序,實現(xiàn)故障實時監(jiān)控報警、顯示、記錄、故障點信息查詢修改以及運行狀態(tài)查詢等功能。
(1)PLC程序:該程序包括三個輸入模塊和一個輸出模塊,用于對48個故障信息的采集和分類,并對PLC后備電池狀態(tài)監(jiān)控。
將故障信息轉(zhuǎn)存到20通道:

將故障分類:

PLC后備電池狀態(tài)轉(zhuǎn)存至23通道:
![]()
(2)上位機程序:主要負(fù)責(zé)與PLC進(jìn)行串口通信,讀取PLC內(nèi)部通道狀態(tài)加以分析,在主界面上實現(xiàn)故障報警、顯示、故障點信息查詢、故障信息記錄查詢以及節(jié)點信息修改查詢等功能。上位機PC與PLC通訊時,按應(yīng)答方式進(jìn)行,由上位計算機發(fā)給PLC一組ASCⅡ碼字符數(shù)據(jù),這一數(shù)據(jù)稱為命令塊。PLC收到命令塊后經(jīng)分析認(rèn)為命令正常,則按照命令進(jìn)行操作,將操作結(jié)果返回給上位計算機,PLC返回給上位計算機的這一組數(shù)據(jù)稱為響應(yīng)塊。若PLC收到命令后經(jīng)分析確認(rèn)命令不正常,則返回給上位計算機錯誤命令響應(yīng)塊。上位計算機和PLC通訊時,PLC是被動的,必須由上位計算機給PLC發(fā)出命令塊,PLC作出響應(yīng)發(fā)還給上位計算機響應(yīng)塊。
本程序采用多重通訊方式,多重通訊時首幀以單元號(即HOST bbbb的機號)開始,然后為報頭、報文、校驗碼、結(jié)束符(只有一幀時)或分隔符(多幀時)。中間幀以報文開始,然后為校驗碼、分隔符,中間幀報文每幀最多125個字符。尾幀以報文開始,然后為校驗碼、結(jié)束符,尾幀報文最多124個字符。
校驗碼FCS(Frame Check Sequence)是8位(bit)二進(jìn)制數(shù)轉(zhuǎn)換成的2位字符。這8位二進(jìn)制數(shù)是一幀中校驗碼前的所有字符的ASCⅡ碼按位異或的結(jié)果。轉(zhuǎn)換成字符時按照2位十六進(jìn)制數(shù)字轉(zhuǎn)換成對應(yīng)的數(shù)字字符。
PLC收到上位計算機發(fā)出的命令塊后,經(jīng)分析操作返回給上位計算機響應(yīng)塊,在響應(yīng)塊中含有響應(yīng)碼。如果PLC正常完成上位計算機的命令,則響應(yīng)碼為00,否則,響應(yīng)碼中含有出錯信息。
(3)上位機PC與PLC的串口通信程序設(shè)計。
Timer2的值設(shè)為2000,即每隔2s上位機PC向PLC發(fā)送一次讀取命令,讀取信息。
Private Sub Timer2_Timer()
Dim a(10) As bbbbbb
a(0)="@00RR00200004" ’單元號和報頭報文
a(1)=FCS(a(0)) ’命令格式中的校
驗位
a(2)=a(0)+a(1)+"*"+Chr$(13)
’命令碼
MSComm1.Output=a(2) ’向PLC發(fā)送命令
a(3)=MSComm1.bbbbb
a(4)=Mid$(a(3),6,2) ’響應(yīng)碼
Call Message(a(4)) ’調(diào)用響應(yīng)碼的錯
誤信息
If errortime > 3 Then
Timer2.Enabled=False
intr=MsgBox(“通訊錯誤,是否退出檢查連接?”,vbYesNoCancel+vbExclamation,“通訊連接中”)
If intr=vbYes Then
………
Else
………
End If
End If
’如果通訊連接正常則讀取數(shù)據(jù):
[NextPage]
a(6)=Mid$(a(3),24,2) ’響應(yīng)塊中的校驗碼
a(7)=Mid$(a(3),1,23)
a(8)=FCS(a(7)) ’計算校驗碼
If a(8)=a(6) Then ’比較校驗碼是否相同
a(9)=Mid$(a(3),8,16)
a(10)=Hex2Bin$(a(9))
z=a(10) ’得到PLC內(nèi)部通道數(shù)據(jù)
Else
MsgBox (“校驗碼不正確”)
………
End If
(4)校驗碼計算函數(shù)設(shè)計
Function FCS(ByVal bbbbbstr As bbbbbb) As bbbbbb
Dim slen, n, xorresult As Integer
Dim tempfcs As bbbbbb
slen=Len(bbbbbstr)
xorresult=0
For n=1 To slen
xorresult=xorresult Xor Asc(Mid$(bbbbbstr, n, 1))
Next n
tempfcs=Hex$(xorresult)
If Len(tempfcs)=1 Then
tempfcs=“0”+tempfcs
End If
FCS=tempfcs
End Function
將響應(yīng)碼中的數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù):
Function Hex2Bin$(HexValue$)
Const BinTbl=“0000000100100011010001010110011110001001101010111100110111101111”
Dim X,Work$
Work$=“”
For X=1 To Len(HexValue$)
Work$=Work$+Mid$(BinTbl,Val(“&h”+Mid$(HexValue$, X, 1))*4+1,4)
Next
Hex2Bin$=Work$
End Function
4 監(jiān)控程序完成的功能
4.1 監(jiān)控程序功能
故障信息及節(jié)點查詢參見圖4。PLC電池故障顯示參見圖5。數(shù)據(jù)庫將記錄系統(tǒng)運行狀態(tài),記錄故障發(fā)生的時間及相關(guān)信息,故障修復(fù)的時間及相關(guān)信息并提供查詢功能參見圖7??梢圆榭粗鹘缑嫔衔惶査鶎?yīng)的PLC位、名稱、觸點狀態(tài)等信息以便于故障分析,參見圖8。系統(tǒng)運行總狀態(tài)指示如圖6所示。

圖 4 故障點信息顯示
[NextPage]
圖 5 PLC后備電池故障顯示
![]()
圖 6 系統(tǒng)運行狀態(tài)指示

圖 7 數(shù)據(jù)庫查詢

圖 8 位號對應(yīng)信息查詢
5 結(jié)束語
本系統(tǒng)是為齊魯石化氯堿廠生產(chǎn)車間設(shè)計的電路故障報警系統(tǒng),現(xiàn)已投入運行。在實際應(yīng)用中提供了真實可靠的生產(chǎn)實時數(shù)據(jù),運行情況良好。為企業(yè)減少了人力資源浪費,化工廠生產(chǎn)車間環(huán)境較差,改善了工人的工作環(huán)境降低了工作強度,并實現(xiàn)了集中監(jiān)控。本系統(tǒng)的可擴展性也很好的適應(yīng)了車間改良的需求,可根據(jù)用戶的要求增加監(jiān)控點并將本車間故障分類輸出到上一級監(jiān)控站,受到了用戶的好評。










