1.Variable列表显示到界面;
2.从文件中加载CReport列表;
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // CPageReport.cpp: å®ç°æä»¶ |
| | | // |
| | | |
| | | #include "stdafx.h" |
| | | #include "Servo.h" |
| | | #include "CPageReport.h" |
| | | #include "afxdialogex.h" |
| | | |
| | | |
| | | // CPageReport å¯¹è¯æ¡ |
| | | |
| | | IMPLEMENT_DYNAMIC(CPageReport, CHMPropertyPage) |
| | | |
| | | CPageReport::CPageReport(CWnd* pParent /*=nullptr*/) |
| | | : CHMPropertyPage(IDD_PAGE_REPORT, pParent) |
| | | { |
| | | |
| | | } |
| | | |
| | | CPageReport::~CPageReport() |
| | | { |
| | | } |
| | | |
| | | void CPageReport::DoDataExchange(CDataExchange* pDX) |
| | | { |
| | | CHMPropertyPage::DoDataExchange(pDX); |
| | | DDX_Control(pDX, IDC_LIST1, m_listCtrl); |
| | | } |
| | | |
| | | |
| | | BEGIN_MESSAGE_MAP(CPageReport, CHMPropertyPage) |
| | | ON_WM_CTLCOLOR() |
| | | ON_WM_DESTROY() |
| | | ON_WM_SIZE() |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | | // CPageReport æ¶æ¯å¤çç¨åº |
| | | |
| | | |
| | | BOOL CPageReport::OnInitDialog() |
| | | { |
| | | CHMPropertyPage::OnInitDialog(); |
| | | |
| | | |
| | | // 读åºå宽 |
| | | CString strIniFile, strItem; |
| | | strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); |
| | | int width[8] = { 0, 218, 180, 180, 180, 180, 180, 180 }; |
| | | for (int i = 0; i < 8; i++) { |
| | | strItem.Format(_T("Col_%d_Width"), i); |
| | | width[i] = GetPrivateProfileInt("PageReportListCtrl", strItem, width[i], strIniFile); |
| | | } |
| | | |
| | | |
| | | // æ¥è¡¨æ§ä»¶ |
| | | DWORD dwStyle = m_listCtrl.GetExtendedStyle(); |
| | | dwStyle |= LVS_EX_FULLROWSELECT; |
| | | dwStyle |= LVS_EX_GRIDLINES; |
| | | m_listCtrl.SetExtendedStyle(dwStyle); |
| | | |
| | | HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1); |
| | | ListView_SetImageList(m_listCtrl.GetSafeHwnd(), imageList, LVSIL_SMALL); |
| | | m_listCtrl.InsertColumn(0, _T(""), LVCFMT_RIGHT, width[0]); |
| | | m_listCtrl.InsertColumn(1, _T("RPT ID"), LVCFMT_LEFT, width[1]); |
| | | m_listCtrl.InsertColumn(2, _T("VID"), LVCFMT_LEFT, width[2]); |
| | | // loadVariables(); |
| | | |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // å¼å¸¸: OCX 屿§é¡µåºè¿å FALSE |
| | | |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // å¼å¸¸: OCX 屿§é¡µåºè¿å FALSE |
| | | } |
| | | |
| | | |
| | | HBRUSH CPageReport::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) |
| | | { |
| | | HBRUSH hbr = CHMPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor); |
| | | |
| | | // TODO: 卿¤æ´æ¹ DC çä»»ä½ç¹æ§ |
| | | |
| | | // TODO: 妿é»è®¤ç䏿¯æéç»ç¬ï¼åè¿åå¦ä¸ä¸ªç»ç¬ |
| | | return hbr; |
| | | } |
| | | |
| | | |
| | | void CPageReport::OnDestroy() |
| | | { |
| | | CHMPropertyPage::OnDestroy(); |
| | | |
| | | // ä¿åå宽 |
| | | CString strIniFile, strItem, strTemp; |
| | | strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); |
| | | CHeaderCtrl* pHeader = m_listCtrl.GetHeaderCtrl(); |
| | | for (int i = 0; i < pHeader->GetItemCount(); i++) { |
| | | RECT rect; |
| | | pHeader->GetItemRect(i, &rect); |
| | | strItem.Format(_T("Col_%d_Width"), i); |
| | | strTemp.Format(_T("%d"), rect.right - rect.left); |
| | | WritePrivateProfileString("PageReportListCtrl", strItem, strTemp, strIniFile); |
| | | } |
| | | } |
| | | |
| | | |
| | | void CPageReport::OnSize(UINT nType, int cx, int cy) |
| | | { |
| | | CHMPropertyPage::OnSize(nType, cx, cy); |
| | | if (GetDlgItem(IDC_LIST1) == nullptr) return; |
| | | |
| | | CWnd* pItem; |
| | | CRect rcClient, rcItem; |
| | | GetClientRect(&rcClient); |
| | | m_listCtrl.MoveWindow(12, 12, rcClient.Width() - 24, rcClient.Height() - 24); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #pragma once |
| | | #include "CHMPropertyPage.h" |
| | | #include "ListCtrlEx.h" |
| | | |
| | | |
| | | // CPageReport å¯¹è¯æ¡ |
| | | |
| | | class CPageReport : public CHMPropertyPage |
| | | { |
| | | DECLARE_DYNAMIC(CPageReport) |
| | | |
| | | public: |
| | | CPageReport(CWnd* pParent = nullptr); // æ åæé 彿° |
| | | virtual ~CPageReport(); |
| | | |
| | | private: |
| | | CListCtrlEx m_listCtrl; |
| | | |
| | | // å¯¹è¯æ¡æ°æ® |
| | | #ifdef AFX_DESIGN_TIME |
| | | enum { IDD = IDD_PAGE_REPORT }; |
| | | #endif |
| | | |
| | | protected: |
| | | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV æ¯æ |
| | | |
| | | DECLARE_MESSAGE_MAP() |
| | | public: |
| | | virtual BOOL OnInitDialog(); |
| | | afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); |
| | | afx_msg void OnDestroy(); |
| | | afx_msg void OnSize(UINT nType, int cx, int cy); |
| | | }; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // CPageVarialbles.cpp: å®ç°æä»¶ |
| | | // |
| | | |
| | | #include "stdafx.h" |
| | | #include "Servo.h" |
| | | #include "CPageVarialbles.h" |
| | | #include "afxdialogex.h" |
| | | |
| | | |
| | | // CPageVarialbles å¯¹è¯æ¡ |
| | | |
| | | IMPLEMENT_DYNAMIC(CPageVarialbles, CHMPropertyPage) |
| | | |
| | | CPageVarialbles::CPageVarialbles(CWnd* pParent /*=nullptr*/) |
| | | : CHMPropertyPage(IDD_PAGE_VARIABLE, pParent) |
| | | { |
| | | |
| | | } |
| | | |
| | | CPageVarialbles::~CPageVarialbles() |
| | | { |
| | | } |
| | | |
| | | void CPageVarialbles::DoDataExchange(CDataExchange* pDX) |
| | | { |
| | | CHMPropertyPage::DoDataExchange(pDX); |
| | | DDX_Control(pDX, IDC_LIST1, m_listCtrl); |
| | | } |
| | | |
| | | |
| | | BEGIN_MESSAGE_MAP(CPageVarialbles, CHMPropertyPage) |
| | | ON_WM_CTLCOLOR() |
| | | ON_WM_DESTROY() |
| | | ON_WM_SIZE() |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | | // CPageVarialbles æ¶æ¯å¤çç¨åº |
| | | |
| | | |
| | | BOOL CPageVarialbles::OnInitDialog() |
| | | { |
| | | CHMPropertyPage::OnInitDialog(); |
| | | |
| | | |
| | | // 读åºå宽 |
| | | CString strIniFile, strItem; |
| | | strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); |
| | | int width[8] = { 0, 218, 180, 180, 180, 180, 180, 180 }; |
| | | for (int i = 0; i < 8; i++) { |
| | | strItem.Format(_T("Col_%d_Width"), i); |
| | | width[i] = GetPrivateProfileInt("PageVariableListCtrl", strItem, width[i], strIniFile); |
| | | } |
| | | |
| | | |
| | | // æ¥è¡¨æ§ä»¶ |
| | | DWORD dwStyle = m_listCtrl.GetExtendedStyle(); |
| | | dwStyle |= LVS_EX_FULLROWSELECT; |
| | | dwStyle |= LVS_EX_GRIDLINES; |
| | | m_listCtrl.SetExtendedStyle(dwStyle); |
| | | |
| | | HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1); |
| | | ListView_SetImageList(m_listCtrl.GetSafeHwnd(), imageList, LVSIL_SMALL); |
| | | m_listCtrl.InsertColumn(0, _T(""), LVCFMT_RIGHT, width[0]); |
| | | m_listCtrl.InsertColumn(1, _T("SV ID"), LVCFMT_LEFT, width[1]); |
| | | m_listCtrl.InsertColumn(2, _T("SV Name"), LVCFMT_LEFT, width[2]); |
| | | m_listCtrl.InsertColumn(3, _T("SV Format"), LVCFMT_LEFT, width[3]); |
| | | m_listCtrl.InsertColumn(4, _T("SV Remark"), LVCFMT_LEFT, width[4]); |
| | | loadVariables(); |
| | | |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // å¼å¸¸: OCX 屿§é¡µåºè¿å FALSE |
| | | } |
| | | |
| | | |
| | | HBRUSH CPageVarialbles::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) |
| | | { |
| | | HBRUSH hbr = CHMPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor); |
| | | |
| | | // TODO: 卿¤æ´æ¹ DC çä»»ä½ç¹æ§ |
| | | |
| | | // TODO: 妿é»è®¤ç䏿¯æéç»ç¬ï¼åè¿åå¦ä¸ä¸ªç»ç¬ |
| | | return hbr; |
| | | } |
| | | |
| | | |
| | | void CPageVarialbles::OnDestroy() |
| | | { |
| | | CHMPropertyPage::OnDestroy(); |
| | | |
| | | // ä¿åå宽 |
| | | CString strIniFile, strItem, strTemp; |
| | | strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir); |
| | | CHeaderCtrl* pHeader = m_listCtrl.GetHeaderCtrl(); |
| | | for (int i = 0; i < pHeader->GetItemCount(); i++) { |
| | | RECT rect; |
| | | pHeader->GetItemRect(i, &rect); |
| | | strItem.Format(_T("Col_%d_Width"), i); |
| | | strTemp.Format(_T("%d"), rect.right - rect.left); |
| | | WritePrivateProfileString("PageVariableListCtrl", strItem, strTemp, strIniFile); |
| | | } |
| | | } |
| | | |
| | | |
| | | void CPageVarialbles::OnSize(UINT nType, int cx, int cy) |
| | | { |
| | | CHMPropertyPage::OnSize(nType, cx, cy); |
| | | |
| | | if (GetDlgItem(IDC_LIST1) == nullptr) return; |
| | | |
| | | CWnd* pItem; |
| | | CRect rcClient, rcItem; |
| | | GetClientRect(&rcClient); |
| | | m_listCtrl.MoveWindow(12, 12, rcClient.Width() - 24, rcClient.Height() - 24); |
| | | } |
| | | |
| | | void CPageVarialbles::OnApply() |
| | | { |
| | | __super::OnApply(); |
| | | } |
| | | |
| | | void CPageVarialbles::loadVariables() |
| | | { |
| | | auto& variables = theApp.m_model.m_hsmsPassive.getVariables(); |
| | | for (auto item : variables) { |
| | | int index = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), _T("")); |
| | | m_listCtrl.SetItemData(index, (DWORD_PTR)item); |
| | | m_listCtrl.SetItemText(index, 1, std::to_string(item->getVarialbleId()).c_str()); |
| | | m_listCtrl.SetItemText(index, 2, item->getName().c_str()); |
| | | m_listCtrl.SetItemText(index, 3, SERVO::CVariable::formatToString(item->getFormat()).c_str()); |
| | | m_listCtrl.SetItemText(index, 4, item->getRemark().c_str()); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #pragma once |
| | | #include "CHMPropertyPage.h" |
| | | #include "ListCtrlEx.h" |
| | | |
| | | |
| | | // CPageVarialbles å¯¹è¯æ¡ |
| | | |
| | | class CPageVarialbles : public CHMPropertyPage |
| | | { |
| | | DECLARE_DYNAMIC(CPageVarialbles) |
| | | |
| | | public: |
| | | CPageVarialbles(CWnd* pParent = nullptr); // æ åæé 彿° |
| | | virtual ~CPageVarialbles(); |
| | | virtual void OnApply(); |
| | | void loadVariables(); |
| | | |
| | | private: |
| | | CListCtrlEx m_listCtrl; |
| | | |
| | | |
| | | // å¯¹è¯æ¡æ°æ® |
| | | #ifdef AFX_DESIGN_TIME |
| | | enum { IDD = IDD_PAGE_VARIABLE }; |
| | | #endif |
| | | |
| | | protected: |
| | | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV æ¯æ |
| | | |
| | | DECLARE_MESSAGE_MAP() |
| | | public: |
| | | virtual BOOL OnInitDialog(); |
| | | afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); |
| | | afx_msg void OnDestroy(); |
| | | afx_msg void OnSize(UINT nType, int cx, int cy); |
| | | }; |
| | |
| | | namespace SERVO { |
| | | CReport::CReport() |
| | | { |
| | | m_nReportId = 0; |
| | | } |
| | | |
| | | CReport::CReport(unsigned int reportId) |
| | | { |
| | | m_nReportId = reportId; |
| | | } |
| | | |
| | | CReport::~CReport() |
| | |
| | | { |
| | | public: |
| | | CReport(); |
| | | CReport(unsigned int reportId); |
| | | virtual ~CReport(); |
| | | |
| | | public: |
| | |
| | | return SVFromat::U1; |
| | | } |
| | | |
| | | |
| | | std::string CVariable::formatToString(SVFromat format) |
| | | { |
| | | if (SVFromat::U1 == format) { |
| | | return "U1"; |
| | | } |
| | | if (SVFromat::U2 == format) { |
| | | return "U1"; |
| | | } |
| | | if (SVFromat::I2 == format) { |
| | | return "I2"; |
| | | } |
| | | if (SVFromat::A50 == format) { |
| | | return "A50"; |
| | | } |
| | | if (SVFromat::A20 == format) { |
| | | return "A20"; |
| | | } |
| | | |
| | | return "U1"; |
| | | } |
| | | |
| | | unsigned int CVariable::getVarialbleId() |
| | | { |
| | | return m_nVarialbeId; |
| | |
| | | |
| | | public: |
| | | static SVFromat toFormat(const char* pszFormat); |
| | | static std::string formatToString(SVFromat format); |
| | | unsigned int getVarialbleId(); |
| | | std::string& getName(); |
| | | SVFromat getFormat(); |
| | |
| | | #include "stdafx.h" |
| | | #include "stdafx.h" |
| | | #include "HsmsPassive.h" |
| | | #include "Log.h" |
| | | #include "Model.h" |
| | |
| | | { |
| | | for (auto it = m_mapReportIdToCEID.begin(); it != m_mapReportIdToCEID.end(); ) { |
| | | if (it->second == CEID) { |
| | | m_mapReportIdToCEID.erase(it++); // æ´æ°è¿ä»£å¨ |
| | | m_mapReportIdToCEID.erase(it++); // æ´æ°è¿ä»£å¨ |
| | | } |
| | | else { |
| | | ++it; |
| | |
| | | { |
| | | for (auto it = m_mapValueIdToPRTID.begin(); it != m_mapValueIdToPRTID.end(); ) { |
| | | if (it->second == RPTID) { |
| | | m_mapValueIdToPRTID.erase(it++); // æ´æ°è¿ä»£å¨ |
| | | m_mapValueIdToPRTID.erase(it++); // æ´æ°è¿ä»£å¨ |
| | | } |
| | | else { |
| | | ++it; |
| | |
| | | |
| | | void CHsmsPassive::OnTimer(UINT nTimerid) |
| | | { |
| | | // ææå·²åéçActionèªå 1 |
| | | // ææå·²åéçActionèªå 1 |
| | | Lock(); |
| | | for (auto iter = m_listActionSent.begin(); iter != m_listActionSent.end();) { |
| | | if ((*iter)->incrementAndCheckTimeout()) { |
| | | TRACE("CHsmsPassive::è¶
æ¶\n"); |
| | | TRACE("CHsmsPassive::è¶
æ¶\n"); |
| | | delete (*iter); |
| | | m_listActionSent.erase(iter++); |
| | | } |
| | |
| | | CHsmsAction* pAction = nullptr; |
| | | for (auto iter = m_listActionSent.begin(); iter != m_listActionSent.end(); iter++) { |
| | | if ((*iter)->getSendMessage()->getHeader()->systemBytes == pMessage->getHeader()->systemBytes) { |
| | | LOGI("CHsmsPassive::æ¾å°"); |
| | | LOGI("CHsmsPassive::æ¾å°"); |
| | | pAction = (*iter); |
| | | m_listActionSent.erase(iter); |
| | | break; |
| | |
| | | Unlock(); |
| | | |
| | | if (pAction != nullptr) { |
| | | LOGI("onRecvMsg::ç¸åºå¤ç"); |
| | | LOGI("onRecvMsg::ç¸åºå¤ç"); |
| | | delete pAction; |
| | | } |
| | | |
| | |
| | | return 0; |
| | | } |
| | | |
| | | int CHsmsPassive::loadVarialbleList(const char* pszFilepath) |
| | | int CHsmsPassive::loadVarialbles(const char* pszFilepath) |
| | | { |
| | | CStdioFile file; |
| | | if (!file.Open(pszFilepath, CFile::modeRead)) { |
| | | return -1; |
| | | } |
| | | |
| | | std::regex pattern("^\\d+,.*"); // å¹é
以æ°å+éå·å¼å¤´çå符串 |
| | | std::regex pattern("^\\d+,.*"); // å¹é
以æ°å+éå·å¼å¤´çå符串 |
| | | std::vector<SERVO::CVariable*> variables; |
| | | int index, last; |
| | | CString strLine; |
| | |
| | | if (index < 0) continue; |
| | | strFormat = strLine.Mid(last, index - last); |
| | | strRemark = strLine.Right(strLine.GetLength() - index - 1); |
| | | strRemark.Replace(_T("\\r\\n"), _T("\r\n")); |
| | | |
| | | SERVO::CVariable* pVarialble = new SERVO::CVariable( |
| | | (LPTSTR)(LPCTSTR)strId, (LPTSTR)(LPCTSTR)strName, (LPTSTR)(LPCTSTR)strFormat, (LPTSTR)(LPCTSTR)strRemark); |
| | |
| | | return 0; |
| | | } |
| | | |
| | | std::vector<SERVO::CVariable*>& CHsmsPassive::getVariables() |
| | | { |
| | | return m_variabels; |
| | | } |
| | | |
| | | SERVO::CVariable* CHsmsPassive::getVariable(int variableId) |
| | | { |
| | | for (auto item : m_variabels) { |
| | | if (item->getVarialbleId() == variableId) { |
| | | return item; |
| | | } |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | void CHsmsPassive::clearAllVariabel() |
| | | { |
| | | for (auto item : m_variabels) { |
| | | delete item; |
| | | } |
| | | m_variabels.clear(); |
| | | } |
| | | |
| | | int CHsmsPassive::loadReports(const char* pszFilepath) |
| | | { |
| | | CStdioFile file; |
| | | if (!file.Open(pszFilepath, CFile::modeRead)) { |
| | | return -1; |
| | | } |
| | | |
| | | std::regex pattern("^\\d+,\\(\\d+(,\\d+)*\\).*"); // å¹é
以æ°å+éå·å¼å¤´çå符串 |
| | | std::vector<SERVO::CReport*> reports; |
| | | int index; |
| | | CString strLine, strVariable; |
| | | CString strId, strName, strFormat, strRemark; |
| | | while (file.ReadString(strLine)) { |
| | | if (!std::regex_match((LPTSTR)(LPCTSTR)strLine, pattern)) { |
| | | continue; |
| | | } |
| | | |
| | | index = strLine.Find(",", 0); |
| | | if (index < 0) continue; |
| | | strId = strLine.Left(index); |
| | | strVariable = strLine.Right(strLine.GetLength() - index - 1); |
| | | strVariable.Delete(0); |
| | | strVariable.Delete(strVariable.GetLength() - 1); |
| | | auto vids = parseVidList(strVariable); |
| | | |
| | | |
| | | SERVO::CReport* pReport = new SERVO::CReport(atoi((LPTSTR)(LPCTSTR)strId)); |
| | | for (auto vid : vids) { |
| | | SERVO::CVariable* pVariable = getVariable(vid); |
| | | if (pVariable != nullptr) { |
| | | pReport->addVariable(pVariable); |
| | | } |
| | | } |
| | | |
| | | reports.push_back(pReport); |
| | | } |
| | | |
| | | if (!reports.empty()) { |
| | | clearAllReport(); |
| | | for (auto item : reports) { |
| | | m_reports.push_back(item); |
| | | } |
| | | } |
| | | |
| | | |
| | | file.Close(); |
| | | return 0; |
| | | } |
| | | |
| | | std::vector<SERVO::CReport*>& CHsmsPassive::getReports() |
| | | { |
| | | return m_reports; |
| | | } |
| | | |
| | | void CHsmsPassive::clearAllReport() |
| | | { |
| | | for (auto item : m_reports) { |
| | | delete item; |
| | | } |
| | | m_reports.clear(); |
| | | } |
| | | |
| | | std::vector<int> CHsmsPassive::parseVidList(CString& strNums) |
| | | { |
| | | // 1. å
廿å¯è½åºç°ç空ç½ç¬¦ï¼ç©ºæ ¼ãå¶è¡¨ç¬¦çï¼ |
| | | strNums.Trim(); |
| | | |
| | | // 2ï¸. |
| | | std::vector<int> result; |
| | | int i = 0; |
| | | CString strVid; |
| | | while (1) { |
| | | if (!AfxExtractSubString(strVid, (LPCTSTR)strNums, i, ',')) { |
| | | break; |
| | | } |
| | | if (!strVid.IsEmpty()) // é²å¾¡æ§æ£æ¥ |
| | | result.push_back(std::stoi((LPTSTR)(LPCTSTR)strVid)); |
| | | i++; |
| | | |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | int CHsmsPassive::init(CModel* pModel, const char* pszName, unsigned int port) |
| | |
| | | auto onStatusChanged = [&](void* pFrom, STATE state) -> void { |
| | | m_pModel->notifyInt(RX_CODE_PASSIVE_STATUS_CHANGED, (int)state); |
| | | |
| | | // è¿ä¸ä¹ååS1F1 |
| | | // ä¿®æ¹ä¸ºä¸ä¸»å¨åéï¼èæ¯ååº |
| | | // è¿ä¸ä¹ååS1F1 |
| | | // ä¿®æ¹ä¸ºä¸ä¸»å¨åéï¼èæ¯ååº |
| | | /* |
| | | if (STATE::SELECTED == state) { |
| | | m_bAreYouThereRequest = FALSE; |
| | |
| | | HEADER* pHeader = pMessage->getHeader(); |
| | | int nStream = (pHeader->stream & 0x7F); |
| | | |
| | | LOGI("<HSMS>æ¶å°æ¶æ¯ S%dF%d", nStream, pHeader->function); |
| | | LOGI("<HSMS>æ¶å°æ¶æ¯ S%dF%d", nStream, pHeader->function); |
| | | if (nStream == 1 && pHeader->function == 1) { |
| | | // S1F1 |
| | | replyAreYouThere(pMessage); |
| | |
| | | listener.funError = onError; |
| | | m_pPassive->setListener(listener); |
| | | |
| | | // å¯å¨å·¥ä½çº¿ç¨ |
| | | // å¯å¨å·¥ä½çº¿ç¨ |
| | | m_bCimWorking = TRUE; |
| | | m_hCimWorkThreadHandle = (HANDLE)_beginthreadex(NULL, 0, ::CimWorkThreadFunction, this, |
| | | 0, &m_nCimWorkThrdaddr); |
| | |
| | | |
| | | int CHsmsPassive::term() |
| | | { |
| | | // ç»æçº¿ç¨ |
| | | // ç»æçº¿ç¨ |
| | | m_bCimWorking = FALSE; |
| | | SetEvent(m_hCimWorkEvent); |
| | | if (m_hCimWorkThreadHandle != NULL) { |
| | |
| | | { |
| | | while (m_bCimWorking) { |
| | | |
| | | // å¾
éåºä¿¡å·ææ¶é´å° |
| | | // å¾
éåºä¿¡å·ææ¶é´å° |
| | | int nRet = WaitForSingleObject(m_hCimWorkEvent, INFINITE); |
| | | ResetEvent(m_hCimWorkEvent); |
| | | if (!m_bCimWorking) break; |
| | | |
| | | // ååºè¯·æ±å表并è¿è¡å¤ç |
| | | // ååºè¯·æ±å表并è¿è¡å¤ç |
| | | std::list<CHsmsAction*> list; |
| | | Lock(); |
| | | list.splice(list.end(), m_listAction); |
| | |
| | | LOGI("<HSMS> [SEND] SysByte=%u sessionId:%d", pMessage->getHeader()->systemBytes, pMessage->getHeader()->sessionId); |
| | | |
| | | if (pAction->isNeedWaitReply()) { |
| | | // 妿éè¦çå¾
åå¤ |
| | | // 妿éè¦çå¾
åå¤ |
| | | int nRet = WaitForSingleObject(pAction->getEvent(), pAction->getTimeout() * 1000); |
| | | if (nRet == WAIT_TIMEOUT) { |
| | | TRACE("Timeout...\n"); |
| | | CContext* pContext = pAction->getContext(); |
| | | if (pContext != NULL) { |
| | | //pContext->setRetCode(CRC_TIMEOUT); |
| | | //pContext->setRetMsg("è¶
æ¶"); |
| | | //pContext->setRetMsg("è¶
æ¶"); |
| | | //pContext->setEvent(); |
| | | } |
| | | } |
| | |
| | | return 0; |
| | | } |
| | | |
| | | // éç¨çreply ack彿° |
| | | // éç¨çreply ack彿° |
| | | void CHsmsPassive::replyAck(int s, int f, unsigned int systemBytes, BYTE ack, const char* pszAckName) |
| | | { |
| | | IMessage* pMessage = NULL; |
| | |
| | | } |
| | | |
| | | |
| | | // 交ç±ä¸å±åºç¨æ¥è·åæºå¨å¸¸éå¼ |
| | | // 交ç±ä¸å±åºç¨æ¥è·åæºå¨å¸¸éå¼ |
| | | if (m_listener.onEQOffLine != nullptr) { |
| | | m_listener.onEQOffLine(this); |
| | | } |
| | | |
| | | |
| | | // åå¤ |
| | | // åå¤ |
| | | replyAck(1, 16, pRecv->getHeader()->systemBytes, BYTE(0), "OFLACK"); |
| | | return 0; |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | // 交ç±ä¸å±åºç¨æ¥è·åæºå¨å¸¸éå¼ |
| | | // 交ç±ä¸å±åºç¨æ¥è·åæºå¨å¸¸éå¼ |
| | | if (m_listener.onEQOnLine != nullptr) { |
| | | m_listener.onEQOnLine(this); |
| | | } |
| | | |
| | | |
| | | // åå¤ |
| | | // åå¤ |
| | | replyAck(1, 18, pRecv->getHeader()->systemBytes, BYTE(0), "ONLACK"); |
| | | return 0; |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | // è¦è·åç常é表表 |
| | | // è¦è·åç常é表表 |
| | | BOOL bCheckData = FALSE; |
| | | std::vector<EQConstant> eqcs; |
| | | { |
| | |
| | | } |
| | | |
| | | |
| | | // 交ç±ä¸å±åºç¨æ¥è·åæºå¨å¸¸éå¼ |
| | | // 交ç±ä¸å±åºç¨æ¥è·åæºå¨å¸¸éå¼ |
| | | if (m_listener.onEQConstantRequest != nullptr) { |
| | | m_listener.onEQConstantRequest(this, eqcs); |
| | | } |
| | | |
| | | |
| | | // åå¤ |
| | | // åå¤ |
| | | IMessage* pMessage = NULL; |
| | | HSMS_Create1Message(pMessage, m_nSessionId, 1, 14, pRecv->getHeader()->systemBytes); |
| | | ASSERT(pMessage); |
| | |
| | | } |
| | | |
| | | |
| | | // è¦è®¾ç½®ç常é表表 |
| | | // è¦è®¾ç½®ç常é表表 |
| | | BOOL bCheckData = FALSE; |
| | | std::vector<EQConstant> eqcs; |
| | | { |
| | |
| | | } |
| | | |
| | | |
| | | // 交ç±ä¸å±åºç¨æ¥ä¿åå设置æºå¨å¸¸éå¼ |
| | | // 交ç±ä¸å±åºç¨æ¥ä¿åå设置æºå¨å¸¸éå¼ |
| | | std::vector<unsigned int> ecvs; |
| | | if (m_listener.onEQConstantSend != nullptr) { |
| | | m_listener.onEQConstantSend(this, eqcs); |
| | | } |
| | | |
| | | |
| | | // åå¤ |
| | | // åå¤ |
| | | replyAck(2, 16, pRecv->getHeader()->systemBytes, BYTE(0), "EACK"); |
| | | return 0; |
| | | } |
| | |
| | | if (pBody == nullptr || pBody->getType() != SITYPE::A) ER_PARAM_ERROR; |
| | | const char* pszMessage; |
| | | if (pBody->getString(pszMessage)) { |
| | | // æ´æ°æ¶é´ |
| | | // æ´æ°æ¶é´ |
| | | SYSTEMTIME time; |
| | | char szBuffer[20]; |
| | | memcpy(szBuffer, pszMessage, 16); |
| | |
| | | |
| | | |
| | | MYREPLY: |
| | | // æ£éªç»ææ¯å¦æ£ç¡® |
| | | // æ£éªç»ææ¯å¦æ£ç¡® |
| | | for (auto item : m_mapValueIdToPRTID) { |
| | | LOGE("=== vid:%d, prtid:%d", item.first, item.second); |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | // æ£éªç»ææ¯å¦æ£ç¡® |
| | | // æ£éªç»ææ¯å¦æ£ç¡® |
| | | for (auto item : m_mapReportIdToCEID) { |
| | | LOGE("=== prtid:%d, ceid:%d", item.first, item.second); |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | // åè°å°åºç¨å± |
| | | // åè°å°åºç¨å± |
| | | if (bCheckData) { |
| | | if (m_listener.onCommand != nullptr) { |
| | | m_listener.onCommand(this, pszCmdName, params); |
| | |
| | | void deleteAllReport(); |
| | | |
| | | // 仿件ä¸å è½½CVariableå表 |
| | | int loadVarialbleList(const char* pszFilepath); |
| | | int loadVarialbles(const char* pszFilepath); |
| | | |
| | | // åå¾CVariableå表 |
| | | std::vector<SERVO::CVariable*>& getVariables(); |
| | | |
| | | // å徿å®Variable |
| | | SERVO::CVariable* getVariable(int variableId); |
| | | |
| | | // 仿件ä¸å è½½CReport表表 |
| | | int loadReports(const char* pszFilepath); |
| | | |
| | | std::vector<SERVO::CReport*>& getReports(); |
| | | |
| | | void setListener(SECSListener listener); |
| | | unsigned OnCimWork(); |
| | |
| | | inline void Unlock() { LeaveCriticalSection(&m_criticalSection); } |
| | | int onRecvMsg(IMessage* pMessage); |
| | | void clearAllVariabel(); |
| | | std::vector<int> parseVidList(CString& strNums); |
| | | void clearAllReport(); |
| | | |
| | | private: |
| | | CModel* m_pModel; |
| | |
| | | |
| | | // CVariable vector |
| | | std::vector<SERVO::CVariable*> m_variabels; |
| | | |
| | | // CReport vector |
| | | std::vector<SERVO::CReport*> m_reports; |
| | | }; |
| | | |
| | |
| | | m_hsmsPassive.setSoftRev((LPTSTR)(LPCTSTR)strSoftRev); |
| | | CString strVarialbleFile; |
| | | strVarialbleFile.Format(_T("%s\\VariableList.txt"), (LPTSTR)(LPCTSTR)m_strWorkDir); |
| | | m_hsmsPassive.loadVarialbleList((LPTSTR)(LPCTSTR)strVarialbleFile); |
| | | m_hsmsPassive.loadVarialbles((LPTSTR)(LPCTSTR)strVarialbleFile); |
| | | m_hsmsPassive.init(this, "APP", 7000); |
| | | |
| | | strVarialbleFile.Format(_T("%s\\ReportList.txt"), (LPTSTR)(LPCTSTR)m_strWorkDir); |
| | | m_hsmsPassive.loadReports((LPTSTR)(LPCTSTR)strVarialbleFile); |
| | | m_hsmsPassive.init(this, "APP", 7000); |
| | | |
| | | SERVO::MasterListener masterListener; |
| | | masterListener.onMasterStateChanged = [&](void* pMaster, SERVO::MASTERSTATE state) -> void { |
| | |
| | | <ClInclude Include="ChangePasswordDlg.h" /> |
| | | <ClInclude Include="CMyStatusbar.h" /> |
| | | <ClInclude Include="CPageLinkSignal.h" /> |
| | | <ClInclude Include="CPageReport.h" /> |
| | | <ClInclude Include="CPageVarialbles.h" /> |
| | | <ClInclude Include="CReport.h" /> |
| | | <ClInclude Include="CRobotCmdContainerDlg.h" /> |
| | | <ClInclude Include="CRobotCmdTestDlg.h" /> |
| | |
| | | <ClCompile Include="ChangePasswordDlg.cpp" /> |
| | | <ClCompile Include="CMyStatusbar.cpp" /> |
| | | <ClCompile Include="CPageLinkSignal.cpp" /> |
| | | <ClCompile Include="CPageReport.cpp" /> |
| | | <ClCompile Include="CPageVarialbles.cpp" /> |
| | | <ClCompile Include="CReport.cpp" /> |
| | | <ClCompile Include="CRobotCmdContainerDlg.cpp" /> |
| | | <ClCompile Include="CRobotCmdTestDlg.cpp" /> |
| | |
| | | <ClCompile Include="CCollectionEvent.cpp" /> |
| | | <ClCompile Include="CReport.cpp" /> |
| | | <ClCompile Include="CVariable.cpp" /> |
| | | <ClCompile Include="CPageVarialbles.cpp" /> |
| | | <ClCompile Include="CPageReport.cpp" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ClInclude Include="AlarmManager.h" /> |
| | |
| | | <ClInclude Include="CCollectionEvent.h" /> |
| | | <ClInclude Include="CReport.h" /> |
| | | <ClInclude Include="CVariable.h" /> |
| | | <ClInclude Include="CPageVarialbles.h" /> |
| | | <ClInclude Include="CPageReport.h" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ResourceCompile Include="Servo.rc" /> |
| | |
| | | #include "UserManager.h" |
| | | #include "SystemLogManager.h" |
| | | #include "PortConfigurationDlg.h" |
| | | #include "CHMPropertyDlg.h" |
| | | #include "CPageVarialbles.h" |
| | | #include "CPageReport.h" |
| | | |
| | | |
| | | #ifdef _DEBUG |
| | |
| | | |
| | | void CServoDlg::OnMenuProjectVarialbleList() |
| | | { |
| | | AfxMessageBox("OnMenuProjectVarialbleList"); |
| | | CHMPropertyDlg dlg(_T("Variable|Rreport|Collection Event"), 658, 788); |
| | | |
| | | CPageReport* pPage1 = new CPageReport(); |
| | | pPage1->Create(IDD_PAGE_REPORT); |
| | | dlg.addPage(pPage1, "Report"); |
| | | |
| | | CPageVarialbles* pPage2 = new CPageVarialbles(); |
| | | pPage2->Create(IDD_PAGE_VARIABLE); |
| | | dlg.addPage(pPage2, "Variable"); |
| | | |
| | | dlg.DoModal(); |
| | | } |
| | | |
| | | void CServoDlg::OnUpdateMenuProjectVarialbleList(CCmdUI* pCmdUI) |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | RPTID,(VID1,VID2,...) |
| | | 300,(1,300) |
| | | 301,(1,300) |
| | | 600,(500,600,601) |
| | | 700,(500,700,701) |
| | | 10000,(200,201) |
| | | 10300,(1,10000) |
| | | 10051,(1,10000,10100,10101) |
| | | 10061,(1,10000,10100,10200) |
| | | 10062,(1,10000,10100,10201,10202) |
| | | 10071,(1,10000,10100,10203,20000) |
| | | 10072,(1,10000,10100,10203,20000,20001) |
| | | 10080,(1,10000,10100) |
| | | 20000,(1,10000,10203) |
| | | 30000,(1,30000,30001) |
| | | 31000,(1,31000,31001) |
| | | 40000,(1,10203,20000) |
| | |
| | | SVID,SV Name,SV Format,SV Remark |
| | | 100,PortTransferState,U1,"0=OutOfService\r\n1=TransferBlocked\r\n2=ReadyToLoad\r\n3=ReadyToUnload\r\n4=InService\r\n5=TransferReady" |
| | | 300,AccessMode,U1,"1=Manual\r\n2=Auto" |
| | | 100,PortTransferState,U1,0=OutOfService\r\n1=TransferBlocked\r\n2=ReadyToLoad\r\n3=ReadyToUnload\r\n4=InService\r\n5=TransferReady |
| | | 300,AccessMode,U1,1=Manual\r\n2=Auto |
| | | 500,Clock,A50, |
| | | 600,CurrentControlState,U1,"0:Offline:equipment\r\n1:Offline-Attempt\r\n2:Online\r\n3:Offline:host\r\n4:Online:Local\r\n5:Online:Remote" |
| | | 600,CurrentControlState,U1,0:Offline:equipment\r\n1:Offline-Attempt\r\n2:Online\r\n3:Offline:host\r\n4:Online:Local\r\n5:Online:Remote |
| | | 601,PreviousControlState,U1, |
| | | 700,CurrentProcessState,U1,"0:DOWN\r\n1:IDLE\r\n2.SETUP\r\n3.EXCUTING\r\n4.MAINTAIN\r\n5.ALARM" |
| | | 700,CurrentProcessState,U1,0:DOWN\r\n1:IDLE\r\n2.SETUP\r\n3.EXCUTING\r\n4.MAINTAIN\r\n5.ALARM |
| | | 701,PreviousProcessState,U1, |
| | | 800,EFEMPPExecName,A20, |
| | | 801,EQPPExecName,A20, |
| | | 1000,CJobSpace,U1, |
| | | 2000,RbRAxisTorque,I2,æºå¨äººRè½´æç© |
| | | 2001,RbLAxisTorque,l2,æºå¨äººLè½´æç© |
| | | 2002,RbZAxisTorque,l2,æºå¨äººZè½´æç© |
| | | 2003,RbTHAxisTorque,l2,æºå¨äººTHè½´æç© |
| | | 2004,RbXAxisTorque,l2,æºå¨äººXè½´æç© |
| | | 2005,AxisX111,l2,X111ç¸æºåç§»æ ½çµæºæç© |
| | | 2006,AxisX112,l2,X112ç¸æºåç§»æ ½çµæºæç© |
| | | 2007,AxisU113,l2,U113产åæè½¬çµæºæç© |
| | | 2008,AxisX114,l2,X114产åå·¦æ´åçµæºæç© |
| | | 2009,AxisY121,l2,Y121产å峿´åçµæºæç© |
| | | 2010,AxisY122,l2,Y122产ååæ´åçµæºæç© |
| | | 2011,AxisY123,l2,Y123产ååéµåçµæºæç© |
| | | 2012,MainAir,U2,æ»è¿æ°ååå¼ |
| | | 2013,MainVacuum,l2,æ»ç空ååå¼ |
| | | 2014,RbMainVacuum,l2,æºå¨äººçç©ºå¼ |
| | | 2015,LPMainVacuum,l2,LPç空å¼#D265 |
| | | 2016,LPMainAir,U2,LPåç©ºå¼ |
| | | 2017,ALVacuum,l2,Alignerçç©ºå¼ |
| | | 2018,FFU1RPM,U2,FFU1转é |
| | | 2019,FFU2RPM,U2,FFU2转é |
| | | 2020,FFU3RPM,U2,FFU3转é |
| | | 2021,FFU4RPM,U2,FFU4转é |
| | | 2022,ESDValue,I2,éçµæ£æµå¼ |
| | | 2023,OCREnable,U2,"OCR使è½ï¼O:å¼å¯ 1ï¼å±è½" |
| | | 2024,CCDEnable,U2,"CCD使è½ï¼O:å¼å¯ 1ï¼å±è½" |
| | | 2025,FFUParameter,U2,FFU设å®å¼ |
| | | 2000,RbRAxisTorque,I2,æºå¨äººRè½´æç© |
| | | 2001,RbLAxisTorque,l2,æºå¨äººLè½´æç© |
| | | 2002,RbZAxisTorque,l2,æºå¨äººZè½´æç© |
| | | 2003,RbTHAxisTorque,l2,æºå¨äººTHè½´æç© |
| | | 2004,RbXAxisTorque,l2,æºå¨äººXè½´æç© |
| | | 2005,AxisX111,l2,X111ç¸æºåç§»æ ½çµæºæç© |
| | | 2006,AxisX112,l2,X112ç¸æºåç§»æ ½çµæºæç© |
| | | 2007,AxisU113,l2,U113产åæè½¬çµæºæç© |
| | | 2008,AxisX114,l2,X114产åå·¦æ´åçµæºæç© |
| | | 2009,AxisY121,l2,Y121产å峿´åçµæºæç© |
| | | 2010,AxisY122,l2,Y122产ååæ´åçµæºæç© |
| | | 2011,AxisY123,l2,Y123产ååéµåçµæºæç© |
| | | 2012,MainAir,U2,æ»è¿æ°ååå¼ |
| | | 2013,MainVacuum,l2,æ»ç空ååå¼ |
| | | 2014,RbMainVacuum,l2,æºå¨äººçç©ºå¼ |
| | | 2015,LPMainVacuum,l2,LPç空å¼#D265 |
| | | 2016,LPMainAir,U2,LPåç©ºå¼ |
| | | 2017,ALVacuum,l2,Alignerçç©ºå¼ |
| | | 2018,FFU1RPM,U2,FFU1转é |
| | | 2019,FFU2RPM,U2,FFU2转é |
| | | 2020,FFU3RPM,U2,FFU3转é |
| | | 2021,FFU4RPM,U2,FFU4转é |
| | | 2022,ESDValue,I2,éçµæ£æµå¼ |
| | | 2023,OCREnable,U2,"OCR使è½ï¼O:å¼å¯ 1ï¼å±è½" |
| | | 2024,CCDEnable,U2,"CCD使è½ï¼O:å¼å¯ 1ï¼å±è½" |
| | | 2025,FFUParameter,U2,FFU设å®å¼ |