1.目标:实现数据的收发
2.代码演示
根据控件编程
(1)接收配置
自动清空
private void autoclear_chb_CheckedChanged(object sender, EventArgs e)
{
if (autoclear_chb.Checked)
{
timer1.Start();
}
else
{
timer1.Stop();
}
}
手动清空
private void Manual_clear_btn_Click(object sender, EventArgs e)
{
reciveBuffer.Clear();
Receive_count_tssl.Text = "";
Receive_rtb.Text = "";
}
十六进制
private void Receive_Hex_chb_CheckedChanged(object sender, EventArgs e)
{
if (Receive_rtb.Text == "") return;
if (Receive_Hex_chb.Checked)
{
Receive_rtb.Text = Transform.ToHexString(reciveBuffer.ToArray(), " ");
}
else
{
Receive_rtb.Text = Encoding.GetEncoding("gb2312").GetString(reciveBuffer.ToArray()).Replace("\0", "\\0");
}
}
暂停
private void Receive_Stop_btn_Click(object sender, EventArgs e)
{
if (isRxShow == true)
{
isRxShow = false;
Receive_Stop_btn.Text = "取消暂停";
}
else
{
isRxShow = true;
Receive_Stop_btn.Text = "暂停";
}
}
(2)发送配置
自动发送
private void autosend_chb_CheckedChanged(object sender, EventArgs e)
{
// 串口未打开
if(serialPort1.IsOpen==false && autosend_chb.CheckState == CheckState.Checked)
{
autosend_chb.CheckState = CheckState.Unchecked;
if(timer2!=null)
{
timer2.Enabled = false;
timer2.Stop();
// timer2 = null;
}
MessageBox.Show("发送失败,串口未打卡");
return;
}
// 串口打开
if (serialPort1.IsOpen == true && autosend_chb.CheckState == CheckState.Checked)
{
autotimer_txb.Enabled = false;
send_btn.Enabled = false;
int i = Convert.ToInt32(autotimer_txb.Text);
if (i < 10 || i>60*1000)
{
i = 1000;
autotimer_txb.Text = "1000";
MessageBox.Show("自动发送数据的周期范围是10-60000毫秒", "警告");
}
timer2.Interval = i;
timer2.Start();
}
else
{
send_btn.Enabled = true;
autotimer_txb.Enabled = true;
if(timer2!=null)
{
timer2.Stop();
//timer2 = null;
}
}
}
手动发送
private void Manual_Send_btn_Click(object sender, EventArgs e)
{
// 如果发送的数据不为空,则接收
if (this.Send_rtb.Text != "" && serialPort1.IsOpen)
{
Console.WriteLine(Transform.ToHexString(sendBuffer.ToArray()));
sendData();
}
else
{
MessageBox.Show("请先输入发送数据!");
}
}
十六进制
private void Send_Hex_chb_CheckedChanged(object sender, EventArgs e)
{
if(Send_rtb.Text == "") return;
if (Send_Hex_chb.Checked == true)
{
Send_rtb.Text = Transform.ToHexString(sendBuffer.ToArray(), " ");
}
else
{
Send_rtb.Text = Encoding.GetEncoding("gb2312").GetString(sendBuffer.ToArray()).Replace("\0", "\\0");
}
}
清空发送
private void Send_clear_btn_Click(object sender, EventArgs e)
{
sendBuffer.Clear();
Send_rtb.Text = "";
sendCount = 0;
Receive_count_tssl.Text = "0";
}
3.效果展示
代码看不懂,去Deepseek
待续》》》