📄 devmgr.h
字号:
#ifndef _DEVMGR_H#define _DEVMGR_H/*struct struDev{ BYTE m_byDLNo; WORD m_wDevNo; string m_strName; BYTE m_byAddr; BYTE m_byTypeID; BOOL m_bIsWorking; WORD m_wPasswd; WORD m_wConnectYXNo; BYTE m_byLocalNo;};*/#include "devset.h"class CSubdev{public: CSubdev(CDevSet& setDev) { m_byBkCount = 0; m_byDLNo = (BYTE)setDev.m_wChannelNo; m_wDevNo = setDev.m_wDevNo; strcpy(m_szName,setDev.m_szDevName); m_byAddr = setDev.m_byDllAddr; if (m_byAddr ==0 ) m_byAddr = 100; if (setDev.m_strDT == string("PMAC720有谐波")) m_byTypeID = dt_ePMAC720; else if (setDev.m_strDT == string("PMAC720无谐波")) m_byTypeID = dt_ePM100EN; else if (setDev.m_strDT == string("SEPAM1000S20")) m_byTypeID = dt_eSEPAM20; else if (setDev.m_strDT == string("SEPAM1000S40")) m_byTypeID = dt_eSEPAM40; else if (setDev.m_strDT == string("csc246")) m_byTypeID = dt_eCSC246; else if (setDev.m_strDT == string("PMAC9900H")) m_byTypeID = dt_ePMAC9900H; else if (setDev.m_strDT == string("PMAC9900E")) m_byTypeID = dt_ePMAC9900E; else if ((setDev.m_strDT == string("PMAC9900N")) || (setDev.m_strDT == string("PM100N"))) m_byTypeID = dt_ePMAC9900N; else if (setDev.m_strDT == string("PMAC9900")) m_byTypeID = dt_ePMAC9900; else if (setDev.m_strDT == string("福建力得温控仪")) m_byTypeID = dt_eLDWKY; else if (setDev.m_strDT == string("协顺TTC310温控器")) m_byTypeID = dt_eTTC310; else if (setDev.m_strDT == string("DCRJ")) m_byTypeID = dt_eDCRJ; else if (setDev.m_strDT == string("PA100-CD")) m_byTypeID = dt_ePA100CD; else if (setDev.m_strDT == string("PA100-MFZT")) m_byTypeID = dt_ePA100MFZT; else if (setDev.m_strDT == string("PA100-JXZT")) m_byTypeID = dt_ePA100JXZT; else if (setDev.m_strDT == string("PA100")) m_byTypeID = dt_ePA100; else if ((setDev.m_strDT == string("PMAC600B-Z")) || (setDev.m_strDT == string("PM500"))) m_byTypeID = dt_ePMAC600B; else if ((setDev.m_strDT == string("PMAC600B-W")) || (setDev.m_strDT == string("PMAC600B-I"))) m_byTypeID = dt_ePMAC600B; else if (setDev.m_strDT == string("PMAC600A-Z")) m_byTypeID = dt_ePMAC600A; else if ((setDev.m_strDT == string("PMAC600A-W")) || (setDev.m_strDT == string("PMAC600A-I"))) m_byTypeID = dt_ePMAC600A; else if (setDev.m_strDT == string("PMAC303")) m_byTypeID = dt_ePMAC303; else if (setDev.m_strDT == string("PDM_820QC")) //add by lisheng for modbus m_byTypeID = dt_ePDM820; //add by lisheng for modbus else if (setDev.m_strDT == string("PDM-803AC/HE")) //add by lisheng for modbus m_byTypeID = dt_ePDM803A; //add by lisheng for modbus else if (setDev.m_strDT == string("ABB542")) //add by lisheng for modbus m_byTypeID = dt_eDDEF; //add by lisheng for modbus else if (setDev.m_strDT == string("ABB543")) //add by lisheng for modbus m_byTypeID = dt_eDDEF1; else if (setDev.m_strDT == string("PSM-E10")) //add by lisheng for CDT 2007-4-4 m_byTypeID = dt_ePSME10; //add by lisheng for CDT 2007-4-4 else if (setDev.m_strDT == string("PMAC503B/D")) m_byTypeID = dt_ePMAC503; else if (setDev.m_strDT == string("REF542plus")) //ABB m_byTypeID = dt_eREF542plus; else if (setDev.m_strDT == string("WGK_31_001")) //WGK m_byTypeID = dt_eWGK31001; else if (setDev.m_strDT == string("YD2010")) m_byTypeID = dt_eYD2010; else if (setDev.m_strDT == string("YD2020")) m_byTypeID = dt_eYD2020; else if (setDev.m_strDT == string("YD2100")) m_byTypeID = dt_eYD2100; else if (setDev.m_strDT == string("csc211")) m_byTypeID = dt_eCSC211; else if (setDev.m_strDT == string("JBK3000")) m_byTypeID = dt_eJBK3000; else if (setDev.m_strDT == string("FJTWKY")) m_byTypeID = dt_eFJTWKY; else if (setDev.m_strDT == string("ZGDWKY")) m_byTypeID = dt_eZGDWKY; else if (setDev.m_strDT == string("PMAC503E")) m_byTypeID = dt_ePMAC503E; else if (setDev.m_strDT == string("北京华隆直流屏规约")) m_byTypeID = dt_ehlk2; else if (setDev.m_strDT == string("协顺TTC310温控器")) m_byTypeID = dt_ehlk2; else if (setDev.m_strDT == string("温控仪_上海工程")) m_byTypeID = dt_eWKY0; else if (setDev.m_strDT == string("工控机_上海工程")) m_byTypeID = dt_eGKJ0; else if (setDev.m_strDT == string("Sepam20_B21")) m_byTypeID = dt_eSepam20_B21; else if (setDev.m_strDT == string("Sepam40_S40")) m_byTypeID = dt_eSepam40_S40; else m_byTypeID = (DevType)0; m_bIsWorking = setDev.m_bIsOn; m_wPasswd = setDev.m_wPasswd; m_byLocalNo = setDev.m_byLocalNo; m_wConnectYXNo = setDev.m_wConnectYXNo; m_dwIPAddr = setDev.m_dwIPAddr; } BYTE m_byDLNo; WORD m_wDevNo; char m_szName[64]; BYTE m_byAddr; DevType m_byTypeID; BOOL m_bIsWorking; WORD m_wPasswd; WORD m_wConnectYXNo; BYTE m_byLocalNo; DWORD m_dwIPAddr; void SetBreak(bool bBreak = true) { if (bBreak && (m_byBkCount<5)) { if (m_byBkCount++ == 0) m_byVisitCount = 0; } else if (!bBreak) m_byBkCount = 0; } bool IsWorking() { bool bRet = false; if (m_bIsWorking) { if ((m_byBkCount == 0) || (++m_byVisitCount >= m_byBkCount)) { bRet = true; m_byVisitCount = 0; } } return bRet; } CSubdev* GetThis(){return this;}protected: BYTE m_byBkCount; BYTE m_byVisitCount;};class CSubdevMgr {protected: BYTE m_byCurNo; vector<CSubdev> m_listSubdev;// pthread_mutex_t m_mutex;public: CSubdevMgr() { m_byCurNo = 0xff; } void Load(WORD wChannelNo); bool Has(WORD wDevNo) { return (GetDevFrmDevNo(wDevNo) != NULL); } CSubdev* GetDevFrmDevNo(WORD wDevNo) { CSubdev* pRet = NULL; vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); for (unsigned b=0; b<m_listSubdev.size(); b++) { if (pSubdev->m_wDevNo == wDevNo) { pRet = pSubdev->GetThis(); break; } pSubdev++; } return pRet; } CSubdev* GetDevFrmNo(BYTE byNo) { CSubdev* pRet = NULL; vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); if (byNo < m_listSubdev.size()) pRet = (pSubdev+byNo)->GetThis(); return pRet; }public: BOOL HasOn() { vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); for (BYTE b=0; b<m_listSubdev.size(); pSubdev++,b++) { if (pSubdev->IsWorking()) return TRUE; } return FALSE; } WORD GetPasswd(WORD wDevNo) { CSubdev* pSubdev = GetDevFrmDevNo(wDevNo); if (pSubdev) return pSubdev->m_wPasswd; else return 0xff; } void SetPasswd(WORD wDevNo,WORD wNewPasswd) { CSubdev* pSubdev = GetDevFrmDevNo(wDevNo); if (pSubdev) pSubdev->m_wPasswd = wNewPasswd; } int GetNum() {return m_listSubdev.size();} char* GetNameFrmDevNo(WORD wDevNo) { char* p=NULL; CSubdev* pSubdev = GetDevFrmDevNo(wDevNo); if (pSubdev) { p = pSubdev->m_szName; } return p; } char* GetNameFrmNo(BYTE byNo) { char* p=NULL; CSubdev* pSubdev = GetDevFrmNo(byNo); if (pSubdev) { p = pSubdev->m_szName; } return p; } BYTE GetNoFrmAddr(BYTE byAddr,BYTE byLocalNo = 0xff) { vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); for (BYTE byNo = 0; byNo < m_listSubdev.size();pSubdev++, byNo++) { if ((pSubdev->m_byAddr == byAddr)// && ((byLocalNo & pSubdev->m_byLocalNo) == pSubdev->m_byLocalNo)) && ((byLocalNo == 0xff) || (byLocalNo == pSubdev->m_byLocalNo))) return byNo; } return 0xff; } WORD GetDevNoFrmAddr(BYTE byAddr,BYTE byLocalNo = 0xff) { vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); for (BYTE byNo = 0; byNo < m_listSubdev.size(); byNo++) { if ((pSubdev->m_byAddr == byAddr) && ((byLocalNo == 0xff) || (byLocalNo == pSubdev->m_byLocalNo))) return pSubdev->m_wDevNo; pSubdev++; } return 0xffff; } BYTE GetLocalNoFrmNo(BYTE byNo) { vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); if (byNo < m_listSubdev.size()) { pSubdev+=byNo; return pSubdev->m_byLocalNo; } return 0xff; } BYTE GetAddrFrmNo(BYTE byNo) { vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); if (byNo < m_listSubdev.size()) { pSubdev+=byNo; return pSubdev->m_byAddr; } return 0xff; } BYTE GetNextNo(BYTE byCurNo); BYTE GetNextAddr(BYTE byCurAddr); BYTE GetTypeFrmNo(BYTE byNo) { vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); if (byNo < m_listSubdev.size()) { while (byNo--) pSubdev++; return pSubdev->m_byTypeID; } return 0xff; } BYTE GetAddrFrmDevNo(WORD wDevNo) { BYTE byAddr = 0xff; vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); BYTE byNo = 0; while (byNo++ < m_listSubdev.size()) { if (pSubdev->m_wDevNo == wDevNo) { byAddr = pSubdev->m_byAddr; } pSubdev++; } return byAddr; } BYTE GetTypeFrmAddr(BYTE byAddr) { vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); BYTE byNo = 0; while (byNo++ < m_listSubdev.size()) { if (pSubdev->m_byAddr == byAddr) return pSubdev->m_byTypeID; pSubdev++; } return 0xff; } bool IsOn(BYTE byNo) { vector<CSubdev>::iterator pSubdev = m_listSubdev.begin(); if (byNo < m_listSubdev.size()) { while (byNo--) pSubdev++; return pSubdev->IsWorking(); } return false; }};#endif //_DEVMGR_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -