摘 要:文章設計了單片機和PLC實現串行通信的硬件連接和軟件變成的方法,借助于RS232轉RS485電路,將PLC與單片機開發(fā)板進行連接,上位機就是單片機,數據通過單片機傳送給PLC,從而準確的控制PLC上三相異步電機的正轉和反轉,PLC可以對所接收到的數據進行審核,充分的提升了所接收到數據的可靠性,之后便會將這些數據反饋給單片機,從而實現單片機和PLC相結合對電機的有效控制。
關鍵詞:單片機;PLC;通訊系統(tǒng)的實現
1 基于單片機與PLC通訊系統(tǒng)軟件的設計
1.1 通訊協(xié)議
要想實現基于單片機和PLC的通訊系統(tǒng),主要是借助于單片機向PLC接收數據和下達命令的功能,通訊協(xié)議則應采用命令和響應的模式,一幀就是一次通信發(fā)送的一組數據,33個字符組成一幀,在這里應注意以下幾點內容:(1)起始字符應用g表示,并且其也占用一個字符;(2)指令主要分為讀和寫兩種類型,文章所采用的為寫指令,其也占用一個字符;(3)采用十六進制的ASCII碼來表示目標PLC的站地址,在PLC程序中應先將其設定好,并且應與單片機保持一致,應占用兩個字符;(4)同樣的應用十六進制的ASCII碼來表示目標寄存器的地址,在PLC的內部應用4個字節(jié)來表示寄存器,這四個字節(jié)分別表示寄存器的類型和號碼,共占用4個字符;(5)十六進制的ASCII碼也可以表示要寫入的數據,雖然它有16個字節(jié),但最多只可寫入8個字節(jié),同時應將數據區(qū)填滿;(6)BCC校驗碼的作用為檢查傳輸的數據中是否存在錯誤,保證傳輸的準確性,其占用兩個字符;(7)結束字符應用G表示,其與起始字符一樣,占用一個字符。
在單片機接收到PLC的反饋信息后,無論是立即執(zhí)行開始命令還是結束命令,它們的字符分別為g和G,此時電動機的狀態(tài)信息就是狀態(tài)信息。文章所采用的PLC的類型為S7-200,其支持多種通訊協(xié)議,比如說點對點接口協(xié)議、多點接口協(xié)議、PROFIBUS協(xié)議以及自由通信協(xié)議等,其都是支持的,在自由口的通信模式下,S7-200的串行通訊口就會受到相應應用程序的控制,如果其是出于RUN的方式下,在選擇了自由口這一通信模式后,用戶的程序就會通過接收中斷和傳送中斷來接收指令和發(fā)送指令,此時就實現了用戶程序對通信口操作的有效控制。
通過寄存器SMB130和SMB30來準確的設置PLC的通信參數,校驗方式、波特率以及數據位等參數都應與單片機保持一致,其內部的運行流程為:程序開始-設置通訊端-等待接收-按照相應的協(xié)議處理數據-檢驗數據并進行相應的操作。
1.2 通訊協(xié)議的實現
1.2.1 單片機初始化部分子程序
void init_serialcomm(void)
{SCON=0x50; /*串口工作方式1,允許接收*/
TMOD=0x20; PCON=0x00; /*SMOD=0*/
TH1=0xFD; /*波特率為9.6K*/
TL1=0xFD; IE=0x95; /*開總中斷,開串口中斷, 開外部中斷0,開外部中斷1*/
……}
單片機發(fā)送數據的子程序
void send_data() interrupt 0 using 2
{EX0=0; delay1(4) ; if(KEY==0)
{ for(j=0;j<33;j++)
{SBUF=tab[j] ; /* 將數據發(fā)送到串口*/
while(!TI) ; /* 等待串口數據發(fā)送結束*/
TI=0; /*復位串口中斷*/}}
EX0=1;}
單片機接收數據子程序
void intcom() interrupt 4 using 0 /*輸入中斷*/
{EX0=0; EX1=0;
For(i=0;i<21;++)
{If(RI); RI=0; rc[i]=SBUF;}}
1.2.2 PLC的部分通訊程序
(1)PLC的主程序部分
LD SM0.1
CALL SBR_0:SBR0 //首次掃描調用初始化程序
LDB=VB134, VB199 // 指令中的站地址與本站地址相符
AB=VB102, 6 //指令類型為寫指令
A M0.0 //BCC校驗碼正確
CALL write:SBR1 // 調用寫子程序
LD M0.1
CALL verify:SBR3 // 調用BCC 校驗碼子程序
LD SM0.0
CALL SBR_2:SBR2 //調用電動機控制子程序
LD SM4.5 //當端口空閑時啟動RCV
RCV VB100, 0
(2)PLC的初始化程序
LD SM0.0
MOVB 9, SMB30 //自由口協(xié)議,9600bps,8個數據位,無校驗位
LD SM0.0 //RCV指令初始化
MOVB 16#EC, SMB87
MOVB 103, SMB88
MOVB 71, SMB89
MOVW +1000, SMW92
MOVB 35, SMB94
R SM87.2, 1
LD SM0.0
ATCH INT_0:INT0, 23 //接收完成事件連接到中斷程序0
LD SM0.0
ATCH INT_1:INT1, 9 //發(fā)送完成事件連接到中斷程序1
LD SM0.0
ENI
LD SM0.0
MOVB 3, VB199 //將本機站地址裝入寄存器
LD SM0.0
MOVD &VB102, VD149 //裝入地址指針
MOVB 0, VB179 //BCC碼寄存器清零
MOVD &VB156, VD181 //裝入地址指針
MOVB 0, VB180 //BCC校驗碼寄存器清
2 基于單片機與PLC通訊系統(tǒng)硬件的連接
此通訊系統(tǒng)的硬件部分主要由四部分組成,分別為三相異步電動機、S7-200PLC、STC89C52單片機和MAX485接口芯片,在單片機的開發(fā)板上同時集成了MAX485接口芯片和STC89C52單片機,并且在其上面的電平已經被轉換成了RS232電平,因此,RS485總線與開發(fā)板就是直接相連的,之后連接PLC,控制電動機主要是依靠PLC上的輸出信號控制繼電器這一功能。
2.1 232/485電平轉換電路。由于單片機的通信口采用的為RS232,而PLC采用的則為RS485,它們的電氣規(guī)范是無法較好的相容的,那么就用有中間電路來匹配RS232轉RS485,而PLC上的PPI電纜正是這樣一種匹配電纜。在RS232接口上,發(fā)送TXD線和接收RXD線是相互獨立的,接收和發(fā)送的工作也是可以同時進行的,因此,應將RS232設計成兩個設備之間的單獨通訊,對于兩個設備的聯(lián)接工作并不適用,因此,在它同時進行接收和發(fā)送工作時也是不會發(fā)生通訊碰撞的。RS485在其通訊過程中采用的為兩根差分的A線和B線,0和1分別代表其相對的電平,而在同一個時間段是只能由一個設備來驅動總線的。作為Maxim公司最新生產的一種使用RS485的接口芯片,MAX485接口芯片的工作環(huán)境為+5V的單一電源,并且其采用的為半雙工的通訊方式。
圖1為PLC與MAX485接口芯片的連接圖,其中DI腳是數據輸入引腳,RO腳是數據輸出引腳,DE腳是DI腳的使能端,在高電平時選通,而RE腳則是RO腳的使能端,在低電平時有效。A和B兩個腳同時是該芯片的輸入端和輸出端,而在具體確定MAX485接口芯片是該進行輸入還是輸出的操作時,則應充分的考慮到DE腳和RE腳的電平情況。
通過以上的論述,對基于單片機與PLC通訊系統(tǒng)軟件的設計以及基于單片機與PLC通訊系統(tǒng)硬件的連接兩個方面的內容進行了詳細的分析和探討。此通訊系統(tǒng)采用的是S7-200PLC和51單片機串行的方式,其采用的為差分接收和平衡驅動的RS-485的接口標準,具體開發(fā)成本低并且操作簡單等特點,在其實際運行的過程中,具有較強的抗干擾能力,并且性能十分穩(wěn)定。因此,應繼續(xù)以此系統(tǒng)為原型,將智能傳感技術和網絡技術應用其中,加強其功能,從而使此系統(tǒng)得到更加廣泛的應用。
參考文獻
[1]楊漢生.單片機多機通信的Proteus仿真設計[J].四川兵工學報,2010.
[2]段玉濤.虛擬PLC硬件仿真系統(tǒng)的研究與設計[J].廣東工業(yè)大學,2011.
作者簡介:孫永波(1980-),身份證號:230106198012252014,本科學歷:電氣自動化專業(yè),2000年至2014年4月在百威英博哈爾濱啤酒有限公司歷任自動化技術員,工程師、生產維護主管工作,有較豐富的電氣自動化系統(tǒng)設計及維護經驗。