创建多设备可控软件

时间:2014-08-16 22:08:31

标签: c# controls gpib

我不知道如何标题我的问题,但我想到的第一件事就是这个"多设备软件"的事情。

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

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

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

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

在此之前你可能不理解我,因为我不能完全描述问题,因为我是业余软件开发人员。

假设您有一个信号发生器。您想要选择频率10 MHZ。这是Agilent 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#forms interface;

发送命令
ibwrt("SOUR:FREQ 10 MHZ", "SOUR:FREQ 10 MHZ".Length);

现在我遇到了我最大的问题。如何使这部分代码创建成功的响应程序?例如,使用Agilent Signal Generator和Rohde&Schwarz频谱分析仪的操作员。另一家运营商正在使用IFR信号发生器和HP频谱分析仪。 但他们使用相同的软件。 IFR信号发生器可以使用" SENS:FREQ"为了操作。

在操作开始之前,可以弹出提示并询问设备'驱动程序。我不知道。我首先想到了这些。但如果你是我,你是如何实现这一目标的?如果您选择一个选项,请告诉我该怎么做。我坚持这个。现在,程序有大约2000行代码。 " ibwrt"不是该计划的唯一部分,也不是" SENS:FREQ" ... 还有" SENS:BAND:RES"," INIT:CONT"等其他任务。这并不重要。

我希望你理解我的问题,因为我知道我说错了。

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

感谢。

TL; DR

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

1 个答案:

答案 0 :(得分:0)

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