上位机的模板展示和学习上位机的心得体会

上位机,从广义的角度来说,一切可以和下位机进行通信的HMI都可以称作为上位机,从狭义的角度来说,是指采用计算机高级语言编写的上层监控系统,这里常用的编程语言包括C++、JAVA、Python、C#,毋庸置疑,在工控行业,最适合工控上位机开发的编程语言莫过于微软旗下的C#语言。

下面是我用C#语言编写的一个上位机模板(课堂上跟老师学习的)

一、界面展示

 二,代码展示

1、 MainForm : Form下的定义和代码


        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);   // 系统dll导入ini写函数
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);  // 系统dll导入ini读函数

        string FileName = System.AppDomain.CurrentDomain.BaseDirectory + "Backup.ini";        // ini 文件名

        StringBuilder BackupBuf = new StringBuilder(50);//存储读出ini内容变量

        private bool isRxShow = true;
        private string strRead;

2、主界面的代码

private void MainForm_Load(object sender, EventArgs e)
        {
            SerialPortInit();

            chbCheckCRC.Enabled = false;

            // 恢复发送栏
            GetPrivateProfileString("串口1", "发送栏", "", BackupBuf, 50, FileName);
            txtSendInfo.Text = BackupBuf.ToString();

        }
 public MainForm()
        {
            InitializeComponent();
            serialPort1.Encoding = Encoding.GetEncoding("GB2312");  //支持汉字
            //System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
        }

3、 private void SerialPortInit()的代码

private void SerialPortInit()
        {
            RefreshSerialportList(cmbSerialPort);

            string[] baudRates = { "4800", "9600", "115200" };
            cmbBaudRate.Items.AddRange(baudRates);
            cmbBaudRate.SelectedIndex = 1;

            string[] dataBits = { "5", "6", "7", "8" };
            cmbDataBits.Items.AddRange(dataBits);
            cmbDataBits.SelectedIndex = 3;

            string[] stopBits = { "One", "OnePointFive", "Two" };
            cmbStopBits.Items.AddRange(stopBits);
            cmbStopBits.SelectedIndex = 0;

            string[] parity = { "None", "Even", "Odd", "Mark", "Space" };
            cmbParity.Items.AddRange(parity);
            cmbParity.SelectedIndex = 0;
        }

由于代码太多我就不一一说明了,有什么大家自己开代码就知道了


        private void AppendTextToInfoBox(string text, TextBox textBox)
        {
            textBox.AppendText(text);
        }
 private void RefreshSerialportList(ComboBox comboBox)
        {
            // 本地设备注册表中获取串口列表: 枚举计算机上可用的串口
            RegistryKey keyCom = Registry.LocalMachine.OpenSubKey(@"Hardware\DeviceMap\SerialComm");
            string[] sSubKeys = keyCom.GetValueNames();

            string BackupPort;

            // 恢复串口号
            GetPrivateProfileString("串口1", "端口号", "", BackupBuf, 50, FileName);
            BackupPort = BackupBuf.ToString();


            comboBox.Items.Clear(); // 清空串口列表

            // 添加端口号
            foreach (var sValue in sSubKeys)
            {

                try
                {
                    string portName = (string)keyCom.GetValue(sValue);
                    comboBox.Items.Add(portName);

                    //检测备份端口号是否有效,端口号初始化为备份端口号
                    if (BackupPort == portName)
                    {
                        comboBox.Text = BackupPort;
                    }

                    //如果备份端口号无效,端口号初始化为第一个可用端口号
                    if (comboBox.Text == "")
                        comboBox.Text = portName;
                }
                catch
                {

                }

            }
            // 设置默认显示的串口号
            if (cmbSerialPort.Items.Count > 0)
            {
                comboBox.SelectedIndex = 0;
            }
            // 没有可用端口号时进行提示
            else
            {
                AppendTextToInfoBox("[" + DateTime.Now.ToString("HH:mm;ss") + "]" + "-> ", txtRecvInfo);
                AppendTextToInfoBox("没检测到可用串口!\r\n", txtRecvInfo);
            }

            //备份端口号 
            WritePrivateProfileString("串口1", "端口号", comboBox.Text, FileName);

        }

扫描串口按键的代码

private void btnRefreshSerialPor_Click(object sender, EventArgs e)
        {
            // 先关闭串口
            if (serialPort1.IsOpen == true)
            {
                serialPort1.Close();
                btnOpenOrClose.Text = "打开串口";
                AppendTextToInfoBox("[" + DateTime.Now.ToString("HH:mm:ss") + "]" + "->", txtRecvInfo);
                AppendTextToInfoBox("扫描和添加串口时,关闭串口。\r\n", txtRecvInfo);
            }

            // 再扫描添加串口
            RefreshSerialportList(cmbSerialPort);
        }

打开串口按键的代码

  private void btnOpenOrClose_Click(obje
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值