?? ——多站遠(yuǎn)程無(wú)線控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā).htm
字號(hào):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0063)http://www.21ic.com/new_info/news/files/news/20031222161310.asp -->
<HTML><HEAD><TITLE>——多站遠(yuǎn)程無(wú)線控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā)</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TD {
FONT-SIZE: 12px
}
INPUT {
FONT-SIZE: 12px; font-fammily: verdana,宋體
}
A:link {
FONT-SIZE: 12px; COLOR: #0000ff; LINE-HEIGHT: 16px; TEXT-DECORATION: underline
}
A:visited {
FONT-SIZE: 12px; COLOR: #660066; LINE-HEIGHT: 16px; TEXT-DECORATION: underline
}
A:hover {
FONT-SIZE: 12px; COLOR: #ff0000; TEXT-DECORATION: underline
}
.unnamed1 {
FONT-SIZE: 12px; FONT-FAMILY: "Arial", "Helvetica", "sans-serif"
}
.white {
FONT-SIZE: 12px; COLOR: #ffffff; LINE-HEIGHT: 16px
}
.b:link {
FONT-SIZE: 12px; COLOR: #3366cc; LINE-HEIGHT: 18px; TEXT-DECORATION: underline
}
.b:visited {
FONT-SIZE: 12px; COLOR: #813f1b; LINE-HEIGHT: 18px; TEXT-DECORATION: none
}
.b:hover {
FONT-SIZE: 12px; COLOR: #ffa037; LINE-HEIGHT: 18px; TEXT-DECORATION: underline
}
.148xg {
FONT-SIZE: 14px; COLOR: #0000ff; LINE-HEIGHT: 14pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: underline
}
.128dt {
FONT-SIZE: 14px; COLOR: #9999cc; LINE-HEIGHT: 14pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.heigh150 {
LINE-HEIGHT: 150%
}
</STYLE>
<META content="MSHTML 6.00.2734.1600" name=GENERATOR></HEAD>
<BODY text=#000000 bgColor=#ffffff leftMargin=0 topMargin=5>
<TABLE cellSpacing=0 cellPadding=0 width=768 align=center border=0>
<TBODY>
<TR>
<TD align=middle width=168 height=80><IMG
src="——多站遠(yuǎn)程無(wú)線控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā).files/21ic.gif"></TD>
<TD width=472>
<SCRIPT language=javascript
src="——多站遠(yuǎn)程無(wú)線控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā).files/ads.htm"></SCRIPT>
</TD>
<TD height=80>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=b12 align=middle height=30><FONT
face="Arial, Helvetica, sans-serif" color=#000000>
<SCRIPT language=JavaScript
src="——多站遠(yuǎn)程無(wú)線控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā).files/date.js"></SCRIPT>
</FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=1 width=768 align=center border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=3 width=766 align=left border=0>
<TBODY>
<TR bgColor=#d8d6ba>
<TD width=3 height=20></TD>
<DIV id=Position></DIV>
<TD width=378>
<FORM name=email
action=http://www.21icsearch.com/buzi/mail2/chkemail.asp method=post
target=_blank><B>電子工程周刊:</B> <INPUT class=main
style="BORDER-RIGHT: #0097cf 1px solid; BORDER-TOP: #0097cf 1px solid; BORDER-LEFT: #0097cf 1px solid; BORDER-BOTTOM: #0097cf 1px solid; BACKGROUND-COLOR: #ffffff"
maxLength=255 size=30 value=輸入您的Email name=email> <INPUT class=jbutton type=submit value=訂閱> </TD></FORM>
<DIV></DIV>
<DIV id=Time></DIV>
<DIV id=Image></DIV>
<DIV id=Title></DIV>
<TD width=418>
<MARQUEE onmouseover=this.scrollDelay=99000
onmouseout=this.scrollDelay=80 scrollAmount=2 scrollDelay=80
width="80%"><FONT color=#cc0000><IMG height=12
src="——多站遠(yuǎn)程無(wú)線控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā).files/xilan_arrow.gif"
width=16>每周自動(dòng)接收行業(yè)新聞,技術(shù)資料,設(shè)計(jì)文章</FONT></MARQUEE></TD>
<DIV></DIV>
<TD width=9></TD></TR></TBODY></TABLE>
<DIV></DIV>
<DIV id=Time></DIV>
<DIV id=Image></DIV>
<DIV id=Title><TD< td></DIV></TD></TR></TBODY></TABLE></TD></TR></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=0 width=768 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top width=617 height=2>
<TABLE cellSpacing=0 cellPadding=0 width=583 align=center border=0>
<TBODY>
<TR>
<TD align=middle height=31><FONT size=4><B>多站遠(yuǎn)程無(wú)線控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā)
</B></FONT></TD></TR>
<TR>
<TD align=middle height=15>文章作者:毛云祥 劉春生 張劍云<BR>文章類(lèi)型:設(shè)計(jì)應(yīng)用
文章加入時(shí)間:2003年12月22日16:13</TD></TR>
<TR>
<TD align=right><FONT color=#cc0000>文章出處:國(guó)外電子元器件</FONT> </TD></TR>
<TR>
<TD height=15>
<HR width="100%" noShade SIZE=1>
</TD></TR>
<TR>
<TD height=15>
<TABLE cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=530 align=center border=0>
<TBODY>
<TR>
<TD class=heigh150 height=15>
<DIV id=Content><FONT face=宋體>
<B>摘要:</B></FONT>多站遠(yuǎn)程無(wú)線控制系統(tǒng)是以計(jì)算機(jī)為中心控制,用多個(gè)信號(hào)源作為下位機(jī)通過(guò)無(wú)線模塊進(jìn)行通信,文中介紹了通過(guò)無(wú)線數(shù)傳模塊實(shí)現(xiàn)無(wú)線通訊以及ActiveX控件的使用方法,提出了使系統(tǒng)應(yīng)用程序更安全可靠,效率更高,維護(hù)更加方便的幾種措施。
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋體; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<B>關(guān)鍵詞:</B></SPAN>串行通信 ActiveX控件 查詢接收 動(dòng)態(tài)數(shù)組 最佳化TimeDelay</P>
<P style="TEXT-INDENT: 0px"><B>1 多站遠(yuǎn)程無(wú)線控制系統(tǒng)組成</B></P>
<P
style="TEXT-INDENT: 30px">多站遠(yuǎn)程無(wú)線控制系統(tǒng)是以計(jì)算機(jī)作為中心控制站,用多個(gè)信號(hào)源作為下位機(jī),通過(guò)無(wú)線模塊進(jìn)行數(shù)據(jù)通信的。系統(tǒng)中的上位機(jī)作為數(shù)據(jù)接收和數(shù)據(jù)處理的中心站,當(dāng)下位機(jī)實(shí)時(shí)采集到上位機(jī)發(fā)送的數(shù)據(jù)后,便可進(jìn)行簡(jiǎn)單的數(shù)據(jù)處理并向上位機(jī)回送數(shù)據(jù)。</P>
<P
style="TEXT-INDENT: 30px">上位機(jī)無(wú)線通訊接口使用串行端口與無(wú)線數(shù)傳模塊相連,數(shù)字信號(hào)通過(guò)天線調(diào)制后送到下位機(jī)的一臺(tái)外置無(wú)線模塊,然后通過(guò)串口送入單片機(jī)進(jìn)行處理。系統(tǒng)組成框圖如圖1所示。<IMG
height=163 hspace=1 src="——多站遠(yuǎn)程無(wú)線控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā).files/3a.gif"
width=378 align=right vspace=1 border=0><BR><BR><B>2 串行通訊控件</B></P>
<P
style="TEXT-INDENT: 30px">利用VB開(kāi)發(fā)通信程序主要有兩種方法,一是利用VB本身提供的控件(CONTRALS),另一種是利用WINDOWS
API應(yīng)用程序接口。在實(shí)際應(yīng)用中,用VB
控件實(shí)現(xiàn)通訊的方法比調(diào)用SDK的API動(dòng)態(tài)連接庫(kù)的方法更加方便和快捷,而且可以用較少的代碼實(shí)現(xiàn)相同的功能,這就是用VB
控件實(shí)現(xiàn)通訊的優(yōu)點(diǎn)所在,下面主要介紹一下利用VB 控件實(shí)現(xiàn)無(wú)線通訊的方法。</P>
<P
style="TEXT-INDENT: 30px">VB控件工具箱中提供了一個(gè)使用非常方便的串行通訊控件MSComm,它提供了使用RS-232串行通訊上層開(kāi)發(fā)的所有細(xì)則。通過(guò)它完成串行通訊既可以使用查詢方式,又可以使用事件驅(qū)動(dòng)方式。控件的一些重要屬性及其說(shuō)明如表1所列。<BR><BR><B>表1
MSComm控件的屬性說(shuō)明</B></P>
<TABLE height=193 borderColorDark=#ffffff width="100%"
borderColorLight=#000000 border=1>
<TBODY>
<TR class=main>
<TD align=middle width="24%" height=12>屬 性</TD>
<TD align=middle width="18%" height=12>設(shè)定值</TD>
<TD width="58%" height=12>
<P align=center>說(shuō) 明</P></TD></TR>
<TR class=main>
<TD align=middle width="24%" height=12>ComPort</TD>
<TD align=middle width="18%" height=12>1</TD>
<TD width="58%" height=12>串口號(hào),如果串口1已所用,改用串口2</TD></TR>
<TR class=main>
<TD align=middle width="24%" height=12>InBufferSize</TD>
<TD align=middle width="18%" height=12>1024</TD>
<TD width="58%" height=12>接收緩沖區(qū)大小</TD></TR>
<TR class=main>
<TD align=middle width="24%" height=12>InputLen</TD>
<TD align=middle width="18%" height=12>0</TD>
<TD width="58%" height=12>從接收緩沖區(qū)讀取的字節(jié)數(shù),0表示全部讀取</TD></TR>
<TR class=main>
<TD align=middle width="24%" height=12>InputMode</TD>
<TD align=middle width="18%" height=12>1</TD>
<TD width="58%" height=12>接收數(shù)據(jù)的類(lèi)型,0表示文本類(lèi)型,1表示二進(jìn)制類(lèi)型</TD></TR>
<TR class=main>
<TD align=middle width="24%" height=12>OutBufferSize</TD>
<TD align=middle width="18%" height=12>1024</TD>
<TD width="58%" height=12>發(fā)送緩沖區(qū)大小</TD></TR>
<TR class=main>
<TD align=middle width="24%" height=7>RThreshold</TD>
<TD align=middle width="18%" height=7>1</TD>
<TD width="58%"
height=7>設(shè)定接收幾個(gè)字符時(shí)觸發(fā)OnComm事件,0表示不產(chǎn)生事件,1表示每接收一個(gè)字符就產(chǎn)生一事件</TD></TR>
<TR class=main>
<TD align=middle width="24%" height=36>SThreshold</TD>
<TD align=middle width="18%" height=36>0</TD>
<TD width="58%"
height=36>設(shè)定在觸發(fā)OnComm事件前,發(fā)送緩沖區(qū)所允許的最少的字符數(shù),0表示發(fā)數(shù)據(jù)時(shí)不產(chǎn)生事件,1表示當(dāng)發(fā)送緩沖區(qū)空時(shí)產(chǎn)生OnComm事件</TD></TR>
<TR class=main>
<TD align=middle width="24%" height=24>Settings</TD>
<TD align=middle width="18%" height=24>1200,n,8,1</TD>
<TD width="58%"
height=24>串口的參數(shù)設(shè)置,依次為波特率、奇偶校驗(yàn)(n-無(wú)校驗(yàn),e-偶校驗(yàn),o-奇校驗(yàn))、數(shù)據(jù)位數(shù)、停止位數(shù)</TD></TR></TBODY></TABLE>
<P style="TEXT-INDENT: 0px"><B>3 應(yīng)用實(shí)例</B></P>
<P
style="TEXT-INDENT: 30px">本系統(tǒng)的通訊網(wǎng)絡(luò)并非點(diǎn)對(duì)點(diǎn)的通訊,而是采用一點(diǎn)對(duì)多點(diǎn)的廣播式通訊方式。由于無(wú)線通訊可能會(huì)有空間的噪聲干擾,因此,需要采取一些抗干擾措施。首先是身份識(shí)別碼,因?yàn)榻o下位機(jī)編碼可以保證網(wǎng)絡(luò)通訊的有序性,因此,每個(gè)站都應(yīng)有身份碼。其次是包頭識(shí)別碼,由于在發(fā)送了傳輸命令之后,下位機(jī)開(kāi)始以打包的形式傳輸數(shù)據(jù),因而每一包都有一個(gè)包頭和包尾識(shí)別碼,假如識(shí)別碼有誤,則表明該次傳輸為不正常數(shù)據(jù)。因此,應(yīng)使用1200波特率、無(wú)奇偶校驗(yàn)位、8
個(gè)數(shù)據(jù)位、1 個(gè)停止位的較穩(wěn)定狀態(tài)。</P>
<P
style="TEXT-INDENT: 30px">上位機(jī)向下位機(jī)發(fā)送的參數(shù)有站號(hào)、狀態(tài)(開(kāi)機(jī)、關(guān)機(jī))、頻率、重復(fù)周期、脈寬、天線轉(zhuǎn)速、天線掃描方式、天線狀態(tài)、天線角度等。發(fā)送命令有手動(dòng)方式和自動(dòng)方式兩種。自動(dòng)方式是由定時(shí)器自動(dòng)完成的。為了及時(shí)知道分站的狀態(tài)和運(yùn)行情況,還應(yīng)設(shè)計(jì)定時(shí)查詢和即時(shí)查詢。</P>
<P
style="TEXT-INDENT: 30px">在無(wú)線通訊過(guò)程中,除了規(guī)定合理的協(xié)議之外,為了保證通訊的正確性,在數(shù)據(jù)發(fā)送時(shí)還應(yīng)適當(dāng)?shù)卦黾友訒r(shí),特別是當(dāng)速度較慢的計(jì)算機(jī)向速度較快的計(jì)算機(jī)發(fā)送數(shù)據(jù)時(shí),更應(yīng)適當(dāng)增加延時(shí)。</P>
<P
style="TEXT-INDENT: 30px">由于該項(xiàng)目的軟件源代碼較長(zhǎng),故只給出和串口通訊有關(guān)的程序片段供大家參考。筆者在工作中實(shí)踐了三種通訊方式,即查詢方式、事件驅(qū)動(dòng)方式、<IMG
height=332 hspace=1 src="——多站遠(yuǎn)程無(wú)線控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā).files/3b.gif"
width=211 align=right vspace=1
border=0>事件驅(qū)動(dòng)轉(zhuǎn)查詢方式。這三種方式各有利弊,其中查詢方式具有方便可靠的特點(diǎn),可利用協(xié)議或設(shè)定時(shí)鐘來(lái)進(jìn)入和退出查詢狀態(tài),但它不是資源的有效利用方式;事件觸發(fā)方式對(duì)于定長(zhǎng)通訊非常有效,但其定長(zhǎng)通訊在有些場(chǎng)合不適用;而事件驅(qū)動(dòng)轉(zhuǎn)查詢方式既有事件驅(qū)動(dòng)的特點(diǎn)又有轉(zhuǎn)查詢方式的特點(diǎn),可以說(shuō)是匯集了前二者之長(zhǎng),故可有效利用資源。下面著重介紹事件驅(qū)動(dòng)轉(zhuǎn)查詢方式。</P>
<P
style="TEXT-INDENT: 30px">由于在通訊中,RTS電平可置高或置低,如果用事件驅(qū)動(dòng),計(jì)算機(jī)就會(huì)進(jìn)入中斷,資源就沒(méi)有有效利用,所以在程序中添加了一個(gè)接收函數(shù)。為了保證程序的可靠性和靈活性,可以運(yùn)用設(shè)置身份碼等方法來(lái)保證各個(gè)子站互不干擾,具體實(shí)現(xiàn)過(guò)程的主程序流程圖如圖2所示。</P>
<P style="TEXT-INDENT: 30px">除以上處理外,還可以使用以下方法來(lái)增加系統(tǒng)的可靠性、靈活性和效率。</P>
<P style="TEXT-INDENT: 30px">(1)設(shè)置身份碼和目的地址</P>
<P
style="TEXT-INDENT: 30px">每個(gè)數(shù)傳模塊均有表示其唯一身份的身份碼,身份碼長(zhǎng)為兩個(gè)字節(jié)共十六位。第一字節(jié)表示組碼,第二字節(jié)表示組內(nèi)識(shí)別碼,身份碼可用D7H
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -