【玩轉(zhuǎn)485】7.數(shù)據(jù)的接收5【連載7】
林慧玲
發(fā)布于2015-02-14 14:59
1997
0
標(biāo)簽:通訊
通過時(shí)間方式判斷進(jìn)行數(shù)據(jù)的接收的兩種方式,我已經(jīng)詳細(xì)的向大家介紹了固定長度報(bào)文情況下PLC如何接收數(shù)據(jù),本文我就向大家介紹一下當(dāng)報(bào)文長度不固定的情況下我們?cè)撊绾慰刂芇LC接收信息。
首先我們回顧一下當(dāng)協(xié)議中報(bào)文的長度不固定的情況下,我們是通過判斷字符間的空閑時(shí)間的方式來判斷一段報(bào)文的起始,通常是字符與字符之間空閑時(shí)間超過3.5個(gè)字符傳輸時(shí)間,我們就認(rèn)為一段報(bào)文接收完畢,之后接收到的報(bào)文就是一段新的報(bào)文。下面我們來看看這個(gè)程序如何寫。
1 寄存器設(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#10010100 =16#94
圖1-2
1) 不使用中斷條件作為檢測(cè)信息的開始。第1位。SM87.1=0
2) 當(dāng)SMW92中的定時(shí)時(shí)間超出時(shí)終止接收。第2、位。SM87.2=1
3) 定時(shí)器是內(nèi)部字符定時(shí)器。第3位。SM87.3=0
4) 使用SMW90的值檢測(cè)空閑狀態(tài)。第4位。SM87.4=1
5) 不檢測(cè)結(jié)束字符。第5位。SM87.5=0
6) 不檢測(cè)起始字符。第6位。SM87.6=0
7) 允許信息接收功能。第7位。SM87.7=1
注:第0位為無效位不使用,永久為0。
SMW90 = 4
將SMW90設(shè)定成4表示報(bào)文間空閑時(shí)間大于4ms后接收的個(gè)字符是新信息的開始。
SMW92 = 4
由于我們?cè)O(shè)定SM87.3 = 0確定使用報(bào)文長度不固定方式,在9600bps通訊速率下1個(gè)字符(10個(gè)位)的接收需要1.04ms,3.5個(gè)字符的時(shí)間需要3.64ms,因此將SMW92設(shè)定成4表示當(dāng)字符與字符之間的空閑時(shí)間超過4ms時(shí)停止接收信息(注:SMW92不支持小數(shù)),同時(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ù)的程序,下面我們從電腦向PLC發(fā)送兩組長度不同的報(bào)文 AA 11 22 BB 23 45 C1和AA11 22 BB 23 45 C1 54,看看效果。
圖2-3
圖2-4
圖2-5
圖2-6
由上面兩次操作我們可以看到當(dāng)報(bào)文長度不固定的時(shí)候電腦向PLC發(fā)送幾個(gè)字符PLC就會(huì)接收幾個(gè)字符。
作者:馬樂
版權(quán)為技成所有,未經(jīng)同意,盜取必究!