




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、VC環(huán)境下三菱PLC與微機(jī)的串行通信 摘 要:主要介紹三菱FX系列PLC與上位機(jī)之間的通訊協(xié)議,并采用CSerial類來實(shí)現(xiàn)串行通信,本文給出了程序設(shè)計(jì)方法和部分源代碼。關(guān)鍵字:串行通信 PLC CSerial0 引言可編程控制器(PLC)是集計(jì)算機(jī)技術(shù)、自動控制技術(shù)、通信技術(shù)為一體的新型自動控制裝置。由于體積小、可靠性高以及組態(tài)靈活等優(yōu)點(diǎn),PLC在工業(yè)控制領(lǐng)域得到了廣泛的應(yīng)用。將PC機(jī)與可編程控制器組合起來,充分利用PC機(jī)強(qiáng)大的
2、人機(jī)接口功能、豐富的應(yīng)用軟件和低廉的價(jià)格來共同實(shí)現(xiàn)管理、控制一體化成為一個(gè)新的發(fā)展趨勢。本文重點(diǎn)介紹在Windows 2000環(huán)境下如何利用VC來實(shí)現(xiàn)PC機(jī)與三菱PLC之間的串行通訊。1 三菱PLC與計(jì)算機(jī)之間通信協(xié)議FX2系列PLC與計(jì)算機(jī)之間的通信采用RS-232標(biāo)準(zhǔn),其傳輸速率固定為9600bps,奇偶校驗(yàn)位采用偶校驗(yàn)。數(shù)據(jù)格式如表1所示。數(shù)據(jù)以幀為單位發(fā)送和接收。一個(gè)多字符幀由圖1所示的五部分組成,其中和校驗(yàn)值是將命令碼STXETX之間的字符的ASCII碼(十六進(jìn)制數(shù))相加,取得所得和的最低
3、二位數(shù)。STX和ETX分別表示該字符幀的起始標(biāo)起和結(jié)束標(biāo)志。 圖1 數(shù)據(jù)幀格式 (1) 起始字元(STX):ASCII碼的起始字元STX對應(yīng)的16進(jìn)制數(shù)位0x02。無論命令信息還是回應(yīng)信息,它們的起始字元均為STX,接收方以此來判知傳輸資料的開始。(2)
4、 命令號碼:為兩位16進(jìn)制數(shù)。所謂命令號碼是指上位機(jī)要求下位機(jī)所執(zhí)行的動作類別,例如要求讀取或?qū)懭雴吸c(diǎn)狀態(tài)、寫入或讀取暫存器資料、強(qiáng)制設(shè)定、運(yùn)行、停止等。在回應(yīng)信息中,下位機(jī)會將上位機(jī)接收到的命令號碼原原本本的隨同其它信息一同發(fā)送給上位機(jī)。(3) 元件首地址:對應(yīng)要操作的元件的相應(yīng)的地址。如從D123單元中讀取數(shù)據(jù)時(shí),要把它對應(yīng)的地址:0x10F6發(fā)送給PLC。(4) 元件個(gè)數(shù):一次讀取位元件或字元件的數(shù)量。(5) 結(jié)束字元(ETX):ASCII碼的結(jié)束字元ETX對應(yīng)的16進(jìn)制數(shù)為0x03。無論命令
5、信息還是回應(yīng)信息,它們的結(jié)束字元均為ETX,接收方以此來判知此次通訊已結(jié)束。(6) 校驗(yàn)碼(Checksum):校驗(yàn)碼是將STX-ETX之間的ASCII字元的16進(jìn)制數(shù)值以“LRC(Longitudinal Redundancy Check)”法計(jì)算出1個(gè)Byte長度(兩個(gè)16進(jìn)制數(shù)值00-FFH)的校驗(yàn)碼。當(dāng)下位機(jī)接收到信息后,用同樣的方法計(jì)算出接收信息的校驗(yàn)碼,如果兩個(gè)校驗(yàn)碼相同,則說明傳送正確。FX2系列與計(jì)算機(jī)之間的通信是以主機(jī)發(fā)出的初始命令,PLC對其做出響應(yīng)的方式進(jìn)行通信的。共有0、1、7、8四種命令,上位機(jī)實(shí)現(xiàn)對PLC的讀寫和強(qiáng)行置位。通過ENQ、ACK和
6、NAK,上位機(jī)協(xié)調(diào)與PLC的通信應(yīng)答。2 編程口操作命令類型 串行通信是計(jì)算機(jī)與其他機(jī)器之間進(jìn)行通信的一種常用方法,在Windows操作系統(tǒng)中提供了實(shí)現(xiàn)各種串行通信的API函數(shù)。通過SC-09編程電纜或FX-232-BD通訊模塊,可以將PC機(jī)和計(jì)算機(jī)串行通信口RS-232連接起來,可以實(shí)現(xiàn)PC機(jī)對PLC的RAM區(qū)數(shù)據(jù)進(jìn)行讀、寫操作。根據(jù)PLC本身所具有的特性,計(jì)算機(jī)可對PLC進(jìn)行以下4種類型的操作:(1) 位元件或字元件狀態(tài)讀操作(CMD0);(2)
7、位元件或字元件狀態(tài)寫操作(CMD1);(3) 位元件強(qiáng)制ON操作(CMD7);(4) 位元件強(qiáng)制OFF操作(CMD8)。3 軟件編程(1) 串行通信實(shí)現(xiàn)方法 在進(jìn)行以上四種操作之前要對串行通信口進(jìn)行必要的初始化。本人采用了一個(gè)專門針對串行通信的CSerial類,并在Open函數(shù)中進(jìn)行了進(jìn)一步的完善。它由MuMega Technologies公司提供的一個(gè)Vi
8、sual C+類,我們只要理解CSerial類種的幾個(gè)成員函數(shù),就能很方便地實(shí)現(xiàn)串行通信了。以下是該類定義:class CSerialpublic: CSerial(); CSerial(); BOOL Open( int nPort , int nBaud,int nParity,int nByteSize,int nStopBits );
9、160; BOOL Close( void ); int ReadData( void *, int ); int SendData( const char *, int ); int ReadDataWaiting( void ); BOOL IsOpened( void ) retu
10、rn( m_bOpened ); protected: BOOL WriteCommByte( unsigned char ); HANDLE m_hIDComDev; OVERLAPPED m_OverlappedRead, m_OverlappedWrite; BOOL m_bOpened;
11、160; Serial:Open這個(gè)成員函數(shù)打開通信端口。帶五個(gè)參數(shù),第一個(gè)是串口號,第二個(gè)參數(shù)是數(shù)據(jù)傳輸速率,第三個(gè)是數(shù)據(jù)效驗(yàn)方式,第四個(gè)是數(shù)據(jù)位數(shù),第五個(gè)是數(shù)據(jù)停止位。 Serial:Close函數(shù)關(guān)閉通信端口。 CSerial:SendData函數(shù)把數(shù)據(jù)從一個(gè)緩沖區(qū)寫到串行端口。第一個(gè)參數(shù)是緩沖區(qū)指針,其中包含要被發(fā)送的資料;第二個(gè)參數(shù)是發(fā)送的字節(jié)數(shù)。 CSerial:ReadData函數(shù)從斷口接收緩沖區(qū)讀入數(shù)據(jù)。第一個(gè)參
12、數(shù)是緩沖區(qū)指針,資料將被放入該緩沖區(qū);第二個(gè)參數(shù)緩沖區(qū)的大小。(2) 位元件或字元件狀態(tài)讀操作操作對象元件:PLC內(nèi)部的X、Y、M、S、T、C、D元件;命令格式如表1;在發(fā)送完上述命令格式代碼后,就可以讀取PLC響應(yīng)信息了。響應(yīng)信息格式如圖2; 圖2 響應(yīng)信息格式部分程序代碼:BOOL CPlcComDlg:ReadPLC(char *Read, char *address, int bytes) CSerial Serial; char read_B
13、UFFER; if(Serial.Open(m_com, m_Buad, m_Parity, m_Byte, m_StopBites) Serial.SendData(&ENQ_request,1);/發(fā)送聯(lián)絡(luò)訊號
14、160; Sleep(100); Serial.ReadData(&read_BUFFER,1);/讀取PLC響應(yīng)訊號 if(read_BUFFER=ACK) &
15、#160; /初始化變量
16、; /發(fā)送圖2命令格式代碼ASCII(readdatasum_check,readdata_sum);/將STX-ETX之間的字符相加,轉(zhuǎn)換成ASCII(十六進(jìn)制),并取和的低二位數(shù)。 if(*readdatasum_CHECK=*readdatasum_check)/和校驗(yàn)
17、 /對讀出的數(shù)據(jù)進(jìn)行處理,轉(zhuǎn)換成整型數(shù)
18、60; for(int j=0;j<bytes/2;j+)
19、60;
20、160; for(i=j*2;i<j*2+4;i+)
21、 Readi=(Readi>0x39)?(Readi-0x41+0xA):(Read i-0x30);
22、 Read_valuej=(Read j*4+2<<4)+Read j*4+3)+Read j*4+0)<<4)+Read j*4+1;
23、0; return TRUE;
24、160; else
25、160; return FALSE;
26、; /將整數(shù)轉(zhuǎn)換成ASCII(十六進(jìn)制),并取低二位,void CPlcComDlg:ASCII(char *total_databytes, int read_bytes) unsigned int uTmp;
27、 uTmp=read_bytes & 0x000f; total_databytes1=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-0xA); uTmp=(read_bytes>>4) & 0x000f; total_databytes0=(uTmp<10)?(uTmp+0x30):(uTmp+0x41-
28、0xA); (3) 位元件或字元件狀態(tài)寫操作操作對象元件:PLC內(nèi)部的X、Y、M、S、T、C、D元件;命令格式如圖3所示。圖3 位元件或字元件寫操作 程序代碼(略)。(4) 位元件強(qiáng)制ON操作操作對象元件:PLC內(nèi)部的X、Y、M、S、T、C元件;命令格式如圖4所示。圖4 位元件強(qiáng)制ON操作 部分程序代碼如下: void CPlcComDlg:ForceOnOpreation(char *Address)
29、60; CSerial Serial; char read_BUFFER; CString strtemp; if(Serial.Open(m_com,9600)
30、160; Serial.SendData(&ENQ_request,1); Sleep(100); Serial.ReadData(&read_BUFFER,1);
31、 if(read_BUFFER=ACK) /初始化變量 &
32、#160; /發(fā)送圖4命令格式代碼ASCII(Sum_Check,sum); /將STX-ETX之間的字符相加,轉(zhuǎn)換成ASCII(十六進(jìn)制),并取和的低二位數(shù) for(i=0;i<2;i+)
33、0; Serial.SendData(&Sum_Checki,1);/和校驗(yàn) Sleep(100);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出售廢舊板房合同范本
- 古建供貨合同范例
- 舊房房屋粉刷合同范本
- 賣鞋合同范本
- 劃撥地購房合同范本
- 分公司股合同范本
- 業(yè)務(wù)安全合同范本
- 口罩袋合同范本
- 住址合同范本
- 門面租賃合同范本簡寫
- 《公債經(jīng)濟(jì)學(xué)》課程教學(xué)大綱
- 《產(chǎn)后出血預(yù)防與處理指南(2023)》解讀課件
- 趣味語文課程設(shè)計(jì)
- 外研版(2019)必修 第一冊Unit 1 A New Start revision 課件
- 肺部感染臨床路徑
- 電商平臺定價(jià)策略優(yōu)化
- 人美版美術(shù) 二年級下冊全冊教學(xué)設(shè)計(jì)(表格式)
- 保險(xiǎn)經(jīng)紀(jì)人考試題庫含答案
- 2024-2030年中國骨傳導(dǎo)耳機(jī)行業(yè)銷售渠道及供需前景預(yù)測報(bào)告
- 2024年導(dǎo)游服務(wù)技能大賽《導(dǎo)游綜合知識測試》題庫及答案
- 專項(xiàng)訓(xùn)練-解決問題訓(xùn)練(專項(xiàng)訓(xùn)練) 六年級下冊數(shù)學(xué)人教版
評論
0/150
提交評論