資源描述:
《用vb實(shí)現(xiàn)歐姆龍plc及計(jì)算機(jī)間的串行通信》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、用VB實(shí)現(xiàn)歐姆龍PLC及計(jì)算機(jī)間的串行通信 1引言 在工業(yè)控制領(lǐng)域中,plc作為一種穩(wěn)定可靠的控制器得到廣泛的應(yīng)用。但它也有自身的一些缺點(diǎn),即數(shù)據(jù)的計(jì)算處理和管理能力較弱,不能給用戶(hù)提供良好的界面等。而計(jì)算機(jī)恰好能彌補(bǔ)plc的不足,它不但有很強(qiáng)的數(shù)據(jù)處理和管理能力,而且能給用戶(hù)提供非常美觀(guān)而又易于操作的界面。將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ì)算
2、機(jī)通信的原理和用vb如何實(shí)現(xiàn)plc與計(jì)算機(jī)的通信?! ?通行原理與方法 上位機(jī)要能夠通過(guò)plc監(jiān)控下層設(shè)備的狀態(tài),就要實(shí)現(xiàn)上位機(jī)與plc間的通信,一般工業(yè)控制中都是采用rs232c實(shí)現(xiàn)。上位機(jī)首先向plc發(fā)送查詢(xún)數(shù)據(jù)的指令(實(shí)際上是查詢(xún)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ù),也要判斷正確與否,如果正確,則接收,否則,拒絕接收?! ∮?/p>
3、于cpm1a沒(méi)有提供串行通信口,我們利用其提供的外設(shè)端口實(shí)現(xiàn)通信。plc與計(jì)算機(jī)之間的連接是通過(guò)omron提供的專(zhuān)用電纜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)幀的格式如下: ?。?)命令幀格式。為了方便計(jì)算機(jī)和plc的通訊,cpm1a對(duì)在計(jì)算機(jī)連接通信中交換的命令和響應(yīng)規(guī)
4、定了相應(yīng)的格式。當(dāng)計(jì)算機(jī)發(fā)送一個(gè)命令時(shí),命令數(shù)據(jù)主準(zhǔn)備格式如圖2所示。 其中@放在首位,表示以@開(kāi)始,設(shè)備號(hào)為上位機(jī)識(shí)別所連接的plc的設(shè)備號(hào)。識(shí)別碼為命令代碼,用來(lái)設(shè)置用戶(hù)希望上位機(jī)完成的操作,fcs為幀檢驗(yàn)代碼,一旦通信出錯(cuò),通過(guò)計(jì)算fcs可以及時(shí)發(fā)現(xiàn)。結(jié)束符為“*”和cr回車(chē)符,表示命令結(jié)束?! 。?)響應(yīng)幀格式。由plc發(fā)出的對(duì)應(yīng)于命令格式的響應(yīng)幀格式如圖3所示。 其中,異常碼可以確定計(jì)算機(jī)發(fā)送的命令是否正確執(zhí)行。其它的與正文中的含義相同。正文僅在有讀出數(shù)據(jù)時(shí)有返回?! ?通信程序的設(shè)
5、計(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ò)串行端口傳送和接受的功能?! ∠旅娼榻Bmscomm控件的屬性: ?。猚ommport:設(shè)定通信連接端口代號(hào),程序必須指定所要使用的串行端口號(hào),WINOOWs系統(tǒng)使用所設(shè)定的端口與外界通信。 ?。猵ortopen:設(shè)定通信口狀
6、態(tài),若為真,通信端口打開(kāi),否則關(guān)閉?! 。猻ettings:設(shè)定通信口參數(shù),其格式是”bbbb,p ,d,s”,其中bbbb為通信速率(波特率),p為通信檢查方式(奇偶校驗(yàn)),d為數(shù)據(jù)位數(shù),s為停止位數(shù),其設(shè)定應(yīng)與plc的設(shè)定一致?! 。猧nput:將對(duì)方傳送至輸入緩沖區(qū)的字符讀入到程序?! 。猳utput:將字符寫(xiě)入輸出緩沖區(qū)?! 。猧nbuffercount:傳回接收緩沖區(qū)中的字符數(shù)。 ?。猳utbuffercount:傳回輸出緩沖區(qū)中的字符數(shù)?! 。猧nputlen:設(shè)定串行端口讀入字符串的長(zhǎng)度。
7、 ?。猧nputmode:設(shè)定接收數(shù)據(jù)的方式?! 。猺threshold:設(shè)定引發(fā)接收事件的字符數(shù)?! 。猚ommevent:傳回oncomm事件發(fā)生時(shí)的數(shù)值碼 ?。猳ncomm事件:無(wú)論是錯(cuò)誤或事件發(fā)生,都會(huì)觸發(fā)此事件?! 。?)控件參數(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)
8、計(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$(inputst