Я пытаюсь написать класс для формирования команд 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". Как мне сделать это правильно? В частности:
- Как сделать так, чтобы командные строки строились друг на друге?
- Как я могу сделать метод для принятия одного или нескольких аргументов, которые будут добавлены к строкам?
- Есть ли удобный способ добавления необходимого двоеточия между строками?
- Есть ли удобный способ добавления знака вопроса в конце для запросов?