添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

测试上位机背景需求

从使用场景中寻找痛点,挖掘场景中的智能硬件需求。嵌入式开发针对实际之问题,提出对应的解决方法。单独的产品针对应用场景在供电、电磁兼容性以及IP防护等级的要求下,对支持的功能进行梳理,在低成本和短开发周期的要求下,进行原理总图纸的敲定以及主要芯片器件的选型。
硬件原理确定之后,软件就可以针对主控芯片以及各个功能子系统编写对应的驱动级别软件,这部分作为嵌入式软件中相对基础的部分,在PCBA出来之后就可以进行调试。编写初始化和简单独立的控制逻辑就可以进行调试,作为验证原理以及板图的手段。这部分"测试"不是我们本片要讲的测试。
本片要讲的测试,主要是针对智能硬件(是将板子装到外壳里)在实际的应用场景的测试。首先,冷冰冰的硬件之所以称为智能硬件,不是因为我们能够驱动一些子系统完成一些功能,或者是将某种协议转换另一种协议进行透传,而是是因为嵌入式软件针对需求,针对使用场景,完成了一些业务逻辑上的实现以及优化,而这部分软件,是需要实际的业务使用才得以验证是否没有问题,越是深入行业的设备,这部分代码在总工程的比重越重。其次,有很多功能子系统(诸如射频),周围环境对其的影响颇大,需要调整驱动部分的代码来改变参数适应环境,甚至需要芯片的选型以及硬件的原理来达到要求。
嵌入式软件的测试软体不宜太庞大,用java或者c#或者Qt编写一个针对整个产品线的测试平台这是可以理解的,但是针对深埋某个业务场景中的智能硬件,就显得有些臃肿。于是,使用Python这种功能强大且跨平台的脚本语言,无论应对产品的测试,甚至是产品的功能演示,都能很好的完成。

Ptyhon环境的搭建

这里专门说一下Python环境的搭建,是因为这里边涉及一个Python2与Python3同时使用的问题。Python2与Python3在很多地方都不太一样,我以前的大部分测试程序都用的Python2来编写,但是Python3的库使用起来更加简单,所以新的测试程序我就是在用3在写。
以前的开发用的是VSCode代码编辑器来写Python的,下载安装的是Python2.7。在换3的时候发现了一个专门针对Pyhon的集成开发环境PyCharm,下载以及简单的使用教程见链接:
PyCharm 。这里专门说一下针对两种不同版本解释器的选择:点击File目录下边的Settings,选择左侧Project:Python_Project栏中的Project Interpreter,可以切换工程的解释器,值得一提的是编译器自带Python3的解释器: 切换解释器

TCPServer+Client Python3实现

下面贴的代码是用Python3写的TCP服务器以及TCP客户端的实现代码,里边掺杂了一点业务,都是收到了特定的字节流将业务名称以及接收的时间打印了出来。详细的内容见代码。

import socketserver
import time
from socket import *
import multiprocessing
import struct
import os
import datetime
lhost = '192.168.1.100'
lport = 1008
laddr = (lhost, lport)
lbufsize = 1024
    for i in range(len(s)):
        # print(s[i])
        send_buf += struct.pack('B', int(s[i], 16))
    return (send_buf)
# 自定义类来实现服务器通信处理
class MyTCPHandler(socketserver.BaseRequestHandler):
    # 必须写入handle方法,建立链接时会自动执行handle方法
    def handle(self):
        flag = 0;
        t = time.time()
        nnowTime = lambda: int(round(t * 1000))
        while True:
            try:
                data = self.request.recv(1024)
                if not data: break
                nowTime = nnowTime();
                temptime = "%s" % (nowTime);
                # temptime = time.strftime( '%Y-%m-%d-%H-%M-%S', time.localtime( time.time() ) )
                for i in range(len(data)):
                    if (data[i] == 0x02 and data[i + 1] == 0x92):
                        LocalAddr = " %x%x " % (data[i - 2], data[i - 1]);
                        if (data[i + 2] == 0x01):
                            print(temptime + ',Light Up' + LocalAddr)#光电触发
                        elif (data[i + 2] == 0x00):
                            print(temptime + ',Light Doen' + LocalAddr)#光电移开
                        else:
                            print(temptime + ',Error')
                self.request.send(data.upper())
            except ConnectionResetError:
                break
        self.request.close()
#客户端进程
def run_proc(name):
    tcpClient = socket(AF_INET, SOCK_STREAM)  # 这里的参数和UDP不一样。
    tcpClient.connect(laddr)  # 由于tcp三次握手机制,需要先连接
    ldata = "00 36 0F 02"  # 设置自适应功率
    ldata = str_to_hex(ldata)
    # tcpClient.send(b"\x01\x02\x03\x03")#设置功率
    # tcpClient.send( b"\x01\x02\x03\x04" )#设置功率
    tcpClient.send(ldata)
    DataTime = 0
    while True:
        data = tcpClient.recv(lbufsize)
        # temptime = time.strftime( '%Y-%m-%d-%H-%M-%S', time.localtime( time.time() ) )
        t = time.time()
        nowTime = lambda: int(round(t * 1000))
        int(round(t * 1000))
        for i in range(len(data)):
            if (data[i] == 0x01 and data[i + 1] == 0x02 and data[i + 2] == 0x03):  # 记录读到标签的时间
                DataTimeOn = nowTime();
                formated_str = "%s" % (DataTimeOn);
                print(formated_str + ',Lebal Found')
            elif (data[i] == 0x01 and data[i + 1] == 0x02 and data[i + 2] == 0x04):  # 记录没有读到标签的时间
                DataTimeOff = nowTime();
                formated_str = "%s" % (DataTimeOff);
                print(formated_str + ',Lebal Not Found')
    tcpClient.close()
if __name__ == '__main__':
    p = multiprocessing.Process(target=run_proc, args=('1',))
    p.start()
    server = socketserver.ThreadingTCPServer(('127.0.0.1', 1234), MyTCPHandler)
    server.serve_forever()  # 链接循环
    p.join()

正所谓磨刀不误砍柴工,这部分的代码我一个经常不用Python的人查查资料,写起来也就1个小时左右,如果使用网口助手+execl记录这些时间,当次数多起来的时候就会体现出这种测试脚本的优势。

十六宿舍 原创作品,转载必须标注原文链接。
©2023 Yang Li. All rights reserved.
欢迎关注『
十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。

网络调试助手 程序设计 点此在我的博客中查看原文,显示效果更佳 NetAssist_PyQt 项目已开源分享至GitHub,如果这个项目和这篇博客对你有帮助的话,希望你能给我一颗小星星✨ 寒假学习了计算机网络方面的知识,把之前稍有了解的socket编程进一步学习,加之从夏天学到冬天一直在学一直没学完的PyQt5终于学到70%入门了,于是萌生了给自己做一个好看又好用的网络调试助手小工具的想法,把socket编程、面向对象编程、PyQt编程、逻辑与界面分离、git多分支等新知识运用在实践中。也便于未来写
内容概要:通过带着读者研究嵌入式中间检测设备开发。利用嵌入式设备的优势,将嵌入式设备安装在现场,供远程操作使用。中间检测设备选择基于 ARM 框架的Raspberry Pi,Raspberry Pi 的性能完全符合检测工作,结合它的特性选择Python 为主要开发语言,C/C++和 shell 脚本辅助开发。 其次,研究以 Web 界面形式呈现软件应用程序。根据 Linux 操作系统的特性,选择以 Web 界面形式实现软件应用程序功能,选择 Python 的轻量级Web 服务器 Django。将检测功能的软件集成到 Web 当中,并将 Web 部署到Raspberry Pi 上。根据 Python 语言的优势并结合 适合人群:具备一定Python编程基础,学习0-4年的研发人员 能学到什么:①Django Web 框架、检测技术是怎么在系统中体现的;②软件功能集成和部署、端口扫描都是如何设计和实现的。 阅读建议:此资源以开发Python预警机系统检测学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。
### 回答1: 串口调试助手是一款常用的软件,在嵌入式系统开发中被广泛使用。Python语言是一种脚本语言,设计简洁,易于学习,能够快速开发应用程序。因此,使用Python开发串口调试助手非常方便。 Python本身就有许多库可以用于串口通信,如pySerial、serial等,这些库提供了许多现成的函数和类来实现串口数据的读取和发送。通过这些库,开发一个基本的串口调试助手并不难。 在开发串口调试助手时,首先需要创建一个串口对象,并设定波特率、数据位、奇偶校验等串口参数。然后,通过读取串口数据和向串口发送数据来实现串口数据的收发。同时,为了便于用户使用,还要提供一些常用的功能,如清除接收缓存、自动换行等。 在串口调试助手的界面设计上,可以借助Python的GUI库来开发。Python的Tkinter、PyQt、wxPython等GUI库都可以轻松创建各种控件,如按钮、文本框、下拉菜单等。通过这些控件,可以在窗口中实现串口连接、数据发送、数据接收等功能。 总的来说,使用Python开发串口调试助手是一项简单而又实用的工作。Python语言简洁易学,有丰富的库和GUI工具包,可以快速实现一个功能齐全的串口调试助手,并且可以根据需要进行灵活的定制和扩展。 ### 回答2: Python的串口模块已经被广泛地应用于串口通信调试软件的开发中。使用Python可以快速而轻松地开发串口调试助手,而且还可以实现诸如数据发送和接收、格式化和解析数据、自动化测试、数据存储和分析等功能。 首先,我们需要安装Python的串口模块pyserial,它可以轻松地与各种串口通信设备交互。下载安装好模块后,可以通过以下代码打开串口: import serial ser = serial.Serial('COM1', baudrate=9600, timeout=1) 其中,'COM1'是串口的端口名称,根据实际需要修改。baudrate表示串口的波特率,timeout表示读取数据的超时时间。此时,我们已经成功打开了串口。 接下来,我们可以通过ser.write()函数向串口发送数据: ser.write('Hello world!') 如果需要发送多个字节的数据,可以将数据存储在一个字节数组中,然后将该数组作为参数传递给write()函数。 在接收数据时,我们可以使用ser.readline()函数来读取一行数据。如果我们想要读取特定数量的字节,则可以使用ser.read()函数。例如,以下代码读取10个字节的数据: data = ser.read(10) 在读取数据时,我们还可以通过格式化和解析数据来实现更复杂的功能。例如,我们可以使用Python的struct模块将接收到的字节数据解析为更易读的格式: import struct bytes_data = ser.readline() # 解析数据 parsed_data = struct.unpack('f', bytes_data) # 输出数据 print(parsed_data) 在开发串口调试助手时,我们还可以自动化测试、分析数据和将数据存储到文件中。Python的库和模块可以极大地简化这些任务。例如,使用matplotlib库可以实现绘制实时曲线图,使用numpy库可以实现高效的数据处理和分析。 综上所述,Python的易用性和强大的库和模块使其成为开发串口调试助手的理想选项。通过充分利用Python的功能和工具,我们可以更快地设计出精确、稳定和易于使用的串口调试工具。 ### 回答3: Python作为一种高级编程语言,非常适合用来开发串口调试助手。串口通信通常用于和嵌入式系统进行通信,而Python可以轻松地实现这个过程。下面,我将从以下几个方面具体介绍Python开发串口调试助手: 1. 串口通信基础知识 在了解如何使用Python开发串口调试助手之前,需要先了解串口通信的基础知识。串口通信是一种异步通信方式,需要通过波特率、数据位、停止位、校验位等设置来保证通信稳定。 2. Python串口通信库 Python有一些强大的串口通信库,比如pySerial、serial、pymodbus等。这些库可以帮助程序员直接在Python实现串口通信功能。其中,pySerial是最常用的串口通信库之一,它被广泛应用在串口通信、嵌入式系统调试以及机器人等领域。 3. 主要功能实现 Python开发串口调试助手的主要功能包括串口打开、参数设置、数据读取和发送、校验位检测等。首先,需要使用pySerial或serial等库打开串口,并设置串口参数。接着,可以通过串口进行数据读取和发送,同时还需要加入校验位检测,保证数据的正确性。 4. GUI界面 Python支持多种GUI库,比如Tkinter、wxPython、PyQt等。可以利用这些GUI库,为串口调试助手添加图形用户界面,提高调试的友好性。在GUI界面上,可以添加各种输入框、按钮、菜单等,让用户更方便地输入命令和发送数据。 5. 高级功能扩展 Python不仅可以实现基本的串口通信功能,还可以扩展更高级的功能,比如协议解析、数据存储和可视化等。例如,可以通过Python解析协议格式,将数据按照格式显示在GUI界面上或保存到文件中。同时,也可以将数据用图表、曲线等方式进行可视化显示,更直观地了解数据的分布规律和变化趋势。 总之,采用Python开发串口调试助手可以有效地提高调试效率和便捷性,同时也具备不错的扩展能力,可以适应更多的调试需求。