⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fx2ndlg.cpp

📁 三菱PLC与PC通讯程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:

		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 + -