扫码称重上位机

目录

一 设计原型

二 后台代码


一 设计原型

模拟工具:

二 后台代码

主程序:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测试辅助工具(抓包工具)的使用1 之初识抓包工具(fiddler)

1.什么是抓包&#xff1f; 说明&#xff1a;客户端向服务器发送请求以及服务器响应客户端的请求,都是以数据包来传递的。 抓包&#xff08;packet capture&#xff09;&#xff1a;通过工具拦截客户端与服务器交互的数据包。 抓包后可以修改数据包的内容 2.为什么要抓包&…

【鸿蒙 HarmonyOS】尺寸设置:size/layoutWeight/constraintSize

一、背景 常见尺寸&#xff1a;width&#xff08;宽度&#xff09;、height&#xff08;高度&#xff09;、padding&#xff08;内边距&#xff09;、margin&#xff08;外边距&#xff09; 主要整理下size&#xff08;设置高宽尺寸&#xff09;、layoutWeight&#xff08;对…

C#事件详解及应用示例

简介 事件是使类具备向其它类通知发生的相关事情的能力。事件被分成两部分&#xff1a;一、引发或发送事件的类&#xff08;称发布者&#xff09;&#xff1b;二、处理或接收事件的类&#xff08;称订阅者&#xff09;。事件也是类型的成员。在 .NET 的桌面应用程序中&#xff…

梯度提升决策树(GBDT)的训练过程

以下通过案例&#xff08;根据行为习惯预测年龄&#xff09;帮助我们深入理解梯度提升决策树&#xff08;GBDT&#xff09;的训练过程 假设训练集有4个人&#xff08;A、B、C、D&#xff09;&#xff0c;他们的年龄分别是14、16、24、26。其中A、B分别是高一和高三学生&#x…

[SAP ABAP] 运算符

1.算数运算符 算术运算符描述加法-减法*乘法/除法MOD取余 示例1 输出结果: 输出结果: 2.比较运算符 比较运算符描述示例 等于 A B A EQ B <> 不等于 A <> B A NE B >大于 A > B A GT B <小于 A < B A LT B >大于或等于 A > B A GE B <小…

LLM功能应用的测试艺术:策略与实践

在人工智能技术日新月异的今天,大规模语言模型(LLMs)凭借其强大的自然语言处理能力,正逐渐成为众多应用和服务的核心驱动力。从智能客服到创作辅助,从信息检索到个性化推荐,LLMs的广泛应用对测试策略提出了全新的挑战。本文旨在探讨针对拥有LLM功能的应用或软件,如何制定…

Paxos分布式共识算法

Paxos分布式共识算法 一、简介 Paxos算法是由莱斯利兰伯特(Leslie Lamport)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。它主要用于解决分布式系统中如何就某个值达成一致&#xff0c;并保证整个系统的一致性&#xff0c;即使在部分节点发生故障的情况下…

java干货,spring声明式事务

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

数学建模系列(2/4):建模入门

目录 引言 1. 如何开始数学建模 1.1 选择和描述问题 1.2 提出基本假设 1.3 确定模型类型 2. 建模的数学基础 2.1 线性代数基础 矩阵运算 线性方程组的解法 2.2 微分方程基础 常微分方程 偏微分方程 2.3 统计与概率基础 描述性统计 概率基础 3. 模型的求解方法 …

Python学习打卡:day13

day13 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day1397、初识对象98、类的成员方法类的定义和使用成员变量和成员方法成员方法的定义语法 99、类和对象在程序中通过类来描述基于类创建对象 100、…

Idea安装插件刷Leetcode

一、下载插件 idea版本2022以下两个插件都可以用来刷Leetcode 二、登录Leetcode 获取token 登录 三、配置 配置1 配置2 Code FileName C$!velocityTool.leftPadZeros($!{question.frontendQuestionId},4)$!velocityTool.replace(${question.title}," ","&qu…

awdawdad

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

8路编码器脉冲计数器或16路DI高速计数器,Modbus RTU模块 YL69-485/232

特点&#xff1a; ● 编码器解码转换成标准Modbus RTU协议 ● 可用作编码器计数器或者转速测量 ● 支持8个编码器同时计数&#xff0c;可识别正反转 ● 也可以设置作为16路独立DI高速计数器 ● 编码器计数值支持断电自动保存 ● DI输入和电源之间3000V隔离 ● 通过RS-4…

mysql的安装和连接

一.数据库相关概 念 1.数据库 存储数据的仓库,数据是有组织的进行存储,简称DB。 2.数据库管理系统 操纵和管理数据库的大型软件,简称DBM。 3.SQL 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。简称SQL。 二.市面上流行的数据库 1.ORACLE 2.MySQL …

2024年6月23日 十二生肖 今日运势

小运播报&#xff1a;2024年6月23日&#xff0c;星期日&#xff0c;农历五月十八 &#xff08;甲辰年庚午月戊午日&#xff09;&#xff0c;法定节假日。今天国际奥林匹克日&#xff0c;坚不可摧的意志&#xff0c;披荆斩棘的豪情&#xff0c;永远值得拥有&#xff01; 红榜生…

使用java +paho mqtt编写模拟发布温度及订阅的过程

启动mqtt 服务 创建项目&#xff0c;在项目中添加模块 添加文件夹 添加maven依赖 <dependencies><dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.0<…

win11家庭版使用自带的Linux子系统并安装docker【全网整合版】

1. 电脑配置项 开发者选项 设置->系统->开发者选项 启用或关闭windows功能 控制面板->卸载程序->启用或关闭windows功能 勾选适用于Linux的Windows子系统和虚拟机平台并重启电脑(首次勾选选项时电脑提示重启) Hyper-V 关键点&#xff1a;win11家庭版在启动…

JAVA同城服务场馆门店预约系统支持H5小程序APP源码

&#x1f4f1;一键预约&#xff0c;畅享无忧体验&#x1f3e2; &#x1f680;一、开启预约新纪元 在繁忙的都市生活中&#xff0c;我们常常因为时间紧张而错过心仪的门店或场馆服务。然而&#xff0c;有了“门店场馆预约小程序”&#xff0c;这些问题都将迎刃而解。这款小程序…

vue3学习教程第四十节(pinia的用法注意事项解构store)

pinia 主要包括以下五部分&#xff0c;经常用到的是 store、state、getters、actions 以下使用说明&#xff0c;注意事项&#xff0c;仅限于 vue3 setup 语法糖中使用&#xff0c;若使用选项式 API 请直接查看官方文档&#xff1a; 一、前言&#xff1a; pinia 是为了探索 vu…

Python3简单实现与Java的Hutool库SM2的加解密互通

1、背景&#xff1a; 因业务需求&#xff0c;需要与某平台接口对接。平台是Java基于Hutool库实现的SM2加密解密&#xff0c;研究了下SM2的加解密算法&#xff0c;网上找的资料&#xff0c;都是说SM2【椭圆曲线】 公钥长【x,y分量 64字节】&#xff0c;私钥短【32字节】&#x…