C#收集SMD零件计数器数料机

工厂为了提高效率有的场景下会使用数料机来完成高效重复的工作,原理就是通过转盘转动计算转动距离,间距不等来实现计数。常用的SMD零件计数器 通讯有串口方式,通过指令发送获取当前计数,打印按钮触发也会发送打印信息到PC,上位可以根据指令获取进行库存抵扣,并触发打印。

using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using TestTool.Utility;
using TestTool.Utility.LoggerHelper;

namespace SMDCountApp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();

            CommonRedisHelper.InitRedis(AppConfig.Config.RedisUrl);
            List<string> intervals = new List<string>();
            // 初始化间距
            for (var i = 2; i < 50; i += 2)
            {
                intervals.Add(i.ToString());
            }
            CbxInterval.DataSource = intervals;
            CbxInterval.Text = "4";
            BtnRun_Click_1(null,null);
        }

        private void InitSerialport() {
            var log = GlobalConstant.ServiceProvider.GetService<TPLLogger>();
            try
            {
                var interval = CbxInterval.Text.ToInt();
                if (string.IsNullOrEmpty(AppConfig.Config.ComPort))
                {
                    AppConfig.Config.ComPort = SerialPortHelper.GetSerialPortList().Last();
                }
                // CbxCheck.SelectedIndex = 0;
                serialPortHelper = new SerialPortHelper(AppConfig.Config.ComPort, 9600, SerialParity.None, 8, StopBit.One);
                serialPortHelper.Connect();
                serialPortHelper.DataReceiveAction = (data) =>
                {
                    int value = data.ToInt();
                    value = value + AppConfig.Config.AddCount;
           
                    // 换算规则 4mm为基础项目 ,2mm*2 
                    var ratio = Convert.ToDouble(interval);
                    var v1 = ratio / 2;
                    var finalCount = value / v1 * 2;
                    this.Invoke(() =>
                    {
                        this.LTime.Text = DateTime.Now.ToString();
                        this.TxtCount.Text = finalCount.ToInt().ToString();
                    });
                    // 保存Redis
                    if (string.IsNullOrEmpty(AppConfig.Config.SaveRedisKey) == false)
                    {
                        CommonRedisHelper.StringSet(AppConfig.Config.SaveRedisKey, value);
                    }
                };
            }
            catch (Exception ex) {
                log.InsertAsync(new LogModel()
                {
                    LogMessage = $"打开串口{AppConfig.Config.ComPort} 异常 {ex.ToString()}"
                }) ;
            }
        }


        int defaultNum = 4;
        SerialPortHelper serialPortHelper;
        private void BtnRun_Click_1(object sender, EventArgs e)
        {

            try
            {
                if (!isOpen)
                {
                    InitSerialport();
                    Task.Run(async () =>
                    {
                        var log = GlobalConstant.ServiceProvider.GetService<TPLLogger>();

                        while (isOpen)
                        {
                            try
                            {
                                if (serialPortHelper == null || !serialPortHelper.IsConnected())
                                {
                                    InitSerialport();
                                }
                                serialPortHelper.Send("smdread\r\n");
                            }
                            catch (Exception ex)
                            {
                                log.InsertAsync(new LogModel()
                                {
                                    LogMessage = "读取异常:" + ex.Message,
                                });
                                await Task.Delay(500);
                            }
                            await Task.Delay(AppConfig.Config.ReadInterval);
                        }
                    });
                }
                else
                {
                    serialPortHelper.Disconnect();
                }
                ChangeButtonState();

             
            }
            catch (Exception ex)
            {
                MessageBox.Show($"异常:{ex.ToString()}");
            }
        }

        bool isOpen = false;
        private void ChangeButtonState()
        {
            isOpen = !isOpen;
            BtnRun.Text = isOpen ? "关闭" : "打开";
            this.Text = isOpen ? "零件计数器(读取中)" : "零件计数器(已停止)";
        }
    }
}

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

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

相关文章

AI大模型争议的背后,是技术以人为本的初衷

去年底&#xff0c;一款现象级应用ChatGPT开始风靡全球&#xff0c;也让其背后的AI大模型迅速出圈&#xff0c;成为众说纷纭的热门话题。 年后&#xff0c;OpenAI GPT-4以及国内诸多AI大模型的陆续发布&#xff0c;让市场热度有增无减。不过&#xff0c;一份包括马斯克在内100…

读《高效能人士的七个习惯》的一些感悟

目录 习惯一&#xff1a;积极主动 习惯二&#xff1a;以终为始 习惯三&#xff1a;要事第一 习惯四&#xff1a;双赢思维 习惯五&#xff1a;知彼解己 习惯六&#xff1a;统合综效 习惯七&#xff1a;不断更新 七个习惯的关系&#xff1a; 亮点内容总结&#xff1a; …

【MySQL】表的基本约束

目录 1、约束类型 2、NOT NULL 3、UNIQUE 4、DEFAULT 1、约束类型 关键字解释NOT NULL指示某列不能为空值UNIQUE保证某列的每一行的值不重复DEFAULT当没有给某个列赋值时的默认值PRIMARY KEYNOT NULL 和 UNIQUE 的结合&#xff0c;确保某列(或多列) 有唯一标识&#xff0c…

数据结构_第五关:单链表OJ题练习

OJ题题目简介和链接&#xff1a; 1.删除链表中等于给定值 val 的所有结点。OJ题链接 2.反转一个单链表。OJ题链接 3.给定一个带有头结点 head 的非空单链表&#xff0c;返回链表的中间结点。如果有两个中间结点&#xff0c;则返回第二个中间结点。OJ题链接 4.. 输入一个链表…

如何下载ChatGPT-ChatGPT如何写作

CHATGPT能否改一下文章 ChatGPT 作为一种自然语言处理技术&#xff0c;生成的文章可能存在表达不够准确或文风不符合要求等问题。在这种情况下&#xff0c;可以使用编辑和修改来改变输出的文章&#xff0c;使其符合特定的要求和期望。 具体来说&#xff0c;可以采用以下步骤对…

ChatGPT 从注册到自建应用

这会是关于 ChatGPT 的系列文章&#xff0c;主要记录老胡日常使用 ChatGPT 的一些感想和分享有趣的开源项目&#xff0c;这些信息我都会汇总到一个 ChatGPT 信息群&#xff0c;有兴趣的朋友可以文末加入 &#x1f973;介绍ChatGPT 是由 OpenAI 开发的一种大型自然语言处理模型&…

Linux【环境变量】

文章目录环境变量一、基本概念(1) 环境变量基本介绍(2) 以./作为切入点去了解环境变量(3) 再次认识环境变量二、常见环境变量及相关指令三、通过代码如何获取环境变量四、main函数第三个参数&#xff1a;环境变量参数(1) 第一种方式通过envp获取环境变量(2) 第二种方式通过envi…

Apple Pencil性价比高吗?第三方平替电容笔排名

在现代社会中&#xff0c;电容笔越来越受欢迎&#xff0c;与之相关联的各种功能也在逐步提高。所以&#xff0c;如何选择一款具有高性价比的电容笔就成了人们关注的重点&#xff0c;越来越多人们质量越好越便宜的电容笔。所以&#xff0c;什么牌子的电容笔最便宜&#xff0c;性…

日益强大的人工智能OpenAI ChatGPT GPT-4真的会让程序员失业吗?

今年肯定开始看起来像人工智能起义之年&#xff0c;它进入所有类型的IDE软件只是时间问题。随着微软对OpenAI的至少10亿美元的巨额投资&#xff0c;球真正开始滚动&#xff0c;OpenAI是令人钦佩的强大ChatGPT&#xff0c;Dall-E以及人工智能和机器学习&#xff08;ML&#xff0…

「读书感悟系列」失明症漫记

作者 | gongyouliu编辑 | gongyouliu最近花了不到一周的时间读完了葡萄牙作家萨拉马戈的小说《失明症漫记》&#xff0c;萨拉马戈是葡萄牙到目前为止唯一一位获得诺贝尔文学奖的作家&#xff0c;而这本书就是他的代表作。下面对这本书做一个简单分享。正如书名所说的&#xff0…

蓝桥杯赛前冲刺-双指针和图论专题(包含历年蓝桥杯真题和详细注释代码)

日志统计&#xff08;第九届蓝桥杯省赛CB组,第九届蓝桥杯省赛JAVAB组&#xff09; 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志&#xff0c;日志共有 NN 行。 其中每一行的格式是&#xff1a; ts id 表示在 tsts 时刻编号 idid 的帖子收到一个”赞”。 现在小…

苹果手机配什么无线蓝牙耳机好?适配苹果手机的蓝牙耳机推荐

近年来&#xff0c;TWS耳机越来越受到消费者的欢迎&#xff0c;各家厂商也都推出过不少旗舰级产品&#xff0c;许多产品也是打着苹果平替的旗号来推荐&#xff0c;并且这些耳机在功能和音质上也毫不逊色&#xff0c;并且音质还更加的好&#xff0c;下面整理了几款适用于苹果手机…

网络系统集成实验(三)| 系统集成虚拟局域网(VLAN)配置

目录 一、前言 二、实验目的 三、实验需求 四、实验步骤与现象 Step1&#xff1a;需求分析及配置思路 Step2&#xff1a;实验拓扑设计 Step3&#xff1a;实验配置 Part1&#xff1a;公网IP配置 Part2&#xff1a;链路聚合 Part3&#xff1a;VLAN的创建与划分 Part4&…

abaqus子程序vumat安装使用

一、Win11配置ABAQUS2022VS2022oneAPI2023编译环境 VUMAT是要用到Fortran的&#xff0c;否则添加.for文件会报错 ifort 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。出现这个问题时可以在command中输入命令查看是否有fortran编译器 abaqus infosystem可…

2022蓝桥杯省赛——砍竹子

问题描述 这天, 小明在砍竹子&#xff0c; 他面前有 n 棵竹子排成一排&#xff0c;一开始第 i 棵竹子的 高度为 hi​。 他觉得一棵一棵砍太慢了&#xff0c; 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用&#xff0c; 假设这一段竹子的高度为 H&#xff0…

【学习记录】大数据课程-学习十一周总结

Hive的安装 Hive的安装方式 hive的安装一共有三种方式:内嵌模式、本地模式、远程模式 元数据服务(metastore&#xff09;作用是&#xff1a;客户端连接metastore服务&#xff0c;metastore再去连接MySQL数据库来存取元数据。有了metastore服务&#xff0c;就可以有多个客户端…

企业数据平台建设的基石:构建统一的数据存算能力

随着企业数字化程度的逐步提高&#xff0c;数字化业务对数据管理的需求也持续深化。根据企业本身所处的数字化程度不同&#xff0c;我们将企业的数据平台的建设总结为五个阶段&#xff0c;本篇我们对统一的数据存储与算力做介绍。 — 整体介绍 — 企业发展的战略目标就是为了更…

约会Appointment

前言 加油 原文 约会常用会话 ❶ The meeting is scheduled for Friday afternoon. 会议安排在星期五下午。 ❷ He got a date with Amanda tomorrow night. 明天晚上他跟阿曼达有个约会。 ❸ They’re going to honeymoon in Europe. 他们打算在欧洲度蜜月。 ❹ Will yo…

考研数二第十讲 求导平面曲线的切线和法线以及曲率圆与曲率半径和弧微分

关于函数的导数几何意义&#xff0c;一元函数和二元函数存在一些不同&#xff0c;二元或多元函数求导叫做对应的偏导数&#xff0c;函数求导以及平面曲线切线&#xff0c;法线求解或者根据已知切线求函数会与其他题型结合考察&#xff0c;单独出题概率比较小。曲率和曲率半径求…

Java Web 实战 15 - 计算机网络之网络编程套接字

文章目录一 . 网络编程中的基本概念1.1 网络编程1.2 客户端(client) / 服务器(server)1.3 请求(request) / 响应(response)1.4 客户端和服务器之间的交互数据1.4.1 一问一答1.4.2 多问一答1.4.3 一问多答1.4.4 多问多答二 . socket 套接字2.1 UDP 的 Socket API2.1.1 引子2.1.2…
最新文章