Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с SerialPort

23K
04 января 2007 года
DIAMONDX
5 / / 04.01.2007
Уважаемые Гуру.. только начинаю программит на C#!!!
Хочу научиться работать с СОМ - портом в Студии.
Подключил к порту модем через дата кабель.

Кинул на форму SerialPort...... при запуске делаю SerialPort1.Open();

Потом в обработчике Click кнопки написал SerialPort1.Write("AT"+(char)13+(char)10);

Модем заведомо работает нормально и эхоответ выключен ........ проблема в том что событие DataRecieved вызывается сразу после того как я отправил данные в порт.
ТОЕСТЬ Я ЧИТАЮ ТОЖЕ САМОЕ ЧТО ОТПРАВЛЯЮ???
Непонятно почему........... в MSDN написано, что я записываю в выходной буфер а почему тогда в обработчике методом Read читается из выходного буфера строка ="AT"+(char)13+(char)10+"OK"+(char)13+(char)10.
Вопрос: как сделать что бы читался только ответ модема (ОК+13+10)???
В чем грабли?
273
08 января 2007 года
3A3-968M
1.2K / / 22.12.2005
Для того чтобы прочитать данные, используй свойство BytesToRead, которое показывает сколько байт надо прочитать. Потом с помощью метода Read читай именно это количество
23K
09 января 2007 года
DIAMONDX
5 / / 04.01.2007
Пробовал и так и этак!!!

Пример 1. Модем отключен.
Пишу в порт методом Write(), например, строку "ATD 1020"+(char)13+(char)10 (изначально свойство ByteToRead == 0 - входной буфер пуст). После записи ByteToRead равняется 10, и всеми методами чтения, например, ReadExisting() мне возвращает тоже самое "ATD 1020"+(char)13+(char)10.
Событие DataRecieved генерируется (непонятно почему - модем то отключен и ничего ответить не может).

Пример 2. Модем подключен.
Пишу ту же команду...
ReadExisting() дает строку = моя команда + ответ модема: "ATD 1020"+(char)13+(char)10+"NO CARRIER"+(char)13+(char)10. Событие генерируется (резонно - модем то подключен и ответил о отсутсвии несущей).

Вопросище, почему методами Read(), BaseStream.Read(), ReadExisting() читается моя команда звонка перед фактическим ответом от модема?!!! Почему генерируется DataRecieved в первом случае!!!
Как сделать так что бы читалась пустая строка в первом случае и "NO CARRIER"+(char)13+(char)10 - во втором?

Остается лишь вариант вырезать после n-символьной команды первых n- байт ответа. Но это же криво как-то!!!
23K
09 января 2007 года
DIAMONDX
5 / / 04.01.2007
Думаем, очень надо!!!
To 3A3-968M!!! Знаю я это свойство.... проблема не в этом. Оно у меня увеличивается после Write() до ответа модемом на команду на N, где N - длинна записываемой в порт строки.
Всеравно, спасибо вам за ответ!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог