123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #include "stdafx.h"
- #include "kernel.h"
- #include "resource.h"
- #pragma warning (disable : 4244)
- //---------------------------------------------- CChannel ---------
- IMPLEMENT_SERIAL(CChannel, CObject, 0)
- CChannel::CChannel():CObject()
- {
- m_nCurDeviceNo = 0;
- m_nCommunicateType = 0; // 通信类型 0: 串口通信协议 1:网络通信协议
- }
- CChannel::~CChannel()
- {
- int a = m_Devices.GetSize();
- for (int i = 0; i < m_Devices.GetSize(); i++)
- {
- if( m_Devices[i] )
- {
- delete m_Devices[i];
- }
- }
- m_Devices.RemoveAll();
- }
- CChannel &CChannel::operator=(CChannel& comport)
- {
- m_nCommunicateType = comport.m_nCommunicateType;
- m_strName = comport.m_strName;
- return *this;
- }
- CChannel* CChannel::Clone(void)
- {
- CChannel* pComport = new CChannel;
- *pComport = *this;
- return pComport;
- }
- void CChannel::Serialize(CArchive& ar)
- {
- CObject::Serialize(ar);
- if(ar.IsStoring())
- {
- ar << m_nCommunicateType;
- ar << m_strName;
- }
- else
- {
- ar >> m_nCommunicateType;
- ar >> m_strName;
- }
- m_Devices.Serialize(ar);
-
- if ( !ar.IsStoring() )
- {
- int size = m_Devices.GetSize();
- for (int i = 0; i < size; i++)
- {
- CDevice* pDev = m_Devices.GetAt(i);
- pDev->m_pChannel = this;
- }
- }
- }
- // 取的使用的设备个数
- int CChannel::GetUsedDeviceNum()
- {
- int nUsedNum = 0;
- int size = m_Devices.GetSize();
- for (int i = 0; i < size; i++)
- {
- CDevice* pDev = m_Devices.GetAt(i);
- if (pDev->m_bUsed)
- {
- nUsedNum++;
- }
- }
- return nUsedNum;
- }
- // 找到下一个通讯的设备
- void CChannel::MoveToNextDevice()
- {
- // 有控制命令的话优先处理
- int size = m_Devices.GetSize();
- for (int i = 0; i < size; i++)
- {
- CDevice* pDev = m_Devices.GetAt(i);
- if (pDev->m_bUsed && pDev->m_bHasAction)
- {
- m_nCurDeviceNo = i;
- return;
- }
- }
- // 否则轮询到下一个设备
- BOOL bUsed = false;
- do
- {
- m_nCurDeviceNo++;
- m_nCurDeviceNo = m_nCurDeviceNo % (m_Devices.GetSize());
- bUsed = m_Devices[m_nCurDeviceNo]->m_bUsed;
- } while (!bUsed);
- }
- void CChannel::FreshData(void)
- {
- if (0 == GetUsedDeviceNum())
- {
- return;
- }
- }
|