📄 oxcygentestdlg.cpp
字号:
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp1.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
strtemp2.Format("%02d",bt); //将字符以十进制方式送入临时变量strtemp存放
str_recive += strtemp1;
tempdata=atoi(strtemp2);
switch(m_state)
{
case 0:
if(tempdata==0xff) m_state=1;
else m_state=0;
break;
case 1:
m1=tempdata; m_state=2; break;
case 2:
m2=tempdata; m_state=3; break;
case 3:
m3=tempdata; m_state=4; break;
case 4:
m4=tempdata; m_state=5; break;
case 5:
m5=tempdata; m6=m1^m2^m3^m4;
if(m5==m6) {
if(flag == "Slavetype") {//从机型号
m_style = m3 * 128 + m4;//显示从机型号
slavetype_info = m3 * 128 + m4;
}
else if(flag == "Gastype") {//气体类型
gasnum_info = m3 * 128 + m4;//气体序号
}
else if(flag == "Gasmeaur") {//气体量程
gasmeaur_info = m3 * 128 + m4;
}
else if(flag == "Protype") {//程序版本
protype_info = m3 * 128 + m4;
}
else if(flag == "A1") {//A1值
a1_info = m3 * 128 + m4;
a1_info *= gasmeaur_info / 10000;
}
else if(flag == "A2") {//A2值
a2_info = m3 * 128 + m4;
a2_info *= gasmeaur_info / 10000;
}
else if(flag == "Gasppm") {//气体浓度
m_gasppm = (float)((m3 * 128 + m4) * gasmeaur_info)/10000;
}
else if(flag == "Gasadc") {//ADC值
m_gasadc = m3 * 128 + m4;
}
else if(flag == "OnButtonA1") {//ADC值
m_recive = str_recive;
}
else if(flag == "OnButtonA2") {//ADC值
m_recive = str_recive;
}
else if(flag == "OnButtonGas") {//ADC值
m_recive = str_recive;
}
else if(flag == "OnButtonMeas") {//ADC值
m_recive = str_recive;
}
else if(flag == "OnButtonSend") {
m_recive = str_recive;
}
m_state=0;
}
m_state=0;
break;
default: m_state=0; break;
}
}
str_recive = " ";
}
UpdateData(false);
}
char COxcygenTestDlg::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 COxcygenTestDlg::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 COxcygenTestDlg::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 COxcygenTestDlg::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 COxcygenTestDlg::OnButtonStart()
{
// TODO: Add your control notification handler code here
extern unsigned char m_Slave_add, m_Start_char;
if(GetDlgItemText(IDC_BUTTON_START,str),str=="开始") {
SetDlgItemText(IDC_BUTTON_START,"结束");
//从slaveadd.ini中获得从机地址
char *pBuf;
DWORD dwFileLen;
CFile file_slaveadd("slaveadd.ini",CFile::modeRead);
dwFileLen=file_slaveadd.GetLength();
pBuf=new char[dwFileLen+1];
pBuf[dwFileLen]=0;
file_slaveadd.Read(pBuf,dwFileLen);
file_slaveadd.Close();
m_Slave_add = String2int(pBuf[2], pBuf[3]);//"0x23"
delete [] pBuf;
//从startch.ini中获得开始字节数据
CFile file_startch("startch.ini",CFile::modeRead);//"0xff"
dwFileLen=file_startch.GetLength();
pBuf=new char[dwFileLen+1];
pBuf[dwFileLen]=0;
file_startch.Read(pBuf,dwFileLen);
file_startch.Close();
m_Start_char = String2int(pBuf[2], pBuf[3]);
delete [] pBuf;
GetDlgItem(IDC_BUTTON_REVISE)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_SET)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_CHECK)->EnableWindow(false);/////////////////
GetDlgItem(IDC_BUTTON_INFO)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_DEC)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_BAK)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_FUNC)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_OK)->EnableWindow(true);
extern unsigned char flag_start;
if(!flag_start) flag_start = 1;
else m_com.SetPortOpen(true);//打开串口
SetTimer(1,100,NULL);
}
else {
SetDlgItemText(IDC_BUTTON_START,"开始");
GetDlgItem(IDC_BUTTON_SET)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_CHECK)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_INFO)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_DEC)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_BAK)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_FUNC)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_OK)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_REVISE)->EnableWindow(false);
m_recive = " ";
m_com.SetPortOpen(false);
KillTimer(1);
UpdateData(false);
}
}
void COxcygenTestDlg::OnButtonSend()
{
// TODO: Add your control notification handler code here
KillTimer(1);///////////////////////////////////////////
if(GetDlgItemText(IDC_BUTTON_START,str),str=="开始") {
MessageBox("请按下开始按钮");
SetTimer(1,100,NULL);
return;
}
CByteArray hexdata;
CString m1,m2,m3,m4,m5,m6;
extern unsigned char m_Slave_add, m_Start_char;
extern unsigned char startch, slaveadd, command, hdata, ldata, check;
CString str0;
GetDlgItemText(IDC_EDIT_SEND,str0);
startch = String2int(str0[0], str0[1]);//m_Start_char;//m_Start_char;
GetDlgItemText(IDC_EDIT_SEND2,str0);
if(str0.GetLength() == 0 || str0.GetLength() < 2 || str0.GetLength() >= 3) {//判断从机地址是否输入
MessageBox("请输入从机地址!");
SetTimer(1,100,NULL);
return;
}
slaveadd = String2int(str0[0], str0[1]);//m_Slave_add;//m_Slave_add;
GetDlgItemText(IDC_EDIT_SEND3,str0);
if(str0.GetLength() == 0 || str0.GetLength() < 2 || str0.GetLength() >= 3) {//判断指令是否输入
MessageBox("请输入操作指令!");
SetTimer(1,100,NULL);
return;
}
command = String2int(str0[0], str0[1]);//String2int(str0[2], str0[3]);
command &= 0x7f;//最高位取0
m1.Format("%02X", startch);
m2.Format("%02X", slaveadd);
m3.Format("%02X", command);
GetDlgItemText(IDC_EDIT_SEND4,str0);
if(str0.GetLength() == 0 || str0.GetLength() < 2 || str0.GetLength() >= 3) {//判断数据高字节是否输入
MessageBox("请输入数据高字节!");
SetTimer(1,100,NULL);
return;
}
hdata = String2int(str0[0], str0[1]);
GetDlgItemText(IDC_EDIT_SEND5,str0);
if(str0.GetLength() == 0 || str0.GetLength() < 2 || str0.GetLength() >= 3) {//判断数据低字节是否输入
MessageBox("请输入数据低字节!");
SetTimer(1,100,NULL);
return;
}
ldata = String2int(str0[0], str0[1]);
if(command == 0x04) {//如果发送的修改从机地址的命令,则在ini文件中重新写入新的地址
//在slaveadd.ini中修改从机地址
CFile file_slaveadd("slaveadd.ini",CFile::modeCreate|CFile::modeWrite);
GetDlgItemText(IDC_EDIT_SEND5,str0);
file_slaveadd.Write("0x" + str0, strlen(str0) + 2);
file_slaveadd.Close();
//从startch.ini中修改开始字节数据
//CFile file_startch("startch.ini",CFile::modeCreate|CFile::modeWrite);//"0xff"
//GetDlgItemText(IDC_EDIT_SEND,str0);
//file_startch.Write("0x" + str0, strlen(str0) + 2);
//file_startch.Close();
}
m4.Format("%02X", hdata);
m5.Format("%02X", ldata);
check = slaveadd ^ command ^ hdata ^ ldata;
check &= 0x7f;
m_check = check;
UpdateData(false);
m6.Format("%02X", check);
int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
extern CString flag;
flag = "OnButtonSend";
m_com.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void COxcygenTestDlg::OnButtonSet()
{
// TODO: Add your control notification handler code here
CPortSet com;
com.DoModal();
}
void COxcygenTestDlg::OnButtonAdd()
{
// 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 = 0x0b;
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.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void COxcygenTestDlg::OnButtonDec()
{
// 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 = 0x0c;
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.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void COxcygenTestDlg::OnButtonFunc()
{
// 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 = 0x08;
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.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void COxcygenTestDlg::OnButtonOk()
{
// 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 = 0x09;
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.SetOutput(COleVariant(hexdata)); //发送查询数
SetTimer(1,100,NULL);
}
void COxcygenTestDlg::OnButtonQuit()
{
// TODO: Add your control notification handler code here
CDialog::OnOK();
}
void COxcygenTestDlg::OnButtonInfo()
{
// TODO: Add your control notification handler code here
CSlaveInfo info;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -