agv-control/Plugin/Plc/PlcMainDlg.cpp
2025-06-09 09:09:25 +08:00

821 lines
25 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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;
}