在重载的void CRs422AnetView::OnDraw(CDC* pDC)函数里面调用自定义函数StartOfSystem(pDC),后者打开并配置好串口,启动通信线程,设置记时器等。其主要代码如下:
void CRs422AnetView::StartOfSystem(CDC *pDC)
{
……
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);
……//以上为打开并配置串口代码
SetTimer(1,5000,NULL); //启动定时器,定时间隔为5妙
CwinThread*m_pThreadd=AfxBeginThread(CommProc,this->GetDocument(), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL); // 创建并挂起线程
if(m_pThreadd==NULL)
{
CloseHandle(m_hCom);
return FALSE;
}
else
{
m_bConnected=TRUE;
m_pThreadd->ResumeThread(); // 恢复线程运行
}
……
}
UINT CommProc(LPVOID pParam)为辅助通信线程,该线程完成设定值以及动态数据的读取,其程序流程图如下所示:
void CRs422AnetView::OnTimer(UINT nIDEvent)为响应计时器消息的函数,定时被触发,本程序中定时间隔为5秒。在该函数里,主要是恢复辅助通信线程以及调用数据显示程序﹑定时刷新数据等。
(2) 历史纪录浏览进程设计
历史纪录的浏览是为了对过去生产过程的回顾,可将产品的质量和过程的设定结合起来进行分析,对以后的生产提供参考,以便能提高产品的生产质量。这个进程提供了一定的查询功能,能将历史纪录用曲线的方式回放出来,能将重要的过程锁定下来,也能删除过程纪录。
五. 结束语
本文介绍的基于RS422A现场总线的温控网络系统已经在现场运行了较长时间,系统运行稳定可靠,充分发挥了网络管理的便捷优点,提高了生产效率。显然,对于一些中、小规模的测控系统,采用RS422A是一个很好的选择。