📄 dlgshx.cpp
字号:
// DlgShx.cpp : implementation file
//
#include "stdafx.h"
#include "PCM120.h"
#include "DlgShx.h"
#include "DlgASK2.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
/////////////////////////////////////////////////////////////////////////////
// CDlgShx dialog
CDlgShx::CDlgShx(CWnd* pParent /*=NULL*/)
: CDialog(CDlgShx::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgShx)
m_iConfig = 0;
m_strRXData = _T("");
m_bRound0 = FALSE;
m_bRound1 = FALSE;
m_bRound10 = FALSE;
m_bRound11 = FALSE;
m_bRound12 = FALSE;
m_bRound13 = FALSE;
m_bRound14 = FALSE;
m_bRound15 = FALSE;
m_bRound16 = FALSE;
m_bRound17 = FALSE;
m_bRound18 = FALSE;
m_bRound19 = FALSE;
m_bRound2 = FALSE;
m_bRound20 = FALSE;
m_bRound21 = FALSE;
m_bRound22 = FALSE;
m_bRound23 = FALSE;
m_bRound24 = FALSE;
m_bRound25 = FALSE;
m_bRound26 = FALSE;
m_bRound27 = FALSE;
m_bRound28 = FALSE;
m_bRound29 = FALSE;
m_bRound3 = FALSE;
m_bRound30 = FALSE;
m_bRound31 = FALSE;
m_bRound4 = FALSE;
m_bRound5 = FALSE;
m_bRound6 = FALSE;
m_bRound7 = FALSE;
m_bRound8 = FALSE;
m_bRound9 = FALSE;
m_brRound0 = FALSE;
m_brRound1 = FALSE;
m_brRound2 = FALSE;
m_brRound3 = FALSE;
m_brRound4 = FALSE;
m_brRound5 = FALSE;
m_brRound6 = FALSE;
m_brRound7 = FALSE;
m_brRound8 = FALSE;
m_brRound9 = FALSE;
m_brRound10 = FALSE;
m_brRound11 = FALSE;
m_brRound12 = FALSE;
m_brRound13 = FALSE;
m_brRound14 = FALSE;
m_brRound15 = FALSE;
m_brRound16 = FALSE;
m_brRound17 = FALSE;
m_brRound18 = FALSE;
m_brRound19 = FALSE;
m_brRound20 = FALSE;
m_brRound21 = FALSE;
m_brRound22 = FALSE;
m_brRound23 = FALSE;
m_brRound24 = FALSE;
m_brRound25 = FALSE;
m_brRound26 = FALSE;
m_brRound27 = FALSE;
m_brRound28 = FALSE;
m_brRound29 = FALSE;
m_brRound30 = FALSE;
m_brRound31 = FALSE;
//}}AFX_DATA_INIT
}
void CDlgShx::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgShx)
DDX_Radio(pDX, IDC_RADIO_CONF, m_iConfig);
DDX_Text(pDX, IDC_EDIT_RXDATA, m_strRXData);
DDX_Check(pDX, IDC_CHECK0, m_bRound0);
DDX_Check(pDX, IDC_CHECK1, m_bRound1);
DDX_Check(pDX, IDC_CHECK10, m_bRound10);
DDX_Check(pDX, IDC_CHECK11, m_bRound11);
DDX_Check(pDX, IDC_CHECK12, m_bRound12);
DDX_Check(pDX, IDC_CHECK13, m_bRound13);
DDX_Check(pDX, IDC_CHECK14, m_bRound14);
DDX_Check(pDX, IDC_CHECK15, m_bRound15);
DDX_Check(pDX, IDC_CHECK16, m_bRound16);
DDX_Check(pDX, IDC_CHECK17, m_bRound17);
DDX_Check(pDX, IDC_CHECK18, m_bRound18);
DDX_Check(pDX, IDC_CHECK19, m_bRound19);
DDX_Check(pDX, IDC_CHECK2, m_bRound2);
DDX_Check(pDX, IDC_CHECK20, m_bRound20);
DDX_Check(pDX, IDC_CHECK21, m_bRound21);
DDX_Check(pDX, IDC_CHECK22, m_bRound22);
DDX_Check(pDX, IDC_CHECK23, m_bRound23);
DDX_Check(pDX, IDC_CHECK24, m_bRound24);
DDX_Check(pDX, IDC_CHECK25, m_bRound25);
DDX_Check(pDX, IDC_CHECK26, m_bRound26);
DDX_Check(pDX, IDC_CHECK27, m_bRound27);
DDX_Check(pDX, IDC_CHECK28, m_bRound28);
DDX_Check(pDX, IDC_CHECK29, m_bRound29);
DDX_Check(pDX, IDC_CHECK3, m_bRound3);
DDX_Check(pDX, IDC_CHECK30, m_bRound30);
DDX_Check(pDX, IDC_CHECK31, m_bRound31);
DDX_Check(pDX, IDC_CHECK4, m_bRound4);
DDX_Check(pDX, IDC_CHECK5, m_bRound5);
DDX_Check(pDX, IDC_CHECK6, m_bRound6);
DDX_Check(pDX, IDC_CHECK7, m_bRound7);
DDX_Check(pDX, IDC_CHECK8, m_bRound8);
DDX_Check(pDX, IDC_CHECK9, m_bRound9);
DDX_Check(pDX, IDC_CHECK63, m_brRound0);
DDX_Check(pDX, IDC_CHECK32, m_brRound1);
DDX_Check(pDX, IDC_CHECK33, m_brRound2);
DDX_Check(pDX, IDC_CHECK34, m_brRound3);
DDX_Check(pDX, IDC_CHECK35, m_brRound4);
DDX_Check(pDX, IDC_CHECK36, m_brRound5);
DDX_Check(pDX, IDC_CHECK37, m_brRound6);
DDX_Check(pDX, IDC_CHECK38, m_brRound7);
DDX_Check(pDX, IDC_CHECK39, m_brRound8);
DDX_Check(pDX, IDC_CHECK40, m_brRound9);
DDX_Check(pDX, IDC_CHECK41, m_brRound10);
DDX_Check(pDX, IDC_CHECK42, m_brRound11);
DDX_Check(pDX, IDC_CHECK43, m_brRound12);
DDX_Check(pDX, IDC_CHECK44, m_brRound13);
DDX_Check(pDX, IDC_CHECK45, m_brRound14);
DDX_Check(pDX, IDC_CHECK46, m_brRound15);
DDX_Check(pDX, IDC_CHECK47, m_brRound16);
DDX_Check(pDX, IDC_CHECK48, m_brRound17);
DDX_Check(pDX, IDC_CHECK49, m_brRound18);
DDX_Check(pDX, IDC_CHECK50, m_brRound19);
DDX_Check(pDX, IDC_CHECK51, m_brRound20);
DDX_Check(pDX, IDC_CHECK52, m_brRound21);
DDX_Check(pDX, IDC_CHECK53, m_brRound22);
DDX_Check(pDX, IDC_CHECK54, m_brRound23);
DDX_Check(pDX, IDC_CHECK55, m_brRound24);
DDX_Check(pDX, IDC_CHECK56, m_brRound25);
DDX_Check(pDX, IDC_CHECK57, m_brRound26);
DDX_Check(pDX, IDC_CHECK58, m_brRound27);
DDX_Check(pDX, IDC_CHECK59, m_brRound28);
DDX_Check(pDX, IDC_CHECK60, m_brRound29);
DDX_Check(pDX, IDC_CHECK61, m_brRound30);
DDX_Check(pDX, IDC_CHECK62, m_brRound31);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgShx, CDialog)
//{{AFX_MSG_MAP(CDlgShx)
ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)
ON_BN_CLICKED(IDC_BTN_SENT, OnBtnSent)
ON_WM_TIMER()
ON_WM_CLOSE()
ON_CBN_SELENDOK(IDC_COMBO_THEE1, OnSelendokComboThee1)
ON_BN_CLICKED(IDC_BTN_SAVESELECT, OnBtnSaveselect)
ON_BN_CLICKED(IDC_BTN_ASK, OnBtnAsk)
ON_BN_CLICKED(IDC_BTN_SELECTALL, OnBtnSelectall)
ON_BN_CLICKED(IDC_BTN_UNSELECT, OnBtnUnselect)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgShx message handlers
CString CDlgShx::strSent="";//最终发送的内容
int CDlgShx::iState=0;
int TheE1SelIndex=-1;//选中的是第几路0--1路,1--2路,2--3路,3--4路
CString strTheFirst;
CString strTheSecond;
CString strTheThird;
CString strTheForth;
CStringArray straSelect;//存放是环回设置后的值
/*void CDlgShx::OnBtnInit()
{
// TODO: Add your control notification handler code here
}
*/
BOOL CDlgShx::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);
//////////////////////////////////////////////////////////////////////////
CDlgShx::iState=1;
CComboBox *ComBoxTheE1=(CComboBox*)GetDlgItem(IDC_COMBO_THEE1);
ComBoxTheE1->InsertString(0,"第一路");
ComBoxTheE1->InsertString(1,"第二路");
ComBoxTheE1->InsertString(2,"第三路");
ComBoxTheE1->InsertString(3,"第四路");
// TODO: Add extra initialization here
strTheFirst="A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ";
strTheSecond="A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ";
strTheThird="A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ";
strTheForth="A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ";
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BEGIN_EVENTSINK_MAP(CDlgShx, CDialog)
//{{AFX_EVENTSINK_MAP(CDlgShx)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
CString strPagesh;//报文内容
void CDlgShx::OnBtnSent()
{
// TODO: Add your control notification handler code here
CByteArray hexdata;//编辑框中的内容转成的十六进制串
CStdioFile sfMessTemp;//存放每次的配置文件
CByteArray btahexdata;//最终要发送的内容的十六进制串
CDlgASK Dlgask;
CString strChange;//交叉串60-7F
strChange="60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F";
CString strUnChang;//不交叉A0-BF
strUnChang="A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF";
CString strRound;//环回设置;
strRound=strTheFirst+strTheSecond+strTheThird+strTheForth;
strRound.TrimRight(" ");//滤掉最后的空格;
UpdateData(true);
CString strLastConfig;
// CDlgConfig DlgConf;
strGetAim=CDlgStateDisplay::strAddress;
strGetSource=CDlgStateDisplay::strAddress;
////////////////////////读串口信息//////////////////////////////////////////////////
CDlgAllStaSet dlgalstaset;
CString strPath;
char Get[255];
dlgalstaset.GetModulePath(strPath,NULL);
strPath+="config.ini";
GetPrivateProfileString("Com",strGetSource,"1",Get,255,strPath);
UINT uiCom=(UINT)atoi(Get);
//////////////////////////////////////////////////////////////////////////
if(m_iConfig==1)//查询
{
m_strRXData="";
UpdateData(false);
// strSent="7E 81 01 01 00 02 00"; //直接发送固定的查询串;
strSent.Format("7E 81 %s %s 00 02 00",strGetSource,strGetAim);
OnButtonOpenport(uiCom);
CDlgShx::iState=2;
if(m_Port.m_hComm==NULL)
{
AfxMessageBox("发送不成功,请重试");
return;
}
else
{
char data[2048];
int len=Str2Hex(strSent,data);
m_Port.WriteToPort(data,len);
}
//SetTimer(1,idelay,NULL);
SetTimer(1,1200,NULL);
return;
}
else if(m_iConfig ==0)//环回设置
{
OnButtonOpenport(uiCom);
m_strRXData="";
UpdateData(false);
strSent.Format("7E 81 %s %s 03 02 80 %s",strGetSource,strGetAim,strRound);
//m_Port.WriteToPort();
if(m_Port.m_hComm==NULL)
{
AfxMessageBox("发送不成功,请重试");
return;
}
else
{
char data[2048];
int len=Str2Hex(strSent,data);
m_Port.WriteToPort(data,len);
CDlgConfig dlgconfig;
dlgconfig.WriteConfig(strSent);//把配置的内容写入日志;
/*
//////////////////////////如果与上一次 的配置不一样,就要记到日志里////////////////////////////////////////////////
char Getshx[500];//取得环回设置的上一次设置的内容char;
GetLogPath();
GetPrivateProfileString("default","环回设置","",Getshx,500,strLogPath);
CString StrGetshx;//取得环回设置的上一次设置的内容CString;
StrGetshx=Getshx;
if(strSent.Compare(StrGetshx)!=0)
{
WritePrivateProfileString(strCurTime,strGetSource+"环回设置",strSent,strLogPath);
WritePrivateProfileString("default",strGetSource+"环回设置",strSent,strLogPath);
}
//////////////////////////////////////////////////////////////////////////
*/
}
// SetTimer(1,1000,NULL);
strLastConfig =strSent;
WriteConfig(strLastConfig);
strPagesh=strRound;
Sleep(1000);//等一秒后发查询报文
if(Dlgask.DoModal()==IDOK)
{
m_strRXData="";
strSent.Format("7E 81 %s %s 00 02 00",strGetSource,strGetAim);
if(m_Port.m_hComm==NULL)
{
AfxMessageBox("串口占用或不存在,请稍后重试");
return;
}
else
{
char data[2048];
int len=Str2Hex(strSent,data);
m_Port.WriteToPort(data,len);
}
//SetTimer(1,idelay,NULL);
SetTimer(1,1000,NULL);
}
else
{
m_Port.ClosePort();
// CDlgShx::iState=0;
}
return;
}
}
void CDlgShx::WriteConfig(CString strConfig)
{
CStdioFile sfMessTemp;
int iLenSentf;
if(sfMessTemp.Open("lastSent.txt",CFile::modeRead))
{
iLenSentf=sfMessTemp.GetLength();
}
sfMessTemp.Close();
if(iLenSentf>5000)
{
if(sfMessTemp.Open("lastSent.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
{
sfMessTemp.WriteString(strConfig+'\n');
}
sfMessTemp.Close();
}
else
{
if(sfMessTemp.Open("lastSent.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
{
sfMessTemp.WriteString(strConfig+'\n');
}
sfMessTemp.Close();
}
}
void CDlgShx::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
KillTimer(1);
m_Port.ClosePort();
// CDlgShx::iState=0;
if(!m_strRXData.IsEmpty())
{
UpdateData(false);
//////////////////////////////////////////////////////////////////////////
int iPos =m_strRXData.Find("7E 7E");
if(iPos!=-1)
{
CString strAnser;
int istdLen=sizeof("7E 7E 81 01 01 02 00 80 ");
int nLen=m_strRXData.GetLength()-iPos -istdLen;
strAnser=m_strRXData.Right(nLen+1);
if(nLen>=383)
{
strPagesh+=" ";
//////////////////////////////////////////////////////////////////////////
CString strGet2Bit;
for(int iposRe=0;iposRe<32;iposRe++)
{
strGet2Bit=strAnser.Mid(iposRe*3,1);
if(strGet2Bit=="6"||strGet2Bit=="7")
{
iaResult0[iposRe]=TRUE;
}
else
{
iaResult0[iposRe]=FALSE;
}
}
for(iposRe=32;iposRe<64;iposRe++)
{
strGet2Bit=strAnser.Mid(iposRe*3,1);
if(strGet2Bit=="6"||strGet2Bit=="7")
{
iaResult1[iposRe-32]=TRUE;
}
else
{
iaResult1[iposRe-32]=FALSE;
}
}
for(iposRe=64;iposRe<96;iposRe++)
{
strGet2Bit=strAnser.Mid(iposRe*3,1);
if(strGet2Bit=="6"||strGet2Bit=="7")
{
iaResult2[iposRe-64]=TRUE;
}
else
{
iaResult2[iposRe-64]=FALSE;
}
}
for(iposRe=96;iposRe<128;iposRe++)
{
strGet2Bit=strAnser.Mid(iposRe*3,1);
if(strGet2Bit=="6"||strGet2Bit=="7")
{
iaResult3[iposRe-96]=TRUE;
}
else
{
iaResult3[iposRe-96]=FALSE;
}
}
}
else
{
AfxMessageBox("延时短,查询结果没有取完整");
}
//////////////////////////////////////////////////////////////////////////
/* CStdioFile st;
st.Open("chhl.txt",CFile::modeCreate|CFile::modeWrite);
st.WriteString("\r\nstrAnser\r\n");
st.WriteString(strAnser);
st.WriteString("\r\nstrPagesh\r\n");
st.WriteString(strPagesh);
st.Close();
*/ if(strAnser.Compare(strPagesh)==0)
{
AfxMessageBox("交叉连接设置成功");
m_Port.ClosePort();
// CDlgShx::iState=0;
return;
}
else
{
return;
}
}
}
//////////////////////////////////////////////////////////////////////////
CDialog::OnTimer(nIDEvent);
}
void CDlgShx::OnClose()
{
// TODO: Add your message handler code here and/or call default
//CDlgShx::iState=0;
if(m_Port.m_hComm!=NULL)
{
m_Port.ClosePort();
CDlgShx::iState=0;
}
CDlgShx::iState=0;
CDialog::OnClose();
}
void CDlgShx::OnSelendokComboThee1()
{
// TODO: Add your control notification handler code here
UpdateData(true);
Empty();
UpdateData(false);
// UpdateData(true);
// UpdateData(false);
CComboBox *ComBoxTheE1=(CComboBox*)GetDlgItem(IDC_COMBO_THEE1);
TheE1SelIndex=ComBoxTheE1->GetCurSel();
/* switch(TheE1SelIndex) {
case 0:
SetResult(iaResult0);
SetSource(iaSource0);
break;
case 1:
SetResult(iaResult1);
SetSource(iaSource1);
break;
case 2:
SetResult(iaResult2);
SetSource(iaSource2);
break;
case 3:
SetResult(iaResult3);
SetSource(iaSource3);
break;
}
*/
}
void CDlgShx::OnBtnSaveselect()
{
// TODO: Add your control notification handler code here
int iSize=straSelect.GetSize();
if(iSize>0)
{
straSelect.RemoveAll();
Initstra();
}
else
{
Initstra();
}
UpdateData(true);
iaSelect10[0]=false;
if(m_bRound1)
{
straSelect.SetAt(1,"61");
iaSelect10[1]=true;
}
else
{
iaSelect10[1]=false;
}
if(m_bRound2)
{
straSelect.SetAt(2,"62");
iaSelect10[2]=true;
}
else
{
iaSelect10[2]=false;
}
if(m_bRound3)
{
straSelect.SetAt(3,"63");
iaSelect10[3]=true;
}
else
{
iaSelect10[3]=false;
}
if(m_bRound4)
{
straSelect.SetAt(4,"64");
iaSelect10[4]=true;
}
else
{
iaSelect10[4]=false;
}
if(m_bRound5)
{
straSelect.SetAt(5,"65");
iaSelect10[5]=true;
}
else
{
iaSelect10[5]=false;
}
if(m_bRound6)
{
straSelect.SetAt(6,"66");
iaSelect10[6]=true;
}
else
{
iaSelect10[6]=false;
}
if(m_bRound7)
{
straSelect.SetAt(7,"67");
iaSelect10[7]=true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -