| | |
| | | |
| | | CModel::~CModel() |
| | | { |
| | | for (auto item : m_mapPlc) { |
| | | delete item.second; |
| | | } |
| | | m_mapPlc.clear(); |
| | | } |
| | | |
| | | IObservable* CModel::getObservable() |
| | |
| | | g_pModel = this; |
| | | |
| | | |
| | | // 模拟从文档或数据库加载PLC列表 |
| | | addPlc("Test1", "127.0.0.1", 1001); |
| | | addPlc("Test2", "127.0.0.1", 1002); |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CModel::term() |
| | | { |
| | | for (auto item : m_mapPlc) { |
| | | item.second->term(); |
| | | } |
| | | CLog::GetLog()->SetOnLogCallback(nullptr); |
| | | return 0; |
| | | } |
| | |
| | | |
| | | void CModel::onTimer(UINT nTimerid) |
| | | { |
| | | static int ii = 0; |
| | | ii++; |
| | | |
| | | |
| | | // 检测是否断开,重连 |
| | | if (ii % 5 == 0) { |
| | | for (auto item : m_mapPlc) { |
| | | if (!item.second->isConnected()) { |
| | | item.second->connect(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | std::map<std::string, CPLC*>& CModel::getPlcMap() |
| | | { |
| | | return m_mapPlc; |
| | | } |
| | | |
| | | int CModel::addPlc(const char* pszName, const char* pszIp, const unsigned int port) |
| | | { |
| | | auto iter = m_mapPlc.find(pszName); |
| | | if (iter != m_mapPlc.end()) return -1; |
| | | CPLC* pPLC = new CPLC(pszName, pszIp, port); |
| | | pPLC->init(); |
| | | m_mapPlc[pszName] = pPLC; |
| | | |
| | | notifyPtr(RX_CODE_ADD_PLC, pPLC); |
| | | return 0; |
| | | } |
| | | |
| | | int CModel::removePlc(const char* pszName) |
| | | { |
| | | auto iter = m_mapPlc.find(pszName); |
| | | if (iter == m_mapPlc.end()) return -1; |
| | | |
| | | notifyPtr(RX_CODE_REMOVE_PLC, iter->second); |
| | | delete iter->second; |
| | | m_mapPlc.erase(iter); |
| | | return 0; |
| | | } |