基于VC5.0的PC與松下PLC的通信及其應(yīng)用
1 引言
隨著PLC應(yīng)用范圍的不斷擴大,PLC與PC之間通信技術(shù)的應(yīng)用需求越來越廣泛。通過PLC的編程口進(jìn)行通訊不僅可以減少系統(tǒng)的成本及復(fù)雜性,同時可以減少PLC方面軟件的復(fù)雜程度和編程量。本文根據(jù)實際工程中的經(jīng)驗進(jìn)行總結(jié),介紹了利用VC++中MFC實現(xiàn)PC與松下FP0系列PLC編程口進(jìn)行串行通信的程序設(shè)計基本方法。
2 PC與FP0 PLC之間的通信協(xié)議和接口
在一個規(guī)模較大的紡織工業(yè)控制系統(tǒng)中,常常有幾十個、幾百個甚至更多的測溫和控制對象。即使速度很高的系統(tǒng),也很難滿足要求。為了降低危險,提高可靠性,必須將任務(wù)分散,而分散的設(shè)備需要通過一定的手段連接起來,其中數(shù)據(jù)通信和系統(tǒng)互連是該系統(tǒng)的關(guān)鍵技術(shù)之一。松下FP0系列PLC具有較強的通信功能,可以適合各種工業(yè)自動化網(wǎng)絡(luò)的不同需要, 其中包括以太網(wǎng)協(xié)議及通用接口、H型鏈接通信系統(tǒng)(H-LINK)、P型鏈接系統(tǒng)(OPTICAL LINK)、W型鏈接系統(tǒng)(WIRE-LINK)和C-NET鏈接系統(tǒng),還有遠(yuǎn)程I/O通信系統(tǒng)(REMOTE I/O),它們通過RS-485、RS-232或?qū)S镁W(wǎng)絡(luò)插座在PLC-PLC、計算機與PLC之間進(jìn)行通信。但是要利用這些系統(tǒng)協(xié)議,必須采用專用高級通信單元,這勢必增加系統(tǒng)的成本。為了節(jié)省開支,紡織工業(yè)系統(tǒng)可以直接采用松下電工最基礎(chǔ)的專用通信協(xié)議-NEWTOCOL。
NEWTOCOL分為兩部分:一是NEWTOCOL-COM,即關(guān)于計算機通信的協(xié)議;二是NEWTOCOL-DATA,即關(guān)于數(shù)據(jù)傳輸協(xié)議。
2.1 NEWTOCOL-COM的幀格式
(1) 命令發(fā)送幀
(2) 正確響應(yīng)幀
img]周奉磊-b2.jpg border=0>
(3) 錯誤響應(yīng)幀
img]周奉磊-b3.jpg border=0>
2.2 NEWTOCOL-DATA的幀格式
(1) 命令發(fā)送幀
img]周奉磊-b4.jpg border=0>
(2) 正確響應(yīng)幀
img]周奉磊-b5.jpg border=0>
(3) 錯誤響應(yīng)幀
img]周奉磊-b6.jpg border=0>
通過該協(xié)議可更加快捷地傳送系統(tǒng)所需的數(shù)據(jù),設(shè)置PLC所需的參數(shù)。FP0 PLC與上位機鏈接通信協(xié)議如圖1所示:
圖1 FP0 PLC 與上位機鏈接通信協(xié)議
3 通信程序設(shè)計
在PC機和松下FP0系列PLC進(jìn)行串行通信時,由于PC與PLC之間的信息傳送是通過PLC編程口實現(xiàn)的,采用的是FP0 PLC專用協(xié)議通信指令。因此,在PC編程方面需要嚴(yán)格的遵循PLC編程口通訊協(xié)議。具體實現(xiàn)介紹如下:
3.1 串口設(shè)備的打開
在Visual C++中,利用MFC CFile類來實現(xiàn)串行通訊。這種通信方式與訪問磁盤普通文件沒有太大不同。打開串口設(shè)備需作以下操作:
CFile file;
CFileException e
File.open(
portName, // example "com1",com2"
CFile::modeReadWrite,
&e);
3.2 串口設(shè)備的初始化
串行端口創(chuàng)建時,必須對其進(jìn)行設(shè)置以匹配與其對話的設(shè)備。FP0系列PLC的波特率為固定的9600bps,奇偶校驗采用奇校驗,1位停止位,8位數(shù)據(jù)位。一般地,可用如下程序設(shè)置它們:
DCB dcb;
::GetCommState((HANDLE)file.m_hFile,&dcb);
dcb.BaudRate=9600;
dcb.StopBits=1;
dcb.ByteSize=8;
dcb.Parity=1;
::setCommState((HANDLE)file.m_hFile,&dcb);
為了更好的控制端口可以利用SetCommTimeouts()函數(shù)打開或關(guān)閉串口超時功能,具體程序如下:
COMMTIMEOUTS cto;
::GetCommTimeouts((HANDLE)file.m_hFile,&ct0);
cto.ReadIntervalTimeout=0;
cto.ReadTotalTimeoutMultiplier=0;
cto.ReadTotalTimeoutConstant=0;
cto.WriteTotalTimeoutMultiplier=0;
cto.WriteTotalTimeoutConstant=0;
::SetCommTimeouts((HANDLE)file.m_hFile,&cto);
3.3 PC與FP0 PLC之間的通信實現(xiàn)
在FX2系列PLC與PC機的通信中,數(shù)據(jù)是以幀為單位發(fā)送和接收的。其中字符ENQ(0x05)、ACK(0x06)、
和NAK(0x15)作為單個字符,可以構(gòu)成單字符幀。若通訊正常,則應(yīng)答字符$;若通信有錯,則應(yīng)答字符!。其余的字符在發(fā)送和接收時必須用字符%和CR分別表示該字符幀的起始標(biāo)志和結(jié)束標(biāo)志,否則將構(gòu)成幀錯。一個多字符幀由%、地址碼、站號、數(shù)據(jù)、和校驗以及CR五部分組成,其中和校驗值是其初值為0,然后從起始符開始與該幀報文中每一字節(jié)按位進(jìn)行異或運算得到。
(1) 應(yīng)用MFC CFile類實現(xiàn)對串口設(shè)備的讀、寫操作的代碼
//讀串口
char m_Readbuff[UINT n];
uint nByte=file.read(
&m_ReadBuff, //緩存儲沖
UINT nCount //所讀字節(jié)數(shù)
//寫串口
char m_WriteBuff[UINT n];
file.Write(
&m_WriteBuff, //存儲緩沖
UINT nCount //縮寫字節(jié)數(shù)
);
(2) PC機實現(xiàn)與PLC通信的程序代碼
char m_WriteBuff[10];
char m_ReadBuff[10];
UINT nByte=0;
m_WriteBuff[0]=0x05 //ENQ
//寫串口
file.Write(
m_WriteBuff, //存儲緩沖
//所讀字節(jié)數(shù)
);
//讀串口
nByte=file.Read(
m_ReadBuff, //存儲緩沖
//所寫字節(jié)數(shù)
);
switch (m_ReadBuff[0])
{
case : 0x24 //應(yīng)答$,通信正常
//添加相關(guān)處理代碼
break;
case : 0x21
//應(yīng)答!,通訊故障
//添加相關(guān)處理代碼
break;
}
3.4 PC對PLC內(nèi)各軟設(shè)備進(jìn)行讀、寫操作
FP0系列PLC的所有開關(guān)量輸入、輸出以及各軟設(shè)備對PC機都是透明的,只有當(dāng)PLC的計時器和計數(shù)器的設(shè)定值采用常數(shù)時,以及文件寄存器內(nèi)的數(shù)據(jù),PC機不能對其進(jìn)行讀寫。不論PLC處在“STOP”狀態(tài)還是“RUN”狀態(tài),PC機都可以按1.1所列的命令對PLC進(jìn)行讀、寫操作。這里僅給出PC機與PLC通信所用多字符幀的格式及簡單示例,實際應(yīng)用時只需將多字符幀中的字符ASCII碼(十六進(jìn)制)按順序賦予相應(yīng)的字符數(shù)組
m_WriteBuff,m_ReadBuff,即可實現(xiàn)對PLC的操作。
(1) 讀操作
img]周奉磊-b7.jpg border=0>
(2) 寫操作
微機對PLC軟設(shè)備進(jìn)行寫操作的多字符幀的編制格式如下表所示:
img]周奉磊-b8.jpg border=0>
PLC接收到寫操作多字符幀格式后,若接收到數(shù)據(jù)有效,則應(yīng)答$(0x24),該字符幀如下表所示:
img]周奉磊-b9.jpg border=0>
若接收數(shù)據(jù)無效或和校驗出錯,則應(yīng)答字符!(0X21),該字符幀如下表所示:
img]周奉磊-b10.jpg border=0>
3.5 關(guān)閉串口設(shè)備
PC機與PLC通信完畢后,PC機關(guān)閉一個已打開的串口設(shè)備只需如下一條語句即可完成。
File.Close();
4 應(yīng)用實例
以上介紹了利用MFC實現(xiàn)PC與FX2系列PLC串行通訊的基本方法及其關(guān)鍵部分程序代碼。上面的程序代碼為基礎(chǔ),不僅可以編制用于以PLC為現(xiàn)場主控機的監(jiān)控系統(tǒng)軟件,而且可編制出微機與其他具有串行通信能力設(shè)備的串行通信程序。本人已成功使用VC5.0實現(xiàn)PLC與上位機之間的通信,并應(yīng)用于青島大學(xué)紡織服裝學(xué)院開發(fā)的掉毛量測試儀。該測試儀控制系統(tǒng)采用PLC 控制步進(jìn)電機方案,有效地提高了工作效率,使操作人員通過PC的顯示可以監(jiān)測并控制儀器的工作。兔毛織物掉毛量測試儀已可靠運行一年,實踐證明它具有控制靈活、使用簡單、功能擴充方便、抗干擾性能強的特點。沒有出現(xiàn)任何通訊連接的問題。
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。