Чтение com порта по прерыванию

Тема в разделе "WASM.ELECTRONICS", создана пользователем SL555, 20 ноя 2006.

  1. SL555

    SL555 New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2006
    Сообщения:
    16
    Здравствуйте

    Подскажите, может кто ни будь в курсе, я уже перерыл MSDN, есть ли какие ни будь сообщения информирующие о том, что произошла запись в ком порт, или мягкотелые не догадались до этого. Задача в следующем есть программа что то типа SCADA системы, в ней есть один поток который постоянно читает порт и записывает данный в другой буфер, а дальше другой поток парсит этот буфер ну согласно данным отображает информацию о тех процессе (ну в общем обычный сервер),но куда бы проще было бы если бы в Винде были бы сообщения, или скорее всего придется разрабатывать драйвер, который будет посылать сообщения, о записи в порт. Может кто нибудь знает где можно взять готовый драйвер
     
  2. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    CreateFile с флагом FILE_FLAG_OVERLAPPED.
    Далее - ReadFile с параметром OVERLAPPED. В сети есть примеры.
    Драйвер писать не надо (по крайней мере, для этого).
    Удачи!
     
  3. SL555

    SL555 New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2006
    Сообщения:
    16
    Я может не правильно вопрос поставил, имеется ввиду, что программа занимается своим делом, и как только приходит сообщение ну к примеру WM_WRITEPORT (произошла запись в порт), где одним из параметров является число байт записанных в порт, после этого я читаю порт (ReadFile), но естественно перед этим использовав функцию CreateFile
     
  4. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Вы правильно задали вопрос. Я его так и понял.
    Это все, о чем я написал, называется организацией асинхронного ввода/вывода. Этот метод и позволяет решить Вашу задачу.
    Почитайте статью Титова Олега, на просторах сети ее много растиражировано. Она поможет.
    Удачи!
     
  5. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    com - ком порт генерит прерывание ? что-то новое :) у меня в системе 21 ком порт, с такими темпами прерываний не наберешся :)
    А вообще
    рулит !
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    _Serega_
    Ничего сибе системка - эт что за зверь?
    В Нормальной IBM архитектуре их всего максимум 4 и два прерывания на всех :)
    А на современных машинах и один не всегда бывает :), если не считать виртуальные на встроенных модемах :)

    ЗЫ: Ты случаем не COM объекты имел в виду ? :))
     
  7. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    Угадал :), но не только модем :)...
    Кстати чет я тормознул насчет прерываний, просто у меня ком не висит на IRQ, а только ЛПТ. Отсюда и от количества портов сделал неправильный вывод :dntknw:
    ЗЫ: надо как-нить rs232 копнуть на досуге :)
     
  8. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
    Y_Mur
    Бывают так называемые мультипортовые карты - видел я одну такую (именно на COM, говорить не буду в какой системе), не знаю, 21 там или нет, но жгут из проводов внушительный был.
    Непосредственно к системному блоку один кабель подключается, а он ведет к карте, на которой куча дополнительных гнезд. К ним подключалось несколько устройств (не модемов, естественно :)) С программной точки зрения - не знаю, что там происходило - сию программу посмотреть нельзя было.
    Вот так. :derisive:
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    ksu_ant
    Я тоже мультпортовые карты видел, но куда меньше чем на 21 порт, раньше даже локальные сети на сомах делали :), но сейчас они давно вымерли как динозёвры, а промышленные локалки используют RS423, RS422, RS485, которые внешне и логически похожи на com, но совсем не он :)
    Потому и удивился, что _Serega_ так запросто говорит, что у него 21 сом порт, на которые прерываний не напасёшся :)))
    А оказалось - банальная ошибка ...

    _Serega_
    А Wim модемы и подобные им устройства эмулируют сом порт только на уровне win API, а реальная работа с железом может и близко ничего общего с RS232 протоколом не иметь :))
    ЗЫ: не путать с полноценными встраиваемыми модемами, которые проецируют ввод вывод на реальное адресное пространство com порта - тогда порт настоящий, только без внешнего разьёма :)