我不知道如何命名我的问题,但我脑海中的第一件事是这个“多设备软件”的事情。
我是一名电子工程专业的学生,对仪器控制感兴趣。为此目的使用C#,并具有C#表单应用程序的基本知识。此外,IVI基金会还开发了一个名为"SCPI命令“的standart命令集。这是一种简单的仪器控制方法,不能为功能齐全的仪表控制系统编写SCPI代码。在这里,“司机”扮演了角色。大多数制造商在你购买他们的产品时提供设备驱动程序。使用此驱动程序文件,您可以创建功能齐全、响应能力强的软件。此外,您还可以开发您自己的驱动程序,以满足您自己的需要。但是,尽管SCPI是各种仪器的标准,但一些多命令开始给您带来问题。例如,您为A品牌编写代码,但该代码不适用于B品牌的同一台设备,该设备与A品牌的设备完全相同。
主要目标是为多个同轴电缆建立电缆损耗计算软件。您必须使用频谱分析器和RF信号发生器来执行此任务。我们有几个频谱分析仪和大量的信号发生器正在使用。
用一个程序我们必须控制我们所有的设备。这是我的问题。
我想创建一个响应软件,为我们所有的频谱分析仪和信号发生器工作。我怎么能这么做?首先,我认为我可以为每个设备创建一个驱动程序,主程序通过使用提示或者类似的方式来选择正确的驱动程序。但我不知道如何做到这一点。其次,我可以为每个设备组合编写软件的主要部分,并在运行时将该部分连同一个.txt文件包含到主软件中。我知道这是一个菜鸟的方法,但我想我可以做到这一点,没有麻烦。我对第一种方法一无所知。第三,我可以为程序中的每个设备编写所有的命令,并使用if条件在两种情况下进行选择。或者开关箱的结构。这是唯一的办法,如果我不能这样做与其他选择。
在此之前,您可能还不明白我的意思,因为我无法准确地描述问题,这是因为我是一个业余软件开发人员。
假设你有信号发生器。你要选择频率10兆赫。这是Agilent 33120 A。要用计算机实现这一点,您需要将此命令发送到设备。
SOUR:FREQ 10 MHZ
在此之后,设备将频率设置为10 MHZ。让我们假设您有另一个制造商的信号发生器,为了实现完全相同的事情,这个设备,你可能必须发送这个;
SENS:FREQ 10 MHZ
这两者执行相同的事情,但酸和感受器部分取决于设备。
为了使用C#创建程序,我们使用API与设备进行通信。如果使用GPIB协议,API的名称是NI488.2。如果您使用RS232,您可以使用VISA等。顺便说一下,我们的协议是GPIB。使用GPIB,我们使用包装器轻松地将SCPI命令集成到C#环境中。例如,在将GPIB库添加到引用之后,可以使用它通过C#窗体接口发送命令;
ibwrt("SOUR:FREQ 10 MHZ", "SOUR:FREQ 10 MHZ".Length);
现在我遇到了我最大的问题。如何使代码的这一部分创建一个成功的响应程序?例如,操作员使用Agilent信号发生器和Rohde&Schwarz频谱分析仪。另一家运营商正在使用IFR信号发生器和HP频谱分析仪。但他们使用的软件是一样的。IFR信号发生器可以使用"SENS:FREQ“进行操作。
在操作开始之前,一个提示可以弹出并请求设备的驱动程序。我不知道。我首先想到了这些。但如果你是我,你是怎么做到的?如果你选择了一个选项,请告诉我怎么做。我被困在这里了。现在程序有大约2000行代码。"ibwrt“不是程序的唯一部分,也不是”SENS:FREQ“.还有用于其他任务的"SENS:BAND:RES“、"INIT:CONT”等。这不重要。
我希望你能理解我的问题,因为我知道我说的不对。
如果你对这个问题有任何疑问,可以发表意见。
谢谢。
TL;博士
我需要通过C#窗体接口为每个设备发送命令。我的意思是,设备有其特殊的命令,我需要创建一个软件,它可以通过用户选择来控制每个设备,而不是为每个设备创建一个软件。
发布于 2014-08-17 08:12:46
用您需要的一切实现接口IDevice
(如SelectFrequency(...)
),并实现类Abrand : IDevice
、Bbrand
.诸若此类。这是唯一的办法。然后您可以使用工厂获得当前的设备,比如var myDevice = DeviceFactory.GetCurrent();
--当然,您必须自己实现它。
https://stackoverflow.com/questions/25344449
复制相似问题