【发布时间】:2020-09-22 17:43:14
【问题描述】:
我正在制作一个 C# 表单应用程序,该应用程序接收来自以波特率 2400、无奇偶校验、8 位数据、1 个停止位进行通信的仪器的数据。 数据以 [000000][000000][000000] 形式出现在连续的字符串行中。例如,如果在一个过程中,仪器上的读数变化为 0.50,0.49,0.72,0.61,0.48,那么接收到的数据字符串将为 [000050][000049][000072][000061][000048],这就是它目前正在文本框中显示。
我需要以正确的格式将程序期间达到的最大值显示到文本框中,例如在本例中它应该是 0.72。我不知道代码是什么。
下面是我目前的串口通信代码。
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void Main_Load(object sender, EventArgs e)
{
}
//this is the button to open port.
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
button2.Enabled = true;
try
{
serialPort1.PortName = comboBox1.Text;
serialPort1.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//Event handler for data received.
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Regex rx = new Regex(@"\[(\d+)\]");
double.TryParse(richTextBox2.Text, out double max);
foreach (Match match in rx.Matches(indata))
{
double val = int.Parse(match.Groups[1].Value) / 100.0;
if (val > max)
max = val;
}
richTextBox2.Text = max.ToString();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
//this is the button to close port
private void button2_Click(object sender, EventArgs e)
{
button1.Enabled = true;
button2.Enabled = false;
try
{
serialPort1.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void button3_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.DataReceived += DataReceivedHandler;
}
else
{
MessageBox.Show("Error : Port needs to be open or wrong port selected!");
}
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen)
serialPort1.Close();
}
private void button4_Click(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();
comboBox1.Items.AddRange(ports);
comboBox1.SelectedIndex = 0;
button2.Enabled = false;
}
【问题讨论】:
-
这个
[000050][000049][000072][000061][000048]怎么代表一个日期?您可能需要参考仪器的 API 编程手册。每个块可能都有一个含义,例如:[000050] -
大概如果你得到的读数是 000356,它会被表示为 3.56?换句话说,末尾的 2 个数字代表小数,小数之前的数字是十、百等。
-
是的,最后两个数字在小数点后,其余前四个分别代表单位,十、百、千。这是一个体重秤。如果它给出 [123456] 那么它必须被读作 1234.56
标签: c# dataframe serialization serial-port