![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Всё знать хотяка!
Пользователь
Регистрация: 21.04.2009
Сообщений: 67
|
![]()
Если что прошу прощения, опять врываюсь в панике и могу наследить не там где нуно.... но вообщем вот:
Передо мной стоит задача - написать на Делфях дрова для девайса, подключённого к компу через LPT-порт. На данный момент я не знаю особенностей девайса и вообще как писать дрова на Делфях, и вообще как писать дрова О_о ... Всё что мне сказали в двух словах - цель: перекидываться с девайсом байтами - т.е. считывать и посылать переменные типа 01110011 ... Впихнули в лапы пример этих дров, но написанных на Сишке... В Сишке я не бум-бум(знаю тока строение прог и как вводить и выводить переменные... и то точно не помню...)... Заметил только, что в этих дровах активно используется команда сетбайт и гетбайт ... Разбираться буду на этих выходных... Ну и в общем, прошу помощи: Киньте ссылку на хороший мануал по написанию дров на делфи для LPT-портов. Расскажите(если это можно рассказать в двух-трёх-пяти словах) как можно осуществить перекидывание байтами с LPT-портом. Ответьте - есть ли какой нибудь конвентер/перекодировщик из Сишки в Делфю и поможет ли он мне в моей проблеме... И скажите что это просто... так, для моего самоуспокоения)))) PS: Ыть, увидел внизу тему сноски на похожие темы)))) Не ругайтесь, щас их тоже почитаю)))
Я вредный и нервный, но бдобр.
Последний раз редактировалось Karp_13; 22.10.2009 в 03:06. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
если написать приложение которое будет взаимодействовать с портом то реально на Делфи...драйвер нет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]()
Для работы в Дельфи с LPT - портом удобно использовать готовую СИ -шную библиотеку inpout32.dll. Используются функции :
Код:
О портах LPT ($378,$379,$37A) почитайте в сети (есть ссылки в темах внизу). Для работы побайтово, я написал функцию перевода десятичного числа в бинарное: Код:
В общем виде чтение конкретного [i] бита порта следующее: Dec_Bin(inp32($378))[i] Для отправки через порт конкретного бита ( например 3-го) записываем в порт соответствующее десятичное число - 8 ( b00001000).Если следующим надо изменить 5-й бит, не меняя предыдущее состояние остальных битов, то , соответственно, записываем 40 (b00101000). И т.п. Важно отметить, что состояния уровней в портах не совсем соответствует двоичному коду, так как некоторые биты используются с инверсией.Так, например, коду b01111000 (dec 120) в $379 соответствуют уровни напряжения на выходе порта - 1,1,1,1,1,(0,0,0 -три последних физически отсутствуют). Это обязательно надо учитывать.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
Для работы в Дельфи с LPT - портом также удобно использовать готовый драйвер - giveosys.sys/
достаточно инициализировать его запуск из своего проекта и в nt можно обращаться напрямую к портам... модуль и драйвер (в pas):
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation Последний раз редактировалось raxp; 22.10.2009 в 12:19. |
![]() |
![]() |
![]() |
#5 |
Всё знать хотяка!
Пользователь
Регистрация: 21.04.2009
Сообщений: 67
|
![]()
Гыг, громадный сенкс за помощь, на выходных буду копаться =))))
А пока отходя от темы и принимая во внимание сообщение ПФеникса: А что, с написанием дров для разнообразных девайсов на Делфях действительно всё так плохо? Или просто(как многократно слышу отовсюду) дело в том, что для Делфей мало исходников в сети(и отсюда больше мороки)? Кто может мне мини лекцию прочитать(опять же в двух-трёх-пяти словах) с ответом на этот самый вопрос "почему?"? -_- )) *что переходить на Си нуно - это я и так знаю... но просто лень пока, недостаток времени мешает и (быть может из-за первых двух пунктов) интересно ещё в Делфях покопаться немного)))*
Я вредный и нервный, но бдобр.
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]() Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
![]() |
![]() |
![]() |
#7 |
Всё знать хотяка!
Пользователь
Регистрация: 21.04.2009
Сообщений: 67
|
![]()
Ага, получилось. Научился(через библиотеку inpout32.dll) управлять портом 378 - пинами со 2-го по 9-ый - вставленные в них диоды гаснут и загораются по моей воле.)))
Так, теперь можно небольшое уточнение(каша в голове): Адрес 378(пины 2-9) используется для чтения и передачи данных; Адрес 379(пины 10-13,15) - только приём данных с внешнего устройства; Адрес 37А(пины 1,14,16-17) - только передача данных на внешнее устройство; Адрес 378, как выше и писал, я победил - понял как обращаться к определённому пину. Но чёрт, никак не пойму как быть с 379 и 37А - как обратиться к определённому пину из этих адресов(в чём там логика)? О_о ...
Я вредный и нервный, но бдобр.
|
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
к определенному пину можно так обратиться:
Код:
Цитата:
getbit(data,6)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation Последний раз редактировалось raxp; 25.10.2009 в 19:30. |
|
![]() |
![]() |
![]() |
#9 |
Всё знать хотяка!
Пользователь
Регистрация: 21.04.2009
Сообщений: 67
|
![]()
*Чёрт, сижу с градусником под мышкой и пачкой цитрамона в обнимку... так что если что не кидайте тапками)))*
raxp, как я понял, чтобы разобраться в твоём сообщении, нужно разобраться с содержимым файла raport.pas. Ладно, займусь, но завтра(как полегчает)...))) А пока, просто задам два-три вновь всплывших у меня вопроса: 1. Что касается портов 379 и 37А - на первый положено 5 бит(по числу пинов), на второй 4 бита. Я хочу послать, допустим, в адрес 37А число в десятеричной системе исчисления и чтобы в этом адресе(если что, извиняйте за корявую терминологию) в итоге была картина типа '0100' - т.е. "зажечь" 16-ый пин. И вот теперь, чъорт, я туплю - какое это должно быть число? Не могу определить зависимость между этими самыми числами в десятеричной системе исчисления и тем что получается на порту. К примеру, что касается порта 378 - там всё понятно - хотим зажечь 9-ый пин - кидаем в порт число 128 - 128 ведь кок раз в двоичной системе выглядит как '10000000' - 9-ый пин "зажигается". Но что делать с адресами 379 и 37А не врублюсь... В программе 3D Hard Analyzer видимо(т.е. наверняка) есть функция этого самого перевода - но я щас не в состоянии перекапывать ради неё весь код той программы %(( Может кто так подскажет? 2. Как понял, у ЛПТ порта есть так называемые режимы работы. О_о И как понял, зависят они от ноликов и единичек на пинах по адресу 37А. (к примеру, пин 1 везде подписывают как Data Strobe ...) Не нашёл мануала, подробно повествующего об этом. Может кто сможет что нибудь подобное посоветовать? О_о (ps: нашёл вот такую ссылку http://citforum.univ.kiev.ua/operati...dows/parp_win/ - там много всего непонятного написанно... завтра буду разгребать... вроде что-то похожее там есть...) 3. Производственный процесс показал, что мне следует сменить библиотеку inpout32.dll на WinIO.dll. И вот не могу найти приличного мануала(или хотя бы списка команд) для этой(WinIO.dll) библиотеки. Может кто нибудь что нибудь посоветовать? ps: Кстать, DeKot, спасибо за функцию - помогла)))
Я вредный и нервный, но бдобр.
Последний раз редактировалось Karp_13; 26.10.2009 в 01:23. |
![]() |
![]() |
![]() |
#10 | |
Участник клуба
Регистрация: 12.08.2008
Сообщений: 1,977
|
![]() Цитата:
1 1 1 1 1 или код bin 0 1 1 1 1 (dec 120). Коды и состояния портов смотри на рисунке ( для $379 часть из 32 возможных состояний). ![]() Для управления портом $379 следует подавать нулевой уровень (желательно через сопротивление 430 - 510 Ом) на контакты порта.
И не сомневайся даже ... отдых - кайф, работа - лажа!
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Управление LPT портом | nikleb | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 27.05.2010 19:40 |
Управление LPT портом | Kuzmichinishe | Помощь студентам | 3 | 28.09.2009 11:07 |
Не получается управлять LPT-портом | NikVE | Общие вопросы C/C++ | 3 | 06.04.2009 12:50 |
Работа с LPT портом | chingiz | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 17.11.2007 21:21 |