📄 form1.cs
字号:
//数据转十六进制字符串。
string Hex = string.Empty;
for (int i = 0; i < data.Length; i++)
{
string tempstr = Convert.ToString(data[i], 16);
if (tempstr.Length < 2)
tempstr = '0' + tempstr;
Hex += tempstr + ' ';
}
Hex = Hex.ToUpper();
//使用委托跨线程读取数据。
rtbRecStr.Invoke(new EventHandler(delegate
{
DoingStr = true; //***正在处理字符串。
rtbRecStr.AppendText(Str);
if (cbAutoClr.Checked && rtbRecStr.Text.Length > 10000)
rtbRecStr.Text = string.Empty;
rtbRecStr.ScrollToCaret(); //将控件的内容滚动到当前位置。
DoingStr = false;
}
));
rtbRecHex.Invoke(new EventHandler(delegate
{
DoingHex = true; //***正在处理十六进制数据。
rtbRecHex.AppendText(Hex);
if (cbAutoClr.Checked && rtbRecHex.Text.Length > 10000)
rtbRecHex.Text = string.Empty;
rtbRecHex.ScrollToCaret(); //将控件的内容滚动到当前位置。
DoingHex = false;
}
));
while(DoingStr || DoingHex)
Application.DoEvents(); //处理串口接收事件及其它系统消息。
IsReceving =false; //***接收完成状态指示。
}
catch (Exception Err)
{
MessageBox.Show(Err.Message, "串口调试助手");
}
}
private void btClrRec_Click(object sender, EventArgs e)
{
rtbRecStr.Text = string.Empty;
rtbRecHex.Text = string.Empty;
ClrEncode();
}
private void rtbRecHex_MouseClick(object sender, MouseEventArgs e)
{
try
{
int idx = rtbRecHex.SelectionStart / 3;
idx *= 3;
if (rtbRecHex.Text.Length >= idx + 4 * 3)
{
rtbRecHex.Select(idx, 4 * 3);
string SubStr = rtbRecHex.Text.Substring(idx, 4 * 3);
lbHexData.Text = SubStr;
string[] TempStr = SubStr.Split(' ');
string[] Frm=new string[4];
if(rdBig.Checked)
{ //直接拷贝。
Array.Copy(TempStr, Frm, Frm.Length);
}
else
{ //前后交换。
Frm[0] = TempStr[3];
Frm[1] = TempStr[2];
Frm[2] = TempStr[1];
Frm[3] = TempStr[0];
}
//数据解码。
tbByte1.Text = Convert.ToString(Convert.ToByte(Frm[0], 16), 10);
tbByte2.Text = Convert.ToString(Convert.ToByte(Frm[1], 16), 10);
tbByte3.Text = Convert.ToString(Convert.ToByte(Frm[2], 16), 10);
tbByte4.Text = Convert.ToString(Convert.ToByte(Frm[3], 16), 10);
tbUInt16L.Text = Convert.ToString(Convert.ToUInt16(Frm[0] + Frm[1], 16), 10);
tbUInt16R.Text = Convert.ToString(Convert.ToUInt16(Frm[2] + Frm[3], 16), 10);
tbUInt32.Text = Convert.ToString(Convert.ToUInt32(Frm[0] + Frm[1] + Frm[2] + Frm[3], 16), 10);
tbSByte1.Text = Convert.ToString(Convert.ToSByte(Frm[0], 16), 10);
tbSByte2.Text = Convert.ToString(Convert.ToSByte(Frm[1], 16), 10);
tbSByte3.Text = Convert.ToString(Convert.ToSByte(Frm[2], 16), 10);
tbSByte4.Text = Convert.ToString(Convert.ToSByte(Frm[3], 16), 10);
tbInt16L.Text = Convert.ToString(Convert.ToInt16(Frm[0] + Frm[1], 16), 10);
tbInt16R.Text = Convert.ToString(Convert.ToInt16(Frm[2] + Frm[3], 16), 10);
tbInt32.Text = Convert.ToString(Convert.ToInt32(Frm[0] + Frm[1] + Frm[2] + Frm[3], 16), 10);
}
else
{
ClrEncode();
}
}
catch (Exception Err)
{
MessageBox.Show(Err.Message, "串口调试助手");
}
}
private void rdBig_CheckedChanged(object sender, EventArgs e)
{
rtbRecHex_MouseClick(null, null); //重新刷新数据解码。
}
private void cbDefFrm_CheckedChanged(object sender, EventArgs e)
{
if (cbDefFrm.Checked)
{
gpDefFrm.Enabled = true;
}
else
{
gpDefFrm.Enabled = false;
}
}
private void cbTimeHex_CheckedChanged(object sender, EventArgs e)
{
try
{
if (cbTimeHex.Checked)
{
//禁止Str自动发送。
cbTimeStr.Checked = false;
int t=int.Parse(tbTimeHex.Text);
if (t < 5)
{
t = 5;
tbTimeHex.Text = Convert.ToString(t,10);
}
//起动Hex自动发送。
tbTimeHex.Enabled = false;
TimeHex.Enabled = true;
TimeHex.Interval = t;
TimeHex.Start();
}
else
{
TimeHex.Stop();
TimeHex.Enabled = false;
tbTimeHex.Enabled = true;
}
}
catch (Exception Err)
{
MessageBox.Show("定时值不正确!" + Err.Message, "串口调试助手");
}
}
private void cbTimeStr_CheckedChanged(object sender, EventArgs e)
{
try
{
if (cbTimeStr.Checked)
{
//禁止Hex自动发送。
cbTimeHex.Checked = false;
int t = int.Parse(tbTimeStr.Text);
if (t < 5)
{
t = 5;
tbTimeStr.Text = Convert.ToString(t,10);
}
//启动Str自动发送。
tbTimeStr.Enabled = false;
TimeStr.Enabled = true;
TimeStr.Interval = t;
TimeStr.Start();
}
else
{
TimeStr.Stop();
TimeStr.Enabled = false;
tbTimeStr.Enabled = true;
}
}
catch (Exception Err)
{
MessageBox.Show("定时值不正确!" + Err.Message, "串口调试助手");
}
}
private void btCmd1_Click(object sender, EventArgs e)
{
CmdClick(1);
}
private void btCmd2_Click(object sender, EventArgs e)
{
CmdClick(2);
}
private void btCmd3_Click(object sender, EventArgs e)
{
CmdClick(3);
}
private void btCmd4_Click(object sender, EventArgs e)
{
CmdClick(4);
}
private void btCmd5_Click(object sender, EventArgs e)
{
CmdClick(5);
}
private void cmPort_SelectedIndexChanged(object sender, EventArgs e)
{
ReOpenPort();
}
private void cmBaudRate_SelectedIndexChanged(object sender, EventArgs e)
{
ReOpenPort();
}
private void cmDataBit_SelectedIndexChanged(object sender, EventArgs e)
{
ReOpenPort();
}
private void cmParity_SelectedIndexChanged(object sender, EventArgs e)
{
ReOpenPort();
}
private void cmStopBit_SelectedIndexChanged(object sender, EventArgs e)
{
ReOpenPort();
}
private void TimeHex_Tick(object sender, EventArgs e)
{
try
{
int[] Len ={ tbCmd1.Text.Length,tbCmd2.Text.Length,tbCmd3.Text.Length,tbCmd4.Text.Length,tbCmd5.Text.Length};
int j = 0;
int OldIdx=CmdIdx;
for (int i = OldIdx; i<OldIdx+5; i++)
{
CmdIdx %= 5;
j = i % 5;
if (CmdIdx == j)
{
CmdIdx++;
if (Len[j] > 0)
{
CmdClick(CmdIdx);
return;
}
}
}
}
catch (Exception Err)
{
MessageBox.Show("定时发送错误!" + Err.Message, "串口调试助手");
cbTimeHex.Checked = false;
}
}
private void TimeStr_Tick(object sender, EventArgs e)
{
try
{
btSend_Click(null, null);
}
catch (Exception Err)
{
MessageBox.Show("定时发送错误!" + Err.Message, "串口调试助手");
cbTimeStr.Checked = false;
}
}
private void tbDec_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r') //回车键
IntToHex(); //转换为Hex。
}
private void tbDec_Leave(object sender, EventArgs e)
{
IntToHex();
}
private void tbHex_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '\r') //回车键
{
while (tbHex.Text.Length < 8)
tbHex.Text = '0' + tbHex.Text;
HexToInt(); //转换为Dec。
}
}
private void tbHex_Leave(object sender, EventArgs e)
{
while (tbHex.Text.Length < 8)
tbHex.Text = '0' + tbHex.Text;
HexToInt(); //转换为Dec。
}
private void btClose_Click(object sender, EventArgs e)
{
StopAutoSend(); //停止自动发送。
ClosePort(); //安全关闭串口。
if (!sComm.IsOpen)
{
btOpen.Enabled = true;
btClose.Enabled = false;
lbComStat.Text = "已关闭";
}
}
private void btQuit_Click(object sender, EventArgs e)
{
btClose_Click(null, null);
this.Close();
}
//===================================================
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -