.NET 4.x Подскажите пожалуйста как получить ответ от устройства через COM порт - C#
Формулировка задачи:
Всем привет. Встал вопрос работы с устройством на COM порту.
Это то, что есть. Есть даже протокол общения с устройством. Помогите пожалуйста, никак не могу получить сообщение в ответ.
Протокол:
1. 8N1, скорость передачи 115200 бит/с
2. Длина данных в посылке не более 1 Кбайт. Между посылками должен быть перерыв не менее 10 мс.
3. Передача идентификатора, длины данных, данных и контрольной суммы в ASCII-HEX виде
4. Поле длины данных — 2 байта старшим вперед
5. Tаймаут между байтами max 10 мс
6. Старт-символ, стоп-символы, идентификатор и контрольная сумма в длину не входят
7. Контрольная сумма включает в себя идентификатор, длину данных и данные.
8. Посылки с некорректной длиной (указанная длина данных не соответствует количеству переданных/принятых байт), контрольной суммой, идентификатором не равным 0х80, игнорируются.
9. Идентификатор – 0х80.
static void Main(string[] args)
{
string[] portnames = SerialPort.GetPortNames();
for (int i = 0; i < portnames.Length; i++)
Console.WriteLine(portnames[i]);
SerialPort port = new SerialPort(portnames[2]);
port.Open();
string command = "S";
byte[] data = Encoding.UTF8.GetBytes(command);
port.Write(data, 0, data.Length);
byte[] dataR = new byte[500];
port.Read(dataR, 0, dataR.Length);
int databyte = port.ReadByte();
Console.WriteLine(databyte);
Console.ReadKey();
}
Неужели никто не знает?
Решение задачи: «.NET 4.x Подскажите пожалуйста как получить ответ от устройства через COM порт»
textual
Листинг программы
SerialPort port = new SerialPort();
port.PortName = "COM1";
port.BaudRate = 115200;
port.Parity = Parity.Odd;
port.DataBits = 8;
port.StopBits = StopBits.One;
port.ReadTimeout = 10;
port.Open();
if (port.IsOpen)
{
string request = "S";
byte[] send = Encoding.ASCII.GetBytes(request);
port.Write(send, 0, send.Length);
Thread.Sleep(10);
byte[] receive = new byte[1024];
int readed = port.Read(receive, 0, receive.Length);
if (readed > 0)
{
string answer = Encoding.ASCII.GetString(receive);
}
port.Close();
}