【玩轉(zhuǎn)485】6.數(shù)據(jù)的接收4【連載6】
林慧玲
發(fā)布于2015-02-14 14:49
2255
0
標(biāo)簽:通訊
上一篇文章我們搞清楚了固定長度報文,和不固定長度報文通過時間來判斷報文的起始與結(jié)束的原理,本文我們先對固定長度報文方式進(jìn)行編程。
1、寄存器設(shè)定
編寫程序之前我們先看看對應(yīng)的特殊位寄存器應(yīng)該如何設(shè)置。
SMB30 = 2#00001001=16#9
圖1-1
1) 自由口模式。第0、1位。SM30.0=1、SM30.1=0
2) 通訊速率9600bps。第2、3、4位。SM30.2=0、SM30.3=1、SM30.4=0
3) 每個字符的數(shù)據(jù)位是8位。第5位。SM30.5=0
4) 不選用奇偶效驗。第6、7位。SM30.6=0、SM30.7=0
SMB87 = 2#10011100 =16#9C
圖1-2
1) 不使用中斷條件作為檢測信息的開始。第1位。SM87.1=0
2) 當(dāng)SMW92中的定時時間超出時終止接收。第2、位。SM87.2=1
3) 定時器是信息定時器。第3位。SM87.3=1
4) 使用SMW90的值檢測空閑狀態(tài)。第4位。SM87.4=1
5) 不檢測結(jié)束字符。第5位。SM87.5=0
6) 不檢測起始字符。第6位。SM87.6=0
7) 允許信息接收功能。第7位。SM87.7=1
注:第0位為無效位不使用,永久為0。
SMW90 = 4
將SMW90設(shè)定成4表示報文間空閑時間大于4ms后接收的個字符是新信息的開始。
SMW92 = 6
由于我們設(shè)定SM87.3為1確定使用固定報文長度方式,假設(shè)報文長度為6個字符,那么在9600bps通訊速率下1個字符(10個位)的接收需要1.04ms,6個字符的接收就需要6.24ms,因此將SMW92設(shè)定成6表示從接收到個字符開始后6ms停止接收信息,同時空閑4ms后(SMW90 = 4)接收到的個字符是新信息的開始。
SMB94 = 255
SMB94定義接收緩沖區(qū)大小,此處定義為大255字節(jié)。(注:接收緩沖區(qū)是用來存放接收到的數(shù)據(jù)的區(qū)域,大255字節(jié),大家可以根據(jù)通訊情況自由定義。)
2、程序編寫
圖2-1
圖2-2 以上就是固定報文長度方式下接收數(shù)據(jù)的程序,此處我們設(shè)定的報文長度是6個字符,下面我們通過串口調(diào)試軟件給PLC發(fā)送7個字符長度(AA 11 22 BB 23 45 C1)的一個報文看看會發(fā)生什么情況。
圖2-3 圖 2-4
由圖 2-4狀態(tài)表監(jiān)控結(jié)果我們可以發(fā)現(xiàn)我們只能接收到6個字符,第7個字符C1并沒有接收到。
作者:馬樂
版權(quán)為技成所有,未經(jīng)同意,盜取必究!