📄 fx2ndlg.cpp
字号:
k=0;
safearray_inp.GetElement(&k,rxdata);
if(rxdata[0]==0x06)
MessageBox("正确");
else if(rxdata[0]==0x15)
MessageBox("错误");
else
MessageBox("??");
}
// UpdateData(FALSE);
}
void CFX2nDlg::OnButton2()
{
// TODO: Add your control notification handler code here
m_word = 0;
m_bit = 0;
m_address = 0;
m_wordnum = 1;
// m_value = 0;
m_addressbit = 1;
UpdateData(FALSE);
CDialog::OnOK();
}
void CFX2nDlg::OnButton3()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CByteArray send_data;
BYTE commstr[11];//={0x02,0x30,0x31,0x30,0x46,0x36,0x30,0x34,0x03,0x37,0x34};
commstr[0]=0x02;
commstr[1]=0x30;
switch(m_word)
{
case 0://D 16位
{
int m_addressH=0x1000+m_address*2;
Ascii(&commstr[2],m_addressH);//commstr 2,3,4,5 地址
Ascii2(&commstr[6],m_wordnum*2);//commstr 6,7 个数
commstr[8]=0x03;
Ascii3(&commstr[9],&commstr[1],8);
m_com.SetRThreshold(4+m_wordnum*4);
for(int i=0;i<11;i++)
{
send_data.Add(commstr[i]);
}
m_com.SetOutput(COleVariant(send_data));
}
break;
case 1://T 8位 32个
{
if(m_address+m_wordnum>32)
{
MessageBox("范围过大");
return;
}
int m_addressH=0xc0+m_address;//8位
Ascii(&commstr[2],m_addressH);//commstr 2,3,4,5 地址
Ascii2(&commstr[6],m_wordnum);//commstr 6,7 个数
commstr[8]=0x03;
Ascii3(&commstr[9],&commstr[1],8);
m_com.SetRThreshold(4+m_wordnum*2);
for(int i=0;i<11;i++)
{
send_data.Add(commstr[i]);
}
m_com.SetOutput(COleVariant(send_data));
}
break;
case 2://C 16位 16个
{
if(m_address+m_wordnum>16)
{
MessageBox("范围过大");
return;
}
int m_addressH=0x1c0+m_address*2;
Ascii(&commstr[2],m_addressH);//commstr 2,3,4,5 地址
Ascii2(&commstr[6],m_wordnum*2);//commstr 6,7 个数
commstr[8]=0x03;
Ascii3(&commstr[9],&commstr[1],8);
m_com.SetRThreshold(4+m_wordnum*4);
for(int i=0;i<11;i++)
{
send_data.Add(commstr[i]);
}
m_com.SetOutput(COleVariant(send_data));
}
break;
case 3://s 24bit 0x000
{
if(m_address+m_wordnum>44)
{
MessageBox("范围过大");
return;
}
int m_addressH=m_address*3;//24位
Ascii(&commstr[2],m_addressH);//commstr 2,3,4,5 地址
Ascii2(&commstr[6],m_wordnum*3);//commstr 6,7 个数
commstr[8]=0x03;
Ascii3(&commstr[9],&commstr[1],8);
m_com.SetRThreshold(4+m_wordnum*6);
for(int i=0;i<11;i++)
{
send_data.Add(commstr[i]);
}
m_com.SetOutput(COleVariant(send_data));
}
break;
case 4://m 16
{
if(m_address+m_wordnum>64)
{
MessageBox("范围过大");
return;
}
int m_addressH=0x100+m_address*2;
Ascii(&commstr[2],m_addressH);//commstr 2,3,4,5 地址
Ascii2(&commstr[6],m_wordnum*2);//commstr 6,7
commstr[8]=0x03;
Ascii3(&commstr[9],&commstr[1],8);
m_com.SetRThreshold(4+m_wordnum*4);
for(int i=0;i<11;i++)
{
send_data.Add(commstr[i]);
}
m_com.SetOutput(COleVariant(send_data));
}
break;
case 5://y 8 0xa0
{
if(m_address+m_wordnum>32)
{
MessageBox("范围过大");
return;
}
int m_addressH=0xa0+m_address;//8位
Ascii(&commstr[2],m_addressH);//commstr 2,3,4,5 地址
Ascii2(&commstr[6],m_wordnum);//commstr 6,7 个数
commstr[8]=0x03;
Ascii3(&commstr[9],&commstr[1],8);
m_com.SetRThreshold(4+m_wordnum*2);
for(int i=0;i<11;i++)
{
send_data.Add(commstr[i]);
}
m_com.SetOutput(COleVariant(send_data));
}
break;
case 6://x 8 0x80
{
if(m_address+m_wordnum>32)
{
MessageBox("范围过大");
return;
}
int m_addressH=0x80+m_address;//8位
Ascii(&commstr[2],m_addressH);//commstr 2,3,4,5 地址
Ascii2(&commstr[6],m_wordnum);//commstr 6,7 个数
commstr[8]=0x03;
Ascii3(&commstr[9],&commstr[1],8);
m_com.SetRThreshold(4+m_wordnum*2);
for(int i=0;i<11;i++)
{
send_data.Add(commstr[i]);
}
m_com.SetOutput(COleVariant(send_data));
}
break;
default:
break;
}
}
void CFX2nDlg::Ascii(BYTE *data, int i)//16位
{
BYTE b=i&0xf;
data[3]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>4)&0xf;
data[2]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>8)&0xf;
data[1]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>12)&0xf;
data[0]=(b<10)?(b+0x30):(b+0x41-0xa);
}
void CFX2nDlg::Ascii2(BYTE *data, int i)//8位
{
BYTE b=i&0xf;
data[1]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>4)&0xf;
data[0]=(b<10)?(b+0x30):(b+0x41-0xa);
}
void CFX2nDlg::Ascii3(BYTE *datades, BYTE *datascr, int len)//算校验码
{
int a=0;
for(int i=0;i<len;i++)
{
a+=(*(datascr+i));
}
Ascii2(datades,a);
}
void CFX2nDlg::OnButton4()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString str;
GetDlgItem(IDC_EDIT3)->GetWindowText(str);
int m_value;
if(m_hex)
{
HexToDec(str,&m_value);
}
else
{
m_value=atoi(str);
}
CByteArray send_data;
switch(m_word)
{
case 0://写d 16位
{
BYTE commstr[15];
commstr[0]=0x02;
commstr[1]=0x31;
Ascii(&commstr[2],m_address*2+0x1000);//2,3,4,5地址
commstr[6]=0x30;
commstr[7]=0x32;
valueAscii(&commstr[8],m_value);//8,9,10,11 值
commstr[12]=0x03;
Ascii3(&commstr[13],&commstr[1],12);
for (int i=0;i<15;i++)
{
send_data.Add(commstr[i]);
}
}
break;
case 1://写T 8位
{
BYTE commstr[13];
commstr[0]=0x02;
commstr[1]=0x31;
Ascii(&commstr[2],m_address+0xc0);//2,3,4,5地址
commstr[6]=0x30;
commstr[7]=0x31;
Ascii2(&commstr[8],m_value);//8,9 值
commstr[10]=0x03;
Ascii3(&commstr[11],&commstr[1],10);
for (int i=0;i<13;i++)
{
send_data.Add(commstr[i]);
}
}
break;
case 2://C 16位 0x1c0
{
BYTE commstr[15];
commstr[0]=0x02;
commstr[1]=0x31;
Ascii(&commstr[2],m_address*2+0x1c0);//2,3,4,5地址
commstr[6]=0x30;
commstr[7]=0x32;
valueAscii(&commstr[8],m_value);//8,9,10,11 值
commstr[12]=0x03;
Ascii3(&commstr[13],&commstr[1],12);
for (int i=0;i<15;i++)
{
send_data.Add(commstr[i]);
}
}
break;
case 3://s 24 0x000
{
BYTE commstr[17];
commstr[0]=0x02;
commstr[1]=0x31;
Ascii(&commstr[2],m_address*3);//2,3,4,5地址
commstr[6]=0x30;
commstr[7]=0x33;
valueAscii24bit(&commstr[8],m_value);//8,9,10,11,12,13 值
commstr[14]=0x03;
Ascii3(&commstr[15],&commstr[1],14);
for (int i=0;i<17;i++)
{
send_data.Add(commstr[i]);
}
}
break;
case 4://m 16 0x100
{
BYTE commstr[15];
commstr[0]=0x02;
commstr[1]=0x31;
Ascii(&commstr[2],m_address*2+0x100);//2,3,4,5地址
commstr[6]=0x30;
commstr[7]=0x32;
valueAscii(&commstr[8],m_value);//8,9,10,11 值
commstr[12]=0x03;
Ascii3(&commstr[13],&commstr[1],12);
for (int i=0;i<15;i++)
{
send_data.Add(commstr[i]);
}
}
break;
case 5://y 8 0xa0
{
BYTE commstr[13];
commstr[0]=0x02;
commstr[1]=0x31;
Ascii(&commstr[2],m_address+0xa0);//2,3,4,5地址
commstr[6]=0x30;
commstr[7]=0x31;
Ascii2(&commstr[8],m_value);//8,9 值
commstr[10]=0x03;
Ascii3(&commstr[11],&commstr[1],10);
for (int i=0;i<13;i++)
{
send_data.Add(commstr[i]);
}
}
break;
case 6://x 8 0x80
{
BYTE commstr[13];
commstr[0]=0x02;
commstr[1]=0x31;
Ascii(&commstr[2],m_address+0x80);//2,3,4,5地址
commstr[6]=0x30;
commstr[7]=0x31;
Ascii2(&commstr[8],m_value);//8,9 值
commstr[10]=0x03;
Ascii3(&commstr[11],&commstr[1],10);
for (int i=0;i<13;i++)
{
send_data.Add(commstr[i]);
}
}
break;
default:
break;
}
m_com.SetRThreshold(1);
m_com.SetOutput(COleVariant(send_data));
}
void CFX2nDlg::valueAscii(BYTE *data, int i)//16位,低位在前,高位在后
{
BYTE b=i&0xf;
data[1]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>4)&0xf;
data[0]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>8)&0xf;
data[3]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>12)&0xf;
data[2]=(b<10)?(b+0x30):(b+0x41-0xa);
}
void CFX2nDlg::OnButton5()
{
UpdateData(TRUE);
CByteArray send_data;
BYTE commstr[9];
commstr[0]=0x02;
commstr[1]=0x37;
int m_addressH=0x500+m_addressbit;//m_addressbit/8+0x100;
valueAscii(&commstr[2],m_addressH);//commstr[2,3,4,5]地址
commstr[6]=0x03;
Ascii3(&commstr[7],&commstr[1],6);
for (int i=0;i<9;i++)
{
send_data.Add(commstr[i]);
}
m_com.SetRThreshold(1);
m_com.SetOutput(COleVariant(send_data));
// UpdateData(TRUE);
}
void CFX2nDlg::HexToDec(CString str, int *i)
{
(*i)=0;
str.MakeUpper();
int a=str.GetLength();
for (int z=0;z<a;z++)
{
BYTE b=(str[z]-0x30)<10?(str[z]-0x30):(str[z]-0x41+10);
if(b>15||b<0)
{
(*i)=0;
return;
}
(*i)+=(b*pow(16,(a-z-1)));
}
return;
}
void CFX2nDlg::valueAscii24bit(BYTE *data, int i)
{
BYTE b=i&0xf;
data[1]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>4)&0xf;
data[0]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>8)&0xf;
data[3]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>12)&0xf;
data[2]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>16)&0xf;
data[5]=(b<10)?(b+0x30):(b+0x41-0xa);
b=(i>>20)&0xf;
data[4]=(b<10)?(b+0x30):(b+0x41-0xa);
}
void CFX2nDlg::OnRadio8()
{
// TODO: Add your control notification handler code here
}
void CFX2nDlg::OnButton6()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_com.SetCommPort(m_comnum+1);
m_com.SetSettings("9600,e,7,1");
m_com.SetInputMode(1);
// m_com.SetRThreshold(8);
m_com.SetInBufferSize(1024);
m_com.SetOutBufferSize(1024);
if(!m_com.GetPortOpen())
m_com.SetPortOpen(TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -