📄 check.cpp
字号:
// Check.cpp : implementation file
//
#include "stdafx.h"
#include "OxcygenTest.h"
#include "Check.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCheck dialog
CCheck::CCheck(CWnd* pParent /*=NULL*/)
: CDialog(CCheck::IDD, pParent)
{
//{{AFX_DATA_INIT(CCheck)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CCheck::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCheck)
DDX_Control(pDX, IDC_MSCOMM1, m_com_check);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCheck, CDialog)
//{{AFX_MSG_MAP(CCheck)
ON_BN_CLICKED(IDC_BUTTON_GZEROIN, OnButtonGzeroin)
ON_BN_CLICKED(IDC_BUTTON_GZEROOUT, OnButtonGzeroout)
ON_BN_CLICKED(IDC_BUTTON_GSPANIN, OnButtonGspanin)
ON_BN_CLICKED(IDC_BUTTON_GSPANOUT, OnButtonGspanout)
ON_BN_CLICKED(IDC_BUTTON_CZEROIN, OnButtonCzeroin)
ON_BN_CLICKED(IDC_BUTTON_CZEROOUT, OnButtonCzeroout)
ON_BN_CLICKED(IDC_BUTTON_CSPANIN, OnButtonCspanin)
ON_BN_CLICKED(IDC_BUTTON_CSPANOUT, OnButtonCspanout)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCheck message handlers
char CCheck::ConvertHexChar(char ch)
{
if((ch>='0')&&(ch<='9'))
return ch-0x30;
else if((ch>='A')&&(ch<='F'))
return ch-'A'+10;
else if((ch>='a')&&(ch<='f'))
return ch-'a'+10;
else return (-1);
}
int CCheck::String16Hex(CString str)
{
int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();
for(int i=0;i<len;) {
char lstr,hstr=str[i];
if(hstr==' ') {
i++;
continue;
}
i++;
if(i>=len)
break;
lstr=str[i];
hexdata=ConvertHexChar(hstr);
lowhexdata=ConvertHexChar(lstr);
if((hexdata==16)||(lowhexdata==16))
break;
else
hexdata=hexdata*16+lowhexdata;
i++;
}
return hexdata;
}
int CCheck::String2Hex(CString str, CByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();
senddata.SetSize(len/2);
for(int i=0;i<len;) {
char lstr,hstr=str[i];
if(hstr==' ') {
i++;
continue;
}
i++;
if(i>=len)
break;
lstr=str[i];
hexdata=ConvertHexChar(hstr);
lowhexdata=ConvertHexChar(lstr);
if((hexdata==16)||(lowhexdata==16))
break;
else
hexdata=hexdata*16+lowhexdata;
i++;
senddata[hexdatalen]=(char)hexdata;
hexdatalen++;
}
senddata.SetSize(hexdatalen);
return hexdatalen;
}
unsigned char CCheck::String2int(char high, char low) {
unsigned char temp1, temp2, answer;
if((high>='0')&&(high<='9'))
temp1 = high-0x30;
else if((high>='A')&&(high<='F'))
temp1 = high-'A'+10;
else if((high>='a')&&(high<='f'))
temp1 = high-'a'+10;
if((low>='0')&&(low<='9'))
temp2 = low-0x30;
else if((low>='A')&&(low<='F'))
temp2 = low-'A'+10;
else if((low>='a')&&(low<='f'))
temp2 = low-'a'+10;
answer = temp1 * 16 + temp2;
return answer;
}
void CCheck::OnButtonGzeroin()
{
// TODO: Add your control notification handler code here
KillTimer(1);
CByteArray hexdata;
CString m1,m2,m3,m4,m5,m6;
extern unsigned char startch, slaveadd, command, hdata, ldata, check;
extern unsigned char m_Start_char, m_Slave_add;
startch = m_Start_char;
slaveadd = m_Slave_add;
command = 0x15;
command &= 0x7f;//最高位取0
hdata = 0;
ldata = 0;
check = slaveadd ^ command ^ hdata ^ ldata;
check &= 0x7f;
m1.Format("%02X", startch);
m2.Format("%02X", slaveadd);
m3.Format("%02X", command);
m4.Format("%02X", hdata);
m5.Format("%02X", ldata);
m6.Format("%02X", check);
int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void CCheck::OnButtonGzeroout()
{
// TODO: Add your control notification handler code here
KillTimer(1);
CByteArray hexdata;
CString m1,m2,m3,m4,m5,m6;
extern unsigned char startch, slaveadd, command, hdata, ldata, check;
extern unsigned char m_Start_char, m_Slave_add;
startch = m_Start_char;
slaveadd = m_Slave_add;
command = 0x16;
command &= 0x7f;//最高位取0
hdata = 0;
ldata = 0;
check = slaveadd ^ command ^ hdata ^ ldata;
check &= 0x7f;
m1.Format("%02X", startch);
m2.Format("%02X", slaveadd);
m3.Format("%02X", command);
m4.Format("%02X", hdata);
m5.Format("%02X", ldata);
m6.Format("%02X", check);
int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void CCheck::OnButtonGspanin()
{
// TODO: Add your control notification handler code here
KillTimer(1);
CByteArray hexdata;
CString m1,m2,m3,m4,m5,m6;
extern unsigned char startch, slaveadd, command, hdata, ldata, check;
extern unsigned char m_Start_char, m_Slave_add;
startch = m_Start_char;
slaveadd = m_Slave_add;
command = 0x17;
command &= 0x7f;//最高位取0
CString str0;
GetDlgItemText(IDC_EDIT_CHECK_HDAT,str0);
if(str0.GetLength() == 0 || str0.GetLength() < 2) {//判断从机地址是否输入
MessageBox("请输入高字节数据!");
SetTimer(1,100,NULL);
return;
}
hdata = String2int(str0[0], str0[1]);
GetDlgItemText(IDC_EDIT_CHECK_LDAT,str0);
if(str0.GetLength() == 0 || str0.GetLength() < 2) {//判断从机地址是否输入
MessageBox("请输入低字节数据!");
SetTimer(1,100,NULL);
return;
}
ldata = String2int(str0[0], str0[1]);
check = slaveadd ^ command ^ hdata ^ ldata;
check &= 0x7f;
m1.Format("%02X", startch);
m2.Format("%02X", slaveadd);
m3.Format("%02X", command);
m4.Format("%02X", hdata);
m5.Format("%02X", ldata);
m6.Format("%02X", check);
int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void CCheck::OnButtonGspanout()
{
// TODO: Add your control notification handler code here
KillTimer(1);
CByteArray hexdata;
CString m1,m2,m3,m4,m5,m6;
extern unsigned char startch, slaveadd, command, hdata, ldata, check;
extern unsigned char m_Start_char, m_Slave_add;
startch = m_Start_char;
slaveadd = m_Slave_add;
command = 0x18;
command &= 0x7f;//最高位取0
hdata = 0;
ldata = 0;
check = slaveadd ^ command ^ hdata ^ ldata;
check &= 0x7f;
m1.Format("%02X", startch);
m2.Format("%02X", slaveadd);
m3.Format("%02X", command);
m4.Format("%02X", hdata);
m5.Format("%02X", ldata);
m6.Format("%02X", check);
int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void CCheck::OnButtonCzeroin()
{
// TODO: Add your control notification handler code here
KillTimer(1);
CByteArray hexdata;
CString m1,m2,m3,m4,m5,m6;
extern unsigned char startch, slaveadd, command, hdata, ldata, check;
extern unsigned char m_Start_char, m_Slave_add;
startch = m_Start_char;
slaveadd = m_Slave_add;
command = 0x1B;
command &= 0x7f;//最高位取0
hdata = 0;
ldata = 0;
check = slaveadd ^ command ^ hdata ^ ldata;
check &= 0x7f;
m1.Format("%02X", startch);
m2.Format("%02X", slaveadd);
m3.Format("%02X", command);
m4.Format("%02X", hdata);
m5.Format("%02X", ldata);
m6.Format("%02X", check);
int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void CCheck::OnButtonCzeroout()
{
// TODO: Add your control notification handler code here
KillTimer(1);
CByteArray hexdata;
CString m1,m2,m3,m4,m5,m6;
extern unsigned char startch, slaveadd, command, hdata, ldata, check;
extern unsigned char m_Start_char, m_Slave_add;
startch = m_Start_char;
slaveadd = m_Slave_add;
command = 0x1C;
command &= 0x7f;//最高位取0
hdata = 0;
ldata = 0;
check = slaveadd ^ command ^ hdata ^ ldata;
check &= 0x7f;
m1.Format("%02X", startch);
m2.Format("%02X", slaveadd);
m3.Format("%02X", command);
m4.Format("%02X", hdata);
m5.Format("%02X", ldata);
m6.Format("%02X", check);
int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void CCheck::OnButtonCspanin()
{
// TODO: Add your control notification handler code here
KillTimer(1);
CByteArray hexdata;
CString m1,m2,m3,m4,m5,m6;
extern unsigned char startch, slaveadd, command, hdata, ldata, check;
extern unsigned char m_Start_char, m_Slave_add;
startch = m_Start_char;
slaveadd = m_Slave_add;
command = 0x1D;
command &= 0x7f;//最高位取0
hdata = 0;
ldata = 0;
check = slaveadd ^ command ^ hdata ^ ldata;
check &= 0x7f;
m1.Format("%02X", startch);
m2.Format("%02X", slaveadd);
m3.Format("%02X", command);
m4.Format("%02X", hdata);
m5.Format("%02X", ldata);
m6.Format("%02X", check);
int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void CCheck::OnButtonCspanout()
{
// TODO: Add your control notification handler code here
KillTimer(1);
CByteArray hexdata;
CString m1,m2,m3,m4,m5,m6;
extern unsigned char startch, slaveadd, command, hdata, ldata, check;
extern unsigned char m_Start_char, m_Slave_add;
startch = m_Start_char;
slaveadd = m_Slave_add;
command = 0x1E;
command &= 0x7f;//最高位取0
hdata = 0;
ldata = 0;
check = slaveadd ^ command ^ hdata ^ ldata;
check &= 0x7f;
m1.Format("%02X", startch);
m2.Format("%02X", slaveadd);
m3.Format("%02X", command);
m4.Format("%02X", hdata);
m5.Format("%02X", ldata);
m6.Format("%02X", check);
int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
m_com_check.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
BEGIN_EVENTSINK_MAP(CCheck, CDialog)
//{{AFX_EVENTSINK_MAP(CCheck)
ON_EVENT(CCheck, IDC_MSCOMM1, 1 /* OnComm */, OnOnCommMscomm_Check, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CCheck::OnOnCommMscomm_Check()
{
// TODO: Add your control notification handler code here
}
BOOL CCheck::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
//初始化串口
char *pBuf;
DWORD dwFileLen;
extern CString bodrate;//波特率
extern CString jiaoyan;//校验位
extern CString databit;//数据位
extern CString stopbit;//停止位
extern short c1;//串口位
int ii[6];
CString n;
CString p[6];
int i;
CFile file("comset.ini",CFile::modeRead);
dwFileLen=file.GetLength();
pBuf=new char[dwFileLen+1];
pBuf[dwFileLen]=0;
file.Read(pBuf,dwFileLen);
file.Close();
n=pBuf;
p[0]=n.Mid(0,1);
p[1]=n.Mid(1,1);
p[2]=n.Mid(2,1);
p[3]=n.Mid(3,1);
p[4]=n.Mid(4,1);
for(i = 0; i < 5; i++) {
ii[i]=atoi(p[i]);
}
switch(ii[0]) { //串口号
case 0: c1=1; break;
case 1: c1=2; break;
case 2: c1=3; break;
case 3: c1=4; break;
case 4: c1=5; break;
case 5: c1=6; break;
case 6: c1=7; break;
case 7: c1=8; break;
case 8: c1=9; break;
case 9: c1=10; break;
default: c1=1; break;
};
switch(ii[1]) { //波特率
case 0: bodrate="19200"; break;
case 1: bodrate="14400"; break;
case 2: bodrate="9600"; break;
case 3: bodrate="4800"; break;
case 4: bodrate="2400"; break;
case 5: bodrate="1800"; break;
default: bodrate="9600"; break;
};
switch(ii[2]) { //校验位设置
case 0: jiaoyan="n"; break;
case 1: jiaoyan="n"; break;
case 2: jiaoyan="n"; break;
default: jiaoyan="n"; break;
};
switch(ii[3]) { //数据位设置
case 0: databit="9"; break;
case 1: databit="8"; break;
case 2: databit="7"; break;
case 3: databit="6"; break;
case 4: databit="5"; break;
case 5: databit="4"; break;
default: databit="8"; break;
};
switch(ii[4]) { //数据位设置
case 0: stopbit="1.5"; break;
case 1: stopbit="1"; break;
default: stopbit="1"; break;
};
delete [] pBuf;
m_com_check.SetCommPort(c1); //选择COM1
m_com_check.SetInBufferSize(1024); //设置输入缓冲区的大小,字节
m_com_check.SetOutBufferSize(1024); //接收区
m_com_check.SetInputMode(1); //输入二进制数据
m_com_check.SetSettings(bodrate+","+jiaoyan+","+databit+","+stopbit); //串口参数设置
m_com_check.SetRThreshold(1); //为1表示有一个字符引发事件
m_com_check.SetInputLen(0);
m_com_check.SetPortOpen(true);//打开串口*/
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -