PLC自由口通訊——以S7-200為例
主要內(nèi)容:
S7-200 PLC串口通訊概覽
S7-200 PLC自由口通訊基礎(chǔ)
S7-200 PLC自由口通訊指令
S7-200 PLC自由口通訊常問問題
(1)概覽
S7-200串口通訊主要包括:
1)Modbus—S7-200PLC與支持Modbus RTU協(xié)議的第三方設(shè)備通訊
RTU Master-Protocol(RTU主站協(xié)議)
RTU Slave-Protocol(RTU從站協(xié)議)
2)USS—S7-200PLC與SIEMENS驅(qū)動設(shè)備的通訊(如MM440等)
3)自由口通訊—S7-200PLC與自由協(xié)議的第三方設(shè)備間的通訊
S7-200系列PLC可以方便地同計算機、打印機、變頻器、掃描儀等其它的第三方設(shè)備進行無障礙通訊。
Modbus通訊和USS通訊是自由口通訊的特例。
對于S7-200系列的PLC而言,本體上存在著一個或兩個485通訊接口,這種接口即可實現(xiàn)S7-200串口通訊的功能,這類串口既可以做編程和監(jiān)控,也可以做自由口通訊。但在其運行自由口通訊程序時,無法對其進行監(jiān)控。這是因為對于同一個口而言在同一個時刻只能支持一種協(xié)議,而編程與下載的協(xié)議對于S7-200PLC而言是PPI協(xié)議,所以一旦在程序運行過程中使得它做自由口通訊的狀態(tài)則無法對其監(jiān)控和下載。
下表是Modbus、USS以及自由口通訊的一些參數(shù):
對于OSI七層模型而言,Modbus通訊、USS通訊和自由口通訊所處的位置可從上圖中看到。
(2)自由口通訊
S7-200 CPU的通信口可以設(shè)置為自由口模式。選擇自由口模式后,用戶程序就可以全控制通信端口的控制,通信協(xié)議也全受用戶程序控制。
所謂的自由口通訊,就是通訊協(xié)議是由用戶自由定義的。
對于S7-200 PLC而言,基于本體自帶的485端口的網(wǎng)絡(luò)所應用的協(xié)議,除了PPI協(xié)議以外,其他都是自由口協(xié)議。例如USS協(xié)議、Modbus協(xié)議等等都是特定的自由口通訊協(xié)議。
1)自由口通訊硬件
西門子S7 -200系列PLC的自由口是基于RS485的硬件,采用正負兩根信號線作為傳輸線路。兩線間的電壓差為+2V~6V表示邏輯"1":兩線間的電壓差為-2V~-6V表示邏輯"0"。
西門子串口的插頭是九針標準插頭,其中各個針腳的定義在下表中得以體現(xiàn),最重要的兩根線是表中紅線標出的3號腳和8號腳,也就是通常說的"3正8負",其中3對應信號B,8對應信號A,其它的引腳可以完成一些額外的功能,比如24V直流電的供應,5V直流電的供應以及發(fā)送請求等。但是對于最基本的串口通訊而言,3腳和8腳兩根線就足夠了,所以下面將著重介紹這兩根線的邏輯。
對于一根線上通過這兩根線就可以完成如此復雜的通訊過程,它的傳輸邏輯一個是"1"一個是"0",對于一個完整的報文幀而言,它的格式從下圖中可以看出,首先包括一位起始位,中間是7或8位數(shù)據(jù)位,接下來是一位校驗位或者沒有校驗位,最后附上一個停止位,從起始位到停止位是一個報文的全部內(nèi)容,起始位在傳輸過程當中被永遠定義為邏輯0,7或8位數(shù)據(jù)位0或1的邏輯狀態(tài)完取決于數(shù)據(jù)等于多少,校驗位可有可無,如果有的話還分為奇校驗和偶校驗,它最終的邏輯是取決于前面數(shù)據(jù)位的組合關(guān)系,停止位固定為1。在整個報文幀之外的范圍內(nèi),線上的狀態(tài)為1,即為空閑狀態(tài)。
2)自由口通訊基本格式
一個數(shù)據(jù)幀的組成
對于一個數(shù)據(jù)幀的組成而言,它是由若干個待發(fā)生的字符組成的,從字符1、2到字符n;
一個傳輸字符的格式:
對于每一個字符的傳輸格式,它具有1位起始位,7或8位的數(shù)據(jù)位,0或1位的校驗位以及1位停止位;
一個傳輸字符的485電平:
對于每一個傳輸字符的485電平,起始位固定為0,數(shù)據(jù)位和校驗位是隨機的,停止位固定為1。
自由口同心速波特率可以設(shè)置為1200、2400、4800、9600、19200、38400、57600或112500 bit/s。
關(guān)于端口協(xié)議的選擇,字符傳輸格式,以及波特率的設(shè)定需通過設(shè)置SMB30(Port0)/SMB130(Port1)來完成。(具體可參照S7-200系統(tǒng)手冊)
3)發(fā)送指令的使用
自由口的指令一共有兩條,一條是發(fā)送指令,一條是接收指令。我們在談及發(fā)送或接收的時候往往會對立地去看讀或?qū)憙蓚€概念,但是讀與寫,發(fā)送與接收并不是相同的概念,一般在談及讀或?qū)懙臅r候往往是基于一些相對高級的通訊,比如主從之間的通訊,主站可以對從站進行讀或?qū)懙牟僮?。相對于讀和寫的概念而言,發(fā)送和接收指令更為基本,例如A和B兩個通訊對象,A發(fā)送一個報文給B,這是一個發(fā)送的過程,B接收到A發(fā)送給它的報文,這是接收的過程。而對于讀和寫則復雜的多,例如A作為主站想要讀取B的數(shù)據(jù)內(nèi)容,則需要A首先發(fā)一個讀請求給B,B接收到了A發(fā)送過來的讀請求之后作出判斷,從而將A想要的數(shù)據(jù)由B再發(fā)送給A,由A接收到這個數(shù)據(jù)從而完成一次讀的過程。所以相對讀和寫,發(fā)送和接收的過程要基本的多,而自由口通訊用到的指令就是發(fā)送和接收指令。
發(fā)送的指令叫做XMT指令(如上圖),可以想見它的激活條件必須是一個沿觸發(fā),得到沿的時機即為發(fā)送指令,向外發(fā)送數(shù)據(jù)的時機。PORT代表的是哪個口向外發(fā)數(shù)據(jù),CPU224 XP以上的S7-200系列PLC有兩個通訊口,PORT=0的時候表示由0口向外發(fā)送數(shù)據(jù),PORT=1的時候表示由1口向外發(fā)送數(shù)據(jù)。對于TBL而言,這是一個標示著發(fā)送數(shù)據(jù)的地址位,發(fā)送的數(shù)據(jù)格式如下表所示:
4)接收指令的使用
在TBL所指的數(shù)據(jù)區(qū)的第一個數(shù)據(jù)指的是待發(fā)送緩沖區(qū)的數(shù)據(jù)長度,從TBL+1開始則是被發(fā)送的數(shù)據(jù),被發(fā)送數(shù)據(jù)的長度最多為255個。在上面的程序中,TBL=VB100,VB100當中存的就是待發(fā)送數(shù)據(jù)的數(shù)據(jù)長度,以字節(jié)為單位,例如如果VB100=5,則被發(fā)送的數(shù)據(jù)是VB101~VB105,VB100本身并不會被發(fā)送出去,它僅僅標示被發(fā)送數(shù)據(jù)的長度和位置
在應用自由口通訊時,發(fā)送的過程往往比較簡單,幾乎所有和協(xié)議有關(guān)的東西都在接收程序里。
接收的指令叫做RCV指令(如上圖),該指令同樣使用沿觸發(fā),PORT同樣表示使用0口還是1口,TBL定義的是已經(jīng)接收了的數(shù)據(jù)的長度,從TBL+1開始則是已經(jīng)接收到的數(shù)據(jù),n同樣是小于255。
例如在上面的程序中,若VB100=5,則已經(jīng)接收到的數(shù)據(jù)是VB101~VB105。
在接收過程當中,可以通過SMB86(PORT0)/SMB186(PORT1)來監(jiān)視接收狀態(tài)。SMB86/SMB186=0時,表示接收正在進行,否則表示接收已終止。
5)接收過程的定義
接收過程首先執(zhí)行RCV指令,啟動接收,啟動之后會進入一種接收等待的狀態(tài),等待起始狀態(tài)的滿足,當起始條件滿足以后SMB86/186=0,此時數(shù)據(jù)將按照發(fā)送的順序進入信息緩沖區(qū),直到結(jié)束條件的滿足,結(jié)束條件滿足以后SMB86/186不再等于0,之后接收過程結(jié)束并產(chǎn)生接收信息完成中斷。在整個過程中最為重要的就是起始條件和結(jié)束條件,想要將自由口通訊學好,這兩個條件是必*少也是最為關(guān)鍵的部分。
a) 起始條件
上圖中將起始條件分為六種:
① 空閑線檢測:所謂空閑線檢測指的是如果傳輸線路上的空閑時間大于等于SMW90/190里面所設(shè)置的時間的話被認為是一次接收的啟動,空閑時間是從RCV被執(zhí)行的一刻起開始記錄,如果在空閑線時間未到的情況下有字符傳輸進來,那么空閑線時間的計時器將會被重新啟動;
② 起始字符檢測:對于起始字符的檢測是設(shè)置在SMB88/188中的一個字符,如果在傳輸線路中收到了與SMB88/188中設(shè)置的起始字符相同的字符,那么被認為是起始條件的滿足,從這一刻起傳輸線路上接收到的數(shù)據(jù)將會陸續(xù)地按順序進入信息緩沖區(qū),如果檢測不到起始字符,則始終處于接收等待的狀態(tài);
③ 空閑線和起始字符:它是第一點和第二點的結(jié)合,即二者同時滿足的前提下才能夠被認為是一次起始條件的滿足;
④ 斷點檢測:斷點指的是在一個完整的字符傳送的時間內(nèi),線上的邏輯全部為0。其中一個完整的字符傳送時間是指包括起始位、數(shù)據(jù)位、校驗位和結(jié)束位在內(nèi)的一段時間。通常講起始位固定是0,數(shù)據(jù)位和校驗位也可以都是0,但是結(jié)束位一定是1,也就是說在一個完整的字符傳送期間之內(nèi),線上至少有一刻是為1的,所以斷電條件不易滿足。這種情況通常應用于通訊對象可以造出一個斷點來,那么我們用S7-200PLC可以和它進行斷點檢測作為通訊起始條件的一種通訊機制。S7-200自身也可做斷點,S7-200如果需要發(fā)出一個斷點,首先在XMT指令使用之前將待發(fā)送的數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)長度定義為0,在這個基礎(chǔ)之上執(zhí)行一次傳送指令,將會有一個斷點被發(fā)出。如果兩臺S7-200PLC之間進行斷點檢測的接收過程,其中一臺應該先發(fā)一個斷點給對方,然后再發(fā)數(shù)據(jù),這樣對方那臺以斷點檢測作為起始條件的PLC將會接到它的數(shù)據(jù),雙方的通訊就建立了;
⑤ 斷點和起始字符:它是斷點檢測和起始字符檢測兩個條件相與的關(guān)系,同時滿足的時候?qū)鳛槠鹗紬l件的一個設(shè)定;
⑥ 任意字符:所謂的任意字符指的是RCV指令一旦執(zhí)行便無條件地開始起始條件的滿足,中間幾乎沒有接受等待的過程。任意字符也是空閑線檢測的一個特例,只是此時SMW90/190是被賦0的,這樣就無需任何的等待,一旦RCV指令被執(zhí)行,起始條件即刻滿足,隨之而來的數(shù)據(jù)將直接進入到信息緩沖區(qū)。
b) 結(jié)束條件
① 結(jié)束字符檢測:結(jié)束字符被定義在SMB89/189中,如果傳輸?shù)膱笪闹谐霈F(xiàn)了與SMB89/189中相一致的結(jié)束字符,接收的過程將結(jié)束。結(jié)束字符無非就是一個字符,如何能夠保證在傳輸?shù)恼5臄?shù)據(jù)里沒有和結(jié)束字符相一致的數(shù)據(jù)呢?使用結(jié)束字符檢測作為結(jié)束條件的應用有一定局限,首先要確保中間的數(shù)據(jù)不會與結(jié)束字符相一致,比如采用ASCII字符傳輸?shù)倪^程中, ASCII是有限的一些數(shù),并不是所有的二進制數(shù)排列組合都能夠在ASCII碼表中得以體現(xiàn),所以此時可以把結(jié)束字符定義成為中間傳送的數(shù)據(jù)當中所沒有那個ASCII字符來作為結(jié)束條件;
② 字符間隔定時器和信息定時器:二者同為定時器且定時時間均由SMW92/192決定,二者之間的區(qū)別在于,字符間隔定時器指的是在數(shù)據(jù)的傳送過程中,如果檢測到兩個字符之間的時間間隔大于SMW92/192里面所設(shè)定的時間,那么接收的過程將被終止,而信息定時器指的是從信息開始被接收一旦時間大于了信息定時器所指的時間,接收將會被終止。
③ 最大字符計數(shù)、校驗錯誤、用戶結(jié)束:三者與前面1、2、3三點不同,前面三點是用戶可以自己組態(tài)和選擇的,而4、5、6后三點是非正常的結(jié)束過程。
④ 最大字符計數(shù):是在SMB94/194中指的最大長度,長度最大可以達到255,如果在接收過程中已經(jīng)接收到信息緩沖區(qū)里面的數(shù)據(jù)的字節(jié)數(shù)大于SMB94/194中所定的數(shù)據(jù)長度,本次接收過程將會被勒令停止。最大字符計數(shù)在使用時一定要記得給SMB94/194賦值,如果未賦值將默認為0,此時即便選擇前面三個條件,可是沒等前面三個條件滿足時,最大字符計數(shù)已經(jīng)勒令此次接收行為終止。
⑤ 校驗錯誤:指的是奇偶校驗錯誤,這種是非正常的結(jié)束狀態(tài)。一旦數(shù)據(jù)的奇偶校驗產(chǎn)生錯誤,那么當前的這組數(shù)據(jù)顯然是不可以被采信的,此時,數(shù)據(jù)將會被放棄,接收結(jié)束。
⑥ 用戶結(jié)束:當由于某種原因,用戶想提前結(jié)束現(xiàn)在正在進行的這次接收行為,那么可以在控制字里面禁止一個位然后執(zhí)行RCV指令,這樣用戶條件就結(jié)束了,禁止的位其實是SMB87/187的最高位,也就是接收使能位。
注意:
① SMB87/187是自由口通訊控制字,起始和結(jié)束條件是通過它來定義的;
② SMB94/194是最大傳輸字符限制,必須定義。
6)使用字符接收方式
除了使用RCV指令來進行接收以外,還可以使用字符接收方式來進行自由口的接收。在介紹這種接收方式之前首先來看與自由口通訊有關(guān)的中斷事件,下圖中列舉出了6個中斷事件,其中前三個是針對端口0,后三個是針對端口1,下面以端口0為例進行講解:
對于端口0而言,首先來看中斷號為9的中斷事件叫做發(fā)送完成,它和XMT指令是對應的,XMT指令所激活的發(fā)送過程完成的時候會激活中斷事件號為9的中斷。中斷號為23的中斷事件叫做中斷信息(數(shù)據(jù)幀)完成,它和RCV指令是對應的,使用RCV指令激活的接收過程完成之后會啟動中斷號為23號的中斷事件。中斷號為8的中斷事件叫做接收單個字符完成,接收單個字符與23號中斷事件不同,23號是接收整個數(shù)據(jù)幀也就是RCV指令會接收最大長度為255個字節(jié)的一組數(shù)據(jù),一組數(shù)據(jù)全部接完后激活23號事件,而8號則不同,它是每接收一個字符就產(chǎn)生一次事件,因此可以用這種方式來使用字符進行接收。這里需要介紹SMB2和SMB3兩個控制字,這兩個控制字是端口0和端口1所共用的,當字符的接收來自端口0時,執(zhí)行與事件(中斷事件8)相連的中斷服務程序,其中SMB2中存儲從端口0接收到的字符,SMB3中存儲該字符的校驗狀態(tài)。對于端口1而言,當字符的接收來自端口1時,執(zhí)行與事件(中斷事件25)相連的中斷服務程序,SMB2中存儲從端口1接收到的字符,SMB3中存儲該字符的校驗狀態(tài)。
接收的過程如上圖所示,從圖的左側(cè)來了一個字符將會送到SMB2當中,然后通過用戶程序在8號中斷事件當中把SMB2的值傳送給數(shù)據(jù)緩沖區(qū)中的第一個字節(jié),接下來第二個字節(jié)先送到SMB2中,再由SMB2送給第二個字節(jié),以此類推,第n個字節(jié)也會相應地進到數(shù)據(jù)緩沖區(qū)中的第n個字節(jié)。數(shù)據(jù)緩沖區(qū)字節(jié)的起始地址是如何定義以及這些字節(jié)如何能夠一一對應?使用字符接收方式的過程中已經(jīng)不需要RCV指令,而是人為地在中斷號為8號或者25號的中斷事件中編寫程序,人為地把SMB2一個一個賦給地址區(qū)間,不一定必須是連續(xù)的,主要看用戶編寫習慣。
(3)自由口通訊FAQ
Q1:如何人為結(jié)束RCV接收狀態(tài)?
答:接收指令控制字節(jié)(SMB87/187)的en位可以用來允許/禁止接收狀態(tài)??梢栽O(shè)置en為"0",然后對此端口執(zhí)行RCV指令,即可結(jié)束RCV指令。
Q2:使用自由口通訊,如何設(shè)置從站地址?
答:首先,自由口是一個僅僅能夠定義收發(fā)的基本通訊協(xié)議。如果在客戶的網(wǎng)絡(luò)結(jié)構(gòu)中期待出現(xiàn)主從關(guān)系,那么需要在主站的發(fā)送報文中定義特定區(qū)域為從站地址信息。如果有必要,還要添加適當?shù)男r灣绦?,故障處理程序來使通訊更加完善?/p>