西門子S7-300CPU代理商
自由口通訊是工業(yè)現(xiàn)場常見的一種通訊方式。由于依靠編程實現(xiàn),通訊對象通常又是一些儀表、打印機(jī)等第三方設(shè)備。因此碰到的問題相對較多。處理起來也比較棘手。通常自由口通訊的第一步,就是對S7-300 通訊端口進(jìn)行定義,如波特率、數(shù)據(jù)位、校驗位以及停止位等。
那么這些參數(shù)的含義是什么?它們的定義又會對通訊產(chǎn)生怎樣的影響?在故障診斷中如何調(diào)整?下面我們就通過幾個案例給大家做個分享。
案例一:字符接收缺失
故障現(xiàn)象
某現(xiàn)場使用S7-200 SMART 自由口通訊協(xié)議接收儀表數(shù)據(jù)。以常用的字符間定時器作為接收消息的結(jié)束條件。程序中規(guī)定定時器時間寄存器SMW92=5ms,傳輸7個數(shù)據(jù)位,偶校驗。實際測試時發(fā)現(xiàn)當(dāng)通訊波特率為4800bps、9600bps、2400bps時均可以正常接收到儀表數(shù)據(jù)。但是當(dāng)波特率設(shè)置為1200bps時,卻只能接收到首字節(jié)的數(shù)據(jù)。
案例分析
1200bps波特率代表每秒可以傳輸1200bit,1秒等于1000000us,可以計算出每一個bit需要的時間約為833.33us。
傳送的數(shù)據(jù)由多個字符組成。每個字符由1位起始位+7位數(shù)據(jù)位+1位校驗位+1位停止位=10位構(gòu)成。
可以計算出傳送1個字符需要的時間為8333.3us,即8.333ms,也就是說傳輸1個字符至少需要8.3ms。
如圖1所示。如果字符間定時器SWM92小于8.333ms,則接收到一個字符后終止,后面的字符無法接收到。
圖1.計算發(fā)送一個字符需要的時間
圖2為字符間定時器作為接收結(jié)束條件的示意圖。接收到每個字符的停止位時重新啟動字符間定時器,字符間的時間超出 SMW92中定的毫秒數(shù),接收消息功能將終止。之后接收到的字符被忽略。因此會出現(xiàn)以上的故障現(xiàn)象。
解決的方法是:調(diào)整波特率或者調(diào)整定時器SMW92的時間。想必您對自由口參數(shù)以及接收條件了解之后,對以上問題便有了深刻的理解,當(dāng)然也就更好排查。
圖2. 使用字符間定時器作為接收結(jié)束條件
案例二:接收無法終止
故障現(xiàn)象
某現(xiàn)場,當(dāng)從站故障或者通訊電纜損壞時, 接收端CPU 的通訊端口始終處于接收狀態(tài)。并且無法發(fā)送數(shù)據(jù)。由于一直接收不到數(shù)據(jù),后續(xù)的讀寫操作也無法進(jìn)行。
當(dāng)遇到這種情況,我們該如何結(jié)束當(dāng)前端口的接收狀態(tài),以便繼續(xù)執(zhí)行后續(xù)自由口的發(fā)送和接收操作呢?
案例分析
有兩種處理該問題的方法:
1. 使用任意字符檢測作為接收消息的起始條件,選擇消息定時器和其它結(jié)束條件組合作為接收消息的結(jié)束條件。
原理如圖3所示,這種接收條件下,RCV接收指令觸發(fā)的同時開始計時,計時時間到則結(jié)束信息接收。也就是說這種方式下,接收操作只和接收時刻和消息定時器兩個因素相關(guān)。
當(dāng)觸發(fā)RCV指令并且到達(dá)消息定時器設(shè)定的時間后,即使沒有接收到任何數(shù)據(jù),也會結(jié)束當(dāng)前的接收狀態(tài)。反之,如果消息定時器的時間到達(dá),但是實際接收數(shù)據(jù)還沒有結(jié)束,晚于定時時間到達(dá)的信息將被忽略。
圖3 使用任意字符開始消息接收和消息定時器終止消息接收
2. S7-200 SMART CPU 在發(fā)送完成中斷中執(zhí)行 RCV 指令并捕捉信息接收的開始時間。如果捕捉間隔時間超出一定時間依然未接收到信息,則認(rèn)為信息接收超時,通過程序人為終止信息的接收。
使用圖4中的BGN_ITIME指令記錄執(zhí)行RCV時的起始時間,圖5中的CAL_ITIME指令記錄執(zhí)行RCV的經(jīng)過時間,當(dāng)執(zhí)行RCV的時間超過100ms,則禁止RCV接收消息。
通過以上兩種方法,就可以幫助我們解決當(dāng)從站故障或通訊電纜損壞時,通訊接口一直處于接收狀態(tài)的問題。
特別是由于某些情況下PLC發(fā)送的數(shù)據(jù),儀表并沒有接收到時。此時儀表也不會反饋數(shù)據(jù)給PLC,則PLC會一直處于等待狀態(tài)。即使此時儀表或者線路恢復(fù)正常,儀表由于沒有再次接收到PLC的數(shù)據(jù)請求,也不再會反饋數(shù)據(jù)的問題。
案例三:字符接收異常
故障現(xiàn)象
S7-200 SMART A使用自由口通訊協(xié)議發(fā)送數(shù)據(jù)給S7-200 SMART B,PLC A發(fā)送的數(shù)據(jù)為16#41和16#42,但是PLC B接收到的數(shù)據(jù)是16#5F和16#2F。接送和發(fā)送的數(shù)據(jù)不一致。故障現(xiàn)象如下圖所示:
圖6為PLC A的程序,利用自由口發(fā)送指令XMT發(fā)送16#41、16#42。
圖6 PLC A利用XMT指令發(fā)送16#41、16#42
圖7為PLC B,利用RCV指令接收數(shù)據(jù),接收到2個數(shù)據(jù),分別是16#5F和16#2F,同時注意到接收信息狀態(tài)字節(jié)SMB86低位為1,即“終止接收消息,原因可能為奇偶校驗、組幀、中斷或超限錯誤”。
圖7 PLC B 利用RCV指令接收數(shù)據(jù)
為什么會出現(xiàn)這種情況?其實最終造成該故障現(xiàn)象的原因是通訊線路接反。下面我們從數(shù)據(jù)幀的角度來分析問題原因。
案例分析
如圖8所示,為PLC發(fā)送的正常的數(shù)據(jù)幀結(jié)構(gòu),包括1個起始位、8個數(shù)據(jù)位、無校驗以及1個停止位。
根據(jù)如上的數(shù)據(jù)幀,該如何區(qū)分出哪些是數(shù)據(jù)呢?
我們知道每一個數(shù)據(jù)幀包含多個字符,每一個字符都包含起始位、數(shù)據(jù)位、0或1個校驗位以及1個停止位,其中起始位作為每一個字符的起始標(biāo)志,為低電平,即只有當(dāng)檢測到了起始位后,之后的數(shù)據(jù)才會被識別為數(shù)據(jù)位。
第一個起始位之后的數(shù)據(jù)為2# 0100 0001=16# 41,
第二個起始位之后的數(shù)據(jù)為 2# 0100 0010=16# 42,
當(dāng)線路接反,PLC發(fā)送的數(shù)據(jù)幀為以下結(jié)構(gòu),
圖9 接收的數(shù)據(jù)幀結(jié)構(gòu)
同樣的,我們需要找到低電平的起始位,如圖10所示,
圖10 接收的數(shù)據(jù)幀結(jié)構(gòu)
第一個起始位之后的數(shù)據(jù)為2# 0101 1111=16# 5F
第二個起始位之后的數(shù)據(jù)為 2# 0010 1111=16# 2F
我們注意到,2F之后沒有高電平,即沒有停止位,所以PLC B接收到數(shù)據(jù)后報故障是由于組幀錯誤,即接收的到16#2F并不是一個完整的組幀結(jié)構(gòu)。
通過以上的分析,我們了解了為什么線路接反后,會得到不一樣的數(shù)據(jù)。通過了解自由口通訊的數(shù)據(jù)幀結(jié)構(gòu)的方式,我們就能夠準(zhǔn)確的判斷出問題背后的原因。
總結(jié)
以上分享了幾個常見的通問題以及處理思路。 實際在工業(yè)現(xiàn)場中我們會遇到各種各樣的通訊方式和形形色色的通問題。可能是工業(yè)以太網(wǎng)的、Profinet通訊的、也有可能是MODBUS RTU通訊的……
那么如何快速準(zhǔn)確的處理項目上可能會遇到的各種通問題呢?西門子工業(yè)1847學(xué)習(xí)平臺上的《S7-200 SMART通訊小技巧》系列視頻希望能夠幫到您。在此系列視頻中,我們歸納總結(jié)了一些典型應(yīng)用場景下通問題的處理方法和注意事項供大家參考。初步規(guī)劃內(nèi)容如下:
•您了解自由口通訊端口參數(shù)的定義嗎?
•自由口通訊之XMT指令
•自由口通訊之RCV指令
•不使用RCV指令如何接收數(shù)據(jù)?
•自由口通訊接收不到數(shù)據(jù)如何排查?
•MODBUS RTU如何估算數(shù)據(jù)的刷新時間
•PROFINET IO通訊診斷方法以及通訊讀寫等技術(shù)內(nèi)容
西門子S7-300CPU代理商