| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > LPT-Порт |
| Автор: Bogus 5.7.2005, 17:02 |
| Нужен пример работы с LPT портом. Планируется получать информацию (сигнализайию) от внешего самодельного устройства в виде двоичного (8- разрядного) кода с дальнейшей обработкой. Можно ли это сделать и если можно, то как? Ссылки на котовый проект (пример) особо приетствуются. В качестве одного из примеров, могу привести ключи-заглушки на порты (в качестве лицензионного ключа) для программ карта москвы и др. |
| Автор: Snowy 6.7.2005, 11:51 | ||
|
| Автор: Snowy 6.7.2005, 12:04 | ||||
Примерно должно получиться что-то в таком роде:
|
| Автор: Snowy 6.7.2005, 12:21 |
| Также для информации почитай DRKB раздел "Порты". В принципе работа с COM и LPT похожа. Ну, кроме установки параметров порта. Хотя установка порта требуется далеко не всегда. Я например использую стандартные параметры, выставленные в системе. Это избавляет меня от необходимости делать лишнюю работу. Не нужно писать лишний код для настройки порта и интерфейс для пользователя. Пользователь может использовать настройки в системе. Не гарантирую, что вышеприведенный код 100% рабочий, т.к. писал его для COM порта. Я его лишь немного модифицировал под LPT. Но по идее проблем возникнуть не должно. Должен заработать без вопросов. |
| Автор: Bogus 6.7.2005, 14:25 |
| По сути мне нужно анализировать различные варианты коммутации контактов LPT порта. Сечас пойду разбираться в том, что написали. Всем спаисибо. Если у кого есть еще советы или (и) готовые примеры, буду благодарен. Добавлено @ 14:29 Ни черта не понял. Аткрыть, закрыть порт я смогу, но как проанализировать коммутацию контактов?!!! |
| Автор: Bogus 6.7.2005, 15:04 |
| http://khrameev.narod.ru/Marriage/Chto_nado.jpg |
| Автор: Snowy 6.7.2005, 17:11 | ||
Для этого ты должен передать сигнал в порт. Программа получает сигнал в виде одного байта. По приведенному выше коду, ты получаешь char от функции GetChar. Переводишь его в число при помощи ord(ch). А число уже представляй в бинарном виде. Как перевести число в бинарный вид, на форуме уже не раз обсуждалось в "Общих вопросах", так же есть в FAQ и DRKB. Смотришь бинарное представление. Где еденички - там есть сигнал, где нолики - нет сигнала. |
| Автор: asp708 10.12.2006, 22:46 |
| можно ли где нибудь откльчить напряжение на LPT при загрузке т.е. при включении PC он не скакало и оставалось на 0 пока сами его программно не изменим |
| Автор: Snowy 11.12.2006, 10:47 |
| Нет. При загрузке винда производит тестирование устройств. И этого ей никак не запретишь. |
| Автор: Mr.Floppy 13.3.2007, 02:11 |
| Snowy, у меня не работает Ваш код Открывать/закрывать порт получается (открывает корректно, хендл>0), но читать и записывать не получается: При чтении: GetChar возвращает false, ord(ch)=0 При записи программа просто зависает (может ждет ответа устройства?) В примере несколько опечаток: unit lptport; 20: function GetChar(var ch: char):boolean; но 76: function TLptPort.GetChar(ch: char): boolean; program Test; 10: lpt: TComPort; 13: lpt:=TComPort.Create; а надо TLptPort А через драйвер lptwdmio все работает. Turbo Delphi, WinXP Pro, запускаю от администратора |
| Автор: Albinos_x 13.3.2007, 10:46 |
| вот рабочий примерс драйвером |
| Автор: Mr.Floppy 13.3.2007, 16:41 |
| Albinos_x, через lptwdmio у меня работает, не получается через CreateFile |