📄 dlge1mod.cpp
字号:
// DlgE1Mod.cpp : implementation file
//
#include "stdafx.h"
#include "PCM120.h"
#include "DlgE1Mod.h"
#include "DlgConfig.h"
#include "DlgStateDisplay.h"
#include "CheckState.h"
#include "DlgAllStaSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgE1Mod dialog
CDlgE1Mod::CDlgE1Mod(CWnd* pParent /*=NULL*/)
: CDialog(CDlgE1Mod::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgE1Mod)
m_iMod1 = -1;
m_iProtect1 = -1;
m_iMod2 = -1;
m_iProtect2 = -1;
m_iMod3 = -1;
m_iProtect3 = -1;
m_iMod4 = -1;
m_iProtect4 = -1;
m_strCRC1 = _T("CRC校验");
m_strCRC2 = _T("CRC校验");
m_strCRC3 = _T("CRC校验");
m_strCRC4 = _T("CRC校验");
//}}AFX_DATA_INIT
}
void CDlgE1Mod::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgE1Mod)
DDX_Radio(pDX, IDC_RADIO1_MOD, m_iMod1);
DDX_Radio(pDX, IDC_RADIO1_PROTECT, m_iProtect1);
DDX_Radio(pDX, IDC_RADIO2_MOD, m_iMod2);
DDX_Radio(pDX, IDC_RADIO2_PROTECT, m_iProtect2);
DDX_Radio(pDX, IDC_RADIO3_MOD, m_iMod3);
DDX_Radio(pDX, IDC_RADIO3_PROTECT, m_iProtect3);
DDX_Radio(pDX, IDC_RADIO4_MOD, m_iMod4);
DDX_Radio(pDX, IDC_RADIO4_PROTECT, m_iProtect4);
DDX_Text(pDX, IDC_EDIT_CRC1, m_strCRC1);
DDX_Text(pDX, IDC_EDIT_CRC2, m_strCRC2);
DDX_Text(pDX, IDC_EDIT_CRC3, m_strCRC3);
DDX_Text(pDX, IDC_EDIT_CRC4, m_strCRC4);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgE1Mod, CDialog)
//{{AFX_MSG_MAP(CDlgE1Mod)
ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)
ON_BN_CLICKED(IDC_BTN_SENT, OnBtnSent)
ON_BN_CLICKED(IDC_BTN_SEARCH, OnBtnSearch)
ON_WM_CLOSE()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgE1Mod message handlers
CString m_strRXData;
int iE1ComIndex=-1;//选择的com口的序号;
/*int i1E1ModIndex=-1;
int i2E1ModIndex=-1;
int i3E1ModIndex=-1;
int i4E1ModIndex=-1;
int i1E1FStatIndex =-1;
int i2E1FStatIndex =-1;
int i3E1FStatIndex =-1;
int i4E1FStatIndex =-1;
*/
//CStringArray straE1Source;
//CStringArray straE1Aim;
CString CDlgE1Mod::strSent="";
int CDlgE1Mod::iState=0;
CString strSearch;
char btahexdata[512];//最终要发送的内容的十六进制串
CDlgConfig config;
void CDlgE1Mod::OnBtnSent()
{
// TODO: Add your control notification handler code here
CCheckState::bAuto=false;
CDlgE1Mod::iState=2;
OrPage();
////////////////////////读串口信息//////////////////////////////////////////////////
CDlgAllStaSet dlgalstaset;
CString strPath;
char Get[255];
dlgalstaset.GetModulePath(strPath,NULL);
strPath+="config.ini";
GetPrivateProfileString("Com",CDlgStateDisplay::strAddress,"1",Get,255,strPath);
UINT uiCom=(UINT)atoi(Get);
//////////////////////////////////////////////////////////////////////////
OnButtonOpenport(uiCom);
if(m_Port.m_hComm==NULL)
{
AfxMessageBox("串口在占用,请稍后重试");
return;
}
else
{
char data[512];
int len=Str2Hex(strSent,data);
m_Port.WriteToPort(data,len);
CDlgConfig dlgconfig;
dlgconfig.WriteConfig(strSent);//把配置内容记入日志;
}
m_iMod1 = -1;
m_iProtect1 = -1;
m_iMod2 = -1;
m_iProtect2 = -1;
m_iMod3 = -1;
m_iProtect3 = -1;
m_iMod4 = -1;
m_iProtect4 = -1;
UpdateData(false);
}
BOOL CDlgE1Mod::OnInitDialog()
{
CDialog::OnInitDialog();
//////////////////////////////////////////////////////////////////////////
CString strPath;
CDlgAllStaSet dlgalstaset;
dlgalstaset.GetModulePath(strPath,NULL);
CString strConfigaPath;
strConfigaPath=strPath+"config.ini";
char charGedelay[255];
GetPrivateProfileString("General","延时(毫秒)","1000",charGedelay,255,strConfigaPath);
idelay=atoi((LPTSTR)charGedelay);
////////////////////////////////////////////////// ////////////////////////
CDlgE1Mod::iState=1;
// TODO: Add extra initialization here
//////////////////////////////////////////////////////////////////////////
GetLogPath();
char charGetAlert[128];
GetPrivateProfileString("default",CDlgStateDisplay::strAddress,"FF FF FF FF",charGetAlert,255,strLogPath);
CString strTempBin;
CString strGetWarn;
strGetWarn=charGetAlert;
CString strWarn1,strWarn2,strWarn3,strWarn4;
strWarn1=strGetWarn.Left(2);
strWarn2=strGetWarn.Mid(3,2);
strWarn3=strGetWarn.Mid(6,2);
strWarn4=strGetWarn.Mid(9,2);
XstrtoBin(strWarn1,strTempBin);
if(WarnSet(strTempBin))
{
m_strCRC1="CRC校验";
}
else
{
m_strCRC1="无CRC校验";
}
XstrtoBin(strWarn2,strTempBin);
if(WarnSet(strTempBin))
{
m_strCRC2="CRC校验";
}
else
{
m_strCRC2="无CRC校验";
}
XstrtoBin(strWarn3,strTempBin);
if(WarnSet(strTempBin))
{
m_strCRC3="CRC校验";
}
else
{
m_strCRC3="无CRC校验";
}
XstrtoBin(strWarn4,strTempBin);
if(WarnSet(strTempBin))
{
m_strCRC4="CRC校验";
}
else
{
m_strCRC4="无CRC校验";
}
UpdateData(false);
//////////////////////////////////////////////////////////////////////////
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgE1Mod::OnBtnSearch()
{
// TODO: Add your control notification handler code here
////////////////////////读串口信息//////////////////////////////////////////////////
CDlgAllStaSet dlgalstaset;
CString strPath;
char Get[255];
dlgalstaset.GetModulePath(strPath,NULL);
strPath+="config.ini";
GetPrivateProfileString("Com",CDlgStateDisplay::strAddress,"1",Get,255,strPath);
UINT uiCom=(UINT)atoi(Get);
//////////////////////////////////////////////////////////////////////////
OnButtonOpenport(uiCom);
CDlgE1Mod::iState=2;
CCheckState::bAuto=false;
OrPage();
if(m_Port.m_hComm==NULL)
{
AfxMessageBox("串口占用或不存在,请稍后重试");
return;
}
else
{
m_strRXData="";
char data[512];
int len=Str2Hex(strSearch,data);
m_Port.WriteToPort(data,len);
}
SetTimer(3,idelay,NULL);//等1000毫秒后取接收内容
}
void CDlgE1Mod::OrPage()
{
UpdateData(true);
int ilPage=m_iMod1*1+m_iMod2*2+m_iMod3*4+m_iMod4*8;//得到低四位10进制
int iHPage=m_iProtect1*1+m_iProtect2*2+m_iProtect3*4+m_iProtect4*8;//得到高四位10进制
CString strlPage;//低四位的串
CString strHpage;//高四位的串
TentoString(ilPage,strlPage);
TentoString(iHPage,strHpage);
strPage.Format("%s%s",strHpage,strlPage);
int ileng=config.Str2Hex(strPage,btahexdata);
strSent.Format("7E 81 %s %s 03 04 %02X %s",CDlgStateDisplay::strAddress,CDlgStateDisplay::strAddress,ileng,strPage);
strSearch.Format("7E 81 %s %s 00 04 00",CDlgStateDisplay::strAddress,CDlgStateDisplay::strAddress);
}
void CDlgE1Mod::TentoString(int inum,CString &str)
{
if(inum<10)
{
str.Format("%d",inum);
}
else
{
switch(inum) {
case 10:
str="A";
break;
case 11:
str="B";
break;
case 12:
str="C";
break;
case 13:
str="D";
break;
case 14:
str="E";
break;
case 15:
str="F";
break;
}
}
}
BEGIN_EVENTSINK_MAP(CDlgE1Mod, CDialog)
//{{AFX_EVENTSINK_MAP(CDlgE1Mod)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CDlgE1Mod::OnClose()
{
// TODO: Add your message handler code here and/or call default
if(m_Port.m_hComm!=NULL)
{
m_Port.ClosePort();
CDlgE1Mod::iState=0;
}
CDlgE1Mod::iState=0;
CDialog::OnClose();
}
void CDlgE1Mod::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent) {
case 1:
KillTimer(1);
m_Port.ClosePort();
CDlgE1Mod::iState=1;
if(!m_strRXData.IsEmpty())
{
CString strSentTemp;
strSentTemp=strSent.Right(2)+" ";
if(strSentTemp.Compare(m_strRXData.Right(3))==0)
{
AfxMessageBox("设置成功");
}
else
{
AfxMessageBox("设置不成功");
}
}
break;
case 2:
m_Port.ClosePort();
CDlgE1Mod::iState=1;
break;
case 3:
KillTimer(3);
m_Port.ClosePort();
CDlgE1Mod::iState=1;
if(!m_strRXData.IsEmpty())
{
CString strRXTemp,strRXBin;
strRXTemp=m_strRXData.Right(3);
strRXTemp.Replace(" ","");
XstrtoBin(strRXTemp,strRXBin);
if(strRXBin.Left(1)=="1")
{
m_iProtect4 = 1;
}
else
{
m_iProtect4 = 0;
}
if(strRXBin.Mid(1,1)=="1")
{
m_iProtect3 = 1;
}
else
{
m_iProtect3 = 0;
}
if(strRXBin.Mid(2,1)=="1")
{
m_iProtect2 = 1;
}
else
{
m_iProtect2 = 0;
}
if(strRXBin.Mid(3,1)=="1")
{
m_iProtect1 = 1;
}
else
{
m_iProtect1 = 0;
}
if(strRXBin.Mid(4,1)=="1")
{
m_iMod4 = 1;
}
else
{
m_iMod4 = 0;
}
if(strRXBin.Mid(5,1)=="1")
{
m_iMod3 = 1;
}
else
{
m_iMod3 = 0;
}
if(strRXBin.Mid(6,1)=="1")
{
m_iMod2 = 1;
}
else
{
m_iMod2 = 0;
}
if(strRXBin.Mid(7,1)=="1")
{
m_iMod1 = 1;
}
else
{
m_iMod1 = 0;
}
UpdateData(false);
}
break;
}
CDialog::OnTimer(nIDEvent);
}
int CDlgE1Mod::Str2Hex(CString str, char* data)
{
int t,t1;
int rlen=0,len=str.GetLength();
//data.SetSize(len/2);
for(int i=0;i<len;)
{
char l,h=str[i];
if(h==' ')
{
i++;
continue;
}
i++;
if(i>=len)
break;
l=str[i];
t=HexChar(h);
t1=HexChar(l);
if((t==16)||(t1==16))
break;
else
t=t*16+t1;
i++;
data[rlen]=(char)t;
rlen++;
}
return rlen;
}
char CDlgE1Mod::HexChar(char c)
{
if((c>='0')&&(c<='9'))
return c-0x30;
else if((c>='A')&&(c<='F'))
return c-'A'+10;
else if((c>='a')&&(c<='f'))
return c-'a'+10;
else
return 0x10;
}
LONG CDlgE1Mod::OnCommunication(WPARAM ch,LPARAM port)
{
if (port <= 0 || port > 4)
return -1;
CString str;
str.Format("%02X ",ch);
m_strRXData+=str;
UpdateData(false);
return 0;
}
void CDlgE1Mod::OnButtonOpenport(UINT uiCom)
{
// TODO: Add your control notification handler code here
/* ////////////////////////读串口信息//////////////////////////////////////////////////
CDlgAllStaSet dlgalstaset;
CString strPath;
char Get[255];
dlgalstaset.GetModulePath(strPath,NULL);
strPath+="config.ini";
GetPrivateProfileString("General","COM","1",Get,255,strPath);
UINT uiCom=(UINT)atoi(Get);
//////////////////////////////////////////////////////////////////////////
CString strStatus;
*/
if (m_Port.InitPort(this, uiCom, 2400,'o',8,1,EV_RXFLAG | EV_RXCHAR,2048))
{
m_Port.StartMonitoring();
}
else
{
AfxMessageBox("没有发现此串口或被占用");
}
}
void CDlgE1Mod::GetLogPath()
{
SYSTEMTIME mySystemTime;
GetLocalTime(&mySystemTime);
CString filetime;
strCurTime.Format("%d:%d:%d",mySystemTime.wHour,mySystemTime.wMinute,mySystemTime.wSecond);
// filetime.Format ("%d-%d-%d %s%d %d:%d:%d",mySystemTime.wYear,mySystemTime.wMonth,mySystemTime.wDay,"星期",mySystemTime.wDayOfWeek,mySystemTime.wHour,mySystemTime.wMinute,mySystemTime.wSecond);
filetime.Format("%d-%d-%d.ini",mySystemTime.wYear,mySystemTime.wMonth,mySystemTime.wDay);
CDlgAllStaSet dlgalstaset;
dlgalstaset.GetModulePath(strLogPath,NULL);
strLogPath=strLogPath+"log\\"+filetime;
}
void CDlgE1Mod::XstrtoBin(CString str,CString &strBin)
{
str.Replace("0","0000");
str.Replace("1","0001");
str.Replace("2","0010");
str.Replace("3","0011");
str.Replace("4","0100");
str.Replace("5","0101");
str.Replace("6","0110");
str.Replace("7","0111");
str.Replace("8","1000");
str.Replace("9","1001");
str.Replace("A","1010");
str.Replace("B","1011");
str.Replace("C","1100");
str.Replace("D","1101");
str.Replace("E","1110");
str.Replace("F","1111");
strBin=str;
}
bool CDlgE1Mod::WarnSet(CString strBinValue)
{
CString strWarning;
strWarning=strBinValue.Mid(5,1);
if(strWarning.Compare("1")==0)
{
return true;
}
else
{
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -