Класс для построения строк SCPI - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь написать класс для формирования команд SCPI . Я хотел бы, чтобы использование выглядело так (что похоже на то, что делает библиотека Keysight):

Instrument.SCPI.DISPlay.TEXT.Command("HELLO");

, которая затем создаст строку «DISP: TEXT HELLO», которую я могу отправить по соединению, указанному в классе Instrument.

Я думал, что такой статический абстрактный класс может сработать. Я мог бы расширить класс новыми командами для любого инструмента, который я хочу поддерживать. А класс «Instrument», основанный на абстрактном (ых) классе (ах) SCPI, может передавать результирующую строку в последовательный порт, TCPIP или что-либо еще.

public static class SCPI
{
    // Mandated commands
    public const string CLS = "*CLS";
    public const string ESE = "*ESE";
    public const string ESR = "*ESR";
    public const string IDN = "*IDN?";
    public const string OPC = "*OPC";
    public const string PSC = "*PSC";

    // Display command
    public static class DISPlay
    {
        public const string TEXT = "DISP:TEXT";
    }
}

Но если я хочу добавить команду "TEXT: CLEar", сразу становится неясно, как поступить, так как я не могу вложить другой класс в DISPlay с именем "TEXT". Как мне сделать это правильно? В частности:

  • Как сделать так, чтобы командные строки строились друг на друге?
  • Как я могу сделать метод для принятия одного или нескольких аргументов, которые будут добавлены к строкам?
  • Есть ли удобный способ добавления необходимого двоеточия между строками?
  • Есть ли удобный способ добавления знака вопроса в конце для запросов?
...