影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

西門子S7-200 自由口通信實(shí)用文檔

上傳人:無*** 文檔編號:114238808 上傳時間:2022-06-28 格式:DOC 頁數(shù):26 大小:156.50KB
收藏 版權(quán)申訴 舉報 下載
西門子S7-200 自由口通信實(shí)用文檔_第1頁
第1頁 / 共26頁
西門子S7-200 自由口通信實(shí)用文檔_第2頁
第2頁 / 共26頁
西門子S7-200 自由口通信實(shí)用文檔_第3頁
第3頁 / 共26頁

本資源只提供3頁預(yù)覽,全部文檔請下載后查看!喜歡就下載吧,查找使用更方便

10 積分

下載資源

資源描述:

《西門子S7-200 自由口通信實(shí)用文檔》由會員分享,可在線閱讀,更多相關(guān)《西門子S7-200 自由口通信實(shí)用文檔(26頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學(xué)習(xí)與交流 西門子S7-200 自由口通信實(shí)用文檔 .....精品文檔...... 主題:應(yīng)用探討—S7-200 自由口通信—發(fā)帖整理 ? 強(qiáng)大而靈活的自由口通信能力,是S7-200系統(tǒng)的一個重要特點(diǎn)。S7-200? ? CPU的RS485通信口提供了建立在串行通信基礎(chǔ)上的“自由”通信能力,數(shù)據(jù)傳輸協(xié)議完全由用戶程序決定。通過自由口方式,S7-200可以與串行打印 機(jī)、條碼閱讀器等通信。而S7-200的編程軟件也提供了一些通信協(xié)議庫,如USS協(xié)議庫和MODBUS? ? RTU從站協(xié)議庫,它們實(shí)際上也使用了自由口通信功能。

2、 開設(shè)本話題的目的,在于澄清自由口通信的基本概念,強(qiáng)調(diào)使用中的要點(diǎn),討論應(yīng)用的常見問題。經(jīng)過此次集中交流,解決了如下一些問題: 1. 自由口通信基本概念 2. 自由口通信編程指令的使用和技巧 3. 自由口通信常見問題 4. 產(chǎn)品功能建議 更多信息請參考下面文檔。 “下載中心”參考文檔:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文檔編號“1109582”——S7-200《可編程控制器系統(tǒng)手冊》 文檔編號“A0136”——《西門子? S7-200?LOGO!?SITOP? ? 參考》 以下為本次探討的

3、發(fā)帖整理,查看原始交流內(nèi)容請點(diǎn)擊此處。 1.自由口通信基本概念(1樓——5樓) 2.自由口通信編程指令的使用和技巧(6樓——15樓) 3.自由口通信容易犯的錯誤(16樓——24樓) 4.產(chǎn)品功能建議(25樓——27樓) quote: 以下是引用BABU在2011-01-20? 15:17:08的發(fā)言: ? 我回來了,項(xiàng)目終于做完了,可以回家過年了,:)。 自由口通信真是折騰的我好慘啊,簡單回顧一下,希望對像我這樣的菜鳥有些借鑒作用。 先感謝一下西門子論壇和熱線,沒少騷擾他們。 在完全沒有準(zhǔn)備的情況下甲方又加進(jìn)一個儀表,做什么自有口通信,暈阿!沒

4、辦法,迎著上吧! 網(wǎng)上搜資料,看手冊,越看越糊涂!時間緊迫,還是直接上手做吧。 首 先是把PLC和儀表連接起來,可儀表的口是rs232的,熱線工程師告訴我得做rs232/485的轉(zhuǎn)換,打車到市場上買個轉(zhuǎn)換器(打車錢比設(shè)備錢還多, 可見現(xiàn)場多么偏僻阿),聽賣轉(zhuǎn)換器的老板給我分析了一下每種的區(qū)別——不光是價格的區(qū)別,說實(shí)在的,當(dāng)時非常慚愧,老板懂的比我多多了。 買回來后自己動手焊線,一個人費(fèi)了九牛二虎之力,焊的那個慘樣就不用說了,還好有殼可以包裝一下。 焊好了,實(shí)驗(yàn)一下效果吧,不知到怎么做了,打電話。 熱線工程師告訴我找個串口調(diào)試工具,連接到pc機(jī)上測試。

5、 在串口調(diào)試工具上發(fā)一串?dāng)?shù),在200上收,ok!高興壞了,沒白忙活。 硬件上應(yīng)該沒問題了,接下來開始做程序了。 先得理解儀表的協(xié)議,弄清了儀表先要收到請求數(shù)據(jù)的命令,然后根據(jù)命令做出響應(yīng)。 同樣,先用串口調(diào)試工具和儀表連接進(jìn)行通信測試,還算聰明吧,:)! 然后開始在200里編寫收發(fā)程序,開始時整個思路都是亂的,無從下手。就把200手冊上的例子程序整個抄上,在cpu224的兩個接口間進(jìn)行通信實(shí)驗(yàn)。 經(jīng)過不停的實(shí)驗(yàn),終于一點(diǎn)一點(diǎn)地理解了控制字節(jié)、控制參數(shù)的含義,怎么設(shè)置接收結(jié)束條件,怎么使用中斷、怎么控制接收和發(fā)送等等。 ok,開始真正地與儀表通信了。

6、發(fā)請求命令,收數(shù)據(jù),可收到的數(shù)據(jù)是ASCII碼,得進(jìn)行數(shù)據(jù)轉(zhuǎn)換。 根據(jù)大俠們的提醒,經(jīng)過實(shí)驗(yàn)知道了怎么將ASCII碼轉(zhuǎn)換為實(shí)際的工程數(shù)據(jù)。 到此基本結(jié)束了,雖然說著好像也沒什么,但只有我最了解其中的痛苦,不停地實(shí)驗(yàn),不停地修改阿! 后面在實(shí)際運(yùn)行中又遇到了有時通信中端的問題,將雙絞線的屏蔽接到地上后暫時還沒出現(xiàn)問題。 總結(jié)一下,個人認(rèn)為作自由口通信需要做好以下幾方面工作: 1、最主要的是多動手,光看資料是沒有用的,只有自己親自去動手實(shí)驗(yàn)一下才能發(fā)現(xiàn)問題和幫助理解。 2、做實(shí)驗(yàn)是找個串口調(diào)試工具(我用的是sscom32)是必須的,可以幫助你測試你的通信

7、線,調(diào)試你的程序,盡量不要直接與設(shè)備進(jìn)行通信,通信不上不好分析原因。 3、我認(rèn)為200手冊上的例子程序非常好,基本的處理方法和編程方法都涉及到了,可以根據(jù)你的需要做修改,當(dāng)然首先要充分地理解他。 4、遇到不太容易理解的,或有問題的,多和別人交流一下,從中可以得到不同的思路。 提前給西門子和壇子里的專家們拜年了! 1.自由口通信基本概念(1樓——5樓) quote: 以下是引用LaoHuai在2010-12-24? 08:29:48的發(fā)言: ? quote: 以下是引用happy? Julia在2010-12-23? 21:58:54的發(fā)言: ? 以前很

8、少用自由口通信,但項(xiàng)目里要用呀,正在學(xué)習(xí),就接到邀請了。 請教各位大俠:S7-200自由口能支持的最高速率是多少呀,我希望通信能快點(diǎn)。 還有它的數(shù)據(jù)位、停止位是幾位呀,我好確定能和什么樣的設(shè)備通信呀。 最高波特率是115200BPS,但需要1.2或者以上版本的CPU。 數(shù)據(jù)位可以是7位或8位 停止位是固定的1位。 quote: 以下是引用300小小生在2010-12-23? 13:52:59的發(fā)言: ? 300也可以實(shí)現(xiàn)與上位機(jī)自由通訊的,S7-200? 自由口通訊是基于RS485? 通訊基礎(chǔ)的半雙工通訊,因此,發(fā)送和接收指令不能同時執(zhí)行。這點(diǎn)有

9、點(diǎn)不好,在300里可以422通訊,但最好是PLC發(fā)送不要連續(xù)發(fā)送,而接收倒沒事。我 有次在調(diào)試的時候發(fā)現(xiàn)上位機(jī)發(fā)了任務(wù)后,PLC設(shè)備要過好長一段時間才去執(zhí)行,后來請教了老師傅,老師傅說把發(fā)送端加個間隔時間就好了 以下是引用鼠老爹在2010-12-31? 15:59:24的發(fā)言: ? 不管是什么通訊,傳送的都是二進(jìn)制代碼。ASCII碼與二進(jìn)制協(xié)議的區(qū)別在于代碼所表示內(nèi)容的方式不同。 如 果使用ASCII代碼,則數(shù)據(jù)不能直接用于數(shù)學(xué)運(yùn)算,而必須轉(zhuǎn)換成普通的二進(jìn)制代碼。這樣會加重程序負(fù)擔(dān)。但是ASCII代碼用于通訊有一個好處,起始字 符與結(jié)束字符比較容易確定和判別,它們一般不會出現(xiàn)在數(shù)據(jù)區(qū)

10、。而用二進(jìn)制代碼通訊,數(shù)據(jù)無需轉(zhuǎn)換即可直接使用(高低位字節(jié)可能需要交換),PLC的負(fù)擔(dān)較 小。但是起始字符和結(jié)束字符經(jīng)常會與數(shù)據(jù)重復(fù)。因此,用二進(jìn)制代碼通訊,通常是靠字符數(shù)和定時器來確定接收終點(diǎn),主從站之間的步調(diào)協(xié)調(diào)非常重要。 以下是引用Am_Programer在2010-12-27? 15:48:59的發(fā)言: ? 西門子S7-200系列PLC支持自由口通信協(xié)議。所謂自由口協(xié)議是指通過用戶程序控制CPU主機(jī)的通信端口的操作模式來進(jìn)行通信。用這種自由口模式可以用自定義的通信協(xié)議連接多種智能設(shè)備。自由口模式支持ASCII和二進(jìn)制協(xié)議。 在自由口模式下,主機(jī)處于RUN方式時,用戶可

11、以用相關(guān)的通信指令所編寫的程序控制通信口的操作。當(dāng)主機(jī)處于STOP方式時,自由口通信被終止,通信口自動切換到正常的PPI協(xié)議操作。 自由口通信指令包括:XMT,自由口發(fā)送指令;RCV,自由口接受指令。用特殊標(biāo)志寄存器SMB30(端口0)和SMB130(端口1)的各個位設(shè)置自由口模式,并配置自由口通信參數(shù),如波特率、奇偶效驗(yàn)和數(shù)據(jù)位。 發(fā)送指令(XMT)和發(fā)送中斷:發(fā)送指令允許S7-200的通信口上發(fā)送最多255個字節(jié),發(fā)送中斷通知程序發(fā)送完成。 接受字符中斷:接受字符中斷通知程序通信口上接受到了一個字符,應(yīng)用程序就可以根據(jù)所用的協(xié)議對該字符進(jìn)行相關(guān)的操作。 接受指令(R

12、CV):接受指令從通信口接收到整條信息,當(dāng)接收完成后產(chǎn)生中斷通知應(yīng)用程序。需要在SM存儲器中定義條件來控制接收指令開始和停止接受信息。接受指令可以根據(jù)特定的字符或時間間隔來啟動和停止接受信息。接受指令可以實(shí)現(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)建用戶程序來模擬

13、另外一種網(wǎng)絡(luò)上的從站器件。例如S7-200的用戶程序模仿一個Modbus從站。STEP7-Micro/WIN提供Modbus協(xié)議庫。 4.? 采用自定義通信協(xié)議與PC通信。PC上的應(yīng)用軟件可以采用此方法方便的訪問S7-200的數(shù)據(jù)。這是第三方軟件訪問S7-200PLC比較簡便,廉價的方法。 對于自由口通訊,西門子的很多資料都做了比較詳細(xì)的介紹,其中還包含了大量的例子程序。由于通訊的不可見性,很多人還是不能很好的掌握,我建議大家: 1、理解什么是通訊、什么是串口、什么是232、什么是485?沒有過硬的硬件知識是不可能做出通訊的,你連線都不知道怎么接,怎么調(diào)試你的程序?

14、 2、仔細(xì)閱讀西門子關(guān)于通訊的資料,不需要多只需要精,因?yàn)楦鞣N版本的資料基本是一樣的,關(guān)鍵就是SMB30、SMB86、87、88、89、SMW90、92、SMB94自己控制通訊過程需要SMB2,把這些弄明白了,才有可能做出通訊程序 3、使用PC的通訊軟件協(xié)助調(diào)試,有了PC的通訊軟件可以看見通訊過程中的數(shù)據(jù),能夠更方便的調(diào)試程序 4、理解各種通訊協(xié)議。大家要注意串口通訊和協(xié)議是2碼事,不論是PPI、MODBUS還是USS它們都有自己的協(xié)議規(guī)范,根據(jù)規(guī)范來寫你就可以實(shí)現(xiàn)這種通訊。只不過PPI是不公開通訊協(xié)議的,沒有辦法寫而已! 最后建議大家自己做通訊,起碼會做!至于用

15、不用自己做就要根據(jù)你的實(shí)際情況了,西門子提供的庫也是很方便的! 以下是引用yanxiao在2010-12-24? 13:50:10的發(fā)言: ? 我看過不少問S7200通訊問題的貼子,覺得很多問題并不是S7200的,而是串行通訊的共性問題,也就是對串行通訊本身概念的認(rèn)識問題。下面我來談?wù)勗谖业挠洃浿嘘P(guān)于串行通訊的一些認(rèn)識。 1、串行通訊只有一個傳輸通道,每個時刻只能表達(dá)一種狀態(tài)。不管什么介質(zhì),不管是什么信號,我們用1表示一種狀態(tài),用0表示另一種狀態(tài)。 2、只用1和0兩種狀態(tài),是不能表達(dá)更多信息的。好在有一個物理量,對每個系統(tǒng)來講是統(tǒng)一的,那就是時間。我們現(xiàn)在很容易做到不同系統(tǒng)之間

16、的定時誤差控制在PPM數(shù)量級。1和0在時間上進(jìn)行有序的組合,就可表達(dá)近乎無限的信息。 3、任何一個信號,如果不賦給它一些特點(diǎn)的意義,實(shí)際上沒什么用。兩個系統(tǒng)要通過信號交換信息,必須對信號有一個共同的約定,這就是我們通常所說的協(xié)議。 4、最基本的協(xié)議是物理層面的(那個OSI的七層協(xié)議模型,第一層就是物理層協(xié)議)。RS232、RS485、RS422,這些是物理層面的一些協(xié)議。 5、我們現(xiàn)在要談的是異步串行通訊。異步,發(fā)達(dá)方和接收方之間,沒有額外的通道來傳送信息何時傳送與接收。每個信息單元的起止時間,發(fā)送方編在信息中,由接收方自已解碼并同步。 6、 好。現(xiàn)在來講一下傳送一個字

17、節(jié)的過程。在沒有傳送信息時,傳輸線處于空閑狀態(tài)。規(guī)定:空閑狀態(tài)為1。發(fā)送方(TX)準(zhǔn)備發(fā)送,驅(qū)動傳輸線讓它由1變?yōu)?, 并持一位的時間長度,我們把這一位叫做起始位。接收方(RX),檢測到傳輸線由1變0,意味著可能有信息要傳了,RX就持續(xù)檢測,以驗(yàn)證這個0是不是持續(xù) 了規(guī)定的一位時間長度,若是個合法的起始位,就按約定的定時方式,把后續(xù)的傳輸線狀態(tài),接收為1個字節(jié)。TX在發(fā)完起始位后,就發(fā)字節(jié)中的第一個位 (bit),并依次把字節(jié)中的所有位發(fā)完,每bit均持續(xù)相同的一位時長。然后再發(fā)校驗(yàn)位(如果約定發(fā)/收方都采用的話)、停止位。 7、 停止位,這個要說一下。我們知道起始位是0,而這個停止位,

18、規(guī)定是1,和傳輸線的空閑狀態(tài)1是相同的。停止位規(guī)定的時長比較亂,有1位停止位(也就持續(xù)時 間占1個位長)、1.5位、和2位停止位,其它時長的停止位好象沒見過。停止位的作用,其一是作為一字節(jié)單元的成員,給接收方定時用的,也就是下一個字 節(jié),在停止位之后才開始。另一個作用,可供檢查字節(jié)傳送的完整性。因?yàn)橥V刮皇且?guī)定為1狀態(tài)的,若在停止位的時間里測到了非1狀態(tài),表示這個字節(jié)傳送有問 題,有可能被接收方丟棄,傳送失敗。 8、若收發(fā)雙方的停止位不相同,怎么辦?這個在論壇上經(jīng)常有人問。好,我們來分析一下。若TX是2個 停止位,RX要求是1個停止位,很好,TX多發(fā)的一個停止位,會被RX看作是空閑狀態(tài)(

19、也可認(rèn)為是字符間隔),沒有任何問題。若反過來,TX是1個停止 位,RX要求是2個停止位,有問題嗎?一般問題是很大的,但也有可能可以正常通訊。這要看TX是怎么發(fā)字節(jié)的。有些系統(tǒng),硬件上,發(fā)送電路比較簡單,沒有 緩沖機(jī)構(gòu),一個字節(jié)必須完整發(fā)送后,才準(zhǔn)備下一個字節(jié)的數(shù)據(jù),而這個準(zhǔn)備需要花一些時間的,這就給傳送的時序上,停止位之后,有了空閑時間,相當(dāng)于停止位 得到了延長。所以我曾經(jīng)發(fā)過一個貼子說,S7200的發(fā)送改為單字節(jié)發(fā)送,每個字節(jié)之間有意插入一些延時,人為造成空閑時間,以充當(dāng)停止位,但這個方法說 歸說,我并沒有試過??上У氖牵F(xiàn)在的系統(tǒng),硬件都做得很完美了,包括S7200,TX是有緩沖的,在一個

20、字節(jié)還未發(fā)完前就可以接受下一個要發(fā)送的字節(jié), 硬件上保證一個字節(jié)發(fā)完后可以立即啟動下一個字節(jié)發(fā)送,前后兩字節(jié)間除了停止位,沒有額外的間隙,這種情況下,接收方就要命了,RX認(rèn)為還在收停止位時, 下一個字節(jié)的起始位就來了,沒辦法完整接收,通訊就失敗了。 9、波特率。兩邊設(shè)為一致就可以了。波特率不一致,鐵定不能通訊。但允許有少 量的誤差。停止位實(shí)際上還用來調(diào)節(jié)這個誤差的。比如1個停止位,RX并不死板要求停止位是完整的1個位時長,實(shí)際只要停止位超過0.5個位長就算是合格 了。波特率,就是每秒最快能傳送的位數(shù),包括了起始位、停止位這些輔助位。實(shí)際每秒能傳送的最快字節(jié)數(shù),要看這些輔助位的多少。比如一

21、個11位結(jié)構(gòu)的字節(jié) 單元:1起始位+8字節(jié)位+1校驗(yàn)位+1停止位,字節(jié)最快傳送速率為band/11。好象還有一個概念,叫比特率,也就是有效的位傳送速率,比特率=8* (band/11),也就是比特率比波特率要小的。 10、RS232的TX和RX是兩根獨(dú)立的線,收/發(fā)可以同時進(jìn)行, 所以叫作全雙工異步串行通訊。按我們?nèi)粘扇私徽劦慕?jīng)驗(yàn),總是A說B聽,當(dāng)B要說時,A就停下來聽B說。如果A、B同時說,這是吵架,要達(dá)到相互交流就難 了。同樣,通訊若同時收發(fā),一般人會白白死掉很多腦細(xì)胞而寫出的程序通訊效果還是很差。所以,即使RS232能雙向同時,? 一般使用時也是收、發(fā)不同時的。 1

22、1、RS485。RS232不錯了,但局限性大大的。RS485收發(fā)同線,允許多少RS485并聯(lián)使 用,電氣采用差分傳送信號,可以抗干擾。S7200就屬于RS485。RS485設(shè)備同一時間只能發(fā)或再改,收發(fā)是分時的,所以叫做準(zhǔn)雙向。盡管 S7200中可以同時緩沖8個NETR和NETW,實(shí)際在RS485層面,還是一個一個分時完成的(由系統(tǒng)程序根據(jù)PPI協(xié)議協(xié)調(diào))。RCV和XMT完全 由用戶程序控制,你就不能同時讓兩個都執(zhí)行,否則就是哄搶資源而被S7200當(dāng)成錯誤處理。 12、RS422,介于RS232和 RS485。RS422和RS232一樣收、發(fā)線獨(dú)立,但電氣上采用和RS485一樣的差分信號

23、。所以RS422能多機(jī)通訊,比RS232傳得遠(yuǎn),但比 RS485浪費(fèi)硬件資源。RS422只要軟件上采用準(zhǔn)雙向的規(guī)則,通過發(fā)收線合并,可以簡化為RS485,和RS485設(shè)備通訊。但RS485卻不能復(fù)雜 化成RS422使用。 以下是引用yanxiao在2010-12-31? 16:00:57的發(fā)言: ? 再談一個于關(guān)通訊效率: 這里的通訊效率問題,針對主站。從站,一般根據(jù)主站的請求,及時發(fā)回應(yīng)答就行了,不存在效率問題。 當(dāng)主站要同多個從站通訊時,就有一個效率問題。以modbus-rtu為例。 1、定時輪詢。這恐怕是最原始的方法,也是效率最低下的。比如1秒鐘輪詢一個站,如果3個

24、從站,要3秒才輪到1次。 2、 高效的輪詢應(yīng)該根據(jù)協(xié)議的定時來調(diào)整,盡量擠掉不必要的延時。modbus-rtu,3.5個字節(jié)傳送時間作為幀間隔,但是從站的回應(yīng)時間沒有標(biāo)準(zhǔn)規(guī)定, 要先問清楚。一般的儀表,回應(yīng)時間都是很短的,幾十ms內(nèi)都會有回應(yīng),你可以把回應(yīng)超時設(shè)在100ms。當(dāng)然儀表能提供這個超時參數(shù)是最好了。 當(dāng)主站發(fā)完請求幀后,立即進(jìn)入接收狀態(tài),隨時準(zhǔn)備接收從站的回應(yīng)。但若到達(dá)超時時間還未收到,則放棄繼續(xù)接收,認(rèn)為從站無響應(yīng),進(jìn)入下一從站的通訊。 3、 如果3個從站只有1個在線上,按理說是通訊速度是最快的,但如果不采取一些策略,則通訊速率會變成最慢的。輪詢一個離線的從站,

25、通訊要等到超時才結(jié)束,這 肯定比在線的從站回應(yīng)要慢得多,因此大部分時間浪費(fèi)在離線的從站上了。策略是為每一個從站配置1個在線狀態(tài)標(biāo)記位,當(dāng)從站有成功回應(yīng)的,標(biāo)記位=1,表示 在線,若該從站連續(xù)N次(2次)沒有回應(yīng)或出錯,置標(biāo)記位=0,表示離線。 對于在線的從站,按正常順序輪詢,而離線的從站,則每隔一定時間或每隔一定的輪詢周期,發(fā)一個請求給它,若有回應(yīng)且正確,則置標(biāo)記位為1,認(rèn)為該從站已回到在線狀態(tài),若沒有回應(yīng)或出錯,則繼續(xù)保持離線狀態(tài)。這樣,可以把花在離線從站的通訊時間,控制在一個合理的范圍。 以下是引用鼠老爹在2011-01-01? 23:46:42的發(fā)言: ? yanxiao的方案

26、很在理,我做PC與PLC通訊所采用的策略基本如此。當(dāng)時并不在乎效率,而是為了監(jiān)視PLC的狀態(tài)。因?yàn)橄挛粰C(jī)的開啟是隨機(jī)的。 在PLC與第三方儀表的通訊中,我還沒有這樣做過。在我的理念中,只有實(shí)時性要求不是很高的場合,與第三方儀表之間才會采用通訊的方式交換數(shù)據(jù)。因?yàn)榈谌絻x表通常只能作為從站,等待PLC的數(shù)據(jù)請求,實(shí)時性無法得到保障。因此,我認(rèn)為PLC在通訊上的效率已經(jīng)無所謂了。 就 像現(xiàn)在正在做的一個項(xiàng)目,PC連著數(shù)臺PLC,每臺PLC要輪詢16臺儀表的32個數(shù)據(jù),波特率只能是2400(其它波特率不太容易匹配),每臺PLC還 要同時處理16個模擬量,下位機(jī)分布面積很大。考慮通訊的可靠

27、性,PLC每2秒鐘問一個儀表。這樣走一圈就需要半分鐘。選擇通訊是因?yàn)檫@些數(shù)據(jù)本身的變化 速率很慢,且不需要控制,只要監(jiān)視記錄就行了,無需考慮實(shí)時性。用戶甚至提出每5分鐘讀一次數(shù)據(jù)??紤]到PC的屏幕上等待5分鐘跳一次數(shù)據(jù)對操作者實(shí)在是 一種折磨,還是把輪詢的周期定在1分鐘(因?yàn)橄胪祽校瑫簳r還不想進(jìn)一步縮短周期)。定時也沒有什么精度要求,直接用SM0.4的上升沿來觸發(fā)。 在這種情況下,不在乎下位機(jī)是否在線對通訊效率的影響,而是在乎下位機(jī)狀態(tài)是否能在監(jiān)視終端的PC上顯示出來,避免無效數(shù)據(jù)被壓入數(shù)據(jù)庫。 yanxiao為大家提供了一種邏輯方法,若用戶有此類要求,不妨一試。 以下是引用一粒

28、塵在2010-12-29? 15:57:27的發(fā)言: ? 下面是我從MICRO/WIN幫助文件里改的一段自由口通信程序,實(shí)現(xiàn)接收到后(結(jié)束字為H0A),再發(fā)回去。 1、補(bǔ)充了發(fā)送完成中斷啟動接收服務(wù)程序 2、增加了模式開關(guān)切換通信口的模式,當(dāng)開關(guān)切換由RUN切換到TERM時,為PPI從屬模式;當(dāng)開關(guān)由TERM切換到RUN時,P0口為自由口模式。 3、上一條有局限性,在用軟件啟動和停止PLC時,P0口初始化為自由口,不論P(yáng)LC模式開關(guān)是在TERM還是RUN位置 程序如下 ORGANIZATION_BLOCK? 主程序:OB1 TITLE=程序注釋

29、 BEGIN Network? 1? //? ? 主程序 LD? ? ? ? ? SM0.1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 首次掃描時, MOVB? ? ? 16#09,? SMB30? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 初始化自由端口: ? //? -? 選擇9600波特 ? //? -? 選擇8個數(shù)據(jù)位 ? //? -? 選擇無校驗(yàn) MOVB? ? ? 16#B0,? SMB87? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //

30、? 初始化RCV信息控制字節(jié): ? //? -? RCV被啟用 ? //? -? 檢測到信息字符結(jié)束 ? //? -? 將空閑行條件檢測為 ? //? 信息開始條件。 MOVB? ? ? 16#0A,? SMB89? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 將信息字符結(jié)束設(shè)為hex? OA(換行符)。 MOVW? ? ? +5,? SMW90? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 將空閑行超時設(shè)為5毫秒。 MOVB? ? ? 100,? SMB94? ? ? ? ? ? ?

31、 ? ? ? ? ? ? ? ? ? ? ? //? 將最大字符數(shù)設(shè)為100。 ATCH? ? ? INT0,? 23? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 將中斷附加在接收完成事件上。 ATCH? ? ? INT2,? 9? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 將中斷2附加在傳送完成事件上。 ENI? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 啟用用戶中斷 RCV? ? ? ? V

32、B100,? 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 為端口0在VB100位置啟用帶緩沖區(qū)的接收服務(wù) Network? 2? LD? ? ? ? ? SM0.7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //PLC上模式開關(guān)狀態(tài): ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //"RUN"時,SM0.7=1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

33、 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //"TERM"時,SM0.7=0 EU O? ? ? ? ? ? SM0.1 S? ? ? ? ? ? SM30.0,? 1 R? ? ? ? ? ? SM30.1,? 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //[SM30.1? ? SM30.0]=[0? 1]為P0口為自由口通信 RCV? ? ? ? VB100,? 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //切換到自由口后,先開接收服務(wù) LD?

34、 ? ? ? ? SM0.7 ED R? ? ? ? ? ? SM30.0,? 2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //[SM30.1? ? SM30.0]=[0? 0]為P0口為PPI從屬模式 END_ORGANIZATION_BLOCK INTERRUPT_BLOCK? INT_0:INT0 TITLE=中斷程序注釋 BEGIN Network? 1? //? ? 中斷0 //? ? 接收完成中斷例行程序 LDB=? SMB86? 16#20? //? 如果接收狀態(tài)顯示接

35、收結(jié)束字符, MOVB? 10? SMB34? //? 則附加一個10毫秒計時器, ATCH? INT_1? 10? //? 觸發(fā)傳送 CRETI? //? 并返回。 NOT RCV? VB100? 0? //? 如果因任何其他原因接收完成, ? //? 則開始新的接收。 END_INTERRUPT_BLOCK INTERRUPT_BLOCK? INT_1:INT1 TITLE=中斷程序注釋 BEGIN Network? 1? //? ? 中斷1 //? ? 10毫秒計時器中斷 LD? SM0.0

36、 DTCH? 10? //? 分離計時器中斷 XMT? ? ? ? VB100,? 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 將信息傳送端口0中的用戶 Network? 2? //? 網(wǎng)絡(luò)標(biāo)題 END_INTERRUPT_BLOCK INTERRUPT_BLOCK? INT_2:INT2 TITLE=中斷程序注釋 BEGIN Network? 1? //? 網(wǎng)絡(luò)標(biāo)題 LD? ? ? ? ? SM0.0 RCV? ? ? ? VB100,? 0? ? ? ? ? ? ?

37、 ? ? ? ? ? ? ? ? ? ? ? ? ? //準(zhǔn)備接收 END_INTERRUPT_BLOCK 以下是引用LaoHuai在2010-12-27? 23:04:36的發(fā)言: ? quote: 以下是引用happy? Julia在2010-12-27? 21:30:45的發(fā)言: ? 在這里真是受益非淺呀。 可還有許多不明白的,發(fā)送指令XMT很容易啦,可是接收指令RCV怎么那么多起始和結(jié)束條件??吹奈叶紩灹?,各位大俠能給我簡單講講嗎,大概是什么意思?我應(yīng)該選擇什么樣的起始和結(jié)束條件呀? 條件多,給你選擇的就多。再看幾遍就能明白了。 如果覺得

38、RCV麻煩,那就用字符中斷方式接收數(shù)據(jù),只要連接一個中斷就可以了,但要一個一個收。 這個問題說起來和理解起來確實(shí)挺讓人頭疼的,但個人認(rèn)為這是個非常好的問題,如果能把這部分理解清楚了,對于S7-200自由口的應(yīng)用應(yīng)該有很大的幫助。 這里大概講一下自己的理解,其他的大俠們可以補(bǔ)充和更正: 以接收結(jié)束消息方式為例,通信伙伴的數(shù)據(jù)是一幀一幀發(fā)送的,比如通信伙伴每隔? 100ms? 發(fā)送一幀? 01? 02? 03? 04? 05? 給S7-200,S7-200接收這些數(shù)據(jù),那么我們有幾種方法可以正確接收到這些數(shù)據(jù): 1、 指定空閑線時間(可以理解為兩幀數(shù)據(jù)之間的間隔)為50

39、ms(小于發(fā)送間隔時間100ms),則當(dāng)發(fā)送完第一幀? 01? 02? 03? 04? 05? 后,啟動空閑時間檢測,超過50ms即認(rèn)為一幀數(shù)據(jù)結(jié)束,準(zhǔn)備接收下一幀數(shù)據(jù)。這可以看做是“字符間定時器”結(jié)束消息方式。 2、指定接收結(jié)束字符為05,則當(dāng)接收到? 01? 02? 03? 04? 05? 后,即收到結(jié)束字符05后,認(rèn)為一幀數(shù)據(jù)結(jié)束,再接收到的? 01? 02? 03? 04? 05? 認(rèn)為是下一幀數(shù)據(jù),依此類推。這可以看做是“結(jié)束字符檢測”結(jié)束消息方式。 3、指定接收數(shù)據(jù)長度為5,則收到? 01? 02? 03? 04? 05? (5個字符)后,即認(rèn)為一幀數(shù)據(jù)結(jié)束,再接收到的

40、? 01? 02? 03? 04? 05? 認(rèn)為是下一幀數(shù)據(jù),依此類推。這可以看做是“最大字符計數(shù)”結(jié)束消息方式。 4、其他條件還包括“消息定時器”、“奇偶效驗(yàn)錯誤”、“用戶終止”等結(jié)束消息的方式,或者這些條件的組合作為結(jié)束消息的方式。 那么在應(yīng)用中選擇哪種結(jié)束消息的方式,要具體情況具體分析。這話說起來很空洞,但確實(shí)如此,因?yàn)樽杂煽谕ㄐ疟旧砭蜎Q定了,不同的通信對象間的數(shù)據(jù)幀格式(或協(xié)議)是設(shè)備廠家自由定義的,這就要求事先充分理解通信協(xié)議,并在此基礎(chǔ)上進(jìn)行選擇。 另 外一方面,如果能靈活掌握這部分內(nèi)容,還可以解決一些實(shí)際問題。比如大家都知道數(shù)據(jù)要接收到接收緩沖區(qū),而接收緩沖區(qū)的

41、大小是有限制的(255個字節(jié)), 那么怎么能夠接收到大于255個字節(jié)的數(shù)據(jù)呢(緩沖區(qū)溢出后前面的數(shù)據(jù)被覆蓋)?可以考慮設(shè)置“最大字符計數(shù)”為結(jié)束消息方式,將數(shù)據(jù)分為多個部分依次進(jìn) 行接收。 以上理解沒有考慮s7-200的具體應(yīng)用細(xì)節(jié),詳細(xì)的技術(shù)細(xì)節(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

42、? 給S7-200,S7-200接收這些數(shù)據(jù),那么我們有幾種方法可以正確接收到這些數(shù)據(jù): 1、指定空閑線時間(可以理解為兩幀數(shù)據(jù)之間的間隔)為50ms(小于發(fā)送間隔時間100ms),則當(dāng)發(fā)送完第一幀? 01? 02? 03? 04? 05? 后,啟動空閑時間檢測,超過50ms即認(rèn)為一幀數(shù)據(jù)結(jié)束,準(zhǔn)備接收下一幀數(shù)據(jù)。這可以看做是“字符間定時器”結(jié)束消息方式。 請教,這種空閑線時間結(jié)束,也能觸發(fā)接收完成中斷嗎?SMB87該設(shè)置成多少呢? 1.“每接收一個字符會產(chǎn)生一次中斷”; 2.“每接收一個結(jié)束字符會產(chǎn)生一次中斷”。 兩個指的不是同一個中斷? ,1是指中斷號8、25

43、,2是指中斷號23、24 1、“字符中斷”指的是SMB2每接收一個字符即產(chǎn)生一次中斷。 2、“結(jié)束字符中斷”指的是接收緩沖區(qū)出現(xiàn)指定的結(jié)束字符時產(chǎn)生一次中斷。 串口通訊協(xié)議都是由數(shù)個或更多的字符(字節(jié))組成一幀,每個字符都有各自特定的意義。 對 S7-200來說,接收到的每個字符都要從SMB2中過一遍。因此對于簡單的通訊協(xié)議,可以利用SMB2的字符接收中斷逐個讀取字節(jié),并排列成一個信息 幀。但是這樣的做法有個缺陷,即SMB2不斷地發(fā)出中斷請求;如果信息幀較長,處理一次所占用的資源較多。一旦出現(xiàn)中斷排隊(duì),不僅影響其它的程序運(yùn)行,還 有可能影響通訊的準(zhǔn)確率。而采用RCV指令的結(jié)

44、束字符中斷,可以等待通訊的信息幀全部接收完畢(數(shù)據(jù)保存在接受緩沖區(qū)內(nèi))再一次性處理這些數(shù)據(jù)。 quote: 以下是引用LaoHuai在2010-12-24? 11:42:19的發(fā)言: ? 我來發(fā)幾個SMB2的例子(特別適合初學(xué)者): SMB2為自由口接收字符的暫放區(qū),從端口0或端口1接收的每個字符都放在這里。 SMB2只能存放一個字節(jié)字符,而對方發(fā)送的一幀可能是很多字符,所以在接收到下個字符之前,應(yīng)該在中斷里將接收到的字符移走。 每接收一個字符會產(chǎn)生一次中斷,端口0產(chǎn)生中斷事件8,端口1產(chǎn)生中斷事件25。 例1:通訊方法(用串口調(diào)試軟件)控制PLC的輸出:

45、 PLC寫入如下程序:比如向PLC發(fā)1時,Q0.0亮,發(fā)2,那么Q0.1亮,發(fā)255,那么從Q0.0到Q0.7都亮,發(fā)送0,則都不亮。 LD? ? ? ? ? SM0.1 MOVB? ? ? 9,? SMB30 ATCH? ? ? INT_0,? 8。 ENI INT_0: LD? ? ? ? ? SM0.0 MOVB? ? ? SMB2,? QB0? 用串口調(diào)試軟件向PLC發(fā)1時,Q0.0亮,發(fā)2,那么Q0.1亮,發(fā)255,那么從Q0.0到Q0.7都亮,發(fā)送0,則都不亮,你可以試試。 串口調(diào)試軟件設(shè)置:96

46、00波特率,數(shù)據(jù)位8,停止位1,無奇偶校驗(yàn)。 例2:如果有2個PLC,那么將兩個通訊口(PORT0)3? 3接,8? 8接。如果只有一個PLC,那么用串口調(diào)試軟件當(dāng)主站也可以。 主站程序:向從站發(fā)送4個字節(jié)的數(shù)據(jù)。 網(wǎng)絡(luò)1: LD? ? ? ? ? SM0.1 MOVB? ? ? 9,? SMB30 MOVB? ? ? 4,? VB0 MOVB? ? ? 1,? VB1 MOVB? ? ? 2,? VB2 MOVB? ? ? 3,? VB3 MOVB? ? ? 4,? VB4 網(wǎng)絡(luò)2: LD? ?

47、? ? ? SM0.5 EU XMT? ? ? ? VB0,? 0? ? ? ? ? ? ? ? ? //? 每秒發(fā)送一次 從站程序1: MAIN:OB1 LD? ? ? ? ? SM0.1 MOVB? ? ? 9,? SMB30 ATCH? ? ? INT0,? 8 ENI INT_0:INT0 LD? ? ? ? ? SM0.0 MOVB? ? ? SMB2,? VB10 ATCH? ? ? INT1,? 8 INT_1:INT1 LD? ? ? ? ? SM0.0 MOVB?

48、 ? ? SMB2,? VB11 ATCH? ? ? INT2,? 8 INT_2:INT2 LD? ? ? ? ? SM0.0 MOVB? ? ? SMB2,? VB12 ATCH? ? ? INT3,? 8 INT_3:INT3 LD? ? ? ? ? SM0.0 MOVB? ? ? SMB2,? VB13 ATCH? ? ? INT0,? 8 如果主從站同時啟動,或者從站啟動比主站啟動早,那么VB11=1,VB12=2,VB13=3,VB14=4. 如果主站先發(fā)送,那么VB11就不一定是1了,可能是

49、2或3或4。 從站程序2: MAIN:OB1 LD? ? ? ? ? SM0.1 MOVB? ? ? 0,? VB10 MOVB? ? ? 9,? SMB30 MOVD? ? ? &VB10,? VD80 ATCH? ? ? INT_0:INT0,? 8 ENI INT_0:INT0 Network? 1 LD? ? ? ? ? SM0.0 INCB? ? ? MB10 MOVB? ? ? SMB2,? *VD80 INCD? ? ? VD80 Network? 2 LDB=

50、? ? ? MB10,? 4 MOVB? ? ? 0,? MB10 -D? ? ? ? ? +4,? VD80 這個例子只是比上個例子少了3個中斷而已。 從站程序3: MAIN:OB1 LD? ? ? ? ? SM0.1 MOVB? ? ? 9,? SMB30 ATCH? ? ? INT0,? 8 ENI INT_0:INT0 Network? 1 LDB<>? ? SMB2,? 1 CRETI Network? 2 LD? ? ? ? ? SM0.0 MOVB? ? ? S

51、MB2,? VB10 ATCH? ? ? INT1,? 8 INT_1:INT1 LD? ? ? ? ? SM0.0 MOVB? ? ? SMB2,? VB11 ATCH? ? ? INT2,? 8 INT_2:INT2 LD? ? ? ? ? SM0.0 MOVB? ? ? SMB2,? VB12 ATCH? ? ? INT3,? 8 INT_3:INT3 LD? ? ? ? ? SM0.0 MOVB? ? ? SMB2,? VB13 ATCH? ? ? INT0,? 8 如果

52、1是起始字符,那么在中斷0里加個判斷,就不會發(fā)生接收數(shù)據(jù)錯位的問題。 以下是引用LaoHuai在2010-12-23? 11:45:24的發(fā)言: ? 我覺得做自由口通訊時容易出現(xiàn)的幾個問題: 1? ? 0009? ? ? 端口0中同時執(zhí)行XMT/RCV ? ? ? 000B? ? ? 端口1中同時執(zhí)行XMT/RCV 經(jīng)常有人問,程序里只發(fā)送(XMT),怎么會出現(xiàn)同時執(zhí)行XMT/RCV呢? 其實(shí)這個有4種可能: 發(fā)送沒結(jié)束,又執(zhí)行發(fā)送 接收沒結(jié)束,又執(zhí)行接收 發(fā)送沒結(jié)束,又執(zhí)行接收 接收沒結(jié)束,又執(zhí)行發(fā)送 有3種解決方法:

53、 a? 用沿來執(zhí)行。 b? 在中斷程序里來執(zhí)行。 c? XMT用? SM4.5/? SM4.6來執(zhí)行,RCV根據(jù)SMB86的條件來執(zhí)行。 2? 發(fā)送結(jié)束可以(應(yīng)該)立即執(zhí)行接收,但接收結(jié)束不能立即發(fā)送,應(yīng)該延時發(fā)送。 3? 用字符中斷方式接收數(shù)據(jù)時,中斷程序應(yīng)該足夠短,否則會丟數(shù)據(jù),中斷程序執(zhí)行的時間應(yīng)該小于傳送一個字節(jié)數(shù)據(jù)所需的的時間。 以下是引用鼠老爹在2010-12-31? 12:53:40的發(fā)言: ? 手冊上給出的一些自由口通訊示例,S7-200多以從站的面目出現(xiàn)。因此在邏輯上,PLC等待網(wǎng)絡(luò)上的數(shù)據(jù)請求,再發(fā)送應(yīng)答數(shù)據(jù);發(fā)送完畢后再次

54、啟動接收。 如果PLC作為主站請求第三方儀表的數(shù)據(jù),且使用的是自定義通訊協(xié)議在編程的時候會遇到一些看起來很奇怪的現(xiàn)象。以下是我在編通訊程序時遇到的問題和解決方法: 1、剛開始,按照一般的程序邏輯設(shè)置使用XMT和RCV指令。對儀表的輪詢都很正常,沒有異常情況發(fā)生。自以為程序走通了。 2、偶然切斷了個別從站(在現(xiàn)場這種情況是很普遍的),發(fā)現(xiàn)整個通訊全部歇菜了。重啟PLC,頭幾臺儀表的通訊正常,但是到了被切斷的從站又OVER了。 3、檢查PLC的狀態(tài)信息,看不出異常。監(jiān)控RS485總線,發(fā)現(xiàn)走過了空站號后PLC的XMT發(fā)送不出信息。 4、于是用VB寫了一個從站的模擬程序

55、與PLC通訊。從監(jiān)控上看出,從站有應(yīng)答,RCV正常處理接受信息后,XMT的發(fā)送沒問題。而從站沒有應(yīng)答,RCV始終在等待,XMT便無法發(fā)送信息。 5、因此PLC端必須考慮終止接收。反復(fù)使用了幾種方法,最終選用了定時關(guān)閉接受功能的方法。 6、在程序的初始化中配置通訊口和接收控制參數(shù),然后將SM87.7(SM187.7)復(fù)位。 7、XMT執(zhí)行后將SM87.7(SM187.7)置位,啟動接收以及一個定時器。 8、無論有否應(yīng)答,都由定時器去處理信息并關(guān)閉RCV功能,等待下一個通訊。 9、 RCV指令在主程序中由SM0.0使能。這點(diǎn)很重要。因?yàn)镾M87.7(SM187.7)被

56、修改后,必須執(zhí)行一次RCV指令才能啟停接收功能,所以RCV 作為“指令”始終被執(zhí)行不會影響整個程序的邏輯關(guān)系,且程序看上去也簡潔,其它地方只要操作SM87.7(SM187.7)即可。 另外,在和一些集成了RS485端口的儀表做通訊時,發(fā)現(xiàn)波特率的匹配上會有些問題。主要原因還是對主頻進(jìn)行分頻后時鐘脈沖引起的誤差。這點(diǎn)上西門子的PLC適應(yīng)性比較強(qiáng),而合信的PLC適應(yīng)性差一些。 有 網(wǎng)友問到“PLC能否同時與不同波特率的對象通訊”的問題,竊以為可以解決。SMB30(SMB130)隨時可以賦值,也就是說用戶可以即時修改自由口的 配置。按此邏輯,只要在XMT和RCV使能之前定義SMB30(S

57、MB130)就可以了。這一點(diǎn)與VB對COMM口的配置是一樣的;如果程序中沒有操作 COMM配置的指令,VB就按控件特性欄中的配置執(zhí)行;如果程序中有配置指令,就按程序的配置指令執(zhí)行。 以下是引用困惑迷茫求助在2011-01-04? 09:51:24的發(fā)言: ? 我曾經(jīng)使用過自由口通信,與36個儀表同時通訊,正常情況下通訊很好,可是只要其中一個儀表出現(xiàn)通訊中斷后,整個通訊就全部崩潰,無法執(zhí)行,請問那位高手能指點(diǎn)下,為什么會出現(xiàn)該問題 與 多個設(shè)備進(jìn)行通信時這時常見的問題,主要是因?yàn)樵诔绦蛏先鄙賹﹀e誤時的考慮,也就是只考慮了在正常情況下怎么去進(jìn)行輪詢,而忽略了當(dāng)伙伴沒有響應(yīng)或響應(yīng)數(shù) 據(jù)不對時的

58、處理。錯誤處理的機(jī)制和方法在很大程度上影響著通信的質(zhì)量和效率,而我們往往不注意這方面,高級的開發(fā)者一般習(xí)慣先考慮錯誤處理:)。錯誤處理 的方法在于應(yīng)用者的需求,對于簡單的應(yīng)用可以對錯誤進(jìn)行相對簡單的處理,比如在規(guī)定的時間內(nèi),某個伙伴沒有響應(yīng)時直接跳過對這個站的請求。 這里大家也不妨分享一下自己在錯誤處理方面經(jīng)常所采用的方法。 以下是引用LaoHuai在2011-01-11? 13:42:41的發(fā)言: ? PLC做主站的時候,不管PLC連接的是單從站還是多從站,主站程序都應(yīng)該考慮到從站會發(fā)生故障,從站故障有兩種,一種是有故障,但不影響和主站通訊,另一種是有故障,不能和主站通訊,

59、例如從站掉電,通訊線故障或者從站本身故障導(dǎo)致的不能和主站通訊。 對于后者,主站在發(fā)送后,從站是不會回復(fù)數(shù)據(jù)的,主站不能等,而應(yīng)該結(jié)束RCV接收狀態(tài),然后發(fā)送,那么為什么和如何結(jié)束RCV接收狀態(tài)呢? 一? 為什么要結(jié)束RCV接收狀態(tài)呢? 發(fā)送指令XMT將數(shù)據(jù)發(fā)送出去就完事,而接收RCV不一樣,一次完整成功的RCV過程需要以下步驟: 1? 使能位:SM87.7=1/SM187.7=1,執(zhí)行RCV的時候會檢查該位 2? 執(zhí)行RCV 3? 等待消息起始條件 4? 接收信息 5? 等待消息結(jié)束條件 6? 退出接收狀態(tài) RCV指令

60、啟動后并不一定就接收消息,如果消息起始條件沒有達(dá)到,那就一直處于等待接收的狀態(tài); 如果消息始終沒有開始或者結(jié)束,通信口就一直處于接收狀態(tài)。這時如果嘗試執(zhí)行XMT指令,就不會發(fā)送任何消息。 所以要結(jié)束接收RCV接收狀態(tài)后才能執(zhí)行XMT。 二:如何結(jié)束RCV接收狀態(tài)? 手冊上給出6種結(jié)束條件: 1.結(jié)束字符檢測 2.字符間計時器 3.信息計時器 4.最大字符計數(shù) 5.校驗(yàn)錯誤 6.用戶終止 方法1:前4種條件在從站發(fā)生通訊故障后就失效了,必須要配合用戶終止 一般執(zhí)行XMT后,在發(fā)送完成中斷里執(zhí)行RCV,

61、同時啟動定時中斷或者啟動定時器或者執(zhí)行開始間隔時間BITIM,計時時間到復(fù)位使能位SM87.7/SM187.7,同時執(zhí)行RCV,這樣結(jié)束RCV指令,比如定時中斷里發(fā)送: LD? ? ? ? ? SM0.0 R? ? ? ? ? ? SM87.7,? 1 RCV? ? ? ? VB0,? 0 S? ? ? ? ? ? SM87.7,? 1 LD? ? ? ? ? SM0.0 DTCH? ? ? 10 LD? ? ? ? ? SM0.0 XMT? ? ? ? VB100,? 0 方法2:設(shè)置:SMB87=16#9C,?

62、SMW90/SMW190=0,SMW92/SMW192=x 執(zhí)行RCV指令x毫秒后自動結(jié)束接收狀態(tài)。 如果用的是字符中斷方式接收信息,那么將中斷分離后即可發(fā)送 DTCH? ? ? 8 XMT? ? ? ? VB100,? 0 很多人說某個從站故障后,整個通訊就斷了,那么問題可能就出在這里。 以下是引用happy? Julia在2011-01-14? 09:46:14的發(fā)言: ? 看來用過自由口通信的高手真多呀,各位大俠能不能分享一下在實(shí)際工程項(xiàng)目中都遇到了哪些問題,都是怎么解決的呀,也好讓我們這些初次使用的以后少走彎路,遇到問題也知道如何處理了

63、。先謝謝了。 頂,支持175樓,如果大家分享的實(shí)際問題越多,我們才會收獲更大呀。 這里說一下我曾經(jīng)遇到的問題: 1.剛做自由口編程時,一下載下去,編程軟件就無法和CPU通信了,后來打到停止?fàn)顟B(tài),CPU才恢復(fù)PPI,可以正常監(jiān)控,下載了。 2.還有一次自由口用RCV接收,接收到的數(shù)據(jù)總是一部分,不全,反復(fù)檢查做實(shí)驗(yàn),才發(fā)現(xiàn)原來是結(jié)束的定時器時間設(shè)短了,導(dǎo)致數(shù)據(jù)沒有接收完,RCV就結(jié)束了,增大了時間,一切就OK了。 以下是引用大個笨熊在2011-01-20? 14:10:36的發(fā)言: ? 用結(jié)束字符作為結(jié)束條件的時候,如果與設(shè)備的通信斷了,CPU就會停滯在接受狀態(tài),之后的發(fā)送也不成功了,通訊也徹底斷了。 后來別人教我在發(fā)送前面用復(fù)位SMB87.7結(jié)束發(fā)送就好了。

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!