自动化设备上位机设计 九

目录

一 设计原型

二 后台代码


一 设计原型

二 后台代码

using SimpleTCP;
using SqlSugar;
using System.IO.Ports;
using System.Text;

namespace 自动化上位机设计
{
    public partial class Form1 : Form
    {


        SqlHelper sqlHelper = new SqlHelper();
        SqlSugarClient dbContent = null;
        bool IsRun = false;
        int Count = 0;

        //数据收集对象
        EntryClass Datas = new EntryClass();

        //网络通讯客户端:长度测试仪器
        SimpleTcpClient client = new SimpleTcpClient(); //设备1
        SimpleTcpClient client2 = new SimpleTcpClient();//设备2
        SimpleTcpClient client3 = new SimpleTcpClient();//设备3
        SimpleTcpClient client4 = new SimpleTcpClient();//设备4

        //串口设备
        SerialPort serialPort = new SerialPort();
        SerialPort serialPort2 = new SerialPort();

        public Form1()
        {
            InitializeComponent();

            dbContent = sqlHelper.db;

            timer1.Enabled = true;
            timer1.Tick += Timer1_Tick;

            Task.Run(() =>
            {
                //设置编码格式,默认是UTF8
                client.StringEncoder = System.Text.ASCIIEncoding.UTF8;
                //设置分隔符,默认是0x13
                client.Delimiter = Encoding.ASCII.GetBytes("\r")[0];


                //设置编码格式,默认是UTF8
                client2.StringEncoder = System.Text.ASCIIEncoding.UTF8;
                //设置分隔符,默认是0x13
                client2.Delimiter = Encoding.ASCII.GetBytes("\r")[0];


                //设置编码格式,默认是UTF8
                client3.StringEncoder = System.Text.ASCIIEncoding.UTF8;
                //设置分隔符,默认是0x13
                client3.Delimiter = Encoding.ASCII.GetBytes("\r")[0];


                //设置编码格式,默认是UTF8
                client4.StringEncoder = System.Text.ASCIIEncoding.UTF8;
                //设置分隔符,默认是0x13
                client4.Delimiter = Encoding.ASCII.GetBytes("\r")[0];


                //初始化串口设备
                serialPort.PortName = "COM1";
                serialPort.BaudRate = 115200;
                serialPort.Parity = Parity.None;
                serialPort.DataBits = 8;
                serialPort.StopBits = StopBits.One;
                serialPort.DataReceived += (a, b) =>
                {
                    byte[] buffer = new byte[1024];
                    serialPort.Read(buffer, 0, buffer.Length);
                    string data = Encoding.UTF8.GetString(buffer);
                    //重量
                    Datas.Weit = data;
                };
                //初始化串口设备
                serialPort2.PortName = "COM3";
                serialPort2.BaudRate = 115200;
                serialPort2.Parity = Parity.None;
                serialPort2.DataBits = 8;
                serialPort2.StopBits = StopBits.One;
                serialPort2.DataReceived += (a, b) =>
                {
                    byte[] buffer = new byte[1024];
                    serialPort.Read(buffer, 0, buffer.Length);
                    string data = Encoding.UTF8.GetString(buffer);
                    //噪音
                    Datas.ZY = data;
                };





                //收到分割数据的事件,遇到分隔符就会触发事件
                client.DelimiterDataReceived += (sender, msg) =>
                {
                    AddLog("DelimiterStr-" + DateTime.Now.ToString() + msg.MessageString);
                };

                //收到数据的事件,可以在这里实现自己的协议
                client.DataReceived += (sender, msg) =>
                {
                    //字节数组
                    AddLog("字节数组Data:" + BitConverter.ToString(msg.Data));
                    //字符串消息
                    AddLog("字符串消息RDataseivedStr:" + msg.MessageString);

                    //记录长度数据
                    Datas.Len = msg.MessageString;
                };



                //收到分割数据的事件,遇到分隔符就会触发事件
                client2.DelimiterDataReceived += (sender, msg) =>
                {
                    AddLog("DelimiterStr-" + DateTime.Now.ToString() + msg.MessageString);
                };

                //收到数据的事件,可以在这里实现自己的协议
                client2.DataReceived += (sender, msg) =>
                {
                    //字节数组
                    AddLog("字节数组Data:" + BitConverter.ToString(msg.Data));
                    //字符串消息
                    AddLog("字符串消息RDataseivedStr:" + msg.MessageString);

                    //记录长度数据
                    Datas.Width = msg.MessageString;
                };



                //收到分割数据的事件,遇到分隔符就会触发事件
                client3.DelimiterDataReceived += (sender, msg) =>
                {
                    AddLog("DelimiterStr-" + DateTime.Now.ToString() + msg.MessageString);
                };

                //收到数据的事件,可以在这里实现自己的协议
                client3.DataReceived += (sender, msg) =>
                {
                    //字节数组
                    AddLog("字节数组Data:" + BitConverter.ToString(msg.Data));
                    //字符串消息
                    AddLog("字符串消息RDataseivedStr:" + msg.MessageString);

                    //记录长度数据
                    Datas.Hight = msg.MessageString;
                };




                //收到分割数据的事件,遇到分隔符就会触发事件
                client4.DelimiterDataReceived += (sender, msg) =>
                {
                    AddLog("DelimiterStr-" + DateTime.Now.ToString() + msg.MessageString);
                };

                //收到数据的事件,可以在这里实现自己的协议
                client4.DataReceived += (sender, msg) =>
                {
                    //字节数组
                    AddLog("字节数组Data:" + BitConverter.ToString(msg.Data));
                    //字符串消息
                    AddLog("字符串消息RDataseivedStr:" + msg.MessageString);

                    //记录数据
                    Datas.R = msg.MessageString;
                };



                client.Connect("127.0.0.1", 8899);
                client2.Connect("127.0.0.1", 8899);
                client3.Connect("127.0.0.1", 8899);
                client4.Connect("127.0.0.1", 8899);
                serialPort.Open();
                serialPort2.Open();

            });
        }

        private void Timer1_Tick(object? sender, EventArgs e)
        {
            this.Invoke(() =>
            {
                uiLedDisplay1.Text = DateTime.Now.ToString("HH:mm:ss");
            });
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            sqlHelper.CreateTable<EntryClass>();

            //开始批量插入数据
            Task.Run(() => { AddData(); });
        }

        private void AddData()
        {

            while (true)
            {
                if (!IsRun) continue;

                //Datas.Len = new Random().Next(200, 300).ToString();
                //Datas.Width = new Random().Next(40, 300).ToString();
                //Datas.Hight = new Random().Next(150, 250).ToString();

                // Datas.R = new Random().Next(10, 360).ToString();
                // Datas.Weit = new Random().Next(20, 30).ToString();
                //Datas.ZY = new Random().Next(50, 90).ToString();
                Datas.DC = new Random().Next(40, 300).ToString();
                Datas.DR = new Random().Next(400, 600).ToString();
                Datas.YL = new Random().Next(28, 88).ToString();
                Datas.WD = new Random().Next(89, 900).ToString();
                Datas.SD = new Random().Next(234, 454).ToString();
                Datas.LJ = new Random().Next(67, 89).ToString();

                //没有测量长度则不增加数据
                if (string.IsNullOrEmpty(Datas.Len) || string.IsNullOrEmpty(Datas.Width)
                    || string.IsNullOrWhiteSpace(Datas.Hight) || string.IsNullOrWhiteSpace(Datas.R) ||
                    string.IsNullOrWhiteSpace(Datas.Weit) || string.IsNullOrWhiteSpace(Datas.ZY)) continue;

                //数据放入数据库中
                dbContent.Insertable(Datas).ExecuteCommand();

                this.Invoke(() =>
                {
                    //同步展示参数
                    CD.Text = Datas.Len;
                    KD.Text = Datas.Width;
                    GD.Text = Datas.Hight;
                    JD.Text = Datas.R;
                    ZL.Text = Datas.Weit;
                    ZY.Text = Datas.ZY;
                    DY.Text = Datas.DC;
                    NZ.Text = Datas.DR;
                    PRESS.Text = Datas.YL;
                    CC.Text = Datas.WD;
                    SD.Text = Datas.SD;
                    LJJ.Text = Datas.LJ;

                    //参数展示到集合中
                    Data.Rows.Add(Datas.Len, Datas.Width, Datas.Hight, Datas.R, Datas.Weit, Datas.ZY,
                        Datas.DC, Datas.DR, Datas.YL, Datas.WD, Datas.SD, Datas.LJ,
                        DateTime.Now.ToShortTimeString(), "OK", "测试数据");

                    //计数
                    Count++;
                    uiLedDisplay2.Text = Count.ToString();

                    //打印日志
                    RunLog.AppendText("设备运行中,数据已加入到数据库\r\n");
                    ErorrLog.AppendText("设备运行中,数据已加入到数据库\r\n");
                    Log.AppendText("设备运行中,数据已加入到数据库\r\n");

                    //清空已经记录的数据
                    Datas.Len = "";
                    Datas.Width = "";
                    Datas.Hight = "";
                    Datas.R = "";
                    Datas.Weit = "";
                    Datas.ZY = "";

                });

                Thread.Sleep(2000);
            }
        }

        private void uiSwitch1_ValueChanged(object sender, bool value)
        {
            if (uiSwitch1.Active)
            {
                uiLight1.OnColor = Color.Green;
                IsRun = true;
                RunLog.AppendText("设备启动。。。\r\n");
                ErorrLog.AppendText("设备启动。。。\r\n");
                Log.AppendText("设备启动。。。\r\n");
            }
            else
            {
                uiLight1.OnColor = Color.Red;
                IsRun = false;
                RunLog.AppendText("设备停止。。。\r\n");
                ErorrLog.AppendText("设备停止。。。\r\n");
                Log.AppendText("设备停止。。。\r\n");
            }
        }



        private void AddLog(string msg)
        {
            this.Invoke(() =>
            {
                //打印日志
                RunLog.AppendText($"{msg}\r\n");
                ErorrLog.AppendText($"{msg}\r\n");
                Log.AppendText($"{msg}\r\n");
            });
        }
    }
}
using SqlSugar;

namespace 自动化上位机设计
{

    //实体与数据库结构一样
    //数据是自增需要加上IsIdentity
    //数据库是主键需要加上IsPrimaryKey
    //注意:要完全和数据库一致2个属性
    [SugarTable("EntryClass")]
    public class EntryClass
    {
        public string Len { get; set; }
        public string Width { get; set; }
        public string Hight { get; set; }
        public string R { get; set; }

        public string Weit { get; set; }
        public string ZY { get; set; }
        public string DC { get; set; }
        public string DR { get; set; }

        public string YL { get; set; }
        public string WD { get; set; }
        public string SD { get; set; }
        public string LJ { get; set; }
    }
}
using SqlSugar;

namespace 自动化上位机设计
{
    public class SqlHelper
    {

        public SqlSugarClient db = GetSql();

        /// <summary>
        /// 获得数据库对象
        /// </summary>
        /// <returns></returns>
        private static SqlSugarClient GetSql()
        {
            string FilePath = Environment.CurrentDirectory + @"\Config\Data.db";
            SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString = $"Data Source={FilePath}", // SQLite 连接字符串
                DbType = DbType.Sqlite, // 指定数据库类型为 SQLite
                IsAutoCloseConnection = true, // 自动关闭连接
                InitKeyType = InitKeyType.Attribute//从实体特性中读取主键自增列信息
            });

            // 创建数据库
            db.DbMaintenance.CreateDatabase();

            return db;
        }


        /// <summary>
        /// 创建数据表
        /// </summary>
        public void CreateTable<T>()
        {
            //两种方法都能创建表
            //db.CodeFirst.InitTables(typeof(Student));
            db.CodeFirst.InitTables<T>();
        }


    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值