西門子s7-200系列plc有通信方式有三種:一種是點(diǎn)對(duì)點(diǎn)(ppi)方式,用于與該公司plc編程器或其它人機(jī)接口產(chǎn)品的通信,其通信協(xié)議是不公開(kāi)的。另一種為dp方式,這種方式使得plc可以通過(guò)profibus-dp通信接口接入profibus現(xiàn)場(chǎng)總線網(wǎng)絡(luò),從而擴(kuò)大plc的使用范圍。最后一種方式是自由口通信(freeport)方式,由用戶定義通信協(xié)議,實(shí)現(xiàn)plc與外設(shè)的通信。以下采用自由口通信方式,實(shí)現(xiàn)pc與s7-200系列plc通信。
1. pc與西門子s7-200系列plc通信連接
pc為rs232c接口,s7-200系列自由口為rs485。因此pc的rs232接口必須先通過(guò)rs232/rs485轉(zhuǎn)換器,再與plc通信端口相連接,連接媒質(zhì)可以是雙絞線或電纜線。西門子公司提供的pc/ppi電纜帶有rs232/rs485轉(zhuǎn)換器,可直接采用pc/ppi電纜,因此在不增加任何硬件的情況下,可以很方便地將plc和pc的連接,如圖1所示。也可實(shí)現(xiàn)多點(diǎn)連接。
圖1 pc與s7-200系列plc的連接
2. 西門子s7-200系列plc自由通信口初始化及通信指令
在該通信方式下,通信端口完全由用戶程序所控制,通信協(xié)議也由用戶設(shè)定。pc機(jī)與plc之間是主從關(guān)系,pc機(jī)始終處于主導(dǎo)地位。plc的通信編程首先是對(duì)串口初始化,對(duì)s7-200plc的初始化是通過(guò)對(duì)特殊標(biāo)志位smb30(端口0)、smb130(端口1)寫入通信控制字,設(shè)置通信的波特率,奇偶校驗(yàn)位、停止位和字符長(zhǎng)度。顯然,這些設(shè)定必須與pc的設(shè)定相一致。smb30和smb130的各位及含義如下:
其中,校驗(yàn)方式:00和11均為無(wú)校驗(yàn)、01為偶校驗(yàn)、10為奇校驗(yàn);字符長(zhǎng)度:0為傳送字符有效數(shù)據(jù)是8位、1為有效數(shù)據(jù)是7位;波特率:000為38400baud、001為19200baud、010為9600baud、011為4800baud、100為2400baud、101為1200baud、110為600baud、111為300baud;通信協(xié)議:00為ppi協(xié)議從站模式、01為自由口協(xié)議、10為ppi協(xié)議主站模式、11為保留,缺省設(shè)置為ppi協(xié)議從站模式。
xmt及rcv命令分別用于plc向外界發(fā)送與接收數(shù)據(jù)。當(dāng)plc處于run狀態(tài)下時(shí),通信命令有效,當(dāng)plc處于stop狀態(tài)時(shí)通信命令無(wú)效。
xmt命令將指定存儲(chǔ)區(qū)內(nèi)的數(shù)據(jù)通過(guò)指定端口傳送出去,當(dāng)存儲(chǔ)區(qū)內(nèi)最后一個(gè)字節(jié)傳送完畢,plc將產(chǎn)生一個(gè)中斷,命令格式為 xmt table,port,其中port指定plc用于發(fā)送的通信端口,table為是數(shù)據(jù)存儲(chǔ)區(qū)地址,其第一個(gè)字節(jié)存放要傳送的字節(jié)數(shù),即數(shù)據(jù)長(zhǎng)度,最大為255。
rcv命令從指定的端口讀入數(shù)據(jù)存放在指定的數(shù)據(jù)存儲(chǔ)區(qū)內(nèi),當(dāng)最后一個(gè)字節(jié)接收完畢,plc也將產(chǎn)生一個(gè)中斷,命令格式為rcv table,po rt,plc通過(guò)port端口接收數(shù)據(jù),并將數(shù)據(jù)存放在tbl數(shù)據(jù)存儲(chǔ)區(qū)內(nèi),table的第一個(gè)字節(jié)為接收的字節(jié)數(shù)。
在自由口通信方式下,還可以通過(guò)字符中斷控制來(lái)接收數(shù)據(jù),即plc每接收一個(gè)字節(jié)的數(shù)據(jù)都將產(chǎn)生一個(gè)中斷。因而,plc每接收一個(gè)字節(jié)的數(shù)據(jù)都可以在相應(yīng)的中斷程序中對(duì)接收的數(shù)據(jù)進(jìn)行處理。
3.通信程序流程圖及工作過(guò)程
在上述通信方式下,由于只用兩根線進(jìn)行數(shù)據(jù)傳送,所以不能夠利用硬件握手信號(hào)作為檢測(cè)手段。因而在pc機(jī)與plc通信中發(fā)生誤碼時(shí),將不能通過(guò)硬件判斷是否發(fā)生誤碼,或者當(dāng) pc與 plc工作速率不一樣時(shí),就會(huì)發(fā)生沖突。這些通信錯(cuò)誤將導(dǎo)致plc控制程序不能正常工作,所以必須使用軟件進(jìn)行握手,以保證通信的可靠性。
由于通信是在pc機(jī)以及plc之間協(xié)調(diào)進(jìn)行的,所以pc機(jī)以及plc中的通信程序也必須相互協(xié)調(diào),即當(dāng)一方發(fā)送數(shù)據(jù)時(shí)另一方必須處于接收數(shù)據(jù)的狀態(tài)。如圖2、圖3所示分別是pc、plc的通信程序流程。
圖2 pc機(jī)通信程序流程圖
圖3 s7-plc通信程序流程圖
通信程序的工作過(guò)程:pc每發(fā)送一個(gè)字節(jié)前首先發(fā)送握手信號(hào),plc收到握手信號(hào)后將其傳送回pc,pc只有收到plc傳送回來(lái)的握手信號(hào)后才開(kāi)始發(fā)送一個(gè)字節(jié)數(shù)據(jù)。plc收到這個(gè)字節(jié)數(shù)據(jù)以后也將其回傳給pc,pc將原數(shù)據(jù)與plc傳送回來(lái)的數(shù)據(jù)進(jìn)行比較,若兩者不同,則說(shuō)明通信中發(fā)生了誤碼,pc機(jī)重新發(fā)送該字節(jié)數(shù)據(jù);若兩者相同,則說(shuō)明plc收到的數(shù)據(jù)是正確的,pc機(jī)發(fā)送下一個(gè)握手信號(hào),plc收到這個(gè)握手信號(hào)后將前一次收到的數(shù)據(jù)存入指定的存儲(chǔ)區(qū)。這個(gè)工作過(guò)程重復(fù)一直持續(xù)到所有的數(shù)據(jù)傳送完成。
采用軟件握手以后,不管pc與plc的速度相差多遠(yuǎn),發(fā)送方永遠(yuǎn)也不會(huì)超前于接收方。軟件握手的缺點(diǎn)是大大降低了通信速度,因?yàn)閭魉兔恳粋€(gè)字節(jié),在傳送線上都要來(lái)回傳送兩次,并且還要傳送握手信號(hào)。但是考慮到控制的可靠性以及控制的時(shí)間要求,犧牲一點(diǎn)速度是值得的,也是可行的。
plc方的通信程序只是plc整個(gè)控制程序中的一小部分,可將通信程序編制成plc的中斷程序,當(dāng)plc接收到pc發(fā)送的數(shù)據(jù)以后,在中斷程序中對(duì)接收的數(shù)據(jù)進(jìn)行處理。pc方的通信程序可以采用vb、vc等語(yǔ)言,也可直接采用西門子專用組態(tài)軟件,如step7、wincc。