| | |
| | | #include "stdafx.h" |
| | | #include "Common.h" |
| | | #include "CMaster.h" |
| | | |
| | | namespace SERVO { |
| | |
| | | |
| | | CMaster::CMaster() |
| | | { |
| | | |
| | | m_listener = {nullptr, nullptr}; |
| | | } |
| | | |
| | | CMaster::~CMaster() |
| | |
| | | m_listEquipment.clear(); |
| | | } |
| | | |
| | | void CMaster::setListener(MasterListener listener) |
| | | { |
| | | m_listener.onEqAlive = listener.onEqAlive; |
| | | m_listener.onEqCimStateChanged = listener.onEqCimStateChanged; |
| | | } |
| | | |
| | | int CMaster::init() |
| | | { |
| | | LOGI("<Master>正在初始化..."); |
| | |
| | | // cclink |
| | | if (m_cclink.Connect(CC_LINK_IE_CONTROL_CHANNEL(1)) != 0) { |
| | | LOGE("连接CC-Link失败."); |
| | | return -1; |
| | | } |
| | | else { |
| | | LOGI("连接CC-Link成功."); |
| | |
| | | // 初始化添加各子设备 |
| | | { |
| | | CEFEM* pEquipment = new CEFEM(); |
| | | pEquipment->setID(EQ_ID_EFEM); |
| | | pEquipment->setName("EFEM(ROBOT)"); |
| | | pEquipment->setDescription("EFEM(ROBOT)."); |
| | | pEquipment->setReadBitBlock(0x4000, 0x45ff); |
| | | pEquipment->setStation(1, 2); |
| | | pEquipment->setStation(0, 255); |
| | | addEquipment(pEquipment); |
| | | |
| | | pEquipment->init(); |
| | | LOGE("已添加“EFEM(ROBOT)”."); |
| | | } |
| | | /* |
| | |
| | | |
| | | int CMaster::term() |
| | | { |
| | | LOGI("<Master>正在结束程序."); |
| | | for (auto item : m_listEquipment) { |
| | | item->term(); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CMaster::addEquipment(CEquipment* pEquipment) |
| | | { |
| | | EquipmentListener listener; |
| | | listener.onAlive = [&](void* pEquipment, BOOL bAlive) -> void { |
| | | CEquipment* p = (CEquipment*)pEquipment; |
| | | if (m_listener.onEqAlive != nullptr) { |
| | | m_listener.onEqAlive(this, p, bAlive); |
| | | } |
| | | }; |
| | | listener.onCimStateChanged = [&](void* pEquipment, BOOL bOn) -> void { |
| | | CEquipment* p = (CEquipment*)pEquipment; |
| | | if (m_listener.onEqCimStateChanged != nullptr) { |
| | | m_listener.onEqCimStateChanged(this, p, bOn); |
| | | } |
| | | }; |
| | | pEquipment->setListener(listener); |
| | | pEquipment->setCcLink(&m_cclink); |
| | | m_listEquipment.push_back(pEquipment); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | CEquipment* CMaster::getEquipment(int id) |
| | | { |
| | | for (auto item : m_listEquipment) { |
| | | if (item->getID() == id) return item; |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | void CMaster::onTimer(UINT nTimerid) |
| | |
| | | } |
| | | |
| | | |
| | | // 以下为测试代码 |
| | | // 按一定频率扫描LB数据 |
| | | static int i = 0; |
| | | i++; |
| | | if (i % (4 * 1) == 0) { |
| | |
| | | const StationIdentifier& station = item->getStation(); |
| | | MemoryBlock& block = item->getReadBitBlock(); |
| | | |
| | | char szBuffer[1024]; |
| | | int nRet = m_cclink.ReadData2(station, (short)block.type, |
| | | block.start, block.size, szBuffer); |
| | | for (unsigned int i = 0; i < block.size; i++) { |
| | | if(szBuffer[i] != 0) |
| | | TRACE("%d[%x]\n", i, szBuffer[i]); |
| | | int nRet = m_cclink.ReadData2(station, (DeviceType)block.type, |
| | | block.start, block.size, block.buffer); |
| | | if (0 == nRet) { |
| | | item->onReceiveLBData(block.buffer, block.size); |
| | | } |
| | | TRACE("nRet=%d\n", nRet); |
| | | } |
| | | } |
| | | } |