Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Кто-нибудь имел счастье работать с COM портом в C#?.. Прибору отсылаешь запрос, он отвечает. С...{+}(+)
Отправлено
polotsk 08 сентября 2009, г. 14:39
Текст заголовка сообщения полностью: Кто-нибудь имел счастье работать с COM портом в C#?.. Прибору отсылаешь запрос, он отвечает. Стандартно. Пишу программу, по нажатии кнопки делается запрос и в текстовом окошке выводится ответ от прибора. Проблема в том, что если не поставить паузу в несколько миллисекунд (от 15) между посылкой и чтением, то примется только 1 (первый) символ ответа. Если же с паузой, то вся посылка! Что за нафиг?
private void button1_Click(object sender, EventArgs e)
{
byte[] uart_out = new byte[7];
byte[] uart_in = new byte[7];
serialPort1.Open();
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
uart_out[0] = 0x40;
uart_out[1] = 0x22;
uart_out[2] = 0x32;
uart_out[3] = 0x37;
uart_out[4] = 0x32;
uart_out[5] = 0x38;
uart_out[6] = 0x31;
serialPort1.Write(uart_out, 0, 7);
//Thread.Sleep(15); //- Если раскомментить все работает!
serialPort1.Read(uart_in, 0, 7);
textBox1.Text = Encoding.ASCII.GetString(uart_in);
serialPort1.Close();
}
Составить ответ | Вернуться на конференцию.
Ответы
- Если эта хрень возращает статус то можно сляпать так: - Trashy (08.09.2009, 16:24:53 192.168.2.112,213.167.60.19, 98 байт)
- Это вообще, чаво за объект такой? VCL что-ли? - Trashy (08.09.2009, 15:38:29 192.168.2.112,213.167.60.19, пустое)
- Там есть готовый класс ком порта - SerialPort - polotsk (08.09.2009, 15:40:17 85.114.29.10, пустое)
- Ну если, класс полноценный, то ставятся интервалы на ожидание и сколько байт читать. И ни какие задержки не нужны. Есть такие параметры - Trashy (08.09.2009, 15:48:17 192.168.2.112,213.167.60.19, 302 байт)
- Да в том-то и дело, что класс катсрированный - там нет этих параметров (я их по winapi знаю), е...{+} - polotsk (08.09.2009, 15:55:24 85.114.29.10, 209 байт)
- Тоесть ни сколько байт читать, а сколько интервалов ожидать. Тоесть, надо принять пять байт, то ReadTotalMultiplier = 5. - Trashy (08.09.2009, 15:51:53 192.168.2.112,213.167.60.19, пустое)
- Примерно так юзаю - Vit (08.09.2009, 15:21:51 10.0.0.3,83.170.240.226, 1433 байт, ссылка)
- Подобное поведение имеет и ReadFile в API, если ReadIntervalTimeout и ReadTotalTimeoutMultiplier установить в MAXDWORD, а ReadTotalTimeoutConstant больше0 и меньше MAXDWORD. - Леонид Иванович (08.09.2009, 15:07:28 87.252.227.56, пустое)
- посмотрите там, проект как раз на c# - AF (08.09.2009, 14:53:18 92.47.126.78, пустое, ссылка)
- может этот нафиг называется операционная система? и "работая с портом" ты в самом деле работаеш с ОС, которая работает с портом?) - basilmak (08.09.2009, 14:48:18 82.142.173.231, пустое)
- Сразу отвечу, что в терминалке и программе, написанной на СИ все работает без заморочек. - polotsk (08.09.2009, 14:40:33 85.114.29.10, пустое)