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
待续》》》