s7-200自由口通信.docx_第1頁
s7-200自由口通信.docx_第2頁
s7-200自由口通信.docx_第3頁
s7-200自由口通信.docx_第4頁
s7-200自由口通信.docx_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

S7-200 自由口通信關(guān)鍵字要點(diǎn)初始化RS485例程發(fā)送發(fā)送完成接收接收完成起始條件結(jié)束條件字符中斷S7-200自由口通信簡(jiǎn)介S7-200 CPU的通信口可以設(shè)置為自由口模式。選擇自由口模式后,用戶程序就可以完全控制通信端口的操作,通信協(xié)議也完全受用戶程序控制。一般用于和第三方串行通信設(shè)備進(jìn)行通信。自由口模式可以靈活應(yīng)用。Micro/WIN的兩個(gè)指令庫(USS和Modbus RTU)就是使用自由口模式編程實(shí)現(xiàn)的。在進(jìn)行自由口通信程序調(diào)試時(shí),可以使用PC/PPI電纜(設(shè)置到自由口通信模式)連接PC和CPU,在PC上運(yùn)行串口調(diào)試軟件(或者Windows的Hyper Terminal超級(jí)終端)調(diào)試自由口程序。USB/PPI電纜和CP卡不支持自由口調(diào)試。目錄1自由口通信基本概念1.1自由口通信概述1.2自由口通信要點(diǎn)1.3發(fā)送和接收指令1.4字符接收中斷2自由口通信使用指南2.1通訊口初始化2.2發(fā)送數(shù)據(jù)2.3接收數(shù)據(jù)2.4自由口通信例程3RS485網(wǎng)絡(luò)3.1通信口引腳定義3.2RS-485網(wǎng)絡(luò)的硬件組成3.3通信有關(guān)注意事項(xiàng)(硬件)4擴(kuò)展閱讀4.1擴(kuò)展閱讀5相關(guān)詞匯5.1相關(guān)詞匯1自由口通信基本概念1.1 自由口通信概述S7-200PLC的通訊口支持RS485接口標(biāo)準(zhǔn)。采用正負(fù)兩根信號(hào)線作為傳輸線路。工作模式采用串行半雙工形式,在任意時(shí)刻只允許由一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù)。數(shù)據(jù)傳輸采用異步方式,傳輸?shù)膯挝皇亲址瞻l(fā)雙方以預(yù)先約定的傳輸速率,在時(shí)鐘的作用下,傳送這個(gè)字符中的每一位。傳輸速率可以設(shè)置為1200、2400、4800、9600、19200、38400、57600、115200。字符幀格式為一個(gè)起始位、7或8個(gè)數(shù)據(jù)位、一個(gè)奇/偶校驗(yàn)位或者無校驗(yàn)位、一個(gè)停止位。字符傳輸從最低位開始,空閑線高電平、起始位低電平、停止位高電平。字符傳輸時(shí)間取決于波特率。數(shù)據(jù)發(fā)送可以是連續(xù)的也可以是斷續(xù)的。所謂連續(xù)的數(shù)據(jù)發(fā)送,是指在一個(gè)字符格式的停止位之后,立即發(fā)送下一個(gè)字符的起始位,之間沒有空閑線時(shí)間。而斷續(xù)的數(shù)據(jù)發(fā)送,是指當(dāng)一個(gè)字符幀發(fā)送后,總線維持空閑的狀態(tài),新字符起始位可以在任意時(shí)刻開始發(fā)送,即上一個(gè)字符的停止位和下一個(gè)字符的起始位之間有空閑線狀態(tài)。示例:用PLC連續(xù)的發(fā)送兩個(gè)字符(16#55和16#EE)(程序如圖3和圖4),通過示波器測(cè)量CPU通訊端口管腳3/8之間的電壓,波形如下圖1.:圖1.兩個(gè)字符(16#55和16#EE)的波形圖示例說明:16進(jìn)制的16#55換算成2進(jìn)制等于2#01010101,16進(jìn)制的16#EE換算成2進(jìn)制等于2#11101110。如圖所示,當(dāng)數(shù)據(jù)線上沒有字符發(fā)送時(shí)總線處于空閑狀態(tài)(高電平),當(dāng)PLC發(fā)送第一個(gè)字符16#55時(shí),先發(fā)送該字符幀的起始位(低電平),再發(fā)送它的8個(gè)數(shù)據(jù)位,依次從數(shù)據(jù)位的最低位開始發(fā)送(分別為1、0、1、0、1、0、1、0),接著發(fā)送校驗(yàn)位(高電平或低電平或無)和停止位(高電平)。因?yàn)楸纠蠵LC連續(xù)的發(fā)送兩個(gè)字符,所以第一個(gè)字符幀的停止位結(jié)束后便立即發(fā)送下一個(gè)字符幀的起始位,之間數(shù)據(jù)線沒有空閑狀態(tài)。假如PLC斷續(xù)的發(fā)送這兩個(gè)字符,那么當(dāng)PLC發(fā)送完第一個(gè)字符幀的停止位后,數(shù)據(jù)線將維持一段時(shí)間空閑狀態(tài),再發(fā)送下一個(gè)字符幀。字符傳輸?shù)臅r(shí)間取決于波特率,如果設(shè)置波特率為9.6k,那么傳輸一個(gè)字符幀中的一位用時(shí)等于1/9600*1000000=104us,如果這個(gè)字符幀有11位,那么這個(gè)字符幀的傳輸時(shí)間等于11/9600*1000=1.145ms.自由口通信協(xié)議是什么?顧名思義,沒有什么標(biāo)準(zhǔn)的自由口協(xié)議。用戶可以自己規(guī)定協(xié)議。已知一個(gè)通信對(duì)象需要字符(字節(jié))傳送格式有兩個(gè)停止位,S7-200是否支持?字符格式是由最基礎(chǔ)的硬件(芯片)決定的;S7-200使用的芯片不支持上述格式。S7-200是否支持S7-200系統(tǒng)手冊(cè)上列明的通信波特率以外的其他特殊通信速率?通信速率是由最基礎(chǔ)的硬件(芯片)決定的;S7-200使用的芯片不支持沒有列明在手冊(cè)上的通信速率。1.2 自由口通信要點(diǎn)應(yīng)用自由口通信首先要把通信口定義為自由口模式,同時(shí)設(shè)置相應(yīng)的通信波特率和上述通信格式。用戶程序通過特殊存儲(chǔ)器SMB30(對(duì)端口0)、SMB130(對(duì)端口1)控制通信口的工作模式。CPU通信口工作在自由口模式時(shí),通信口就不支持其他通信協(xié)議(比如PPI),此通信口不能再與編程軟件Micro/WIN通信。CPU停止時(shí),自由口不能工作,Micro/WIN就可以與CPU通信。通信口的工作模式,是可以在運(yùn)行過程中由用戶程序重復(fù)定義的。如果調(diào)試時(shí)需要在自由口模式與PPI模式之間切換,可以使用SM0.7的狀態(tài)決定通信口的模式;而SM0.7的狀態(tài)反映的是CPU運(yùn)行狀態(tài)開關(guān)的位置(在RUN時(shí)SM0.7=1,在STOP時(shí)SM0.7=0) 自由口通信的核心指令是發(fā)送(XMT)和接收(RCV)指令。在自由口通信常用的中斷有接收指令結(jié)束中斷、發(fā)送指令結(jié)束中斷,以及通信端口緩沖區(qū)接收中斷。 與網(wǎng)絡(luò)讀寫指令(NetR/NetW)類似,用戶程序不能直接控制通信芯片而必須通過操作系統(tǒng)。用戶程序使用通信數(shù)據(jù)緩沖區(qū)和特殊存儲(chǔ)器與操作系統(tǒng)交換相關(guān)的信息。 XMT和RCV指令的數(shù)據(jù)緩沖區(qū)類似,起始字節(jié)為需要發(fā)送的或接收的字符個(gè)數(shù),隨后是數(shù)據(jù)字節(jié)本身。如果接收的消息中包括了起始或結(jié)束字符,則它們也算數(shù)據(jù)字節(jié)。 調(diào)用XMT和RCV指令時(shí)只需要指定通信口和數(shù)據(jù)緩沖區(qū)的起始字節(jié)地址。XMT和RCV指令與NetW/NetR指令不同的是,它們與網(wǎng)絡(luò)上通信對(duì)象的地址無關(guān),而僅對(duì)本地的通信端口操作。如果網(wǎng)絡(luò)上有多個(gè)設(shè)備,消息中必然包含地址信息;這些包含地址信息的消息才是XMT和RCV指令的處理對(duì)象。由于S7-200的通信端口是半雙工RS-485芯片,XMT指令和RCV指令不能同時(shí)有效。1.3 發(fā)送和接收指令XMT(發(fā)送)指令的使用比較簡(jiǎn)單。RCV(接收)指令所需要的控制稍多一些。RCV指令的基本工作過程為: 1.在邏輯條件滿足時(shí),啟動(dòng)(一次)RCV指令,進(jìn)入接收等待狀態(tài) 2.監(jiān)視通信端口,等待設(shè)置的消息起始條件滿足,然后進(jìn)入消息接收狀態(tài) 3.如果滿足了設(shè)置的消息結(jié)束條件,則結(jié)束消息,然后退出接收狀態(tài)所以,RCV指令啟動(dòng)后并不一定就接收消息,如果沒有讓它開始消息接收的條件,就一直處于等待接收的狀態(tài);如果消息始終沒有開始或者結(jié)束,通信口就一直處于接收狀態(tài)。這時(shí)如果嘗試執(zhí)行XMT指令,就不會(huì)發(fā)送任何消息。所以確保不同時(shí)執(zhí)行XMT和RCV非常重要,可以使用發(fā)送完成中斷和接收完成中斷功能,在中斷程序中啟動(dòng)另一個(gè)指令。在S7-200系統(tǒng)手冊(cè)中關(guān)于XMT和RCV指令的使用有一個(gè)例子。這個(gè)例子非常經(jīng)典,強(qiáng)烈建議學(xué)習(xí)自由口通信時(shí)先做通這個(gè)例子。S7-200 CPU提供了通信口字符接收中斷功能,通信口接收到字符時(shí)會(huì)產(chǎn)生一個(gè)中斷,接收到的字符暫存在特殊存儲(chǔ)器SMB2中。通信口Port0和Port1共用SMB2,但兩個(gè)口的字符接收中斷號(hào)不同。 每接收到一個(gè)字符,就會(huì)產(chǎn)生一次中斷。對(duì)于連續(xù)發(fā)送消息,需要在中斷服務(wù)程序中將單個(gè)的字符排列到用戶規(guī)定的消息保存區(qū)域中。實(shí)現(xiàn)這個(gè)功能可能使用間接尋址比較好。對(duì)于高通信速率來說,字符中斷接受方式需要中斷程序的執(zhí)行速度足夠快。一般情況下,使用結(jié)束字符作為RCV指令的結(jié)束條件比較可靠。如果通信對(duì)象的消息幀中以一個(gè)不定的字符(字節(jié))結(jié)束(如校驗(yàn)碼等),就應(yīng)當(dāng)規(guī)定消息或字符超時(shí)作為結(jié)束RCV指令的條件。但是往往通信對(duì)象未必具有嚴(yán)格的協(xié)議規(guī)定、工作也未必可靠,這就可能造成RCV指令不能正常結(jié)束。這種情況下可以使用字符接收中斷功能。1.4 字符接收中斷S7-200 CPU提供了通信口字符接收中斷功能,通信口接收到字符時(shí)會(huì)產(chǎn)生一個(gè)中斷,接收到的字符暫存在特殊存儲(chǔ)器SMB2中。通信口Port0和Port1共用SMB2,但兩個(gè)口的字符接收中斷號(hào)不同。每接收到一個(gè)字符,就會(huì)產(chǎn)生一次中斷。對(duì)于連續(xù)發(fā)送消息,需要在中斷服務(wù)程序中將單個(gè)的字符排列到用戶規(guī)定的消息保存區(qū)域中。實(shí)現(xiàn)這個(gè)功能可能使用間接尋址比較好。對(duì)于高通信速率來說,字符中斷接受方式需要中斷程序的執(zhí)行速度足夠快。一般情況下,使用結(jié)束字符作為RCV指令的結(jié)束條件比較可靠。如果通信對(duì)象的消息幀中以一個(gè)不定的字符(字節(jié))結(jié)束(如校驗(yàn)碼等),就應(yīng)當(dāng)規(guī)定消息或字符超時(shí)作為結(jié)束RCV指令的條件。但是往往通信對(duì)象未必具有嚴(yán)格的協(xié)議規(guī)定、工作也未必可靠,這就可能造成RCV指令不能正常結(jié)束。這種情況下可以使用字符接收中斷功能。2自由口通信使用指南2.1 通訊口初始化SMB30(對(duì)于端口0)和SMB130(對(duì)于端口1)被用于選擇波特率和校驗(yàn)類型。SMB30和SMB130可讀可寫。見表1.表1.特殊存儲(chǔ)器字節(jié)SMB30/SMB130示例:定義端口0為自由口模式,9600波特率,8位數(shù)據(jù)位,偶校驗(yàn),程序如下圖2.:圖2.通訊口初始化程序2.2 發(fā)送數(shù)據(jù):發(fā)送指令XMT能夠發(fā)送一個(gè)字節(jié)或多個(gè)字節(jié)的緩沖區(qū),最多為255個(gè)。使用邊沿觸發(fā)。發(fā)送緩沖區(qū)格式:第一個(gè)字節(jié)為字符個(gè)數(shù),其后為發(fā)送的信息字符。示例:如果PLC連續(xù)發(fā)送2個(gè)字符16#55和16#EE,程序如下圖3.:圖3.發(fā)送指令程序示例說明:PLC通過數(shù)據(jù)塊寫入數(shù)據(jù)。XMT指令中TBL緩沖區(qū)首地址VB200寫入發(fā)送字符的個(gè)數(shù),VB201和VB202分別寫入發(fā)送字符。通訊口波形圖如圖1.判斷發(fā)送完成的方法方法一:發(fā)送完成中斷。通過連接中斷服務(wù)程序到發(fā)送結(jié)束事件上,在發(fā)送完緩沖區(qū)中的最后一個(gè)字符時(shí),則會(huì)產(chǎn)生一個(gè)中斷。對(duì)通訊口0為中斷事件9,對(duì)通訊口1為中斷事件26。連接中斷程序到中斷事件示例如下圖4.:圖4.建立發(fā)送完成中斷的程序方法二:發(fā)送空閑位。當(dāng)port0發(fā)送空閑時(shí),SM4.5=1。當(dāng)port1發(fā)送空閑時(shí),SM4.6=1.示例:如果PLC斷續(xù)的發(fā)送2個(gè)字符16#55和16#EE.方法一:利用發(fā)送完成中斷,在主程序中建立中斷事件,執(zhí)行XMT發(fā)送16#55,發(fā)送完成后,進(jìn)入發(fā)送完成中斷程序中,執(zhí)行XMT發(fā)送16#EE。波形圖如圖5.圖5.字符波形圖方法二:利用發(fā)送空閑位。當(dāng)執(zhí)行XMT發(fā)送完16#55后,利用SM4.5/4.6的上升沿(確保發(fā)送的字符幀發(fā)送完成),往XMT的TBL緩沖區(qū)寫入新字符16#EE,并再次觸發(fā)發(fā)送。波形圖如圖6.圖6.字符波形圖兩種方法均斷續(xù)發(fā)送字符,即兩個(gè)字符之間有空閑狀態(tài)。注意:由于SM4.5/4.6的使用受程序掃描周期的影響,編程中推薦使用發(fā)送完成中斷。Break斷點(diǎn)Break狀態(tài):持續(xù)以當(dāng)前波特率傳輸16位數(shù)據(jù),且一直維持0狀態(tài)。產(chǎn)生方式:把字符數(shù)設(shè)置為0并執(zhí)行XMT指令,可以產(chǎn)生一個(gè)Break狀態(tài)。Break用途:可以作為接收的起始條件。示例:通過XMT指令發(fā)送一個(gè)Break斷點(diǎn)。偶校驗(yàn),8個(gè)數(shù)據(jù)位,9.6K。程序如下圖7.:圖7.發(fā)送一個(gè)斷點(diǎn)的程序Break狀態(tài)的波形圖如下圖8.圖8.一個(gè)斷點(diǎn)波形圖如果通過接收方為上位機(jī)或者S7-200PLC,那么它們接收到的字符為16#00.那么通過發(fā)送一個(gè)Break斷點(diǎn)接收到的16#00與發(fā)送一個(gè)字符幀16#00有什么不同呢?Break狀態(tài)是傳輸16位數(shù)據(jù)一直為0。而發(fā)送一個(gè)字符16#00(幀格式為1個(gè)起始位,8個(gè)數(shù)據(jù)位,偶校驗(yàn)和停止位)則傳輸11位該字符幀。如下圖9.圖9.一個(gè)斷點(diǎn)和字符0的波形圖2.3 接收數(shù)據(jù)接收指令RCV能夠接收一個(gè)字節(jié)或多個(gè)字節(jié)的緩沖區(qū),最多為255個(gè)。使用邊沿觸發(fā)或第一個(gè)掃描周期觸發(fā)。接收緩沖區(qū)格式:第一個(gè)字節(jié)表示接收的字符個(gè)數(shù),其后為接收的信息字符。RCV使能會(huì)將TBL緩沖區(qū)中的字符個(gè)數(shù)清零。示例:如果發(fā)送方給PLC發(fā)送2個(gè)字符16#55和16#EE,PLC的接收程序如下圖10.:圖10.接收指令程序示例說明:RCV指令TBL緩沖區(qū)的首地址VB200保存的是接收字符個(gè)數(shù),其后是信息字符。判斷接收完成的方法:方法一:接收完成中斷。通過連接中斷服務(wù)程序到接收信息完成事件上,在接收完緩沖區(qū)中的最后一個(gè)字符時(shí),則會(huì)產(chǎn)生一個(gè)中斷。對(duì)端口0為中斷事件23,對(duì)端口1為中斷事件24。連接中斷程序到中斷事件示例如下圖11.:圖11.建立接收完成中斷的程序方法二:接收狀態(tài)字節(jié)。SMB86(port0),SMB186(port1)。當(dāng)接收狀態(tài)字節(jié)為0,表示接收正在進(jìn)行。當(dāng)接收狀態(tài)字節(jié)不為0,表示接收指令未被激活或者已經(jīng)被中止。見下表2.表2.接收狀態(tài)字節(jié)SMB86(port0)/SMB186(port1)接收指令起始和結(jié)束條件接收指令使用接收信息控制字節(jié)(SMB87或SMB187)中的位來定義信息起始和結(jié)束條件。必須為接收信息功能操作定義一個(gè)起始條件和一個(gè)結(jié)束條件(最大字符數(shù))。如下圖12.圖12.接收控制字節(jié)SMB87(port0)/SMB187(port1)接收指令起始條件接收指令支持幾種起始條件:1.空閑線檢測(cè)定義:在傳輸線上一段安靜或空閑的時(shí)間。當(dāng)接收指令執(zhí)行時(shí),接收信息對(duì)空閑線時(shí)間進(jìn)行檢測(cè)。在空閑線時(shí)間到之前接收的字符,被忽略且按照SMW90/190給定的時(shí)間重新啟動(dòng)空閑線定時(shí)器。在空閑線時(shí)間到之后,接收的字符存入信息緩沖區(qū)??臻e時(shí)間的典型值為在指定波特率下傳輸3個(gè)字符的時(shí)間。示例:PLC接收的起始條件定義為空閑線檢測(cè)(設(shè)置SMB87中的il=1,sc=0,bk=0,空閑線超時(shí)時(shí)間SMW90=10ms);接收的結(jié)束條件定義為最大字符個(gè)數(shù)SMB94=10。程序如下圖13.圖13.空閑線檢測(cè)程序示例說明:(紫色部分:)當(dāng)啟動(dòng)接收指令后,PLC對(duì)空閑線時(shí)間進(jìn)行檢測(cè),如果在SMW90中設(shè)定的空閑線時(shí)間到之前,已經(jīng)接收到了字符1,則字符1被忽略,并且按照SMW90中設(shè)定的時(shí)間重新啟動(dòng)空閑定時(shí)器。(橙色部分:)同樣的,如果在SMW90中設(shè)定的空閑線時(shí)間到之前,已經(jīng)接收到了字符2,則字符2也被忽略且空閑線定時(shí)器重新啟動(dòng)。(綠色部分:)如果在SMW90中設(shè)定的空閑線時(shí)間到之后,接收到字符3,則字符3作為第一個(gè)信息字符存入接收緩沖區(qū)。見下圖14.圖14.用空閑時(shí)間檢測(cè)來啟動(dòng)接收指令2.起始字符檢測(cè)當(dāng)接收到SMB88/188指定起始字符后,接收信息功能將起始字符作為信息的第一個(gè)字符存入接收緩沖區(qū)。起始字符之前的字符被忽略,起始字符和其后的所有字符存入接收緩沖區(qū)。示例:PLC接收的起始條件定義為起始字符檢測(cè)(設(shè)置SMB87中的il=0,sc=1,bk=0,起始字符SMB88=16#55);接收的結(jié)束條件定義為最大字符個(gè)數(shù)SMB94=4。程序如下圖15.圖15.起始字符檢測(cè)程序示例說明:PLC接收總線上傳來的一串字符,16#01、16#02、16#03、16#55、16#AA、16#BB、16#CC,當(dāng)PLC檢測(cè)到起始字符16#55后,開始接收并將16#55作為第一個(gè)信息字符存入接收緩沖區(qū),起始字符之前的3個(gè)字符被忽略。如下圖16.圖16.用起始字符檢測(cè)來啟動(dòng)接收指令3.空閑線和起始字符接收指令執(zhí)行時(shí),先檢測(cè)空閑線條件,在空閑線條件滿足后,檢測(cè)起始字符。如果接收的字符不是起始字符,則重新檢測(cè)空閑線條件。在空閑線條件滿足和接收到起始字符之前接收的字符被忽略。起始字符和字符串一起存入緩沖區(qū)。適用于通訊連接線上有多個(gè)設(shè)備的情況。示例:PLC接收的起始條件定義為空閑線和起始字符(設(shè)置SMB87中的il=1,sc=1,bk=0,空閑線檢測(cè)時(shí)間SMW90=10ms,起始字符SMB88=16#55),結(jié)束條件為最大字符個(gè)數(shù)2.示例說明:PLC接收總線上傳來的數(shù)據(jù),分幾種情況:當(dāng)空閑線條件不滿足,即使空閑后出現(xiàn)起始字符,PLC也不開始接收。如圖17.圖17.當(dāng)PLC先檢測(cè)到起始字符,再檢測(cè)到空閑線條件滿足,PLC不啟動(dòng)接收。或者當(dāng)PLC檢測(cè)到空閑線條件滿足后,接收到除起始字符之外的任意字符,PLC也不啟動(dòng)接收。如圖18.圖18.只有當(dāng)PLC檢測(cè)空閑線條件滿足后,接收到起始字符,PLC才啟動(dòng)接收,在空閑線條件滿足和接收到起始字符之前接收的字符被忽略。起始字符和字符串一起存入緩沖區(qū),緩沖區(qū)首地址VB200。如圖19.圖19.用空閑線和起始字符來啟動(dòng)接收指令4.斷點(diǎn)檢測(cè)大于一個(gè)完整字符傳輸時(shí)間的一段時(shí)間內(nèi),接收數(shù)據(jù)一直為0.在斷點(diǎn)之前接收的字符被忽略,在斷點(diǎn)之后接收的字符存入信息緩沖區(qū)。示例:PLC接收的起始條件定義為斷點(diǎn)檢測(cè)(設(shè)置SMB87中的il=0,sc=0,bk=1),結(jié)束條件為最大字符個(gè)數(shù)8。示例說明:PLC接收總線上傳來的一串字符和斷點(diǎn),依次為16#0016#00(連續(xù)的兩個(gè)字符間沒有空閑)、16#0016#00(斷續(xù)的兩個(gè)字符間有空閑)、第一個(gè)Break斷點(diǎn)、16#55、第二個(gè)Break斷點(diǎn)、16#EE。當(dāng)PLC檢測(cè)到第一個(gè)斷點(diǎn)狀態(tài)后,啟動(dòng)接收,接收的字符存入信息緩沖區(qū)(第二個(gè)斷點(diǎn)),第一個(gè)斷點(diǎn)之前的字符被忽略。接收緩沖區(qū)起始地址為VB200。如下圖20.圖20.用斷點(diǎn)檢測(cè)來啟動(dòng)接收指令5.斷點(diǎn)和起始字符在斷點(diǎn)條件滿足后,檢測(cè)起始字符。在斷點(diǎn)條件滿足后,如果收到除起始字符外的任意字符,重新檢測(cè)新的斷點(diǎn)。在滿足斷點(diǎn)和起始字符之前接收的字符將被忽略,起始字符和字符串一起存入信息緩沖區(qū)。示例:PLC接收的起始條件定義為斷點(diǎn)和起始字符(設(shè)置il=0,sc=1,bk=1,起始字符SMB88=16#55)。結(jié)束條件為最大字符個(gè)數(shù)8.示例說明:PLC接收總線上傳來的一串字符和斷點(diǎn),依次為16#55、break、16#AA、16#55、break、16#55、16#EE、16#FF. 分幾種情況理解:當(dāng)PLC先檢測(cè)到起始字符再檢測(cè)到斷點(diǎn),PLC不啟動(dòng)接收。(SC+BK)當(dāng)PLC檢測(cè)到斷點(diǎn)后,接收到除起始字符外的任意字符,PLC不啟動(dòng)接收。(BK+Char+SC)只有當(dāng)PLC檢測(cè)到斷電后,緊接著檢測(cè)到起始字符,才啟動(dòng)接收并且將起始字符和字符串一同存入信息緩沖區(qū),斷點(diǎn)和起始字符之前接收的字符將被忽略。(BK+SC)如圖21.圖21.用斷點(diǎn)和起始字符檢測(cè)來啟動(dòng)接收指令6.任意字符。任意字符接收是空閑線檢測(cè)的特例。設(shè)置方式:il=1,sc=0,bk=0,空閑線時(shí)間SMW90/190=0。接收指令一執(zhí)行,立即接收任意字符,并把所有接收字符存入信息緩沖區(qū)。允許使用信息定時(shí)器監(jiān)控接收是否超時(shí)。當(dāng)接收指令執(zhí)行時(shí),信息定時(shí)器啟動(dòng),如果沒有其他終止條件滿足,信息定時(shí)器超時(shí)會(huì)接收接收功能。接收指令結(jié)束條件接收指令支持以下一種或幾種組合的結(jié)束條件:1.結(jié)束字符檢測(cè)在起始條件之后,接收指令檢查接收的所有字符,如果檢測(cè)到結(jié)束字符,則將其存入緩沖區(qū),結(jié)束接收。示例:PLC接收的結(jié)束條件定義為結(jié)束字符檢測(cè)(設(shè)置SMB87中的ec=1,定義結(jié)束字符SMB89=16#55),接收起始條件定義為起始字符檢測(cè)(起始字符16#AA)。示例說明:PLC接收總線上傳來的一串字符,依次為16#AA、16#BB、16#CC、16#55、16#EE、16#FF。當(dāng)PLC檢測(cè)到起始字符16#AA后,啟動(dòng)接收,當(dāng)檢測(cè)到結(jié)束字符16#55后,結(jié)束接收并將接收的所有字符存入信息緩沖區(qū)。如下圖22.圖22.用結(jié)束字符檢測(cè)來結(jié)束接收指令2.字符間隔定時(shí)器字符間隔時(shí)間定義:從一個(gè)字符的結(jié)尾(停止位)到下一個(gè)字符的結(jié)尾(停止位)之間的時(shí)間。接收到字符后,字符間隔定時(shí)器重新啟動(dòng)。兩個(gè)字符之間的間隔時(shí)間超過SMW92/192則結(jié)束接收。示例:PLC接收的結(jié)束條件定義為字符間隔定時(shí)器(設(shè)置SMB87中的c/m=0,tmr=1,信息超時(shí)時(shí)間SMW92),接收起始條件定義為起始字符檢測(cè)。示例說明:PLC接收總線上傳來的一串字符,當(dāng)PLC滿足接收條件后啟動(dòng)接收,接收完一個(gè)字符的停止位后,重新啟動(dòng)字符間隔定時(shí)器,如果檢測(cè)到下一個(gè)字符幀停止位時(shí)SMW92時(shí)間未到,則重新啟動(dòng)字符間隔定時(shí)器,如果當(dāng)SMW92時(shí)間到時(shí)還未檢測(cè)到下一個(gè)字符幀的停止位,則結(jié)束接收。如下圖23.圖23.用字符間隔定時(shí)器來結(jié)束接收指令3.信息定時(shí)器當(dāng)接收啟動(dòng)條件一滿足,信息定時(shí)器就啟動(dòng),當(dāng)時(shí)間超過SMW92/192指定的時(shí)間,信息定時(shí)器時(shí)間到結(jié)束接收。示例:PLC接收的結(jié)束條件定義為信息定時(shí)器(設(shè)置SMB87中的c/m=1,tmr=1,信息超時(shí)時(shí)間SMW92),接收起始條件定義為起始字符檢測(cè)。示例說明:PLC接收總線上傳來的一串字符,當(dāng)PLC滿足接收條件后啟動(dòng)接收,信息定時(shí)器啟動(dòng),當(dāng)SMW92時(shí)間到時(shí),結(jié)束接收。如圖24.圖24.用信息定時(shí)器來結(jié)束接收指令4.最大字符計(jì)數(shù)當(dāng)接收字符個(gè)數(shù)達(dá)到或超過最大字符個(gè)數(shù)(SMB94/SMB194),接收功能結(jié)束。由于接收指令需要知道接收信息的最大長度,以保證信息緩沖區(qū)之后的數(shù)據(jù)不被覆蓋,所以即使不被用作接收結(jié)束條件,也必須指定最大字符個(gè)數(shù)。如果沒有指定最大字符個(gè)數(shù),則SM86.6/186.6=1(輸入?yún)?shù)錯(cuò)誤或丟失啟動(dòng)或結(jié)束條件)5.校驗(yàn)結(jié)束當(dāng)接收字符的同時(shí)出現(xiàn)硬件信號(hào)校驗(yàn)錯(cuò)誤時(shí),接收指令會(huì)自動(dòng)結(jié)束。只有在SMB30/130中使能校驗(yàn)位,才有可能出現(xiàn)校驗(yàn)錯(cuò)誤。沒有辦法禁止此功能。6.用戶結(jié)束。通過程序結(jié)束接收功能:將SM87.7或SM187.7置為0,且需邊沿觸發(fā)RCV接收指令。以上內(nèi)容是通過發(fā)送和接收指令實(shí)現(xiàn)S7-200PLC的自由口通訊。另外,S7-200PLC還提供了通訊口字符接收中斷功能。見下文。如何人為結(jié)束RCV接收狀態(tài)?接收指令控制字節(jié)(SMB87/SMB187)的en位可以用來允許/禁止接收狀態(tài)??梢栽O(shè)置SM87.7/SM187.7為0,然后對(duì)此端口執(zhí)行RCV指令,即可結(jié)束RCV指令。字符中斷使用字符中斷方式接收數(shù)據(jù),接收每個(gè)字符時(shí)都會(huì)產(chǎn)生中斷。在執(zhí)行與接收字符事件相連的中斷程序前,接收的字符存入SMB2寄存器中,校驗(yàn)狀態(tài)存入SM3.0。 SMB2、SM3.0都是只讀的。Port0/Port1共用SMB2/SMB3。Port0對(duì)應(yīng)于中斷事件8。Port1對(duì)應(yīng)于中斷事件25。SMB2使用條件:RCV指令不使能,通訊端口為自由口模式,且建立中斷事件8/25。字符中斷使用方法:以端口0接收字符為例:如圖25.圖25.字符中斷程序當(dāng)CPU通過端口0接收到一個(gè)字符后,會(huì)將該字符存入接收字符緩沖區(qū)SMB2,然后進(jìn)入相連接的中斷程序中。注意:對(duì)于這段程序,如果在中斷程序中不作任何編程,那么當(dāng)CPU接收n個(gè)字符時(shí),中斷程序?qū)⒈粓?zhí)行n次,SMB2寄存器存儲(chǔ)接收到的最后一個(gè)字符。如上位機(jī)通過串口調(diào)試軟件給CPU發(fā)送3個(gè)字符16#AA、16#BB和16#CC,如下圖26.圖26.通過串口調(diào)試軟件發(fā)送字符那么與接收字符事件相連的中斷程序?qū)⒈粓?zhí)行3次,SMB2中只能保存最后一個(gè)接收到的字符16#CC。如下圖27.圖27.狀態(tài)表監(jiān)控SMB2用SMB接收多個(gè)字符,如何編程?由于SMB2只能存儲(chǔ)一個(gè)字符(一個(gè)字節(jié)),如果要想接受多個(gè)字符,則應(yīng)當(dāng)在CPU接收下一個(gè)字符之前,在中斷程序中通過指針編程將SMB2中存儲(chǔ)的字符移出來,以便下一次接收字符。以一個(gè)例程說明:如圖28.圖28.接收多個(gè)字符的程序VD0作為地址指針指向VB100,當(dāng)端口0接收到第一個(gè)字符,將第一個(gè)字符存入SMB2,進(jìn)入接收中斷,將SMB2中的字符復(fù)制到指針VD0指向的地址字節(jié)VB100中,指針地址加1,VD0指向下一個(gè)字節(jié)VB101。當(dāng)接收第二個(gè)字符,將字符存入SMB2,進(jìn)入接收中斷,將SMB2中的第二個(gè)字符復(fù)制到指針VD0指向的地址字節(jié)VB101中,指針地址加1,VD0指向下一個(gè)字節(jié)VB102。當(dāng)接收第三個(gè)字符時(shí)以此類推。另外,如果需要接收n個(gè)字符就結(jié)束接收,或者需要接收n個(gè)字符后循環(huán)接收,可以在中斷程序中設(shè)置一個(gè)標(biāo)志位,下面我們?cè)嚺e例說明:例程1,接收到5個(gè)字符就結(jié)束接收的程序:如圖29.圖29.程序例程2,接收到5個(gè)字符后循環(huán)接收的程序:如圖30.圖30.程序注意,程序中的的指針不要選擇累加器AC,因?yàn)槔奂悠鞑荒茉谥鞒绦蚝椭袛喑绦蛑袀鬟f參數(shù)。字符中斷和RCV指令之間有什么關(guān)系?簡(jiǎn)單地說,當(dāng)RCV指令使能時(shí),接收字符不進(jìn)入SMB緩沖區(qū)。分析實(shí)驗(yàn)如下:在主程序中我們既定義PLC執(zhí)行RCV接收指令的起始結(jié)束條件(起始條件為起始字符16#AA,結(jié)束條件為結(jié)束字符16#BB),又建立字符中斷事件8,上升沿條件觸發(fā)RCV指令。上位機(jī)通過串口調(diào)試軟件給CPU發(fā)送字符。如圖31.。圖31.通過串口調(diào)試軟件發(fā)送字符程序如下圖32.:圖32.測(cè)試程序狀態(tài)表監(jiān)控結(jié)果:如下圖33.圖33.狀態(tài)表監(jiān)控結(jié)果結(jié)論:當(dāng)RCV指令不觸發(fā)的話,接收字符只進(jìn)入SMB2緩沖區(qū),不進(jìn)入RCV指令的接收緩沖區(qū)。當(dāng)RCV指令觸發(fā)后,滿足CPU接收的起始和結(jié)束條件的字符存入RCV指令對(duì)應(yīng)的TBL緩沖區(qū)。起始條件之前的字符既不存入RCV緩沖區(qū),也不存入SMB2緩沖區(qū)。結(jié)束條件之后接收到的字符,存入SMB2緩沖區(qū)。2.4 自由口通信例程為了更好的理解自由口的編程,可參考下面的例程。該例程涉及到兩臺(tái)S7-200PLC,其中發(fā)送方向接收方發(fā)送數(shù)據(jù),接收方接收到數(shù)據(jù)后再給發(fā)送方發(fā)送數(shù)據(jù),如此往復(fù)。發(fā)送方例程自由口發(fā)送方程序:先發(fā)送3個(gè)字符a、b、c 到接收方,然后轉(zhuǎn)為接收狀態(tài),接收到對(duì)方的3個(gè)字符1、2、3 后重新啟動(dòng)發(fā)送指令,將d、e、f 發(fā)送到接收方后再啟動(dòng)接收,隨后收到3個(gè)字符4、5、6。然后重復(fù)上述過程。接收方例程自由口接收方程序:先接收3個(gè)字符a、b、c ,然后轉(zhuǎn)為發(fā)送,給對(duì)方發(fā)出3個(gè)字符1、2、3 后重新啟動(dòng)接收指令,待收到d、e、f 后重新啟動(dòng)發(fā)送指令,發(fā)出3個(gè)字符4、5、6后再次轉(zhuǎn)為接收狀態(tài)。然后重復(fù)上述過程。注意:此指令庫/程序的作者和擁有者對(duì)于該軟件的功能性和兼容性不負(fù)任何責(zé)任。使用該軟件的風(fēng)險(xiǎn)完全由用戶自行承擔(dān)。由于它是免費(fèi)的,所以不提供任何擔(dān)保,錯(cuò)誤糾正和熱線支持,用戶不必為此聯(lián)系西門子技術(shù)支持與服務(wù)部門。需要定時(shí)向通信對(duì)象發(fā)送消息并等待回復(fù)的消息,如果因故消息沒有正常接收,下次無法發(fā)送消息怎么辦?可以在開始發(fā)送消息時(shí)加上人為中止RCV指令的程序。自由口通信中,主站向從站發(fā)送數(shù)據(jù),為何收到多個(gè)從站的混亂響應(yīng)?這說明從站沒有根據(jù)主站的要求發(fā)送消息。有多個(gè)從站的通信網(wǎng)絡(luò)中,從站必須能夠判斷主站的消息是不是給自己的,這需要從站的通信程序中有必要的判斷功能。3RS485網(wǎng)絡(luò)RS-485串行通信標(biāo)準(zhǔn)采用平衡信號(hào)傳輸方式,或者稱為差動(dòng)模式。平衡傳輸方式可以有效地抑制傳輸過程中干擾。平衡方式采用一對(duì)導(dǎo)線,利用兩根導(dǎo)線間的電壓差傳輸傳輸信號(hào)。這兩根導(dǎo)線被命名為A(TxD/RxD-)和B(TxD/RxD+)。當(dāng)B的電壓比A高時(shí),認(rèn)為傳輸?shù)氖沁壿嫺唠娖?;?dāng)B的電壓比A低時(shí),認(rèn)為傳輸?shù)氖沁壿嫷碗娖叫盘?hào)。能夠有效工作的差動(dòng)電壓范圍十分寬廣,可以從零點(diǎn)幾伏到接近十伏。RS-485通信端口可以做到很高的通信速率,較長的通信距離,以及并聯(lián)連接多個(gè)端口。平衡通信方式能否有效工作受到共模電壓差的影響。RS-485接口的兩根導(dǎo)線相對(duì)于通信對(duì)象信號(hào)地的電壓差就是共模電壓。非電氣隔離的RS-485接口能在一定的范圍內(nèi)抵抗共模電壓對(duì)通信的干擾。S7-200 CPU通信口的共模抑制電壓是12V。所以對(duì)于這類非隔離型的RS-485端口,保證通信口之間的信號(hào)地等電位非常重要,最好將它們連接在一起(并不是說一定要接地)。S7-200系統(tǒng)中的RS-485端口是半雙工的,不能同時(shí)發(fā)送和接收信號(hào)。在S7-200系統(tǒng)中,選擇合適的通信設(shè)備,可以做到波特率從1200到12M,單段距離1000m,單段站點(diǎn)32個(gè)的通信網(wǎng)絡(luò)。通過中繼器,RS-485電氣網(wǎng)絡(luò)還可以擴(kuò)展通信距離,增加通信站點(diǎn)。詳情請(qǐng)參考S7-200系統(tǒng)手冊(cè)關(guān)于通信的專門一章。雖然常見的RS-485通信器件在電氣性能上基本一致,但物理接口卻五花八門,沒有統(tǒng)一的規(guī)定。3.1 通信口引腳定義表3. S7-200 CPU通信口引腳定義:CPU插座(9針母頭)引腳號(hào)PROFIBUS名稱Port0/Port1(端口0/端口1)引腳定義1屏蔽機(jī)殼接地(與端子PE相同)/屏蔽224V返回邏輯地(24V公共端)3RS-485信號(hào) BRS-485信號(hào) B 或 TxD/RxD +4發(fā)送請(qǐng)求RTS(TTL)55V返回邏輯地(5V公共端)65V5V,通過100 Ohm電阻724V24V8RS-485信號(hào) ARS-485信號(hào) A 或 TxD/RxD -9不用10位協(xié)議選擇(輸入)金屬殼屏蔽機(jī)殼接地(與端子PE相同)/與電纜屏蔽層連通上表中,3和8為RS-485信號(hào),它們的背景顏色與PROFIBUS電纜、PROFIBUS網(wǎng)絡(luò)插頭上的顏色標(biāo)記一致。通信端口可以從2和7向外供24V直流電源。注意: CPU通信口上的2、5針在內(nèi)部是連通的,并且它們和CPU上的傳感器電源(24V)的M也是連通的 通信口插座的金屬殼、1號(hào)針,與CPU接線端子上的電源部分的PE導(dǎo)通,而與上述的M不通 擁有兩個(gè)通信口的CPU,其Port0、Port1的2、5針相通,也與M連通3.2 RS-485網(wǎng)絡(luò)的硬件組成在S7-200系統(tǒng)中,無論是組成PPI、MPI還是RPOFIBUS-DP網(wǎng)絡(luò),用到的主要部件都是一樣的: 1.PROFIBUS電纜:電纜型號(hào)有多種,其中最基本的是PROFIBUS FC(Fast Connect快速連接)Standard電纜(訂貨號(hào)6XV1 830-0EH10) 2.PROFIBUS網(wǎng)絡(luò)連接器:網(wǎng)絡(luò)連接器也有多種形式,如出線角度不同等等連接網(wǎng)絡(luò)連接器A. 電纜和剝線器。使用FC技術(shù)不用剝出裸露的銅線。圖34. 剝好一端的PROFIBUS電纜與快速剝線器(FCS,訂貨號(hào)6GK1905-6AA00)。B. 打開PROFIBUS網(wǎng)絡(luò)連接器。首先打開電纜張力釋放壓塊,然后掀開芯線鎖。圖35. 打開的PROFIBUS連接器C. 去除PROFIBUS電纜芯線外的保護(hù)層,將芯線按照相應(yīng)的顏色標(biāo)記插入芯線鎖,再把鎖塊用力壓下,使內(nèi)部導(dǎo)體接觸。應(yīng)注意使電纜剝出的屏蔽層與屏蔽連接壓片接觸。圖36. 插入電纜由于通信頻率比較高,因此通信電纜采用雙端接地。電纜兩頭都要連接屏蔽層。D. 復(fù)位電纜壓塊,擰緊螺絲,消除外部拉力對(duì)內(nèi)部連接的影響。網(wǎng)絡(luò)連接器網(wǎng)絡(luò)連接器主要分為兩種類型:帶和不帶編程口的。不帶編程口的插頭用于一般聯(lián)網(wǎng),帶編程口的插頭可以在聯(lián)網(wǎng)的同時(shí)仍然提供一個(gè)編程連接端口,用于編程或者連接HMI等。圖37. 左側(cè)為不帶編程口的網(wǎng)絡(luò)連接器(訂貨號(hào):6ES7 972-0BA52-0XA0)右側(cè)的是帶編程口的網(wǎng)絡(luò)連接器(訂貨號(hào):6ES7 972-0BB52-0XA0)線型網(wǎng)絡(luò)結(jié)構(gòu)通過PROFIBUS電纜連接網(wǎng)絡(luò)插頭,構(gòu)成總線型網(wǎng)絡(luò)結(jié)構(gòu)。圖38. 總線型網(wǎng)絡(luò)連接在上圖中,網(wǎng)絡(luò)連接器A、B、C分別插到三個(gè)通信站點(diǎn)的通信口上;電纜a把插頭A和B連接起來,電纜b連接插頭B和C。線型結(jié)構(gòu)可以照此擴(kuò)展。注意圓圈內(nèi)的終端電阻開關(guān)設(shè)置。網(wǎng)絡(luò)終端的插頭,其終端電阻開關(guān)必須放在ON的位置;中間站點(diǎn)的插頭其終端電阻開關(guān)應(yīng)放在OFF位置。終端電阻和偏置電阻一個(gè)正規(guī)的RS-485網(wǎng)絡(luò)使用終端電阻和偏置電阻。在網(wǎng)絡(luò)連接線非常短、臨時(shí)或?qū)嶒?yàn)室測(cè)試時(shí)也可以不使用終端和偏置電阻。 1. 終端電阻:在線型網(wǎng)絡(luò)兩端(相距最遠(yuǎn)的兩個(gè)通信端口上),并聯(lián)在一對(duì)通信線上的電阻。根據(jù)傳輸線理論,終端電阻可以吸收網(wǎng)絡(luò)上的反射波,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論