C#小练习:SerialPort读写操作
来源:互联网 发布:电脑打不开windows 编辑:程序博客网 时间:2024/05/20 23:07
上个礼拜做了一个使用C# SerialPort调试GSM模块的小练习,例子很简单。需要注意的是,SerialPort的配置必须正确,并且SerialPort的打开和读写可能需要等待一段时间(比如100ms)之后收到GSM模块的响应,也就是在这段时间内可能需要当前线程处于等待状态。
private void portConfigToolStripMenuItem_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { serialPort1.Close(); } using (Form2 frm = new Form2()) { if (frm.ShowDialog() == System.Windows.Forms.DialogResult.OK) { try { XDocument doc = XDocument.Load(frm.FileName); this.serialPort1.BaudRate = int.Parse(doc.Descendants("BaudRate").FirstOrDefault<XElement>().Value); this.serialPort1.DataBits = Convert.ToInt32(doc.Descendants("DataBits").FirstOrDefault<XElement>().Value); this.serialPort1.PortName = doc.Descendants("PortName").FirstOrDefault().Value; this.serialPort1.StopBits = (System.IO.Ports.StopBits)(Enum.Parse(typeof(System.IO.Ports.StopBits), doc.Descendants("StopBits").FirstOrDefault().Value)); } catch(Exception ex) { MessageBox.Show(ex.Message); } } } try { serialPort1.Open(); } catch(Exception ex) { MessageBox.Show(ex.Message); } System.Threading.Thread.Sleep(100); } private void Form1_Load(object sender, EventArgs e) { serialPort1.DataReceived += serialPort1_DataReceived; } void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { this.richTextBox1.Text += "Received>> " + this.serialPort1.ReadExisting() + "\r\n"; } private void button1_Click(object sender, EventArgs e) { if (!serialPort1.IsOpen) { MessageBox.Show("Please config the serial port firstly."); } else { serialPort1.Write(this.textBox1.Text); this.richTextBox1.Text += "Send>> " + this.textBox1.Text + "\r\n"; int idx = 0; if (serialPort1.BytesToRead == 0 && idx < 3) { System.Threading.Thread.Sleep(100); idx++; } } } private void saveToolStripMenuItem_Click(object sender, EventArgs e) { string filename = "log.txt"; if (File.Exists(filename)) { FileStream fs = new FileStream(filename, FileMode.Append); StreamWriter sw = new StreamWriter(fs); sw.Write(string.Format("\r\n==={0}===\r\n", DateTime.Now.ToFileTime()) + this.richTextBox1.Text); //fs.Close(); sw.Close(); } else { StreamWriter sw = new StreamWriter(filename); sw.Write(string.Format("\r\n==={0}===\r\n", DateTime.Now.ToFileTime()) + this.richTextBox1.Text); sw.Close(); } } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); }
serial port配置form的代码:
private bool loadConfigFile(string filename) { if (File.Exists(filename)) { XDocument doc = XDocument.Load(filename); try { this.textBox1.Text = doc.Descendants("BaudRate").FirstOrDefault<XElement>().Value; this.comboBox1.Text = doc.Descendants("DataBits").FirstOrDefault<XElement>().Value; this.comboBox2.Text = doc.Descendants("PortName").FirstOrDefault<XElement>().Value; this.comboBox3.Text = doc.Descendants("StopBits").FirstOrDefault<XElement>().Value; } catch { MessageBox.Show(string.Format("Config file {0} has been destoryed.", filename)); File.Delete(filename); return false; } return true; } else { return false; } } private void okbtn_Click(object sender, EventArgs e) { if (File.Exists(filename)) { XDocument doc = XDocument.Load(filename); try { doc.Descendants("BaudRate").FirstOrDefault<XElement>().Value = this.textBox1.Text; doc.Descendants("DataBits").FirstOrDefault<XElement>().Value = this.comboBox1.Text; doc.Descendants("PortName").FirstOrDefault<XElement>().Value = this.comboBox2.Text; doc.Descendants("StopBits").FirstOrDefault<XElement>().Value = this.comboBox3.Text; doc.Save(filename); } catch { MessageBox.Show(string.Format("Config file {0} has been destoryed.", filename)); File.Delete(filename); } } else { XDocument doc = new XDocument(); doc.Add(new XElement("PortConfig", new XElement("BaudRate", this.textBox1.Text), new XElement("DataBits", this.comboBox1.Text), new XElement("PortName", this.comboBox2.Text), new XElement("StopBits", this.comboBox3.Text))); doc.Save(filename); } } private void Form2_Load(object sender, EventArgs e) { loadConfigFile(filename); string[] ports; try { ports = SerialPort.GetPortNames(); comboBox2.Items.AddRange(ports); comboBox2.SelectedItem = comboBox2.Items[0]; } catch { MessageBox.Show("Failure occurs in get ports!"); this.cnlbtn.PerformClick(); } }
0 0
- C#小练习:SerialPort读写操作
- C# SerialPort 串口读写
- C#串口serialPort操作
- C#串口serialPort操作
- C#串口serialPort操作
- C#串口serialPort操作
- C#操作串口serialPort实例
- c#实现串口操作 SerialPort
- C# SerialPort 读写三菱FX系列PLC
- C# SerialPort 读写三菱FX系列PLC
- C# SerialPort 读写三菱FX系列PLC
- C#中SerialPort操作短信猫
- C# 使用serialport 控件读写串口的大数据量解决方案 -- 以及与串口操作中常见的错误
- Python小练习1:.txt文件常用读写操作
- 文件读写小练习
- C# serialport
- C#小练习
- C# List小练习
- 随机游走的PageRank算法 sensitive PageRank
- 考研数据结构与算法之堆栈的使用(三)利用堆栈匹配括号
- Best Time to Buy and Sell Stock II
- 图算法小总结(小Tip)
- 如何打开已经创建的MongoDB数据库
- C#小练习:SerialPort读写操作
- matlab 6.800e+0.03(已解决)
- opencv中的meanshift图像分割
- KM算法 详解+模板
- ubuntu server下调用boost::filesystem失败
- A^B = B^A
- Why 使用TLS记录协议封装IP层VPN IS A Bad Idea
- PBOC借贷记交易流程与命令解析(一)
- C++ MD5加密实现