赞
踩
C#开发上位机网上资料五花八门,为了方便自己开发需要,自己动手记录认为比较重要的关键点。
首先,粗略规定当前界面的大小,利用TableLayoutPanel控件,Dock属性Fill-填充整个布局界面,这样保证边框拉伸最大化保持界面。其次,通过设计需求,放置不同的容器、文本、图像控件,并设置控件的ColumnSpan、RowSpan属性,调整控件的列行跨度。并在对应的区域放置Button、label、TextBox等控件即可。完成整个上位机的界面设计。
串口扫描:通过C#提供的计时器类进行定时-2s扫描串口,将可用串口实时显示到当前comboBox控件。
- #region 串口扫描 显示可用串口 通过TimerScan的Enabed属性进行启动OR停止
-
- System.Windows.Forms.Timer TimerScan = new System.Windows.Forms.Timer();
-
- private void TimerScanInit()
- {
- TimerScan.Interval = 2000;
- TimerScan.Tick += new EventHandler(TimerScan_Tick);
- TimerScan.Enabled = true;
- }
-
- private void TimerScan_Tick(object sender, EventArgs e)
- {
- comboBox1.Items.Clear(); //先清理
- string[] ports = SerialPort.GetPortNames();
- comboBox1.Items.AddRange(ports);
- if (ports.Length > 0)
- {
- comboBox1.SelectedItem = ports[0];
- }
- }
-
- #endregion
打开串口与接收函数:
- #region 打开串口
- private static SerialPort sPort=new SerialPort(); //实例化串口类
-
- public static void Port_OpenOrClose()
- {
- try
- {
- if (!sPort.IsOpen)
- {
- sPort.PortName = PortName;
- sPort.BaudRate = BaudRate;
- sPort.DataBits = 8;
- sPort.StopBits = StopBits.One;
- sPort.Parity = Parity.None;
- sPort.Handshake = Handshake.None;
- sPort.DataReceived += Port_DataReceived;
- sPort.Open();
- }
- else
- {
- sPort.Close();
- }
- }
- catch (Exception e)
- {
- Console.WriteLine(ex.Message);
- }
- }
- #endregion
- #region 串口接收、发送函数
-
- private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
- {
- byte[] _revData = new byte[1024];
- int _len= sPort.BytesToRead;
- sPort.Read(_revData , 0, _revData.Length);
-
- //处理代码、干活 可以利用多线程、队列进行处理大量数据
- //委托刷新主界面图像
- this.Invoke(new Action(() =>
- {
-
- }));
-
- }
- public static void Port_Send(byte[] _sendData)
- {
- sPort.Write(_sendData,0,_sendData.Length);
- }
- #endregion
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。