123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503 |
- // CSMachineDlg.cpp: 实现文件
- //
- #include "pch.h"
- #include "resource.h" // 主符号
- #include "CSMachineDlg.h"
- #include "afxdialogex.h"
- #include "CConfigDlg.h"
- //********************************状态机接口函数指针********************************
- typedef void*(__stdcall* _CreateStateMachine)(void);
- typedef void(__stdcall* _DeleteStateMachine)(void*);
- // CSMachineDlg 对话框
- IMPLEMENT_DYNAMIC(CSMachineDlg, CDiosBasicDlg)
- CSMachineDlg::CSMachineDlg(CWnd* pParent /*=nullptr*/)
- : CDiosBasicDlg(Dev_SMachine, IDD_DIALOG6, pParent)
- {
- InitLog();
- m_hStateFinishFlag = CreateEvent(NULL, FALSE, FALSE, 0);
- m_hStateExitFlag = CreateEvent(NULL, FALSE, FALSE, 0);
- m_strCfgFile = "xml or json";
- }
- CSMachineDlg::~CSMachineDlg()
- {
- ExitLog();
- }
- void CSMachineDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialogEx::DoDataExchange(pDX);
- }
- BEGIN_MESSAGE_MAP(CSMachineDlg, CDialogEx)
- ON_BN_CLICKED(IDC_BUTTON3, &CSMachineDlg::OnBnClickedButton3)
- ON_BN_CLICKED(IDC_BUTTON1, &CSMachineDlg::OnBnClickedButton1)
- ON_BN_CLICKED(IDC_BUTTON2, &CSMachineDlg::OnBnClickedButton2)
- ON_BN_CLICKED(IDC_BUTTON4, &CSMachineDlg::OnBnClickedButton4)
- ON_BN_CLICKED(IDC_BUTTON5, &CSMachineDlg::OnBnClickedButton5)
- ON_BN_CLICKED(IDC_BUTTON6, &CSMachineDlg::OnBnClickedButton6)
- ON_BN_CLICKED(IDC_BUTTON7, &CSMachineDlg::OnBnClickedButton7)
- ON_BN_CLICKED(IDC_BUTTON8, &CSMachineDlg::OnBnClickedButton8)
- ON_BN_CLICKED(IDC_BUTTON9, &CSMachineDlg::OnBnClickedButton9)
- ON_BN_CLICKED(IDC_BUTTON10, &CSMachineDlg::OnBnClickedButton10)
- ON_BN_CLICKED(IDC_BUTTON11, &CSMachineDlg::OnBnClickedButton11)
- ON_BN_CLICKED(IDC_BUTTON12, &CSMachineDlg::OnBnClickedButton12)
- ON_BN_CLICKED(IDC_BUTTON13, &CSMachineDlg::OnBnClickedButton13)
- ON_BN_CLICKED(IDC_BUTTON14, &CSMachineDlg::OnBnClickedButton14)
- ON_BN_CLICKED(IDC_BUTTON15, &CSMachineDlg::OnBnClickedButton15)
- END_MESSAGE_MAP()
- // CSMachineDlg 消息处理程序
- //初始化配置
- BOOL CSMachineDlg::OnInitDialog()
- {
- CDiosBasicDlg::OnInitDialog();
- return TRUE;
- }
- DWORD CSMachineDlg::WaitforStateNotify(LPVOID pParam)
- {
- CString log;
- mLog::Debug("Begin WaitforDriverNotify");
- CSMachineDlg* pCurSM = (CSMachineDlg*)pParam;
- if (pCurSM == NULL)
- {
- return 0;
- }
- HANDLE HandleArray[3];
- HandleArray[0] = pCurSM->m_hStateFinishFlag;
- HandleArray[1] = pCurSM->m_ptrSMachine->GetStateTransEvent();
- bool loopFlag = true;
- while (loopFlag)
- {
- DWORD dwResult = WaitForMultipleObjects(2, HandleArray, FALSE, INFINITE);
- switch (dwResult)
- {
- case WAIT_OBJECT_0:
- {
- //mLog::Debug("StateNotifyThread: Exit!");
- loopFlag = false;
- }break;
- case WAIT_OBJECT_0 + 1:
- {
- string strname;
- pCurSM->m_ptrSMachine->GetCurrentState(strname);
- mLog::Info("PopStateChange[{$}]", strname.c_str());
- pCurSM->GetDlgItem(IDC_EDIT8)->SetWindowText(strname.c_str());
- if(pCurSM->m_bRunMode)
- {
- pCurSM->m_ptrSMachine->SetRunningState(true);
- }
- }break;
- case WAIT_TIMEOUT:
- {}break;
- default:
- break;
- }
- }
- SetEvent(pCurSM->m_hStateExitFlag);
- mLog::Debug("Exit WaitforDriverNotify Begin");
- return 1;
- }
- //设备初始化
- bool CSMachineDlg::AppInitial(bool act)
- {
- return CreatMode(act);
- }
- //初始化日志模块
- bool CSMachineDlg::InitLog()
- {
- //string strLogPath = GetProcessDirectory() + UnitTool_LogPath;
- ////Log4CPP::ThreadContext::Map::Set("LogFileName", cfgKey.c_str());
- //Log4CPP::GlobalContext::Map::Set(ECOM::Utility::Hash(UnitTool_LogFileName), UnitTool_DevType_SM);
- //auto rc = Log4CPP::LogManager::LoadConfigFile(strLogPath.c_str());
- //mLog::gLogger = Log4CPP::LogManager::GetLogger(UnitTool_DevType_SM);
- //string version;
- //if (GetVersion(version))
- //{
- // mLog::Info("===============log begin : [{$}] version:{$} ===================\n", UnitTool_DevType_SM, version.c_str());
- // return true;
- //}
- //else
- //{
- // mLog::Info("===============log begin : [{$}] version:0.0.0.0 ===================\n", UnitTool_DevType_SM);
- //}
- return true;
- }
- void CSMachineDlg::ExitLog()
- {
- //if (mLog::gLogger)
- //{
- // mLog::Info("===============log end ===================");
- // mLog::Close();
- // mLog::gLogger = nullptr;
- //}
- }
- //设置消息对照表
- void CSMachineDlg::SetMagMap()
- {
- CString log;
- if (m_hDevLib)
- {
- CString tempStr;
- tempStr.Format("%s", m_strCfgFile.c_str());
- GetDlgItem(IDC_EDIT1)->SetWindowText(tempStr);
- }
- }
- void CSMachineDlg::InitPageElements(bool act)
- {
- if (act)
- {
- ShowPageElements(FALSE, TRUE, FALSE, FALSE);
- SetMagMap();
- }
- else
- {
- ShowPageElements(TRUE, FALSE, TRUE, FALSE);
- }
- }
- //设置窗口元素显示
- void CSMachineDlg::ShowPageElements(bool init, bool exit, bool cfg, bool general)
- {
- __super::ShowPageElements(init, exit, cfg, general);
- bool temp = exit;
- //LoadMachine
- GetDlgItem(IDC_BUTTON4)->EnableWindow(temp);
- GetDlgItem(IDC_EDIT1)->EnableWindow(temp);
- //SetMSName
- GetDlgItem(IDC_BUTTON5)->EnableWindow(temp);
- GetDlgItem(IDC_EDIT2)->EnableWindow(temp);
- //AddDevices
- GetDlgItem(IDC_BUTTON6)->EnableWindow(temp);
- GetDlgItem(IDC_EDIT3)->EnableWindow(temp);
- GetDlgItem(IDC_EDIT4)->EnableWindow(temp);
- //InitPreState or StartSM or StopSM
- GetDlgItem(IDC_BUTTON7)->EnableWindow(temp);
- GetDlgItem(IDC_BUTTON8)->EnableWindow(temp);
- GetDlgItem(IDC_BUTTON9)->EnableWindow(temp);
- //SetRunState
- GetDlgItem(IDC_BUTTON10)->EnableWindow(temp);
- GetDlgItem(IDC_EDIT5)->EnableWindow(temp);
- //GetSMError
- GetDlgItem(IDC_BUTTON11)->EnableWindow(temp);
- GetDlgItem(IDC_EDIT6)->EnableWindow(temp);
- //GetSMName
- GetDlgItem(IDC_BUTTON12)->EnableWindow(temp);
- GetDlgItem(IDC_EDIT7)->EnableWindow(temp);
- //GetCurState or RunMode?
- GetDlgItem(IDC_BUTTON13)->EnableWindow(temp);
- GetDlgItem(IDC_EDIT8)->EnableWindow(temp);
- GetDlgItem(IDC_BUTTON14)->EnableWindow(temp);
- GetDlgItem(IDC_BUTTON14)->SetWindowText("AutoRun");
- //DebugMode?
- GetDlgItem(IDC_BUTTON15)->EnableWindow(temp);
- GetDlgItem(IDC_BUTTON15)->SetWindowText("DebugDisable");
- }
- bool CSMachineDlg::CreatMode(bool act)
- {
- CString log;
- if (act)
- {
- if (m_hDevLib != NULL)
- {
- FreeLibrary(m_hDevLib);
- m_hDevLib = NULL;
- }
- string strCFGPath("");
- string strDLLPath("");
- if (!OpenCFGAndGetDllPath(strCFGPath, strDLLPath))
- {
- log.Format("%s OpenCFGAndGetDllPath failed", m_strLogTitle.c_str());
- mLog::Error(log);
- ToolsDlgLog(log);
- return false;
- }
- m_hDevLib = LoadLibraryEx(strDLLPath.c_str(), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
- if (m_hDevLib == NULL)
- {
- DWORD ret = GetLastError();
- log.Format("%s Failed to load library ret = %d", m_strLogTitle.c_str(), ret);
- mLog::Error(log);
- ToolsDlgLog(log);
- return false;
- }
- auto funHandle = (_CreateStateMachine)GetProcAddress(m_hDevLib, "CreateDiosSMachine");
- if (funHandle)
- {
- mLog::Debug("{$}get [CreateDiosSMachine]function successful", m_strLogTitle.c_str());
- m_ptrSMachine = (DiosSMachine*)funHandle();
- if (!m_ptrSMachine)
- {
- log.Format("%s CreateDiosSMachine failed", m_strLogTitle.c_str());
- mLog::Error(log);
- ToolsDlgLog(log);
- return false;
- }
- }
- }
- else
- {
- auto funHandle = (_DeleteStateMachine)GetProcAddress(m_hDevLib, "DeleteDiosSMachine");
- if (funHandle && m_ptrSMachine)
- {
- mLog::Debug("{$}get [DeleteDiosSMachine]function successful", m_strLogTitle.c_str());
- funHandle((void*)m_ptrSMachine);
- }
- if (m_hDevLib != NULL)
- {
- FreeLibrary(m_hDevLib);
- m_hDevLib = NULL;
- }
- }
- return true;
- }
- //选择配置
- void CSMachineDlg::OnBnClickedButton3()
- {
- CString log;
- nsCFG::CSMachineCfgDlg dlgcfg(Dev_SMachine, m_strCfgLib);
- dlgcfg.DoModal();
- if (m_strCfgLib.empty())
- {
- log.Format("(SMachine)- SMachine m_strCfgFile is empty");
- mLog::Warn(log);
- ToolsDlgLog(log);
- }
- else
- {
- ShowPageElements(TRUE, FALSE, TRUE, FALSE);
- }
- }
- //初始化
- void CSMachineDlg::OnBnClickedButton1()
- {
- CString log;
- if (!m_strCfgLib.empty())
- {
- if (AppInitial(true))
- {
- ShowPageElements(FALSE, TRUE, FALSE, FALSE);
- SetMagMap();
- mLog::Debug("(SMachine)- SMachine Initial success");
- }
- else
- {
- log.Format("(SMachine)- SMachine Initial fail");
- mLog::Error(log);
- ToolsDlgLog(log);
- }
- }
- else
- {
- log.Format("(SMachine)- glo_pSMachine not empty");
- mLog::Warn(log);
- ToolsDlgLog(log);
- }
- }
- //退出
- void CSMachineDlg::OnBnClickedButton2()
- {
- if (AppInitial(false))
- {
- ShowPageElements(TRUE, FALSE, TRUE, FALSE);
- }
- if (m_hNotifyThread != NULL)
- {
- SetEvent(m_hStateFinishFlag);
- WaitForSingleObject(m_hStateExitFlag, INFINITE);
- {
- mLog::Debug("Exit WaitforDriverNotify Finished");
- m_hNotifyThread = NULL;
- }
- }
- }
- //LoadMachine
- void CSMachineDlg::OnBnClickedButton4()
- {
- CString log;
- CString tempStr;
- GetDlgItem(IDC_EDIT1)->GetWindowText(tempStr);
- ResDataObject tempConfig;
- if (tempConfig.loadFile(tempStr))
- {
- m_strCfgFile = tempStr.GetBuffer();
- m_ptrSMachine->LoadMachine(tempConfig);
- }
- else
- {
- log.Format("Load WorkflowFile[%s]failed", tempStr);
- mLog::Error(log);
- ToolsDlgLog(log);
- }
- mLog::Debug("Enter WaitforDriverNotify");
- if (m_hNotifyThread == NULL)
- {
- DWORD m_HardwareStatusID;
- m_hNotifyThread = CreateThread(0, 0, WaitforStateNotify, this, 0, &m_HardwareStatusID);
- if (m_hNotifyThread == NULL)
- {
- mLog::Error("Start WaitforDriverNotify Thread Failed");
- }
- }
- }
- //SetMSName
- void CSMachineDlg::OnBnClickedButton5()
- {
- CString log;
- CString tempStr;
- GetDlgItem(IDC_EDIT2)->GetWindowText(tempStr);
- string param = tempStr.GetBuffer();
- m_ptrSMachine->SetStateMachineName(param);
- }
- //AddDevices
- void CSMachineDlg::OnBnClickedButton6()
- {
- CString log;
- CString tempStr;
- GetDlgItem(IDC_EDIT3)->GetWindowText(tempStr);
- ResDataObject json;
- CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT3);
- if (pEdit)
- {
- int lineCount = pEdit->SendMessage(EM_GETLINECOUNT);
- for (int i = 0; i < lineCount; ++i)
- {
- //处理获取到的每一行文本
- CString index;
- index.Format("P%d", i);
- CString strTemp;
- int dataLengh = pEdit->LineLength(pEdit->LineIndex(i));
- pEdit->GetLine(i, strTemp.GetBuffer(dataLengh), dataLengh);
- strTemp.ReleaseBuffer(dataLengh);
- json.add(index, strTemp);
- }
- }
- string param = tempStr.GetBuffer();
- GetDlgItem(IDC_EDIT4)->GetWindowText(tempStr);
- string strWS = tempStr.GetBuffer();
- m_ptrSMachine->AddDevices(json, strWS);
- }
- //InitPreState
- void CSMachineDlg::OnBnClickedButton7()
- {
- CString log;
- m_ptrSMachine->PrePareStateMachine();
- }
- //StartSM
- void CSMachineDlg::OnBnClickedButton8()
- {
- CString log;
- m_ptrSMachine->StartStateMachine();
- }
- //StopSM
- void CSMachineDlg::OnBnClickedButton9()
- {
- CString log;
- m_ptrSMachine->StopStateMachine(5000);
- }
- //TriggerEvent
- void CSMachineDlg::OnBnClickedButton10()
- {
- CString log;
- CString tempStr;
- GetDlgItem(IDC_EDIT5)->GetWindowText(tempStr);
- string param = tempStr.GetBuffer();
- m_ptrSMachine->TriggerEvent(param);
- }
- //GetSMError
- void CSMachineDlg::OnBnClickedButton11()
- {
- CString log;
- CString tempStr;
- ResDataObject ErrInfo;
- tempStr = ErrInfo.encode();
- GetDlgItem(IDC_EDIT6)->GetWindowText(tempStr);
- }
- //GetSMName
- void CSMachineDlg::OnBnClickedButton12()
- {
- CString log;
- CString tempStr;
- string param = m_ptrSMachine->GetStateMachineName();
- tempStr = param.c_str();
- GetDlgItem(IDC_EDIT7)->SetWindowText(tempStr);
- }
- //GoToState
- void CSMachineDlg::OnBnClickedButton13()
- {
- CString log;
- if (m_bRunMode)
- {
- CString tempStr;
- string param;
- m_ptrSMachine->GetCurrentState(param);
- tempStr = param.c_str();
- GetDlgItem(IDC_EDIT8)->SetWindowText(tempStr);
- }
- else
- {
- m_ptrSMachine->SetRunningState(true);
- }
- }
- //RunMode?
- void CSMachineDlg::OnBnClickedButton14()
- {
- if (m_bRunMode)
- {
- m_bRunMode = false;
- GetDlgItem(IDC_BUTTON14)->SetWindowText("ManualRun");
- }
- else
- {
- m_bRunMode = true;
- GetDlgItem(IDC_BUTTON14)->SetWindowText("AutoRun");
- }
- }
- //DebugMode?
- void CSMachineDlg::OnBnClickedButton15()
- {
- if (m_bDebugMode)
- {
- m_bDebugMode = false;
- GetDlgItem(IDC_BUTTON15)->SetWindowText("DebugDisable");
- }
- else
- {
- m_bDebugMode = true;
- GetDlgItem(IDC_BUTTON15)->SetWindowText("DebugEnable");
- }
- m_ptrSMachine->SetDebugMode(m_bDebugMode);
- }
|