Прежде всего, я хотел бы извиниться за мой плохой английский.Не носитель языка.Я новичок в C # с небольшим опытом C / C ++.
Я учусь на электротехнику и прохожу стажировку в компании, производящей BMS (системы управления батареями)
Моя задача - перевестиизмеренные значения из омметра в мою программу на C #, оцените их и сохраните в csv-листе.
Мое устройство обменивается данными через SCPI и подключается через usb.
Я уже нашел пример кода на странице Micrsofot для связи через порт:
ExampleCode для программы чата сSerialPort-class
После небольшой корректировки кода я смог установить связь с моим устройством.
Вот код:
</p>
<code>using System;
using System.IO;
using System.IO.Ports;
using System.Threading;
public class PortChat
{
static bool _continue;
static SerialPort _serialPort;
public static void Main()
{
string message;
StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
Thread readThread = new Thread(Read);
// Create a new SerialPort object with default settings.
_serialPort = new SerialPort();
// Allow the user to set the appropriate properties.
_serialPort.PortName = SetPortName(_serialPort.PortName); //"com9"
_serialPort.BaudRate = 115200;
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
_serialPort.Handshake = Handshake.None;
// Set the read/write timeouts
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
_serialPort.Open();
_continue = true;
readThread.Start();
Console.WriteLine("Type QUIT to exit");
while (_continue)
{
message = Console.ReadLine();
if (stringComparer.Equals("quit", message))
{
_continue = false;
}
else
{
_serialPort.WriteLine(message);
}
}
readThread.Join();
_serialPort.Close();
}
public static void Read()
{
while (_continue)
{
try
{
string message = _serialPort.ReadLine();
Console.WriteLine(message);
}
catch (TimeoutException) { }
}
}
public static string SetPortName(string defaultPortName)
{
string portName;
Console.WriteLine("Available Ports:");
foreach (string s in SerialPort.GetPortNames())
{
Console.WriteLine(" {0}", s);
}
Console.Write("Enter COM port value (Default: {0}): ", defaultPortName);
portName = Console.ReadLine();
if (portName == "" || !(portName.ToLower()).StartsWith("com"))
{
portName = defaultPortName;
}
return portName;
}
}
</code>
Значения ascii, которые я получаю от устройства, сохраняются в переменную «message».
Я хотел бы создать класс SCPI для всех функций «связь с устройством».Но я запутался, потому что здесь уже есть главное.Как я могу инкапсулировать эти функции в класс?Я понимаю, что это очень тривиальный вопрос.Но мне действительно тяжело с объектно-ориентированным программированием.
Заранее спасибо, ребята.
Привет из Германии
Джо