拌合楼内部管理系统开发(一)立个flag,开始做准备

前言:项目背景情况介绍

        公司有意开发一套适合拌合楼的内部管理系统给到客户使用,接触过一家拌合楼行业内号称标杆的企业,去过参观学习的都觉得他们软件好用,但是从软件开发角度看,就是crud+钉钉机器人+无人值守。虽然公司没有正式立项要我们部门牵头开发这套软件,但自己立个flag打算开始动手写写,至少解决一些技术上的难点。如果有做过这块的朋友,希望能够给于指导了。


需要做的技术上的一些储备工作:

一、前端和后端开发技术

        前端打开采用vue3,后端用.net 8,数据库用msyql了

二、地磅数据的获取

        通过串口获取地磅的数据,不同的地磅获取数据的规范不一样,需要积累一个库。目前了解到市面上主流的地磅有两种数据获取方式:模式一是连续发送,换句话说就是一直向外发数据,接收到数据后按照协议规则剥离出你要的数据就可以。模式二种是应答式,就是按照协议格式发送一组字符串或是16进制字符串,称提给你回应,按照规则你剥离出你要的数据就可以了。

        1. C#遍历计算机所有的串口设备

using System.IO.Ports;

///
/// 获取本机所有端口
///
///
public static List loadComPorts()
{
List portsList = new List();
string[] ports = SerialPort.GetPortNames();
if (ports != null)
portsList = ports.ToList();
return portsList;
}

        2. 使用串口,通过定时器定时轮询串口是否接收到数据

//PORT 设置的参数名称为空
if (string.IsNullOrEmpty(PortName))
{
logger.error(DateTime.Now.ToString(“mm:ss”) + “地磅端口名称错误” + PortName );
return;
}

//检查参数,如果没有设置则设置为默认值
if (String.IsNullOrEmpty(Vars.baud)) Vars.baud = “9600”;
if (String.IsNullOrEmpty(Vars.dsite)) Vars.baud = “8”;
if (String.IsNullOrEmpty(Vars.ssite)) Vars.baud = “1”;
if (String.IsNullOrEmpty(Vars.parity)) Vars.baud = “无”;

if (!serialPort1.IsOpen)
{
try
{
serialPort1.PortName = GlobalVars.Port;
serialPort1.BaudRate = Convert.ToInt32(Vars.baud);
serialPort1.DataBits = Convert.ToInt32(lVars.dsite);
//停止位字符串转换为控件接受的格式
string tzw = Vars.tzw;
if (tzw.Equals(“1”))
serialPort1.StopBits = StopBits.One;
else if (tzw.Equals(“1.5”))
serialPort1.StopBits = StopBits.OnePointFive;
else if (tzw.Equals(“2”))
serialPort1.StopBits = StopBits.Two;
//校验位字符串转换为控件接受的格式
string jyw = GlobalVars.parity;
if (jyw == “无”)
serialPort1.Parity = Parity.None;
else if (jyw == “奇校验”)
serialPort1.Parity = Parity.Odd;
else if (jyw == “偶校验”)
serialPort1.Parity = Parity.Even;
serialPort1.Open();
}catch (Exception exp)
{
LogHelper.Err("打开端口失败: " + exp.Message);
}
}
else
{
SetPontStatus("已打开端口 " + serialPort1.PortName, Color.Green);
}
 

        3. SerialPort 控件接收数据

private string _recv_string = “”;
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int idx_last = _recv_string.LastIndexOf("");
if (idx_last == -1) return;
string leftstr = _recv_string.Substring(0, idx_last + 1);
_recv_string = _recv_string.Substring(idx_last + 1);
if (!leftstr.EndsWith("")) return;
int _idx = leftstr.LastIndexOf("+");
if (_idx == -1) return;
string lastitem = leftstr.Substring(_idx + 1, leftstr.Length - _idx - 5); 
leftstr = "";
 decimal weight_value = StringUtil.parseDecimal(lastitem);
}

        4. 接收到的数据格式如下:

        5.  数据处理:

准备一个字符串,地磅每次传输的数据要追加到字符串后面,然后尝试去除最后一个完整的数据单元,并且计算出来实际公斤数。如果地磅设置了按吨位传输,则计算出来的数据是吨位数。

三、无人值守监控过磅的过程

        1.  所需要的硬件设备:

        上图是上海耀华地磅我找到的解决方案图。

        2. 无人值守需要用到的技术

        a. 地磅自动读取数据,前面单独列出来了。
        b.  车牌识别
        c. 调用视频监控自动拍照并保存到电脑
        d. ID 读卡,这个应该是用来识别车辆信息,整个过帮过程既然识别了车牌,那么应该可以用车牌号作为唯一的索引来后驱所有的数据。
        e. LED大屏幕数据显示。
        f. 红绿灯信号以及道闸抬起的控制。这个应该是用来控制车辆位置的,可以通过其他一些技巧性的解决车辆定位,比如提前找好最佳位置,树立一个牌子,需要司机去按按钮,完成拍照,车牌识别。这样地感线圈等设备也都不需要了,节约成本。

        3. 无人值守获取数据:

        车牌信息、车辆皮重、毛重,计算出装货净重,每台车应该是进来的时候称一次重,装或者卸货后称一次重, 两者差位净重。两次装重,前、后、左、右以及车牌识别保存下来的图片。操作时间。

        4. 单据打印

        根据业务时间来决定是否需要打印了,也可以生成一个二维码,司机扫描和保存这个二维码就可以调出原本需要打印的单据。


总结:   闭门造车

        上面所写的,都是自己根据实际工作和外部查到自己想出来,还没有实际到拌合楼进行过调研,也只是通过同事支言片语判断无人值守是拌合楼管理迫切比较需要的。

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

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

相关文章

开源绘图工具 PlantUML 入门教程(常用于画类图、用例图、时序图等)

文章目录 一、类图二、用例图三、时序图 一、类图 类的UML图示 startuml skinparam classAttributeIconSize 0 class Dummy {-field1 : String#field2 : int~method1() : Stringmethod2() : void } enduml定义能见度(可访问性) startumlclass Dummy {-f…

基于ssm+layui的图书管理系统

基于ssmlayui的图书管理系统 账户类型分为:管理员,用户管理员私有功能用户私有功能公共功能技术栈功能实现图 视频演示 账户类型分为:管理员,用户 图书管理系统主要登录账户类型为管理员账户与用户账户 管理员私有功能 账户管理…

如何压缩图片文件大小?教大家几种方法

当图片文件较大时,图片压缩可以有效的缩小图片kb,从而使图片储存起来更加方便,也可以解决上传时图片大小被限制的问题,那么我们有什么方法可以简单快速的将图片大小压缩呢?下面就来给大家分享几个如何修改照片大小kb的…

VS2022开发上位机流程

1、生成串口调试助手的主要控件 2、生成串口对象 3、书写代码 3.1 串口的选择 跳转到图形化界面,然后双击空白位置,会自动生成From1_Load,此函数的作用是会更新串口的选择,然后加入代码,combox控件就可以识别串口 /* 新增自定义…

windows系统版本是win11 运行程序显示windows版本是win10,

在Windows 11系统中运行程序时显示的Windows版本是Windows 10,这种现象可能是由以下几个原因导致的: 程序兼容性问题: 某些程序可能尚未更新以识别Windows 11操作系统,因此它们仍然报告系统为Windows 10。程序读取的是遗留的系统信…

机器学习-04-分类算法-02贝叶斯算法

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与贝叶斯算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程: 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…

Linux服务器(RedHat、CentOS系)安全相关巡检shell脚本

提示:巡检脚本可以使用crontab定时执行,人工根据执行结束时间点统一收集报告文件即可。 #!/bin/bash# Define output file current_date$(date "%Y%m%d") # Gets the current date in YYYYMMDD format echo >server_security_inspection_r…

【C++ RB树】

文章目录 红黑树红黑树的概念红黑树的性质红黑树节点的定义红黑树的插入代码实现总结 红黑树 AVL树是一颗绝对平衡的二叉搜索树,要求每个节点的左右高度差的绝对值不超过1,这样保证查询时的高效时间复杂度O( l o g 2 N ) log_2 N) log2​N),…

openwrt下部署clouddrive2

在启动项上增加启动参数 在exit 0前面增加 mount --make-shared /mnt/data480g注意,后面的/mnt/data480g要替换成你设置的共享映射券。 拉取镜像 docker pull cloudnas/clouddrive2启动镜像 一定要用ssh在后台用docker run命令启动,因为openwrt前台…

Windows 安装配置 RabbitMQ 详解

目录 1、安装前准备2、安装Erlang2.1 安装2.2 配置环境变量 3、安装RabbitMQ3.1 安装3.2 配置环境变量3.3 安装rabbitmq_management插件3.4 启动RabbitMQ服务 4、常用命令 本文将详说如何在Windows系统中安装RabbitMQ。 1、安装前准备 因为RabbitMQ服务器是用Erlang语言编写的…

AQY214S固态继电器:用于控制各种应用中的模拟信号的紧凑解决方案

AQY214S是一款多功能固态继电器,是一款经过精心设计的精致固态继电器,可在多种应用中与低电平模拟信号共舞。在这次探索中,我们将揭开AQY214S的复杂性,重点介绍其独特的功能,并深入研究其在不同行业中的应用的迷人挂毯…

MySQL MHA故障切换

目录 一、案例分析 1.1、案例概述 1.2、案例前置知识点 1)什么是 MHA 2)MHA 的组成 3)MHA 的优势 4)MHA 现状 1.3、案例环境 1)本案例环境 ​编辑 2)案例需求 3)案例实现思路…

基于springboot的七彩云南文化旅游网站的设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装七彩云南文化旅游网站软件来发挥其高效地信息处理的作用&am…

web学习笔记(三十三)

目录 1.严格模式 1.1严格模式的概念: 1.2严格模式在语义上更改的地方: 1.3如何开启严格模式 1.4严格模式应用上的变化 2.原型链 1.严格模式 1.1严格模式的概念: 严格模式有点像es5向es6过渡而产生的一种模式,因为es6的语法…

蓝桥杯决赛2023 RE CyberChef2

思路很清晰,爆IV 但是题目出的有点屎,六位字符串,62的6次方,要我爆到猴年马月? 就当练习脚本吧 #Cyber2 wp from Crypto.Cipher import DES, AES from Crypto.Util.Padding import pad, unpad key_des b0a0b0c0…

从零开始利用MATLAB进行FPGA设计(三)将Simulink模型转化为定点数据类型

文章灵感来源于MATLAB官方免费教程:HDL Coder Self-Guided Tutorial 考虑到MATLAB官网的英文看着慢,再加上视频讲解老印浓浓的咖喱味,我决定记录利用MATLAB&Simulink&SystemGenerator进行FPGA数字信号处理的学习过程。 往期回顾&am…

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里

【Miniconda】Linux系统中 .condarc 配置文件的位置一般在哪里 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Span)

作为Text组件的子组件,用于显示行内文本的组件。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 该组件从API Version 10开始支持继承父组件Text的属性,即如果子组件未设置…

linux内存介绍

一、linux内存框图 二、meminfo信息说明 cat /proc/meminfo MemTotal: 2017504 kB //所有可用的内存大小, 物理内存减去预留位和内核使用。系统从加电开始到引导完成,firmware/BIOS要预留一 些内存,内核本身要占用一些内存&#xff0…

微信小程序云开发教程——墨刀原型工具入门(表单组件)

引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…
最新文章