如何使用Python开发串口通讯上位机(完结)

2021的第一份更新,比以往时候来得早一点!

前面两期讲了如何使用pyserial和做好了基本的上位机界面以及与API的联动,今天我们接着完善下代码。

1

编码规范的使用

前面两期只是做基础展示用,所以代码写得随意。但是纵观一份软件的开发和使用周期,实际开发阶段编码的时间占比很少,而绝大部分时间都处于代码调试、查阅以及优化升级中,因此代码的可读性与可维护性至关重要。所以大家在编码之前不妨先熟读一下Python常用的编码规范PEP8,增强代码可读性的同时也能拉近你和其他开发者间的距离。

由于UI文件自动导出的py文件没有严格遵循PEP8,因此为了保证风格一致,我的在UI代码文件中新增的代码会维持自动代码的风格。另外为了快速区分不同类型的组件,我一般习惯如下方式规定前缀:

- Text输入显示:前缀TXT_

- Button组件:前缀B_

- Label组件:前缀L_

- Listwidget:前缀LW

类,函数与变量的命名规则可以参照如下:

2

类的使用

接触过C++,C#等语言的小伙伴,对类的概念应该不陌生,类提供了一种组合数据和功能的方法。对于串口通信而言,我们可以把常用操作(初始化,扫描可用串口号,数据收发等)封装成一个类,通过继承与派生,方便我们在不同项目中移植使用,增加代码复用率,避免无谓地重复造轮子。

3

线程的使用

上一期的接收函数,我们直接写成一个死循环,在主程序中调用,会导致页面的刷新不够及时。所以此子章节来讲讲如何创建线程,并让线程自行管理数据接收轮询。

线程(Thread)也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。线程自己不拥有系统资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。就以我们这个上位机为例,上位机软件本身可以认为是一个进程,它的页面刷新与响应,以及接下来说的串口接收,可以认为是同属上位机进程的线程。

此处,在打开串口成功以后,我们将接收操作放入一个线程中,并在检测到用户点击关闭串口后结束。

另外,页面动态刷新,我们其实也可以创建一个周期性执行的线程用于内容可变的组件的刷新。

4

队列的使用

我们的上位机功能相对简单,其实没必要用到FIFO队列。但是如果在做复杂功能时,例如需要对接收数据进行进一步处理时或者有多处线程需要发送数据时,不妨使用队列进行数据管理存储。队列的本质为先进先出的数据结构,在python标准库中已经封装好了的线程安全的队列, 简化了我们多线程的信息传递。

此处,我们将接收到的数据放入队列.

5

数据接收十六进制显示

接收可以选择将数据以Hex显示还是ASCII显示,此处结合radio button讲讲如何实现。radio button有个属性为isChecked,表征是否被选中。另外通过hex函数可以将数值转换成16进制, 并以0x开头的字符串形式显示。而如果要显示当前整数对应的 ASCII 字符,则使用chr()函数

6

总结

本篇主要介绍了几个提高代码可读性和可维护性以及代码优化的方法,限于篇幅,发送数据格式的转换就不提及了,当作课后小作业进一步完善这份上位机。

码字不易,赞赏后会在下方显示获取源码的方法。

(0)

相关推荐

  • 第52天:Python multiprocessing 模块

    本节主要介绍 multiprocessing 多进程模块,由于 threading 多线程模块无法充分利用电脑的多核优势,而在实际开发中会对系统性能有较高的要求,就需要使用多进程来充分利用多核 cpu ...

  • 一篇文章带你解析Python进程

    来源|本文经授权转载自Python爬虫与数据挖掘 前言 进程,一个新鲜的字眼,可能有些人并不了解,它是系统某个运行程序的载体,这个程序可以有单个或者多个进程,一般来说,进程是通过系统CPU 内核数来分 ...

  • Python移动自动化测试面试准备

    自动化测试工具 Instrumenttation UIAutomator +uiautomatorviewer Selendroid Robotism Appium selenium 自动化框架 Un ...

  • ROBOMASTER TT巡线.1

    这就是我们的小主角了 不加扩展件的样子,也可以完成所有的功能 http://www.opdown.com/soft/219172.htm http://02.down.xindazheng.cn:97 ...

  • 如何使用Python开发串口通讯上位机(二)

    黑色的dos窗口对于大部分来说,页面极为不友好,且操作不方便,因此本篇主要讲讲如何结合QtDesigner创建一个UI并初步与串口Api链接. 1 QtDesigner进行上位机页面设计 Python ...

  • 如何使用Python开发串口通讯上位机(一)

    用Python开发串口通讯型上位机,其实并非最优解,本系列更新只为个人学习与总结.如果有C语言底子,嵌入式层面的上位机开发,C++ Builder,C#才是更加好用的利器. 1 什么是上位机 从事过嵌 ...

  • 台达变频器通过以太网方式与上位机组态王通讯实例

    此例以台达变频器型号:VFD-M+来说明,该款台达变频器是只有RS485接口的,现在上位机最方便的就是通过网口来连接,要想与上位机通讯,那么就得接一个转换器,这个转换器就是RS485转网口的,当然协议 ...

  • python与arduino串口通讯对接opencv实现智能物品分拣

    2018-05-0118:53:50 先上图: 再来视频: //v.youku.com/v_show/id_XMzU3NzAwNzMyNA==.html?spm=a2hzp.8244740.0.0 # ...

  • 上位机开发必备的一个实体类

    -Begin- 上位机开发过程中,当自己编写通信类库的时候,包含ModbusRTU协议.ModbusTCP协议.各种PLC协议或其他自定义协议,都会涉及到报文的拼接:另外,如果大家做过一些配方管理的项 ...

  • 上位机开发之三菱Q系列PLC通信实践

    上位机开发之三菱Q系列PLC通信实践

  • 上位机下位机串口通信设计详解

    串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串行接口电路. 串口通信结 ...

  • mpi转以太网与IFIX上位机软件通讯

    mpi转以太网与IFIX上位机软件通讯 方案说明 现场是西门子300 315-2dp plc连接上位机组态软件,实现设备组网,上传数据到中控室.采取的方案是用兴达易控CHNet-S7300MD的一款3 ...

  • BLE4.0安卓上位机开发小技巧

    赶着五一假期看了看41Z里面BLE这块的SDK,发现NXP提供的example里面用到的UUID基本都是SIC组织规定的service和characteristic,而且用的传感器数据基本都是随机数 ...