control/Plugin/Driver/DriverMainDlg.cpp

1105 lines
30 KiB
C++
Raw Normal View History

2025-01-20 10:30:01 +08:00
// CanDeviceDlg.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
//
#include "stdafx.h"
#include "DriverMainDlg.h"
#include "resource.h"
#include "afxdialogex.h"
#include "PluginDriver.h"
int StopFlag = 0;
unsigned long nextrow;
// CCanDeviceDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
//<2F>ؼ<EFBFBD>IDֻ<44><D6BB>Ҫ<EFBFBD>ڵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ψһ<CEA8><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дһ<D0B4><D2BB><EFBFBD>ͺ<EFBFBD>
#define ID_VIRTUAL_LIST_CTRL (20000)
#define TIMER_ID_ADD_TEST_DATA (2024)
IMPLEMENT_DYNAMIC(CDriverMainDlg, CDialogEx)
CDriverMainDlg::CDriverMainDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_DEV_CAN_DLG, pParent)
{
m_bOpenCan = FALSE;
m_DevIndex = 0;
m_bCanRxEn = TRUE;
m_bAutoRefresh = TRUE;
m_bAutoSend2 = TRUE;
m_strSendID = "00 00 00 88";
m_strSendData = "01 02 03 04 05 06 07 08";
//m_pMainWnd = (CPluginMainDialog*) pParent;
m_StopSendFlag = 0;
m_StopSendFlag2 = 0;
m_DevType = VCI_USBCAN2;
m_nAgvAction = A_STOP;
m_nAgvReturnState= RE_A_STOP;
m_nSendCanIndex = 0;
m_nRecvCanIndex = 1;
m_pstVirtualList = new CEXVirtualListCtrl();
m_pQueue = NULL;
m_iniPath = theApp.m_strModulePath + "\\config.ini";
ReadConfigFromIni();
}
CDriverMainDlg::~CDriverMainDlg()
{
}
void CDriverMainDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_CBIndex(pDX, IDC_COMBO_SENDFRAMETYPE_IDX0, m_nSendFrameTypeIdx0);
DDX_CBIndex(pDX, IDC_COMBO_SENDFRAMEFORMAT_IDX0, m_nSendFrameFormatIdx0);
DDX_CBIndex(pDX, IDC_COMBO_SENDFRAMETYPE_IDX1, m_nSendFrameTypeIdx1);
DDX_CBIndex(pDX, IDC_COMBO_SENDFRAMEFORMAT_IDX1, m_nSendFrameFormatIdx1);
DDX_Check(pDX, IDC_CHECK_CANRX_EN, m_bCanRxEn);
DDX_Check(pDX, IDC_AUTO_SEND, m_bAutoSend);
DDX_Check(pDX, IDC_AUTO_SEND2, m_bAutoSend2);
DDX_Check(pDX, IDC_CHECK_AUTO_REFRESH_SHOW, m_bAutoRefresh);
DDX_Control(pDX, IDC_EDIT_FMagneticOffset, m_txFMagneticOffset);
DDX_Control(pDX, IDC_EDIT_BMagneticOffset, m_txBMagneticOffset);
DDX_Control(pDX, IDC_EDIT_RFID_ID , m_txRFIDID);
//DDX_Control(pDX, IDC_LIST1, m_MessageList);
}
BEGIN_MESSAGE_MAP(CDriverMainDlg, CDialogEx)
ON_BN_CLICKED(IDC_CHECK_CANRX_EN, OnCheckCanrxEn)
ON_BN_CLICKED(IDC_BTN_SEND_MAN, &CDriverMainDlg::OnBnClickedBtnSendMan)
ON_BN_CLICKED(IDC_AUTO_SEND, &CDriverMainDlg::OnBnClickedAutoSend)
ON_BN_CLICKED(IDC_CHECK_AUTO_REFRESH_SHOW, &CDriverMainDlg::OnBnClickedCheckAutoRefreshShow)
ON_BN_CLICKED(IDC_BTN_SEND_MAN2, &CDriverMainDlg::OnBnClickedBtnSendMan2)
ON_BN_CLICKED(IDC_AUTO_SEND2, &CDriverMainDlg::OnBnClickedAutoSend2)
ON_BN_CLICKED(IDC_BUTTON_AGVSTOP, &CDriverMainDlg::OnBnClickedButtonAgvstop)
ON_BN_CLICKED(IDC_BUTTON_AGVESTOP, &CDriverMainDlg::OnBnClickedButtonAgvestop)
ON_BN_CLICKED(IDC_BUTTON_AGVFORWARD, &CDriverMainDlg::OnBnClickedButtonAgvforward)
ON_BN_CLICKED(IDC_BUTTON_AGVBACKWARD, &CDriverMainDlg::OnBnClickedButtonAgvbackward)
END_MESSAGE_MAP()
//һλʮ<CEBB><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʮ<CEAA><CAAE><EFBFBD><EFBFBD>
int CDriverMainDlg::HexChar(char c)
{
if ((c >= '0') && (c <= '9'))
return c - 0x30;
else if ((c >= 'A') && (c <= 'F'))
return c - 'A' + 10;
else if ((c >= 'a') && (c <= 'f'))
return c - 'a' + 10;
else
return 0x10;
}
//<2F><>λʮ<CEBB><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊʮ<CEAA><CAAE><EFBFBD><EFBFBD>
int CDriverMainDlg::Str2Hex(CString str)
{
int len = str.GetLength();
if (len == 2)
{
int a = HexChar(str[0]);
int b = HexChar(str[1]);
if (a == 16 || b == 16)
{
AfxMessageBox("Format error");
return 256;
}
else
{
return a * 16 + b;
}
}
else
{
AfxMessageBox("input length must be 2");
return 256;
}
}
void CDriverMainDlg::InitVirtualList()
{
//<2F><>Ϣ<EFBFBD><CFA2>ʾ<EFBFBD>б<EFBFBD><D0B1><EFBFBD>ʼ<EFBFBD><CABC>
m_pstVirtualList->InsertColumn(0, "Seq");
m_pstVirtualList->SetColumnWidth(0, 110);
m_pstVirtualList->InsertColumn(1, "Time");
m_pstVirtualList->SetColumnWidth(1, 110);
m_pstVirtualList->InsertColumn(2, "CANIndex");
m_pstVirtualList->SetColumnWidth(2, 100);
m_pstVirtualList->InsertColumn(3, "Tx-Rx");
m_pstVirtualList->SetColumnWidth(3, 80);
m_pstVirtualList->InsertColumn(4, " ID ");
m_pstVirtualList->SetColumnWidth(4, 100);
m_pstVirtualList->InsertColumn(5, "Frame");
m_pstVirtualList->SetColumnWidth(5, 80);
m_pstVirtualList->InsertColumn(6, "Type");
m_pstVirtualList->SetColumnWidth(6, 90);
m_pstVirtualList->InsertColumn(7, "DLC");
m_pstVirtualList->SetColumnWidth(7, 60);
m_pstVirtualList->InsertColumn(8, "Data");
m_pstVirtualList->SetColumnWidth(8, 250);
}
void CDriverMainDlg::WriteVirtualList(CString strFrameId, CString strFrameData, int nTxRx, int nCanIdx, int nFrameType, int nFrameFormat)
{
//<2F><><EFBFBD>ݰ<EFBFBD><DDB0>и<EFBFBD>ʽ<EFBFBD><CABD>
char acTemp[DATA_LINE_SIZE + 1] = { 0 };
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><D0B1><EFBFBD>ʾ
CString strTime;
SYSTEMTIME systime;
GetLocalTime(&systime);
char acId[11] = { 0 };
memset(acId, 32, 10); //<2F><>ʼ<EFBFBD><CABC>Ϊ<EFBFBD>ո<EFBFBD><D5B8>ַ<EFBFBD><D6B7><EFBFBD>
memcpy(acId, strFrameId.GetBuffer(), strFrameId.GetLength());
char acData[33] = { 0 };
memset(acData, 32, 32); //<2F><>ʼ<EFBFBD><CABC>Ϊ<EFBFBD>ո<EFBFBD><D5B8>ַ<EFBFBD><D6B7><EFBFBD>
memcpy(acData, strFrameData.GetBuffer(), strFrameData.GetLength());
sprintf_s(acTemp, "%-10d,%02d:%02d:%02d:%03d,%-3d,%-3d,%s,%-3d,%-3d,%-3d,%s\n", m_pQueue->GetAutoSn(),
systime.wHour, systime.wMinute, systime.wSecond, systime.wMilliseconds,
nCanIdx,
nTxRx,
acId,
nFrameFormat,
nFrameType,
8,
acData);
//<2F><><EFBFBD>ýӿ<C3BD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_pQueue->WriteItem(acTemp);
}
//<2F><>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8>Ĺܵ<C4B9><DCB5>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void g_PipeCallBack(void* pObj, int lMsgId, WPARAM wparam, LPARAM lparam)
{
CDriverMainDlg* pModule = (CDriverMainDlg*)pObj;
if (CEXPIPE_CONNECT_OK == lMsgId)
{
//<2F><><EFBFBD>ӳɹ<D3B3>
//if (FALSE == pModule->PostMessage(WM_PLATFORM_CONNECT_OK, NULL, NULL)) { LogOutToFile("g_PipeCallBack PostMessage error[%d]", lMsgId); }
LogOutToFile("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹ܵ<EFBFBD>");
//<2F><>WMS<4D><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
theApp.SendMsg2Platform("WMS", DEVICE_CONFIG_REQ);
}
else if (CEXPIPE_DIS_CLIENT == lMsgId)
{
//<2F>ܵ<EFBFBD><DCB5>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifndef _DEBUG
LogOutToFile("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹܵ<EFBFBD><EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD>˳<EFBFBD>");
//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 CDriverMainDlg::ProcessPipeMsg(int lMsgId, char* pData, int lLen)
{
if (lLen == 0)
{
return;
}
PIPE_DATA_STRUCT* pstData = (PIPE_DATA_STRUCT*)pData;
//ƽ̨ת<CCA8><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
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();
//<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
/*if (nMsgType == DEVICE_CONFIG_RET)
{
}
else if (nMsgType == SET_TRANS_MODE_REQ && m_bDeviceInit) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵĹ<DFB5><C4B9><EFBFBD>ģʽ
{
}
else if (nMsgType == GET_TRANS_STATE_REQ)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
}*/
}
}
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");
}
// CCanDeviceDlg <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CDriverMainDlg::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 + "config.ini";
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>
GetPrivateProfileString("AGV-MODULE", "PIPE_DRIVER", "", acPipe, 256, iniPath);
strPipe = acPipe;
}
g_pstPipeClient->RegisterCall(g_PipeCallBack, this);
g_pstPipeClient->Connect(strPipe.GetBuffer());
m_strDataDir = theApp.m_strModulePath + "\\data";
CreateDirectory(m_strDataDir.GetString(), NULL);
if (!m_pstVirtualList->Create(WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_OWNERDATA | LVS_EX_DOUBLEBUFFER, CRect(0, 0, 0, 0), this, ID_VIRTUAL_LIST_CTRL)) {
TRACE0("Failed to create MyVirtualListCtrl\n");
delete m_pstVirtualList;
m_pstVirtualList = nullptr;
return FALSE; // <20><><EFBFBD><EFBFBD> FALSE <20><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>֪<EFBFBD><D6AA>δ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>ʼ<EFBFBD><CABC>
}
InitVirtualList();
OpenCanDevice();
CRect rectList;
GetDlgItem(IDC_STATIC_LIST)->GetWindowRect(&rectList);
ScreenToClient(rectList);
m_pstVirtualList->MoveWindow(rectList.left, rectList.top, rectList.Width(), rectList.Height());
m_pQueue = new CEXMemFileQueue(m_strDataDir.GetString());
m_pstVirtualList->SetData(m_pQueue);
//m_pstVirtualList->StartAutoRefresh(10);//<2F>б<EFBFBD>10<31><30><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>һ<EFBFBD><D2BB>
CDialogEx::OnInitDialog();
if (TRUE == m_bAutoRefresh)
{
m_pstVirtualList->StartAutoRefresh(10);
}
else
{
m_pstVirtualList->StopAutoRefresh();
}
if (m_bCanRxEn)
{
StopFlag = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
AfxBeginThread(ReceiveCanThread, this);
}
else
StopFlag = 1;
if (m_bAutoSend2)
{
m_StopSendFlag2 = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
AfxBeginThread(SendCanThread2, this);
}
else
m_StopSendFlag2 = 1;
return TRUE;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>
BOOL CDriverMainDlg::OpenCanDevice()
{
DWORD Reserved = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD>
if (VCI_OpenDevice(VCI_USBCAN2, 0, Reserved) != 1)
{
//MessageBox("open failed");
//m_pMainWnd->InsertLog(LOG_ERROR, "Open Can Device Failed");
return FALSE;
}
VCI_INIT_CONFIG InitInfo[1];
InitInfo->Timing0 = 0x01; //250K
InitInfo->Timing1 = 0x1C;
InitInfo->Filter = 0;
InitInfo->AccCode = 0x80000000;
InitInfo->AccMask = 0xFFFFFFFF;
InitInfo->Mode = 0; //Data ;Remote;
//<2F><>ʼ<EFBFBD><CABC>ͨ<EFBFBD><CDA8>0
if (VCI_InitCAN(VCI_USBCAN2, 0, 0, InitInfo) != 1) //can-0
{
//MessageBox("Init-CAN failed!");
//m_pMainWnd->InsertLog(LOG_ERROR, "Init-CAN-Index0 Failed!");
return FALSE;
}
Sleep(100);
//<2F><>ʼ<EFBFBD><CABC>ͨ<EFBFBD><CDA8>0
if (VCI_StartCAN(VCI_USBCAN2, 0, 0) != 1) //can-0
{
//MessageBox("Start-CAN failed!");
//m_pMainWnd->InsertLog(LOG_ERROR, "Start-CAN-Index0 Failed!");
return FALSE;
}
//<2F><>ʼ<EFBFBD><CABC>ͨ<EFBFBD><CDA8>1
//if (m_nDevType == 1)
{
if (VCI_InitCAN(VCI_USBCAN2, 0, 1, InitInfo) != 1) //can-1
{
//MessageBox("Init-CAN failed!");
//m_pMainWnd->InsertLog(LOG_ERROR, "Init-CAN-Index1 Failed!");
return FALSE;
}
}
Sleep(100);
InitInfo->Mode = 0; //Data ;Remote;
//<2F><>ʼ<EFBFBD><CABC>ͨ<EFBFBD><CDA8>1
if (VCI_StartCAN(VCI_USBCAN2, 0, 1) != 1) //can-0
{
//MessageBox("Start-CAN failed!");
//m_pMainWnd->InsertLog(LOG_ERROR, "Start-CAN-Index1 Failed!");
return FALSE;
}
//MessageBox("Open successfule!\n Start CAN OK!");
UpdateCanStatue(TRUE);
//InsertLog(LOG_INFO, "Open The CAN Device Successfule!");
//KillTimer(TIMER_RECONNECT_CAN);
return TRUE;
}
void CDriverMainDlg::UpdateCanStatue(BOOL bStatue)
{
if (TRUE == bStatue)
{
GetDlgItem(IDC_STATUS_CAN)->SetWindowText("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
else
{
GetDlgItem(IDC_STATUS_CAN)->SetWindowText("<EFBFBD>ѹر<EFBFBD>");
}
}
void CDriverMainDlg::ReadConfigFromIni()
{
CString strIniPath = theApp.m_strModulePath + "\\config.ini";
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
m_nSendFrameFormatIdx0 = GetPrivateProfileInt("CAN", "FRAME_FORMAT_IDX0", 0, strIniPath);
m_nSendFrameTypeIdx0 = GetPrivateProfileInt("CAN", "FRAME_TYPE_IDX0", 0, strIniPath);
m_nSendFrameFormatIdx1 = GetPrivateProfileInt("CAN", "FRAME_FORMAT_IDX1", 0, strIniPath);
m_nSendFrameTypeIdx1 = GetPrivateProfileInt("CAN", "FRAME_TYPE_IDX1", 0, strIniPath);
return; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
void CDriverMainDlg::Drive_enable() //ʹ<><CAB9>
{
char can2_buff[8] = { 0 };
can2_buff[0] = 0x23;
can2_buff[1] = 0x0D;
can2_buff[2] = 0x20;
can2_buff[3] = 0x01;
can2_buff[4] = 0;
can2_buff[5] = 0;
can2_buff[6] = 0;
can2_buff[7] = 0;
SendCanData(0, 0, m_nSendFrameTypeIdx0, m_nSendFrameFormatIdx0, 0x600001, can2_buff);
SendCanData(0, 0, m_nSendFrameTypeIdx0, m_nSendFrameFormatIdx0, 0x600002, can2_buff);
}
void CDriverMainDlg::Drive_disable() //ʧ<><CAA7>
{
char can2_buff[8] = { 0 };
can2_buff[0] = 0x23;
can2_buff[1] = 0x0C;
can2_buff[2] = 0x20;
can2_buff[3] = 0x01;
can2_buff[4] = 0;
can2_buff[5] = 0;
can2_buff[6] = 0;
can2_buff[7] = 0;
SendCanData(0, 0, m_nSendFrameTypeIdx0, m_nSendFrameFormatIdx0, 0x600001, can2_buff);
SendCanData(0, 0, m_nSendFrameTypeIdx0, m_nSendFrameFormatIdx0, 0x600002, can2_buff);
}
/*
param0: can<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
param1: can<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
param2: standard/extend
param3: data/remote
*/
void CDriverMainDlg::SendCanData(int nDevIdx, int nCanIdx, int nFrameType, int nFrameFormat, UINT32 acFrameId, char acFrameData[8])
{
//<2F>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
VCI_CAN_OBJ sendbuf[1];
int datanum = 8;
sendbuf->ExternFlag = nFrameType;
sendbuf->DataLen = datanum;
sendbuf->RemoteFlag = nFrameFormat;
sendbuf->ID = acFrameId;
memcpy(sendbuf->Data, acFrameData, datanum);
/*for (int i = 0; i < datanum; i++)
{
sendbuf->Data[i] = acFrameData[i];
}*/
/****************************************************************************/
/******************************<2A>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>***********************/
/****************************************************************************/
static bool snederr_flag = false;
//<2F><><EFBFBD>ö<EFBFBD>̬<EFBFBD><CCAC><EFBFBD>ӿⷢ<D3BF>ͺ<EFBFBD><CDBA><EFBFBD>
int flag = VCI_Transmit(m_DevType, m_DevIndex, nCanIdx, sendbuf, 1);//CAN message send
if (flag<1)
{
//VCI_CloseDevice(m_DevType, m_DevIndex);
if (flag == -1)
{
//Can<61><EFBFBD>ѶϿ<D1B6>
//MessageBox("failed- device not open\n");
//m_pMainWnd->InsertLog(LOG_ERROR, "Failed- Device Not Open!");
OpenCanDevice();
UpdateCanStatue(FALSE);
}
else if (flag == 0)
{
//MessageBox("send error\n");
//m_pMainWnd->InsertLog(LOG_ERROR, "Send Can Mesaage Error!");
UpdateCanStatue(FALSE);
}
if (false == snederr_flag)
{
snederr_flag = true;
UpdateCanStatue(FALSE);
}
return;
}
snederr_flag = false;
BYTE data;
CString strFrameId, strTmp, strFrameData;
strFrameId.Format("%08X", acFrameId);
for (int i = 0; i<sendbuf->DataLen; i++)
{
data = sendbuf->Data[i];
strTmp.Format("%02X", data);
strFrameData += strTmp + " ";
}
WriteVirtualList(strFrameId, strFrameData, SEND_MSG, nCanIdx, nFrameType, nFrameFormat);
}
void CDriverMainDlg::OnCheckCanrxEn()
{
UpdateData(TRUE);
if (m_bCanRxEn)
{
StopFlag = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
AfxBeginThread(ReceiveCanThread, this);
}
else
StopFlag = 1;
}
void CDriverMainDlg::Control_Mode_Reset()
{
m_nAgvAction = A_STOP; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3>л<EFBFBD><D0BB><EFBFBD><EFBFBD>Զ<EFBFBD>ͣ<EFBFBD><CDA3>ģʽ
//m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.AGVControl_u.bits.LRollerF = 0; //<2F><>Ͳֹͣ
//m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.AGVControl_u.bits.LRollerB = 0;
//m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.AGVControl_u.bits.RRollerF = 0;
//m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.AGVControl_u.bits.RRollerB = 0;
}
int Control_Mode_Switch;
UINT CDriverMainDlg::ReceiveCanThread(LPVOID v)
{
CDriverMainDlg *pThis = (CDriverMainDlg*)v;
while (1)
{
VCI_CAN_OBJ pCanObj[200];
for (int kCanIndex = 0; kCanIndex<2; kCanIndex++)
{
//<2F><><EFBFBD>ö<EFBFBD>̬<EFBFBD><CCAC><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD>պ<EFBFBD><D5BA><EFBFBD>
int NumValue = VCI_Receive(pThis->m_DevType, pThis->m_DevIndex, kCanIndex, pCanObj, 200, 0);
if (NumValue >0)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>б<EFBFBD><D0B1><EFBFBD>ʾ
CString strTime;
SYSTEMTIME systime;
GetLocalTime(&systime);
strTime.Format("%02d:%02d:%02d:%03d", systime.wHour, systime.wMinute, systime.wSecond, systime.wMilliseconds);
for (int num = 0; num < NumValue; num++)
{
CString strFrameId, strFrameData, strTmp;
strFrameId.Format("%08X", pCanObj[num].ID);
for (int i = 0; i < (pCanObj[num].DataLen); i++) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
strTmp.Format("%02X ", pCanObj[num].Data[i]);
strFrameData += strTmp;
}
pThis->WriteVirtualList(strFrameId, strFrameData, 1, kCanIndex);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB4A6><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>CAN<41><4E>Ϣ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pThis->AnalysiseCanData(kCanIndex, pCanObj[num]);
/*if (MANUAL_MODE ==pThis->m_pMainWnd->m_nAgvMode)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>(<28>ֶ<EFBFBD>ģʽ)
pThis->CalculateManualCanParam();
Control_Mode_Switch = 1;
}
else
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>(<28>Զ<EFBFBD>ģʽ),<2C><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>m_nAgvActionֵ
if (Control_Mode_Switch)
{
pThis->Control_Mode_Reset();
Control_Mode_Switch = 0;
}
pThis->CalculateAutoCanParam();
}*/
//<2F>·<EFBFBD><C2B7>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>
//pThis->SendCanData();
}
}
else if (NumValue == -1)
{
// USB-CAN<41><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD>USB<53><42><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>VCI_CloseDevice<63><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>VCI_OpenDevice<63><65><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF>ԴﵽUSB-CAN<41><EFBFBD>Ȳ<EFBFBD><C8B2>ε<EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
pThis->UpdateCanStatue(FALSE);
pThis->OpenCanDevice();
}
}
Sleep(10);
if (StopFlag == 1)
{
return 0;
}
}
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>CAN<41><4E><EFBFBD><EFBFBD>
void CDriverMainDlg::AnalysiseCanData(int nCanIndex, VCI_CAN_OBJ objCan)
{
CString nEdit;
if ( 0 == nCanIndex)
{
if (objCan.ID == 0x444)
{
//<2F><><EFBFBD><EFBFBD>SOC
m_stSensorData.Battery_SOC = objCan.Data[6];
}
else if (objCan.ID == 0x01) //ǰ<>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//ǰ<><C7B0><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
m_stSensorData.FMagnetism_Offset = -((int16_t)(int8_t)objCan.Data[4]) * 5;
nEdit.Format(_T("%d"), m_stSensorData.FMagnetism_Offset);
m_txFMagneticOffset.SetWindowText(nEdit);
if (objCan.Data[1] == 0 && objCan.Data[2] == 0) //<2F><>û<EFBFBD><C3BB><EFBFBD><20><><EFBFBD><EFBFBD>
{
m_stSensorData.FMagnetism_Valid = 0;
m_stSensorData.FMagnetism_ALLTrue = 0;
GetDlgItem(IDC_COMBO_FMagneticSta)->SetWindowText("ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч");
}
else if (objCan.Data[1] == 0xFF && objCan.Data[2] == 0xFF) //<2F><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>
{
m_stSensorData.FMagnetism_ALLTrue = 1;
m_stSensorData.FMagnetism_Valid = 1;
GetDlgItem(IDC_COMBO_FMagneticSta)->SetWindowText("ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
else
{
m_stSensorData.FMagnetism_ALLTrue = 0;
m_stSensorData.FMagnetism_Valid = 1;
GetDlgItem(IDC_COMBO_FMagneticSta)->SetWindowText("ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч");
}
}
else if (objCan.ID == 0x02) //<2F><><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
m_stSensorData.BMagnetism_Offset = ((int16_t)(int8_t)objCan.Data[4]) * 5;
nEdit.Format(_T("%d"), m_stSensorData.BMagnetism_Offset);
m_txBMagneticOffset.SetWindowText(nEdit);
if (objCan.Data[1] == 0 && objCan.Data[2] == 0) //<2F><>û<EFBFBD><C3BB><EFBFBD><20><><EFBFBD><EFBFBD>
{
m_stSensorData.BMagnetism_Valid = 0;
m_stSensorData.BMagnetism_ALLTrue = 0;
GetDlgItem(IDC_COMBO_BMagneticSta)->SetWindowText("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч");
}
else if (objCan.Data[1] == 0xFF && objCan.Data[2] == 0xFF) //<2F><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>
{
m_stSensorData.BMagnetism_ALLTrue = 1;
m_stSensorData.BMagnetism_Valid = 1;
GetDlgItem(IDC_COMBO_BMagneticSta)->SetWindowText("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
else
{
m_stSensorData.BMagnetism_ALLTrue = 0;
m_stSensorData.BMagnetism_Valid = 1;
GetDlgItem(IDC_COMBO_BMagneticSta)->SetWindowText("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч");
}
}
else if (objCan.ID == 0x03) //RFID
{
m_stSensorData.RFID_Point = objCan.Data[7];
nEdit.Format(_T("%d"), m_stSensorData.RFID_Point);
m_txRFIDID.SetWindowText(nEdit);
}
}
else if (1 == nCanIndex)
{
}
}
void CDriverMainDlg::CalculateManualCanParam() //ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
/*static int reserve_flag = 0;
if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.Reserve == 0) //<2F><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD>û<EFBFBD>а<EFBFBD><D0B0><EFBFBD>
{
if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.Forward)
m_stDrvierControl.Drive_Speed = 2000;
else if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.Backward)
m_stDrvierControl.Drive_Speed = -2000;
else
m_stDrvierControl.Drive_Speed = 0;
if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.LeftRotation) //<2F><>ת
{
m_stDrvierControl.Diversion_Position += 4000;
if (m_stDrvierControl.Diversion_Position > m_stDrvierControl.MAN_Angle_L)
m_stDrvierControl.Diversion_Position = m_stDrvierControl.MAN_Angle_L;
}
else if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.RightRotation) //<2F><>ת
{
m_stDrvierControl.Diversion_Position -= 4000;
if (m_stDrvierControl.Diversion_Position < m_stDrvierControl.MIX_Angle_R)
m_stDrvierControl.Diversion_Position = m_stDrvierControl.MIX_Angle_R;
}
else if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.ZeroHold) //<2F><><EFBFBD>Ƚ<EFBFBD>
{
m_stDrvierControl.Diversion_Position = m_stDrvierControl.Zero_Angle;
}
if (reserve_flag == 1)
{
reserve_flag = 0;
m_pMainWnd->m_pPlcDeviceDlg->OnBnClickedBtnLrollerStop();
m_pMainWnd->m_pPlcDeviceDlg->OnBnClickedBtnRrollerStop();
}
}
else if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.Reserve) //<2F><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
reserve_flag = 1;
if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.Forward) //<2F><><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2>ǰ
m_pMainWnd->m_pPlcDeviceDlg->OnBnClickedBtnLrollerF();
else if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.LeftRotation)//<2F><><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>
m_pMainWnd->m_pPlcDeviceDlg->OnBnClickedBtnLrollerB();
else
m_pMainWnd->m_pPlcDeviceDlg->OnBnClickedBtnLrollerStop();
if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.Backward) //<2F>ҹ<EFBFBD>Ͳ<EFBFBD><CDB2>ǰ
m_pMainWnd->m_pPlcDeviceDlg->OnBnClickedBtnRrollerF();
else if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.RemoteControl_u.bits.RightRotation)//<2F>ҹ<EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>
m_pMainWnd->m_pPlcDeviceDlg->OnBnClickedBtnRrollerB();
else
m_pMainWnd->m_pPlcDeviceDlg->OnBnClickedBtnRrollerStop();
m_stDrvierControl.Drive_Speed = 0;
}*/
}
void CDriverMainDlg::CalculateAutoCanParam()
{
switch (m_nAgvAction)
{
case A_STOP:
m_nAgvReturnState = Auto_Stop();
break;
case FORWARD:
m_nAgvReturnState = Auto_Forward(m_stDrvierControl.SPEEDPAR);
break;
case BACKWARD:
m_nAgvReturnState = Auto_Backward(m_stDrvierControl.SPEEDPAR);
break;
case E_STOP: //<2F><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2>
m_nAgvReturnState = Auto_EStop();
break;
default:
break;
}
}
int CDriverMainDlg::Auto_Stop()
{
m_stDrvierControl.Diversion_Position = m_stDrvierControl.Zero_Angle;
m_stDrvierControl.Drive_Speed = 0;
return RE_A_STOP;
}
int CDriverMainDlg::Auto_EStop()
{
m_stDrvierControl.Diversion_Position = m_stDrvierControl.Zero_Angle;
m_stDrvierControl.Drive_Speed = 0;
return RE_E_STOP;
}
int CDriverMainDlg::Auto_Forward(float speedpar) //ȥ<>ػ<EFBFBD><D8BB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>ٶ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
{
int Position_P = 4000; //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_stSensorData.FMagnetism_Valid == 1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
{
m_stDrvierControl.Diversion_Position = Position_P * m_stSensorData.FMagnetism_Offset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_stDrvierControl.Diversion_Position = m_stDrvierControl.Zero_Angle - m_stDrvierControl.Diversion_Position;
m_stDrvierControl.Drive_Speed = 3000 * speedpar;
if (m_stDrvierControl.Diversion_Position < m_stDrvierControl.AutoMIN_Angle)
m_stDrvierControl.Diversion_Position = m_stDrvierControl.AutoMIN_Angle;
else if(m_stDrvierControl.Diversion_Position > m_stDrvierControl.AutoMAX_Angle)
m_stDrvierControl.Diversion_Position = m_stDrvierControl.AutoMAX_Angle;
if (m_stSensorData.FMagnetism_ALLTrue) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>
{
m_stDrvierControl.Diversion_Position = m_stDrvierControl.Zero_Angle;
m_stDrvierControl.Drive_Speed = 0;
return RE_POINT_STOP;
}
return RE_NORMAL_RUN;
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>쳣ͣ<ECB3A3><CDA3>
{
m_stDrvierControl.Diversion_Position = m_stDrvierControl.Zero_Angle;
m_stDrvierControl.Drive_Speed = 0;
return RE_UNUSUAL_STOP;
}
}
int CDriverMainDlg::Auto_Backward(float speedpar) //ȥж<C8A5><D0B6><EFBFBD><EFBFBD>
{
int Position_P = 4000;
if (m_stSensorData.BMagnetism_Valid == 1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
{
m_stDrvierControl.Diversion_Position = Position_P * m_stSensorData.BMagnetism_Offset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_stDrvierControl.Diversion_Position = m_stDrvierControl.Zero_Angle - m_stDrvierControl.Diversion_Position;
m_stDrvierControl.Drive_Speed = -2000 * speedpar;
if (m_stDrvierControl.Diversion_Position < m_stDrvierControl.AutoMIN_Angle)
m_stDrvierControl.Diversion_Position = m_stDrvierControl.AutoMIN_Angle;
else if (m_stDrvierControl.Diversion_Position > m_stDrvierControl.AutoMAX_Angle)
m_stDrvierControl.Diversion_Position = m_stDrvierControl.AutoMAX_Angle;
if (m_stSensorData.BMagnetism_ALLTrue) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> <20><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>
{
m_stDrvierControl.Diversion_Position = m_stDrvierControl.Zero_Angle;
m_stDrvierControl.Drive_Speed = 0;
return RE_POINT_STOP;
}
return RE_NORMAL_RUN;
}
else
{
m_stDrvierControl.Diversion_Position = m_stDrvierControl.Zero_Angle;
m_stDrvierControl.Drive_Speed = 0;
return RE_UNUSUAL_STOP;
}
}
int Speed = 0;
int LastSpeed = 0;
void CDriverMainDlg::SendCanData()
{
/*
UINT32 Drive_acId = 0x6000001; //<2F><><EFBFBD><EFBFBD>֡ID
UINT32 Diversion_Id = 0x6000002; //ת<><D7AA>֡ID
char acData[8] = { 0 };
acData[0] = 0x23;
acData[1] = 0x0D;
acData[2] = 0x20;
acData[3] = 0x01;
acData[4] = 0;
acData[5] = 0;
acData[6] = 0;
acData[7] = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
SendCanData(0, 1, m_nSendFrameTypeIdx1, m_nSendFrameFormatIdx1, Drive_acId, acData);
Sleep(2);
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ʹ<EFBFBD><CAB9>
SendCanData(0, 1, m_nSendFrameTypeIdx1, m_nSendFrameFormatIdx1, Diversion_Id, acData);
Sleep(2);
//<2F>ٶȿ<D9B6><C8BF><EFBFBD>
if (Speed < m_stDrvierControl.Drive_Speed && m_stDrvierControl.Drive_Speed > 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Speed = Speed + 50;
if (Speed > m_stDrvierControl.Drive_Speed)
Speed = m_stDrvierControl.Drive_Speed;
}
else if (Speed > m_stDrvierControl.Drive_Speed && m_stDrvierControl.Drive_Speed < 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Speed = Speed - 50;
if (Speed < m_stDrvierControl.Drive_Speed)
Speed = m_stDrvierControl.Drive_Speed;
}
else if (Speed > m_stDrvierControl.Drive_Speed && m_stDrvierControl.Drive_Speed > 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Speed = Speed - 50;
if (Speed < m_stDrvierControl.Drive_Speed)
Speed = m_stDrvierControl.Drive_Speed;
}
else if (Speed < m_stDrvierControl.Drive_Speed && m_stDrvierControl.Drive_Speed < 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Speed = Speed + 50;
if (Speed > m_stDrvierControl.Drive_Speed)
Speed = m_stDrvierControl.Drive_Speed;
}
else if (m_stDrvierControl.Drive_Speed == 0)
Speed = 0;
//<2F><><EFBFBD>߷<EFBFBD><DFB7><EFBFBD><EFBFBD><EFBFBD>ʾ
if (Speed > 0)
{
m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.RunStaControl_u.bits.GotoLoading = true;
m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.RunStaControl_u.bits.GotoUnloading = false;
}
else if(Speed < 0)
{
m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.RunStaControl_u.bits.GotoLoading = false;
m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.RunStaControl_u.bits.GotoUnloading = true;
}
else
{
m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.RunStaControl_u.bits.GotoLoading = false;
m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.RunStaControl_u.bits.GotoUnloading = false;
}
//<2F><>ͣ
if (m_pMainWnd->m_pPlcDeviceDlg->m_stPLCTOAGVDATA.SafeState_u.bits.AGVEstop)
Speed = 0;
TRACE("%d\n\r", Speed);
acData[0] = 0x23;
acData[1] = 0x00;
acData[2] = 0x20;
acData[3] = 0x01;
acData[4] = (uint8_t)((((uint32_t)Speed) & 0xff000000) >> 24);;
acData[5] = (uint8_t)((((uint32_t)Speed) & 0xff0000) >> 16);
acData[6] = (uint8_t)((((uint32_t)Speed) & 0xff00) >> 8);
acData[7] = (uint8_t)(((uint32_t) Speed) & 0xff);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
SendCanData(0, 1, m_nSendFrameTypeIdx1, m_nSendFrameFormatIdx1, Drive_acId, acData); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Sleep(8);
acData[0] = 0x23;
acData[1] = 0x02;
acData[2] = 0x20;
acData[3] = 0x01;
acData[4] = (uint8_t)((((uint32_t)m_stDrvierControl.Diversion_Position) & 0xff000000) >> 24);;
acData[5] = (uint8_t)((((uint32_t)m_stDrvierControl.Diversion_Position) & 0xff0000) >> 16);
acData[6] = (uint8_t)((((uint32_t)m_stDrvierControl.Diversion_Position) & 0xff00) >> 8);
acData[7] = (uint8_t)(((uint32_t) m_stDrvierControl.Diversion_Position) & 0xff);
//<2F><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>λ<EFBFBD><CEBB>
SendCanData(0, 1, m_nSendFrameTypeIdx1, m_nSendFrameFormatIdx1, Diversion_Id, acData); //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Sleep(8);
LastSpeed = Speed;*/
}
void CDriverMainDlg::OnBnClickedBtnSendMan()
{
UINT32 acId = 0x023;
char acData[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
SendCanData(0, 0, m_nSendFrameTypeIdx0, m_nSendFrameFormatIdx0, acId, acData);
}
UINT CDriverMainDlg::SendCanThread(LPVOID v)
{
CDriverMainDlg *dlg = (CDriverMainDlg*)v;
while ( 0 == dlg->m_StopSendFlag)
{
UINT32 acId = 0x11;
char acData[8] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
dlg->SendCanData(0, 1, dlg->m_nSendFrameTypeIdx0, dlg->m_nSendFrameFormatIdx0, acId, acData);
Sleep(10);
}
return 0;
}
void CDriverMainDlg::OnBnClickedAutoSend()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UpdateData(TRUE);
if (m_bAutoSend)
{
m_StopSendFlag = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
AfxBeginThread(SendCanThread, this);
}
else
m_StopSendFlag = 1;
}
void CDriverMainDlg::OnBnClickedCheckAutoRefreshShow()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (m_bAutoRefresh)
{
m_pstVirtualList->StartAutoRefresh(10);
}
else
{
m_pstVirtualList->StopAutoRefresh();
}
}
void CDriverMainDlg::OnBnClickedBtnSendMan2() //<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
{
UINT32 acId = 0x6000001;
char acData[8] = { 0x23, 0x0D, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00 };
SendCanData(0, 1, m_nSendFrameTypeIdx1, m_nSendFrameFormatIdx1, acId, acData);
}
UINT CDriverMainDlg::SendCanThread2(LPVOID v)
{
/*CCanDeviceDlg *dlg = (CCanDeviceDlg*)v;
char acData[8] = { 0 };
static uint8_t Enable_time = 0;
static uint8_t Brake_time = 0;
while (0 == dlg->m_StopSendFlag2)
{
/<EFBFBD>ٶȲ<EFBFBD>Ϊ0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɲ<EFBFBD><EFBFBD>
if (dlg->m_stDrvierControl.Drive_Speed != 0)
{
dlg->m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.AGVControl_u.bits.Brake = 1;
Brake_time = 0;
}
else
Brake_time++;
if (Brake_time > 20 || E_STOP == dlg->m_nAgvAction) //<2F><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ʱ || <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2>
{
Brake_time = 100;
dlg->m_pMainWnd->m_pPlcDeviceDlg->m_stAGVTOPLCDATA.AGVControl_u.bits.Brake = 0;
}
dlg->SendCanData();
}*/
return 0;
}
void CDriverMainDlg::OnBnClickedAutoSend2()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UpdateData(TRUE);
if (m_bAutoSend2)
{
m_StopSendFlag2 = 0;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
AfxBeginThread(SendCanThread2, this);
}
else
m_StopSendFlag2 = 1;
}
int before_trafficstop_action;
int before_safestop_action;
void CDriverMainDlg::OnBnClickedButtonAgvstop()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nAgvAction = A_STOP;
before_trafficstop_action = -1;
before_safestop_action = -1;
}
void CDriverMainDlg::OnBnClickedButtonAgvestop()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nAgvAction = E_STOP;
before_trafficstop_action = -1;
before_safestop_action = -1;
}
void CDriverMainDlg::OnBnClickedButtonAgvforward()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nAgvAction = FORWARD;
}
void CDriverMainDlg::OnBnClickedButtonAgvbackward()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_nAgvAction = BACKWARD;
}