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