1引言
在現(xiàn)代控制系統(tǒng)中,pc機(jī)作為上位機(jī)負(fù)責(zé)系統(tǒng)管理、狀態(tài)監(jiān)控、信息處理和打印報(bào)表等工作,plc作為下位機(jī)進(jìn)行面向現(xiàn)場(chǎng)的實(shí)時(shí)控制已成為一種典型的系統(tǒng)結(jié)構(gòu)。因此,pc機(jī)與plc之間的通信問(wèn)題便成了系統(tǒng)能否實(shí)現(xiàn)的關(guān)鍵。串行通信以其接線簡(jiǎn)單、容易實(shí)現(xiàn)的特點(diǎn)得到了廣泛的應(yīng)用。
visual basic編程軟件簡(jiǎn)單易學(xué)、功能強(qiáng)大,利用它可以很方便的實(shí)現(xiàn)pc機(jī)與plc間的串行通訊。本文以omron公司的cpm2a plc為例,介紹了利用vb6.0實(shí)現(xiàn)pc機(jī)與plc串行通訊的具體方法。
omron公司的cpm2a plc支持host-link通信協(xié)議,可以與上位計(jì)算機(jī)進(jìn)行通信。使用host-link通信協(xié)議構(gòu)成的通信網(wǎng)絡(luò),可以很方便的實(shí)現(xiàn)上位pc對(duì)下位plc的實(shí)時(shí)監(jiān)控。
2原理設(shè)計(jì)
2.1系統(tǒng)結(jié)構(gòu)
系統(tǒng)結(jié)構(gòu)如圖1所示,計(jì)算機(jī)作為上位機(jī),plc作為下位機(jī),因omron cpm2a本身帶有rs-232串口,因此,利用rs-232電纜將其與pc機(jī)的串口(com1或com2)相連,便構(gòu)成了一個(gè)1:1的簡(jiǎn)單的通訊系統(tǒng)[1]。
圖1系統(tǒng)結(jié)構(gòu)
2.2host-link通信協(xié)議[2]
omron公司的host-link通信系統(tǒng)是由上位計(jì)算機(jī)(ibm pc或兼容機(jī))通過(guò)安裝在各臺(tái)plc上的host-link單元連接多臺(tái)plc構(gòu)成的網(wǎng)絡(luò)。上位機(jī)對(duì)系統(tǒng)中的plc進(jìn)行集中管理與監(jiān)控,通過(guò)與host link單元的通信,可以編輯或修改各臺(tái)plc的程序,實(shí)時(shí)監(jiān)控其運(yùn)行過(guò)程,實(shí)現(xiàn)自動(dòng)化系統(tǒng)的集散控制。對(duì)于小型plc,也可以通過(guò)其rs 232c通信端口進(jìn)行鏈接。
系統(tǒng)使用host-link通信協(xié)議進(jìn)行通信,上位機(jī)具有傳送優(yōu)先權(quán),總是首先發(fā)出命令并啟動(dòng)通信,host link單元收到命令交由plc執(zhí)行,然后將執(zhí)行結(jié)果返回上位機(jī),二者以通信幀為單位,輪流交換數(shù)據(jù)。通信時(shí)一組傳送的數(shù)據(jù)稱為“塊”,它是命令或響應(yīng)的單位,從上位機(jī)發(fā)送到host -link單元的數(shù)據(jù)塊稱為命令塊,反過(guò)來(lái),從host- link單元發(fā)送到上位機(jī)的數(shù)據(jù)塊稱為響應(yīng)塊。多點(diǎn)通信時(shí),可作為單幀發(fā)送的最大數(shù)據(jù)塊為131個(gè)字符,因此當(dāng)一個(gè)數(shù)據(jù)塊含有132個(gè)或更多字符時(shí),要分成兩幀或多幀發(fā)送。
每個(gè)數(shù)據(jù)塊都以設(shè)備號(hào)及標(biāo)題開(kāi)始,以校驗(yàn)碼(fcs)及結(jié)束符結(jié)束。響應(yīng)塊中還包括反應(yīng)執(zhí)行結(jié)果的響應(yīng)碼。通信格式如圖2所示。
圖2 通信幀格式
3軟件實(shí)現(xiàn)
3.1mscomm控件介紹[3]
mscomm控件全稱為microsoft communications control,是microsoft公司提供的簡(jiǎn)化winoows下串行通信編程的activex控件,它為應(yīng)用程序提供了通過(guò)串行接口收發(fā)數(shù)據(jù)的簡(jiǎn)化方法。
mscomm控件有兩種通信方式,查詢方式和事件驅(qū)動(dòng)方式,本文采用事件驅(qū)動(dòng)方式。mscomm控件的屬性有許多,其中一些需要在編程時(shí)設(shè)置,另一些則取默認(rèn)值即可,具體設(shè)置方法可參見(jiàn)相關(guān)資料,表1列出了mscomm控件的常用屬性。
3.2plc參數(shù)設(shè)置[4]
plc的通信參數(shù)可以采用默認(rèn)的host-link通信形式,即1位啟動(dòng)位,7位字長(zhǎng),偶校驗(yàn),2位停止位,9600bit/s。設(shè)備號(hào)為00。
3.3上位機(jī)軟件設(shè)計(jì)
使用vb通信控件mscomm編寫plc監(jiān)控程序,通過(guò)rs-232端口發(fā)送并接收數(shù)據(jù),關(guān)鍵代碼如下:
‘程序初始化并設(shè)置串口參數(shù)
private sub form_load()
mscom.commport = 1
mscom.settings = 9600,e,7,2 `通信參數(shù)設(shè)置
mscom.inputmode= cominput
-modetext `以文本方式接收數(shù)據(jù)
mscom.portopen = true `打開(kāi)串口
end sub
`向plc寫入數(shù)據(jù)
private sub butwrite_click()
`檢驗(yàn)串口是否關(guān)閉,若串口已關(guān)閉,則打開(kāi)它
if mscom.portopen = false then
mscom.portopen = true
end if
`plc必須處于編程狀態(tài)才可以寫入數(shù)據(jù)
plcend=@00sc00 `“@”為“開(kāi)始符”表示數(shù)據(jù)幀開(kāi)始;“sc”為host-link指令;“00”表示下位plc的設(shè)備地址,ascii碼表示[4]。
mscom.output = plcend + fcs(plcend) + * + chr$(13)
mscom.inbuffercount = 0
dim outstring as string
outstring=@00wr0010+ trim(txtcontent.text)
outstring = outstring + fcs(outstring) + * + chr$(13) `采用異或校驗(yàn),即fcs校驗(yàn);“*+ chr$(13)”表示結(jié)束符,表示數(shù)據(jù)幀的結(jié)束,即“*↙”[4]。
mscom.inbuffercount = 0
mscom.output = outstring `向plc發(fā)送數(shù)據(jù)
end sub
`從plc讀取數(shù)據(jù)
private sub butread_click()
if mscom.portopen = false then
mscom.portopen = true
end if
dim outstring, instring as string
outstring=@00rr00100001
outstring=outstring+fcs(outstring) + *+chr$(13)
mscom.inbuffercount = 0
mscom.output=outstring `向plc發(fā)送讀取數(shù)據(jù)的命令
dim i as integer
do while mscom.inbuffercoun
-t <= 14 or i > 9000 `i為等待的時(shí)間
i = i + 1
loop
`提取有用數(shù)據(jù)并顯示
if i < 9000 then
instring = mscom.input
txtcontent.text = 輸出010通道的數(shù)據(jù)為 + mid(instring, 8, 4)
else
msgbox (讀取失敗)
end if
end sub
`fcs校驗(yàn)
function fcs(byval fcsstr as string) as string
dim slen, i, xorresult as integer
dim tempfcs as string
slen = len(fcsstr)
xorresult = 0
for i = 1 to slen
xorresult = xorresult xor asc(mid$(fcsstr, i, 1))
next i
tempfcs = hex$(xorresult)
if len(tempfcs) = 1 then tempfcs = 0 + tempfcs
fcs = tempfcs
end function
4結(jié)束語(yǔ)
本文給出了利用vb(主要是其中的mscomm通信控件)開(kāi)發(fā)通信程序,實(shí)現(xiàn)了plc與pc普通串口通信的實(shí)用方法。實(shí)驗(yàn)表明,該程序運(yùn)行穩(wěn)定可靠,且操作簡(jiǎn)便。將程序稍加修改,還可應(yīng)用到其他工業(yè)控制設(shè)備,在小型工業(yè)控制系統(tǒng)中具有一定的應(yīng)用價(jià)值。