Document/ECHINT-APDIII-011?Equipment??Acceptance?Specification-ÈýÆÚPanel?Bond-20240301.docxBinary files differ
Document/ECHINT-EHSIII-FR-019?ECHINTÉ豸°²È«¹æ¸ñV2.xlsxBinary files differ
Document/ECHINT?Common?Spec.xlsxBinary files differ
Document/ESWIN_EAS_Equipment HSMS Communication Specification_v0.2.docxBinary files differ
Document/ESWIN_EAS_Equipment_Communication_Specification(CC-LINK)_v3.1.docxBinary files differ
Document/Panel Bonder°ËÁãÁªºÏ SecsTest CheckList_v3.0.xlsxBinary files differ
Document/¡¾2¡¿É豸×Ô¶¯»¯Í¨ÐŹ淶?Communication?Specification?for?Equipment?Automation-V3.pdfBinary files differ
SourceCode/Bond/HSMSSDK/Include/ISECS2Item.h
@@ -31,5 +31,7 @@ virtual bool getSubItemString(int index, char*& pszText) = 0; virtual void reset() = 0; virtual ISECS2Item* addItem(const char* pszText, const char* pszNote) = 0; virtual ISECS2Item* addBinaryItem(const char* pszData, int nDataLen, const char* pszNote) = 0; virtual void setBinary(const char* pszData, int nLen, const char* pszNote) = 0; virtual ISECS2Item* addItem() = 0; }; SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -3,7 +3,11 @@ #include "Log.h" #include "Model.h" #include "Common.h" #include <time.h> char g_szAckOkData[] = { 0, 0, 0, 0 }; char g_szAckNgData[] = { 1, 0, 0, 0 }; unsigned __stdcall CimWorkThreadFunction(LPVOID lpParam) { @@ -26,11 +30,13 @@ m_pModel = nullptr; m_nActionTimeout = 6; m_nSystemByte = 0; m_strEquipmentModelType = "2860"; m_strSoftRev = _T("1.0.1"); m_hCimWorkThreadHandle = NULL; m_nCimWorkThrdaddr = 0; m_bCimWorking = FALSE; m_hCimWorkEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL); m_nSessionId = 1; InitializeCriticalSection(&m_criticalSection); } @@ -109,7 +115,9 @@ 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; if (!m_bAreYouThereRequest) { @@ -117,17 +125,20 @@ secsAreYouThereRequest(); } } */ }; auto onRecvSysMessage = [&](void* pFrom, IMessage* pMessage) -> void { LOGI("<HSMS>onRecvSysMessage:sessionId:%d, sType:%d systemBytes:%d", pMessage->getHeader()->sessionId, pMessage->getHeader()->sType, pMessage->getHeader()->systemBytes); onRecvMsg(pMessage); if (MSG_LINKTEST_REQ == pMessage->getHeader()->sType) { /* Sleep(10); if (!m_bAreYouThereRequest) { m_bAreYouThereRequest = TRUE; secsAreYouThereRequest(); requestYouThere(); } */ } }; @@ -147,7 +158,13 @@ LOGI("<HSMS>æ¶å°æ¶æ¯ S%dF%d", nStream, pHeader->function); if (nStream == 1 && pHeader->function == 1) { // S1F1 secsAreYouThereReply(pHeader->sessionId, pHeader->systemBytes); replyAreYouThere(pHeader->systemBytes); } else if (nStream == 1 && pHeader->function == 13) { replyEstablishCommunications(pHeader->systemBytes); } else if (nStream == 2 && pHeader->function == 31) { replyDatetime(pMessage); } }; @@ -251,7 +268,7 @@ } // S1F1 int CHsmsPassive::secsAreYouThereRequest() int CHsmsPassive::requestAreYouThere() { if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { return ER_NOTSELECT; @@ -261,7 +278,7 @@ CHsmsAction* pAction = new CHsmsAction(ACTION_HELLO, FALSE, m_nActionTimeout); m_listAction.push_back(pAction); IMessage* pMessage = NULL; HSMS_Create1Message(pMessage, 0xffff, 1 | REPLY, 1, ++m_nSystemByte); HSMS_Create1Message(pMessage, m_nSessionId, 1 | REPLY, 1, ++m_nSystemByte); ASSERT(pMessage); pAction->setSendMessage(pMessage); @@ -272,14 +289,14 @@ } // S1F2 int CHsmsPassive::secsAreYouThereReply(unsigned int sessionId, unsigned int systemBytes) int CHsmsPassive::replyAreYouThere(unsigned int systemBytes) { if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { return ER_NOTSELECT; } IMessage* pMessage = NULL; HSMS_Create1Message(pMessage, sessionId, 1, 2, systemBytes); HSMS_Create1Message(pMessage, m_nSessionId, 1, 2, systemBytes); ASSERT(pMessage); ISECS2Item* pItem = pMessage->getBody(); @@ -291,3 +308,74 @@ return 0; } // S1F14 int CHsmsPassive::replyEstablishCommunications(unsigned int systemBytes) { if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { return ER_NOTSELECT; } IMessage* pMessage = NULL; HSMS_Create1Message(pMessage, m_nSessionId, 1, 14, systemBytes); ASSERT(pMessage); ISECS2Item* pItem = pMessage->getBody(); pItem->addBinaryItem(g_szAckOkData, 1, "COMMACK"); ISECS2Item* pList = pItem->addItem(); pList->addItem(m_strEquipmentModelType.c_str(), "MDLN"); pList->addItem(m_strSoftRev.c_str(), "SOFTREV"); m_pPassive->sendMessage(pMessage); LOGI("<HSMS>[SECS Msg SEND]S1F14 (SysByte=%u)", pMessage->getHeader()->systemBytes); HSMS_Destroy1Message(pMessage); return 0; } // S2F31 #include <iostream> #include <time.h> #include <stdlib.h> #include <string.h> int CHsmsPassive::replyDatetime(IMessage* pRecv) { if (m_pPassive == NULL || STATE::SELECTED != m_pPassive->getState()) { return ER_NOTSELECT; } ISECS2Item* pBody = pRecv->getBody(); if (pBody == nullptr || pBody->getType() != SITYPE::A) ER_PARAM_ERROR; char* pszMessage; if (pBody->getString(pszMessage)) { // æ´æ°æ¶é´ SYSTEMTIME time; char szBuffer[20]; memcpy(szBuffer, pszMessage, 16); szBuffer[14] = '\0'; time.wSecond = atoi(&szBuffer[12]); szBuffer[12] = '\0'; time.wMinute = atoi(&szBuffer[10]); szBuffer[10] = '\0'; time.wHour = atoi(&szBuffer[8]); szBuffer[8] = '\0'; time.wDay = atoi(&szBuffer[6]); szBuffer[6] = '\0'; time.wMonth = atoi(&szBuffer[4]); szBuffer[4] = '\0'; time.wYear = atoi(&szBuffer[0]); time.wMilliseconds = 0; SetLocalTime(&time); } IMessage* pMessage = NULL; HSMS_Create1Message(pMessage, m_nSessionId, 2, 32, pRecv->getHeader()->systemBytes); ASSERT(pMessage); ISECS2Item* pItem = pMessage->getBody(); pItem->setBinary(g_szAckOkData, 1, "TIACK"); m_pPassive->sendMessage(pMessage); LOGI("<HSMS>[SECS Msg SEND]S2F32 (SysByte=%u)", pRecv->getHeader()->systemBytes); HSMS_Destroy1Message(pMessage); return 0; } SourceCode/Bond/Servo/HsmsPassive.h
@@ -7,7 +7,7 @@ #define ER_NOERROR 0 #define ER_NOTSELECT -1 #define ER_BUSY -2 #define ER_PARAM_ERROR -3 class CModel; class CHsmsPassive @@ -22,8 +22,14 @@ void setActionTimeout(int nSecond); int init(CModel* pModel, const char* pszName, unsigned int port); int term(); int secsAreYouThereRequest(); int secsAreYouThereReply(unsigned int sessionId, unsigned int systemBytes); public: int requestAreYouThere(); private: int replyAreYouThere(unsigned int systemBytes); int replyEstablishCommunications(unsigned int systemBytes); int replyDatetime(IMessage* pRecv); private: inline void Lock() { EnterCriticalSection(&m_criticalSection); } @@ -35,6 +41,7 @@ IPassive* m_pPassive; int m_nActionTimeout; unsigned int m_nSystemByte; unsigned short m_nSessionId; BOOL m_bAreYouThereRequest; std::string m_strEquipmentModelType; std::string m_strSoftRev; SourceCode/Bond/Servo/Servo.rcBinary files differ
SourceCode/Bond/Servo/Servo.vcxproj
@@ -201,6 +201,7 @@ <ClInclude Include="LogEdit.h" /> <ClInclude Include="Model.h" /> <ClInclude Include="Resource.h" /> <ClInclude Include="SecsTestDlg.h" /> <ClInclude Include="Servo.h" /> <ClInclude Include="ServoDlg.h" /> <ClInclude Include="ServoGraph.h" /> @@ -217,6 +218,7 @@ <ClCompile Include="LogDlg.cpp" /> <ClCompile Include="LogEdit.cpp" /> <ClCompile Include="Model.cpp" /> <ClCompile Include="SecsTestDlg.cpp" /> <ClCompile Include="Servo.cpp" /> <ClCompile Include="ServoDlg.cpp" /> <ClCompile Include="ServoGraph.cpp" /> SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -66,6 +66,9 @@ <ClInclude Include="Context.h"> <Filter>头æä»¶</Filter> </ClInclude> <ClInclude Include="SecsTestDlg.h"> <Filter>头æä»¶</Filter> </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="Servo.cpp"> @@ -107,6 +110,9 @@ <ClCompile Include="Context.cpp"> <Filter>æºæä»¶</Filter> </ClCompile> <ClCompile Include="SecsTestDlg.cpp"> <Filter>æºæä»¶</Filter> </ClCompile> </ItemGroup> <ItemGroup> <ResourceCompile Include="Servo.rc"> SourceCode/Bond/Servo/ServoDlg.cpp
@@ -8,6 +8,7 @@ #include "afxdialogex.h" #include "Common.h" #include "Log.h" #include "SecsTestDlg.h" #ifdef _DEBUG @@ -97,6 +98,16 @@ ON_MESSAGE(ID_MSG_LOGDLG_HIDE, &CServoDlg::OnLogDlgHide) ON_WM_MOVING() ON_WM_MOVE() ON_COMMAND(ID_MENU_FILE_EXIT, &CServoDlg::OnMenuFileExit) ON_UPDATE_COMMAND_UI(ID_MENU_FILE_EXIT, &CServoDlg::OnUpdateMenuFileExit) ON_COMMAND(ID_MENU_FILE_SETTINGS, &CServoDlg::OnMenuFileSettings) ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SETTINGS, &CServoDlg::OnUpdateMenuFileSettings) ON_COMMAND(ID_MENU_FILE_SECSTEST, &CServoDlg::OnMenuFileSecsTest) ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SECSTEST, &CServoDlg::OnUpdateMenuFileSecsTest) ON_COMMAND(ID_MENU_WND_LOG, &CServoDlg::OnMenuWndLog) ON_UPDATE_COMMAND_UI(ID_MENU_WND_LOG, &CServoDlg::OnUpdateMenuWndLog) ON_COMMAND(ID_MENU_HELP_ABOUT, &CServoDlg::OnMenuHelpAbout) ON_WM_INITMENUPOPUP() END_MESSAGE_MAP() @@ -130,6 +141,13 @@ // æ§è¡æ¤æä½ SetIcon(m_hIcon, TRUE); // è®¾ç½®å¤§å¾æ SetIcon(m_hIcon, FALSE); // 设置å°å¾æ // èå CMenu menu; menu.LoadMenu(IDR_MENU_APP); SetMenu(&menu); // ͼʾ @@ -278,7 +296,123 @@ return static_cast<HCURSOR>(m_hIcon); } void CServoDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) { ASSERT(pPopupMenu != NULL); CCmdUI state; state.m_pMenu = pPopupMenu; ASSERT(state.m_pOther == NULL); ASSERT(state.m_pParentMenu == NULL); HMENU hParentMenu; if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu) state.m_pParentMenu = pPopupMenu; else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL) { CWnd* pParent = this; if (pParent != NULL && (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL) { int nIndexMax = ::GetMenuItemCount(hParentMenu); for (int nIndex = 0; nIndex < nIndexMax; nIndex++) { if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu) { state.m_pParentMenu = CMenu::FromHandle(hParentMenu); break; } } } } state.m_nIndexMax = pPopupMenu->GetMenuItemCount(); for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax; state.m_nIndex++) { state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex); if (state.m_nID == 0) continue; ASSERT(state.m_pOther == NULL); ASSERT(state.m_pMenu != NULL); if (state.m_nID == (UINT)-1) { state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex); if (state.m_pSubMenu == NULL || (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 || state.m_nID == (UINT)-1) { continue; } state.DoUpdate(this, TRUE); } else { state.m_pSubMenu = NULL; state.DoUpdate(this, FALSE); } UINT nCount = pPopupMenu->GetMenuItemCount(); if (nCount < state.m_nIndexMax) { state.m_nIndex -= (state.m_nIndexMax - nCount); while (state.m_nIndex < nCount && pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID) { state.m_nIndex++; } } state.m_nIndexMax = nCount; } } void CServoDlg::OnMenuFileSettings() { } void CServoDlg::OnUpdateMenuFileSettings(CCmdUI* pCmdUI) { pCmdUI->Enable(TRUE); } void CServoDlg::OnMenuFileSecsTest() { CSecsTestDlg dlg; dlg.DoModal(); } void CServoDlg::OnUpdateMenuFileSecsTest(CCmdUI* pCmdUI) { pCmdUI->Enable(TRUE); } void CServoDlg::OnMenuWndLog() { OnBnClickedButtonLog(); } void CServoDlg::OnUpdateMenuWndLog(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bShowLogWnd); } void CServoDlg::OnMenuFileExit() { PostMessage(WM_CLOSE); } void CServoDlg::OnUpdateMenuFileExit(CCmdUI* pCmdUI) { pCmdUI->Enable(TRUE); } void CServoDlg::OnMenuHelpAbout() { CAboutDlg dlgAbout; dlgAbout.DoModal(); } void CServoDlg::OnBnClickedOk() { @@ -337,7 +471,6 @@ } ASSERT(m_pLogDlg); m_pLogDlg->ShowWindow(m_bShowLogWnd ? SW_SHOW : SW_HIDE); LOGE("OnBnClickedButtonLog"); UpdateLogBtn(); } SourceCode/Bond/Servo/ServoDlg.h
@@ -60,4 +60,14 @@ afx_msg LRESULT OnLogDlgHide(WPARAM wParam, LPARAM lParam); afx_msg void OnMoving(UINT fwSide, LPRECT pRect); afx_msg void OnMove(int x, int y); afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu); afx_msg void OnMenuFileSettings(); afx_msg void OnUpdateMenuFileSettings(CCmdUI* pCmdUI); afx_msg void OnMenuFileSecsTest(); afx_msg void OnUpdateMenuFileSecsTest(CCmdUI* pCmdUI); afx_msg void OnMenuWndLog(); afx_msg void OnUpdateMenuWndLog(CCmdUI* pCmdUI); afx_msg void OnMenuFileExit(); afx_msg void OnUpdateMenuFileExit(CCmdUI* pCmdUI); afx_msg void OnMenuHelpAbout(); }; SourceCode/Bond/Servo/resource.hBinary files differ