韓 冬,張 拓,袁慶一
(長春機械科學研究院有限公司,吉林 長春 130103)
AVR單片機與PLC通信技術(shù)的研究與應(yīng)用
韓冬,張拓,袁慶一
(長春機械科學研究院有限公司,吉林 長春 130103)
摘要:為了實現(xiàn)單片機通過串口訪問PLC內(nèi)部寄存器的功能,設(shè)計并實現(xiàn)了AVR單片機與PLC的串口通信系統(tǒng)。實踐證明了AVR單片機與PLC實現(xiàn)串口通信的可行性。
關(guān)鍵詞:AVR單片機;PLC;串口通信
1引言
AVR單片機的功率較低,內(nèi)部存儲器包含F(xiàn)LASH、EEPROM和SRAM?;贏VR單片機的產(chǎn)品設(shè)計、研發(fā)周期短,工藝流程簡單。AVR單片機內(nèi)部包含了32個通用工作寄存器以及豐富的指令集。每一個寄存器直接連接至運算邏輯單元(ALU),可以實現(xiàn)每個時鐘周期同時訪問兩個獨立的寄存器。這種工作方式提高了代碼的工作效率,數(shù)據(jù)處理能力也比普通的復(fù)雜指令集微處理器優(yōu)越。另外,AVR單片機還具備如下優(yōu)點:
(1)程序存儲器的價格不高、擦寫次數(shù)達1萬次以上;
(2)采用CMOS技術(shù)及RSIC架構(gòu),運算速度高、功耗低,并且具有預(yù)取指令的功能;
(3)產(chǎn)品調(diào)試、升級方便,維護成本低;
(4)工業(yè)級產(chǎn)品,可靠性較高,可直接驅(qū)動LED、SSR或繼電器,具有看門狗定時器安全保護;
(5)具有內(nèi)部的RC振蕩器,無需外加時鐘電路,能夠自行提供1MHz、2MHz、4MHz、8MHz的工作時鐘;
(6)具有多個8位、16位帶預(yù)分頻器的計數(shù)器/定時器;
(7)串行通信接口USART性能優(yōu)良,不占用定時器,能夠進行高速同/異步通信;
(8)大部分芯片內(nèi)部集成A/D轉(zhuǎn)換接口。
本文采用的是ATmega128L芯片,該芯片包括128K字節(jié)的Flash,具有同時進行讀寫操作的能力,具有PWM功能的定時器,兩個串口,具有片內(nèi)振蕩器的可編程看門狗定時器。
PLC在工控領(lǐng)域應(yīng)用廣泛,具有非常高的穩(wěn)定性、可靠性。歐姆龍CP1L系列PLC屬于小型PLC,共有40個輸入輸出點,可擴展兩個串口通信模塊。Hostlink系統(tǒng)對于FA系統(tǒng)來說是一種即優(yōu)化又經(jīng)濟的通信方式,可以實現(xiàn)獨立上位機與多個PLC的連接。能夠在線向PLC傳輸程序,監(jiān)測PLC工作狀態(tài)。通信方式可以采用RS-232C或者RS-422,其中RS-232C的通信距離是15m,并且是1對1的;RS-422的通信距離最大為500m,并且可以實現(xiàn)1對多的通信,最多可以達到32臺。
2硬件電路設(shè)計
ATmega128具有兩個串口通信接口,USART0和USART1。該串口具有較高的通信靈活性,支持全雙工操作、同步異步操作,最多支持9個數(shù)據(jù)位、2個停止位、數(shù)字低通濾波器、獨立的通信中斷。ATmega128原理圖如圖1所示。
圖1 ATmega128原理圖
采用RS232串口通信方式實現(xiàn)AVR單片機與歐姆龍CP1L系列PLC的通信。通信芯片采用MAX3232,原理圖如圖2所示。上位機鏈接通信是通過在上位機和PLC間交換命令和應(yīng)答實現(xiàn)的。使用的是OMRON的HOSTLINK協(xié)議,在一次交換中傳輸?shù)拿罨驊?yīng)答數(shù)據(jù)稱為一幀,一幀最多可包含131個數(shù)據(jù)字符。
圖2 MAX3232原理圖
3軟件設(shè)計
歐姆龍的HOSTLINK協(xié)議通信,AVR單片機讀取PLC內(nèi)部寄存器數(shù)據(jù)的命令格式為:
起始符節(jié)點號命令碼正文校驗碼終止符
PLC響應(yīng)格式為:
起始符節(jié)點號命令碼結(jié)束碼正文校驗碼終止符
AVR單片機與歐姆龍CP1L系列PLC通信波特率設(shè)置為:9600,數(shù)據(jù)位:8位,停止位:2位,奇偶校驗:無。應(yīng)用的是Atmega128的USART0串口,配置為:UCSR0C=0x0E。
欲讀取PLC內(nèi)部寄存器D20起始的5個字節(jié)的數(shù)據(jù),定義如下的通信數(shù)據(jù)串:
str[20]={0x40,0x30,0x31,0x52,0x44,0x30,0x30,0x32,0x30,0x30,0x30,0x30,0x35,0x35,0x30,0x2A,0x0D};//讀取D20起始數(shù)據(jù)第5字節(jié)。
PLC收到讀取命令后,會將D20起始的5個字節(jié)的數(shù)據(jù)通過串行端口逐個發(fā)送給單片機,單片機將持續(xù)接收兩組完整的數(shù)據(jù),并將其組成一個數(shù)據(jù)串進行處理。這樣的數(shù)據(jù)接收方式能夠增加數(shù)據(jù)傳輸?shù)姆€(wěn)定性,保證了處理數(shù)據(jù)的準確性。在接收的兩組完整的數(shù)據(jù)中,尋找PLC響應(yīng)數(shù)據(jù)的起始字符“@”、停止字符“*”,判斷數(shù)據(jù)的長度,即選定了有效的數(shù)據(jù)段。選定有效數(shù)據(jù)段后,取出PLC寄存器存儲的數(shù)據(jù),進行高低位數(shù)據(jù)的移位、變換處理,顯示在單片機驅(qū)動的液晶屏上。
revbuf[revindex++] = UDR0;//將接收的數(shù)據(jù)組成一組
if(revindex >= 61)//連續(xù)接收兩組完整的數(shù)據(jù)
{
for(i=0;i<=revindex;i++)
{
if( revbuf[i] == '@')
{
start_NO = i;
get_flag = 1;
}
}
if (get_flag == 1 &&revindex >= (start_NO + 9) &&revbuf[start_NO + 9] == '*')
{
revindex = 0;
get_flag = 0;
start_NO = 0;
}
else if(get_flag == 1 &&revindex >= (start_NO + 30))
{
get_flag = 0;
revindex = 0;
fcs = revbuf[start_NO];
for(k=(start_NO + 1);k<=(start_NO + 26);k++)
{
fcs ^= revbuf[k];
}
fcs_L=hex_to_char(fcs &0x0f);
fcs_H=hex_to_char((fcs &0xf0) >>4);
}
}
4結(jié)論
應(yīng)用Atmega128芯片設(shè)計制作了能夠獨立訪問PLC內(nèi)部數(shù)據(jù)寄存器的終端設(shè)備,該設(shè)備通過RS232串口通信的方式,實時讀取PLC數(shù)據(jù)寄存器存儲的數(shù)據(jù),并可以對其進行寫操作。該技術(shù)的應(yīng)用,能夠簡化功能相對單一的進行PLC操作的人機交互設(shè)備,降低設(shè)備成本,減小設(shè)備體積。
參考文獻
[1]石澤宇,石林煒.PLC與計算機之間程控通信技術(shù)研究[J].電子技術(shù)與軟件工程,2014,14:237.
[2]蘇明霞,熊薇薇,張明濤.基于AVR單片機的無線紅外通信系統(tǒng)設(shè)計[J].無線互聯(lián)科技,2015,19:5-6.
[3]詹平紅,丁函,李文娟.單片機多串口通信擴展的設(shè)計及其應(yīng)用[J].自動化與儀器儀表,2015,(02):125-127.
Research and Application of Serial Communication between AVR MCU and PLC
Han Dong,Zhang Tuo,Yuan Qingyi
(Changchun Research Institute for Mechanical Science Co.,Ltd.Changchun 130103,Jilin,China)
Abstract:Serial communication between AVR MCU and PLC is discussed.In order to read the data from PLC internal register through serial communication,a kind of serial communication system based on AVR MCU is designed and realized.The practice shows the feasibility of serial communication between AVR MCU and PLC.
Keywords:AVR MCU;PLC;serial communication
[收稿日期]2016-02-29
[作者簡介]韓冬(1987—),男,碩士研究生,工程師,主要研究方向:自動控制系統(tǒng)。
中圖分類號:TN919
文獻標識碼:B
doi:10.3969/j.issn.1674-3407.2016.01.028