首页 > 其他分享 >[框架设计之道(二)]设备、任务设置及业务流程

[框架设计之道(二)]设备、任务设置及业务流程

时间:2023-09-11 14:23:05浏览次数:39  
标签:主程序 const 配置文件 框架 业务流程 之道 QString 设置 设备

目录

    说明
    此文档是开发中对设备设置项的管理。因为硬件在使用的过程中涉及大量设置项,因此需要单独开一篇文档说明设备的设置和任务的设置。

    一、设备设置
    1.基础接口
    ///


    /// 配置文件管理模块
    ///

    class TSG_ConfigHelper : public TSG_Framework {
    public:
    virtual bool Init(const QString& path, const QList& list_device_names) = 0;
    virtual bool Init(const QString& path) = 0;
    virtual QList getConfigFiles() = 0;
    virtual QJsonObject getConfigContain(const QString& config_name, const QString& device_name) = 0;
    virtual bool setConfigContain(const QString& config_name, const QString& contains, const QString& device_name) = 0;
    virtual QList getDeviceNames() = 0;

    对于配置文件管理模块,我不希望提供过多和过花哨的接口。事实上,各式各样的配置文件管理模块实际上就是修改某个设备下的某个json文件。一个ConfigHelper需要包括多个设备,当然了,它实际上是以文件夹为单位进行管理的

    每一个设备应该都会有一个init.json和一个DeviceParams.json文件,所以他们是以一个文件夹的形式保存起来的。

    如图所示:

    image

    以这样的文件夹形式存放各个设备的参数信息,所有的信息都是以本地文件的形式存放的,所有的文件都需要热取用,因为随时可能会发生中途设备信息修改等等,所以再接口getConfigContain中,需要每次打开文件进行读取,而不是提前读取好了放在本地。
    2.基本流程
    配置文件管理模块流程大致如下:

    image

    读取和写入都需要保证可以在热读取下操作。否则每次重新设置或者配置文件可能都需要重新启动软件,会非常不灵活。

    其中所有的设置和读取配置文件,只涉及两个功能,也就是所谓的写入和读取文件,仅此而已。

    二、任务设置
    任务设置模块应该是在主程序的kernel中进行的,每次在gui进行一次配置的时候都需要在主程序的kernel中
    1.任务设置
    每次任务设置参数涉及很多个方面,但主要的参数包含以下几个方面

    1>任务的基本信息:名称、备注
    2>需要换算的信息:隧道直径、小车速度、相机曝光时间、图片重复率

    实际上,一个任务就只有两个信息是需要主动包含的,一个是基本信息,一个是换算信息。这里我们暂且不聊换算信息。为什么呢,因为这个是需要和后续的设备信息进行联动的,这里的所有基本换算都是来自gui程序或者主程序中本地的换算,所以轮不到设备的控制层去关系。

    所以对于控制层来说,唯一需要关心的就是文件存储的路径,以及配置文件存放的路径。

    三、业务流程
    我们在所有设备的控制层代码中都写好了一套配置流程,那自然在主程序中也得有一套完整的流程。一套完整的流程控制不仅可以使在具体的采集过程中的程序更加可靠,也可以使得面对各种异常情况下能够更加优雅。另外值得一提的是,需要将错误日志系统搭建完善,而不是之前那一套没人看得懂的错误日志。

    业务中,我们需要让每一次作业保持以下流程:

    image

    我需要简单解释一下此图:在全流程中,GUI只是一个人机交互的接口,也就是说GUI并不参与到具体的业务中,也不会做任何计算和任何的业务流程。

    所有,注意,是所有的任务,都可以在主程序中完成,即使主程序在开发的过程中并没有提供GUI,只凭借仅有的控制台也应该要能够完成整个采集任务。

    其中,设置设备信息和设置任务信息都不是必须的,这里需要提供两套预设,一套是存放在本地文件的default.json文件,另一套是放在代码内部的,基于目前已有的设备执行。

    但是这里有问题,值得注意的一点是,扫描仪的并不是提前可以通过扫描获得的,而是只能通过提前设定好ip、sn和key来尝试连接的,所以扫描仪设备和所有的设备都不一样,需要在跳过设备信息之前提前确定扫描仪的信息。

    开始采集、暂停采集、停止采集在主程序中比较好获取,因为在控制层中就已经对所有状态做好了声明和控制,只需要按照流程来即可。

    最后,停止采集一定是所有控制中级别最高的,不论当前是任何状态,只要发送了停止采集的命令,机器就必须马上停止运转,状态归零,这是很重要的一点。

    标签:主程序,const,配置文件,框架,业务流程,之道,QString,设置,设备
    From: https://www.cnblogs.com/Leventure/p/17693445.html

    相关文章

    • 最接地气的.NET微服务框架
      前言:“人必有所执,方能有所成”,从2018年底我就开始规划要写一个.NET微服务框架,5年了,今天终于正式发布了。正文: Wing 致力于打造一个功能强大、最接地气的.NET微服务框架,支持.NETCore3.1+运行平台。支持Consul服务注册与发现,服务间通讯支持http和grpc调用,内置负载均......
    • 浪潮信息“互联网+AIGC”巡展深圳站:湾区共话 大模型智算之道
      近日,浪潮信息新产品“互联网+AIGC”行业巡展在深圳举行。本次巡展以“智算开新局·创新机”为主题,来自华南理工大学、网易伏羲、腾讯云、浪潮信息等高校、知名企业、研究机构的产学研专家、互联网行业大咖再度聚首,围绕大模型发展的机遇与挑战,从技术、应用和产业等多个角度进行了精......
    • Leetcode刷题本地debug框架搭建
      思路1.初版cmake+单一.cpp文件参考:https://blog.songjiahao.com/archives/3622.改良版cmake+源文件、头文件(含List、Tree等数据结构)分离+gtest参考:https://github.com/Pokerpoke/LeetCode Normal模板以Leetcode1两数之和为例#include<iostream>#include......
    • 原生JavaScript框架设计(一):整合JS函数
      本篇为回顾js时总结,诣在整理JS中常用知识点,剖析其规律。模仿jQuery,简单一些,特定功能,像apply函数、getElementXXX函数等浏览器函数都没有实现,直接套用。创建common.js://自定义实现push函数varmyPush=function(target,els){ varj=target.length, i=0; while((target[j++]=e......
    • Spring框架基础知识
      Spring框架基础知识1、简介1、Spring框架是一个开源的JAVAEE的应用程序,主要是IOC(控制反转和依赖注入)和AOP(面向切面编程)两大技术。2、SpringIOC(控制反转/依赖注入)SpringAOPSpringJDBC+事务3、Spring是众多开源java项目中的一员,基于分层的javaEE应用一站式轻量级开源框......
    • Vue框架demo
      首先,需要安装Vue:npminstallvue然后,创建一个名为App.vue的文件,用于定义应用程序的主要内容。<template><div><h1>{{message}}</h1><inputtype="text"v-model="inputText"/><button@click="addMessage">AddM......
    • RuoYi若依框架 部署问题
      安装教程https://juejin.cn/post/7114232275734102030问题解决:密码带双引号【字符串】......
    • SpringBoot框架实现一个简单的管理系统
      当然,我可以提供一个简单的示例代码,用SpringBoot框架实现一个简单的管理系统。以下是一个用户管理系统的示例代码:创建SpringBoot项目:使用SpringInitializr(https://start.spring.io/)创建一个新的SpringBoot项目,选择相应的依赖(如SpringWeb、SpringDataJPA、Thymeleaf等)。创建......
    • springboot 框架国际化 + thymeleaf
      项目目录结构注意:导入thymeleaf,web的pom依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.springframework.boot&l......
    • MindSpore框架学习
      MindSpore框架学习研一时候的笔记手写数字Mnist识别把大象放进冰箱共需要3步:第一步:打开冰箱门;第二步:把大象装进去;第三步:关好冰箱门。将一个复杂的任务分解成一个个步骤,按照步骤一点点去实现就可以了。手写数字Mnist识别的任务也是一样,将该任务分解成以下一个个步骤......