扫码称重上位机

2024-06-23 06:36
文章标签 上位 扫码 称重

本文主要是介绍扫码称重上位机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一 设计原型

二 后台代码


一 设计原型

模拟工具:

二 后台代码

主程序:

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.chinasem.cn/article/1086405

相关文章

可测试,可维护,可移植:上位机软件分层设计的重要性

互联网中,软件工程师岗位会分前端工程师,后端工程师。这是由于互联网软件规模庞大,从业人员众多。前后端分别根据各自需求发展不一样的技术栈。那么上位机软件呢?它规模小,通常一个人就能开发一个项目。它还有必要分前后端吗? 有必要。本文从三个方面论述。分别是可测试,可维护,可移植。 可测试 软件黑盒测试更普遍,但很难覆盖所有应用场景。于是有了接口测试、模块化测试以及单元测试。都是通过降低测试对象

C++ 上位软件通过Snap7开源库访问西门子S7-1200/S7-1500数据块的方法

C++ 上位软件通过Snap7开源库访问西门子S7-1200/S7-1500数据块的方法

C#编写上位机通过OPC DA读取西门子PLC数据

Sync_RW 引用:Quick.OpcComRcw 文档中原程序会报错: 原因:需要在安装有Simatic NET V14的电脑上运行这个程序。 需要注释掉下面程序,否则读取时会无故障提示退出。 //finally里的程序要注释掉,否则一点击read按钮,程序会直接无故障提示退出//finally//{// // Free the unmanaged memory/

PDF样本图册转换为一个二维码,随时扫码打开无需印刷

在这个数字化时代,纸质样本图册已成为过去。如今,一切都变得触手可及,包括我们的PDF样本图册。想象一下,将这些图册转换为一个二维码,让客户随时扫码打开,无需印刷,这将带来多大的便利和环保效益!接下来就让我来教你如何轻松实现PDF样本图册到二维码的转换,让您与时俱进,走在环保科技的前沿吧。 1. 准备好制作工具:FLBOOK在线制作电子杂志平台 2. 转换文档:点击开始

uni-app 扫码优化:谈谈我是如何提升安卓 App 扫码准确率的

一. 前言 之前的一个项目遭到用户吐槽:“你们这个 App 扫码的正确率太低了,尤其是安卓的设备。经常性的扫码扫不出来,就算是扫出来了,也是错误的结果!” 由于之前是扫描二维码的需求,所以没有对扫描条形码做严格的测试,客户提示说是条形码扫描效率低下。随即,我用自己的手机测试了一下,在安卓手机上确实有这样的问题,扫码准确率确实是低,尤其是条形码,扫码效率慢且不准确。扫描二维码的的效率还算可以

微信扫码支付模式二支付状态Ajax轮询实例

Ajax 轮训支付状态代码: <span style="font-size:18px;"><script>//设置每隔1000毫秒执行一次load() 方法setInterval(function(){load()},1000);function load(){var xmlhttp; if (window.XMLHttpRequest){ // code for IE7+, Firef

Java实现扫码二维码登录

http://www.toutiao.com/i6347455614309892610/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=5901587924&utm_medium=toutiao_ios 博友的类似文章 http://blog.csdn.net/laws

Flutter扫码识别二维码内容

https://www.cnblogs.com/gxsyj/p/11477020.html 非常详细

SonarQube扫码Android代码

1. 安装 SonarQube 服务器(也可以配置公司的服务器地址) 首先,你需要在本地或服务器上安装并运行 SonarQube 服务器: 下载 SonarQube:从 SonarQube 官方网站 下载适合你操作系统的版本。解压并配置 SonarQube:按照官方文档中的说明,配置 sonar.properties 文件,设置数据库连接等。启动 SonarQube:在命令行中运行 ./bin

一分钟创建自己的分班查询系统,家长扫码即可进群

开学后,老师们的忙碌也达到了顶峰。整理教材、准备课程计划、布置教室,这些工作已经让人应接不暇,更别提还要处理分班事宜。以往,老师们需要一个个通知家长分班结果,这不仅耗时耗力,还容易出错。家长们也常常因为等待通知而焦虑不安。 幸运的是,现在有了易查分小程序,这一切都变得简单多了。老师们可以通过易查分小程序发布新学期的分班查询,家长们只需扫描老师发布的二维码,就能轻松查询到自己孩子的分班信息