编写您自己的网络化测试设备

Mark Harris
|  已创建:January 18, 2024  |  已更新:April 24, 2024
编写您自己的网络化测试设备

简介

如果你曾经手动测试过一批批的组件,你就会知道整个过程是多么的劳累和耗时。每次测试都遵循相同的基本步骤,重复进行每一项你正在测试的项目。你也会理解使用你可以编程来执行这些步骤的测试设备的力量,这样你只需设置好一切并将一切连接好,然后按一个按钮就可以进行测试。通过用计算机鼠标点击一下自动配置所有测试设备,你可以节省更多时间。

然而,如果你想创建定制的测试设备以添加到你的自动化测试套件中呢?这个分步指南将向你展示如何编写代码,以便你可以从电脑上舒适地配置你的网络化测试设备。

网络化自动化消除了单独设置每件测试设备的需要,并且如果你需要在将来重复相同的测试,它可以节省时间。好处是,在任何断电或意外关闭设备电源后,恢复设置是快速且简单的。

SCPI简介

如果你对网络化测试设备不熟悉,你需要了解可编程仪器的标准命令(SCPI)。早些时候,惠普提出了一个标准接口总线的概念,这将允许任何具有正确接口的计算机连接到任何一件测试设备。这个HPIB标准被称为通用接口总线(GPIB),它拥有自己的IEEE 488标准指定。这种标准化使得每件网络化测试设备能够响应来自计算机的命令来执行功能,如输出信号或进行测量。

SCPI通过为IEEE-488标准增加了一个额外的层来扩展测试设备的标准化网络,以规范测试设备能够理解的计算机命令。这种方法现在意味着,由HP制造的示波器将响应与由Keysight制造的示波器相同的命令。在命令标准化之前,通常同一制造商生产的不同型号会对不同的命令作出反应。这种标准化意味着,计算机上的测试设备控制程序将适用于任何品牌和型号的实验室设备,因此,例如,将网络化的台式电源更换为更好的型号不需要更改控制程序。

这种标准化也意味着,为这个分步指南编写的任何代码,如果你拥有相同的网络化测试设备类型连接到适当的计算机,在任何其他实验室都将适用。

SCPI简介

SPCI命令是以简单的ASCII字符串形式出现的,这些字符串相当直观易懂。例如,向测试设备发送命令“*RST”将会重置它;发送命令“*WAI”将指示它等待。

SPCI命令可以指示测试设备执行动作或根据其格式请求信息。例如,命令“TIM:ACQT 20ms”将改变示波器的采集时间为20ms,而命令“TIM:ACQT?”将使其返回当前的采集时间。

需要考虑的重要点是,命令不区分大小写并支持缩写形式,因此,例如,“TRIG SOUR CH1”和“Trigger source Channel1”都是同一命令的有效替代。你也可以连接命令,例如,“TRIG SOUR CH1”、“TRIG LEVEL1 10”和“TRIG POL INV”可以写作“TRIG:SOUR CH1;LEVEL1 10;POL INV”,因为所有命令都适用于同一个TRIG。这些命令设置源通道、其电平(伏特)和极性。此示例将通道1的电平设置为10V,极性为反向。你不必指定其触发器1,因为这是默认的,但你可以使用“TRIG1:”来避免歧义。

编码项目

本文附带的视频展示了如何创建自己的网络化测试设备,该设备使用SCPI命令。这是基于之前一个展示如何为自动化与测试设备通信的视频。

这项练习的目标是使定制测试硬件能够无缝地适应任何可以处理SCPI命令的现有测试软件,例如使用局域网扩展仪器(LXI)或虚拟仪器软件架构(VISA)的软件。最终目标是通过将微控制器集成到自动化测试硬件中,开发出一个综合的、一体化的测试设备。

编写您自己的网络化测试设备

该项目的核心是为工业应用设计的英飞凌XMC4700 Relax Kit开发板。该板包括一个微控制器,具有静态和动态内存、时钟、电源供应、标准接口和基本控制。它还包括一个带有媒体访问控制(MAC)地址的板载以太网连接,用于网络连接。

这种设置的一个关键优势是英飞凌提供的数字应用虚拟工程师(DAVE)集成开发环境的可用性。DAVE是一个基于C的软件开发和代码生成工具,用于微控制器应用。它允许简化编码过程,方便地处理大多数设置任务,因此你可以专注于实现SCPI命令。

我们将创建的测试代码会读取按钮的位置并控制LED的状态。这个简单的测试将提供一个易于理解的例子,并为进一步探索自动化测试的力量和好处提供一个绝佳的起点。

逐步编码指南

项目设置:

编写您自己的网络化测试设备 逐步指南

在使用DAVE工具开始一个新项目时,第一步是使用“文件 -> 新建 -> DAVE项目”命令序列创建一个新的项目文件。这个操作将打开一个新窗口,在这里你可以选择“DAVE CE项目”选项并给它一个合适的名字。

编写您自己的网络化测试设备 逐步指南

然后你需要选择你的目标硬件;在这个例子中,是XMC4700 Relax Kit。

除非你的项目将受到资源限制,否则总是好的做法使用功能齐全的newlib标准库而不是nano-size选项。

编写您自己的网络化测试设备 逐步指南

下一步是使用“DAVE -> 添加新APP”命令为项目设置外设。

编写您自己的网络化测试设备 逐步指南

首先需要设置的配置是网络连接,你可以通过“以太网 -> ETH_LWIP”命令来完成,它为项目添加了一个轻量级互联网协议(IP)堆栈来处理这个接口。

编写您自己的网络化测试设备 逐步指南

你还需要为测试设备添加输入/输出(IO)接口,在这个例子中是按钮和LED指示灯。两者都是离散组件,所以你必须在系统命令选项下添加两个“DIGITAL_IO应用”,每个元素一个。

测试

将IO应用程序重命名以在其名称中标识其功能是一个好习惯,这样可以使生活更加轻松,防止意外访问错误的应用程序。当尝试调试表现异常的测试程序时,这种错误可能难以发现。

测试中

您还必须通过右键点击“ETH_LWIP App”并点击“配置APP实例”来配置以太网连接的IP堆栈。您会发现XMC4700 Relax Kit已经预配置,这可以节省时间。您需要在IP设置页面更改静态IP地址,以匹配您用于自动化测试的计算机的子网。此外,此示例中不需要用户数据报协议(UDP),因此您可以在协议设置选项卡中停用此功能。

测试中

最后,您需要使用手动引脚分配选项为每个组件提供APP引脚设置与微控制器硬件之间的映射。要配置离散按钮,您右键点击按钮并选择“手动引脚分配器”命令。

测试中

然后,您可以从下拉菜单中为Relax Kit上的按钮选择适当的引脚号码,这非常方便,因为它提供了标签以使此过程直接明了。配置LED和以太网连接都遵循相同的过程。您会发现,引脚分配功能通过仅允许您选择具有所需功能的引脚来简化了这一过程。该工具自动提供所有XMC4700 Relax Kit标签,使这一过程直接明了。

这些步骤完成了您的自动化测试项目的设置,现在您已经准备好编写测试代码了。

项目应用编程

测试

您可以通过简单地点击DAVE工具栏上的“生成代码”按钮来生成应用程序的代码,然后坐下来等待操作完成。

在愤怒地编码之前,推荐的一步是将控制台从微控制器转移到计算机,提供简单的`printf`访问。这将允许您格式化并打印数据,使编写和调试代码更快更容易。您可以通过启用配置设置中的“GDB半托管”来实现这一点。您可以通过导航到“项目属性”,继续到“C/C++构建”,然后选择“设置”来完成此操作。

测试

在“ARM-GCC, C链接器, 杂项”下,您需要在“其他”标志中添加“–specs=rdimon.specs”。此步骤为链接器集成了半托管配置。

测试

然后,您可以转到“ARM-GCC C编译器, 预处理器”部分,并添加一个新定义的符号“XMC_DEBUG_ENABLE”。此设置确保在调试构建配置中重定向控制台。

测试

您需要在项目设置下取消选中提供“默认newlib系统调用”的复选框,该选项位于“ARM-GCC C链接器, 常规”设置下。如果您保留此选项选中,您会发现它会中断监视器句柄初始化并导致构建失败。

接下来,您需要初始化监视器,这可以通过在代码开头添加“extern void initialise_monitor_handles(void);”来完成。这个函数需要在DAVE_Init();调用之后被调用。

请注意,“initialise”的拼写是英式英语变体,因为ARM基地位于英格兰的剑桥。使用美式拼写会引发一个错误,如果您没有注意到微妙的拼写差异,这个错误可能很难解决。

项目网络编码

让以太网网络工作的第一步是启用轻量级IP堆栈,定期检查新消息。您可以通过在初始化完成后运行的无限循环中添加对函数“sys_check_timeouts();”的调用来实现这一点。

此功能需要调试才能在微控制器上运行。您可以通过创建一个新的调试配置来实现这一点。建议关闭“在主函数处设置断点”选项,以允许代码在微控制器启动时立即运行。选择调试选项将会将您的新代码加载到微控制器中。

测试

您可以通过在计算机上打开Windows控制台并ping开发板的IP地址来确认代码正在运行,在本例中,开发板是XMC4700 Relax Kit。开发板应对每次ping作出响应,确认开发板正在运行且网络连接正常。

轻量级IP堆栈代码将自动处理互联网控制消息协议(ICMP)功能。但是,您必须创建代码来处理传入的传输控制协议(TCP)连接和数据。您可以使用标准的轻量级IP堆栈代码语句来完成这一点,这些语句不特定于微控制器。

现在您已经完成了网络连接配置,您可以设置协议控制块以侦听5025端口,SCPI代码使用该端口进行通信。您应该配置轻量级IP堆栈,将所有新连接委托给一个名为client_accept的函数,您需要扩展此函数以处理新客户端。所有接收到的数据都需要重定向到一个单独的处理函数,该函数还将输出一个调试消息以指示收到新连接。

实现一个client_recv方法将会将接收到的数据复制到一个缓冲区进行处理。此函数还应检查没有数据的连接,这表明远程主机已关闭连接。对于这种情况,代码可以执行清理操作以移除关闭连接后留下的任何不需要的痕迹。

编译代码将生成一个功能性构建,如果没有编码错误需要调试。

项目IO编码

下一步是配置“数字IO应用程序”以执行它们所需的操作。

测试

右键点击每个应用程序并选择“配置应用程序实例”选项。IO组件的默认设置是三态输入,非常适合按钮。然而,对于LED,你需要将设置更改为“输入/输出”,具有强驱动和软边缘。这种强驱动配置确保电路板将产生足够的驱动电流来点亮LED。软边缘配置指的是引脚边缘过渡速度。软边缘可以缓解对电源分配网络的任何瞬态效应,并减少对电磁兼容性不利影响的风险。除非你需要具有纳秒级边缘速率的信号,否则使用这个选项对于离散输出来说是个好习惯。

重新生成更新后的代码将把这些新变化添加到功能构建中。重要的是要记住,在对DAVE应用程序进行任何更改后,总是重新生成代码。

项目SCPI编码

随着配置和初始化功能的完成,项目编码终于可以开始实施测试的SCPI命令了。没有必要从头开始实现SCPI命令;GitHub上有一个由Jan Breuer提供的出色SCPI-Parser库作为起点。

你可以通过将libscpi文件夹提取到项目的Libraries文件夹中来利用这个资源。然后从“examples -> common”中提取scpi-def文件夹到你的项目文件夹。这一步导入了SCPI-Parser库,并为实施你的项目提供了一个良好的起点。

你需要在DAVE的集成开发环境中删除libscpi库中的test文件夹和makefile,因为这些将与正在使用的ARM-GCC库不兼容。

测试

然后回到项目属性窗口下的“构建,设置,编译器,目录”,并添加一个引用到libscpi includes文件夹。

你还需要打开scpi-def.c文件,并添加一个包含“dave.h”的声明,以将你的IO函数链接到scpi-def文件。

顺便说一句,这个文件包括了一个数字万用表的精彩演示实现和自动化测试的功能。不幸的是,这些功能与本例中使用的ARM编译器不兼容,因此需要被移除。然而,如果将来你需要实现自己的功能,你可以参考原始文件作为参考。

编辑文件时,删除命令配置块中所有的DMM和测试功能,但保留TST命令和所有后续声明的代码,以及库将处理的标准SCPI命令。

您可以在“scpi-def.h”文件中定义测试设置的识别信息,因此使用SCPI *IDN命令将对任何识别请求返回有用的信息。

您可以在项目的“main.c”文件中设置SCPI命令。您需要使用user_context属性将SCPI上下文添加到main函数中,以传递对轻量级IP协议控制块的引用,允许初始化SCPI库。然后您需要添加您的函数以使libscpi能够通过网络连接进行通信。在此示例中,需要定义以下函数:

  • “SCPI_Write”函数允许libscpi通过网络连接发送数据。

  • “SCPI_Flush”函数通知轻量级IP堆栈立即发送缓冲区中的任何数据。

  • “SCPI_Error”函数提供了一种处理SCPI错误的方法。对于这个基本示例,您可以通过简单调用printf函数来绕过这一点。

  • “SCPI_Control”函数是一个可选功能,允许您写入TCP端口5026上的控制通道,对于此示例,您不需要此功能。

  • 接收到重置命令时调用的“SCPI_Reset function”,将所有测试仪器恢复到默认设置。对于这个基本示例,没有连接的测试设备,所以您可以通过简单调用printf函数来绕过这一点。

测试

最后,当连接到轻量级IP堆栈时,需要为新客户端连接设置user_context。这将允许数据通过client_recv函数从缓冲区传递到“SCPI_Input”进行处理。您需要注意,这个实现不会同时处理多个连接,但代表了良好的网络配置实践。

编译更新后的代码并将其上传到微控制器,应该会得到一个测试系统,不仅继续响应来自Windows控制台的ping请求,还应该响应SCPI命令。

项目SCPI代码测试

这个示例项目使用了Rohde & Schwarz VISA Tester应用程序来测试SCPI命令。

测试

在将应用程序连接到测试设备后,首次测试是发出身份(IDN?)请求。这是推荐的第一步,该命令完全由SCPI库处理,确保通信正常并且正确设置了库。这意味着解决任何涉及需要来自外围设备或测试设备的响应的测试问题时,可以假设通信和库在调试过程中不是问题所在。

测试外围设备需要向`scpi_commands`数组添加新模式以实现所需功能。可以包括对“printf”函数的调用来调试功能,提供一种验证代码执行的简单方法。

测试

在示例中,代码使用“scpi_result_t IO_Btn”函数读取按钮的状态,该函数之前已在DAVE App中为按钮处理程序设置,状态使用“SCPI_ResultBool”响应发送。返回值被反转,因为这个按钮是一个低电平有效的组件。

测试

LED处理函数解析接收到的按钮状态参数,并设置适当的LED状态。如果不存在参数,则在此示例中不采取任何行动。此步骤使用“scpi_result_t IO_Led”函数来执行其功能。

微控制器编程完成后,您可以使用DAVE工具中的控制台选项卡测试代码。这将展示连接和身份请求命令的操作收据。

测试

您可以通过发送SCPI查询来检查按钮的状态,并通过观察返回状态在您按下按钮时改变来测试功能。

您可以简单地通过发送开和关命令来测试LED功能,观察灯的状态,并监视控制台的状态。

当按钮和LED都正常工作时,您就拥有了一个完全功能的网络连接仪器的基础。连接测试自动化平台或编写您的测试代码将使您能够远程检查按钮的状态并控制LED。

结论

本文展示了如何使用DAVE集成测试环境以及开发板,让您能够创建并连接自己的网络测试设备,以便与您的台式设备集成并自动化实验室测试。

这个逐步指南是为了一个基本的概念验证演示,但遵循这些步骤并获得一个工作的测试系统将为您提供创建自己的测试仪器所需的一切。

我们将利用在此项目中探索的原则,来创建一个实用的测试设备,因此请继续关注未来的发展。

关于作者

关于作者

马克·哈里斯(Mark Harris)是一名工程师,在电子行业拥有超过12年的丰富经验,涉及从航空航天和国防合同到小型产品初创公司,业余发烧友以及两者之间的所有事务。在移居英国之前,Mark曾受雇于加拿大最大的研究机构之一;每天都接触与电子、机械和软件相关的不同项目或挑战。他还为Altium Designer发布了最广泛的元件开源数据库,名为Celestial数据库。Mark对开源软硬件以及此类项目面临的日常挑战所需的创新型问题解决方案有浓厚兴趣。电子会让人充满激情;看着产品一步步从构想变为现实并开始与世界互动,可以说其乐无穷。 您可以通过以下方式直接与

Mark联系:mark@originalcircuit.com

相关的技术文档

返回主页
Thank you, you are now subscribed to updates.