




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、主題:應用探討一S7-200自由口通信一發(fā)帖整理 強大而靈活的自由口通信能力,是S7-200系統(tǒng)的一個重要特點。S7-200 CPU 的RS485通信口提供了建立在串行通信基礎(chǔ)上的“自由”通信能力, 數(shù)據(jù)傳輸協(xié) 議完全由用戶程序決定。通過自由口方式, S7-200可以與串行打印 機、條碼閱 讀器等通信。而S7-200的編程軟件也提供了一些通信協(xié)議庫,如 USS協(xié)議庫和 MODBUS RTU從站協(xié)議庫,它們實際上也使用了自由口通信功能。開設(shè)本話題的目的,在于澄清自由口通信的基本概念,強調(diào)使用中的要點,討論應用的常見問題。經(jīng)過此次集中交流,解決了如下一些問題:1. 自由口通信基本概念2. 自由口通
2、信編程指令的使用和技巧3. 自由口通信常見問題4. 產(chǎn)品功能建議更多信息請參考下面文檔?!跋螺d中心”參考文檔:文檔編號“ 1109582' S7-200可編程控制器系統(tǒng)手冊文檔編號“ A0136' 西門子 S7- 200?L0G0!?SIT0P 參考以下為本次探討的發(fā)帖整理,查看原始交流內(nèi)容請點擊 此處。1. 自由口通信基本概念(1樓5樓)2. 自由口通信編程指令的使用和技巧 (6樓一一15樓)3. 自由口通信容易犯的錯誤 (16樓一一24樓)產(chǎn)品功能建議(25樓一一27樓)quote:以下是引用BABL在2011-01-20 15:17:08 的發(fā)言:我回來了,項目終于做完了
3、,可以回家過年了,:)。自由口通信真是折騰的我好慘啊,簡單回顧一下,希望對像我這樣的菜鳥有些借 鑒作用。先感謝一下西門子論壇和熱線,沒少騷擾他們。在完全沒有準備的情況下甲方又加進一個儀表, 做什么自有口通信,暈阿!沒辦 法,迎著上吧!網(wǎng)上搜資料,看手冊,越看越糊涂!時間緊迫,還是直接上手做吧首 先是把PLC和儀表連接起來,可儀表的口是rs232的,熱線工程師告訴我得 做rs232/485的轉(zhuǎn)換,打車到市場上買個轉(zhuǎn)換器(打車錢比設(shè)備錢還多,可見現(xiàn)場多么偏僻阿),聽賣轉(zhuǎn)換器的老板給我分析了一下每種的區(qū)別一一不光是價 格的區(qū)別,說實在的,當時非常慚愧,老板懂的比我多多了。買回來后自己動手焊線,一個人
4、費了九牛二虎之力,焊的那個慘樣就不用說了, 還好有殼可以包裝一下。焊好了,實驗一下效果吧,不知到怎么做了,打電話。熱線工程師告訴我找個串口調(diào)試工具,連接到pc機上測試。在串口調(diào)試工具上發(fā)一串數(shù),在 200上收,ok!高興壞了,沒白忙活。硬件上應該沒問題了,接下來開始做程序了。先得理解儀表的協(xié)議,弄清了儀表先要收到請求數(shù)據(jù)的命令,然后根據(jù)命令做出 響應。同樣,先用串口調(diào)試工具和儀表連接進行通信測試,還算聰明吧,:)!然后開始在200里編寫收發(fā)程序,開始時整個思路都是亂的,無從下手。就把 200手冊上的例子程序整個抄上,在 cpu224的兩個接口間進行通信實驗。經(jīng)過不停的實驗,終于一點一點地理解了
5、控制字節(jié)、 控制參數(shù)的含義,怎么設(shè)置 接收結(jié)束條件,怎么使用中斷、怎么控制接收和發(fā)送等等。ok,開始真正地與儀表通信了發(fā)請求命令,收數(shù)據(jù),可收到的數(shù)據(jù)是 ASCII碼,得進行數(shù)據(jù)轉(zhuǎn)換。根據(jù)大俠們的提醒,經(jīng)過實驗知道了怎么將 ASCII碼轉(zhuǎn)換為實際的工程數(shù)據(jù)。到此基本結(jié)束了,雖然說著好像也沒什么,但只有我最了解其中的痛苦,不停地 實驗,不停地修改阿!后面在實際運行中又遇到了有時通信中端的問題, 將雙絞線的屏蔽接到地上后暫 時還沒出現(xiàn)問題。總結(jié)一下,個人認為作自由口通信需要做好以下幾方面工作:1、最主要的是多動手,光看資料是沒有用的,只有自己親自去動手實驗一下才 能發(fā)現(xiàn)問題和幫助理解。2、做實驗是
6、找個串口調(diào)試工具(我用的是 sscom32)是必須的,可以幫助你測 試你的通信線,調(diào)試你的程序,盡量不要直接與設(shè)備進行通信, 通信不上不好分 析原因。3、我認為200手冊上的例子程序非常好,基本的處理方法和編程方法都涉及到 了,可以根據(jù)你的需要做修改,當然首先要充分地理解他。4、遇到不太容易理解的,或有問題的,多和別人交流一下,從中可以得到不同 的思路。提前給西門子和壇子里的專家們拜年了!1. 自由口通信基本概念(1樓5樓)quote:以下是引用LaoHuai在2010-12-24 08:29:48 的發(fā)言:quote:以下是引用 happy Julia 在 2010-12-23 21:58:
7、54的發(fā)言:以前很少用自由口通信,但項目里要用呀,正在學習,就接到邀請了。請教各位大俠:S7-200自由口能支持的最高速率是多少呀,我希望通信能快點。還有它的數(shù)據(jù)位、停止位是幾位呀,我好確定能和什么樣的設(shè)備通信呀。最高波特率是115200BPS但需要1.2或者以上版本的CPU數(shù)據(jù)位可以是7位或8位停止位是固定的1位。quote:以下是引用300小小生在2010-12-23 13:52:59的發(fā)言:300也可以實現(xiàn)與上位機自由通訊的,S7-200自由口通訊是基于 RS485通訊基礎(chǔ)的半雙工通訊,因此,發(fā)送和接收指令不能同時執(zhí)行。這點有點不好,在300里可以422通訊,但最好是PLC發(fā)送不要連續(xù)發(fā)
8、送,而接收倒沒事。我有次在調(diào)試的時候發(fā)現(xiàn)上位機發(fā)了任務后,PLC設(shè)備要過好長一段時間才去執(zhí)行, 后來請教了老師傅,老師傅說把發(fā)送端加個間隔時間就好了以下是引用 鼠老爹在2010-12-31 15:59:24的發(fā)言:不管是什么通訊,傳送的都是二進制代碼。 ASCII碼與二進制協(xié)議的區(qū)別在于代碼所表示內(nèi) 容的方式不同。如 果使用ASCII代碼,則數(shù)據(jù)不能直接用于數(shù)學運算,而必須轉(zhuǎn)換成普通的二進制代碼。這樣會加重程序負擔。但是ASCII代碼用于通訊有一個好處,起始字符與結(jié)束字符比較容易確定和判別,它們一般不會出現(xiàn)在數(shù)據(jù)區(qū)。而用二進制代碼通訊,數(shù)據(jù)無需轉(zhuǎn)換即可直接 使用(高低位字節(jié)可能需要交換),PL
9、C的負擔較小。但是起始字符和結(jié)束字符經(jīng)常會與數(shù) 據(jù)重復。因此,用二進制代碼通訊, 通常是靠字符數(shù)和定時器來確定接收終點,主從站之間的步調(diào)協(xié)調(diào)非常重要。以下是引用 Am_Programer在 2010-12-27 15:48:59 的發(fā)言:西門子S7-200系列PLC支持自由口通信協(xié)議。所謂自由口協(xié)議是指通過用戶 程序控制CPU主機的通信端口的操作模式來進行通信。用這種自由口模式可以用 自定義的通信協(xié)議連接多種智能設(shè)備。自由口模式支持ASCII和二進制協(xié)議。在自由口模式下,主機處于RUN方式時,用戶可以用相關(guān)的通信指令所編寫的程 序控制通信口的操作。當主機處于 STOP方式時,自由口通信被終止,
10、通信口自 動切換到正常的 PPI 協(xié)議操作。自由口通信指令包括:XMT自由口發(fā)送指令;RCV自由口接受指令。用特殊標 志寄存器SMB30(端口 0)和SMB130(端口 1)的各個位設(shè)置自由口模式,并配 置自由口通信參數(shù),如波特率、奇偶效驗和數(shù)據(jù)位。發(fā)送指令(XMT和發(fā)送中斷:發(fā)送指令允許 S7-200的通信口上發(fā)送最多255 個字節(jié),發(fā)送中斷通知程序發(fā)送完成。接受字符中斷: 接受字符中斷通知程序通信口上接受到了一個字符, 應用程序就 可以根據(jù)所用的協(xié)議對該字符進行相關(guān)的操作。接受指令(RCV :接受指令從通信口接收到整條信息,當接收完成后產(chǎn)生中斷 通知應用程序。需要在SM存儲器中定義條件來控
11、制接收指令開始和停止接受信 息。接受指令可以根據(jù)特定的字符或時間間隔來啟動和停止接受信息。 接受指令 可以實現(xiàn)多數(shù)通信協(xié)議。自由口通信功能的用途:1. 通過RS-232或RS-485串口連接多種智能儀表或 RTU根據(jù)智能儀表或RTU 定義的通信協(xié)議編寫用戶程序與智能儀表或 RTU通信。2. 使用USS協(xié)議與西門子MicroMaster系列變頻器通信,STEP7-Micro/WIN提 供USS協(xié)議庫,S7-200 CPU是主站,變頻器是從站。3. 創(chuàng)建用戶程序來模擬另外一種網(wǎng)絡上的從站器件。例如S7-200的用戶程序模仿一個Modbus從站。STEP7-Micro/WIN提供Modbus協(xié)議庫。
12、4. 采用自定義通信協(xié)議與PC通信。PC上的應用軟件可以采用此方法方便的訪 問S7-200的數(shù)據(jù)。這是第三方軟件訪問 S7-200PLC比較簡便,廉價的方法。對于自由口通訊, 西門子的很多資料都做了比較詳細的介紹, 其中還包含了大量的例子程序。由于通訊的不可見性,很多人還是不能很好的掌握,我建議大家:1、理解什么是通訊、 什么是串口、 什么是 232、什么是 485?沒有過硬的硬件知識是不可能做出通訊的,你連線都不知道怎么接,怎么調(diào)試你的程序?2、仔細閱讀西門子關(guān)于通訊的資料,不需要多只需要精,因為各種版本的資料基本是一樣的,關(guān)鍵就是 SMB30 SMB86 87、88、89、SMW90 92
13、、SMB94自己 控制通訊過程需要SMB2把這些弄明白了,才有可能做出通訊程序3、使用PC的通訊軟件協(xié)助調(diào)試,有了 PC的通訊軟件可以看見通訊過程中的數(shù) 據(jù),能夠更方便的調(diào)試程序4、理解各種通訊協(xié)議。大家要注意串口通訊和協(xié)議是 2碼事,不論是PPI、MODBUS 還是USS它們都有自己的協(xié)議規(guī)范,根據(jù)規(guī)范來寫你就可以實現(xiàn)這種通訊。 只不 過PPI是不公開通訊協(xié)議的,沒有辦法寫而已!最后建議大家自己做通訊,起碼會做!至于用不用自己做就要根據(jù)你的實際情況 了,西門子提供的庫也是很方便的!以下是引用 yanxiao在2010-12-24 13:50:10的發(fā)言:我看過不少問S7200通訊問題的貼子,
14、覺得很多問題并不是S7200的,而是串行通訊的共性問題,也就是對串行通訊本身概念的認識問題。下面我來談談在我的記憶中關(guān)于串行通訊的一些認識。1、串行通訊只有一個傳輸通道,每個時刻只能表達一種狀態(tài)。不管什么介質(zhì),不管是什么 信號,我們用1表示一種狀態(tài),用 0表示另一種狀態(tài)。2、只用1和0兩種狀態(tài),是不能表達更多信息的。好在有一個物理量,對每個系統(tǒng)來講是統(tǒng)一的,那就是時間。我們現(xiàn)在很容易做到不同系統(tǒng)之間的定時誤差控制在PPM數(shù)量級。1和0在時間上進行有序的組合,就可表達近乎無限的信息。3、任何一個信號,如果不賦給它一些特點的意義,實際上沒什么用。兩個系統(tǒng)要通過信號交換信息,必須對信號有一個共同的約
15、定,這就是我們通常所說的協(xié)議。4、 最基本的協(xié)議是物理層面的 (那個0SI的七層協(xié)議模型, 第一層就是物理層協(xié)議)。RS232、 RS485 RS422這些是物理層面的一些協(xié)議。5、我們現(xiàn)在要談的是異步串行通訊。異步,發(fā)達方和接收方之間,沒有額外的通道來傳送信息何時傳送與接收。 每個信息單元的起止時間,發(fā)送方編在信息中,由接收方自已解碼并同步。6、好。現(xiàn)在來講一下傳送一個字節(jié)的過程。在沒有傳送信息時,傳輸線處于空閑狀態(tài)。規(guī)定:空閑狀態(tài)為1。發(fā)送方(TX)準備發(fā)送,驅(qū)動傳輸線讓它由1變?yōu)?,并持一位的時間長度,我們把這一位叫做起始位。接收方(RX),檢測到傳輸線由1變0,意味著可能有信息要傳了,
16、RX就持續(xù)檢測,以驗證這個 0是不是持續(xù) 了規(guī)定的一位時間長度,若是個合法 的起始位,就按約定的定時方式,把后續(xù)的傳輸線狀態(tài),接收為1個字節(jié)。TX在發(fā)完起始位后,就發(fā)字節(jié)中的第一個位(bit),并依次把字節(jié)中的所有位發(fā)完,每bit均持續(xù)相同的一位時長。然后再發(fā)校驗位(如果約定發(fā)/收方都采用的話)、停止位。7、停止位,這個要說一下。我們知道起始位是0,而這個停止位,規(guī)定是 1,和傳輸線的空閑狀態(tài)1是相同的。停止位規(guī)定的時長比較亂,有1位停止位(也就持續(xù)時間占1個位長)、1.5位、和2位停止位,其它時長的停止位好象沒見過。停止位的作用,其一是作為一 字節(jié)單元的成員,給接收方定時用的,也就是下一個字
17、節(jié),在停止位之后才開始。另一個作用,可供檢查字節(jié)傳送的完整性。因為停止位是規(guī)定為 1狀態(tài)的,若在停止位的時間里測到了非1狀態(tài),表示這個字節(jié)傳送有問題,有可能被接收方丟棄,傳送失敗。&若收發(fā)雙方的停止位不相同,怎么辦?這個在論壇上經(jīng)常有人問。好,我們來分析一下。若TX是2個 停止位,RX要求是1個停止位,很好,TX多發(fā)的一個停止位,會被 RX看作 是空閑狀態(tài)(也可認為是字符間隔),沒有任何問題。若反過來,TX是1個停止 位,RX要求是2個停止位,有問題嗎? 一般問題是很大的,但也有可能可以正常通訊。這要看TX是怎么發(fā)字節(jié)的。有些系統(tǒng),硬件上,發(fā)送電路比較簡單,沒有緩沖機構(gòu),一個字節(jié)必須完
18、整發(fā)送后,才準備下一個字節(jié)的數(shù)據(jù),而這個準備需要花一些時間的,這就給傳送的時序上,停止位之后,有了空閑時間,相當于停止位 得到了延長。所以我曾經(jīng)發(fā)過一個貼子說,S7200的發(fā)送改為單字節(jié)發(fā)送,每個字節(jié)之間有意插入一些延時,人為造成空閑時間,以充當停止位,但這個方法說 歸說,我并沒有試過。可惜的是,現(xiàn)在的系統(tǒng),硬件都做得很完美了, 包括S7200, TX是有緩沖的,在一個字節(jié)還未發(fā)完前就可以接受下一個要發(fā)送的字節(jié),硬件上保證一個字節(jié)發(fā)完后可以立即啟動下一個字節(jié)發(fā)送,前后兩字節(jié)間除了停止位,沒有額外的間隙,這種情況下,接收方就要命了,RX認為還在收停止位時,下一個字節(jié)的起始位就來了,沒辦法完整接收
19、,通訊就失敗了。9、波特率。兩邊設(shè)為一致就可以了。波特率不一致,鐵定不能通訊。但允許有少 量的誤差。停止位實際上還用來調(diào)節(jié)這個誤差的。比如1個停止位,RX并不死板要求停止位是完整的1個位時長,實際只要停止位超過 0.5個位長就算是合格 了。波特率,就是每秒最快能傳送 的位數(shù),包括了起始位、停止位這些輔助位。實際每秒能傳送的最快字節(jié)數(shù),要看這些輔助位的多少。比如一個 11位結(jié)構(gòu)的字節(jié) 單元:1起始位+8字節(jié)位+1校驗位+1停止位,字節(jié) 最快傳送速率為 band/11。好象還有一個概念,叫比特率,也就是有效的位傳送速率,比特 率=8*( ba nd/11),也就是比特率比波特率要小的。10、RS2
20、32的TX和RX是兩根獨立的線,收/發(fā)可以同時進行,所以叫作全雙工異步串行通訊。按我們?nèi)粘扇私徽劦慕?jīng)驗,總是A說B聽,當B要說時,A就停下來聽B說。如果A、B同時說,這是吵架,要達到相互交流就難了。同樣,通訊若同時收發(fā),一般人會白白死掉很多腦細胞而寫出的程序通訊效果還是很差。所以,即使RS232能雙向同時,一般使用時也是收、發(fā)不同時的。11、RS485 RS232不錯了,但局限性大大的。RS485收發(fā)同線,允許多少 RS485并聯(lián)使 用,電氣采用差分傳送信號,可以抗干擾。S7200就屬于RS485 RS485設(shè)備冋一時間只能發(fā)或再改,收發(fā)是分時的,所以叫做準雙向。盡管S7200中可以同時緩沖
21、 8個NETR和NETW,實際在RS485層面,還是一個一個分時完成的(由系統(tǒng)程序根據(jù) PPI協(xié)議協(xié)調(diào))。RCV和XMT完全由用戶程序控制,你就不能同時讓兩個都執(zhí)行,否則就是哄搶資源而被S7200當成錯誤處理。12、RS422介于RS232和RS485 RS422和RS232一樣收、發(fā)線獨立,但電氣上采用和 RS485 一樣的差分信號。所以RS422能多機通訊,比 RS232傳得遠,但比 RS485浪費硬件資源。RS422只要軟件上采用準雙向的規(guī)則,通過發(fā)收線合并,可以簡化為RS485,和RS485設(shè)備通訊。但RS485卻不能復雜化成RS422使用。以下是引用 yanxiao在2010-12-
22、31 16:00:57的發(fā)言:再談一個于關(guān)通訊效率: 這里的通訊效率問題,針對主站。從站,一般根據(jù)主站的請求,及時發(fā)回應答就行了,不存 在效率問題。當主站要同多個從站通訊時,就有一個效率問題。以modbus-rtu為例。1、 定時輪詢。這恐怕是最原始的方法,也是效率最低下的。比如1秒鐘輪詢一個站,如果 3個從站,要3秒才輪到1次。2、 高效的輪詢應該根據(jù)協(xié)議的定時來調(diào)整,盡量擠掉不必要的延時。modbus-rtu, 3.5個字節(jié)傳送時間作為幀間隔,但是從站的回應時間沒有標準規(guī)定,要先問清楚。一般的儀表,回應時間都是很短的,幾十ms內(nèi)都會有回應,你可以把回應超時設(shè)在100ms。當然儀表能提供這個
23、超時參數(shù)是最好了。當主站發(fā)完請求幀后,立即進入接收狀態(tài),隨時準備接收從站的回應。但若到達超時時間還 未收到,則放棄繼續(xù)接收,認為從站無響應,進入下一從站的通訊。3、如果3個從站只有1個在線上,按理說是通訊速度是最快的,但如果不采取一些策略, 則通訊速率會變成最慢的。輪詢一個離線的從站,通訊要等到超時才結(jié)束,這肯定比在線的從站回應要慢得多,因此大部分時間浪費在離線的從站上了。策略是為每一個從站配置1個在線狀態(tài)標記位,當從站有成功回應的,標記位=1,表示 在線,若該從站連續(xù) N次(2次)沒有回應或出錯,置標記位 =0,表示離線。對于在線的從站,按正常順序輪詢,而離線的從站,則每隔一定時間或每隔一定
24、的輪詢周期, 發(fā)一個請求給它,若有回應且正確,則置標記位為1,認為該從站已回到在線狀態(tài),若沒有回應或出錯,則繼續(xù)保持離線狀態(tài)。 這樣,可以把花在離線從站的通訊時間,控制在一個合理的范圍。以下是引用 鼠老爹在2011-01-01 23:46:42的發(fā)言:yanxiao的方案很在理,我做PC與PLC通訊所采用的策略基本如此。當時并不在乎效率,而是為了監(jiān)視PLC的狀態(tài)。因為下位機的開啟是隨機的。在 PLC 與第三方儀表的通訊中, 我還沒有這樣做過。 在我的理念中, 只有實時性要求不是很 高的場合, 與第三方儀表之間才會采用通訊的方式交換數(shù)據(jù)。 因為第三方儀表通常只能作為 從站,等待PLC的數(shù)據(jù)請求,
25、實時性無法得到保障。因此,我認為PLC在通訊上的效率已經(jīng)無所謂了。就 像現(xiàn)在正在做的一個項目,PC連著數(shù)臺PLC每臺PLC要輪詢16臺儀表的32個數(shù)據(jù),波特率只能是2400 (其它波特率不太容易匹配),每臺PLC還 要同時處理16個模擬量,下 位機分布面積很大??紤]通訊的可靠性,PLC每2秒鐘問一個儀表。這樣走一圈就需要半分鐘。選擇通訊是因為這些數(shù)據(jù)本身的變化 速率很慢, 且不需要控制, 只要監(jiān)視記錄就行了, 無需考慮實時性。用戶甚至提出每5分鐘讀一次數(shù)據(jù)。考慮到PC的屏幕上等待5分鐘跳一次數(shù)據(jù)對操作者實在是 一種折磨,還是把輪詢的周期定在 1 分鐘(因為想偷懶,暫時還不 想進一步縮短周期)
26、。定時也沒有什么精度要求,直接用 SM0.4 的上升沿來觸發(fā)。在這種情況下, 不在乎下位機是否在線對通訊效率的影響, 而是在乎下位機狀態(tài)是否能在監(jiān) 視終端的PC上顯示出來,避免無效數(shù)據(jù)被壓入數(shù)據(jù)庫。yanxiao 為大家提供了一種邏輯方法,若用戶有此類要求,不妨一試。以下是引用 一粒塵在 2010-12-29 15:57:27 的發(fā)言:下面是我從 MICRO/WIN 幫助文件里改的一段自由口通信程序,實現(xiàn)接收到后(結(jié)束字為H0A),再發(fā)回去。1 、補充了發(fā)送完成中斷啟動接收服務程序2、 增加了模式開關(guān)切換通信口的模式,當開關(guān)切換由RUN切換到TERM時,為PPI從屬模 式;當開關(guān)由 TERM切
27、換到RUN時,P0 口為自由口模式。3、 上一條有局限性,在用軟件啟動和停止PLC時,P0 口初始化為自由口,不論 PLC模式開 關(guān)是在 TERM 還是 RUN 位置程序如下ORGANIZATION_BLOCK主程序:OB1TITLED序注釋BEGINNetwork 1 / 主程序LDSM0.1/ 首次掃描時,MOVB16#09, SMB30/- 選擇 9600 波特/- 選擇 8 個數(shù)據(jù)位/- 選擇無校驗M0VB16#B0, SMB87/初始化RCV信息控制字節(jié)/-RCV被啟用/- 檢測到信息字符結(jié)束/- 將空閑行條件檢測為/信息開始條件。/ 初始化自由端口:MOVB 16#0A, SMB8
28、9 符)。M0VW+5,SMW90M0VB100,SMB94ATCHINT0,23ATCHINT2,9ENIRCV VB100, 0 區(qū)的接收服務/將信息字符結(jié)束設(shè)為hex 0A(換行/ 將空閑行超時設(shè)為 5 毫秒。/ 將最大字符數(shù)設(shè)為 100。/ 將中斷附加在接收完成事件上。/ 將中斷 2 附加在傳送完成事件上。/ 啟用用戶中斷/為端口 0在VB100位置啟用帶緩沖Network 2/"RUN" 時, SM0.7=1LDSM0.7/PLC 上模式開關(guān)狀態(tài):/"TERM" 時, SM0.7=0ATCH INT_1 10 / 觸發(fā)傳送ATCH INT_1
29、10 / 觸發(fā)傳送EUOSM0.1SSM30.0,1/SM30.1 SM30.0=0 1為 P0 口為RSM30.1,1自由口通信ATCH INT_1 10 / 觸發(fā)傳送ATCH INT_1 10 / 觸發(fā)傳送RCVVB100, 0LDSM0.7EDRSM30.0,PPI從屬模式/ 切換到自由口后,先開接收服務/SM30.1SM30.0=0 0為 P0 口為ATCH INT_1 10 / 觸發(fā)傳送ATCH INT_1 10 / 觸發(fā)傳送END_ORGANIZATION_BLOCKINTERRUPT_BLOCKINT_0:INT0TITLE沖斷程序注釋BEGINNetwork 1 / 中斷 0/
30、 接收完成中斷例行程序LDB= SMB86 16#20 / 如果接收狀態(tài)顯示接收結(jié)束字符,MOVB 10 SMB34 / 則附加一個 10 毫秒計時器,ATCH INT_1 10 / 觸發(fā)傳送CRETI / 并返回。NOTRCV VB100 0 / 如果因任何其他原因接收完成,/ 則開始新的接收。END_INTERRUPT_BLOCKINTERRUPT_BLOCKINT_1:INT1TITLE沖斷程序注釋BEGINNetwork 1 / 中斷 1/10 毫秒計時器中斷LD SM0.0DTCH 10 / 分離計時器中斷0中的用戶XMT VB100, 0/ 將信息傳送端口Network 2 / 網(wǎng)
31、絡標題END_INTERRUPT_BLOCKINTERRUPT_BLOCKINT_2:INT2TITLE=中斷程序注釋BEGINNetwork 1 / 網(wǎng)絡標題LDSMO.OII準備接收RCVVB100, 0END_INTERRUPT_BLOCK以下是引用LaoHuai在2010-12-27 23:04:36 的發(fā)言:quote:以下是引用 happy Julia 在 2010-12-27 21:30:45 的發(fā)言: 在這里真是受益非淺呀??蛇€有許多不明白的,發(fā)送指令XMTf艮容易啦,可是接收指令RCV怎么那么多起 始和結(jié)束條件??吹奈叶紩灹耍魑淮髠b能給我簡單講講嗎,大概是什么意思? 我應該
32、選擇什么樣的起始和結(jié)束條件呀?條件多,給你選擇的就多。再看幾遍就能明白了。如果覺得RCV麻煩,那就用字符中斷方式接收數(shù)據(jù),只要連接一個中斷就可以了, 但要一個一個收。這個問題說起來和理解起來確實挺讓人頭疼的,但個人認為這是個非常好的問 題,如果能把這部分理解清楚了,對于S7-200自由口的應用應該有很大的幫助這里大概講一下自己的理解,其他的大俠們可以補充和更正:以接收結(jié)束消息方式為例,通信伙伴的數(shù)據(jù)是一幀一幀發(fā)送的,比如通信伙伴每隔100ms 發(fā)送一幀 01 02 03 04 05給S7-200,S7-200接收這些數(shù)據(jù),那么我們有幾種方法可以正確接收到這些數(shù)據(jù):50ms (小于發(fā)送間 后,啟
33、動空閑時間 這可以看做是“字1、指定空閑線時間(可以理解為兩幀數(shù)據(jù)之間的間隔)為隔時間100mS,則當發(fā)送完第一幀 01 02 03 04 05 檢測,超過50ms即認為一幀數(shù)據(jù)結(jié)束,準備接收下一幀數(shù)據(jù) 符間定時器”結(jié)束消息方式。2、指定接收結(jié)束字符為05,則當接收到01 02 03 04 05后,即收到結(jié)束字符05后,認為一幀數(shù)據(jù)結(jié)束,再接收到的 01 02 03 04 05認為是下一幀數(shù)據(jù),依此類推。這可以看做是“結(jié)束字符檢測”結(jié)束消息方式。3、指定接收數(shù)據(jù)長度為5,則收到01 02 03 04 05(5個字符)后,即認為一幀數(shù)據(jù)結(jié)束,再接收到的01 02 03 04 05認為是下一幀數(shù)據(jù)
34、,依此類推。這可以看做是“最大字符計數(shù)”結(jié)束消息方式。4、其他條件還包括“消息定時器”、“奇偶效驗錯誤”、“用戶終止”等結(jié)束 消息的方式,或者這些條件的組合作為結(jié)束消息的方式。那么在應用中選擇哪種結(jié)束消息的方式, 要具體情況具體分析。這話說起來很空 洞,但確實如此,因為自由口通信本身就決定了, 不同的通信對象間的數(shù)據(jù)幀格 式(或協(xié)議)是設(shè)備廠家自由定義的,這就要求事先充分理解通信協(xié)議, 并在此 基礎(chǔ)上進行選擇。另 外一方面,如果能靈活掌握這部分內(nèi)容,還可以解決一些實際問題。比如大 家都知道數(shù)據(jù)要接收到接收緩沖區(qū),而接收緩沖區(qū)的大小是有限制的(255個字節(jié)),那么怎么能夠接收到大于255個字節(jié)的
35、數(shù)據(jù)呢(緩沖區(qū)溢出后前面的數(shù) 據(jù)被覆蓋)?可以考慮設(shè)置“最大字符計數(shù)”為結(jié)束消息方式,將數(shù)據(jù)分為多個部分依次進行接收。以上理解沒有考慮S7-200的具體應用細節(jié),詳細的技術(shù)細節(jié)可以參考手冊說明, 僅供參考。quote:以下是引用一粒塵在2010-12-30 10:48:22的發(fā)言:quote:以下是引用半瓶醋在2010-12-29 21:39:10 的發(fā)言:以接收結(jié)束消息方式為例, 通信伙伴的數(shù)據(jù)是一幀一幀發(fā)送的,比如通信伙伴每隔100ms發(fā)送一幀01 02 03 04 05給S7-200,S7-200接收這些數(shù)據(jù),那么我們有幾種方法可以正確接收到這些數(shù)據(jù):1、指定空閑線時間(可以理解為兩幀數(shù)
36、據(jù)之間的間隔)為 50ms (小于發(fā)送間隔 時間100ms,則當發(fā)送完第一幀01 02 03 04 05后,啟動空閑時間檢 測,超過50ms即認為一幀數(shù)據(jù)結(jié)束,準備接收下一幀數(shù)據(jù)。這可以看做是“字符間定時器”結(jié)束消息方式。請教,這種空閑線時間結(jié)束,也能觸發(fā)接收完成中斷嗎?SMB87亥設(shè)置成多少呢?1. 每接收一個字符會產(chǎn)生一次中斷 ”;2. 每接收一個結(jié)束字符會產(chǎn)生一次中斷”。兩個指的不是同一個中斷,1是指中斷號8、25,2是指中斷號23、241、字符中斷”指的是SMB2每接收一個字符即產(chǎn)生一次中斷。2、結(jié)束字符中斷”指的是接收緩沖區(qū)出現(xiàn)指定的結(jié)束字符時產(chǎn)生一次中斷。串口通訊協(xié)議都是由數(shù)個或更
37、多的字符(字節(jié))組成一幀,每個字符都有各自特定的意義。對S7-200來說,接收到的每個字符都要從SMB2中過一遍。因此對于簡單的通訊協(xié)議,可以利用SMB2的字符接收中斷逐個讀取字節(jié),并排列成一個信息幀。但是這樣的做法有個缺陷,即SMB2不斷地發(fā)出中斷請求;如果信息幀較長,處理一次所占用的資源較多。一旦 出現(xiàn)中斷排隊,不僅影響其它的程序運行,還有可能影響通訊的準確率。而采用RCV指令的結(jié)束字符中斷,可以等待通訊的信息幀全部接收完畢(數(shù)據(jù)保存在接受緩沖區(qū)內(nèi))再一次性處理這些數(shù)據(jù)。quote:以下是引用LaoHuai在2010-12-24 11:42:19 的發(fā)言:我來發(fā)幾個SMB2的例子(特別適合
38、初學者):SMB2為自由口接收字符的暫放區(qū),從端口0或端口 1接收的每個字符都放在這里。SMB2只能存放一個字節(jié)字符,而對方發(fā)送的一幀可能是很多字符,所以在接收 到下個字符之前,應該在中斷里將接收到的字符移走。每接收一個字符會產(chǎn)生一次中斷,端口 0產(chǎn)生中斷事件8,端口 1產(chǎn)生中斷事件 25。例1:通訊方法(用串口調(diào)試軟件)控制 PLC的輸出:PLC寫入如下程序:比如向PLC發(fā)1時,Q0.0亮,發(fā)2,那么Q0.1亮,發(fā)255, 那么從 Q0.0 到 Q0.7 都亮,發(fā)送 0,則都不亮。LD SM0.1MOVB 9, SMB30ATCH INT_0, 8。ENIINT_0:LD SM0.0MOVB
39、 SMB2, QB0用串口調(diào)試軟件向PLC發(fā)1時,Q0.0亮,發(fā)2,那么Q0.1亮,發(fā)255,那么從Q0.0到Q0.7都亮,發(fā)送0,則都不亮,你可以試試。串口調(diào)試軟件設(shè)置: 9600波特率,數(shù)據(jù)位 8,停止位 1,無奇偶校驗。例2:如果有2個PLC,那么將兩個通訊口( PORT)3 3接,8 8接。如果只 有一個PLC,那么用串口調(diào)試軟件當主站也可以。主站程序:向從站發(fā)送 4 個字節(jié)的數(shù)據(jù)網(wǎng)絡 1:LDSM0.1MOVB9, SMB30MOVB4, VB0MOVB1, VB1MOVB2, VB2MOVB3, VB3MOVB4, VB4網(wǎng)絡 2:LDSM0.5EUXMTVB0, 0 / 每秒發(fā)送
40、一次從站程序 1:MAIN:OB1LDSM0.1MOVB9, SMB30ATCHINT0, 8ENIINT_0:INT0LDSM0.0MOVB SMB2, VB10ATCHINT1, 8INT_1:INT1LDSM0.0MOVBSMB2, VB11ATCHINT2, 8INT_2:INT2LDSM0.0MOVBSMB2, VB12ATCHINT3, 8INT_3:INT3LDSM0.0MOVBSMB2, VB13ATCHINT0, 8如 果 主 從 站 同 時 啟 動 , 或 者 從 站 啟 動 比 主 站 啟 動 早 , 那 么 VB11=1,VB12=2,VB13=3,VB14=4.如果主
41、站先發(fā)送,那么 VB11就不一定是1 了,可能是2或3或4。從站程序 2:MAIN:OB1LDSM0.1MOVB0, VB10MOVB9, SMB30MOVD&VB10, VD80ATCHINT_0:INT0, 8ENIINT_0:INT0Network1LDSM0.0INCBMB10MOVBSMB2, *VD80INCDVD80Network2LDB=MB10, 4MOVB0, MB10-D+4, VD80這個例子只是比上個例子少了 3 個中斷而已從站程序 3:MAIN:OB1LDSM0.1MOVB9, SMB30ATCHINT0, 8ENIINT_0:INT0Network 1LD
42、B<> SMB2, 1CRETINetwork 2LDSM0.0MOVBSMB2,VB10ATCHINT1, 8INT_1:INT1LDSM0.0MOVBSMB2,VB11ATCHINT2, 8INT_2:INT2MOVBSMB2, VB12ATCHINT3, 8LDSMO.OINT_3:INT3LDSM0.0MOVBSMB2, VB13ATCHINT0, 8如果1是起始字符,那么在中斷0里加個判斷,就不會發(fā)生接收數(shù)據(jù)錯位的問題以下是引用 LaoHuai在2010-12-23 11:45:24的發(fā)言:我覺得做自由口通訊時容易出現(xiàn)的幾個問題:10009 端口 0中同時執(zhí)行 XMT/R
43、CV000B 端口 1中同時執(zhí)行 XMT/RCV經(jīng)常有人問,程序里只發(fā)送(XMT),怎么會出現(xiàn)同時執(zhí)行 XMT/RCV呢?其實這個有4種可能:發(fā)送沒結(jié)束,又執(zhí)行發(fā)送接收沒結(jié)束,又執(zhí)行接收發(fā)送沒結(jié)束,又執(zhí)行接收接收沒結(jié)束,又執(zhí)行發(fā)送有3種解決方法:a用沿來執(zhí)行。b在中斷程序里來執(zhí)行。c XMT用 SM4.5/ SM4.6來執(zhí)行,RCV根據(jù)SMB86的條件來執(zhí)行。2發(fā)送結(jié)束可以(應該)立即執(zhí)行接收,但接收結(jié)束不能立即發(fā)送,應該延時發(fā)送。3用字符中斷方式接收數(shù)據(jù)時,中斷程序應該足夠短,否則會丟數(shù)據(jù),中斷程序執(zhí)行的時 間應該小于傳送一個字節(jié)數(shù)據(jù)所需的的時間。以下是引用鼠老爹在2010-12-31 12
44、:53:40的發(fā)言:手冊上給出的一些自由口通訊示例,S7-200多以從站的面目出現(xiàn)。因此在邏輯上,PLC等待網(wǎng)絡上的數(shù)據(jù)請求,再發(fā)送應答數(shù)據(jù);發(fā)送完畢后再次啟動接收。如果PLC作為主站請求第三方儀表的數(shù)據(jù),且使用的是自定義通訊協(xié)議在編程的時候會遇到一些看起來很奇怪的現(xiàn)象。以下是我在編通訊程序時遇到的問題和解決方法:1、 剛開始,按照一般的程序邏輯設(shè)置使用XMT和RCV指令。對儀表的輪詢都很正常, 沒有 異常情況發(fā)生。自以為程序走通了。2、 偶然切斷了個別從站(在現(xiàn)場這種情況是很普遍的),發(fā)現(xiàn)整個通訊全部歇菜了。重啟PLC頭幾臺儀表的通訊正常,但是到了被切斷的從站又OVER 了。3、 檢查PLC
45、的狀態(tài)信息,看不出異常。監(jiān)控RS485總線,發(fā)現(xiàn)走過了空站號后 PLC的XMT 發(fā)送不出信息。4、 于是用VB寫了一個從站的模擬程序與 PLC通訊。從監(jiān)控上看出,從站有應答, RCV正常 處理接受信息后,XMT的發(fā)送沒問題。而從站沒有應答, RCV始終在等待,XMT便無法發(fā) 送信息。5、因此PLC端必須考慮終止接收。反復使用了幾種方法,最終選用了定時關(guān)閉接受功能的 方法。6、在程序的初始化中配置通訊口和接收控制參數(shù),然后將SM87.7( SM187.7)復位。7、XMT執(zhí)行后將SM87.7( SM187.7)置位,啟動接收以及一個定時器。&無論有否應答,都由定時器去處理信息并關(guān)閉RCV
46、功能,等待下一個通訊。9、 RCV指令在主程序中由 SM0.0使能。這點很重要。因為 SM87.7(SM187.7)被修改后, 必須執(zhí)行一次RCV指令才能啟停接收功能,所以 RCV作為指令”始終被執(zhí)行不會影響整個 程序的邏輯關(guān)系,且程序看上去也簡潔,其它地方只要操作SM87.7(SM187.7)即可。另外,在和一些集成了 RS485端口的儀表做通訊時,發(fā)現(xiàn)波特率的匹配上會有些問題。 主要 原因還是對主頻進行分頻后時鐘脈沖引起的誤差。這點上西門子的 PLC適應性比較強,而合信的PLC適應性差一些。有 網(wǎng)友問到 “PLC能否同時與不同波特率的對象通訊”的問題,竊以為可以解決。SMB30(SMB13
47、0)隨時可以賦值,也就是說用戶可以即時修改自由口的配置。按此邏輯,只要在XMT和RCV使能之前定義 SMB30( SMB130)就可以了。這一點與 VB對COMM 口的配置是 一樣的;如果程序中沒有操作 COMM配置的指令,VB就按控件特性欄中的配置執(zhí)行; 如果 程序中有配置指令,就按程序的配置指令執(zhí)行。以下是引用 困惑迷茫求助在2011-01-04 09:51:24的發(fā)言:我曾經(jīng)使用過自由口通信,與36個儀表同時通訊,正常情況下通訊很好,可是只要其中一個儀表出現(xiàn)通訊中斷后,整個通訊就全部崩潰,無法執(zhí)行,請問那位高手能指點下,為什 么會出現(xiàn)該問題與多個設(shè)備進行通信時這時常見的問題,主要是因為在程序上缺少對錯誤時的 考慮,也就是只
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上海市戶外廣告發(fā)布合同范本
- 2025年度2月醫(yī)療影像云存儲系統(tǒng)集成分包合同
- 書蟲英語測試題及答案
- 新技術(shù)時代的專利申請?zhí)攸c分析試題及答案
- 善用文化產(chǎn)業(yè)管理證書考試試題及答案的輔助
- 處理母豬疾病的護理考查試題及答案
- 心理咨詢師的案例分析能力提升試題及答案
- 2024年護士資格證考試心理健康護理知識試題及答案
- 2024年文化產(chǎn)業(yè)管理的綜合分析試題及答案
- 教師資格筆試的復習技巧及試題與答案
- 職業(yè)暴露與安全防護ppt
- 抗腫瘤藥物處方審核要點
- 工業(yè)用烤箱安全操作規(guī)程范本
- 文件資料交接清單
- 人體解剖學與組織胚胎學課件
- 波導圓極化器結(jié)構(gòu)形式的選擇
- 交流電的三要素
- 2022-2023學年天津市部分區(qū)八年級(下)期中物理試卷(含解析)
- 2022-2023學年北京市101中學教育集團八年級(下)期中物理試卷含答案解析
- 《平移》說課課件
- 油氣輸送管道高后果區(qū)識別與評價釋義
評論
0/150
提交評論