上位机工作感想-从C#到Qt的转变-1

2024-04-22 10:12

本文主要是介绍上位机工作感想-从C#到Qt的转变-1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0.前言

接触Qt开发也有一年多的时间了,还记得去年初从杭州回合肥时,刚来公司面临的几个问题:

  • 1.C#转上位机的迷茫
  • 2.新公司管理模式的差异
  • 3.试用期的各种紧急任务。

当时也是加班加点学习C++和Qt的基础知识,做了两个考核项目后,顺利渡过了试用期。
关于转语言,公司大概率是不会给一个社招人员过渡期的,我们所要做的就是放平心态,努力做好公司交待的项目就行了。基础扎实非常重要,一般来说熟练掌握一门语言后,学习其它语言时类比一下,再在项目中锻炼一下,熟悉起来还是很快的。后面的精通不仅需要学习相关编程书籍,还需要在项目中不断实践相关语言特性,写了一定数量并且解决了这些bug后,才会对语言有个深刻的认识。

1.项目积累

来这边大大小小也是做了7、8款软件了,其中拿3个比较有意义的来记录一下

1.1 样品前处理设备软件

这是在试用期开发的一款软件,原定用C#开发,最后在老员工的强力反对下改成了Qt。这让我想起了钱学森先生的一句话:”手里没剑和有剑不用是两码事“,你不会Qt人家就偏要让你用Qt开发。这款软件的主要功能就是使用modbus协议对下游IO设备进行一定时序的开闭控制,从而对皮带上移动的粉末物料作压块处理,提高设备的检测精度。
原本的测量软件架构就已经很乱了,再往里面塞新的业务代码不就是在屎山上再拉一泡屎,想想就恶心。后来也验证了我的想法,大部分时间都在在调试老软件。所以我前处理软件也是和老软件独立开发,二者通过modbus进行交互。控制软件分为通讯层、设备层、业务层三层,上层调用下层,达到代码的最大重用。同时业务层使用Command(指令模式),将不同业务封装进不同的指令,所有指令都继承BaseCommand,实现里面的Execute()方法,跑业务流程时把这些子Command串在一起for循环一下就行了。这样可以很大程度上解耦业务代码,调试修改也是简单。
现场运行时遇到了两个问题:tcp通讯在一段时间内无数据交互就会断线,调用保活方法也是不行,最后通过定时器定时获取设备状态在业务层进行保活。另外就是公司选购的串口服务器稳定性太差,经常会出现设备重置的状态,必须在软件层面加上断线重连机制,好在libmodbus就自带该功能。
总体来说第一次使用Qt编写项目还算顺利,对C++的基本语法也更加熟悉。设计模式、重构、配套测试、通讯等上位机编程的基础技能扎实也能比较快的适应新语言。
关于Modbus通讯库: 在Qt平台上用的比较多的一个是libmodbus、一个是Qt自带的Modbus通讯库。libmodbus接口都是同步读取,QModbus提供的多为异步接口。libmodbus还带有断线重连和通讯错误恢复功能,比较适合交互性较强的通讯场合,官方文档也是很详细,认真阅读一遍还是有很多收获的。经过了多次测试,还是决定使用libmodbus作为modbus通讯库。

1.2 公司产品软件重构

公司现有产品有多种型号,每种型号的大致功能都是类似,无非就是移动导轨、激光器打激光、光谱仪采数据、算法模型计算结果,但是每种型号都要维护一套特有的代码,这就导致设备功能迭代困难。领导就叫我对所有设备进行统一,通过配置文件实现不同设备的作业流程。
这是一件光荣而艰巨(吃力不讨好)的任务,本着对技术的追求和公司产品的负责,我最终还是接下了该任务(基本上也就我一个人在干)。我也是延续了之前的分层架构,将整个软件分为通讯、设备、指令、控制、算法几个模块。每个模块通过单例模式进行管理,通过json配置文件创建模块中的实体并且配置该实体,通过Manager单例向外提供获取不同实体指针的方法,类似于C#中的依赖注入。这五六个月的期间,我对原有业务进行分析、抽象、编码等工作,终于在上个月完成的所有编码工作。不是我效率低,是这个项目压根就没立项,仅仅算一个附加工作,还身负很多其它的开发项目。后面也是自己主导软件的功能测试(其实就我一个人在测试)。测试过程中发现软件有内存泄漏问题,这个也是困扰了我很久,半个月的测试运行,排查到了几个内存泄漏的点:

  • 模型计算部分传入的数组指针没有释放
  • 基于Qt的modbus通讯部分reply指针没有释放

依次解决了这两个bug后,软件的内存占用就非常稳定了,我也是成就感满满,也许这就是C++这类语言的魅力吧。
这个产品软件重构也让我认识到职场的复杂性,领导怎么做比怎么说更重要,行动上的支持、物质上的鼓励才是最实在的。这个项目也是兴趣和责任推动着我做下去,a loney solider!

1.3 基于Blazor开发的数据看板

这个项目源于客户想远程查看我们在线设备的实时数据。给他装个客户端吧?显得有点麻烦,做一整套的前后端?我也不太会。
刚好看到微软新出的blazor框架,说是可以用C#写前端代码(后来发现前端那些东西还是要了解),感觉甚是好玩。就学着使用blazor写了一套后台监控数据库文件,前台实时推送数据的web程序。自己也是学了html、css、bootstrap等前端相关的基础知识,开发出来的效果还怪不错的。通过这个也是学习了前后端、iis部署、jwt权限认证等知识,另外用自己的老搭档C#写代码也是非常开心的一件事。
数据看板实图

这篇关于上位机工作感想-从C#到Qt的转变-1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/925499

相关文章

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源