扫码称重上位机

news2024/11/27 18:32:27

目录

一 设计原型

二 后台代码


一 设计原型

模拟工具:

二 后台代码

主程序:

using System.IO.Ports;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace 扫码称重上位机
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        SerialPort serialPort = new SerialPort();
        TcpClient tcpClient = new TcpClient();
        bool IsRun = false;
        NetworkStream GetStream = null;
        Datas datas = new Datas();
        bool isCode = false;
        bool isWeight = false;

        private void 参数设置ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Parameter parameter = new Parameter();
            parameter.ShowDialog();
        }

        private void 运行ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (!serialPort.IsOpen)
                {
                    serialPort.Open();
                }
                if (!tcpClient.Connected)
                {
                    tcpClient.ConnectAsync(IPAddress.Parse("127.0.0.1"), 8899);
                    GetStream = tcpClient.GetStream();
                }

                IsRun = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void 停止ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort.IsOpen)
                {
                    serialPort.Close();
                }

                //if (tcpClient.Connected)
                //{
                //    tcpClient.Close();
                //}

                //if (GetStream != null)
                //{
                //    GetStream.Close();
                //}

                IsRun = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void 退出系统ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (IsRun)
            {
                MessageBox.Show("设备正在运行,请停止后在退出系统");
                return;
            }

            this.Close();
            System.Environment.Exit(0);

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                serialPort.PortName = "COM1";
                serialPort.Parity = Parity.None;
                serialPort.BaudRate = 115200;
                serialPort.StopBits = StopBits.One;
                serialPort.DataBits = 8;
                serialPort.DataReceived += SerialPort_DataReceived;
            }
            catch (Exception)
            {

            }


            Task.Run(() =>
            {
                while (true)
                {
                    if (IsRun)
                    {
                        try
                        {
                            if (GetStream != null)
                            {
                                byte[] bytes = new byte[1024];
                                GetStream.Read(bytes, 0, bytes.Length);
                                datas.weight = Encoding.UTF8.GetString(bytes);
                                isWeight = true;
                            }

                            if (isCode && isWeight)
                            {
                                datas.Result = "OK";
                                datas.DateTime = DateTime.Now.ToShortDateString();
                                datas.Note = "测试数据";

                                this.BeginInvoke(() =>
                                {
                                    dataGridView1.Rows.Add(datas.Code, datas.weight, datas.Result, datas.DateTime, datas.Note);
                                    isCode = false;
                                    isWeight = false;

                                });


                            }
                        }
                        catch (Exception)
                        {

                        }
                    }
                }
            });
        }


        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] bytes = new byte[1024];
            serialPort.Read(bytes, 0, bytes.Length);
            datas.Code = Encoding.UTF8.GetString(bytes);
            isCode = true;
        }
    }


    public class Datas
    {
        public string Code { get; set; } = "";
        public string weight { get; set; } = "";
        public string Result { get; set; } = "";
        public string DateTime { get; set; } = "";
        public string Note { get; set; } = "";
    }
}

参数页面程序:

using System.IO.Ports;
using System.Text.Json;

namespace 扫码称重上位机
{
    public partial class Parameter : Form
    {
        public Parameter()
        {
            InitializeComponent();
        }

        string path = Directory.GetCurrentDirectory() + "\\PM.json";


        private void Parameter_Load(object sender, EventArgs e)
        {

            try
            {
                port.Items.AddRange(SerialPort.GetPortNames());

                object[] parityList = { Parity.None, Parity.Odd };
                ck.Items.AddRange(parityList);

                object[] arrs = { 115200, 9600 };
                bau.Items.AddRange(arrs);

                object[] stp = { StopBits.One, StopBits.None };
                stop.Items.AddRange(stp);

                object[] ds = { 6, 7, 8 };
                data.Items.AddRange(ds);


                ip.Items.Add("127.0.0.1");
                tcpport.Items.Add(9999);



                ParameterClass parameter = new ParameterClass();
                string str = File.ReadAllText(path);
                parameter = JsonSerializer.Deserialize<ParameterClass>(str);
                if (parameter != null)
                {
                    port.SelectedItem = parameter.Com;
                    ck.SelectedItem = parameter.Parity;
                    bau.SelectedItem = parameter.BaudRate;
                    stop.SelectedItem = parameter.StopBits;
                    data.SelectedItem = parameter.DataBits;
                    ip.SelectedItem = parameter.IP;
                    tcpport.SelectedItem = parameter.TCPPort;
                }


            }
            catch (Exception)
            {

            }


        }

        private void SAVE_Click(object sender, EventArgs e)
        {
            try
            {
                ParameterClass parameter = new ParameterClass();
                parameter.Com = port.Text;
                parameter.Parity = (Parity)ck.SelectedItem;
                parameter.BaudRate = int.Parse(bau.Text);
                parameter.StopBits = (StopBits)stop.SelectedItem;
                parameter.DataBits = int.Parse(data.Text);
                parameter.IP = ip.Text;
                parameter.TCPPort = int.Parse(tcpport.Text);

                File.WriteAllText(path, JsonSerializer.Serialize(parameter));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }


    public class ParameterClass
    {
        public string Com { get; set; }
        public Parity Parity { get; set; }
        public int BaudRate { get; set; }
        public StopBits StopBits { get; set; }
        public int DataBits { get; set; }
        public string IP { get; set; }
        public int TCPPort { get; set; }
    }
}

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

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

相关文章

人脸特征标注——OpenCV

特征标注 导入必要的库创建窗口显示原始图片和标注后的图片存储用户选择的图片路径字体样式和大小定义了select_image函数定义了annotate_landmarks()函数设置按钮调整图片标签的位置设置图片位置主事件循环运行显示&#xff1a;全部代码 导入必要的库 import tkinter as tk: 导…

docker 环境部署

1.Redis部署 用docker拉取redis镜像 docker pull redis 用docker查看拉取的镜像版本号&#xff0c;这里查到的是 6.2.6 版本 docker inspect redis 通过wget指令下载对应版本的tar包&#xff0c;下载完成后解压 wget https://download.redis.io/releases/redis-6.2.6.tar.gz …

多客陪玩系统源码支持二次开发陪玩预约系统搭建,打造专业游戏陪玩平台

简述 随着电竞行业的快速发展&#xff0c;电竞陪玩APP正在逐渐成为用户在休闲娱乐时的首选。为了吸引用户和提高用户体验&#xff0c;电竞陪玩APP开发需要定制一些特色功能&#xff0c;并通过合适的盈利模式来获得收益。本文将为您介绍电竞陪玩APP开发需要定制的特色功能以及常…

算法05 模拟算法之二维数组相关内容详解【C++实现】

大家好&#xff0c;我是bigbigli&#xff0c;前面一节我们一节讲过一维数组的模拟了&#xff0c;如果还没看的话&#xff0c;可以&#x1f449;点击此处。模拟算法还有很多内容需要讲&#xff0c;比如图像、日期相关的模拟算法&#xff0c;后续将继续更新&#xff0c;今天先来讲…

遗传算法求解时间窗车辆路径规划问题(附python代码)

摘要 本研究提出了一种基于遗传算法的车辆路径规划&#xff08;VRP&#xff09;问题求解框架&#xff0c;它能够有效地处理一系列复杂约束&#xff0c;包括软时间窗、硬时间窗、行驶距离限制、车辆最大载重量、多个配送中心的协调、特定的配送顺序&#xff0c;以及多种车型的选…

MyBatis-Plus 查询不到数据,但使用 SQL 可以查询到数据的问题排查

目录 前言 一、问题描述 示例代码 二、排查步骤 1. 检查数据源配置 2. 检查实体类与数据库表结构 3. 检查 Mapper 接口 4. 检查 MyBatis-Plus 配置 5. 排查查询条件 6. 检查日志输出 7. 检查数据库连接问题 8. 检查全局配置和插件 三、解决方案 前言 在开发过程中&…

【docker入门】

在软件开发过程中&#xff0c;环境配置是一个至关重要的步骤&#xff0c;它不仅影响开发效率&#xff0c;也直接关联到软件的最终质量。正确的环境配置可以极大地减少开发中的潜在问题&#xff0c;提升软件发布的流畅度和稳定性。以下是几个关键方面&#xff0c;以及如何优化环…

《窄门》读后感

《窄门》这本书是端午节期间在地铁和高铁上看完的&#xff0c;书的故事很简单&#xff0c;描绘的是一段爱而不得的感情。但是&#xff0c;这本书写的爱而不得和其他地方的爱而不得完全不是一码事&#xff0c;其他地方的爱而不得要么是“落花有意随流水&#xff0c;流水无意恋落…

EasyX 文本输出(自定义)函数报错

EasyX 文本输出&#xff08;自定义&#xff09;函数报错记录 原因:EasyX与字符串相关的函数,都有字符集问题 UNICODE 多字节字符集

java干货,spring声明式事务

文章目录 一、编程式事务1.1 什么是编程式事务1.2 编程式事务的优缺点 二、声明式事务2.1 什么是声明式事务2.2 声明式事务的优点2.3 Spring 事务管理器2.4 spring 声明式事务使用 一、编程式事务 1.1 什么是编程式事务 编程式事务是指通过手动编写程序来管理事务&#xff0c…

C#利用SignalR实现通信事例Demo

1.服务端安装SignalR的Nuget包 dotnet add package Microsoft.AspNet.SignalR --version 2.4.3 2.接下来&#xff0c;创建一个ChatHub类&#xff0c;它是SignalR通信的核心&#xff1a; using Microsoft.AspNetCore.SignalR;public class ChatHub : Hub {public static Dict…

苹果mac电脑救星CleanMyMac让我的电脑重获新生!

&#x1f389; 发现电脑的救星&#xff01;CleanMyMac让我的电脑重获新生&#xff01; CleanMyMac绿色免费版下载如下&#xff1a;记得保存哈&#xff0c;以防失效&#xff1a; https://pan.quark.cn/s/9b08114cf404 CleanMyMac X2024全新版下载如下: https://wm.makeding.…

awdawdad

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年6月20日 最后&#xff1a; 十分感谢你可以耐着性子把它读完和我可以坚持写到这里&#xff0c;送几句话&#xff0c;对你&#xff0c;也对我&#xff1a; 1.一个冷知识&#xff1a; …

多路h265监控录放开发-(9)通过拖拽到窗口完成渲染

xcamera_widget.h class XCameraWidget :public QWidget {Q_OBJECTpublic:XCameraWidget(QWidget* p nullptr);//渲染视频void Draw();//123//清理资源,再一个窗口被覆盖后 清理之前窗口生成的资源1~XCameraWidget();//123 private:XDecodeTask* decode_ nullptr;//123XDemu…

高考填报志愿选专业,要善于发掘自身优势

每年的高考季&#xff0c;如何填报志愿又再成为困扰家长以及学生的难题&#xff0c;可能在面对大量的专业时&#xff0c;无论是考生还是家长都不知道应该如何选择&#xff0c;好的专业孩子不一定有优势&#xff0c;感兴趣的冷门专业又担心日后找工作难。 实际上&#xff0c;专业…

购买服务器,并安装宝塔

前言&#xff1a; 我们在开发项目时&#xff0c;总会遇到一个问题&#xff0c;就是将我们开发好的项目上传的公网中。对于中小型的项目&#xff0c;我们可以通过购买服务器进行项目的上线。 我们的项目一般是部署在Linux环境中。如果你不是专业的运维人员&#xff0c;可能对于…

『这世界上有无忧无虑的孩子,和永远焦虑的父母』

昨天&#xff0c;准确说是今天&#xff0c;凌晨两点多&#xff0c;被队友薅起来&#xff0c;严肃认真地讨论孩子的教育问题。 我们家的小神兽六岁&#xff0c;一年级了。从去年幼升小的阶段&#xff0c;我们就计划着好好培养孩子&#xff0c;在这一年间&#xff0c;给小朋友报过…

Linux下VSCode的安装和基本使用

应用场景&#xff1a;嵌入式开发。 基本只需要良好的编辑环境&#xff0c;能支持文件搜索和跳转&#xff0c;就挺OK的。 之所以要在Linux下安装&#xff0c;是因为在WIN11上安装后&#xff0c;搜索功能基本废了&#xff0c;咋弄都弄不好&#xff0c;又不方便重装win系统&#x…

HTTP网络协议

1.HTTP &#xff08;1&#xff09;概念&#xff1a; Hyper Text Transfer Protocol&#xff0c;超文本传输协议规定了浏览器和服务器之间数据传输的规则。 &#xff08;2&#xff09;特点 基于TCP协议:面向连接&#xff0c;安全基于请求-响应模型的:一次请求对应一次响应HTTP协…

2.APP测试-安卓adb抓取日志

1.打开手机的开发者模式&#xff0c;打开USB调试 &#xff08;1&#xff09;小米手机打开开发者模式&#xff1a; 【设置】-【我的设备】-【全部参数信息】-快速多次点击【OS版本】-进入开发者模式 &#xff08;2&#xff09;连接手机和电脑&#xff0c;手机打开USB调试 【设置…