添加项目文件。

This commit is contained in:
CaiXiang
2025-01-20 10:30:01 +08:00
parent 77371da5d7
commit 752be79e06
1010 changed files with 610100 additions and 0 deletions

View File

@@ -0,0 +1,433 @@
#include "stdafx.h"
#include "CEXMemFileQueue.h"
#include <sys/timeb.h>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <windows.h>
#include <algorithm>
#include <codecvt>
#include <regex>
#include <string>
// <20><>ȡ<EFBFBD><C8A1>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>YYYYMMDDhhmmssSSS
std::string formatTimeAsString(int lIndexEx)
{
SYSTEMTIME st;
GetLocalTime(&st);
std::ostringstream oss;
// <20><><EFBFBD><EFBFBD>
oss << std::setw(4) << std::setfill('0') << (st.wYear % 10000);
// <20>·ݺ<C2B7><DDBA><EFBFBD><EFBFBD><EFBFBD>
oss << std::setw(2) << std::setfill('0') << st.wMonth;
oss << std::setw(2) << std::setfill('0') << st.wDay;
// Сʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>
oss << std::setw(2) << std::setfill('0') << st.wHour;
oss << std::setw(2) << std::setfill('0') << st.wMinute;
oss << std::setw(2) << std::setfill('0') << st.wSecond;
//__timeb64 tb;
//_ftime64_s(&tb); // <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//oss << std::setw(3) << std::setfill('0') << tb.millitm; // <20><><EFBFBD><EFBFBD><EBA3AC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><E6B2B9>
oss << std::setw(6) << std::setfill('0') << lIndexEx; // <20><>ֹ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return oss.str();
}
//<2F><>ȡһ<C8A1><D2BB>ָ<EFBFBD><D6B8>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> lType<70><65>ʾ<EFBFBD><CABE>ȡ<EFBFBD><C8A1><EFBFBD>ͣ<EFBFBD>1<EFBFBD><31><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>2<EFBFBD><32><EFBFBD>ļ<EFBFBD><C4BC>У<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>
static void traverse_directory_ansi(const char* directory_path, std::vector<std::string>& files, int lType)
{
char search_path[MAX_PATH];
strcpy_s(search_path, directory_path);
strcat_s(search_path, "\\*");
WIN32_FIND_DATAA find_data;
HANDLE hFind = FindFirstFileA(search_path, &find_data);
if (hFind == INVALID_HANDLE_VALUE)
{
std::cerr << "Failed to open directory: " << directory_path << std::endl;
return;
}
do
{
if (strcmp(find_data.cFileName, ".") == 0 || strcmp(find_data.cFileName, "..") == 0)
{
continue;
}
char full_path[MAX_PATH];
strcpy_s(full_path, directory_path);
strcat_s(full_path, "\\");
strcat_s(full_path, find_data.cFileName);
if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//<2F>ݲ<EFBFBD>֧<EFBFBD>ֵݹ<D6B5><DDB9><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
if (1 != lType) files.push_back(find_data.cFileName);
}
else
{
if (2 != lType) files.push_back(find_data.cFileName);
}
} while (FindNextFileA(hFind, &find_data) != 0);
FindClose(hFind);
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::sort(files.begin(), files.end());
}
CEXMemFileQueue::CEXMemFileQueue(std::string strDataDir)
{
m_strBaseDir = strDataDir;
m_pWriteFileItem = NULL;
m_pReadFileItem = NULL;
m_lReadIndex = 0;
m_lItemCount = 0;
InitializeCriticalSection(&m_cs);
SYSTEMTIME stTime;
GetLocalTime(&stTime);
ChangeDataDate(stTime);
}
CEXMemFileQueue::~CEXMemFileQueue()
{
for (int i = 0; i < (int)m_vecFile.size(); i++)
{
delete m_vecFile[i];
}
m_vecFile.clear();
}
int CEXMemFileQueue::GetItemCount()
{
return m_lItemCount;
}
int CEXMemFileQueue::GetAutoSn()
{
ThreadLock stLock(&m_cs);
m_lAutoSn++;
return m_lAutoSn;
}
int CEXMemFileQueue::ReadItem(void* pData, int lIndex /* = -1 */)
{
ThreadLock stLock(&m_cs);
if (lIndex > m_lItemCount)
{
return -1;
}
if (lIndex >= 0)
{
m_lReadIndex = lIndex;
}
else
{
m_lReadIndex++;
}
if (m_lReadIndex >= m_lItemCount)
{
return -1;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if (NULL == m_pReadFileItem || m_lReadIndex < m_pReadFileItem->lBeindIndex || m_lReadIndex > m_pReadFileItem->lEndIndex)
{
m_pReadFileItem = NULL;
//<2F><><EFBFBD><EFBFBD>Ѱ<EFBFBD><D1B0>
for (int i = 0; i < (int)m_vecFile.size(); i++)
{
if (m_lReadIndex >= m_vecFile[i]->lBeindIndex && m_lReadIndex <= m_vecFile[i]->lEndIndex)
{
m_pReadFileItem = m_vecFile[i];
break;
}
}
}
if (NULL == m_pReadFileItem)
{
return -1;
}
memcpy(pData, (char*)m_pReadFileItem->pBuf + DATA_FIRST_LINE_SIZE + DATA_LINE_SIZE *(m_lReadIndex- m_pReadFileItem->lBeindIndex), DATA_LINE_SIZE);
return m_lReadIndex;
}
void CEXMemFileQueue::FlushWriteFile()
{
ThreadLock stLock(&m_cs);
if (NULL != m_pWriteFileItem)
{
char acFirstLine[DATA_FIRST_LINE_SIZE+1] = { 0 };
sprintf_s(acFirstLine, "%-15d\n", m_pWriteFileItem->lFileSize);
memcpy((char*)m_pWriteFileItem->pBuf, acFirstLine, DATA_FIRST_LINE_SIZE);
FlushViewOfFile(m_pWriteFileItem->pBuf, m_pWriteFileItem->lFileSize);
}
}
int CEXMemFileQueue::WriteItem(void* pData)
{
ThreadLock stLock(&m_cs);
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
SYSTEMTIME stDate;
GetLocalTime(&stDate);
if (stDate.wYear != m_stDataDate.wYear || stDate.wMonth != m_stDataDate.wMonth || stDate.wDay != m_stDataDate.wDay)
{
AutoCleanData(5);
ChangeDataDate(stDate);
}
if (m_pWriteFileItem == NULL || m_pWriteFileItem->lFileSize + DATA_LINE_SIZE > DATA_FILE_SIZE)
{
if (m_pWriteFileItem != NULL)
{
m_pWriteFileItem->lEndIndex = m_lItemCount-1;
FlushWriteFile();
}
m_pWriteFileItem = new CEX_QUEUE_FILE_ITEM;
m_pWriteFileItem->lBeindIndex = m_lItemCount;
m_pWriteFileItem->strFileName = m_strDataDir + "\\" + formatTimeAsString((int)m_vecFile.size()) + ".txt";;
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>д<EFBFBD>͹<EFBFBD><CDB9><EFBFBD>
m_pWriteFileItem->hFile = CreateFileA(
m_pWriteFileItem->strFileName.c_str(),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
nullptr
);
if (m_pWriteFileItem->hFile == INVALID_HANDLE_VALUE)
{
TRACE("CreateFile failed\r\n");
delete m_pWriteFileItem;
m_pWriteFileItem = NULL;
return -1;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>------<2D><>һ<EFBFBD>й̶<D0B9>ռ<EFBFBD><D5BC>16<31>ֽڼ<D6BD>¼<EFBFBD>ļ<EFBFBD>ʵ<EFBFBD>ʴ<EFBFBD>С
m_pWriteFileItem->hMapFile = CreateFileMappingA(m_pWriteFileItem->hFile,nullptr,PAGE_READWRITE, 0,DATA_FILE_SIZE+16,nullptr);
if (m_pWriteFileItem->hMapFile == nullptr)
{
TRACE("CreateFileMapping failed\r\n");
delete m_pWriteFileItem;
m_pWriteFileItem = NULL;
return -2;
}
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD><E4B5BD><EFBFBD>̵ĵ<CCB5>ַ<EFBFBD>ռ<EFBFBD>
m_pWriteFileItem->pBuf = MapViewOfFile( m_pWriteFileItem->hMapFile,FILE_MAP_ALL_ACCESS,0, 0,DATA_FILE_SIZE+16);
if (m_pWriteFileItem->pBuf == nullptr)
{
TRACE("MapViewOfFile failed\r\n");
delete m_pWriteFileItem;
m_pWriteFileItem = NULL;
return -3;
}
FlushWriteFile();//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>һ<EFBFBD>£<EFBFBD>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD>ͷ
m_vecFile.push_back(m_pWriteFileItem);
}
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy((char*)m_pWriteFileItem->pBuf + m_pWriteFileItem->lFileSize, pData, DATA_LINE_SIZE);
m_pWriteFileItem->lFileSize += DATA_LINE_SIZE;
m_pWriteFileItem->lEndIndex = m_lItemCount;
m_lItemCount++;
//ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
char acFirstLine[DATA_FIRST_LINE_SIZE + 1] = { 0 };
sprintf_s(acFirstLine, "%-15d\n", m_pWriteFileItem->lFileSize);
memcpy((char*)m_pWriteFileItem->pBuf, acFirstLine, DATA_FIRST_LINE_SIZE);
return 0;
}
//<2F>л<EFBFBD><D0BB><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
void CEXMemFileQueue::ChangeDataDate(SYSTEMTIME stDate)
{
ThreadLock stLock(&m_cs);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
FlushWriteFile();
m_pReadFileItem = NULL;
m_pWriteFileItem = NULL;
for (int i = 0; i < (int)m_vecFile.size(); i++)
{
delete m_vecFile[i];
}
m_vecFile.clear();
m_lItemCount = 0;
//<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
m_stDataDate = stDate;
char acDate[32] = { 0 };
sprintf_s(acDate, "%04d-%02d-%02d", m_stDataDate.wYear, m_stDataDate.wMonth, m_stDataDate.wDay);
m_strDataDir = m_strBaseDir + "\\" + acDate;
CreateDirectory(m_strDataDir.c_str(), NULL);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>У<EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
std::vector<std::string> files;
traverse_directory_ansi(m_strDataDir.c_str(), files, 1);
for (int i = 0; i < (int)files.size(); i++)
{
CEX_QUEUE_FILE_ITEM* pTempItem = new CEX_QUEUE_FILE_ITEM;
pTempItem->lBeindIndex = m_lItemCount;
pTempItem->strFileName = m_strDataDir + "\\" + files[i];
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>д<EFBFBD>͹<EFBFBD><CDB9><EFBFBD>
pTempItem->hFile = CreateFileA(
pTempItem->strFileName.c_str(),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
nullptr
);
if (pTempItem->hFile == INVALID_HANDLE_VALUE)
{
TRACE("CreateFile failed\r\n");
delete pTempItem;
pTempItem = NULL;
break;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>------<2D><>һ<EFBFBD>й̶<D0B9>ռ<EFBFBD><D5BC>16<31>ֽڼ<D6BD>¼<EFBFBD>ļ<EFBFBD>ʵ<EFBFBD>ʴ<EFBFBD>С
pTempItem->hMapFile = CreateFileMappingA(pTempItem->hFile, nullptr, PAGE_READWRITE, 0, DATA_FILE_SIZE + 16, nullptr);
if (pTempItem->hMapFile == nullptr)
{
TRACE("CreateFileMapping failed\r\n");
delete pTempItem;
pTempItem = NULL;
break;
}
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD><E4B5BD><EFBFBD>̵ĵ<CCB5>ַ<EFBFBD>ռ<EFBFBD>
pTempItem->pBuf = MapViewOfFile(pTempItem->hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, DATA_FILE_SIZE + 16);
if (pTempItem->pBuf == nullptr)
{
TRACE("MapViewOfFile failed\r\n");
delete pTempItem;
pTempItem = NULL;
break;
}
pTempItem->lFileSize = atoi((char*)pTempItem->pBuf);
m_lItemCount += (pTempItem->lFileSize - DATA_FIRST_LINE_SIZE) / DATA_LINE_SIZE;
pTempItem->lEndIndex = m_lItemCount - 1;
m_vecFile.push_back(pTempItem);
}
m_lAutoSn = m_lItemCount;
if (m_vecFile.size() > 0)
{
m_pWriteFileItem = m_vecFile[m_vecFile.size() - 1];
}
}
static bool isValidDateFormat(const std::string& date)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD>ʽ %04d-%02d-%02d
std::regex datePattern(R"((\d{4})\-(\d{2})-(\d{2}))");
//std::regex datePattern(R"(\d{4}-\d{2}-\d{2})");
std::smatch match;
// <20><><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
if (std::regex_match(date, match, datePattern))
{
// <20><>ȡ<EFBFBD><EFBFBD>¡<EFBFBD><C2A1><EFBFBD>
int year = std::stoi(match[1].str());
int month = std::stoi(match[2].str());
int day = std::stoi(match[3].str());
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>Ч<EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>1<EFBFBD><31>12֮<32><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>31֮<31><D6AE><EFBFBD>ȣ<EFBFBD>
if (month < 1 || month > 12 || day < 1 || day > 31)
{
return false;
}
return true;
}
return false;
}
static bool DeleteDirectory(const std::string& dirPath)
{
WIN32_FIND_DATA findFileData;
std::string searchPath = dirPath + _T("\\*");
HANDLE hFind = FindFirstFile(searchPath.c_str(), &findFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
return false;
}
do
{
std::string filePath;
if (strcmp(findFileData.cFileName, _T(".")) == 0 || strcmp(findFileData.cFileName, _T("..")) == 0)
{
continue;
}
filePath = dirPath + _T("\\") + findFileData.cFileName;
if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (!DeleteDirectory(filePath))
{
FindClose(hFind);
return false;
}
}
else
{
if (!DeleteFile(filePath.c_str()))
{
FindClose(hFind);
return false;
}
}
} while (FindNextFile(hFind, &findFileData) != 0);
FindClose(hFind);
return RemoveDirectory(dirPath.c_str()) != 0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
std::vector<std::string> CEXMemFileQueue::GetDataList()
{
std::vector<std::string> vecDir;
traverse_directory_ansi(m_strBaseDir.c_str(), vecDir, 2);
std::vector<std::string> vecDate;
//<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
for (int i = 0; i < (int)vecDir.size(); i++)
{
if (isValidDateFormat(vecDir[i].c_str()))
{
vecDate.push_back(vecDir[i].c_str());
}
}
return vecDate;
}
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD>ݣ<EFBFBD>lRecvDayΪ<79><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CEXMemFileQueue::AutoCleanData(int lRecvDay)
{
ThreadLock stLock(&m_cs);
std::vector<std::string> vecDate = GetDataList();
for (int i = 0; i < ((int)vecDate.size()) - 5; i++)
{
DeleteDirectory(m_strBaseDir + "\\" + vecDate[i]);
}
}

View File

@@ -0,0 +1,120 @@
#pragma once
#include <vector>
#include <string>
#define DATA_FIRST_LINE_SIZE (16) //<2F><>һ<EFBFBD>м<EFBFBD>¼<EFBFBD><C2BC>ǰ<EFBFBD>ļ<EFBFBD>ʵ<EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD>
//////////////////////////////////////////////////////////////////////////
// char acSeq[10];
// char acTime[12];
// unsigned char cIndex; // 0<><30>1
// unsigned char acTxRx; // 0:send, 1:recv
// char acID[10];
// unsigned char acFrame;//0:data, 1:remote
// unsigned char acType; //0:standard, 1:extend
// unsigned char cDlc;
// char acData[32];
#define DATA_FILE_SIZE (89*10000) //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ֽ<EFBFBD><D6BD><EFBFBD>
class CEX_QUEUE_FILE_ITEM
{
public:
CEX_QUEUE_FILE_ITEM()
{
lFileSize = DATA_FIRST_LINE_SIZE;
lBeindIndex = 0;
lEndIndex = 0;
hFile = INVALID_HANDLE_VALUE;
hMapFile = NULL;
pBuf = NULL;
}
~CEX_QUEUE_FILE_ITEM()
{
if (NULL != pBuf)
{
FlushViewOfFile(pBuf, lFileSize);
UnmapViewOfFile(pBuf);
}
if (NULL != hMapFile)
{
CloseHandle(hMapFile);
}
if (INVALID_HANDLE_VALUE != hFile)
{
CloseHandle(hFile);
}
}
std::string strFileName;
HANDLE hFile;//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
HANDLE hMapFile;//<2F>ļ<EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void* pBuf;//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
int lFileSize;//<2F><>ǰ<EFBFBD>ļ<EFBFBD><C4BC>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>е<EFBFBD>ժҪ<D5AA><D2AA>Ϣ<EFBFBD><CFA2><EFBFBD>ļ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ȣ<EFBFBD>
int lBeindIndex;//<2F><>ǰ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
int lEndIndex;//<2F><>ǰ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
};
class CEXMemFileQueue
{
class ThreadLock {
public:
// <20><><EFBFBD><EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
ThreadLock(CRITICAL_SECTION* cs)
{
m_cs = cs;
EnterCriticalSection(m_cs);
}
~ThreadLock()
{
LeaveCriticalSection(m_cs);
}
private:
CRITICAL_SECTION* m_cs; // <20>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
public:
CEXMemFileQueue(std::string strDataDir);
~CEXMemFileQueue();
//<2F><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ȹ̶<C8B9>ΪDATA_LINE_SIZE
int ReadItem(void* pData, int lIndex = -1);
//д<><D0B4>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ȹ̶<C8B9>λDATA_LINE_SIZE
int WriteItem(void* pData);
//ǿ<><C7BF>ˢ<EFBFBD><CBA2><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ļ<EFBFBD><C4BC><EFBFBD>
void FlushWriteFile();
//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int GetItemCount();
int GetAutoSn();
//<2F>л<EFBFBD><D0BB><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
void ChangeDataDate(SYSTEMTIME stDate);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
std::vector<std::string> GetDataList();
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD>ݣ<EFBFBD>lRecvDayΪ<79><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void AutoCleanData(int lRecvDay);
private:
//<2F><><EFBFBD>ݷ<EFBFBD><DDB7>ļ<EFBFBD><C4BC>
std::vector<CEX_QUEUE_FILE_ITEM*> m_vecFile;
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڵ<EFBFBD>
CEX_QUEUE_FILE_ITEM* m_pWriteFileItem;
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ڶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ļ<EFBFBD><C4BC>ڵ<EFBFBD>
CEX_QUEUE_FILE_ITEM* m_pReadFileItem;
int m_lReadIndex;//<2F><>ǰ<EFBFBD><C7B0>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ֵ
int m_lItemCount;//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
std::string m_strBaseDir;//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
std::string m_strDataDir;//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
CRITICAL_SECTION m_cs;
int m_lAutoSn;
SYSTEMTIME m_stDataDate;
};

View File

@@ -0,0 +1,315 @@
// CEXVirtualListDlg.cpp: 实现文件
//
#include "stdafx.h"
#include "PluginPlc.h"
#include "CEXVirtualListCtrl.h"
#include "afxdialogex.h"
#include <iostream>
#include <string>
#include <sstream>
//控件ID只需要在当前窗口中唯一这里随便写一个就好
#define ID_VIRTUAL_LIST_CTRL (1987)
IMPLEMENT_DYNAMIC(CEXVirtualListCtrl, CListCtrl)
CEXVirtualListCtrl::CEXVirtualListCtrl()
{
m_pQueueData = NULL;
m_lOldCount = 0;
}
CEXVirtualListCtrl::~CEXVirtualListCtrl()
{
}
BEGIN_MESSAGE_MAP(CEXVirtualListCtrl, CListCtrl)
ON_NOTIFY_REFLECT(LVN_GETDISPINFO, &CEXVirtualListCtrl::OnLvnGetdispinfo)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CEXVirtualListCtrl::OnNMCustomdraw)
ON_WM_ERASEBKGND()
ON_WM_TIMER()
END_MESSAGE_MAP()
/*
void CEXVirtualListCtrl::Initialize()
{
SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_OWNERDATA); // 确保设置了虚拟大小样式
SetItemCountEx((int)0);
// 添加列(这里假设列是固定的,可以在构造函数中或这里添加)
InsertColumn(0, _T("ID"), LVCFMT_LEFT, 80);
InsertColumn(1, _T("Value1"), LVCFMT_LEFT, 120);
InsertColumn(2, _T("Value2"), LVCFMT_LEFT, 100);
}
*/
void CEXVirtualListCtrl::SetData(CEXMemFileQueue* pQueue)
{
m_pQueueData = pQueue;
SetItemCountEx((int)m_pQueueData->GetItemCount());
}
std::string getSubString(const char* input, int index) {
std::vector<std::string> substrings;
std::stringstream ss(input);
std::string item;
// 使用逗号作为分隔符分割字符串
while (std::getline(ss, item, ',')) {
substrings.push_back(item);
}
// 检查索引是否有效
if (index < 0 || index >= substrings.size()) {
return "";
}
// 返回对应的子串
return substrings[index];
}
void CEXVirtualListCtrl::OnLvnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVDISPINFO* pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
LV_ITEM* pItem = &(pDispInfo)->item;
if (pItem->iItem >= 0 && pItem->iItem < static_cast<int>(m_pQueueData->GetItemCount()))
{
char acTemp[DATA_LINE_SIZE + 1] = { 0 };
int lIndex = m_pQueueData->ReadItem(acTemp, pItem->iItem); //pItem->iItem为行序号即数据索引
if (pItem->mask & LVIF_TEXT)
{
CString str;
int lTempValue = 0;
switch (pItem->iSubItem) //pItem->iSubItem为列编号可以逐单元格设置内容;
{
case 0://acSeq[10];
str= getSubString(acTemp, 0).c_str();
break;
case 1://acTime[12];
str = getSubString(acTemp, 1).c_str();
break;
case 2://cIndex; // 0或1
str = getSubString(acTemp, 2).c_str();
break;
case 3://acTxRx; // 0:send, 1:recv
lTempValue = atoi(getSubString(acTemp, 3).c_str());
str = lTempValue == 0 ? "send" : lTempValue == 1 ? "recv" : "-";
break;
case 4://acID[10];
str = getSubString(acTemp, 4).c_str();
break;
case 5://acFrame;//0:data, 1:remote
lTempValue = atoi(getSubString(acTemp, 5).c_str());
str = lTempValue == 0 ? "data" : lTempValue == 1 ? "remote" : "-";
break;
case 6:////0:standard, 1:extend
lTempValue = atoi(getSubString(acTemp, 6).c_str());
str = lTempValue == 0 ? "standard" : lTempValue == 1 ? "extend" : "-";
break;
case 7://cDlc;
str = getSubString(acTemp, 7).c_str();
break;
case 8://acData[32];
str = getSubString(acTemp, 8).c_str();
break;
}
lstrcpy(pItem->pszText, str);
}
}
*pResult = 0;
}
void CEXVirtualListCtrl::OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLVCUSTOMDRAW pLVCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
*pResult = CDRF_DODEFAULT;
switch (pLVCD->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
{
// 获取当前项和子项的索引
int nItem = static_cast<int>(pLVCD->nmcd.dwItemSpec);
char acTemp[DATA_LINE_SIZE + 1] = { 0 };
m_pQueueData->ReadItem(acTemp, nItem);
int lId = atoi(acTemp);//测试数据每条数据的最前面是10进制的ID所以这里直接使用atoi了
// 根据需要修改颜色
if (lId % 10 == 0) // 根据需要设定行颜色
{
pLVCD->clrText = RGB(255, 0, 0); // 红色文本
pLVCD->clrTextBk = RGB(200, 200, 255); // 浅蓝色背景
//*pResult = CDRF_NEWFONT | CDRF_SKIPDEFAULT;
*pResult = CDRF_NOTIFYITEMDRAW;
}
}
break;
default:
break;
}
}
BOOL CEXVirtualListCtrl::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//return TRUE; //避免闪烁
return CListCtrl::OnEraseBkgnd(pDC);
}
#define TIMER_REFRESH_LIST_ID (18989)
void CEXVirtualListCtrl::StartAutoRefresh(int lMSecond)
{
SetTimer(TIMER_REFRESH_LIST_ID, lMSecond, NULL);
}
void CEXVirtualListCtrl::StopAutoRefresh()
{
KillTimer(TIMER_REFRESH_LIST_ID);
}
void CEXVirtualListCtrl::RefreshShow()
{
int lItemCount = m_pQueueData->GetItemCount();
if (m_lOldCount == lItemCount)
{
return;
}
SetItemCountEx(lItemCount, LVSICF_NOINVALIDATEALL | LVSICF_NOSCROLL);
EnsureVisible(lItemCount - 1, FALSE);
m_lOldCount = lItemCount;
}
void CEXVirtualListCtrl::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (TIMER_REFRESH_LIST_ID == nIDEvent)
{
if (NULL != m_pQueueData)
{
RefreshShow();
}
}
else
{
//自定义定时器无需调用基类OnTimer否则定时器会被强制结束
CListCtrl::OnTimer(nIDEvent);
}
}
#if 0
// CEXVirtualListDlg 对话框
IMPLEMENT_DYNAMIC(CEXVirtualListDlg, CDialogEx)
CEXVirtualListDlg::CEXVirtualListDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_CEXVirtualListDlg, pParent)
{
m_pstVirtualList = new CEXVirtualListCtrl();
}
CEXVirtualListDlg::~CEXVirtualListDlg()
{
}
void CEXVirtualListDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
//DDX_Control(pDX, ID_VIRTUAL_LIST_CTRL, *m_pstVirtualList);
}
BEGIN_MESSAGE_MAP(CEXVirtualListDlg, CDialogEx)
ON_BN_CLICKED(IDOK, &CEXVirtualListDlg::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &CEXVirtualListDlg::OnBnClickedCancel)
ON_WM_SIZE()
END_MESSAGE_MAP()
// CEXVirtualListDlg 消息处理程序
void CEXVirtualListDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//CDialogEx::OnOK();
//屏蔽按下回车导致列表隐藏
}
void CEXVirtualListDlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
//CDialogEx::OnCancel();
//屏蔽按下ESC导致列表隐藏
}
void CEXVirtualListDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
if (NULL != m_pstVirtualList && NULL != m_pstVirtualList->m_hWnd)
{
m_pstVirtualList->MoveWindow(0, 0, cx, cy);
}
}
BOOL CEXVirtualListDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
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; // 返回 FALSE 以使框架知道未成功初始化
}
// 设置控件的扩展样式和其他属性:整行选中、
m_pstVirtualList->SetExtendedStyle(LVS_EX_GRIDLINES | LVS_REPORT/*LVS_EX_VIRTUALSIZE*/);
m_pstVirtualList->Initialize();
return TRUE;
}
void CEXVirtualListDlg::SetData(CEXMemFileQueue* pQueue)
{
m_pstVirtualList->SetData(pQueue);
}
#endif
BOOL CEXVirtualListCtrl::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此添加专用代码和/或调用基类
return CListCtrl::PreCreateWindow(cs);
}
BOOL CEXVirtualListCtrl::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
{
// TODO: 在此添加专用代码和/或调用基类
BOOL bRet = CListCtrl::Create(dwStyle, rect, pParentWnd, nID);
SetExtendedStyle(LVS_EX_GRIDLINES | LVS_REPORT/*LVS_EX_VIRTUALSIZE*/);
SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_OWNERDATA); // 确保设置了虚拟大小样式
SetItemCountEx((int)0);
return bRet;
}

View File

@@ -0,0 +1,75 @@
#pragma once
#include <afxwin.h>
#include <vector>
#include <string>
#include "CEXMemFileQueue.h"
struct MyListItem {
int id;
CString name;
CString date;
};
class CEXVirtualListCtrl : public CListCtrl {
DECLARE_DYNAMIC(CEXVirtualListCtrl)
public:
CEXVirtualListCtrl();
virtual ~CEXVirtualListCtrl();
//void Initialize();
void SetData(CEXMemFileQueue* pQueue);
void StartAutoRefresh(int lMSecond);
void StopAutoRefresh();
void RefreshShow();
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnLvnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult);
private:
CEXMemFileQueue* m_pQueueData;
int m_lOldCount;
public:
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
afx_msg void OnTimer(UINT_PTR nIDEvent);
};
// CEXVirtualListDlg 对话框
class CEXVirtualListDlg : public CDialogEx
{
DECLARE_DYNAMIC(CEXVirtualListDlg)
public:
CEXVirtualListDlg(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CEXVirtualListDlg();
//给虚拟列表关联数据
void SetData(CEXMemFileQueue* pQueue);
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_CEXVirtualListDlg };
#endif
virtual BOOL OnInitDialog();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
afx_msg void OnSize(UINT nType, int cx, int cy);
private:
CEXVirtualListCtrl* m_pstVirtualList;
};

View File

@@ -0,0 +1,37 @@
// ClientSocket.cpp : implementation file
//
#include "stdafx.h"
//#include "DustCleanHMI.h"
#include "ClientSocket.h"
#include "CommDataDef.h"
// CClientSocket
CClientSocket::CClientSocket()
{
m_hSocket = INVALID_SOCKET;
}
CClientSocket::~CClientSocket()
{
}
// CClientSocket member functions
void CClientSocket::OnReceive(int nErrorCode)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ɶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>̶߳<DFB3>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
m_pThrd->PostThreadMessage(WM_THREAD_RECV,WP_WPARA_RECV,0);
CSocket::OnReceive(nErrorCode);
}
void CClientSocket::OnClose(int nErrorCode)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ɶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>̹߳رձ<D8B1><D5B1><EFBFBD>Socket
m_pThrd->PostThreadMessage(WM_THREAD_RECV, WP_WPARA_CLOSE, 0);
CSocket::OnClose(nErrorCode);
}

17
Plugin/Plc/ClientSocket.h Normal file
View File

@@ -0,0 +1,17 @@
#pragma once
// CClientSocket command target
class CClientSocket : public CSocket
{
public:
CClientSocket();
virtual ~CClientSocket();
virtual void OnReceive(int nErrorCode);
virtual void OnClose(int nErrorCode);
public:
//CDialog* m_pMainDlg; //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
CWinThread* m_pThrd; // <20><>CSocket<65><74><EFBFBD>ڵ<EFBFBD><DAB5>߳<EFBFBD>
};

View File

@@ -0,0 +1,137 @@
// ColoredListCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "ColoredListCtrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CColoredListCtrl
CColoredListCtrl::CColoredListCtrl()
{
m_colRow1 = RGB(200,200,250);
m_colRow2 = RGB(230,247,247);
// m_colRow1 = RGB(240,247,249);
// m_colRow2 = RGB(229,232,239);
}
CColoredListCtrl::~CColoredListCtrl()
{
}
BEGIN_MESSAGE_MAP(CColoredListCtrl, CListCtrl)
//{{AFX_MSG_MAP(CColoredListCtrl)
ON_WM_ERASEBKGND()
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CColoredListCtrl message handlers
void CColoredListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
int iRow = lplvcd->nmcd.dwItemSpec;
switch(lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT :
{
*pResult = CDRF_NOTIFYITEMDRAW;
return;
}
// Modify item text and or background
case CDDS_ITEMPREPAINT:
{
lplvcd->clrText = RGB(0,0,0);
// If you want the sub items the same as the item,
// set *pResult to CDRF_NEWFONT
if(ItemColorFlag[iRow]){
lplvcd->clrTextBk = m_colRow2;
}
else{
lplvcd->clrTextBk = m_colRow1;
}
*pResult =CDRF_NOTIFYSUBITEMDRAW;
return;
}
// Modify sub item text and/or background
case CDDS_SUBITEM | CDDS_PREPAINT | CDDS_ITEM:
{
/* //if(*(ItemColorFlag+nextrow)){
if(ItemColorFlag[iRow]){
lplvcd->clrTextBk = m_colRow2;
}
else{
lplvcd->clrTextBk = m_colRow1;
}
*/
*pResult = CDRF_DODEFAULT;
return;
}
}
/*
void CCoolList::OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult){//<2F><><EFBFBD>Ͱ<EFBFBD>ȫת<C8AB><D7AA>
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
*pResult = 0;//ָ<><D6B8><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
if(CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{*pResult = CDRF_NOTIFYITEMDRAW;}
else if(CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(pLVCD->nmcd.dwItemSpec % 2)
pLVCD->clrTextBk = RGB(255, 255, 128);//ż<><C5BC><EFBFBD><EFBFBD>
else
pLVCD->clrTextBk = RGB(128, 255, 255);//<2F><><EFBFBD><EFBFBD>*pResult = CDRF_DODEFAULT;}}
);//<2F><><EFBFBD><EFBFBD>
*pResult = CDRF_DODEFAULT;}}
*/
}
BOOL CColoredListCtrl::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
//return TRUE;
CRect rect;
CColoredListCtrl::GetClientRect(rect);
// POINT mypoint;
// CBrush brush0(m_colRow1);
CBrush brush1(m_colRow2);
int chunk_height=GetCountPerPage();
pDC->FillRect(&rect,&brush1);
/*
for (int i=0;i<=chunk_height;i++)
{
GetItemPosition(i,&mypoint);
rect.top=mypoint.y ;
GetItemPosition(i+1,&mypoint);
rect.bottom =mypoint.y;
pDC->FillRect(&rect,i %2 ? &brush1 : &brush0);
}*/
// brush0.DeleteObject();
brush1.DeleteObject();
return FALSE;
}

View File

@@ -0,0 +1,51 @@
#if !defined(AFX_COLOREDLISTCTRL_H__86FEBE8E_F6FA_429F_B740_76F1769C81C6__INCLUDED_)
#define AFX_COLOREDLISTCTRL_H__86FEBE8E_F6FA_429F_B740_76F1769C81C6__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ColoredListCtrl.h : header file
//
extern unsigned long int nextrow;
/////////////////////////////////////////////////////////////////////////////
// CColoredListCtrl window
class CColoredListCtrl : public CListCtrl
{
// Construction
public:
CColoredListCtrl();
// Attributes
public:
COLORREF m_colRow1;
COLORREF m_colRow2;
// Operations
public:
unsigned char ItemColorFlag[60000];
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CColoredListCtrl)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CColoredListCtrl();
// Generated message map functions
protected:
//{{AFX_MSG(CColoredListCtrl)
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
afx_msg void CColoredListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_COLOREDLISTCTRL_H__86FEBE8E_F6FA_429F_B740_76F1769C81C6__INCLUDED_)

302
Plugin/Plc/CommDataDef.h Normal file
View File

@@ -0,0 +1,302 @@
#pragma once
#pragma pack (1)
//<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define WM_THREAD_RECV WM_USER + 1000
#define WM_SERTHREAD_RECV WM_USER + 2000
#define WP_WPARA_RECV 1001
#define WP_WPARA_CLOSE 1002 //socket<65>ر<EFBFBD>
#define WP_WPARA_THREAD_QUIT 1005 //<2F>̹߳ر<CCB9>
#define WP_WPARA_SERVER_RECV 2001
#define WP_WPARA_SERVER_CLOSE 2002 //socket<65>ر<EFBFBD>
#define WP_WPARA_SERTHREAD_QUIT 2005 //<2F>̹߳ر<CCB9>
//<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD>
#define DUSTDEV_REGNUM 14 //<2F>ɼ<EFBFBD><C9BC>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><DCB8><EFBFBD>
//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
typedef struct __dustDevPara{
double fDCVolt;
double fDCCurr;
double fPSVolt;
double fPSCurr;
WORD wPsFreq;
double fEnvTempr;
double fEnvHumity;
double fDcIgbtTemp;
double fPulseIgbtTemp;
__dustDevPara(){
fDCVolt =0.0;
fDCCurr =0.0;
fPSVolt =0.0;
fPSCurr =0.0;
wPsFreq =0;
fEnvTempr =0.0;
fEnvHumity =0.0;
fDcIgbtTemp =0.0;
fPulseIgbtTemp =0.0;
}
}ST_DUSTDEV_WOORKPARA;
//Modbus<75><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>ֵ
typedef enum __enumFuncCode{
EN_MODBUS_READ_SINGLECOIL =0x01, //<2F><><EFBFBD><EFBFBD>Ȧ
EN_MODBUS_READ_PERSISREG =0x03, //<2F><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
EN_MODBUS_WRITE_SINGLECOIL =0x05, //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ
EN_MODBUS_WRITE_SINGLEREG =0x06, //д<><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
EN_MODBUS_WRITE_MULTIREG =0x10,
EN_MODBUS_READ_SINGLECOIL_RSPERR =0x81,
EN_MODBUS_READ_PERSISREG_RSPERR =0x83,
EN_MODBUS_WRITE_SINGLECOIL_RSPERR =0x85,
EN_MODBUS_WRITE_SINGLEREG_RSPERR =0x86,
EN_MODBUS_WRITE_MULTIREG_RSPERR =0x90
}EN_NUM_MODBUS_FUNCCODE;
//<2F>Ĵ<EFBFBD><C4B4><EFBFBD>ö<EFBFBD><C3B6>ֵ(*10<31><30>ʾ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ֵΪʵ<CEAA><CAB5>ֵ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>)
typedef enum __enumRegAddr{
EN_REGADDR_DCVOLTH =0x0000, //ֱ<><D6B1><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
EN_REGADDR_DCVOLTL =0x0001, //ֱ<><D6B1><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
EN_REGADDR_DCCURR =0x0002, //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *10.0
EN_REGADDR_PULSEVOLTH =0x0003, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
EN_REGADDR_PULSEVOLTL =0x0004, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
EN_REGADDR_PULSECURR =0x0005, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *10.0
EN_REGADDR_PULSEFREQ =0x0006, //<2F><><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5> *10.0
EN_REGADDR_ENVTEMP =0x0007, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *10.0
EN_REGADDR_ENVHUMITY =0x0008, //<2F><><EFBFBD><EFBFBD>ʪ<EFBFBD><CAAA> *10.0
EN_REGADDR_SUPPLYVOLT =0x0009, //<2F>е<EFBFBD><D0B5><EFBFBD>ѹ *10.0
EN_REGADDR_SUPPLYCURR =0x000A, //<2F>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD> *10.0
EN_REGADDR_ACTODCVOLT =0x000B, //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ѹ *10.0
EN_REGADDR_DCIGBTTEMP =0x000C, //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IGBT<42><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *10.0
EN_REGADDR_PULSEIGBTTEMP=0x000D //<2F><><EFBFBD>岿<EFBFBD><E5B2BF>IGBT<42><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *10.0
}EN_NUM_REGADDR;
//MBAP<41><50><EFBFBD><EFBFBD>ͷ
typedef struct __modbusMbapHeader{
WORD wTransFlag;
WORD wProtocolFlag;
WORD wLen;
BYTE bUnitFlag;
__modbusMbapHeader(){
wTransFlag =0;
wProtocolFlag =0;
wLen =0;
bUnitFlag =0;
}
}ST_MODBUS_MBAP_HEADER;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ/<2F><><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---Cient<6E><74>
typedef struct __clientRqtReadFrame{
ST_MODBUS_MBAP_HEADER stMbapHeader;
BYTE bFuncConde;
WORD wStartAddr;
WORD wRegNum;
__clientRqtReadFrame()
{
bFuncConde =0x0;
wStartAddr =0;
wRegNum =0;
}
}ST_MODBUS_CLIENT_RQTREAD_FRAME;
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ<EFBFBD><C8A6><EFBFBD><EFBFBD>---Cient<6E><74>
typedef struct __clientRqtWrtCoilFrame{
ST_MODBUS_MBAP_HEADER stMbapHeader;
BYTE bFuncConde;
WORD wAddr;
WORD wOutVal;
__clientRqtWrtCoilFrame()
{
bFuncConde =0x05;
wAddr =0;
wOutVal =0;
}
}ST_MODBUS_CLIENT_RQTWRTCOIL_FRAME;
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct __serverRqtWrtRegFrame{
ST_MODBUS_MBAP_HEADER stMbapHeader;
BYTE bFuncConde;
WORD wAddr;
WORD wOutVal;
__serverRqtWrtRegFrame()
{
bFuncConde =0x06;
wAddr =0;
wOutVal =0;
}
}ST_MODBUS_SERVER_RQTWRTREG_FRAME;
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---Cient<6E><74>
typedef struct __clientRqtWrtMultiRegFrame{
ST_MODBUS_MBAP_HEADER stMbapHeader;
BYTE bFuncConde;
WORD wStartAddr;
WORD wRegNum;
BYTE bLen;
BYTE bRegVal[255];
__clientRqtWrtMultiRegFrame()
{
bFuncConde =0x10;
wStartAddr =0;
wRegNum =0;
bLen =0;
memset(bRegVal,0,255);
}
}ST_MODBUS_CLIENT_RQTWRTMULTIREG_FRAME;
//<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּĴ<D6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--Server <20><>
typedef struct __serveRspReadFrame{
ST_MODBUS_MBAP_HEADER stMbapHeader;
BYTE bFuncConde;
BYTE bLen;
BYTE bRtnData[255];
}ST_MODBUS_SERVER_RSPREAD_FRAME;
//<2F><>Ӧд<D3A6><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȧ/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ּĴ<D6BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--Server <20><>
typedef struct __serveRspWrtFrame{
ST_MODBUS_MBAP_HEADER stMbapHeader;
BYTE bFuncConde;
WORD wStartAddr;
WORD wRegNum;
}ST_MODBUS_SERVER_RSPWRT_FRAME;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ֡
typedef struct __serverRspErrFrame{
ST_MODBUS_MBAP_HEADER stMbapHeader;
BYTE bFuncConde;
BYTE bErrCode;
}ST_MODBUS_SERVER_RSPERR_FRAME;
////===========================================================================================================
//------------<2D><><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>PCͨ<43><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>
typedef enum __enumpcCommFuncCode{
EN_PCCOMM_TRANSDATA =0x51, //HMI--->PC
EN_PCCOMM_WORKPARASET =0x52, //PC---->HMI
EN_PCCOMM_SAMPLEPARASET =0x53, //PC---->HMI
EN_PCCOMM_DEVSTARTSTOP =0x54, //PC---->HMI
EN_PCCOMM_HISTORYDATARQT =0x55, //PC---->HMI
EN_PCCOMM_TRANSDATA_RSP =0x61, //PC---->HMI
EN_PCCOMM_WORKPARASET_RSP =0x62, //HMI--->PC
EN_PCCOMM_SAMPLEPARASET_RSP =0x63, //HMI--->PC
EN_PCCOMM_DEVSTARTSTOP_RSP =0x64 //HMI--->PC
}EN_NUM_PCCOMM_FUNCCODE;
//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9>
typedef struct __devSampleData{
int iDevID;
DWORD dwIPAddr;
WORD wPulseFreq;
float fDcVolt;
float fDcCurr;
float fPulseVolt;
float fPulseCurr;
float fEnvTemprature;
float fEnvHumidity;
float fSupplyVolt;
float fSupplyCurr;
float fRectiferDC;
float fDcIgbtTemp;
float fPsIgbtTemp;
BYTE bSampleTime[6];
__devSampleData(){
iDevID =0;
dwIPAddr =0;
wPulseFreq =0;
fDcVolt =0;
fDcCurr =0;
fPulseVolt =0;
fPulseCurr =0;
fEnvHumidity=0;
fEnvTemprature =0;
fSupplyVolt =0;
fSupplyCurr =0;
fRectiferDC =0;
fDcIgbtTemp =0;
fPsIgbtTemp =0;
memset(bSampleTime,0,6);
}
}ST_DEVSAMPLE_DATA;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct __devWorkParaFromPC{
int iDevID;
DWORD dwIPAddr;
WORD wPulseFreq;
float fDcVolt;
float fDcCurr;
float fPulseVolt;
float fPulseCurr;
char szDevName[32];
char szDevIPAddr[32];
__devWorkParaFromPC(){
iDevID =0;
dwIPAddr =0;
wPulseFreq =0;
fDcVolt =0;
fDcCurr =0;
fPulseVolt =0;
fPulseCurr =0;
szDevName[0] ='\0';
szDevIPAddr[0] ='\0';
}
__devWorkParaFromPC& operator=(const __devWorkParaFromPC &rhs)
{
this->iDevID = rhs.iDevID;
this->dwIPAddr = rhs.dwIPAddr;
this->wPulseFreq= rhs.wPulseFreq;
this->fDcVolt = rhs.fDcVolt;
this->fDcCurr = rhs.fDcCurr;
this->fPulseVolt= rhs.fPulseVolt;
this->fPulseCurr= rhs.fPulseCurr;
strcpy(this->szDevName,rhs.szDevName);
strcpy(this->szDevIPAddr,rhs.szDevIPAddr);
return (*this);
}
}ST_DEVWORKPARA_FROMPC,*PST_DEVWORKPARA_FROMPC;
//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
typedef struct __devSampleParaFromPC{
WORD wSampleIntver;
BYTE bIsSavePcOnline;
__devSampleParaFromPC(){
wSampleIntver =0;
bIsSavePcOnline =0;
}
}ST_SAMPLEPARA_FROMPC;
//<2F><EFBFBD><E8B1B8>ͣ
typedef struct __devStartStopFromPC{
int iDevID;
DWORD dwIPAddr;
BYTE bIsStart;
__devStartStopFromPC(){
iDevID =0;
dwIPAddr =0;
bIsStart =0;
}
}ST_DEVSTARTSTOP_FROMPC;
//<2F><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct __historyRqtFromPC{
int iDevID;
DWORD dwIPAddr;
BYTE bStartTime[6];
BYTE bStopTime[6];
__historyRqtFromPC(){
iDevID =0;
dwIPAddr =0;
memset(bStartTime,0,6);
memset(bStopTime,0,6);
}
}ST_HISTORYRQT_FROMPC;
#pragma pack ()

37
Plugin/Plc/ConfigDlg.h Normal file
View File

@@ -0,0 +1,37 @@
#pragma once
#include "afxcmn.h"
class CConfigDlg : public CDialogEx
{
DECLARE_DYNAMIC(CConfigDlg)
public:
CConfigDlg(CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CConfigDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_CONFIG_DLG};
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
void ReadConfigFromIni();
CIPAddressCtrl m_ipAddrCtrl;
afx_msg void OnBnClickedBtnSet();
};

101
Plugin/Plc/ConifgDlg.cpp Normal file
View File

@@ -0,0 +1,101 @@
// PlcDeviceDlg.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
//
#include "stdafx.h"
#include "ConfigDlg.h"
#include "afxdialogex.h"
#include "PluginPlc.h"
#include "resource.h"
#define TIMER_UPDATE_TOPLC 1
#define TIMER_UPDATE_TODLG 2
#define TIMER_UPDATE_FROMPLC 3
// CPlcDeviceDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
IMPLEMENT_DYNAMIC(CConfigDlg, CDialogEx)
CConfigDlg::CConfigDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_CONFIG_DLG, pParent)
{
}
CConfigDlg::~CConfigDlg()
{
}
void CConfigDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_IPADDRESS, m_ipAddrCtrl);
}
BEGIN_MESSAGE_MAP(CConfigDlg, CDialogEx)
ON_BN_CLICKED(IDC_BTN_SET, &CConfigDlg::OnBnClickedBtnSet)
END_MESSAGE_MAP()
// CPlcDeviceDlg <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CConfigDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
ReadConfigFromIni();
return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
void CConfigDlg::ReadConfigFromIni()
{
CString strIniPath = theApp.m_strModulePath + "\\config.ini";
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
char acValue[32] = "";
GetPrivateProfileString("CORE", "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));
int nPort = GetPrivateProfileInt("CORE", "PORT", 0, strIniPath);
CString strPort;
strPort.Format("%d", nPort);
GetDlgItem(IDC_EDIT_PORT)->SetWindowText(strPort);
return; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
void CConfigDlg::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("CORE", "IP", strIpAddr, strIniPath);
CString strPort;
GetDlgItem(IDC_EDIT_PORT)->GetWindowText(strPort);
WritePrivateProfileString("CORE", "PORT", strPort, strIniPath);
MessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>.");
}

View File

@@ -0,0 +1,273 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{8BBB60C1-510D-47BC-8FD2-E14E9EA3A156}</ProjectGuid>
<RootNamespace>VcsClient</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<Keyword>MFCProj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\Agv</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\Agv</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>E:\work\tank_svn\shiyu\project\fan\warehouse\code\cpp\vcs-client\Inc\json\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)3rdparty\json\inc;$(SolutionDir)CCEXPipe;$(SolutionDir)3rdparty\curl\inc;..\modbus;$(SolutionDir)3rdparty\can\inc;$(SolutionDir)3rdparty\sqlite;$(SolutionDir)3rdparty\whttp-server-core;$(SolutionDir)3rdparty\openssl\inc;$(SolutionDir)3rdparty\pthread\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<AdditionalDependencies>libcurl.lib;modbus.lib;ControlCAN.lib;libcrypto.lib;libssl.lib;pthreadVC2.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)3rdparty\curl\lib\x64;$(SolutionDir)$(Platform)\$(Configuration)\;$(SolutionDir)3rdparty\modbus\lib;$(SolutionDir)3rdparty\can\lib;$(SolutionDir)3rdparty\pthread\lib\x64;$(SolutionDir)3rdparty\openssl\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)3rdparty\json\inc;$(SolutionDir)CCEXPipe;$(SolutionDir)3rdparty\curl\inc;..\modbus;$(SolutionDir)3rdparty\can\inc;$(SolutionDir)3rdparty\sqlite;$(SolutionDir)3rdparty\whttp-server-core;$(SolutionDir)3rdparty\pthread\inc;$(SolutionDir)3rdparty\openssl\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>$(SolutionDir)3rdparty\curl\lib\x64;$(SolutionDir)$(Platform)\$(Configuration)\;$(SolutionDir)3rdparty\modbus\lib;$(SolutionDir)3rdparty\can\lib;$(SolutionDir)3rdparty\pthread\lib\x64;$(SolutionDir)3rdparty\openssl\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libcurl.lib;modbus.lib;ControlCAN.lib;libcrypto.lib;libssl.lib;pthreadVC2.lib</AdditionalDependencies>
<UACExecutionLevel>AsInvoker</UACExecutionLevel>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\3rdparty\sqlite\sqlite3.h" />
<ClInclude Include="..\..\..\3rdparty\sqlite\sqlite3ext.h" />
<ClInclude Include="..\..\..\3rdparty\whttp-server-core\IHttpServer.h" />
<ClInclude Include="..\..\..\3rdparty\whttp-server-core\LockQueue.hpp" />
<ClInclude Include="..\..\..\3rdparty\whttp-server-core\mongoose.h" />
<ClInclude Include="..\..\..\3rdparty\whttp-server-core\unistd.h" />
<ClInclude Include="..\..\..\3rdparty\whttp-server-core\WHttpServer.h" />
<ClInclude Include="..\..\..\3rdparty\whttp-server-core\WThreadPool.h" />
<ClInclude Include="AppMsgHandler.h" />
<ClInclude Include="CanDeviceDlg.h" />
<ClInclude Include="CEXMemFileQueue.h" />
<ClInclude Include="CEXVirtualListCtrl.h" />
<ClInclude Include="ClientSocket.h" />
<ClInclude Include="ClientSocketThread.h" />
<ClInclude Include="ColoredListCtrl.h" />
<ClInclude Include="CommDataDef.h" />
<ClInclude Include="ConfigDlg.h" />
<ClInclude Include="DatabaseMgr.h" />
<ClInclude Include="FileServer.h" />
<ClInclude Include="HttpService.h" />
<ClInclude Include="Map.h" />
<ClInclude Include="PlcDeviceDlg.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
<ClInclude Include="PluginMainDialog.h" />
<ClInclude Include="PluginApp.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\3rdparty\json\src\json_reader.cpp" />
<ClCompile Include="..\..\..\3rdparty\json\src\json_value.cpp" />
<ClCompile Include="..\..\..\3rdparty\json\src\json_writer.cpp" />
<ClCompile Include="..\..\..\3rdparty\sqlite\shell.c" />
<ClCompile Include="..\..\..\3rdparty\sqlite\sqlite3.c" />
<ClCompile Include="..\..\..\3rdparty\whttp-server-core\mongoose.cpp" />
<ClCompile Include="..\..\..\3rdparty\whttp-server-core\WHttpServer.cpp" />
<ClCompile Include="..\..\..\3rdparty\whttp-server-core\WThreadPool.cpp" />
<ClCompile Include="AppMsgHandler.cpp" />
<ClCompile Include="CanDeviceDlg.cpp" />
<ClCompile Include="CEXMemFileQueue.cpp" />
<ClCompile Include="CEXVirtualListCtrl.cpp" />
<ClCompile Include="ClientSocket.cpp" />
<ClCompile Include="ClientSocketThread.cpp" />
<ClCompile Include="ColoredListCtrl.cpp" />
<ClCompile Include="ConifgDlg.cpp" />
<ClCompile Include="DatabaseMgr.cpp" />
<ClCompile Include="FileServer.cpp" />
<ClCompile Include="HttpService.cpp" />
<ClCompile Include="PlcDeviceDlg.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="PluginMainDialog.cpp" />
<ClCompile Include="PluginApp.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Kernel.rc" />
</ItemGroup>
<ItemGroup>
<None Include="res\Kernel.rc2" />
</ItemGroup>
<ItemGroup>
<Image Include="res\Kernel.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties RESOURCE_FILE="" />
</VisualStudio>
</ProjectExtensions>
</Project>

23
Plugin/Plc/Map.h Normal file
View File

@@ -0,0 +1,23 @@
#pragma once
#include "Map.h"
typedef enum
{
POS_UNLOAD = 1, //AGVж<56><D0B6><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
POS_UNLOAD_SLOW_DOWN = 2, //ж<><D0B6><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD>
POS_CLOSE_SHOP_ROLLER_DOOR = 3, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
POS_OPEN_SHOP_ROLLER_DOOR = 4, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>
POS_MANHOLE_COVER_1 = 5, //<2F><><EFBFBD><EFBFBD>#1
POS_MANHOLE_COVER_2 = 6, //<2F><><EFBFBD><EFBFBD>#2
//POS_BOLLARD_SLOW_DOWN_1 = 6, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD>#1
POS_BOLLARD_STOP_1 = 7, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>#1
POS_MANHOLE_COVER_3 = 8, //<2F><><EFBFBD><EFBFBD>#3
POS_MANHOLE_COVER_4 = 9, //<2F><><EFBFBD><EFBFBD>#4
//POS_BOLLARD_SLOW_DOWN_2 = 10, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD>#2
POS_BOLLARD_STOP_2 = 10, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>#2
POS_MANHOLE_COVER_5 = 11, //<2F><><EFBFBD><EFBFBD>#5
POS_MANHOLE_COVER_6 = 12, //<2F><><EFBFBD><EFBFBD>#6
POS_LOAD_SLOW_DOWN = 13, //װ<><D7B0><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD>
POS_LOAD = 14, //װ<><D7B0><EFBFBD><EFBFBD>
}ENUM_LOCATION_MAP; //<2F><>ͼ<EFBFBD><CDBC>λ

463
Plugin/Plc/ModbusClient.cpp Normal file
View File

@@ -0,0 +1,463 @@
// ClientSocketThread.cpp : implementation file
//
#include "stdafx.h"
#include "ModbusClient.h"
// CModbusClient
const UINT glServerPort = 502;
#define RECVDATA_BUFLEN 1024000 //<2F><><EFBFBD>ݽ<EFBFBD><DDBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DATALEN_PERTIME 512 //<2F><><EFBFBD>δ<EFBFBD>Scoket<65><74><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
#define DATADEAL_BUFLEN 512 //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(TCP֡<50><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>)
#define SOCKET_TIME_OUT 500
IMPLEMENT_DYNCREATE(CModbusClient, CWinThread)
CModbusClient::CModbusClient(CString strIp, int nPort, HWND hWnd)
{
m_pRecvDataBuffer = NULL;
m_pDealBuf = NULL;
m_iWritePos = 0;
m_iReadPos = 0;
m_llDataTotalLen = 0;
m_llReadTotal = 0;
m_strSerIP = strIp;
m_hWnd = hWnd;
m_bConnected = FALSE;
m_ReadEventHandle = CreateEvent(NULL, TRUE, FALSE, NULL); //<2F><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>λ
m_WriteEventHandle = CreateEvent(NULL, TRUE, FALSE, NULL); //<2F><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>λ
}
CModbusClient::CModbusClient()
{
}
CModbusClient::~CModbusClient()
{
if (m_pDealBuf)
{
delete m_pDealBuf;
m_pDealBuf =NULL;
}
if (m_pRecvDataBuffer)
{
delete m_pRecvDataBuffer;
m_pRecvDataBuffer =NULL;
}
}
BOOL CModbusClient::InitInstance()
{
if (!AfxSocketInit()) // <20><>ʼ<EFBFBD><CABC>CSocket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>
{
CWinThread::InitInstance(); //<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
return FALSE;
}
//<2F><><EFBFBD><EFBFBD>socket
if (!m_socket.Create())
{
//<2F><><EFBFBD><EFBFBD>socketʧ<74><CAA7>
CWinThread::InitInstance(); //<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
return FALSE;
}
// <20><><EFBFBD>÷<EFBFBD><C3B7>ͳ<EFBFBD>ʱʱ<CAB1><EFBFBD><E4A3AC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
int nTimeout = SOCKET_TIME_OUT;
m_socket.SetSockOpt(SO_SNDTIMEO, (char*)&nTimeout, sizeof(nTimeout), SOL_SOCKET);
// <20><><EFBFBD>ý<EFBFBD><C3BD>ճ<EFBFBD>ʱʱ<CAB1><EFBFBD><E4A3AC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
nTimeout = SOCKET_TIME_OUT;
m_socket.SetSockOpt(SO_RCVTIMEO, (char*)&nTimeout, sizeof(nTimeout), SOL_SOCKET);
//m_socket.m_pMainDlg = m_pMainDlg;
m_socket.m_pThrd = this;
if (!m_socket.Connect(m_strSerIP, glServerPort))
{
CWinThread::InitInstance(); //<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
m_bConnected = FALSE;
//return FALSE;
}
else
{
m_bConnected = TRUE;
//<2F><><EFBFBD>ӳɹ<D3B3><C9B9><EFBFBD><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PostMessage(m_hWnd, WM_NETMESSAGE, NET_CONNECT_OK, (LPARAM)m_bDevID);
}
m_pRecvDataBuffer = new BYTE[RECVDATA_BUFLEN];
ASSERT(m_pRecvDataBuffer != NULL);
m_pDealBuf = new BYTE[DATADEAL_BUFLEN];
ASSERT(m_pDealBuf != NULL);
m_iWritePos =0;
m_iReadPos =0;
m_llDataTotalLen =0;
m_llReadTotal =0;
m_wTcpID =0;
return TRUE; //<2F>̲߳<DFB3><CCB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
}
int CModbusClient::ExitInstance()
{
if (m_socket.m_hSocket != INVALID_SOCKET)
{
m_socket.ShutDown(2);
m_socket.Close();
}
//m_bConnected = FALSE;
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CModbusClient, CWinThread)
ON_THREAD_MESSAGE(WM_THREAD_RECV, OnCustomMsg)
END_MESSAGE_MAP()
// CModbusClient message handlers
void CModbusClient::OnCustomMsg(WPARAM wParam,LPARAM lParam)
{
BYTE pReadBf[DATALEN_PERTIME+1] = {0};
int iRdLen =0;
switch(wParam)
{
case WP_WPARA_RECV:
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Ȱѽ<C8B0><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ص<EFBFBD>
m_socket.AsyncSelect(FD_CLOSE);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
iRdLen = m_socket.Receive(pReadBf,DATALEN_PERTIME);
if (0 ==iRdLen)
{
//ToDo:<3A>Զ˶Ͽ<CBB6><CFBF><EFBFBD><EFBFBD><EFBFBD>
PostMessage(m_hWnd, WM_NETMESSAGE, NET_DISCONNECT, (LPARAM)m_bDevID);
OutputDebugString(_T("CSerSocketThread:1-<2D><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ϊ0<CEAA><30>TCP<43><50><EFBFBD>ӶϿ<D3B6>......"));
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>Ҫ<EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EBBBBA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
if(m_iWritePos + iRdLen > RECVDATA_BUFLEN)
{
int iTailLen = RECVDATA_BUFLEN - m_iWritePos;
memcpy(m_pRecvDataBuffer +m_iWritePos,pReadBf,iTailLen);
int iHeadLen = iRdLen - iTailLen;
memcpy(m_pRecvDataBuffer,pReadBf + iTailLen,iHeadLen);
m_iWritePos = iHeadLen;
}else{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><E3B9BB><EFBFBD>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(m_pRecvDataBuffer+m_iWritePos,pReadBf,iRdLen);
m_iWritePos += iRdLen;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>
m_llDataTotalLen += iRdLen;
AnalysisRecvData();
//<2F><><EFBFBD>´򿪽<C2B4><F2BFAABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
m_socket.AsyncSelect(FD_READ|FD_CLOSE);
break;
case WP_WPARA_CLOSE:
PostMessage(m_hWnd, WM_NETMESSAGE, NET_DISCONNECT, (LPARAM)m_bDevID);
//m_socket.Close();
OutputDebugString(_T("TCP<EFBFBD><EFBFBD><EFBFBD>ӶϿ<EFBFBD>......"));
break;
case WP_WPARA_THREAD_QUIT:
PostQuitMessage(0);
break;
}
}
void CModbusClient::AnalysisRecvData()
{
if (m_llReadTotal + sizeof(ST_MODBUS_MBAP_HEADER) < m_llDataTotalLen) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȴ<EFBFBD><C8B4><EFBFBD>MBAP<41><50>
{
memset(m_pDealBuf,0,DATADEAL_BUFLEN);
//дָ<D0B4><D6B8><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4B6AF><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ǰλ<C7B0><CEBB>
int iRdCurrPos = m_iReadPos;
int iWrtCurrPos = m_iWritePos;
ST_MODBUS_MBAP_HEADER stMbap;
if(iRdCurrPos < iWrtCurrPos) //дָ<D0B4>볬ǰ<EBB3AC><C7B0>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>֮<EFBFBD><D6AE>
{
memcpy(&stMbap,m_pRecvDataBuffer+iRdCurrPos,sizeof(ST_MODBUS_MBAP_HEADER));
if (m_llReadTotal + sizeof(ST_MODBUS_MBAP_HEADER) +(ntohs(stMbap.wLen) -1) <= m_llDataTotalLen)
{
memcpy(m_pDealBuf,m_pRecvDataBuffer+iRdCurrPos,sizeof(ST_MODBUS_MBAP_HEADER)+ ntohs(stMbap.wLen) -1);
DealFrameData(m_pDealBuf);
m_iReadPos +=(sizeof(ST_MODBUS_MBAP_HEADER) + ntohs(stMbap.wLen) -1);
m_llReadTotal += (sizeof(ST_MODBUS_MBAP_HEADER) + ntohs(stMbap.wLen) -1);
}else{
return; //<2F><><EFBFBD><EFBFBD>һ֡
}
}
else{//дָ<D0B4><D6B8><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>ͷ
if (iRdCurrPos +sizeof(ST_MODBUS_MBAP_HEADER) <= RECVDATA_BUFLEN)
{
memcpy(&stMbap,m_pRecvDataBuffer+iRdCurrPos,sizeof(ST_MODBUS_MBAP_HEADER));
if (m_llReadTotal+sizeof(ST_MODBUS_MBAP_HEADER)+ ntohs(stMbap.wLen) -1 <= m_llDataTotalLen)
{
if (iRdCurrPos + sizeof(ST_MODBUS_MBAP_HEADER) + ntohs(stMbap.wLen) -1 <= RECVDATA_BUFLEN) //дָ<D0B4><D6B8><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC>ָ<EFBFBD><EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD>Թ<EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>
{
memcpy(m_pDealBuf,m_pRecvDataBuffer+iRdCurrPos,sizeof(ST_MODBUS_MBAP_HEADER)+ ntohs(stMbap.wLen) -1);
DealFrameData(m_pDealBuf);
m_iReadPos +=(sizeof(ST_MODBUS_MBAP_HEADER) + ntohs(stMbap.wLen) -1);
m_llReadTotal += (sizeof(ST_MODBUS_MBAP_HEADER) +ntohs(stMbap.wLen) -1);
m_iReadPos =m_iReadPos % RECVDATA_BUFLEN;
}else{
//<2F><>ǰ<EFBFBD><C7B0>ָ<EFBFBD><EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>MBAPͷ<50><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
memcpy(m_pDealBuf,m_pRecvDataBuffer+iRdCurrPos,RECVDATA_BUFLEN - iRdCurrPos);
memcpy(m_pDealBuf+RECVDATA_BUFLEN - iRdCurrPos,m_pRecvDataBuffer,sizeof(ST_MODBUS_MBAP_HEADER) + ntohs(stMbap.wLen) -1 -(RECVDATA_BUFLEN - iRdCurrPos));
DealFrameData(m_pDealBuf);
m_iReadPos = sizeof(ST_MODBUS_MBAP_HEADER) +ntohs(stMbap.wLen) -1 -(RECVDATA_BUFLEN - iRdCurrPos);
m_llReadTotal += (sizeof(ST_MODBUS_MBAP_HEADER) + ntohs(stMbap.wLen) -1);
}
}
else{
return;//<2F><><EFBFBD><EFBFBD>һ֡
}
}else{
//<2F><>ǰ<EFBFBD><C7B0>ָ<EFBFBD><EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>MBAPͷ<50><CDB7><EFBFBD>󲿷<EFBFBD><F3B2BFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD>ͷ
memcpy(m_pDealBuf,m_pRecvDataBuffer+iRdCurrPos,RECVDATA_BUFLEN -iRdCurrPos);
memcpy(m_pDealBuf+RECVDATA_BUFLEN -iRdCurrPos,m_pRecvDataBuffer,sizeof(ST_MODBUS_MBAP_HEADER) -(RECVDATA_BUFLEN - iRdCurrPos));
memcpy(&stMbap,m_pDealBuf,sizeof(ST_MODBUS_MBAP_HEADER));
if (m_llReadTotal+sizeof(ST_MODBUS_MBAP_HEADER)+ ntohs(stMbap.wLen) -1 <= m_llDataTotalLen)
{
memcpy(m_pDealBuf,m_pRecvDataBuffer+iRdCurrPos,RECVDATA_BUFLEN -iRdCurrPos);
memcpy(m_pDealBuf+RECVDATA_BUFLEN -iRdCurrPos,m_pRecvDataBuffer,sizeof(ST_MODBUS_MBAP_HEADER) -(RECVDATA_BUFLEN - iRdCurrPos) + ntohs(stMbap.wLen) -1);
DealFrameData(m_pDealBuf);
m_iReadPos = sizeof(ST_MODBUS_MBAP_HEADER) -(RECVDATA_BUFLEN - iRdCurrPos) + ntohs(stMbap.wLen) -1;
m_llReadTotal += (sizeof(ST_MODBUS_MBAP_HEADER) + ntohs(stMbap.wLen) -1);
}
else{
return;//<2F><><EFBFBD><EFBFBD>һ֡
}
}
}
}
}
void CModbusClient::DealFrameData(BYTE* pData)
{
BYTE bSampleData[512] ={0};
NET_PACKET* pNetPacket = NULL;
int nLen = 0;
ST_MODBUS_MBAP_HEADER stMbap;
BYTE bFuncCode = pData[sizeof(ST_MODBUS_MBAP_HEADER)];
memcpy(&stMbap,pData,sizeof(ST_MODBUS_MBAP_HEADER));
int iFrmLen = ntohs(stMbap.wLen) +6;
memcpy(bSampleData,pData,iFrmLen);
memset(&m_stReadRspFrm, 0, sizeof(ST_MODBUS_SERVER_RSPREAD_FRAME));
memset(&m_stWrtRspFrm, 0, sizeof(ST_MODBUS_SERVER_RSPWRT_FRAME));
memset(&m_stRspErrFrm, 0, sizeof(ST_MODBUS_SERVER_RSPERR_FRAME));
int iDataLen =ntohs(stMbap.wLen) -1;
switch(bFuncCode)
{
case EN_MODBUS_READ_SINGLECOIL:
case EN_MODBUS_READ_PERSISREG:
memcpy(&m_stReadRspFrm,pData,iFrmLen); //ST_MODBUS_SERVER_RSPREAD_FRAME<4D>ij<EFBFBD>ԱbRtnData<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>255<35>ֽڣ<D6BD>ʵ<EFBFBD><CAB5>ռ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>255<35><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sizeof<6F><66>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetEvent(m_ReadEventHandle);
//((CMechanicalArmOptDlg*)m_pMainDlg)->OnDevReadRspDataToBuffer(m_bDevID,stReadRspFrm);
/*pNetPacket = new NET_PACKET;
pNetPacket->enType = NET_RD_MSG_RET;
pNetPacket->nDevId = m_bDevID;
pNetPacket->pData = new char[iFrmLen + 1];
memcpy(pNetPacket->pData, pData, iFrmLen);
pNetPacket->pData[iFrmLen] = '\0';
pNetPacket->lLen = iFrmLen;
PostMessage(m_hWnd, WM_NETMESSAGE, NET_DATA_MSG, (LPARAM)pNetPacket);*/
//delete[] pNetPacket->pData;
//delete pNetPacket;
break;
case EN_MODBUS_WRITE_SINGLECOIL:
case EN_MODBUS_WRITE_MULTIREG:
memcpy(&m_stWrtRspFrm,pData,sizeof(ST_MODBUS_SERVER_RSPWRT_FRAME));
SetEvent(m_WriteEventHandle);
//((CMechanicalArmOptDlg*)m_pMainDlg)->OnDevWrtRspDataToBuffer(m_bDevID,stWrtRspFrm);
/*nLen = sizeof(ST_MODBUS_SERVER_RSPWRT_FRAME);
pNetPacket = new NET_PACKET;
pNetPacket->enType = NET_WR_MSG_RET;
pNetPacket->nDevId = m_bDevID;
pNetPacket->pData = new char[nLen + 1];
memcpy(pNetPacket->pData, pData, nLen);
pNetPacket->pData[nLen] = '\0';
pNetPacket->lLen = nLen;
PostMessage(m_hWnd, WM_NETMESSAGE, NET_DATA_MSG, (LPARAM)pNetPacket);*/
break;
//ToDo:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case EN_MODBUS_READ_SINGLECOIL_RSPERR:
case EN_MODBUS_READ_PERSISREG_RSPERR:
case EN_MODBUS_WRITE_SINGLECOIL_RSPERR:
case EN_MODBUS_WRITE_MULTIREG_RSPERR:
memcpy(&m_stWrtRspFrm,pData,sizeof(ST_MODBUS_SERVER_RSPERR_FRAME));
break;
}
}
int CModbusClient::WriteMultipleRegisters(int nRegAddr, int nRegCnt, short * pWriteData)
{
if (m_bConnected == FALSE)
{
PostMessage(m_hWnd, WM_NETMESSAGE, NET_DISCONNECT, (LPARAM)m_bDevID);
return -1;
}
BYTE bData[512] = { 0 };
if (m_wTcpID + 1 == 0xFFFF)
{
m_wTcpID = 1;
}
else {
m_wTcpID++;
}
//<2F><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ST_MODBUS_CLIENT_RQTWRTMULTIREG_FRAME frame;
ST_MODBUS_MBAP_HEADER stMbapHeader;
stMbapHeader.wTransFlag = htons(m_wTcpID);
stMbapHeader.wProtocolFlag = 0;
stMbapHeader.wLen = htons(7 + nRegCnt*2);
stMbapHeader.bUnitFlag = 0x01;
frame.stMbapHeader = stMbapHeader;
frame.bFuncConde = 0x10; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
frame.wStartAddr = htons(nRegAddr - 40001); //<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
frame.wRegNum = htons(nRegCnt); //<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
frame.bLen = nRegCnt * 2; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>(<28>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*2)
for (int i = 0; i < nRegCnt; i++)
{
UINT16 uintValue = htons(*(pWriteData+i));
char* byteArray = (char*)(&uintValue); // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>4<EFBFBD>ֽڵ<D6BD><DAB5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
for (int j = 0; j < 2; ++j)
{
frame.bRegVal[i*2 + j] = byteArray[j];
}
}
int iRtnsend = m_socket.Send(&frame, sizeof(ST_MODBUS_CLIENT_RQTWRTMULTIREG_FRAME) - (255 - nRegCnt * 2));
if (iRtnsend > 0)
{
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5>ź<EFBFBD><C5BA><EFBFBD>
switch (::WaitForSingleObject(m_WriteEventHandle, SOCKET_TIME_OUT))
{
case WAIT_OBJECT_0:
{
::ResetEvent(m_WriteEventHandle);
break;
}
case WAIT_TIMEOUT:
case WAIT_FAILED:
default:
{
PostMessage(m_hWnd, WM_NETMESSAGE, NET_DISCONNECT, (LPARAM)m_bDevID);
break;
}
}
}
return iRtnsend;
}
int CModbusClient::ReadMultipleRegisters(int nRegAddr, int nRegCnt, short * pReadData)
{
if (m_bConnected == FALSE)
{
PostMessage(m_hWnd, WM_NETMESSAGE, NET_DISCONNECT, (LPARAM)m_bDevID);
return -1;
}
BYTE bData[512] = { 0 };
if (m_wTcpID + 1 == 0xFFFF)
{
m_wTcpID = 1;
}
else {
m_wTcpID++;
}
//<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ST_MODBUS_CLIENT_RQTREAD_FRAME frame;
ST_MODBUS_MBAP_HEADER stMbapHeader;
stMbapHeader.wTransFlag = htons(m_wTcpID);
stMbapHeader.wProtocolFlag = 0;
stMbapHeader.wLen = htons(6);
stMbapHeader.bUnitFlag = 0x01;
frame.stMbapHeader = stMbapHeader;
frame.bFuncConde = 0x03; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
frame.wStartAddr = htons(nRegAddr - 40001); //<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
frame.wRegNum = htons(nRegCnt); //<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
int iRtnsend = m_socket.Send(&frame, sizeof(ST_MODBUS_CLIENT_RQTREAD_FRAME));
if (iRtnsend > 0)
{
//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5>ź<EFBFBD><C5BA><EFBFBD>
switch (::WaitForSingleObject(m_ReadEventHandle, SOCKET_TIME_OUT))
{
case WAIT_OBJECT_0:
{
short *pData = (short *)(m_stReadRspFrm.bRtnData);
for (int i = 0; i < m_stReadRspFrm.bLen / 2; i++)
{
pReadData[i] = htons(*(pData + i));
}
::ResetEvent(m_ReadEventHandle);
break;
}
case WAIT_TIMEOUT:
case WAIT_FAILED:
default:
{
PostMessage(m_hWnd, WM_NETMESSAGE, NET_DISCONNECT, (LPARAM)m_bDevID);
break;
}
}
}
return iRtnsend;
}

51
Plugin/Plc/ModbusClient.h Normal file
View File

@@ -0,0 +1,51 @@
#pragma once
#include "ClientSocket.h"
#include "CommDataDef.h"
// CClientSocketThread
class CModbusClient : public CWinThread
{
DECLARE_DYNCREATE(CModbusClient)
public:
CModbusClient(CString strIp, int nPort, HWND hWnd); // protected constructor used by dynamic creation
CModbusClient(); // protected constructor used by dynamic creation
virtual ~CModbusClient();
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
void AnalysisRecvData(); //<2F><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD>ӿڣ<D3BF><DAA3><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
void DealFrameData(BYTE* pData);
int WriteMultipleRegisters(int nRegAddr, int nRegCnt, short * pWriteData);
int ReadMultipleRegisters(int nRegAddr, int nRegCnt, short * pReadData);
public:
HWND m_hWnd;
CString m_strSerIP;
BYTE m_bDevID;
WORD m_wTcpID;
CClientSocket m_socket;
BOOL m_bConnected;
HANDLE m_ReadEventHandle; //<2F><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ں˶<DABA><CBB6><EFBFBD>
HANDLE m_WriteEventHandle; //д<>Ĵ<EFBFBD><C4B4><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ں˶<DABA><CBB6><EFBFBD>
ST_MODBUS_SERVER_RSPREAD_FRAME m_stReadRspFrm;
ST_MODBUS_SERVER_RSPWRT_FRAME m_stWrtRspFrm;
ST_MODBUS_SERVER_RSPERR_FRAME m_stRspErrFrm;
BYTE* m_pRecvDataBuffer; //<2F><><EFBFBD>ݽ<EFBFBD><DDBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
BYTE* m_pDealBuf; //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
int m_iWritePos;
int m_iReadPos;
__int64 m_llDataTotalLen;
__int64 m_llReadTotal;
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnCustomMsg(WPARAM wParam,LPARAM lParam);
};

BIN
Plugin/Plc/Plc.rc Normal file

Binary file not shown.

250
Plugin/Plc/Plc.vcxproj Normal file
View File

@@ -0,0 +1,250 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{CD291D2B-F677-46FC-BC5F-0C4A18CBBC11}</ProjectGuid>
<RootNamespace>VcsClient</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<Keyword>MFCProj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\Agv</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\Agv</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>E:\work\tank_svn\shiyu\project\fan\warehouse\code\cpp\vcs-client\Inc\json\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)3rdparty\json\inc;$(SolutionDir)CCEXPipe;$(SolutionDir)3rdparty\curl\inc;..\modbus;$(SolutionDir)3rdparty\can\inc;$(SolutionDir)3rdparty\sqlite;$(SolutionDir)3rdparty\whttp-server-core;$(SolutionDir)3rdparty\openssl\inc;$(SolutionDir)3rdparty\pthread\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<AdditionalDependencies>libcurl.lib;ControlCAN.lib;libcrypto.lib;libssl.lib;pthreadVC2.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(SolutionDir)3rdparty\curl\lib\x64;$(SolutionDir)$(Platform)\$(Configuration)\;$(SolutionDir)3rdparty\modbus\lib;$(SolutionDir)3rdparty\can\lib;$(SolutionDir)3rdparty\pthread\lib\x64;$(SolutionDir)3rdparty\openssl\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>Use</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>false</SDLCheck>
<AdditionalIncludeDirectories>$(SolutionDir)3rdparty\json\inc;$(SolutionDir)CCEXPipe;$(SolutionDir)3rdparty\curl\inc;..\modbus;$(SolutionDir)3rdparty\can\inc;$(SolutionDir)3rdparty\sqlite;$(SolutionDir)3rdparty\whttp-server-core;$(SolutionDir)3rdparty\pthread\inc;$(SolutionDir)3rdparty\openssl\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>$(SolutionDir)3rdparty\curl\lib\x64;$(SolutionDir)$(Platform)\$(Configuration)\;$(SolutionDir)3rdparty\modbus\lib;$(SolutionDir)3rdparty\can\lib;$(SolutionDir)3rdparty\pthread\lib\x64;$(SolutionDir)3rdparty\openssl\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>libcurl.lib;ControlCAN.lib;libcrypto.lib;libssl.lib;pthreadVC2.lib</AdditionalDependencies>
<UACExecutionLevel>AsInvoker</UACExecutionLevel>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\3rdparty\whttp-server-core\LockQueue.hpp" />
<ClInclude Include="..\..\3rdparty\whttp-server-core\unistd.h" />
<ClInclude Include="CEXMemFileQueue.h" />
<ClInclude Include="CEXVirtualListCtrl.h" />
<ClInclude Include="ClientSocket.h" />
<ClInclude Include="ColoredListCtrl.h" />
<ClInclude Include="CommDataDef.h" />
<ClInclude Include="ConfigDlg.h" />
<ClInclude Include="Map.h" />
<ClInclude Include="ModbusClient.h" />
<ClInclude Include="PlcMainDlg.h" />
<ClInclude Include="PluginPlc.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\3rdparty\json\src\json_reader.cpp" />
<ClCompile Include="..\..\3rdparty\json\src\json_value.cpp" />
<ClCompile Include="..\..\3rdparty\json\src\json_writer.cpp" />
<ClCompile Include="CEXMemFileQueue.cpp" />
<ClCompile Include="CEXVirtualListCtrl.cpp" />
<ClCompile Include="ClientSocket.cpp" />
<ClCompile Include="ColoredListCtrl.cpp" />
<ClCompile Include="ConifgDlg.cpp" />
<ClCompile Include="ModbusClient.cpp" />
<ClCompile Include="PlcMainDlg.cpp" />
<ClCompile Include="PluginPlc.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Plc.rc" />
</ItemGroup>
<ItemGroup>
<None Include="res\Plc.rc2" />
</ItemGroup>
<ItemGroup>
<Image Include="res\Plc.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties RESOURCE_FILE="" />
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="stdafx.cpp" />
<ClCompile Include="ClientSocket.cpp">
<Filter>modbus</Filter>
</ClCompile>
<ClCompile Include="ColoredListCtrl.cpp" />
<ClCompile Include="CEXMemFileQueue.cpp" />
<ClCompile Include="CEXVirtualListCtrl.cpp" />
<ClCompile Include="ConifgDlg.cpp" />
<ClCompile Include="..\..\3rdparty\json\src\json_reader.cpp">
<Filter>json</Filter>
</ClCompile>
<ClCompile Include="..\..\3rdparty\json\src\json_value.cpp">
<Filter>json</Filter>
</ClCompile>
<ClCompile Include="..\..\3rdparty\json\src\json_writer.cpp">
<Filter>json</Filter>
</ClCompile>
<ClCompile Include="PlcMainDlg.cpp" />
<ClCompile Include="PluginPlc.cpp" />
<ClCompile Include="ModbusClient.cpp">
<Filter>modbus</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Resource.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
<ClInclude Include="ClientSocket.h">
<Filter>modbus</Filter>
</ClInclude>
<ClInclude Include="CommDataDef.h">
<Filter>modbus</Filter>
</ClInclude>
<ClInclude Include="ColoredListCtrl.h" />
<ClInclude Include="CEXMemFileQueue.h" />
<ClInclude Include="CEXVirtualListCtrl.h" />
<ClInclude Include="Map.h" />
<ClInclude Include="ConfigDlg.h" />
<ClInclude Include="..\..\3rdparty\whttp-server-core\LockQueue.hpp" />
<ClInclude Include="..\..\3rdparty\whttp-server-core\unistd.h" />
<ClInclude Include="PlcMainDlg.h" />
<ClInclude Include="PluginPlc.h" />
<ClInclude Include="ModbusClient.h">
<Filter>modbus</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Plc.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="res\Plc.ico" />
</ItemGroup>
<ItemGroup>
<None Include="res\Plc.rc2" />
</ItemGroup>
<ItemGroup>
<Text Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<Filter Include="json">
<UniqueIdentifier>{263f81d2-2eb0-4ed0-aef7-dc7f1cd0dad3}</UniqueIdentifier>
</Filter>
<Filter Include="modbus">
<UniqueIdentifier>{17681699-18ce-4ceb-a88b-62ae75356c4c}</UniqueIdentifier>
</Filter>
</ItemGroup>
</Project>

712
Plugin/Plc/PlcMainDlg.cpp Normal file
View File

@@ -0,0 +1,712 @@
// PlcDeviceDlg.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
//
#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 <20>Ի<EFBFBD><D4BB><EFBFBD>
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 <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CPlcMainDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
ReadConfigFromIni();
//<2F><><EFBFBD><EFBFBD>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
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
}
void CPlcMainDlg::MfcButtonInit()
{
m_btnOpFdColor.m_bTransparent = FALSE; //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ɫ
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] <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
//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";
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
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
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> 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("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѹ<EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>.");
}
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("<22><>ȷ<EFBFBD><C8B7><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD>", "<22><>ʾ", MB_OKCANCEL | MB_ICONQUESTION);
//if (nResult == IDOK)
//{
// OpenFdoor();
//}
//else if (nResult == IDCANCEL)
//{
// // <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><C8A1>"
//}
}
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);
//װж<D7B0><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
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<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ; %d-10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
m_txRemoteControl.SetWindowText(nEdit);
/*
if (m_stPLCTOAGVDATA.RemoteControl_u.bits.RemoteControl || m_pMainWnd->m_nAgvMode == DEBUG_MODE) //<2F><><EFBFBD><EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ģʽ <20><><EFBFBD><EFBFBD> DEBUDģʽ<C4A3><CABD><EFBFBD><EFBFBD>PLC<4C><43><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD>ſ<EFBFBD><C5BF><EFBFBD>
{
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;
//<2F><><EFBFBD><EFBFBD><EFBFBD>豸״̬
switch (nIDEvent)
{
case TIMER_UPDATE_TOPLC:
if (m_stPLCTOAGVDATA.SafeState_u.bits.AGVEstop) //<2F><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
{
m_stAGVTOPLCDATA.AGVControl_u.data = 0; //<2F><><EFBFBD>ع<EFBFBD>Ͳֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD>ر<EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ
}
nRet = m_pModbusClient->WriteMultipleRegisters(40001, 4, (short *)&(m_stAGVTOPLCDATA));
if (nRet > 0)
{
m_stAGVTOPLCDATA.AGVControl_u.bits.OpFdoor = false; //<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
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("<EFBFBD><EFBFBD>Ч\n");
}
CDialogEx::OnTimer(nIDEvent);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ
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;
}
//<2F>Ҳ<EFBFBD><D2B2><EFBFBD>Ͳ
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: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_stAGVTOPLCDATA.PLCControl_u.bits.OpenBarrierGate = true;
m_stAGVTOPLCDATA.PLCControl_u.bits.CloseBarrierGate = false;
}
void CPlcMainDlg::OnBnClickedBtnClosebarriergate()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_stAGVTOPLCDATA.PLCControl_u.bits.OpenBarrierGate = false;
m_stAGVTOPLCDATA.PLCControl_u.bits.CloseBarrierGate = true;
}
void CPlcMainDlg::OnBnClickedBtnShiedradar() //<2F><><EFBFBD><EFBFBD><EFBFBD>״<EFBFBD>
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
void CPlcMainDlg::OnBnClickedBtnShieldsafedside() //<2F><><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
void CPlcMainDlg::OnBnClickedBtnOpenshoprolldoor()
{
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_stAGVTOPLCDATA.PLCControl_u.bits.OpenShopRollerDoor = true;
}

282
Plugin/Plc/PlcMainDlg.h Normal file
View File

@@ -0,0 +1,282 @@
#pragma once
#include "afxcmn.h"
#include "CommDataDef.h"
// CPlcDeviceDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
class CModbusClient;
class CPluginMainDialog;
typedef struct AGV_PLC_data {
union AGVIntWithBools {
short data;
struct {
bool Brake : 1; //ɲ<><C9B2>
bool Charge : 1; //<2F><><EFBFBD><EFBFBD>
bool Reserve1 : 1;
bool Reserve2 : 1;
bool OpFdoor : 1; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool CoFdoor : 1; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool OpBdoor : 1;
bool CoBdoor : 1;
bool LRollerF : 1;
bool LRollerB : 1;
bool RRollerF : 1;
bool RRollerB : 1;
} bits;
}AGVControl_u;
union PLCIntWithBools {
short data;
struct {
bool IndoorLRoller : 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>
bool IndoorRRoller : 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>
bool OutdoorLRoller : 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>
bool OutdoorRRoller : 1; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>
bool Reserve1 : 1;
bool Reserve2 : 1;
bool Reserve3 : 1;
bool Reserve4 : 1;
bool OpenBarrierGate : 1; //<2F><><EFBFBD><EFBFBD>բ
bool CloseBarrierGate : 1; //<2F>ص<EFBFBD>բ
bool OpenShopRollerDoor : 1;//<2F><><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} bits;
}PLCControl_u;
union RunStaIntWithBools {
short data;
struct {
bool Standby_mode : 1;
bool GotoLoading : 1;
bool GotoUnloading : 1;
bool S_stop : 1;
bool Reqloading : 1;
bool ReqUnloading : 1;
bool AUTOHandSwitch : 1; //<2F><><EFBFBD>Զ<EFBFBD><D4B6>л<EFBFBD> 1<>ֶ<EFBFBD> 0<>Զ<EFBFBD>
bool AGVpipelineReset : 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߸<EFBFBD>λ
bool Force_Import : 1;
bool Reserve2 : 1;
bool Reserve3 : 1;
bool Reserve4 : 1;
bool Reserve5 : 1;
bool Reserve6 : 1;
bool Reserve7 : 1;
bool Reserve8 : 1;
} bits;
}RunStaControl_u;
int HeartBeat;
AGV_PLC_data()
{
AGVControl_u.data = 0;
PLCControl_u.data = 0;
RunStaControl_u.data = 0;
HeartBeat = 1;
}
}ST_AGVTOPLCDATA;
typedef struct PLC_AGV_data {
union AGVIntWithBools {
short data;
struct {
bool Reserve1 : 1;
bool Reserve2 : 1;
bool Reserve3 : 1;
bool Reserve4 : 1;
bool FdoorOpen_ste : 1;
bool FdoorClose_ste : 1;
bool BdoorOpen_ste : 1;
bool BdoorClose_ste : 1;
bool LFsensor_ste : 1;
bool LMsensor_ste : 1;
bool LBsensor_ste : 1;
bool Fdoorsenor_ste : 1;
bool RFsensor_ste : 1;
bool RMsensor_ste : 1;
bool RBsensor_ste : 1;
bool Bdoorsenor_ste : 1;
} bits;
}AGVstate_u;
union RollerIntWithBools {
short data;
struct {
bool IndoorLRoller_ste : 1;
bool IndoorRRoller_ste : 1;
bool OutdoorLRoller_ste : 1;
bool OutdoorRRoller_ste : 1;
bool OutdoorAGV_Estop : 1;
bool IndoorAGV_Estop : 1;
bool Reserve1 : 1;
bool Reserve2 : 1;
bool BarrierGateIsOpen : 1; //<2F><>բ<EFBFBD><D5A2><EFBFBD><EFBFBD>λ
bool BarrierGateIsClose : 1; //<2F><>բ<EFBFBD>ص<EFBFBD>λ
bool ShopRollerdoorIsOpen : 1;//<2F>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ſ<EFBFBD><C5BF><EFBFBD>λ
} bits;
}RollerState_u;
union StateIntWithBools {
short data;
struct {
bool Fsafeside : 1;
bool Bsafeside : 1;
bool Lsafeside : 1;
bool Rsafeside : 1;
bool Fradarslow : 1;
bool Fradarstop : 1;
bool Bradarslow : 1;
bool Bradarstop : 1;
bool AGVEstop : 1;
bool RadarShield : 1; //<2F>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD>
bool SafeSideShield : 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool Soaking : 1; //<2F><>ˮ<EFBFBD><CBAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} bits;
}SafeState_u;
union RemoteCIntWithBools {
short data;
struct {
bool RemoteControl : 1;
bool Forward : 1;
bool Backward : 1;
bool LeftRotation : 1;
bool RightRotation : 1;
bool ZeroHold : 1;
bool Reserve : 1;
} bits;
}RemoteControl_u;
union LoadStaIntWithBools {
short data;
struct {
bool Loading : 1;
bool LoadFinish : 1;
bool Unloading : 1;
bool UnloadFinish : 1;
bool LoadingErr : 1;
bool UnloadingErr : 1;
} bits;
}LoadState_u;
PLC_AGV_data()
{
AGVstate_u.data = 0;
RollerState_u.data = 0;
SafeState_u.data = 0;
RemoteControl_u.data = 0;
LoadState_u.data = 0;
}
}ST_PLCTOAGVDATA;
class CPlcMainDlg : public CDialogEx
{
DECLARE_DYNAMIC(CPlcMainDlg)
public:
CPlcMainDlg(CWnd* pParent = NULL); // <20><>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><ECBAAF>
virtual ~CPlcMainDlg();
// <20>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DEV_PLC_DLG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
void ReadConfigFromIni();
BOOL ConnectPlcController();
void MfcButtonInit();
void OpenFdoor();
void OpenBdoor();
void CloseFdoor();
void CloseBdoor();
void DisplayDLG();
CIPAddressCtrl m_ipAddrCtrl;
CMFCButton m_btnOpFdColor;
CMFCButton m_btnCoFdColor;
CMFCButton m_btnOpBdColor;
CMFCButton m_btnCoBdColor;
CMFCButton m_btnInDLRColor;
CMFCButton m_btnInDRRColor;
CMFCButton m_btnOutDLRColor;
CMFCButton m_btnOutDRRColor;
CMFCButton m_btnFsafeSColor;
CMFCButton m_btnBsafeSColor;
CMFCButton m_btnLsafeSColor;
CMFCButton m_btnRsafeSColor;
CMFCButton m_btnFradarSColor;
CMFCButton m_btnFradarTColor;
CMFCButton m_btnBradarSColor;
CMFCButton m_btnBradarTColor;
CMFCButton m_btnAGVEstopColor;
CMFCButton m_btnShieldRColor;
CMFCButton m_btnShieldSSColor;
CMFCButton m_btnLrollerFsenColor;
CMFCButton m_btnLrollerMsenColor;
CMFCButton m_btnLrollerBsenColor;
CMFCButton m_btnRrollerFsenColor;
CMFCButton m_btnRrollerMsenColor;
CMFCButton m_btnRrollerBsenColor;
CMFCButton m_btnFDloadSteColor;
CMFCButton m_btnBDloadSteColor;
CMFCButton m_btnOpenBarrierGate;
CMFCButton m_btnCloseBarrierGate;
CMFCButton m_btnOpenShopRollDoor;
CStatic m_txRemoteControl;
CString m_strIpAddr;
int m_nPort;
BOOL m_bConnectServer;
afx_msg void OnBnClickedBtnSet();
afx_msg void OnBnClickedBtnOpenFdoor();
afx_msg void OnBnClickedBtnCloseFdoor();
afx_msg void OnBnClickedBtnOpenBdoor();
afx_msg void OnBnClickedBtnCloseBdoor();
afx_msg void OnTimer(UINT_PTR nIDEvent);
LRESULT OnNetMsg(WPARAM wparam, LPARAM lparam);
public:
CModbusClient *m_pModbusClient;
//CPluginMainDialog *m_pMainWnd;
void OnDevReadRspDataFromPlc(BYTE nDevId, ST_MODBUS_SERVER_RSPREAD_FRAME stReadFrame);
void OnDevWrtRspDataFromPlc(BYTE nDevId, ST_MODBUS_SERVER_RSPWRT_FRAME stWriteFrame);
afx_msg void OnBnClickedBtnRdReg();
afx_msg void OnBnClickedBtnWrReg();
afx_msg void OnBnClickedMfcbutton1();
afx_msg void OnBnClickedBtnLrollerF();
afx_msg void OnBnClickedBtnLrollerB();
afx_msg void OnBnClickedBtnLrollerStop();
afx_msg void OnBnClickedBtnRrollerF();
afx_msg void OnBnClickedBtnRrollerB();
afx_msg void OnBnClickedBtnRrollerStop();
afx_msg void OnBnClickedBtnIndoorlsta();
afx_msg void OnBnClickedBtnIndoorrsta();
afx_msg void OnBnClickedBtnOutdoorlsta();
afx_msg void OnBnClickedBtnOutdoorrsta();
afx_msg void OnBnClickedBtnIndoorstop();
afx_msg void OnBnClickedBtnOutdoorstop();
afx_msg void OnBnClickedBtnShiedradar();
afx_msg void OnBnClickedBtnShieldsafedside();
ST_AGVTOPLCDATA m_stAGVTOPLCDATA;
ST_PLCTOAGVDATA m_stPLCTOAGVDATA;
afx_msg void OnBnClickedBtnOpenbarriergate();
afx_msg void OnBnClickedBtnClosebarriergate();
afx_msg void OnBnClickedBtnOpenshoprolldoor();
};

164
Plugin/Plc/PluginPlc.cpp Normal file
View File

@@ -0,0 +1,164 @@
// Vcs-Client.cpp : <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
//
#include "stdafx.h"
#include "PluginPlc.h"
#include "PlcMainDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CCEXPipeClientBase* g_pstPipeClient = CCEXPipeClientBase::CreateObj();
// CVcsClientApp
BEGIN_MESSAGE_MAP(CPluginPlc, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// CVcsClientApp <20><><EFBFBD><EFBFBD>
CPluginPlc::CPluginPlc()
{
// ֧<><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: <20>ڴ˴<DAB4><CBB4><EFBFBD><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> InitInstance <20><>
}
// Ψһ<CEA8><D2BB>һ<EFBFBD><D2BB> CVcsClientApp <20><><EFBFBD><EFBFBD>
CPluginPlc theApp;
HANDLE hmutex;
// CVcsClientApp <20><>ʼ<EFBFBD><CABC>
BOOL CPluginPlc::InitInstance()
{
hmutex = CreateMutexA(nullptr, FALSE, "agv-plugin-plc");
int err = GetLastError();
if (err == ERROR_ALREADY_EXISTS) {
CloseHandle(hmutex);
hmutex = nullptr;
//AfxMessageBox("<22><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.");
return FALSE;
}
CHAR dir[1000] = { 0 };
int filelen = GetModuleFileName(NULL, dir, 1000);
//WriteLog(dir);
int i = filelen;
while (dir[i] != '\\')i--;
dir[i] = '\0';
m_strModulePath = dir;
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Windows XP <20>ϵ<EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>嵥ָ<E5B5A5><D6B8>Ҫ
// ʹ<><CAB9> ComCtl32.dll <20>汾 6 <20><><EFBFBD><EFBFBD><EFBFBD>߰汾<DFB0><E6B1BE><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ӻ<EFBFBD><D3BB><EFBFBD>ʽ<EFBFBD><CABD>
//<2F><><EFBFBD><EFBFBD>Ҫ InitCommonControlsEx()<29><> <20><><EFBFBD>򣬽<EFBFBD><F2A3ACBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD>
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC>
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
// <20><><EFBFBD><EFBFBD> shell <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>κ<EFBFBD> shell <20><><EFBFBD><EFBFBD>ͼ<EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD> shell <20>б<EFBFBD><D0B1><EFBFBD>ͼ<EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>
CShellManager *pShellManager = new CShellManager;
// <20><><EFBFBD>Windows Native<76><65><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD> MFC <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
// <20><>׼<EFBFBD><D7BC>ʼ<EFBFBD><CABC>
// <20><><EFBFBD><EFBFBD>δʹ<CEB4><CAB9><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD>ܲ<EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>С
// <20><><EFBFBD>տ<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD>ļ<EFBFBD><C4BC>Ĵ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>õ<EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// TODO: Ӧ<>ʵ<EFBFBD><CAB5>޸ĸ<DEB8><C4B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>Ϊ<EFBFBD><CEAA>˾<EFBFBD><CBBE><EFBFBD><EFBFBD>֯<EFBFBD><D6AF>
SetRegistryKey(_T("Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵı<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD>"));
CPlcMainDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: <20>ڴ˷<DAB4><CBB7>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رնԻ<D5B6><D4BB><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
}
else if (nResponse == IDCANCEL)
{
// TODO: <20>ڴ˷<DAB4><CBB7>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>رնԻ<D5B6><D4BB><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
}
else if (nResponse == -1)
{
TRACE(traceAppMsg, 0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20>Ի<EFBFBD><D4BB>򴴽<EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>\n");
TRACE(traceAppMsg, 0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶԻ<DAB6><D4BB><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> MFC <20>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD> #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS<47><53>\n");
}
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4B4><EFBFBD><EFBFBD> shell <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (pShellManager != NULL)
{
delete pShellManager;
}
#ifndef _AFXDLL
ControlBarCleanUp();
#endif
// <20><><EFBFBD>ڶԻ<DAB6><D4BB><EFBFBD><EFBFBD>ѹرգ<D8B1><D5A3><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD> FALSE <20>Ա<EFBFBD><D4B1>˳<EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>á<EFBFBD>
return FALSE;
}
CString CPluginPlc::SendMsg2Platform(CString strReceiver, int nMsgType, Json::Value param)
{
LogOutToFile("PLC::SendMsg2Platform Begin");
Json::Value root;
root["sender"] = "PLC"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,SwingArm
root["receiver"] = strReceiver.GetBuffer();
/******************************************************
nMsgTypeʹ<65><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CREATE_TASK_RET = 2, //WCS->WMS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񷵻<EFBFBD>
EXECUTE_TASK_RET = 4, //WCS->WMS ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>񷵻<EFBFBD>
DEVICE_STATE_REPORT = 5, //WCS->WMS <20>豸״̬<D7B4>ϱ<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
DEVICE_CONFIG_REQ = 6, //WCS->WMS <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
*******************************************************/
root["type"] = nMsgType;
root["params"] = param;
Json::FastWriter writer;
string strJson = writer.write(root);
g_pstPipeClient->SendeMsg(WCS_2_WMS_DATA, (char*)strJson.c_str(), strJson.length());
LogOutToFile("PLC::SendMsg2Platform End");
return "";
}

45
Plugin/Plc/PluginPlc.h Normal file
View File

@@ -0,0 +1,45 @@
// Vcs-Client.h : PROJECT_NAME Ӧ<>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
//
#pragma once
#ifndef __AFXWIN_H__
#error "<22>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>stdafx.h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PCH <20>ļ<EFBFBD>"
#endif
#include "resource.h" // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include "CCEXPipeLib.h"
#define WM_MSG_ROBOT_TO_MAIN WM_USER+2000
// CVcsClientApp:
// <20>йش<D0B9><D8B4><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Vcs-Client.cpp
//
class CPluginPlc : public CWinApp
{
public:
CPluginPlc();
// <20><>д
public:
virtual BOOL InitInstance();
public:
void ReadConfigFromIni();
public:
CString m_strModulePath;
ST_CAN_DEVICE m_stCanDevice;
// ʵ<><CAB5>
CString SendMsg2Platform(CString strReceiver, int nMsgType, Json::Value param = NULL);
DECLARE_MESSAGE_MAP()
};
extern CPluginPlc theApp;
extern CCEXPipeClientBase* g_pstPipeClient;

67
Plugin/Plc/ReadMe.txt Normal file
View File

@@ -0,0 +1,67 @@
================================================================================
MICROSOFT 基础类库 : Vcs-Client 项目概述
===============================================================================
应用程序向导已为您创建了此 Vcs-Client 应用程序。此应用程序不仅演示 Microsoft 基础类的基本使用方法,还可作为您编写应用程序的起点。
本文件概要介绍组成 Vcs-Client 应用程序的每个文件的内容。
Vcs-Client.vcxproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件,其中包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
Vcs-Client.vcxproj.filters
这是使用“应用程序向导”生成的 VC++ 项目筛选器文件。它包含有关项目文件与筛选器之间的关联信息。在 IDE 中,通过这种关联,在特定节点下以分组形式显示具有相似扩展名的文件。例如,“.cpp”文件与“源文件”筛选器关联。
Vcs-Client.h
这是应用程序的主头文件。
其中包括其他项目特定的标头(包括 Resource.h并声明 CVcsClientApp 应用程序类。
Vcs-Client.cpp
这是包含应用程序类 CVcsClientApp 的主应用程序源文件。
Vcs-Client.rc
这是程序使用的所有 Microsoft Windows 资源的列表。它包括 RES 子目录中存储的图标、位图和光标。此文件可以直接在 Microsoft Visual C++ 中进行编辑。项目资源包含在 2052 中。
res\Vcs-Client.ico
这是用作应用程序图标的图标文件。此图标包括在主资源文件 Vcs-Client.rc 中。
res\VcsClient.rc2
此文件包含不在 Microsoft Visual C++ 中进行编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。
/////////////////////////////////////////////////////////////////////////////
应用程序向导创建一个对话框类:
Vcs-ClientDlg.h、Vcs-ClientDlg.cpp - 对话框
这些文件包含 CVcsClientDlg 类。此类定义应用程序的主对话框的行为。对话框模板包含在 Vcs-Client.rc 中,该文件可以在 Microsoft Visual C++ 中编辑。
/////////////////////////////////////////////////////////////////////////////
其他功能:
ActiveX 控件
该应用程序包含对使用 ActiveX 控件的支持。
/////////////////////////////////////////////////////////////////////////////
其他标准文件:
StdAfx.h, StdAfx.cpp
这些文件用于生成名为 Vcs-Client.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
Resource.h
这是标准头文件,可用于定义新的资源 ID。Microsoft Visual C++ 将读取并更新此文件。
Vcs-Client.manifest
Windows XP 使用应用程序清单文件来描述特定版本的并行程序集的应用程序依赖项。加载程序使用这些信息来从程序集缓存中加载相应的程序集,并保护其不被应用程序访问。应用程序清单可能会包含在内,以作为与应用程序可执行文件安装在同一文件夹中的外部 .manifest 文件进行重新分发,它还可能以资源的形式包含在可执行文件中。
/////////////////////////////////////////////////////////////////////////////
其他注释:
应用程序向导使用“TODO:”来指示应添加或自定义的源代码部分。
如果应用程序使用共享 DLL 中的 MFC您将需要重新分发 MFC DLL。如果应用程序所使用的语言与操作系统的区域设置不同则还需要重新分发相应的本地化资源 mfc110XXX.DLL。
有关上述话题的更多信息,请参见 MSDN 文档中有关重新分发 Visual C++ 应用程序的部分。
/////////////////////////////////////////////////////////////////////////////

BIN
Plugin/Plc/res/Plc.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
Plugin/Plc/res/Plc.rc2 Normal file

Binary file not shown.

BIN
Plugin/Plc/resource.h Normal file

Binary file not shown.

188
Plugin/Plc/stdafx.cpp Normal file
View File

@@ -0,0 +1,188 @@
// stdafx.cpp : ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Դ<EFBFBD>ļ<EFBFBD>
// Vcs-Client.pch <20><><EFBFBD><EFBFBD>ΪԤ<CEAA><D4A4><EFBFBD><EFBFBD>ͷ
// stdafx.obj <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
#include "stdafx.h"
#define MIN_XYZ_VALUE (-999999)
float* g_xys = new float[3000 * 3000 * 2];
int g_xyz_flag = 0;
#define Q_R 1500
#define X0 1500
#define Y0 1500
inline float abs_m(float lf)
{
if (lf < 0) lf *= -1;
return lf;
}
CString g_strSavePath = "";
CString g_strCurTime = "";
void LogOutToFile(const char* fmt, ...)
{
static CRITICAL_SECTION stCritical;
static BOOL bInit = FALSE;
static CString strLogPath;
if (FALSE == bInit)
{
bInit = TRUE;
GetModuleFileName(NULL, strLogPath.GetBuffer(2048), 2047);
strLogPath.ReleaseBuffer();
strLogPath = strLogPath.Left(strLogPath.ReverseFind('\\'));
strLogPath += "\\log\\runtime.log";
InitializeCriticalSection(&stCritical);
}
EnterCriticalSection(&stCritical);
va_list ap;
va_start(ap, fmt);
char pBuffer[800] = "";
if (vsnprintf_s(pBuffer, 796, _TRUNCATE, fmt, ap) > 0)
{
if (strlen(pBuffer) == 0 || pBuffer[strlen(pBuffer) - 1] != '\n')
{
pBuffer[strlen(pBuffer) + 1] = '\0';//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׷<EFBFBD><D7B7>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊԭ<CEAA><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>޸<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>з<EFBFBD>
pBuffer[strlen(pBuffer)] = '\n';
}
}
va_end(ap);
TRACE("%s\n", pBuffer);
FILE* pFile = NULL;
fopen_s(&pFile, strLogPath.GetBuffer(), "ab+");
if (NULL != pFile)
{
char acTime[32] = { 0 };
SYSTEMTIME stTime;
GetLocalTime(&stTime);
sprintf_s(acTime, 32, "[%02d-%02d %02d:%02d:%02d.%03d] ", stTime.wMonth, stTime.wDay, stTime.wHour, stTime.wMinute, stTime.wSecond, stTime.wMilliseconds);
fwrite(acTime, 1, strlen(acTime), pFile);
fwrite(pBuffer, 1, strlen(pBuffer), pFile);
fwrite("\r\n", 1, strlen("\r\n"), pFile);
fclose(pFile);
}
LeaveCriticalSection(&stCritical);
}
int g_nMsgIdx = 998;
string _UnicodeToUtf8(CString Unicodestr)
{
wchar_t* unicode = Unicodestr.AllocSysString();
int len;
len = WideCharToMultiByte(CP_UTF8, 0, unicode, -1, NULL, 0, NULL, NULL);
char *szUtf8 = (char*)malloc(len + 1);
memset(szUtf8, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, unicode, -1, szUtf8, len, NULL, NULL);
string result = szUtf8;
free(szUtf8);
return result;
}
// UTF8<46><38><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>(MultiByte)<29><>ת
CString UTF8AndMB_Convert(const CString &strSource, UINT nSourceCodePage, UINT nTargetCodePage)
{
int nSourceLen = strSource.GetLength();
int nWideBufLen = MultiByteToWideChar(nSourceCodePage, 0, strSource, -1, NULL, 0);
wchar_t* pWideBuf = new wchar_t[nWideBufLen + 1];
memset(pWideBuf, 0, (nWideBufLen + 1) * sizeof(wchar_t));
MultiByteToWideChar(nSourceCodePage, 0, strSource, -1, (LPWSTR)pWideBuf, nWideBufLen);
char* pMultiBuf = NULL;
int nMiltiBufLen = WideCharToMultiByte(nTargetCodePage, 0, (LPWSTR)pWideBuf, -1, (char *)pMultiBuf, 0, NULL, NULL);
pMultiBuf = new char[nMiltiBufLen + 1];
memset(pMultiBuf, 0, nMiltiBufLen + 1);
WideCharToMultiByte(nTargetCodePage, 0, (LPWSTR)pWideBuf, -1, (char *)pMultiBuf, nMiltiBufLen, NULL, NULL);
CStringA strTarget(pMultiBuf);
delete[] pWideBuf;
delete[] pMultiBuf;
return strTarget;
}
CStringA UTF8ToMB(const CStringA& utf8Str)
{
if (IsTextUTF8(utf8Str, utf8Str.GetLength()))
{
return UTF8AndMB_Convert(utf8Str, CP_UTF8, CP_ACP);
}
return utf8Str;
}
bool IsTextUTF8(const char* str, ULONGLONG length)
{
DWORD nBytes = 0;//UFT8<54><38><EFBFBD><EFBFBD>1-6<><36><EFBFBD>ֽڱ<D6BD><DAB1><EFBFBD>,ASCII<49><49>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
UCHAR chr;
bool bAllAscii = true; //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ASCII, ˵<><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UTF-8
for (int i = 0; i < length; i++)
{
chr = *(str + i);
if ((chr & 0x80) != 0) // <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ASCII<49><49><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CBB5><EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD>UTF-8,ASCII<49><49><37><CEBB><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽڴ<D6BD>,<2C><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϊ0,o0xxxxxxx
bAllAscii = false;
if (nBytes == 0) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ASCII<49><49><><D3A6><EFBFBD>Ƕ<EFBFBD><C7B6>ֽڷ<D6BD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
{
if (chr >= 0x80)
{
if (chr >= 0xFC && chr <= 0xFD)
nBytes = 6;
else if (chr >= 0xF8)
nBytes = 5;
else if (chr >= 0xF0)
nBytes = 4;
else if (chr >= 0xE0)
nBytes = 3;
else if (chr >= 0xC0)
nBytes = 2;
else
{
return false;
}
nBytes--;
}
}
else //<2F><><EFBFBD>ֽڷ<D6BD><DAB7>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD>ֽ<EFBFBD>,ӦΪ 10xxxxxx
{
if ((chr & 0xC0) != 0x80)
{
return false;
}
nBytes--;
}
}
if (nBytes > 0) //Υ<><CEA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
return false;
}
if (bAllAscii) //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ASCII, ˵<><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UTF-8
{
return false;
}
return true;
}

169
Plugin/Plc/stdafx.h Normal file
View File

@@ -0,0 +1,169 @@
// stdafx.h : <20><>׼ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
// <20><><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
// <20>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>ļ<EFBFBD>
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // <20><> Windows ͷ<><CDB7><EFBFBD>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // ijЩ CString <20><><EFBFBD><EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>
// <20>ر<EFBFBD> MFC <20><>ijЩ<C4B3><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɷ<EFBFBD><C9B7>ĺ<EFBFBD><C4BA>Եľ<D4B5><C4BE><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>
#include <afxext.h> // MFC <20><>չ
#include <afxdisp.h> // MFC <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC <20><> Internet Explorer 4 <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>֧<EFBFBD><D6A7>
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC <20><> Windows <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD>֧<EFBFBD><D6A7>
#endif // _AFX_NO_AFXCMN_SUPPORT
#include<afxsock.h>
#include "json.h"
#include <queue>
using namespace std;
#define WM_NETMESSAGE (WM_USER+9981)
#define NET_CONNECT_OK 0
#define NET_DISCONNECT 1
#define NET_DATA_MSG 2
#define CAN_DISCONNECT 3
#define PLC_DISCONNECT 4
#define APP_DATA_MSG 5
#include <afxcontrolbars.h> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳؼ<CDBF><D8BC><EFBFBD><EFBFBD><EFBFBD> MFC ֧<><D6A7>
#include "../Protocol.h"
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
extern CString g_strSavePath;
extern CString g_strCurTime;
extern int g_nMsgIdx;
void LogOutToFile(const char* fmt, ...);
string _UnicodeToUtf8(CString Unicodestr);
CString UTF8AndMB_Convert(const CString &strSource, UINT nSourceCodePage, UINT nTargetCodePage); // UTF8<46><38><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>(MultiByte)<29><>ת
CString UTF8ToMB(const CString& utf8Str);
bool IsTextUTF8(const char* str, ULONGLONG length);
typedef struct ST_THREAD_PARAM
{
void * pParent;
//int nIdx;
}
ST_THREAD_PARAM;
typedef struct ST_CAN_DEVICE
{
int nSendFrameFormat;
int nSendFrameType;
int nCanIndex;
int nDevType;
}
ST_CAN_DEVICE;
typedef enum
{
NET_WR_MSG_RET = 0,
NET_RD_MSG_RET = 1
}NET_MSG_TYPE_ENUM;
typedef enum
{
MANUAL_MODE = 0, //<2F>ֶ<EFBFBD>ģʽ<C4A3><CABD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
AUTO_MODE = 1, //<2F>Զ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD> PDA<44><41><EFBFBD>ƣ<EFBFBD>PAD<41><44><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>Ƶ<EFBFBD>բ <20><><EFBFBD><EFBFBD> β<><CEB2>װ<EFBFBD><D7B0>
DEBUG_MODE = 2, //PDA<44><41><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD>е<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>
}AGV_RUN_MODE_ENUM;
typedef enum
{
RE_NORMAL_RUN = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RE_UNUSUAL_STOP = 1, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>쳣ͣ<ECB3A3><CDA3>
RE_POINT_STOP = 2, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>(<28>յ<EFBFBD>)
RE_A_STOP = 3, //<2F>Զ<EFBFBD>ͣ<EFBFBD><CDA3>
RE_E_STOP = 4, //<2F><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>
}AGV_RUN_RESTATE_ENUM; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
typedef enum
{
A_STOP = 0, //<2F>Զ<EFBFBD>ͣ<EFBFBD><CDA3>
FORWARD = 1, //<2F><>ǰ<EFBFBD><C7B0>ʻ
BACKWARD = 2, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʻ
E_STOP = 3, //<2F><><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>
INVALID_ACTION = 4, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чָ<D0A7>ά<EEA3AC>ֵ<EFBFBD>ǰͣ<C7B0><CDA3><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>״̬
}AGV_ACTION_ENUM;
typedef enum
{
LOG_ERROR = 0,
LOG_INFO = 1
}LOG_TYPE_ENUM;
typedef enum
{
SEND_MSG = 0,
RECV_MSG = 1
}CAN_MSG_ENUM;
typedef struct NET_PACKET
{
char* pData;
int lLen;
int nDevId;
NET_MSG_TYPE_ENUM enType;
}*pNET_PACKET;
#define DATA_LINE_SIZE (11+13+4+4+11+4+4+4+33) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ֽ<EFBFBD><D6BD><EFBFBD>89
typedef struct ST_CAN_MESSAGE
{
char acSeq[10];
char acTime[12];
unsigned char cIndex; // 0<><30>1
unsigned char acTxRx; // 0:send, 1:recv
char acID[10];
unsigned char acFrame;//0:data, 1:remote
unsigned char acType; //0:standard, 1:extend
unsigned char cDlc;
char acData[32];
}ST_CAN_MESSAGE;
typedef struct APP_NET_PACKET
{
int lFuncLen;
int lParamLen;
char *pFuncData;
char *pParamData;
}*pNET_APP_PACKET;

8
Plugin/Plc/targetver.h Normal file
View File

@@ -0,0 +1,8 @@
#pragma once
// <20><><EFBFBD><EFBFBD> SDKDDKVer.h <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>߰汾<DFB0><E6B1BE> Windows ƽ̨<C6BD><CCA8>
// <20><><EFBFBD><EFBFBD>ҪΪ<D2AA><CEAA>ǰ<EFBFBD><C7B0> Windows ƽ̨<C6BD><CCA8><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WinSDKVer.h<><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><> _WIN32_WINNT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪҪ֧<D2AA>ֵ<EFBFBD>ƽ̨<C6BD><CCA8>Ȼ<EFBFBD><C8BB><EFBFBD>ٰ<EFBFBD><D9B0><EFBFBD> SDKDDKVer.h<><68>
#include <SDKDDKVer.h>