當(dāng)前位置: 首頁(yè) > 工業(yè)控制產(chǎn)品 > 自動(dòng)化控制 > PLC可編程控制器
發(fā)布日期:2022-04-26 點(diǎn)擊率:175 品牌:歐姆龍_Omron
1引言
在工業(yè)控制領(lǐng)域中,PLC作為一種穩(wěn)定可靠的控制器得到廣泛的應(yīng)用。但它也有自身的一些缺點(diǎn),即數(shù)據(jù)的計(jì)算處理和管理能力較弱,不能給用戶提供良好的界面等。而計(jì)算機(jī)恰好能彌補(bǔ)plc的不足,它不但有很強(qiáng)的數(shù)據(jù)處理和管理能力,而且能給用戶提供非常美觀而又易于操作的界面。將plc與計(jì)算機(jī)結(jié)合,可使系統(tǒng)達(dá)到既能及時(shí)地采集、存儲(chǔ)數(shù)據(jù),又可處理和使用好數(shù)據(jù),兩者結(jié)合的關(guān)鍵是plc與計(jì)算機(jī)之間的通信。本文以omron公司的cpmia小型plc為例,詳細(xì)的討論了plc與計(jì)算機(jī)通信的原理和用vb如何實(shí)現(xiàn)plc與計(jì)算機(jī)的通信。
2通行原理與方法
上位機(jī)要能夠通過(guò)plc監(jiān)控下層設(shè)備的狀態(tài),就要實(shí)現(xiàn)上位機(jī)與plc間的通信,一般工業(yè)控制中都是采用rs232c實(shí)現(xiàn)。上位機(jī)首先向plc發(fā)送查詢數(shù)據(jù)的指令(實(shí)際上是查詢plc中端子的狀態(tài)和dm區(qū)的值等),plc接收了上位的指令后,進(jìn)行校驗(yàn)(fcs校驗(yàn)碼),看其是否正確,如果正確,則向上位機(jī)傳送數(shù)據(jù)(包含首尾校驗(yàn)字節(jié))。否則,plc拒絕向上位機(jī)傳送數(shù)據(jù)。上位接收到plc傳送的數(shù)據(jù),也要判斷正確與否,如果正確,則接收,否則,拒絕接收。
由于cpm1a沒(méi)有提供串行通信口,我們利用其提供的外設(shè)端口實(shí)現(xiàn)通信。plc與計(jì)算機(jī)之間的連接是通過(guò)omron提供的專用電纜cqm1-cif01來(lái)實(shí)現(xiàn)的,其硬件連接圖如圖1所示。
3plc與計(jì)算機(jī)間的通信規(guī)約
計(jì)算機(jī)與plc間的通信是以“幀”為單位進(jìn)行的,并且在通信的過(guò)程中,計(jì)算機(jī)具有更高的優(yōu)先級(jí)。首先,計(jì)算機(jī)向plc發(fā)出命令幀,然后,plc作出響應(yīng),向計(jì)算機(jī)發(fā)送回響應(yīng)幀。其中命令幀和響應(yīng)幀的格式如下:
(1)命令幀格式。為了方便計(jì)算機(jī)和plc的通訊,cpm1a對(duì)在計(jì)算機(jī)連接通信中交換的命令和響應(yīng)規(guī)定了相應(yīng)的格式。當(dāng)計(jì)算機(jī)發(fā)送一個(gè)命令時(shí),命令數(shù)據(jù)主準(zhǔn)備格式如圖2所示。
其中@放在首位,表示以@開(kāi)始,[emailprotected]?為命令代碼,用來(lái)設(shè)置用戶希望上位機(jī)完成的操作,fcs為幀檢驗(yàn)代碼,一旦通信出錯(cuò),通過(guò)計(jì)算fcs可以及時(shí)發(fā)現(xiàn)。結(jié)束符為“*”和cr回車(chē)符,表示命令結(jié)束。
(2)響應(yīng)幀格式。由plc發(fā)出的對(duì)應(yīng)于命令格式的響應(yīng)幀格式如圖3所示。
其中,異常碼可以確定計(jì)算機(jī)發(fā)送的命令是否正確執(zhí)行。其它的與正文中的含義相同。正文僅在有讀出數(shù)據(jù)時(shí)有返回。
4通信程序的設(shè)計(jì)
為了充分利用計(jì)算機(jī)數(shù)據(jù)處理的強(qiáng)大功能,我們可以采用計(jì)算機(jī)有優(yōu)先權(quán)的方式,在計(jì)算機(jī)上編寫(xiě)程序來(lái)實(shí)現(xiàn)計(jì)算機(jī)與plc的通信,計(jì)算機(jī)向plc發(fā)出命令發(fā)起通信,plc自動(dòng)返回響應(yīng)。本文中采用vb來(lái)編寫(xiě)計(jì)算機(jī)與plc間的通訊程序。在vb中提供了通信控件—應(yīng)用通信控件(mscomm),實(shí)現(xiàn)通過(guò)串行端口傳送和接受的功能。
下面介紹mscomm控件的屬性:
*commport:設(shè)定通信連接端口代號(hào),程序必須指定所要使用的串行端口號(hào),WINOOWs系統(tǒng)使用所設(shè)定的端口與外界通信。
*portopen:設(shè)定通信口狀態(tài),若為真,通信端口打開(kāi),否則關(guān)閉。
*settings:設(shè)定通信口參數(shù),其格式是"bbbb,p
,d,s",其中bbbb為通信速率(波特率),p為通信檢查方式(奇偶校驗(yàn)),d為數(shù)據(jù)位數(shù),s為停止位數(shù),其設(shè)定應(yīng)與plc的設(shè)定一致。
*input:將對(duì)方傳送至輸入緩沖區(qū)的字符讀入到程序。
*output:將字符寫(xiě)入輸出緩沖區(qū)。
*inbuffercount:傳回接收緩沖區(qū)中的字符數(shù)。
*outbuffercount:傳回輸出緩沖區(qū)中的字符數(shù)。
*inputlen:設(shè)定串行端口讀入字符串的長(zhǎng)度。
*inputmode:設(shè)定接收數(shù)據(jù)的方式。
*rthreshold:設(shè)定引發(fā)接收事件的字符數(shù)。
*commevent:傳回oncomm事件發(fā)生時(shí)的數(shù)值碼
*oncomm事件:無(wú)論是錯(cuò)誤或事件發(fā)生,都會(huì)觸發(fā)此事件。
(1)控件參數(shù)的初始化。
初始化程序如下:
mscomm.comport=2`使用串口com2
mscomm.settings="9600,e,7,2"`波特率9600,偶校驗(yàn),7位數(shù)據(jù)位,2位停止位
mscomm.portopen=true`打開(kāi)通信端口,準(zhǔn)備通信
(2)計(jì)算校驗(yàn)碼fcs,計(jì)算fcs的vb自定義函數(shù)如下:
functionfcs(byvalinputstrasstring)asstring
dimslen,i,xorresultasinteger
dimtempfesasstring
slen=len(inputstr)`求輸入字符串長(zhǎng)度
xorresult=0
fori=1toslen
xorresult=xorresultxorasc(mid$(inputstr,i,1))`按位異或
nexti
tempfes=hex$(xorresult)`轉(zhuǎn)化為16進(jìn)制
iflen(tempfes)=1thentempfes=“0”+tempfes
fcs=tempfes
endfunction
(3)計(jì)算機(jī)與plc通信程序。
主要是一個(gè)自定義函數(shù)。
functionreaddata(byvalinputstrasstring,byvalnumasinteger)asstring
dimoutputstrasstring
diminstringasstring
dimreturnstrasstring
dimendstringasstring
dimfcsstringasstring
dimreturnfcsstringasstring)
mscomm.inbuffercount=0
outputstr=inputstr+fcs(inputstr)+“*”`給出命令幀
mscomm.output=outputstr+chr$(13)`向plc傳送命令幀
do
doevents
loopwhilemscomm.inbuffercount<15
instring=mscomm.input`獲取plc的響應(yīng)幀
`結(jié)束碼判斷
endstring=mid$(instring,len(instring)-
num-5,2)
ifendstring="13"then
readdata="error"
exitfunction
elseifendstring="14"then
readdata="error"
exitfunction
elseifendstring="15"then
readdata="error"
exitfunction
elseifendstring="18"then
readdata="error"
exitfunction
elseifendstring="a3"then
readdata="error"
exitfunction
elseifendstring="a8"then
readdata="error"
exitfunction
endif
`響應(yīng)幀校驗(yàn)
endstring=mid$(instring,1,len(instring)-4)
returnfcsstring=mid$(instring,len(instring)-3,2)
fcsstring=fcs(endstring)
iffcsstring<>returnfcsstringthen
readdata="error"
exitfunction
endif
returnstr=mid$(instring,
len(instring)-num-3,num)
readdata=returnstr
endfunction
從上面程序可以看到,計(jì)算機(jī)對(duì)plc返回的響應(yīng)幀要進(jìn)行fcs校驗(yàn),并利用異常碼排除返回的異常數(shù)據(jù),這樣不但可以提高計(jì)算機(jī)獲取信息的正確性,而且提高了計(jì)算機(jī)監(jiān)控的實(shí)時(shí)性。
5結(jié)束語(yǔ)
本文介紹的通信方法在我校cims研究中心自行研制的一套機(jī)電一體化設(shè)備中得到實(shí)施運(yùn)用,經(jīng)試驗(yàn)運(yùn)行,證明這種通信方法穩(wěn)定、可靠,確實(shí)是一種非常有效的方法。將plc與計(jì)算機(jī)通信網(wǎng)絡(luò)連接起來(lái),plc作為下位機(jī),計(jì)算機(jī)作為上位機(jī),形成一個(gè)優(yōu)勢(shì)互補(bǔ)的自動(dòng)控制系統(tǒng),實(shí)現(xiàn)了“集中管理,分散控制”。其中各個(gè)plc子系統(tǒng)或遠(yuǎn)程工作站在生產(chǎn)現(xiàn)場(chǎng)對(duì)各個(gè)被控對(duì)象進(jìn)行控制,利用網(wǎng)絡(luò)連接構(gòu)成一個(gè)plc綜合控制,滿足了現(xiàn)代自動(dòng)化系統(tǒng)向信息化、網(wǎng)絡(luò)化、智能化的過(guò)渡。
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV