0

我不知道如何命名我的问题,但我首先想到的是这个“多设备软件”的东西。

我是一名电子工程专业的学生,​​对仪器控制感兴趣。为此目的使用 C# 并具有 C# 表单应用程序的基本知识。此外,还有一个由 IVI 基金会开发的标准命令集,名为“SCPI 命令”。这是一种简单的仪器控制方法,您无法为功能齐全的仪器控制系统编写一些 SCPI 代码。在这里,“驱动程序”发挥作用。大多数制造商在您购买他们的产品时都会提供设备驱动程序。使用此驱动程序文件,您可以创建功能齐全且响应迅速的软件。您也可以根据自己的需要开发自己的驱动程序。但是,尽管 SCPI 是所有类型仪器的标准,但一些多命令开始给您带来问题。例如,您为 A 品牌编写代码,但该代码不适用于 B 品牌'

主要目标是为多条同轴电缆创建电缆损耗计算软件。您必须使用频谱分析仪和射频信号发生器来执行此任务。我们有几个频谱分析仪和大量的信号发生器在使用中。

通过一个程序,我们必须控制我们所有的设备。这是我的问题。

我想创建一个适用于我们所有频谱分析仪和信号发生器的响应式软件。我怎样才能做到这一点 ?首先,我认为我可以为每个设备创建一个驱动程序,并且主程序通过提示用户或类似的东西来选择正确的驱动程序。但我不知道如何实现这一点。其次,我可以为每种设备组合编写软件的主要部分,并在运行时将该部分与 .txt 文件一起包含到主要软件中。我知道这是一种菜鸟方法,但我认为我可以毫不费力地做到这一点。而且我对第一种方法一无所知。第三,我可以为程序中的每个设备编写所有设备的命令,并使用 if 条件在不同情况之间进行选择。或开关盒结构。如果我不能用其他选项做到这一点,这是唯一的方法。

你可能直到这里才理解我,因为我无法准确描述问题,因为我是一名业余软件开发人员。

假设您有一个信号发生器。您要选择频率 10 MHZ。这是安捷伦 33120A。要使用计算机实现此目的,您需要将此命令发送到设备。

SOUR:FREQ 10 MHZ

之后,设备将频率设置为 10 MHZ。假设您有另一个制造商的信号发生器,并且要使用此设备实现完全相同的功能,您可能必须发送它;

SENS:FREQ 10 MHZ

这两个执行相同的操作,但 SOUR 和 SENS 部分取决于设备。

要使用 C# 创建程序,我们使用 API 与设备进行通信。如果您使用 GPIB 协议,API 的名称是 NI488.2。如果您使用 RS232,您可以使用 VISA API 等。顺便说一下,我们的协议是 GPIB。借助 GPIB,我们使用包装器轻松地将 SCPI 命令与 C# 环境集成。例如,在将 GPIB 库添加到引用后,您可以使用它通过 C# 表单接口发送命令;

ibwrt("SOUR:FREQ 10 MHZ", "SOUR:FREQ 10 MHZ".Length);

现在我遇到了最大的问题。我怎样才能使这部分代码创建一个成功的响应程序?例如使用安捷伦信号发生器和罗德与施瓦茨频谱分析仪的操作员。另一家运营商正在使用 IFR 信号发生器和 HP 频谱分析仪。但他们使用相同的软件。IFR 信号发生器可以使用“SENS:FREQ”进行操作。

在操作开始之前,会弹出一个提示并询问设备的驱动程序。我不知道。这些是我首先想到的。但如果你是我,你是如何做到这一点的?如果您选择一个选项,请告诉我该怎么做。我被这个困住了。现在程序有大约 2000 行代码。“ibwrt”不是程序的唯一部分,“SENS:FREQ”也不是……还有用于其他任务的“SENS:BAND:RES”、“INIT:CONT”等。这并不重要。

我希望你能理解我的问题,因为我知道我无法正确判断。

如果您对问题有任何疑问,请随时发表评论。

谢谢。

TL;博士

我需要通过 C# Forms 接口为每个设备发送命令。我的意思是设备有它们的特殊命令,我需要创建一个可以通过用户选择来控制每个设备的软件,而不是为每个设备创建一个软件。

4

1 回答 1

0

IDevice用你需要的所有东西(比如)实现接口SelectFrequency(...),并实现类Abrand : IDeviceBbrand......等等。这是唯一的方法。然后你可以使用工厂来获取当前设备,就像var myDevice = DeviceFactory.GetCurrent();- 当然,你必须自己实现它

于 2014-08-17T08:12:46.427 回答