自动化设备上位机设计 四

news2024/11/23 8:59:55

目录

一 设计原型

二 后台代码


一 设计原型

二 后台代码

using SimpleTCP;
using SqlSugar;
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();

        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];


                //收到分割数据的事件,遇到分隔符就会触发事件
                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;
                };

                client.Connect("127.0.0.1", 8899);
            });
        }

        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)) 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");

                });

                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");
            });
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1904786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL基础篇】多表查询

1、多表关系 概述&#xff1a;项目开发中&#xff0c;在进行数据库表结构操作设计时&#xff0c;会根据业务需求及业务模板之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分为三种…

react dangerouslySetInnerHTML将html字符串以变量方式插入页面,点击后出现编辑状态

1.插入变量 出现以下编辑状态 2.解决 给展示富文本的标签添加css样式 pointerEvents: none

windows上传app store的构建版本简单方法

我们在上传app store上架&#xff0c;或上传到testflight进行ios的app测试的时候&#xff0c;需要mac下的上传工具上传ipa文件到app store的构建版本上。 然而windows电脑这些工具是无法安装的。 因此&#xff0c;假如在windows上开发hbuilderx或uniapp的应用&#xff0c;可以…

【JavaEE】多线程进阶

&#x1f921;&#x1f921;&#x1f921;个人主页&#x1f921;&#x1f921;&#x1f921; &#x1f921;&#x1f921;&#x1f921;JavaEE专栏&#x1f921;&#x1f921;&#x1f921; 文章目录 1.锁策略1.1悲观锁和乐观锁1.2重量级锁和轻量级锁1.3自旋锁和挂起等待锁1.4可…

分子AI预测赛Task4笔记(结束)

话不多说&#xff0c;直接上官方链接&#xff1a;‌​​​‍&#xfeff;​⁠​‌​‍​​&#xfeff;​‌​⁠‬​&#xfeff;‬​​‌​​​​‬‬​​​​‍⁠‍‌​&#xfeff;⁠Task3&#xff1a;进阶baseline详解 - 飞书云文档 (feishu.cn)Task4&#xff1a;持续尝试&…

嵌入式C语言面试相关知识——内存管理(不定期更新)

嵌入式C语言面试相关知识——内存管理&#xff08;不定期更新&#xff09; 一、博客声明二、自问题目1、嵌入式系统的内存布局是怎么样的&#xff1f;2、动态内存分配在嵌入式系统中的使用有什么注意事项&#xff1f;3、什么是内存碎片&#xff0c;如何减少内存碎片&#xff1f…

用ThreadLocal解决线程隔离问题

存在的以下代码所示的线程隔离问题&#xff1a; package study.用ThreadLocal解决线程隔离问题;/*线程隔离 - 在多线程并发场景下&#xff0c;每个线程的变量都应该是相互独立的线程A&#xff1a;设置&#xff08;变量1&#xff09; 获取&#xff08;变量1&#xff09;线程B&a…

【数据结构与算法】希尔排序

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​

Go语言--复合类型之map、结构体

map Go 语言中的 map(映射、字典)是一种内置的数据结构&#xff0c;它是一个无序的 key-value 对的集合&#xff0c;比如以身份证号作为唯一键来标识一个人的信息。 格式 map [keyType]valueType 在一个 map 里所有的键都是唯一的&#xff0c;而且必须是支持和!操作符的类型…

实验五 图像增强—空域滤波

一、实验目的 了解图像平滑滤波器&#xff08;均值滤波和中值滤波&#xff09;和图像锐化算子&#xff08;Sobel算子、Prewitt算子、Laplacian算子&#xff09;在工程领域中的应用&#xff1b;理解图像平滑滤波器和图像锐化算子的工程应用范围&#xff1b;掌握图像平滑滤波器和…

[终端安全]-4 移动终端之硬件架构安全

1 移动终端硬件架构 上图图展示了典型移动终端硬件架构&#xff0c;包括应用处理器&#xff08;AP&#xff09;、基带处理器&#xff08;BP&#xff09;以及各类共享组件和外设&#xff0c;所有组件通过AXI总线&#xff08;和APB桥&#xff09;连接在一起。以下分别介绍基于整…

【Linux进阶】文件系统6——理解文件操作

目录 1.文件的读取 1.1.目录 1.2.文件 1.3.目录树读取 1.4.文件系统大小与磁盘读取性能 2.增添文件 2.1.数据的不一致&#xff08;Inconsistent&#xff09;状态 2.2.日志式文件系统&#xff08;Journaling filesystem&#xff09; 3.Linux文件系统的运行 4、文件的删…

69.WEB渗透测试-信息收集- WAF、框架组件识别(9)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;68.WEB渗透测试-信息收集- WAF、框架组件识别&#xff08;8&#xff09; 有无waf存在&am…

秋招提前批面试经验分享(下)

⭐️感谢点开文章&#x1f44b;&#xff0c;欢迎来到我的微信公众号&#xff01;我是恒心&#x1f60a; 一位热爱技术分享的博主。如果觉得本文能帮到您&#xff0c;劳烦点个赞、在看支持一下哈&#x1f44d;&#xff01; ⭐️我叫恒心&#xff0c;一名喜欢书写博客的研究生在读…

【MySQL】4.MySQL 的数据类型

MySQL 的数据类型 一.数据类型分类在这里插入图片描述二.注意点1.char VS varchar2.datetime VS timestamp3.enum 和 set 的使用方法 一.数据类型分类 二.注意点 1.char VS varchar char 的意义是直接开辟固定大小的空间&#xff0c;浪费磁盘空间&#xff0c;但是效率高varcha…

解决GPT-4o耗电难题!DeepMind新算法训练效率提升13倍,能耗降低10倍!

目录 01 有更好的解决方案吗&#xff1f; 02 从“超级batch”中筛选数据 03 技术介绍 04 实验结果 生成可学习batch 谷歌DeepMind推出的新算法JEST&#xff0c;将LLM训练的迭代次数减少了13倍&#xff0c;计算量降低了10倍&#xff0c;有望重塑AI未来。GPT-4o早已成为耗能…

下载,连接mysql数据库驱动(最详细)

前言 本篇博客&#xff0c;我讲讲如何连接数据库&#xff1f;我使用mysql数据库举例。 目录 下载对应的数据库jar 包 百度网盘 存有8.4.0版本压缩包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/13uZtXRmuewHRbXaaCU0Xsw?pwduipy 提取码&#xff1a;uipy 复制这…

使用Ubuntu 22.04安装Frappe-Bench【二】

系列文章目录 第一章 使用VMware创建Ubuntu 22.04【一】 文章目录 系列文章目录前言什么是Frappe-Bench&#xff1f;使用安装ERPNext能实现什么效果&#xff1f; 官网给了一个说明 一、使用Ubuntu 22.04安装Frappe-Bench一、安装要求二、安装命令三、 可能出现问题 总结 前言 …

GESP C++一级真题

PDF图片1-7 点赞❤️关注&#x1f60d;收藏⭐️ 互粉必回&#x1f64f;&#x1f64f;&#x1f64f;

对BSV区块链的曼达拉网络通俗易懂的解释

​​发表时间&#xff1a;2023年6月15日 BSV区块链正在引入“曼达拉”升级&#xff0c;使BSV区块链网络的拓扑结构能够适配Teranode&#xff0c;适配这个可以大幅扩容的节点软件。BSV区块链上曼达拉网络的概念并不会改变整个系统的核心规则&#xff1b;相反&#xff0c;它能够引…