【玩轉(zhuǎn)485】5.數(shù)據(jù)的接收3【連載5】
林慧玲
發(fā)布于2015-02-13 15:41
2411
0
標(biāo)簽:通訊
上一篇文章向大家介紹了通過起始字符和結(jié)束字符判斷一段報文的開始和結(jié)束,本文我們向大家介紹如何利用時間判斷的方式來接收報文。
為什么要使用時間的方式來對報文進(jìn)行判斷呢?其實大家可以設(shè)想這樣一種情況,當(dāng)我們使用起始字符和結(jié)束字符的方式來判斷一段報文的開始與結(jié)束,如果在報文中間出現(xiàn)了起始字符或者結(jié)束字符,將會發(fā)生什么情況能?相信看過上一篇文章的朋友肯定可以發(fā)現(xiàn)其中的缺點,那么解決這些缺點的方法就是通過時間來判斷報文的起始與停止。
首先我們要明確報文一般分為固定長度和不固定長度兩種形式。
1 報文長度固定
圖1-1
當(dāng)有些通訊協(xié)議中報文長度固定的情況下PLC接收每段報文所需的時間都是一樣的,這樣我們就可以根據(jù)報文的長度算出來接收報文所需的時間,然后PLC就可以從接收到個字符開始計時,計時達(dá)到設(shè)定時間就算一段報文接收完成。
這里我們打個比方,如果是通訊速率是9600bps,每個字符10個位(1個起始位、1個停止位、8個數(shù)據(jù)位、無效驗位)那么我們接收一個字符就需要(1000/9600)*10≈1.04ms。如果每個報文6個字符那么PLC接收這段報文就需要6*1.04 = 6.24ms,這時我們就可以在PLC中設(shè)定從開始接收報文起6.24ms后停止接收報文,然后從新進(jìn)入等待接收報文的狀態(tài)。
2 報文長度不固定
圖2-1
在有的協(xié)議中報文的長度是不固定的,那這種情況下我們應(yīng)該如何判斷一段報文起始和停止呢?其實這個也是比較簡單的當(dāng)報文中字符的數(shù)量是不固定的時候,我們可以通過字符與字符之間的時間間隔來進(jìn)行判斷,通常情況是3.5個字符時間。那么在9600bps的通訊速率,每個字符10個位的情況下就是3.5*1.04 = 3.64ms的時間中如果PLC沒有接收到數(shù)據(jù),就認(rèn)為一段報文已經(jīng)接收完成,下面再接收到的數(shù)據(jù)就算一段新報文的開始。
這里可能有的朋友會有疑問,如果兩段報文的間隔小于3.5個字符時長那不就出問題了么?其實有這種擔(dān)心的朋友主要是對485通訊收發(fā)數(shù)據(jù)的方式不夠了解。由于485通訊是半雙工通訊方式,所以一般都是A站點接收一個B站點發(fā)送的報文,然后給B站點發(fā)送一個報文,B站點接收到A站點發(fā)送的數(shù)據(jù)后再返給A站點一個報文。如圖 2-2
圖 2-2
因此當(dāng)PLC接收到一個報文后不是立刻接收下一個報文,而是先發(fā)送一個報文出去,由于發(fā)送一組報文的時間肯定大于3.5個字符時長,所以不會存在被接收的兩個報文之間的時長小于3.5個字符長度的情況。
本文就先給大家普及一下基本概念,下一篇文章我們來具體研究一下程序的編寫。
作者:馬樂
版權(quán)為技成所有,未經(jīng)同意,盜取必究!