821 lines
25 KiB
C++
821 lines
25 KiB
C++
// 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
|
||
|
||
|
||
|
||
// CMainDialog 消息处理程序
|
||
|
||
//和模块进程通讯的管道回调函数:
|
||
void g_PipeCallBack(void* pObj, int lMsgId, WPARAM wparam, LPARAM lparam)
|
||
{
|
||
CPlcMainDlg* pModule = (CPlcMainDlg*)pObj;
|
||
if (CEXPIPE_CONNECT_OK == lMsgId)
|
||
{
|
||
//连接成功
|
||
//if (FALSE == pModule->PostMessage(WM_PLATFORM_CONNECT_OK, NULL, NULL)) { LogOutToFile("g_PipeCallBack PostMessage error[%d]", lMsgId); }
|
||
LogOutToFile("已连接父进程管道");
|
||
|
||
//向WMS服务器请求设备配置信息
|
||
//theApp.SendMsg2Platform("WMS", DEVICE_CONFIG_REQ, NULL);
|
||
}
|
||
else if (CEXPIPE_DIS_CLIENT == lMsgId)
|
||
{
|
||
//管道断开,结束
|
||
#ifndef _DEBUG
|
||
LogOutToFile("父进程连接管道断开,本模块自动退出");
|
||
//if (FALSE == pModule->PostMessage(WM_CLOSE, NULL, NULL)) { LogOutToFile("g_PipeCallBack PostMessage error[%d]", lMsgId); }
|
||
pModule->PostMessage(WM_COMMAND, MAKEWPARAM(ID_TRAY_EXIT, 0), 0);
|
||
#endif
|
||
}
|
||
else if (CEXPIPE_NEW_DATA == lMsgId)
|
||
{
|
||
pModule->ProcessPipeMsg(lMsgId, (char*)wparam, (int)lparam);
|
||
}
|
||
else
|
||
{
|
||
;
|
||
}
|
||
}
|
||
|
||
|
||
void CPlcMainDlg::ProcessPipeMsg(int lMsgId, char* pData, int lLen)
|
||
{
|
||
if (lLen == 0)
|
||
{
|
||
return;
|
||
}
|
||
|
||
PIPE_DATA_STRUCT* pstData = (PIPE_DATA_STRUCT*)pData;
|
||
|
||
//平台转发给插件的消息
|
||
if (pstData->lMsgId == MAIN_2_MODULE_WMS && pstData->lDataLen > 0)
|
||
{
|
||
Json::Reader reader;
|
||
Json::Value root;
|
||
if (reader.parse((char*)pstData->acData, root))
|
||
{
|
||
CString strReceiver = root["receiver"].asString().c_str();
|
||
CString strSender = root["sender"].asString().c_str();
|
||
int nMsgType = root["type"].asInt();
|
||
|
||
|
||
//获取设备配置信息返回
|
||
/*if (nMsgType == DEVICE_CONFIG_RET)
|
||
{
|
||
|
||
}
|
||
else if (nMsgType == SET_TRANS_MODE_REQ && m_bDeviceInit) //设置输送线的工作模式
|
||
{
|
||
|
||
}
|
||
else if (nMsgType == GET_TRANS_STATE_REQ)//请求获取输送线状态
|
||
{
|
||
|
||
}*/
|
||
|
||
}
|
||
}
|
||
else if (pstData->lMsgId == MAIN_2_MODULE_SHOWWINDOW)
|
||
{
|
||
//PostMessage(WM_COMMAND, MAKEWPARAM(ID_TRAY_SHOW, 0), 0);
|
||
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
|
||
SetForegroundWindow();
|
||
}
|
||
|
||
LogOutToFile("HttpServiceListener::OnRecvRequest End");
|
||
}
|
||
|
||
|
||
|
||
// 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();
|
||
|
||
CString strPipe;
|
||
for (int i = 0; i < __argc; i++)
|
||
{
|
||
if (0 == strcmp(__argv[i], "-pipe") && i + 1 < __argc)
|
||
{
|
||
strPipe = __argv[i + 1];
|
||
}
|
||
}
|
||
|
||
if (strPipe.IsEmpty())
|
||
{
|
||
char acPipe[256] = "";
|
||
|
||
CString iniPath = theApp.m_strModulePath.Left(theApp.m_strModulePath.ReverseFind('\\') + 1);
|
||
//m_strModulePath = theApp.m_strModulePath.ReverseFind("\\");
|
||
iniPath = iniPath + "pipe.ini";
|
||
//中文名称,仅显示用
|
||
GetPrivateProfileString("AGV-MODULE", "PIPE_PLC", "", acPipe, 256, iniPath);
|
||
strPipe = acPipe;
|
||
}
|
||
g_pstPipeClient->RegisterCall(g_PipeCallBack, this);
|
||
g_pstPipeClient->Connect(strPipe.GetBuffer());
|
||
|
||
//读取配置文件
|
||
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;
|
||
}
|