基于RS422A現(xiàn)場(chǎng)總線的溫控網(wǎng)絡(luò)控制系統(tǒng)
在重載的void CRs422AnetView::OnDraw(CDC* pDC)函數(shù)里面調(diào)用自定義函數(shù)StartOfSystem(pDC),后者打開(kāi)并配置好串口,啟動(dòng)通信線程,設(shè)置記時(shí)器等。其主要代碼如下:
void CRs422AnetView::StartOfSystem(CDC *pDC)
?。?/p>
……
m_hCom=CreateFile(m_sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,NULL);
if(m_hCom==INVALID_HANDLE_VALUE)
return FALSE;
DCB dcb;
if(!GetCommState(m_hCom, dcb)) return FALSE;
dcb.fBinary=TRUE;
dcb.BaudRate=m_nBaud;
dcb.ByteSize=m_nDataBits;
dcb.fParity=TRUE;
dcb.Parity=EVENPARITY;
dcb.StopBits=ONESTOPBIT;
return SetCommState(m_hCom, dcb);
……//以上為打開(kāi)并配置串口代碼
SetTimer(1,5000,NULL); //啟動(dòng)定時(shí)器,定時(shí)間隔為5妙
CwinThread*m_pThreadd=AfxBeginThread(CommProc,this->GetDocument(), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL); // 創(chuàng)建并掛起線程
if(m_pThreadd==NULL)
?。?/p>
CloseHandle(m_hCom);
return FALSE;
?。?/p>
else
?。?/p>
m_bConnected=TRUE;
m_pThreadd->ResumeThread(); // 恢復(fù)線程運(yùn)行
}
……
?。?/p>
UINT CommProc(LPVOID pParam)為輔助通信線程,該線程完成設(shè)定值以及動(dòng)態(tài)數(shù)據(jù)的讀取,其程序流程圖如下所示:
void CRs422AnetView::OnTimer(UINT nIDEvent)為響應(yīng)計(jì)時(shí)器消息的函數(shù),定時(shí)被觸發(fā),本程序中定時(shí)間隔為5秒。在該函數(shù)里,主要是恢復(fù)輔助通信線程以及調(diào)用數(shù)據(jù)顯示程序p定時(shí)刷新數(shù)據(jù)等。
?。?) 歷史紀(jì)錄瀏覽進(jìn)程設(shè)計(jì)
歷史紀(jì)錄的瀏覽是為了對(duì)過(guò)去生產(chǎn)過(guò)程的回顧,可將產(chǎn)品的質(zhì)量和過(guò)程的設(shè)定結(jié)合起來(lái)進(jìn)行分析,對(duì)以后的生產(chǎn)提供參考,以便能提高產(chǎn)品的生產(chǎn)質(zhì)量。這個(gè)進(jìn)程提供了一定的查詢功能,能將歷史紀(jì)錄用曲線的方式回放出來(lái),能將重要的過(guò)程鎖定下來(lái),也能刪除過(guò)程紀(jì)錄。
五. 結(jié)束語(yǔ)
本文介紹的基于RS422A現(xiàn)場(chǎng)總線的溫控網(wǎng)絡(luò)系統(tǒng)已經(jīng)在現(xiàn)場(chǎng)運(yùn)行了較長(zhǎng)時(shí)間,系統(tǒng)運(yùn)行穩(wěn)定可靠,充分發(fā)揮了網(wǎng)絡(luò)管理的便捷優(yōu)點(diǎn),提高了生產(chǎn)效率。顯然,對(duì)于一些中、小規(guī)模的測(cè)控系統(tǒng),采用RS422A是一個(gè)很好的選擇。
評(píng)論