前言

随着自动化技术的发展,触摸屏和上位机成为了自动化设备的标配。我们平时使用的触摸屏功能单一,随着一体式工业电脑的逐渐成熟,以及工业电脑的价格越来越低和普通工业触摸屏的价格相差不多。
越来越多的客户要求设备具有扫描枪、打印机、相机、激光代码、数据存储、安装第三方软件以及MES接口的功能。工业触摸屏在这方面的处理上稍显力不从心,支持这些功能的触摸屏价格往往很感人,所以工业电脑会逐步取代工业触摸屏。而功能强大的SCADA软件授权费更加感人,而且SCADA软件的更新严重滞后,稍微复杂点的功能你同样要借助第三方高级语言来实现(比如C、VB之类的),甚至很多软件还不支持第三方语言的支持。通过一段时间的了解我找到了免费开源的PCHMI。


一、PCHMI是什么?

PCHMI严格的讲它并不是一款组态软件,也不是一款SCADA软件,而是一个基于.NET构架的DLL文件,开发者可以使用微软的Visual Studio将PCHMI.DLL加载到工具箱里面进行二次开发。开发者不用去学习那些没有用的脚本语言,借助Visual Studio对多语言的支持。比如:C#、VB等。你只需要使用你最熟悉的那门语言,就可以对PCHMI进行复杂的二次开发。然这不是PCHMI的初衷,PCHMI作者已经将工业组态中最常用的功能进行了模块化封装。开发者只需要少量代码甚至不用写代码,通过对控件的拖拽就能完成一个复杂的组态软件的开发。不用专门去学PCHMI,开发过触摸屏软件的PLC工程师就可以直接上手使用。因为PCHMI的使用完全符合其它触摸屏软件的使用习惯。如果你使用过proface、威纶通、GT-Designer等触摸屏软件就能方便的切换到PCHMI上来。PCHMI作者的目的是要让每一位PLC工程师都能够轻松的使用PCHMI在上位机上开发出组态软件,享受调试PLC和HMI都能在同一台电脑上带来的高效率和快感。
PCHMI官网

二、使用步骤

1.引入

PCHMI的用户信息是写入在文本文件内,此次二次开发是要把用户信息保存在数据库以达到更高的安全性。选用的无需部署的轻量级数据库SQLite。

代码如下(示例):

using SqlSugar;
using DbType = SqlSugar.DbType;

2.创建方法获取数据库内用户名

获取数据库内用户名是为了避免用户名重复,创建用户时可以提示“用户已存在”

代码如下(示例):


            try
            {
                SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
                {
                    ConnectionString = "Data Source =" + Environment.CurrentDirectory + "/SystemInfo.db",
                    DbType = DbType.Sqlite,
                    IsAutoCloseConnection = true,
                });

                _userInfo = db.Queryable<Models.UserInfo>().AS("UserInfo").ToList();
                uiComboBox1.Items.Clear();
                foreach (var item in _userInfo)
                {
                    uiComboBox1.Items.Add(item.UserName);
                }

            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message);
            }
  

2.增加按钮事件

按下增加按钮将用户信息些写入数据库

代码如下(示例):


             try
            {
                if (UserName.Text == "")
                {
                    ShowErrorTip("请您输入用户名");
                    return;
                }
                if (PassWord1.Text == "")
                {
                    ShowErrorTip("请您输入密码");
                    return;
                }
                if (PassWord1.Text != PassWord2.Text)
                {
                    ShowErrorTip("您两次输入的密码不一致请重新确认");
                    return;
                }
                if (uiComboBox1.Items.Contains(UserName.Text))
                {
                    ShowErrorTip("用户名已存在,请重新输入");
                    return;
                }
                if (int.Parse(Level.Text) > 8)
                {
                    ShowErrorTip("请选择正确等级");;
                    return;
                }
                SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
                {
                    ConnectionString = "Data Source =" + Environment.CurrentDirectory + "/SystemInfo.db",
                    DbType = DbType.Sqlite,
                    IsAutoCloseConnection = true,
                });
                Models.UserInfo userInfo = new Models.UserInfo();
                userInfo.UserName = UserName.Text;
                userInfo.Password = PassWord1.Text;
                userInfo.Level = int.Parse(Level.Text);
                db.Insertable(userInfo).AS("UserInfo").ExecuteCommand();
                ShowSuccessTip("添加新用户成功!");
                GetUserName();
                UserName.Text = PassWord1.Text = PassWord2.Text = "";
                Level.SelectedIndex=0;
            }
            catch (Exception E)
            {
                MessageBox.Show(E.Message);
            }
  

增加用户页面如下增加用户窗口

总结

以上就是今天要讲的内容,本文仅仅简单介绍了对PCHMI的简单的二次开发,通过对数据库内保存的用户等级赋值给PCHMI的当前权限来实现权限操作,同时PCHMI提供了大量能使我们快速便捷地处理PLC数据的函数和方法。希望接下来能和小伙伴们共同维护好PCHMI。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐