您現(xiàn)在的位置:
中國(guó)傳動(dòng)網(wǎng)
>
技術(shù)頻道
>
技術(shù)百科
>
一種基于VC的Modem分布式遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì)
時(shí)間:2008-11-26 11:01:00來源:ronggang
圖2 Modem狀態(tài)轉(zhuǎn)換示意圖[/align]
在本系統(tǒng)的設(shè)計(jì)中,我們采用金浪公司大眾Ⅱ型標(biāo)準(zhǔn)外置式56K調(diào)制解調(diào)器,和大多數(shù)外置Modem一樣,它提供的是標(biāo)準(zhǔn)的RS-232接口,所以和PC機(jī)相連的Modem可以通過串口直接連接,而單片機(jī)的串口為TTL電平,它和Modem相連必須進(jìn)行電平轉(zhuǎn)換,這里我們采用MAX232芯片,連接原理圖如圖3所示。89C51雖然有串行輸入、輸出口,但不具備RTS、CTS、DTR等標(biāo)準(zhǔn)接口握手信號(hào)線,考慮到單片機(jī)和上位機(jī)的通信量并不大,所以在連接時(shí)采用簡(jiǎn)單的“三線制”即只通過TXD、RXD和地線GND進(jìn)行連接,其它信號(hào)在對(duì)Modem初始化時(shí)發(fā)送AT指令將其忽略。
[align=center]
圖3 Modem和單片機(jī)通信接口電路[/align]
4 基于VC的串口通訊
在眾多的開發(fā)工具中,VC由于具有串行通訊和數(shù)據(jù)處理的強(qiáng)大功能而成為開發(fā)遠(yuǎn)程通訊控制的首選開發(fā)語言。在Windows環(huán)境下完成串口通訊,目前通常有以下幾種方法:
(1) 利用Windows API通信函數(shù)。
(2) 利用VC的標(biāo)準(zhǔn)通信函數(shù)_inp、_inpw、_inpd、_outpw、_outpd等直接對(duì)串口進(jìn)行操作。
。3) 使用現(xiàn)有的ActiveX控件即MSComm控件來實(shí)現(xiàn)。
。4) 利用第三方編寫的通信類即CSerial類來實(shí)現(xiàn)。
以上幾種方法中第一種使用面較廣,但由于比較復(fù)雜,專業(yè)化程度較高,使用困難;使用第二種方法需要了解硬件電路結(jié)構(gòu)原理。在本系統(tǒng)中我們采用第三種方法, MSComm控件是微軟公司提供的一個(gè)可實(shí)現(xiàn)串行通信的ActiveX控件,擁有完善的串口數(shù)據(jù)接收和發(fā)送功能,并具有很多屬性,它屏蔽了通信過程中的底層操作,只需設(shè)置并監(jiān)視控件的屬性和事件就可完成對(duì)串口的初始化和數(shù)據(jù)的發(fā)送接收。
MSComm控件提供了兩種處理通信問題的方法:一種是事件驅(qū)動(dòng)方法,一種是查詢法[3]。其中事件驅(qū)動(dòng)方法響應(yīng)及時(shí),可靠性高,適用于較復(fù)雜的串口通信,本系統(tǒng)的設(shè)計(jì)就采用這種方法。
5 軟件設(shè)計(jì)
5.1 初始化程序設(shè)計(jì)
初始化程序設(shè)計(jì)主要完成串行口的初始化和Modem的初始化,首先為MSComm控件定義一個(gè)變量:CMSComm m_ctrlComm,相應(yīng)的程序如下:
BOOL CModemDlg::OnInitDialog()
{
……
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //選擇com1
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打開串口
else
AfxMessageBox("串口1已被占用,請(qǐng)選擇其他串口");
m_ctrlComm.SetSettings("9600,n,8,1");
m_ctrlComm.SetInputMode(1);
m_ctrlComm.SetRThreshold(1);
m_ctrlComm.SetInputLen(0);
m_ctrlComm.GetInput();
CString strTemp;
strTemp="ATZ0\r\n";//Modem軟件復(fù)位
m_ctrlComm.SetOutput(COleVariant(strTemp));
strTemp="ATS0=1\r\n"; //Modem自動(dòng)等待連接
m_ctrlComm.SetOutput(COleVariant(strTemp));
strTemp="AT&D0&S0&R1\r\n"; //簡(jiǎn)化Modem控制方式
m_ctrlComm.SetOutput(COleVariant(strTemp));
……
。
5.2 撥號(hào)程序設(shè)計(jì)
void CModemDlg::OnDial()
。
CString strTemp;
//向Modem發(fā)送指令
strTemp = "ATDT" + m_strPhoneNumber + "\r"+"\n"; // m_strPhoneNumber為電話號(hào)碼
m_ctrlComm.SetOutput(COleVariant(strTemp));
。
5.3 數(shù)據(jù)發(fā)送程序設(shè)計(jì)
void CModemDlg::SendData(CString m_strSend)
{
char TxData[100];
int Count=m_strSend.GetLength();
for(int i=0; i
TxData[i]=m_strSend.GetAt(i);
CByteArray array;
array.RemoveAll();
array.SetSize(Count);
for(i=0; i
array.SetAt(i,TxData[i]);
m_ctrlComm.SetOutput(ColeVariant(array));
。
5.4 數(shù)據(jù)接受程序設(shè)計(jì)
void CModemDlg::OnComm()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //設(shè)置BYTE數(shù)組
CString strtemp;
CString strshuzu[100];
if(m_ctrlComm.GetCommEvent()==2) //事件值為2表示接收緩沖區(qū)內(nèi)有字符
。鹶ariant_inp=m_ctrlComm.GetInput(); //讀緩沖區(qū)
safearray_inp=variant_inp; //VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量
len=safearray_inp.GetOneDimSize(); //得到有效數(shù)據(jù)長(zhǎng)度
for(k=0;k
safearray_inp.GetElement(&k,rxdata+k);//轉(zhuǎn)換為BYTE型數(shù)組
for(k=0;k
。鸅YTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%02X ",bt);
strshuzu[k]=strtemp;}
……//對(duì)接收的數(shù)據(jù)進(jìn)行相應(yīng)的處理,如數(shù)據(jù)的實(shí)時(shí)顯示、向數(shù)據(jù)庫(kù)添加等
。
6 結(jié)束語
實(shí)驗(yàn)表明,該系統(tǒng)設(shè)計(jì)成本低,運(yùn)行穩(wěn)定可靠,能很好達(dá)到遠(yuǎn)程監(jiān)控的預(yù)期目的。對(duì)邊遠(yuǎn)地區(qū)的太陽(yáng)能光伏發(fā)電技術(shù)的進(jìn)一步推廣和應(yīng)用有重大的意義。
本文作者創(chuàng)新點(diǎn):針對(duì)光伏電站的特點(diǎn),提出了利用VC控制Modem實(shí)現(xiàn)遠(yuǎn)程監(jiān)控的方案。
參考文獻(xiàn):
[1]劉福才,高秀偉等.光伏電站遠(yuǎn)程監(jiān)控系統(tǒng)單片機(jī)智能控制器的設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制2003,11(41):270-272
[2]張毅剛,彭喜元等.新編MCS-51單片機(jī)應(yīng)用設(shè)計(jì)[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2003
[3]李現(xiàn)勇.Visual C++串口通信技術(shù)與工程實(shí)踐[M].北京:人民郵電出版社,2004
[4]喬奕,王超,陶維青.基于MSCOMM控件Modem通信的實(shí)現(xiàn).微計(jì)算機(jī)信息(測(cè)控自動(dòng)化)2004,20(7):102-103
標(biāo)簽:
傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為傳動(dòng)網(wǎng)(connectcrack.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>耐磨管道機(jī)器人檢測(cè)電纜CCTV,水下管道...
2025-09-23
影視舞臺(tái)燈光低煙無鹵扁平電纜13*4+2*(2...
2025-09-23
「頻」實(shí)力,新上市——富士電機(jī) FRENIC...
2025-09-08
華為昇騰Atlas800iA2 910B服務(wù)器Deepsee...
2025-09-04
TaiShan(泰山)200 2280系列服務(wù)器 鯤...
2025-09-03
2025-08-06