西門子S7-200 自由口通信實(shí)用文檔
《西門子S7-200 自由口通信實(shí)用文檔》由會(huì)員分享,可在線閱讀,更多相關(guān)《西門子S7-200 自由口通信實(shí)用文檔(26頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、【精品文檔】如有侵權(quán),請(qǐng)聯(lián)系網(wǎng)站刪除,僅供學(xué)習(xí)與交流 西門子S7-200 自由口通信實(shí)用文檔 .....精品文檔...... 主題:應(yīng)用探討—S7-200 自由口通信—發(fā)帖整理 ? 強(qiáng)大而靈活的自由口通信能力,是S7-200系統(tǒng)的一個(gè)重要特點(diǎn)。S7-200? ? CPU的RS485通信口提供了建立在串行通信基礎(chǔ)上的“自由”通信能力,數(shù)據(jù)傳輸協(xié)議完全由用戶程序決定。通過(guò)自由口方式,S7-200可以與串行打印 機(jī)、條碼閱讀器等通信。而S7-200的編程軟件也提供了一些通信協(xié)議庫(kù),如USS協(xié)議庫(kù)和MODBUS? ? RTU從站協(xié)議庫(kù),它們實(shí)際上也使用了自由口通信功能。
2、 開設(shè)本話題的目的,在于澄清自由口通信的基本概念,強(qiáng)調(diào)使用中的要點(diǎn),討論應(yīng)用的常見問(wèn)題。經(jīng)過(guò)此次集中交流,解決了如下一些問(wèn)題: 1. 自由口通信基本概念 2. 自由口通信編程指令的使用和技巧 3. 自由口通信常見問(wèn)題 4. 產(chǎn)品功能建議 更多信息請(qǐng)參考下面文檔。 “下載中心”參考文檔:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文檔編號(hào)“1109582”——S7-200《可編程控制器系統(tǒng)手冊(cè)》 文檔編號(hào)“A0136”——《西門子? S7-200?LOGO!?SITOP? ? 參考》 以下為本次探討的
3、發(fā)帖整理,查看原始交流內(nèi)容請(qǐng)點(diǎn)擊此處。 1.自由口通信基本概念(1樓——5樓) 2.自由口通信編程指令的使用和技巧(6樓——15樓) 3.自由口通信容易犯的錯(cuò)誤(16樓——24樓) 4.產(chǎn)品功能建議(25樓——27樓) quote: 以下是引用BABU在2011-01-20? 15:17:08的發(fā)言: ? 我回來(lái)了,項(xiàng)目終于做完了,可以回家過(guò)年了,:)。 自由口通信真是折騰的我好慘啊,簡(jiǎn)單回顧一下,希望對(duì)像我這樣的菜鳥有些借鑒作用。 先感謝一下西門子論壇和熱線,沒少騷擾他們。 在完全沒有準(zhǔn)備的情況下甲方又加進(jìn)一個(gè)儀表,做什么自有口通信,暈阿!沒
4、辦法,迎著上吧! 網(wǎng)上搜資料,看手冊(cè),越看越糊涂!時(shí)間緊迫,還是直接上手做吧。 首 先是把PLC和儀表連接起來(lái),可儀表的口是rs232的,熱線工程師告訴我得做rs232/485的轉(zhuǎn)換,打車到市場(chǎng)上買個(gè)轉(zhuǎn)換器(打車錢比設(shè)備錢還多, 可見現(xiàn)場(chǎng)多么偏僻阿),聽賣轉(zhuǎn)換器的老板給我分析了一下每種的區(qū)別——不光是價(jià)格的區(qū)別,說(shuō)實(shí)在的,當(dāng)時(shí)非常慚愧,老板懂的比我多多了。 買回來(lái)后自己動(dòng)手焊線,一個(gè)人費(fèi)了九牛二虎之力,焊的那個(gè)慘樣就不用說(shuō)了,還好有殼可以包裝一下。 焊好了,實(shí)驗(yàn)一下效果吧,不知到怎么做了,打電話。 熱線工程師告訴我找個(gè)串口調(diào)試工具,連接到pc機(jī)上測(cè)試。
5、 在串口調(diào)試工具上發(fā)一串?dāng)?shù),在200上收,ok!高興壞了,沒白忙活。 硬件上應(yīng)該沒問(wèn)題了,接下來(lái)開始做程序了。 先得理解儀表的協(xié)議,弄清了儀表先要收到請(qǐng)求數(shù)據(jù)的命令,然后根據(jù)命令做出響應(yīng)。 同樣,先用串口調(diào)試工具和儀表連接進(jìn)行通信測(cè)試,還算聰明吧,:)! 然后開始在200里編寫收發(fā)程序,開始時(shí)整個(gè)思路都是亂的,無(wú)從下手。就把200手冊(cè)上的例子程序整個(gè)抄上,在cpu224的兩個(gè)接口間進(jìn)行通信實(shí)驗(yàn)。 經(jīng)過(guò)不停的實(shí)驗(yàn),終于一點(diǎn)一點(diǎn)地理解了控制字節(jié)、控制參數(shù)的含義,怎么設(shè)置接收結(jié)束條件,怎么使用中斷、怎么控制接收和發(fā)送等等。 ok,開始真正地與儀表通信了。
6、發(fā)請(qǐng)求命令,收數(shù)據(jù),可收到的數(shù)據(jù)是ASCII碼,得進(jìn)行數(shù)據(jù)轉(zhuǎn)換。 根據(jù)大俠們的提醒,經(jīng)過(guò)實(shí)驗(yàn)知道了怎么將ASCII碼轉(zhuǎn)換為實(shí)際的工程數(shù)據(jù)。 到此基本結(jié)束了,雖然說(shuō)著好像也沒什么,但只有我最了解其中的痛苦,不停地實(shí)驗(yàn),不停地修改阿! 后面在實(shí)際運(yùn)行中又遇到了有時(shí)通信中端的問(wèn)題,將雙絞線的屏蔽接到地上后暫時(shí)還沒出現(xiàn)問(wèn)題。 總結(jié)一下,個(gè)人認(rèn)為作自由口通信需要做好以下幾方面工作: 1、最主要的是多動(dòng)手,光看資料是沒有用的,只有自己親自去動(dòng)手實(shí)驗(yàn)一下才能發(fā)現(xiàn)問(wèn)題和幫助理解。 2、做實(shí)驗(yàn)是找個(gè)串口調(diào)試工具(我用的是sscom32)是必須的,可以幫助你測(cè)試你的通信
7、線,調(diào)試你的程序,盡量不要直接與設(shè)備進(jìn)行通信,通信不上不好分析原因。 3、我認(rèn)為200手冊(cè)上的例子程序非常好,基本的處理方法和編程方法都涉及到了,可以根據(jù)你的需要做修改,當(dāng)然首先要充分地理解他。 4、遇到不太容易理解的,或有問(wèn)題的,多和別人交流一下,從中可以得到不同的思路。 提前給西門子和壇子里的專家們拜年了! 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í),就接到邀請(qǐng)了。 請(qǐng)教各位大俠: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ā)送和接收指令不能同時(shí)執(zhí)行。這點(diǎn)有
9、點(diǎn)不好,在300里可以422通訊,但最好是PLC發(fā)送不要連續(xù)發(fā)送,而接收倒沒事。我 有次在調(diào)試的時(shí)候發(fā)現(xiàn)上位機(jī)發(fā)了任務(wù)后,PLC設(shè)備要過(guò)好長(zhǎng)一段時(shí)間才去執(zhí)行,后來(lái)請(qǐng)教了老師傅,老師傅說(shuō)把發(fā)送端加個(gè)間隔時(shí)間就好了 以下是引用鼠老爹在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)制代碼。這樣會(huì)加重程序負(fù)擔(dān)。但是ASCII代碼用于通訊有一個(gè)好處,起始字 符與結(jié)束字符比較容易確定和判別,它們一般不會(huì)出現(xiàn)在數(shù)據(jù)區(qū)
10、。而用二進(jìn)制代碼通訊,數(shù)據(jù)無(wú)需轉(zhuǎn)換即可直接使用(高低位字節(jié)可能需要交換),PLC的負(fù)擔(dān)較 小。但是起始字符和結(jié)束字符經(jīng)常會(huì)與數(shù)據(jù)重復(fù)。因此,用二進(jìn)制代碼通訊,通常是靠字符數(shù)和定時(shí)器來(lái)確定接收終點(diǎn),主從站之間的步調(diào)協(xié)調(diào)非常重要。 以下是引用Am_Programer在2010-12-27? 15:48:59的發(fā)言: ? 西門子S7-200系列PLC支持自由口通信協(xié)議。所謂自由口協(xié)議是指通過(guò)用戶程序控制CPU主機(jī)的通信端口的操作模式來(lái)進(jìn)行通信。用這種自由口模式可以用自定義的通信協(xié)議連接多種智能設(shè)備。自由口模式支持ASCII和二進(jìn)制協(xié)議。 在自由口模式下,主機(jī)處于RUN方式時(shí),用戶可
11、以用相關(guān)的通信指令所編寫的程序控制通信口的操作。當(dāng)主機(jī)處于STOP方式時(shí),自由口通信被終止,通信口自動(dòng)切換到正常的PPI協(xié)議操作。 自由口通信指令包括:XMT,自由口發(fā)送指令;RCV,自由口接受指令。用特殊標(biāo)志寄存器SMB30(端口0)和SMB130(端口1)的各個(gè)位設(shè)置自由口模式,并配置自由口通信參數(shù),如波特率、奇偶效驗(yàn)和數(shù)據(jù)位。 發(fā)送指令(XMT)和發(fā)送中斷:發(fā)送指令允許S7-200的通信口上發(fā)送最多255個(gè)字節(jié),發(fā)送中斷通知程序發(fā)送完成。 接受字符中斷:接受字符中斷通知程序通信口上接受到了一個(gè)字符,應(yīng)用程序就可以根據(jù)所用的協(xié)議對(duì)該字符進(jìn)行相關(guān)的操作。 接受指令(R
12、CV):接受指令從通信口接收到整條信息,當(dāng)接收完成后產(chǎn)生中斷通知應(yīng)用程序。需要在SM存儲(chǔ)器中定義條件來(lái)控制接收指令開始和停止接受信息。接受指令可以根據(jù)特定的字符或時(shí)間間隔來(lái)啟動(dòng)和停止接受信息。接受指令可以實(shí)現(xiàn)多數(shù)通信協(xié)議。 自由口通信功能的用途: 1.? 通過(guò)RS-232或RS-485串口連接多種智能儀表或RTU,根據(jù)智能儀表或RTU定義的通信協(xié)議編寫用戶程序與智能儀表或RTU通信。 2.? 使用USS協(xié)議與西門子MicroMaster系列變頻器通信,STEP7-Micro/WIN提供USS協(xié)議庫(kù),S7-200? CPU是主站,變頻器是從站。 3.? 創(chuàng)建用戶程序來(lái)模擬
13、另外一種網(wǎng)絡(luò)上的從站器件。例如S7-200的用戶程序模仿一個(gè)Modbus從站。STEP7-Micro/WIN提供Modbus協(xié)議庫(kù)。 4.? 采用自定義通信協(xié)議與PC通信。PC上的應(yīng)用軟件可以采用此方法方便的訪問(wèn)S7-200的數(shù)據(jù)。這是第三方軟件訪問(wèn)S7-200PLC比較簡(jiǎn)便,廉價(jià)的方法。 對(duì)于自由口通訊,西門子的很多資料都做了比較詳細(xì)的介紹,其中還包含了大量的例子程序。由于通訊的不可見性,很多人還是不能很好的掌握,我建議大家: 1、理解什么是通訊、什么是串口、什么是232、什么是485?沒有過(guò)硬的硬件知識(shí)是不可能做出通訊的,你連線都不知道怎么接,怎么調(diào)試你的程序?
14、 2、仔細(xì)閱讀西門子關(guān)于通訊的資料,不需要多只需要精,因?yàn)楦鞣N版本的資料基本是一樣的,關(guān)鍵就是SMB30、SMB86、87、88、89、SMW90、92、SMB94自己控制通訊過(guò)程需要SMB2,把這些弄明白了,才有可能做出通訊程序 3、使用PC的通訊軟件協(xié)助調(diào)試,有了PC的通訊軟件可以看見通訊過(guò)程中的數(shù)據(jù),能夠更方便的調(diào)試程序 4、理解各種通訊協(xié)議。大家要注意串口通訊和協(xié)議是2碼事,不論是PPI、MODBUS還是USS它們都有自己的協(xié)議規(guī)范,根據(jù)規(guī)范來(lái)寫你就可以實(shí)現(xiàn)這種通訊。只不過(guò)PPI是不公開通訊協(xié)議的,沒有辦法寫而已! 最后建議大家自己做通訊,起碼會(huì)做!至于用
15、不用自己做就要根據(jù)你的實(shí)際情況了,西門子提供的庫(kù)也是很方便的! 以下是引用yanxiao在2010-12-24? 13:50:10的發(fā)言: ? 我看過(guò)不少問(wèn)S7200通訊問(wèn)題的貼子,覺得很多問(wèn)題并不是S7200的,而是串行通訊的共性問(wèn)題,也就是對(duì)串行通訊本身概念的認(rèn)識(shí)問(wèn)題。下面我來(lái)談?wù)勗谖业挠洃浿嘘P(guān)于串行通訊的一些認(rèn)識(shí)。 1、串行通訊只有一個(gè)傳輸通道,每個(gè)時(shí)刻只能表達(dá)一種狀態(tài)。不管什么介質(zhì),不管是什么信號(hào),我們用1表示一種狀態(tài),用0表示另一種狀態(tài)。 2、只用1和0兩種狀態(tài),是不能表達(dá)更多信息的。好在有一個(gè)物理量,對(duì)每個(gè)系統(tǒng)來(lái)講是統(tǒng)一的,那就是時(shí)間。我們現(xiàn)在很容易做到不同系統(tǒng)之間
16、的定時(shí)誤差控制在PPM數(shù)量級(jí)。1和0在時(shí)間上進(jìn)行有序的組合,就可表達(dá)近乎無(wú)限的信息。 3、任何一個(gè)信號(hào),如果不賦給它一些特點(diǎn)的意義,實(shí)際上沒什么用。兩個(gè)系統(tǒng)要通過(guò)信號(hào)交換信息,必須對(duì)信號(hào)有一個(gè)共同的約定,這就是我們通常所說(shuō)的協(xié)議。 4、最基本的協(xié)議是物理層面的(那個(gè)OSI的七層協(xié)議模型,第一層就是物理層協(xié)議)。RS232、RS485、RS422,這些是物理層面的一些協(xié)議。 5、我們現(xiàn)在要談的是異步串行通訊。異步,發(fā)達(dá)方和接收方之間,沒有額外的通道來(lái)傳送信息何時(shí)傳送與接收。每個(gè)信息單元的起止時(shí)間,發(fā)送方編在信息中,由接收方自已解碼并同步。 6、 好。現(xiàn)在來(lái)講一下傳送一個(gè)字
17、節(jié)的過(guò)程。在沒有傳送信息時(shí),傳輸線處于空閑狀態(tài)。規(guī)定:空閑狀態(tài)為1。發(fā)送方(TX)準(zhǔn)備發(fā)送,驅(qū)動(dòng)傳輸線讓它由1變?yōu)?, 并持一位的時(shí)間長(zhǎng)度,我們把這一位叫做起始位。接收方(RX),檢測(cè)到傳輸線由1變0,意味著可能有信息要傳了,RX就持續(xù)檢測(cè),以驗(yàn)證這個(gè)0是不是持續(xù) 了規(guī)定的一位時(shí)間長(zhǎng)度,若是個(gè)合法的起始位,就按約定的定時(shí)方式,把后續(xù)的傳輸線狀態(tài),接收為1個(gè)字節(jié)。TX在發(fā)完起始位后,就發(fā)字節(jié)中的第一個(gè)位 (bit),并依次把字節(jié)中的所有位發(fā)完,每bit均持續(xù)相同的一位時(shí)長(zhǎng)。然后再發(fā)校驗(yàn)位(如果約定發(fā)/收方都采用的話)、停止位。 7、 停止位,這個(gè)要說(shuō)一下。我們知道起始位是0,而這個(gè)停止位,
18、規(guī)定是1,和傳輸線的空閑狀態(tài)1是相同的。停止位規(guī)定的時(shí)長(zhǎng)比較亂,有1位停止位(也就持續(xù)時(shí) 間占1個(gè)位長(zhǎng))、1.5位、和2位停止位,其它時(shí)長(zhǎng)的停止位好象沒見過(guò)。停止位的作用,其一是作為一字節(jié)單元的成員,給接收方定時(shí)用的,也就是下一個(gè)字 節(jié),在停止位之后才開始。另一個(gè)作用,可供檢查字節(jié)傳送的完整性。因?yàn)橥V刮皇且?guī)定為1狀態(tài)的,若在停止位的時(shí)間里測(cè)到了非1狀態(tài),表示這個(gè)字節(jié)傳送有問(wèn) 題,有可能被接收方丟棄,傳送失敗。 8、若收發(fā)雙方的停止位不相同,怎么辦?這個(gè)在論壇上經(jīng)常有人問(wèn)。好,我們來(lái)分析一下。若TX是2個(gè) 停止位,RX要求是1個(gè)停止位,很好,TX多發(fā)的一個(gè)停止位,會(huì)被RX看作是空閑狀態(tài)(
19、也可認(rèn)為是字符間隔),沒有任何問(wèn)題。若反過(guò)來(lái),TX是1個(gè)停止 位,RX要求是2個(gè)停止位,有問(wèn)題嗎?一般問(wèn)題是很大的,但也有可能可以正常通訊。這要看TX是怎么發(fā)字節(jié)的。有些系統(tǒng),硬件上,發(fā)送電路比較簡(jiǎn)單,沒有 緩沖機(jī)構(gòu),一個(gè)字節(jié)必須完整發(fā)送后,才準(zhǔn)備下一個(gè)字節(jié)的數(shù)據(jù),而這個(gè)準(zhǔn)備需要花一些時(shí)間的,這就給傳送的時(shí)序上,停止位之后,有了空閑時(shí)間,相當(dāng)于停止位 得到了延長(zhǎng)。所以我曾經(jīng)發(fā)過(guò)一個(gè)貼子說(shuō),S7200的發(fā)送改為單字節(jié)發(fā)送,每個(gè)字節(jié)之間有意插入一些延時(shí),人為造成空閑時(shí)間,以充當(dāng)停止位,但這個(gè)方法說(shuō) 歸說(shuō),我并沒有試過(guò)??上У氖?,現(xiàn)在的系統(tǒng),硬件都做得很完美了,包括S7200,TX是有緩沖的,在一個(gè)
20、字節(jié)還未發(fā)完前就可以接受下一個(gè)要發(fā)送的字節(jié), 硬件上保證一個(gè)字節(jié)發(fā)完后可以立即啟動(dòng)下一個(gè)字節(jié)發(fā)送,前后兩字節(jié)間除了停止位,沒有額外的間隙,這種情況下,接收方就要命了,RX認(rèn)為還在收停止位時(shí), 下一個(gè)字節(jié)的起始位就來(lái)了,沒辦法完整接收,通訊就失敗了。 9、波特率。兩邊設(shè)為一致就可以了。波特率不一致,鐵定不能通訊。但允許有少 量的誤差。停止位實(shí)際上還用來(lái)調(diào)節(jié)這個(gè)誤差的。比如1個(gè)停止位,RX并不死板要求停止位是完整的1個(gè)位時(shí)長(zhǎng),實(shí)際只要停止位超過(guò)0.5個(gè)位長(zhǎng)就算是合格 了。波特率,就是每秒最快能傳送的位數(shù),包括了起始位、停止位這些輔助位。實(shí)際每秒能傳送的最快字節(jié)數(shù),要看這些輔助位的多少。比如一
21、個(gè)11位結(jié)構(gòu)的字節(jié) 單元:1起始位+8字節(jié)位+1校驗(yàn)位+1停止位,字節(jié)最快傳送速率為band/11。好象還有一個(gè)概念,叫比特率,也就是有效的位傳送速率,比特率=8* (band/11),也就是比特率比波特率要小的。 10、RS232的TX和RX是兩根獨(dú)立的線,收/發(fā)可以同時(shí)進(jìn)行, 所以叫作全雙工異步串行通訊。按我們?nèi)粘扇私徽劦慕?jīng)驗(yàn),總是A說(shuō)B聽,當(dāng)B要說(shuō)時(shí),A就停下來(lái)聽B說(shuō)。如果A、B同時(shí)說(shuō),這是吵架,要達(dá)到相互交流就難 了。同樣,通訊若同時(shí)收發(fā),一般人會(huì)白白死掉很多腦細(xì)胞而寫出的程序通訊效果還是很差。所以,即使RS232能雙向同時(shí),? 一般使用時(shí)也是收、發(fā)不同時(shí)的。 1
22、1、RS485。RS232不錯(cuò)了,但局限性大大的。RS485收發(fā)同線,允許多少RS485并聯(lián)使 用,電氣采用差分傳送信號(hào),可以抗干擾。S7200就屬于RS485。RS485設(shè)備同一時(shí)間只能發(fā)或再改,收發(fā)是分時(shí)的,所以叫做準(zhǔn)雙向。盡管 S7200中可以同時(shí)緩沖8個(gè)NETR和NETW,實(shí)際在RS485層面,還是一個(gè)一個(gè)分時(shí)完成的(由系統(tǒng)程序根據(jù)PPI協(xié)議協(xié)調(diào))。RCV和XMT完全 由用戶程序控制,你就不能同時(shí)讓兩個(gè)都執(zhí)行,否則就是哄搶資源而被S7200當(dāng)成錯(cuò)誤處理。 12、RS422,介于RS232和 RS485。RS422和RS232一樣收、發(fā)線獨(dú)立,但電氣上采用和RS485一樣的差分信號(hào)
23、。所以RS422能多機(jī)通訊,比RS232傳得遠(yuǎn),但比 RS485浪費(fèi)硬件資源。RS422只要軟件上采用準(zhǔn)雙向的規(guī)則,通過(guò)發(fā)收線合并,可以簡(jiǎn)化為RS485,和RS485設(shè)備通訊。但RS485卻不能復(fù)雜 化成RS422使用。 以下是引用yanxiao在2010-12-31? 16:00:57的發(fā)言: ? 再談一個(gè)于關(guān)通訊效率: 這里的通訊效率問(wèn)題,針對(duì)主站。從站,一般根據(jù)主站的請(qǐng)求,及時(shí)發(fā)回應(yīng)答就行了,不存在效率問(wèn)題。 當(dāng)主站要同多個(gè)從站通訊時(shí),就有一個(gè)效率問(wèn)題。以modbus-rtu為例。 1、定時(shí)輪詢。這恐怕是最原始的方法,也是效率最低下的。比如1秒鐘輪詢一個(gè)站,如果3個(gè)
24、從站,要3秒才輪到1次。 2、 高效的輪詢應(yīng)該根據(jù)協(xié)議的定時(shí)來(lái)調(diào)整,盡量擠掉不必要的延時(shí)。modbus-rtu,3.5個(gè)字節(jié)傳送時(shí)間作為幀間隔,但是從站的回應(yīng)時(shí)間沒有標(biāo)準(zhǔn)規(guī)定, 要先問(wèn)清楚。一般的儀表,回應(yīng)時(shí)間都是很短的,幾十ms內(nèi)都會(huì)有回應(yīng),你可以把回應(yīng)超時(shí)設(shè)在100ms。當(dāng)然儀表能提供這個(gè)超時(shí)參數(shù)是最好了。 當(dāng)主站發(fā)完請(qǐng)求幀后,立即進(jìn)入接收狀態(tài),隨時(shí)準(zhǔn)備接收從站的回應(yīng)。但若到達(dá)超時(shí)時(shí)間還未收到,則放棄繼續(xù)接收,認(rèn)為從站無(wú)響應(yīng),進(jìn)入下一從站的通訊。 3、 如果3個(gè)從站只有1個(gè)在線上,按理說(shuō)是通訊速度是最快的,但如果不采取一些策略,則通訊速率會(huì)變成最慢的。輪詢一個(gè)離線的從站,
25、通訊要等到超時(shí)才結(jié)束,這 肯定比在線的從站回應(yīng)要慢得多,因此大部分時(shí)間浪費(fèi)在離線的從站上了。策略是為每一個(gè)從站配置1個(gè)在線狀態(tài)標(biāo)記位,當(dāng)從站有成功回應(yīng)的,標(biāo)記位=1,表示 在線,若該從站連續(xù)N次(2次)沒有回應(yīng)或出錯(cuò),置標(biāo)記位=0,表示離線。 對(duì)于在線的從站,按正常順序輪詢,而離線的從站,則每隔一定時(shí)間或每隔一定的輪詢周期,發(fā)一個(gè)請(qǐng)求給它,若有回應(yīng)且正確,則置標(biāo)記位為1,認(rèn)為該從站已回到在線狀態(tài),若沒有回應(yīng)或出錯(cuò),則繼續(xù)保持離線狀態(tài)。這樣,可以把花在離線從站的通訊時(shí)間,控制在一個(gè)合理的范圍。 以下是引用鼠老爹在2011-01-01? 23:46:42的發(fā)言: ? yanxiao的方案
26、很在理,我做PC與PLC通訊所采用的策略基本如此。當(dāng)時(shí)并不在乎效率,而是為了監(jiān)視PLC的狀態(tài)。因?yàn)橄挛粰C(jī)的開啟是隨機(jī)的。 在PLC與第三方儀表的通訊中,我還沒有這樣做過(guò)。在我的理念中,只有實(shí)時(shí)性要求不是很高的場(chǎng)合,與第三方儀表之間才會(huì)采用通訊的方式交換數(shù)據(jù)。因?yàn)榈谌絻x表通常只能作為從站,等待PLC的數(shù)據(jù)請(qǐng)求,實(shí)時(shí)性無(wú)法得到保障。因此,我認(rèn)為PLC在通訊上的效率已經(jīng)無(wú)所謂了。 就 像現(xiàn)在正在做的一個(gè)項(xiàng)目,PC連著數(shù)臺(tái)PLC,每臺(tái)PLC要輪詢16臺(tái)儀表的32個(gè)數(shù)據(jù),波特率只能是2400(其它波特率不太容易匹配),每臺(tái)PLC還 要同時(shí)處理16個(gè)模擬量,下位機(jī)分布面積很大??紤]通訊的可靠
27、性,PLC每2秒鐘問(wèn)一個(gè)儀表。這樣走一圈就需要半分鐘。選擇通訊是因?yàn)檫@些數(shù)據(jù)本身的變化 速率很慢,且不需要控制,只要監(jiān)視記錄就行了,無(wú)需考慮實(shí)時(shí)性。用戶甚至提出每5分鐘讀一次數(shù)據(jù)。考慮到PC的屏幕上等待5分鐘跳一次數(shù)據(jù)對(duì)操作者實(shí)在是 一種折磨,還是把輪詢的周期定在1分鐘(因?yàn)橄胪祽?,暫時(shí)還不想進(jìn)一步縮短周期)。定時(shí)也沒有什么精度要求,直接用SM0.4的上升沿來(lái)觸發(fā)。 在這種情況下,不在乎下位機(jī)是否在線對(duì)通訊效率的影響,而是在乎下位機(jī)狀態(tài)是否能在監(jiān)視終端的PC上顯示出來(lái),避免無(wú)效數(shù)據(jù)被壓入數(shù)據(jù)庫(kù)。 yanxiao為大家提供了一種邏輯方法,若用戶有此類要求,不妨一試。 以下是引用一粒
28、塵在2010-12-29? 15:57:27的發(fā)言: ? 下面是我從MICRO/WIN幫助文件里改的一段自由口通信程序,實(shí)現(xiàn)接收到后(結(jié)束字為H0A),再發(fā)回去。 1、補(bǔ)充了發(fā)送完成中斷啟動(dòng)接收服務(wù)程序 2、增加了模式開關(guān)切換通信口的模式,當(dāng)開關(guān)切換由RUN切換到TERM時(shí),為PPI從屬模式;當(dāng)開關(guān)由TERM切換到RUN時(shí),P0口為自由口模式。 3、上一條有局限性,在用軟件啟動(dòng)和停止PLC時(shí),P0口初始化為自由口,不論P(yáng)LC模式開關(guān)是在TERM還是RUN位置 程序如下 ORGANIZATION_BLOCK? 主程序:OB1 TITLE=程序注釋
29、 BEGIN Network? 1? //? ? 主程序 LD? ? ? ? ? SM0.1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 首次掃描時(shí), MOVB? ? ? 16#09,? SMB30? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 初始化自由端口: ? //? -? 選擇9600波特 ? //? -? 選擇8個(gè)數(shù)據(jù)位 ? //? -? 選擇無(wú)校驗(yàn) MOVB? ? ? 16#B0,? SMB87? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //
30、? 初始化RCV信息控制字節(jié): ? //? -? RCV被啟用 ? //? -? 檢測(cè)到信息字符結(jié)束 ? //? -? 將空閑行條件檢測(cè)為 ? //? 信息開始條件。 MOVB? ? ? 16#0A,? SMB89? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 將信息字符結(jié)束設(shè)為hex? OA(換行符)。 MOVW? ? ? +5,? SMW90? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //? 將空閑行超時(shí)設(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"時(shí),SM0.7=1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
33、 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //"TERM"時(shí),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? //? 則附加一個(gè)10毫秒計(jì)時(shí)器, ATCH? INT_1? 10? //? 觸發(fā)傳送 CRETI? //? 并返回。 NOT RCV? VB100? 0? //? 如果因任何其他原因接收完成, ? //? 則開始新的接收。 END_INTERRUPT_BLOCK INTERRUPT_BLOCK? INT_1:INT1 TITLE=中斷程序注釋 BEGIN Network? 1? //? ? 中斷1 //? ? 10毫秒計(jì)時(shí)器中斷 LD? SM0.0
36、 DTCH? 10? //? 分離計(jì)時(shí)器中斷 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é)束條件??吹奈叶紩灹?,各位大俠能給我簡(jiǎn)單講講嗎,大概是什么意思?我應(yīng)該選擇什么樣的起始和結(jié)束條件呀? 條件多,給你選擇的就多。再看幾遍就能明白了。 如果覺得
38、RCV麻煩,那就用字符中斷方式接收數(shù)據(jù),只要連接一個(gè)中斷就可以了,但要一個(gè)一個(gè)收。 這個(gè)問(wèn)題說(shuō)起來(lái)和理解起來(lái)確實(shí)挺讓人頭疼的,但個(gè)人認(rèn)為這是個(gè)非常好的問(wèn)題,如果能把這部分理解清楚了,對(duì)于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í)間(可以理解為兩幀數(shù)據(jù)之間的間隔)為50
39、ms(小于發(fā)送間隔時(shí)間100ms),則當(dāng)發(fā)送完第一幀? 01? 02? 03? 04? 05? 后,啟動(dòng)空閑時(shí)間檢測(cè),超過(guò)50ms即認(rèn)為一幀數(shù)據(jù)結(jié)束,準(zhǔn)備接收下一幀數(shù)據(jù)。這可以看做是“字符間定時(shí)器”結(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é)束字符檢測(cè)”結(jié)束消息方式。 3、指定接收數(shù)據(jù)長(zhǎng)度為5,則收到? 01? 02? 03? 04? 05? (5個(gè)字符)后,即認(rèn)為一幀數(shù)據(jù)結(jié)束,再接收到的
40、? 01? 02? 03? 04? 05? 認(rèn)為是下一幀數(shù)據(jù),依此類推。這可以看做是“最大字符計(jì)數(shù)”結(jié)束消息方式。 4、其他條件還包括“消息定時(shí)器”、“奇偶效驗(yàn)錯(cuò)誤”、“用戶終止”等結(jié)束消息的方式,或者這些條件的組合作為結(jié)束消息的方式。 那么在應(yīng)用中選擇哪種結(jié)束消息的方式,要具體情況具體分析。這話說(shuō)起來(lái)很空洞,但確實(shí)如此,因?yàn)樽杂煽谕ㄐ疟旧砭蜎Q定了,不同的通信對(duì)象間的數(shù)據(jù)幀格式(或協(xié)議)是設(shè)備廠家自由定義的,這就要求事先充分理解通信協(xié)議,并在此基礎(chǔ)上進(jìn)行選擇。 另 外一方面,如果能靈活掌握這部分內(nèi)容,還可以解決一些實(shí)際問(wèn)題。比如大家都知道數(shù)據(jù)要接收到接收緩沖區(qū),而接收緩沖區(qū)的
41、大小是有限制的(255個(gè)字節(jié)), 那么怎么能夠接收到大于255個(gè)字節(jié)的數(shù)據(jù)呢(緩沖區(qū)溢出后前面的數(shù)據(jù)被覆蓋)?可以考慮設(shè)置“最大字符計(jì)數(shù)”為結(jié)束消息方式,將數(shù)據(jù)分為多個(gè)部分依次進(jìn) 行接收。 以上理解沒有考慮s7-200的具體應(yīng)用細(xì)節(jié),詳細(xì)的技術(shù)細(xì)節(jié)可以參考手冊(cè)說(shuō)明,僅供參考。 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í)間(可以理解為兩幀數(shù)據(jù)之間的間隔)為50ms(小于發(fā)送間隔時(shí)間100ms),則當(dāng)發(fā)送完第一幀? 01? 02? 03? 04? 05? 后,啟動(dòng)空閑時(shí)間檢測(cè),超過(guò)50ms即認(rèn)為一幀數(shù)據(jù)結(jié)束,準(zhǔn)備接收下一幀數(shù)據(jù)。這可以看做是“字符間定時(shí)器”結(jié)束消息方式。 請(qǐng)教,這種空閑線時(shí)間結(jié)束,也能觸發(fā)接收完成中斷嗎?SMB87該設(shè)置成多少呢? 1.“每接收一個(gè)字符會(huì)產(chǎn)生一次中斷”; 2.“每接收一個(gè)結(jié)束字符會(huì)產(chǎn)生一次中斷”。 兩個(gè)指的不是同一個(gè)中斷? ,1是指中斷號(hào)8、25
43、,2是指中斷號(hào)23、24 1、“字符中斷”指的是SMB2每接收一個(gè)字符即產(chǎn)生一次中斷。 2、“結(jié)束字符中斷”指的是接收緩沖區(qū)出現(xiàn)指定的結(jié)束字符時(shí)產(chǎn)生一次中斷。 串口通訊協(xié)議都是由數(shù)個(gè)或更多的字符(字節(jié))組成一幀,每個(gè)字符都有各自特定的意義。 對(duì) S7-200來(lái)說(shuō),接收到的每個(gè)字符都要從SMB2中過(guò)一遍。因此對(duì)于簡(jiǎn)單的通訊協(xié)議,可以利用SMB2的字符接收中斷逐個(gè)讀取字節(jié),并排列成一個(gè)信息 幀。但是這樣的做法有個(gè)缺陷,即SMB2不斷地發(fā)出中斷請(qǐng)求;如果信息幀較長(zhǎng),處理一次所占用的資源較多。一旦出現(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ā)言: ? 我來(lái)發(fā)幾個(gè)SMB2的例子(特別適合初學(xué)者): SMB2為自由口接收字符的暫放區(qū),從端口0或端口1接收的每個(gè)字符都放在這里。 SMB2只能存放一個(gè)字節(jié)字符,而對(duì)方發(fā)送的一幀可能是很多字符,所以在接收到下個(gè)字符之前,應(yīng)該在中斷里將接收到的字符移走。 每接收一個(gè)字符會(huì)產(chǎn)生一次中斷,端口0產(chǎn)生中斷事件8,端口1產(chǎn)生中斷事件25。 例1:通訊方法(用串口調(diào)試軟件)控制PLC的輸出:
45、 PLC寫入如下程序:比如向PLC發(fā)1時(shí),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時(shí),Q0.0亮,發(fā)2,那么Q0.1亮,發(fā)255,那么從Q0.0到Q0.7都亮,發(fā)送0,則都不亮,你可以試試。 串口調(diào)試軟件設(shè)置:96
46、00波特率,數(shù)據(jù)位8,停止位1,無(wú)奇偶校驗(yàn)。 例2:如果有2個(gè)PLC,那么將兩個(gè)通訊口(PORT0)3? 3接,8? 8接。如果只有一個(gè)PLC,那么用串口調(diào)試軟件當(dāng)主站也可以。 主站程序:向從站發(fā)送4個(gè)字節(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 如果主從站同時(shí)啟動(dòng),或者從站啟動(dòng)比主站啟動(dòng)早,那么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 這個(gè)例子只是比上個(gè)例子少了3個(gè)中斷而已。 從站程序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里加個(gè)判斷,就不會(huì)發(fā)生接收數(shù)據(jù)錯(cuò)位的問(wèn)題。 以下是引用LaoHuai在2010-12-23? 11:45:24的發(fā)言: ? 我覺得做自由口通訊時(shí)容易出現(xiàn)的幾個(gè)問(wèn)題: 1? ? 0009? ? ? 端口0中同時(shí)執(zhí)行XMT/RCV ? ? ? 000B? ? ? 端口1中同時(shí)執(zhí)行XMT/RCV 經(jīng)常有人問(wèn),程序里只發(fā)送(XMT),怎么會(huì)出現(xiàn)同時(shí)執(zhí)行XMT/RCV呢? 其實(shí)這個(gè)有4種可能: 發(fā)送沒結(jié)束,又執(zhí)行發(fā)送 接收沒結(jié)束,又執(zhí)行接收 發(fā)送沒結(jié)束,又執(zhí)行接收 接收沒結(jié)束,又執(zhí)行發(fā)送 有3種解決方法:
53、 a? 用沿來(lái)執(zhí)行。 b? 在中斷程序里來(lái)執(zhí)行。 c? XMT用? SM4.5/? SM4.6來(lái)執(zhí)行,RCV根據(jù)SMB86的條件來(lái)執(zhí)行。 2? 發(fā)送結(jié)束可以(應(yīng)該)立即執(zhí)行接收,但接收結(jié)束不能立即發(fā)送,應(yīng)該延時(shí)發(fā)送。 3? 用字符中斷方式接收數(shù)據(jù)時(shí),中斷程序應(yīng)該足夠短,否則會(huì)丟數(shù)據(jù),中斷程序執(zhí)行的時(shí)間應(yīng)該小于傳送一個(gè)字節(jié)數(shù)據(jù)所需的的時(shí)間。 以下是引用鼠老爹在2010-12-31? 12:53:40的發(fā)言: ? 手冊(cè)上給出的一些自由口通訊示例,S7-200多以從站的面目出現(xiàn)。因此在邏輯上,PLC等待網(wǎng)絡(luò)上的數(shù)據(jù)請(qǐng)求,再發(fā)送應(yīng)答數(shù)據(jù);發(fā)送完畢后再次
54、啟動(dòng)接收。 如果PLC作為主站請(qǐng)求第三方儀表的數(shù)據(jù),且使用的是自定義通訊協(xié)議在編程的時(shí)候會(huì)遇到一些看起來(lái)很奇怪的現(xiàn)象。以下是我在編通訊程序時(shí)遇到的問(wèn)題和解決方法: 1、剛開始,按照一般的程序邏輯設(shè)置使用XMT和RCV指令。對(duì)儀表的輪詢都很正常,沒有異常情況發(fā)生。自以為程序走通了。 2、偶然切斷了個(gè)別從站(在現(xiàn)場(chǎng)這種情況是很普遍的),發(fā)現(xiàn)整個(gè)通訊全部歇菜了。重啟PLC,頭幾臺(tái)儀表的通訊正常,但是到了被切斷的從站又OVER了。 3、檢查PLC的狀態(tài)信息,看不出異常。監(jiān)控RS485總線,發(fā)現(xiàn)走過(guò)了空站號(hào)后PLC的XMT發(fā)送不出信息。 4、于是用VB寫了一個(gè)從站的模擬程序
55、與PLC通訊。從監(jiān)控上看出,從站有應(yīng)答,RCV正常處理接受信息后,XMT的發(fā)送沒問(wèn)題。而從站沒有應(yīng)答,RCV始終在等待,XMT便無(wú)法發(fā)送信息。 5、因此PLC端必須考慮終止接收。反復(fù)使用了幾種方法,最終選用了定時(shí)關(guān)閉接受功能的方法。 6、在程序的初始化中配置通訊口和接收控制參數(shù),然后將SM87.7(SM187.7)復(fù)位。 7、XMT執(zhí)行后將SM87.7(SM187.7)置位,啟動(dòng)接收以及一個(gè)定時(shí)器。 8、無(wú)論有否應(yīng)答,都由定時(shí)器去處理信息并關(guān)閉RCV功能,等待下一個(gè)通訊。 9、 RCV指令在主程序中由SM0.0使能。這點(diǎn)很重要。因?yàn)镾M87.7(SM187.7)被
56、修改后,必須執(zhí)行一次RCV指令才能啟停接收功能,所以RCV 作為“指令”始終被執(zhí)行不會(huì)影響整個(gè)程序的邏輯關(guān)系,且程序看上去也簡(jiǎn)潔,其它地方只要操作SM87.7(SM187.7)即可。 另外,在和一些集成了RS485端口的儀表做通訊時(shí),發(fā)現(xiàn)波特率的匹配上會(huì)有些問(wèn)題。主要原因還是對(duì)主頻進(jìn)行分頻后時(shí)鐘脈沖引起的誤差。這點(diǎn)上西門子的PLC適應(yīng)性比較強(qiáng),而合信的PLC適應(yīng)性差一些。 有 網(wǎng)友問(wèn)到“PLC能否同時(shí)與不同波特率的對(duì)象通訊”的問(wèn)題,竊以為可以解決。SMB30(SMB130)隨時(shí)可以賦值,也就是說(shuō)用戶可以即時(shí)修改自由口的 配置。按此邏輯,只要在XMT和RCV使能之前定義SMB30(S
57、MB130)就可以了。這一點(diǎn)與VB對(duì)COMM口的配置是一樣的;如果程序中沒有操作 COMM配置的指令,VB就按控件特性欄中的配置執(zhí)行;如果程序中有配置指令,就按程序的配置指令執(zhí)行。 以下是引用困惑迷茫求助在2011-01-04? 09:51:24的發(fā)言: ? 我曾經(jīng)使用過(guò)自由口通信,與36個(gè)儀表同時(shí)通訊,正常情況下通訊很好,可是只要其中一個(gè)儀表出現(xiàn)通訊中斷后,整個(gè)通訊就全部崩潰,無(wú)法執(zhí)行,請(qǐng)問(wèn)那位高手能指點(diǎn)下,為什么會(huì)出現(xiàn)該問(wèn)題 與 多個(gè)設(shè)備進(jìn)行通信時(shí)這時(shí)常見的問(wèn)題,主要是因?yàn)樵诔绦蛏先鄙賹?duì)錯(cuò)誤時(shí)的考慮,也就是只考慮了在正常情況下怎么去進(jìn)行輪詢,而忽略了當(dāng)伙伴沒有響應(yīng)或響應(yīng)數(shù) 據(jù)不對(duì)時(shí)的
58、處理。錯(cuò)誤處理的機(jī)制和方法在很大程度上影響著通信的質(zhì)量和效率,而我們往往不注意這方面,高級(jí)的開發(fā)者一般習(xí)慣先考慮錯(cuò)誤處理:)。錯(cuò)誤處理 的方法在于應(yīng)用者的需求,對(duì)于簡(jiǎn)單的應(yīng)用可以對(duì)錯(cuò)誤進(jìn)行相對(duì)簡(jiǎn)單的處理,比如在規(guī)定的時(shí)間內(nèi),某個(gè)伙伴沒有響應(yīng)時(shí)直接跳過(guò)對(duì)這個(gè)站的請(qǐng)求。 這里大家也不妨分享一下自己在錯(cuò)誤處理方面經(jīng)常所采用的方法。 以下是引用LaoHuai在2011-01-11? 13:42:41的發(fā)言: ? PLC做主站的時(shí)候,不管PLC連接的是單從站還是多從站,主站程序都應(yīng)該考慮到從站會(huì)發(fā)生故障,從站故障有兩種,一種是有故障,但不影響和主站通訊,另一種是有故障,不能和主站通訊,
59、例如從站掉電,通訊線故障或者從站本身故障導(dǎo)致的不能和主站通訊。 對(duì)于后者,主站在發(fā)送后,從站是不會(huì)回復(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過(guò)程需要以下步驟: 1? 使能位:SM87.7=1/SM187.7=1,執(zhí)行RCV的時(shí)候會(huì)檢查該位 2? 執(zhí)行RCV 3? 等待消息起始條件 4? 接收信息 5? 等待消息結(jié)束條件 6? 退出接收狀態(tài) RCV指令
60、啟動(dòng)后并不一定就接收消息,如果消息起始條件沒有達(dá)到,那就一直處于等待接收的狀態(tài); 如果消息始終沒有開始或者結(jié)束,通信口就一直處于接收狀態(tài)。這時(shí)如果嘗試執(zhí)行XMT指令,就不會(huì)發(fā)送任何消息。 所以要結(jié)束接收RCV接收狀態(tài)后才能執(zhí)行XMT。 二:如何結(jié)束RCV接收狀態(tài)? 手冊(cè)上給出6種結(jié)束條件: 1.結(jié)束字符檢測(cè) 2.字符間計(jì)時(shí)器 3.信息計(jì)時(shí)器 4.最大字符計(jì)數(shù) 5.校驗(yàn)錯(cuò)誤 6.用戶終止 方法1:前4種條件在從站發(fā)生通訊故障后就失效了,必須要配合用戶終止 一般執(zhí)行XMT后,在發(fā)送完成中斷里執(zhí)行RCV,
61、同時(shí)啟動(dòng)定時(shí)中斷或者啟動(dòng)定時(shí)器或者執(zhí)行開始間隔時(shí)間BITIM,計(jì)時(shí)時(shí)間到復(fù)位使能位SM87.7/SM187.7,同時(shí)執(zhí)行RCV,這樣結(jié)束RCV指令,比如定時(shí)中斷里發(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毫秒后自動(dòng)結(jié)束接收狀態(tài)。 如果用的是字符中斷方式接收信息,那么將中斷分離后即可發(fā)送 DTCH? ? ? 8 XMT? ? ? ? VB100,? 0 很多人說(shuō)某個(gè)從站故障后,整個(gè)通訊就斷了,那么問(wèn)題可能就出在這里。 以下是引用happy? Julia在2011-01-14? 09:46:14的發(fā)言: ? 看來(lái)用過(guò)自由口通信的高手真多呀,各位大俠能不能分享一下在實(shí)際工程項(xiàng)目中都遇到了哪些問(wèn)題,都是怎么解決的呀,也好讓我們這些初次使用的以后少走彎路,遇到問(wèn)題也知道如何處理了
63、。先謝謝了。 頂,支持175樓,如果大家分享的實(shí)際問(wèn)題越多,我們才會(huì)收獲更大呀。 這里說(shuō)一下我曾經(jīng)遇到的問(wèn)題: 1.剛做自由口編程時(shí),一下載下去,編程軟件就無(wú)法和CPU通信了,后來(lái)打到停止?fàn)顟B(tài),CPU才恢復(fù)PPI,可以正常監(jiān)控,下載了。 2.還有一次自由口用RCV接收,接收到的數(shù)據(jù)總是一部分,不全,反復(fù)檢查做實(shí)驗(yàn),才發(fā)現(xiàn)原來(lái)是結(jié)束的定時(shí)器時(shí)間設(shè)短了,導(dǎo)致數(shù)據(jù)沒有接收完,RCV就結(jié)束了,增大了時(shí)間,一切就OK了。 以下是引用大個(gè)笨熊在2011-01-20? 14:10:36的發(fā)言: ? 用結(jié)束字符作為結(jié)束條件的時(shí)候,如果與設(shè)備的通信斷了,CPU就會(huì)停滯在接受狀態(tài),之后的發(fā)送也不成功了,通訊也徹底斷了。 后來(lái)別人教我在發(fā)送前面用復(fù)位SMB87.7結(jié)束發(fā)送就好了。
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年數(shù)學(xué)九下《圓周角定理的推論與圓內(nèi)接四邊形》課件(新湘教版)
- 幼兒園眼睛課件
- 直線與橢圓的位置關(guān)系15版
- 北京垃圾分類
- 錨索施工工藝及質(zhì)量控制培訓(xùn)doc資料課件
- 例廣東中醫(yī)藥大學(xué) 中醫(yī)學(xué)
- 水資源的合理利用課件
- 小學(xué)二年級(jí)班家長(zhǎng)會(huì)
- 四.項(xiàng)目的技術(shù)經(jīng)濟(jì)分析
- 安全文明施工圖集萬(wàn)科版本
- 旅游空間布局課件
- 北師版八下數(shù)學(xué)第五章-分式與分式方程本章專題整合訓(xùn)練課件
- 天然氣地球化學(xué)(與“天然氣”有關(guān)的文檔共46張)
- 北師大版四年級(jí)語(yǔ)文下冊(cè)《海上日出》精課件
- LED培訓(xùn)資料XXXX