西門子S7-200的自由口通信需要通過編程設置串口的工作模式,安排發送和接受指令的觸發順序,還要設定接收的起始和結束條件。對于剛剛開始使用s7-200的工程師來說,的確有很多細微處易犯錯誤。一般碰到客戶抱怨通信不上的問題,就要逐一幫客戶確認編程配置是否正確。雖然麻煩,不過逐條查下去,總能查到錯誤所在并解決問題。但是有一次客戶遇到的問題頗出人意料,還真耗費了一些時間。 客戶反應在編寫了自由口通信程序之后,PLC可以發送數據給通信伙伴,但是卻收不到任何伙伴方發出的數據。能發送數據給對方,說明通信端口設置沒有問題。極有可能是端口被其他通信指令占用導致無法進入接收狀態。比如說用常開點調用XMT,或者沒有對接收的故障狀態進行判斷并終止接收,從而導致后續的XMT和RCV都無法被正確執行。客戶表示他的程序并不存在這種情況。但是為了測試問題所在,客戶下載了一個僅包含條件觸發RCV的程序下去,還是接收不到數據。監控程序RCV指令已被正常執行。 那么是不是接收的起始條件設置不當?客戶使用的是起始字符,這并無不妥。并且改成空閑線檢測之后,問題依然存在。難道是對方發送的信號有問題?用串口調試軟件來測試,是可以接收到的。眼見這幾個常見錯誤都沒能cover住這個問題,我只好從頭一步步地跟客戶確認。但是還是沒能發現任何破綻。郁悶之下,只好讓客戶把程序發過來看看。
不知道大家看出來沒有?客戶在設定完空閑線時間SMW90和消息定時器溢出值SMW92后,慣性地將接受地大字符數SMB94也寫成了傳送字SMW94。而西門子PLC的高低字節是逆序的,也就是說SMB94為高有效字節,SMB95為低有效字節。見手冊中的如下說明 結果就是大字符數100被傳給了SMB95,SMB95是神馬呢?神馬也不是,總之與接收條件無關。而真正大字符數存儲字節SMB94被賦值為0。大字符數都為0了,那當然是接收不到任何數據了。小馬虎一下就耽誤了這許多時間,各位看官引以為戒吧!
BBC LT371a GJR2 240200 R1446867 R2 70AB01b-EDE4ACLOOS 033.56.06.00896-131C1/0001/X20rb0.09/4-71IFM M01252 PMD 3D6FX1118-6AB0127868 8xM12 4"" 0141711373EX 095549ALTISTART 3 ATS23. ATS23.D16NGIMATIC Z-0825Drbf0.09/4-71176X0826CLOOS 033.05.26.00NZM1 NZMN 1-M80 M22-K10 M22-K016EC2110-0A E:02AMKA 100G10KAN AC152 CPM152-A1E8A10BF100 B 77202LX0FG008 Coil 024546 LX0 FG008NTCL 01 6636997 D1NZMB 1-A100V1.7 011-00143 HM2 1211 NE: 000619免責聲明:AMIKON我們銷售新產品和停產產品,獨立渠道購買此類特色產品。阿米控不是本網站特色產品的授權分銷商、經銷商或代表。本網站上使用的所有產品名稱/產品圖片、商標、品牌和徽標均為其各自所有者的財產。帶有這些名稱,圖片、商標、品牌和徽標的產品描述、描寫或銷售僅用于識別目的,并不表示與任何權利持有人有任何關聯或授權。
