// PlcDeviceDlg.cpp : 实现文件 // #include "stdafx.h" #include "PlcMainDlg.h" #include "ModbusClient.h" #include "afxdialogex.h" #include "PluginPlc.h" #include "resource.h" #define TIMER_UPDATE_TOPLC 1 #define TIMER_UPDATE_TODLG 2 #define TIMER_RECONNECT_PLC 3 // CPlcDeviceDlg 对话框 IMPLEMENT_DYNAMIC(CPlcMainDlg, CDialogEx) CPlcMainDlg::CPlcMainDlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_DEV_PLC_DLG, pParent) { m_pModbusClient = NULL; m_bConnectServer = FALSE; //m_pMainWnd = (CPluginMainDialog *)pParent; } CPlcMainDlg::~CPlcMainDlg() { } void CPlcMainDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_IPADDRESS, m_ipAddrCtrl); DDX_Control(pDX, IDC_BTN_OPEN_FDOOR, m_btnOpFdColor); DDX_Control(pDX, IDC_BTN_CLOSE_FDOOR, m_btnCoFdColor); DDX_Control(pDX, IDC_BTN_OPEN_BDOOR, m_btnOpBdColor); DDX_Control(pDX, IDC_BTN_CLOSE_BDOOR, m_btnCoBdColor); DDX_Control(pDX, IDC_BTN_IndoorLsta, m_btnInDLRColor); DDX_Control(pDX, IDC_BTN_IndoorRsta, m_btnInDRRColor); DDX_Control(pDX, IDC_BTN_OutdoorLsta, m_btnOutDLRColor); DDX_Control(pDX, IDC_BTN_OutdoorRsta, m_btnOutDRRColor); DDX_Control(pDX, IDC_BTN_Fsafeside, m_btnFsafeSColor); DDX_Control(pDX, IDC_BTN_Bsafeside, m_btnBsafeSColor); DDX_Control(pDX, IDC_BTN_Lsafeside, m_btnLsafeSColor); DDX_Control(pDX, IDC_BTN_Rsafeside, m_btnRsafeSColor); DDX_Control(pDX, IDC_BTN_Fradarslow, m_btnFradarSColor); DDX_Control(pDX, IDC_BTN_Fradarstop, m_btnFradarTColor); DDX_Control(pDX, IDC_BTN_Bradarslow, m_btnBradarSColor); DDX_Control(pDX, IDC_BTN_Bradarstop, m_btnBradarTColor); DDX_Control(pDX, IDC_BTN_AGVEstop, m_btnAGVEstopColor); DDX_Control(pDX, IDC_BTN_Shiedradar, m_btnShieldRColor); DDX_Control(pDX, IDC_BTN_Shieldsafedside, m_btnShieldSSColor); DDX_Control(pDX, IDC_BTN_LrollerFsensor, m_btnLrollerFsenColor); DDX_Control(pDX, IDC_BTN_LrollerMsensor, m_btnLrollerMsenColor); DDX_Control(pDX, IDC_BTN_LrollerBsensor, m_btnLrollerBsenColor); DDX_Control(pDX, IDC_BTN_RrollerFsensor, m_btnRrollerFsenColor); DDX_Control(pDX, IDC_BTN_RrollerMsensor, m_btnRrollerMsenColor); DDX_Control(pDX, IDC_BTN_RrollerBsensor, m_btnRrollerBsenColor); DDX_Control(pDX, IDC_BTN_FDloadSte, m_btnFDloadSteColor); DDX_Control(pDX, IDC_BTN_BDloadSte, m_btnBDloadSteColor); DDX_Control(pDX, IDC_BTN_OpenBarrierGate, m_btnOpenBarrierGate); DDX_Control(pDX, IDC_BTN_CloseBarrierGate, m_btnCloseBarrierGate); DDX_Control(pDX, IDC_BTN_OpenShopRollDoor, m_btnOpenShopRollDoor); DDX_Control(pDX, IDC_EDIT_RemoteControl, m_txRemoteControl); } BEGIN_MESSAGE_MAP(CPlcMainDlg, CDialogEx) ON_BN_CLICKED(IDC_BTN_SET, &CPlcMainDlg::OnBnClickedBtnSet) ON_BN_CLICKED(IDC_BTN_OPEN_FDOOR, &CPlcMainDlg::OnBnClickedBtnOpenFdoor) ON_BN_CLICKED(IDC_BTN_CLOSE_FDOOR, &CPlcMainDlg::OnBnClickedBtnCloseFdoor) ON_BN_CLICKED(IDC_BTN_OPEN_BDOOR, &CPlcMainDlg::OnBnClickedBtnOpenBdoor) ON_BN_CLICKED(IDC_BTN_CLOSE_BDOOR, &CPlcMainDlg::OnBnClickedBtnCloseBdoor) ON_MESSAGE(WM_NETMESSAGE, OnNetMsg) ON_WM_TIMER() ON_BN_CLICKED(IDC_BTN_Lroller_F, &CPlcMainDlg::OnBnClickedBtnLrollerF) ON_BN_CLICKED(IDC_BTN_Lroller_B, &CPlcMainDlg::OnBnClickedBtnLrollerB) ON_BN_CLICKED(IDC_BTN_Lroller_Stop, &CPlcMainDlg::OnBnClickedBtnLrollerStop) ON_BN_CLICKED(IDC_BTN_Rroller_F, &CPlcMainDlg::OnBnClickedBtnRrollerF) ON_BN_CLICKED(IDC_BTN_Rroller_B, &CPlcMainDlg::OnBnClickedBtnRrollerB) ON_BN_CLICKED(IDC_BTN_Rroller_Stop, &CPlcMainDlg::OnBnClickedBtnRrollerStop) ON_BN_CLICKED(IDC_BTN_IndoorLsta, &CPlcMainDlg::OnBnClickedBtnIndoorlsta) ON_BN_CLICKED(IDC_BTN_IndoorRsta, &CPlcMainDlg::OnBnClickedBtnIndoorrsta) ON_BN_CLICKED(IDC_BTN_OutdoorLsta, &CPlcMainDlg::OnBnClickedBtnOutdoorlsta) ON_BN_CLICKED(IDC_BTN_OutdoorRsta, &CPlcMainDlg::OnBnClickedBtnOutdoorrsta) ON_BN_CLICKED(IDC_BTN_IndoorStop, &CPlcMainDlg::OnBnClickedBtnIndoorstop) ON_BN_CLICKED(IDC_BTN_OutdoorStop, &CPlcMainDlg::OnBnClickedBtnOutdoorstop) ON_BN_CLICKED(IDC_BTN_Shiedradar, &CPlcMainDlg::OnBnClickedBtnShiedradar) ON_BN_CLICKED(IDC_BTN_Shieldsafedside, &CPlcMainDlg::OnBnClickedBtnShieldsafedside) ON_BN_CLICKED(IDC_BTN_OpenBarrierGate, &CPlcMainDlg::OnBnClickedBtnOpenbarriergate) ON_BN_CLICKED(IDC_BTN_CloseBarrierGate, &CPlcMainDlg::OnBnClickedBtnClosebarriergate) ON_BN_CLICKED(IDC_BTN_OpenShopRollDoor, &CPlcMainDlg::OnBnClickedBtnOpenshoprolldoor) END_MESSAGE_MAP() // CPlcDeviceDlg 消息处理程序 BOOL CPlcMainDlg::OnInitDialog() { CDialogEx::OnInitDialog(); //读取配置文件 ReadConfigFromIni(); //连接PLC ConnectPlcController(); MfcButtonInit(); SetTimer(TIMER_UPDATE_TOPLC, 100, NULL); SetTimer(TIMER_UPDATE_TODLG, 200, NULL); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } void CPlcMainDlg::MfcButtonInit() { m_btnOpFdColor.m_bTransparent = FALSE; //允许改变颜色 m_btnOpFdColor.m_bDontUseWinXPTheme = TRUE; m_btnCoFdColor.m_bTransparent = FALSE; m_btnCoFdColor.m_bDontUseWinXPTheme = TRUE; m_btnOpBdColor.m_bTransparent = FALSE; m_btnOpBdColor.m_bDontUseWinXPTheme = TRUE; m_btnCoBdColor.m_bTransparent = FALSE; m_btnCoBdColor.m_bDontUseWinXPTheme = TRUE; m_btnInDLRColor.m_bTransparent = FALSE; m_btnInDLRColor.m_bDontUseWinXPTheme = TRUE; m_btnInDRRColor.m_bTransparent = FALSE; m_btnInDRRColor.m_bDontUseWinXPTheme = TRUE; m_btnOutDLRColor.m_bTransparent = FALSE; m_btnOutDLRColor.m_bDontUseWinXPTheme = TRUE; m_btnOutDRRColor.m_bTransparent = FALSE; m_btnOutDRRColor.m_bDontUseWinXPTheme = TRUE; m_btnFsafeSColor.m_bTransparent = FALSE; m_btnFsafeSColor.m_bDontUseWinXPTheme = TRUE; m_btnBsafeSColor.m_bTransparent = FALSE; m_btnBsafeSColor.m_bDontUseWinXPTheme = TRUE; m_btnLsafeSColor.m_bTransparent = FALSE; m_btnLsafeSColor.m_bDontUseWinXPTheme = TRUE; m_btnRsafeSColor.m_bTransparent = FALSE; m_btnRsafeSColor.m_bDontUseWinXPTheme = TRUE; m_btnFradarSColor.m_bTransparent = FALSE; m_btnFradarSColor.m_bDontUseWinXPTheme = TRUE; m_btnFradarTColor.m_bTransparent = FALSE; m_btnFradarTColor.m_bDontUseWinXPTheme = TRUE; m_btnBradarSColor.m_bTransparent = FALSE; m_btnBradarSColor.m_bDontUseWinXPTheme = TRUE; m_btnBradarTColor.m_bTransparent = FALSE; m_btnBradarTColor.m_bDontUseWinXPTheme = TRUE; m_btnAGVEstopColor.m_bTransparent = FALSE; m_btnAGVEstopColor.m_bDontUseWinXPTheme = TRUE; m_btnShieldRColor.m_bTransparent = FALSE; m_btnShieldRColor.m_bDontUseWinXPTheme = TRUE; m_btnShieldSSColor.m_bTransparent = FALSE; m_btnShieldSSColor.m_bDontUseWinXPTheme = TRUE; m_btnLrollerFsenColor.m_bTransparent = FALSE; m_btnLrollerFsenColor.m_bDontUseWinXPTheme = TRUE; m_btnLrollerMsenColor.m_bTransparent = FALSE; m_btnLrollerMsenColor.m_bDontUseWinXPTheme = TRUE; m_btnLrollerBsenColor.m_bTransparent = FALSE; m_btnLrollerBsenColor.m_bDontUseWinXPTheme = TRUE; m_btnRrollerFsenColor.m_bTransparent = FALSE; m_btnRrollerFsenColor.m_bDontUseWinXPTheme = TRUE; m_btnRrollerMsenColor.m_bTransparent = FALSE; m_btnRrollerMsenColor.m_bDontUseWinXPTheme = TRUE; m_btnRrollerBsenColor.m_bTransparent = FALSE; m_btnRrollerBsenColor.m_bDontUseWinXPTheme = TRUE; m_btnFDloadSteColor.m_bTransparent = FALSE; m_btnFDloadSteColor.m_bDontUseWinXPTheme = TRUE; m_btnBDloadSteColor.m_bTransparent = FALSE; m_btnBDloadSteColor.m_bDontUseWinXPTheme = TRUE; m_btnOpenBarrierGate.m_bTransparent = FALSE; m_btnOpenBarrierGate.m_bDontUseWinXPTheme = TRUE; m_btnCloseBarrierGate.m_bTransparent = FALSE; m_btnCloseBarrierGate.m_bDontUseWinXPTheme = TRUE; m_btnOpenShopRollDoor.m_bTransparent = FALSE; m_btnOpenShopRollDoor.m_bDontUseWinXPTheme = TRUE; } LRESULT CPlcMainDlg::OnNetMsg(WPARAM wparam, LPARAM lparam) { switch (wparam) { case NET_CONNECT_OK: { LogOutToFile("[info] 服务器已连接"); //m_pMainWnd->InsertLog(LOG_INFO, "The PLC Device Connect!"); KillTimer(TIMER_RECONNECT_PLC); SetTimer(TIMER_UPDATE_TOPLC, 100, NULL); m_bConnectServer = TRUE; //m_pMainWnd->UpdatePlcDeviceStatue(m_bConnectServer); break; } case NET_DISCONNECT: { //::PostMessage(m_pMainWnd->m_hWnd, WM_NETMESSAGE, PLC_DISCONNECT, NULL); //m_pThrdModbus->ExitInstance(); KillTimer(TIMER_UPDATE_TOPLC); SetTimer(TIMER_RECONNECT_PLC, 1000, NULL); m_bConnectServer = FALSE; //m_pMainWnd->UpdatePlcDeviceStatue(m_bConnectServer); //delete m_pThrdModbus; /*m_pThrdModbus->PostThreadMessage(WM_QUIT, 0, 0); m_pThrdModbus = NULL; ConnectPlcController();*/ break; } case NET_DATA_MSG: { NET_PACKET* pNetPacket = (NET_PACKET*)lparam; delete[] pNetPacket->pData; delete pNetPacket; break; } default: break; } return 0; } void CPlcMainDlg::ReadConfigFromIni() { CString strIniPath = theApp.m_strModulePath + "\\config.ini"; // 初始化设备配置 char acValue[32] = ""; GetPrivateProfileString("PLC", "IP", "", acValue, 32, strIniPath); m_strIpAddr = acValue; DWORD dwIP = inet_addr(acValue); unsigned char *pIP = (unsigned char*)&dwIP; m_ipAddrCtrl.SetAddress(*pIP, *(pIP + 1), *(pIP + 2), *(pIP + 3)); m_nPort = GetPrivateProfileInt("PLC", "PORT", 0, strIniPath); CString strPort; strPort.Format("%d", m_nPort); GetDlgItem(IDC_EDIT_PORT)->SetWindowText(strPort); return; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } void CPlcMainDlg::OnBnClickedBtnSet() { CString strIniPath = theApp.m_strModulePath + "\\config.ini"; BYTE nFild[4]; m_ipAddrCtrl.GetAddress(nFild[0], nFild[1], nFild[2], nFild[3]); CString strIpAddr; strIpAddr.Format("%d.%d.%d.%d", nFild[0], nFild[1], nFild[2], nFild[3]); WritePrivateProfileString("PLC", "IP", strIpAddr, strIniPath); CString strPort; GetDlgItem(IDC_EDIT_PORT)->GetWindowText(strPort); WritePrivateProfileString("PLC", "PORT", strPort, strIniPath); MessageBox("配置已更新, 请重启核心控制器."); } BOOL CPlcMainDlg::ConnectPlcController() { m_pModbusClient = new CModbusClient(m_strIpAddr, m_nPort, this->m_hWnd); return m_pModbusClient->CreateThread(); } void CPlcMainDlg::OpenFdoor() { m_stAGVTOPLCDATA.AGVControl_u.bits.OpFdoor = TRUE; m_stAGVTOPLCDATA.AGVControl_u.bits.CoFdoor = false; } void CPlcMainDlg::CloseFdoor() { m_stAGVTOPLCDATA.AGVControl_u.bits.CoFdoor = TRUE; m_stAGVTOPLCDATA.AGVControl_u.bits.OpFdoor = false; } void CPlcMainDlg::OpenBdoor() { m_stAGVTOPLCDATA.AGVControl_u.bits.OpBdoor = TRUE; m_stAGVTOPLCDATA.AGVControl_u.bits.CoBdoor = false; } void CPlcMainDlg::CloseBdoor() { m_stAGVTOPLCDATA.AGVControl_u.bits.CoBdoor = TRUE; m_stAGVTOPLCDATA.AGVControl_u.bits.OpBdoor = false; } bool m = true; void CPlcMainDlg::OnBnClickedBtnOpenFdoor() { OpenFdoor(); //int nResult = MessageBox("请确认是否打开前置卷帘门", "提示", MB_OKCANCEL | MB_ICONQUESTION); //if (nResult == IDOK) //{ // OpenFdoor(); //} //else if (nResult == IDCANCEL) //{ // // 用户点击了"取消" //} } void CPlcMainDlg::OnBnClickedBtnCloseFdoor() { CloseFdoor(); } void CPlcMainDlg::OnBnClickedBtnOpenBdoor() { OpenBdoor(); } void CPlcMainDlg::OnBnClickedBtnCloseBdoor() { CloseBdoor(); } void CPlcMainDlg::DisplayDLG() { if (m_stPLCTOAGVDATA.AGVstate_u.bits.FdoorOpen_ste) m_btnOpFdColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnOpFdColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.FdoorClose_ste) m_btnCoFdColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnCoFdColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.BdoorOpen_ste) m_btnOpBdColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnOpBdColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.BdoorClose_ste) m_btnCoBdColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnCoBdColor.SetFaceColor(RGB(255, 255, 255), true); //装卸输送线状态 if (m_stPLCTOAGVDATA.RollerState_u.bits.IndoorLRoller_ste) m_btnInDLRColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnInDLRColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.RollerState_u.bits.IndoorRRoller_ste) m_btnInDRRColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnInDRRColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.RollerState_u.bits.OutdoorLRoller_ste) m_btnOutDLRColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnOutDLRColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.RollerState_u.bits.OutdoorRRoller_ste) m_btnOutDRRColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnOutDRRColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.Fsafeside) m_btnFsafeSColor.SetFaceColor(RGB(255, 0, 0), true); else m_btnFsafeSColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.Bsafeside) m_btnBsafeSColor.SetFaceColor(RGB(255, 0, 0), true); else m_btnBsafeSColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.Lsafeside) m_btnLsafeSColor.SetFaceColor(RGB(255, 0, 0), true); else m_btnLsafeSColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.Rsafeside) m_btnRsafeSColor.SetFaceColor(RGB(255, 0, 0), true); else m_btnRsafeSColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.Fradarslow) m_btnFradarSColor.SetFaceColor(RGB(255, 133, 133), true); else m_btnFradarSColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.Fradarstop) m_btnFradarTColor.SetFaceColor(RGB(255, 0, 0), true); else m_btnFradarTColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.Bradarslow) m_btnBradarSColor.SetFaceColor(RGB(255, 133, 133), true); else m_btnBradarSColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.Bradarstop) m_btnBradarTColor.SetFaceColor(RGB(255, 0, 0), true); else m_btnBradarTColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.AGVEstop) m_btnAGVEstopColor.SetFaceColor(RGB(255, 0, 0), true); else m_btnAGVEstopColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.RadarShield) m_btnShieldRColor.SetFaceColor(RGB(255, 0, 0), true); else m_btnShieldRColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.SafeState_u.bits.SafeSideShield) m_btnShieldSSColor.SetFaceColor(RGB(255, 0, 0), true); else m_btnShieldSSColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.LFsensor_ste) m_btnLrollerFsenColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnLrollerFsenColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.LMsensor_ste) m_btnLrollerMsenColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnLrollerMsenColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.LBsensor_ste) m_btnLrollerBsenColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnLrollerBsenColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.RFsensor_ste) m_btnRrollerFsenColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnRrollerFsenColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.RMsensor_ste) m_btnRrollerMsenColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnRrollerMsenColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.RBsensor_ste) m_btnRrollerBsenColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnRrollerBsenColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.Fdoorsenor_ste) m_btnFDloadSteColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnFDloadSteColor.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.AGVstate_u.bits.Bdoorsenor_ste) m_btnBDloadSteColor.SetFaceColor(RGB(135, 206, 235), true); else m_btnBDloadSteColor.SetFaceColor(RGB(255, 255, 255), true); if(m_stPLCTOAGVDATA.RollerState_u.bits.BarrierGateIsOpen) m_btnOpenBarrierGate.SetFaceColor(RGB(135, 206, 235), true); else m_btnOpenBarrierGate.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.RollerState_u.bits.BarrierGateIsClose) m_btnCloseBarrierGate.SetFaceColor(RGB(135, 206, 235), true); else m_btnCloseBarrierGate.SetFaceColor(RGB(255, 255, 255), true); if (m_stPLCTOAGVDATA.RollerState_u.bits.ShopRollerdoorIsOpen) m_btnOpenShopRollDoor.SetFaceColor(RGB(135, 206, 235), true); else m_btnOpenShopRollDoor.SetFaceColor(RGB(255, 255, 255), true); CString nEdit; nEdit.Format(_T("0x%04x"), m_stPLCTOAGVDATA.RemoteControl_u.data); // %x-16进制显示; %d-10进制显示 m_txRemoteControl.SetWindowText(nEdit); /* if (m_stPLCTOAGVDATA.RemoteControl_u.bits.RemoteControl || m_pMainWnd->m_nAgvMode == DEBUG_MODE) //仅在遥控器使能模式 或者 DEBUD模式,下PLC控制界面才可用 { m_stAGVTOPLCDATA.RunStaControl_u.bits.AUTOHandSwitch = 1; ((CButton *)GetDlgItem(IDC_BTN_OPEN_FDOOR))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_OPEN_BDOOR))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_CLOSE_FDOOR))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_CLOSE_BDOOR))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_Lroller_F))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_Lroller_B))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_Rroller_F))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_Rroller_B))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_Lroller_Stop))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_Rroller_Stop))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_IndoorLsta))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_IndoorRsta))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_IndoorStop))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_OutdoorLsta))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_OutdoorRsta))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_OutdoorStop))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_OpenBarrierGate))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_CloseBarrierGate))->EnableWindow(true); ((CButton *)GetDlgItem(IDC_BTN_OpenShopRollDoor))->EnableWindow(true); } else { m_stAGVTOPLCDATA.RunStaControl_u.bits.AUTOHandSwitch = 0; ((CButton *)GetDlgItem(IDC_BTN_OPEN_FDOOR))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_OPEN_BDOOR))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_CLOSE_FDOOR))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_CLOSE_BDOOR))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_Lroller_F))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_Lroller_B))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_Rroller_F))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_Rroller_B))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_Lroller_Stop))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_Rroller_Stop))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_IndoorLsta))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_IndoorRsta))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_IndoorStop))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_OutdoorLsta))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_OutdoorRsta))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_OutdoorStop))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_OpenBarrierGate))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_CloseBarrierGate))->EnableWindow(false); ((CButton *)GetDlgItem(IDC_BTN_OpenShopRollDoor))->EnableWindow(false); }*/ } void CPlcMainDlg::OnTimer(UINT_PTR nIDEvent) { int nRet = 0; //更新设备状态 switch (nIDEvent) { case TIMER_UPDATE_TOPLC: if (m_stPLCTOAGVDATA.SafeState_u.bits.AGVEstop) //急停触发 { m_stAGVTOPLCDATA.AGVControl_u.data = 0; //车载滚筒停止、卷帘门停止、关闭刹车、充电停止 } nRet = m_pModbusClient->WriteMultipleRegisters(40001, 4, (short *)&(m_stAGVTOPLCDATA)); if (nRet > 0) { m_stAGVTOPLCDATA.AGVControl_u.bits.OpFdoor = false; //点击信号 m_stAGVTOPLCDATA.AGVControl_u.bits.CoFdoor = false; m_stAGVTOPLCDATA.AGVControl_u.bits.OpBdoor = false; m_stAGVTOPLCDATA.AGVControl_u.bits.CoBdoor = false; m_stAGVTOPLCDATA.PLCControl_u.bits.OpenBarrierGate = false; m_stAGVTOPLCDATA.PLCControl_u.bits.CloseBarrierGate = false; m_stAGVTOPLCDATA.PLCControl_u.bits.OpenShopRollerDoor = false; } nRet = m_pModbusClient->ReadMultipleRegisters(40051, 5, (short *)&(m_stPLCTOAGVDATA)); if(nRet > 0) { } break; case TIMER_UPDATE_TODLG: DisplayDLG(); break; case TIMER_RECONNECT_PLC: m_pModbusClient->PostThreadMessage(WM_QUIT, 0, 0); m_pModbusClient = NULL; ConnectPlcController(); break; default: TRACE("无效\n"); } CDialogEx::OnTimer(nIDEvent); } //左侧滚筒 void CPlcMainDlg::OnBnClickedBtnLrollerF() { m_stAGVTOPLCDATA.AGVControl_u.bits.LRollerF = TRUE; m_stAGVTOPLCDATA.AGVControl_u.bits.LRollerB = false; } void CPlcMainDlg::OnBnClickedBtnLrollerB() { m_stAGVTOPLCDATA.AGVControl_u.bits.LRollerB = TRUE; m_stAGVTOPLCDATA.AGVControl_u.bits.LRollerF = false; } void CPlcMainDlg::OnBnClickedBtnLrollerStop() { m_stAGVTOPLCDATA.AGVControl_u.bits.LRollerB = false; m_stAGVTOPLCDATA.AGVControl_u.bits.LRollerF = false; } //右侧滚筒 void CPlcMainDlg::OnBnClickedBtnRrollerF() { m_stAGVTOPLCDATA.AGVControl_u.bits.RRollerF = TRUE; m_stAGVTOPLCDATA.AGVControl_u.bits.RRollerB = false; } void CPlcMainDlg::OnBnClickedBtnRrollerB() { m_stAGVTOPLCDATA.AGVControl_u.bits.RRollerB = TRUE; m_stAGVTOPLCDATA.AGVControl_u.bits.RRollerF = false; } void CPlcMainDlg::OnBnClickedBtnRrollerStop() { m_stAGVTOPLCDATA.AGVControl_u.bits.RRollerB = false; m_stAGVTOPLCDATA.AGVControl_u.bits.RRollerF = false; } void CPlcMainDlg::OnBnClickedBtnIndoorlsta() { m_stAGVTOPLCDATA.PLCControl_u.bits.IndoorLRoller = TRUE; } void CPlcMainDlg::OnBnClickedBtnIndoorrsta() { m_stAGVTOPLCDATA.PLCControl_u.bits.IndoorRRoller = TRUE; } void CPlcMainDlg::OnBnClickedBtnOutdoorlsta() { m_stAGVTOPLCDATA.PLCControl_u.bits.OutdoorLRoller = TRUE; } void CPlcMainDlg::OnBnClickedBtnOutdoorrsta() { m_stAGVTOPLCDATA.PLCControl_u.bits.OutdoorRRoller = TRUE; } void CPlcMainDlg::OnBnClickedBtnIndoorstop() { m_stAGVTOPLCDATA.PLCControl_u.bits.IndoorLRoller = false; m_stAGVTOPLCDATA.PLCControl_u.bits.IndoorRRoller = false; } void CPlcMainDlg::OnBnClickedBtnOutdoorstop() { m_stAGVTOPLCDATA.PLCControl_u.bits.OutdoorLRoller = false; m_stAGVTOPLCDATA.PLCControl_u.bits.OutdoorRRoller = false; } void CPlcMainDlg::OnBnClickedBtnOpenbarriergate() { // TODO: 在此添加控件通知处理程序代码 m_stAGVTOPLCDATA.PLCControl_u.bits.OpenBarrierGate = true; m_stAGVTOPLCDATA.PLCControl_u.bits.CloseBarrierGate = false; } void CPlcMainDlg::OnBnClickedBtnClosebarriergate() { // TODO: 在此添加控件通知处理程序代码 m_stAGVTOPLCDATA.PLCControl_u.bits.OpenBarrierGate = false; m_stAGVTOPLCDATA.PLCControl_u.bits.CloseBarrierGate = true; } void CPlcMainDlg::OnBnClickedBtnShiedradar() //屏蔽雷达 { // TODO: 在此添加控件通知处理程序代码 } void CPlcMainDlg::OnBnClickedBtnShieldsafedside() //屏蔽触边 { // TODO: 在此添加控件通知处理程序代码 } void CPlcMainDlg::OnBnClickedBtnOpenshoprolldoor() { // TODO: 在此添加控件通知处理程序代码 m_stAGVTOPLCDATA.PLCControl_u.bits.OpenShopRollerDoor = true; }