| | |
| | | #include "stdafx.h" |
| | | #include "CEquipment.h" |
| | | #include "ToolUnits.h" |
| | | |
| | | |
| | | namespace SERVO { |
| | | |
| | | CEquipment::CEquipment() |
| | | CEquipment::CEquipment() : m_nID(0), m_strName(""), m_strDescription(""), m_station(0, 255) |
| | | { |
| | | m_listener = { nullptr, nullptr }; |
| | | m_alive = {FALSE, 0, FALSE}; |
| | | m_bCimState = FALSE; |
| | | InitializeCriticalSection(&m_criticalSection); |
| | | } |
| | | |
| | | CEquipment::~CEquipment() |
| | | { |
| | | DeleteCriticalSection(&m_criticalSection); |
| | | } |
| | | |
| | | void CEquipment::setListener(EquipmentListener listener) |
| | | { |
| | | m_listener.onAlive = listener.onAlive; |
| | | m_listener.onCimStateChanged = listener.onCimStateChanged; |
| | | } |
| | | |
| | | void CEquipment::init() |
| | |
| | | void CEquipment::term() |
| | | { |
| | | |
| | | } |
| | | |
| | | void CEquipment::setID(int nID) |
| | | { |
| | | m_nID = nID; |
| | | } |
| | | |
| | | int CEquipment::getID() |
| | | { |
| | | return m_nID; |
| | | } |
| | | |
| | | void CEquipment::setName(const char* pszName) |
| | |
| | | m_blockReadBit.start = start; |
| | | m_blockReadBit.end = end; |
| | | m_blockReadBit.size = (m_blockReadBit.end - m_blockReadBit.start + 1) / 8; |
| | | ASSERT(m_blockReadBit.size < BLOCK_BUFFER_MAX); |
| | | } |
| | | |
| | | MemoryBlock& CEquipment::getReadBitBlock() |
| | |
| | | |
| | | void CEquipment::onTimer(UINT nTimerid) |
| | | { |
| | | // 每隔一秒,检查一下ALIVE状态 |
| | | |
| | | static int tick = 0; |
| | | tick++; |
| | | if (tick % (4 * 1) == 0) { |
| | | m_alive.count++; |
| | | if (m_alive.alive && m_alive.count > ALIVE_TIMEOUT) { |
| | | m_alive.alive = FALSE; |
| | | if (m_listener.onAlive != nullptr) { |
| | | m_listener.onAlive(this, m_alive.alive); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | void CEquipment::serialize(CArchive& ar) |
| | |
| | | |
| | | } |
| | | |
| | | void CEquipment::onReceiveLBData(const char* pszData, size_t size) |
| | | { |
| | | TRACE("%s onReceiveLBData: %d bytes\n", m_strName.c_str(), size); |
| | | for (unsigned int i = 0; i < size; i++) { |
| | | if (pszData[i] != 0) |
| | | TRACE("%d[%x]\n", i, pszData[i]); |
| | | } |
| | | |
| | | |
| | | // 以下解释和处理数据 |
| | | |
| | | // alive |
| | | /* |
| | | BOOL bAliveFlag = isBitOn(pszData, size, 0x340); |
| | | if (m_alive.flag != bAliveFlag) { |
| | | m_alive.flag = bAliveFlag; |
| | | m_alive.count = 0; |
| | | |
| | | // ״̬ |
| | | if (!m_alive.alive) { |
| | | m_alive.alive = TRUE; |
| | | if (m_listener.onAlive != nullptr) { |
| | | m_listener.onAlive(this, m_alive.alive); |
| | | } |
| | | } |
| | | } |
| | | */ |
| | | // CIM State |
| | | BOOL bCimState = isBitOn(pszData, size, 0x341); |
| | | if ((bCimState && !m_bCimState) || (!bCimState && m_bCimState)) { |
| | | m_bCimState = bCimState; |
| | | if (m_listener.onCimStateChanged != nullptr) { |
| | | m_listener.onCimStateChanged(this, m_bCimState); |
| | | } |
| | | } |
| | | } |
| | | |
| | | BOOL CEquipment::isBitOn(const char* pszData, size_t size, int index) |
| | | { |
| | | int byteIndex, bitIndex; |
| | | byteIndex = (index) / 8; |
| | | bitIndex = (index) % 8; |
| | | |
| | | return CToolUnits::getBit(pszData[byteIndex], bitIndex); |
| | | } |
| | | |
| | | BOOL CEquipment::isAlive() |
| | | { |
| | | return m_alive.alive; |
| | | } |
| | | } |