Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
WitC

Помогите разобраться с LPT

09.10.2006, 03:16. Показов 4584. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени! (сразу спасибки, что не пропустили тему!)
Как-то раньше не задумывался над вопросом работы с внешними устройствами из ВБ, теперь встала проблема читать и записывать в порт ЛПТ данные, конфигурить его по своему усмотрению. Перебрал кучу ссылок в нете, каждый, этот вопрос, решает по-разному, кто *.длл подключает, а кто АПИ использует. Но у меня проблема с условием - мне не подходит работа с подключаемой *.длл. Мне надо чтобы это заключалось или с АПИ функциями, или с АСМ-вставками, или (где-то прочитал) работа с kernel.dll (что и есть АПИ, как я понимаю).
АСМ-вставки отпадают, читал что ВБ не поддерживает такой подход, но народ как-то умудряется схитрить???
Остаются АПИ. Искал много, но не нашёл ни чего конкретного.
Если кто знает - не обойдите вниманием, очень надо!!!
Зарание спасибо, Wit!
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2006, 03:16
Ответы с готовыми решениями:

Есть программа работы с LPT, не могу разобраться
Здравствуйте! У меня есть рабочая программа написанная под LPT-порт, но я не могу в ней розобраться. BYTE data= 0x0; ...

LPT программатор + PCI->LPT на NetMosChip nm9835cv
проапгрейдил комп, LPT порта уже НЕТ... остался с LPT программатором http://iosyitistromyss.ru/programmator- ... v-avr.html ...

Помогите разобраться
Мне тут рассказали про то что ссылки имеют такое свойство склеиваться.... Что это как с этим бороться и если мона чутка по подробнее......

18
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
09.10.2006, 03:20
Специльно для бездельников и лентяев:
http://www.yandex.ru/yandsearch?text=Visual+Basic+%F0%E0%E1%E E%F2%E0+%F1+LPT&stype=www http://www.yandex.ru/yandsearch?text=Visual+Basic+%F0%E0%E1%E E%F2%E0+%F1+LPT&stype=www
и еще... потому как заранее линк знал:
http://vbrussian.com/Article.asp?ID=81 http://vbrussian.com/Article.asp?ID=81
0
WitC
09.10.2006, 16:52
Спасибо за ответ!
Вот опять об один и тот же камень..... Мне очень надо без подключаемых *.длл или АктивИКС, условия у меня такие. Если бы можно было подключить, всё было бы проще. А вот вторая ссылка лучше, я её тоже видел, когда инфу собирал. Речь идёт о KERNEL.DLL, она встроена в Винду и через неё можно работать с портом ЛПТ в ВинИксПи. Но встаёт другая проблема, драйвер есть, а как с ним начать работать????? Я не знаю???? Вот и обращаюсь к обществу, как говорится "... гуртом и батька бить легче ....", если есть умельцы, буду благодарен за любую помощь в этом вопросе!
За ранее спасибо, Вит.
WitC
10.10.2006, 04:35
Нашёл вот что:
Visual Basic
1
2
Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As _
    Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
А как правильно задекларировать??? И вызывать??? Какие параметры при вызове???
CreateFile("LPT1",...,...,........)
WitC
11.10.2006, 15:31
Неужели ни кто не работа с железом на ВБ???
Дайте ссылку на описание АПИ-функции CreateFile, плизззз!
0 / 1 / 3
Регистрация: 27.03.2012
11.10.2006, 15:44
ну поискать ведь можно, вот например пример использования
http://www.tek-tips.com/faqs.cfm?fid=5243 http://www.tek-tips.com/faqs.cfm?fid=5243
0
WitC
13.10.2006, 03:29
Да, туго мне даётся работа с железом. Куча ссылок, море информации......
есть вот такой код, по ссылке которую дал Alexey:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
' Const Values used for above.
Private Const INVALID_HANDLE_VALUE = -1
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const CREATE_ALWAYS = 2
Private Const CREATE_NEW = 1
Private Const OPEN_ALWAYS = 4
Private Const OPEN_EXISTING = 3
Private Const TRUNCATE_EXISTING = 5
Private Const FILE_ATTRIBUTE_NORMAL = &H80
 
Private Sub Form_Load()
Dim m_hFile As Byte
m_hFile = CreateFile("LPT", GENERIC_READ, 0, ByVal CLng(0), OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
MsgBox m_hFile
CloseHandle m_hFile
End Sub
Запускаю как есть- пишет переполнение!!!
В вызове меняю 4-й параметр ByVal CLng(0) на константу FILE_SHARE_WRITE , после небольшой задумчивости на экране появляетсязначёк кретического завершения приложения с предложением отправить отчёт в Майкрософт.
Я бы очень был благодарен, если бы мне объяснили значение этих констант, критерий их значений и параметр вызова CreateFile - что за чем идёт?????
Alex77
14.10.2006, 00:46
Посмотри ещё статью на http://vbrussian.com/Article.asp?ID=81 http://vbrussian.com/Article.asp?ID=81
WitC
15.10.2006, 00:22
Спасибо, но опять не то.... Я На эту статью нарываюсь через каждую ссылку!!!!
У меня проблема: работать должно БЕЗ СТОРОННИХ *.ДЛЛ и АКТИВ_ИКС...
или свой код дописывать в каждую последующую прогу - но так не даст работать WinXP, или использовать АПИ-функции. Пошёл по второму пути, есть АПИ-функция CreateFile, работу её понимаю, уже нашёл и описание к ней (только описание как создавать файлы и работать с ними), а описание как работать с объектом(в частности с ЛПТ) нету!!!! Пишу такой код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const INVALID_HANDLE_VALUE = -1
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const CREATE_ALWAYS = 2
Private Const CREATE_NEW = 1
Private Const OPEN_ALWAYS = 4
Private Const OPEN_EXISTING = 3
Private Const TRUNCATE_EXISTING = 5
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const FILE_FLAG_OVERLAPPED = &H40000000
Private Sub Form_Load()
Dim m_hFile As Byte
m_hFile = CreateFile("LPT1", GENERIC_READ, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0&)
MsgBox m_hFile
CloseHandle m_hFile
End Sub
Но на строкевызова функции CreateFile программа выдаёт переполнение (ERROR 6 "OVERFLOW")!!!! Что делать???? Неужели нельзя из ВБ работать с железом???? Да темболее АПИ-функциями - Винда же сама их использует!!!!
А вот ещё, в области где идёт декларация функции етсть выражение "CreateFileA", а в некоторых примерах которые я просматривал пишут так "CreateFileW" - чем они отличаются???? Может тут загвоздка???
WitC
15.10.2006, 18:09
Есть контакт!!!
При вызове CreateFile переменную хэндла объявляем не Byte а Long.
При декларации АПИ-функции (где подключаем Kernel32) прописываем CreateFileW вместо CreateFileА (кстати вопрос ещё стоит чем они отличаются между собой)

Да, и ещё....
АПИ-функции FileRead и FileWrite - описание плзззззз.
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
15.10.2006, 18:22
1) Не плодите лишние сообщения
2) Опять же - для лентяев и бездельников: http://www.google.com/search?hl=en&lr=&newwindow=1&q=API+funct ions http://www.google.com/search?hl=en&lr=&newwindow=1&q=API+funct ions
0
0 / 0 / 0
Регистрация: 15.10.2006
Сообщений: 29
15.10.2006, 19:38
В Виндозе есть зарезервированные имена файлов, которые нельзя создать(LPT1,COMn и другие...)
Когда пользуешся функцией CreatFile имя файла нужно указывать с двуеточием ("LPT1:")!!!
Попробуй! Если заработает, сообщи!
Я тоже кодю железо на вб, только я использую длл. А про это открытие порта с ":" я еще помню из QB, открытие СОМ порта там так осуществляется!
0
WitC
16.10.2006, 00:14
Спасибо. вот с открытием ужо разобрался, работает без ":", код выше, и приписка чуть ниже.....
А вот запись и чтение - вот это штука!!!! Функции WriteFile и ReadFile, а вот где различить с какого пина берём значение??? Или на какой пин пишем???? Есть предположение, что нам надо записать туда просто число, а оно само раскидает на соответствующие пины, например запишем число 3, а оно выдаст на пины такой код 00000011 (ну байт, в смысле). С этим согласен, где-то удобно. А мне надо установки записывать и читать соответственно на "База+2" и "База+1" (т.е. на втором и первом подрегистре)! А как до них добраться в этом случае???
0 / 0 / 0
Регистрация: 15.10.2006
Сообщений: 29
16.10.2006, 19:03
Что-то не совсем ясно что за база1...база2....
Если есть опыт работы с XOR, AND,OR то тогда работать с ком портом будет одно удовольствие! Наппример 00110011 and 11001100 получается 11111111
11110011 xor 11000011 получиться(если я не ошибаюсь) 00110000 как действует OR пока так и не понял
для понятности вопроса напиши, что должна делать твоя прога(как я понимаю у тебя должно получиться что-то вроде эмулятора.....)
0
2 / 2 / 0
Регистрация: 09.09.2009
Сообщений: 118
17.10.2006, 00:56
WitC (08.10.2006)
теперь встала проблема читать и записывать в порт ЛПТ данные, конфигурить его по своему усмотрению.
Немного неясно, для чего возникла эта проблема. Если надо управлять принтером, то существуют так называемые ESC-последовательности, которые описываются в руководстве к принтеру, т.е. посылается код 27Н и символ(ы), указанные в руководстве принтера для включения, например режим Bold для выводимого текста.
А если ЛПТ-порт используется для работы с каким-нибудь разрабатываемым устройством или уже готовым (например, я был свидетелем, как когда-то ребята, у которых я учился проги писать, разработали свой программатор ПЗУшек, используя ЛПТ-порт, сам программатор тоже они сделали <IMG style="CURSOR: pointer" onclick="AddSmileyIcon('smileys/smiley3.gif')" alt=Shocked src="http://conf.nautilus2001.ru/smileys/smiley3.gif" border=0>), ну вот здесь надо иметь в виду вот что.
Разъем ЛПТ состоит из 25 штырьков.
Из них 8 - это как раз тот байт данных, который посылается на принтер. Но дело в том, что эти выходы доступны только для записи, т.е. записать - передать байт можно, а вот принять через него нельзя. Это как раз порт 378Н.
Есть еще 8 штырьков, которые поделены для использования 2-мя портами.
Порт 37аН - управление принтером. Вот здесь как раз первые 5 бит этого порта (т.е. 5 штырьков разъема) как раз двунаправленные, т.е. можно записывать в них, при этом сигналы будут уходит в твоё устройство, или считывать биты из устройства. Порт 379Н - чтение состояния принтера. Здесь используются 3 старших бита (еще 3 штырька) Эти биты доступны только для чтения,т.е. принимают биты с твоего внешнего устройства.
Остальные штырьки - это Gnd (т.е. Земля и Корпус)
Для электронщика этого вполне хватает, чтобы кучу всяких устройств сделать <IMG style="CURSOR: pointer" onclick="AddSmileyIcon('smileys/smiley4.gif')" alt="Big smile" src="http://conf.nautilus2001.ru/smileys/smiley4.gif" border=0>
Вот кстати ссылка, где расписаны штырьки и описывается устройство, разработанное на основе стандартного ЛПТ-разъема:
http://imlab.narod.ru/Electron/Recorder/Recorder.htm http://imlab.narod.ru/Electron/Recorder/Recorder.htm
0
WitC
17.10.2006, 01:29
Ну вот, а я тут мучаюсь!!!! С портом всё ясно!!! Спасибо за содержание!
Вот только ЛПТ может работать в нескольких режимах (Centronics, SPP, ЕРР, ЕСР), режимы переключаются программно там надо писать в управляющие регистры, но с этим потом.
Программа которая данна выше открывает порт (создаёт файл) с помощью CreateFile (API). С помощью WriteFile и ReadFile можно читать и записывать в порт (т.е. в файл). Я пишу следующее:
Visual Basic
1
2
3
4
Data_In = 43
num = WriteFile(m_hFile, Data_In, 1, 1, 0)
num = ReadFile(m_hFile, Data_Out, 1, 1, 0)
CloseHandle m_hFile
Т.е. пишу в файл 43 (Data_In и Data_Out - тип Byte), после записи num=1 (т.е. прошло). При чтении num то же =1, а Data_Out=0, а в файле (который создан появляется ASCII(43)="+"). Вот такая арифметика! Что куда записалось???? Где что прочиталось???? Может там надо цикл делать на чтение??? А до какого предела????
Программа мне нужна для управления нестандартным устройством, каким ещё сам не знаю, это демо попросили сделать, показать что умею, но с железом чёт не прёт, а время поджимает!!!
СПАСИБО, есть ЛЮДИ которые время от времени напишут, направят!!!!!!!
WitC
17.10.2006, 03:29
Прошу прощения у Alexey Spirin за подробное описание своих действий! Думаю в следующий раз Вам не придётся столь переутруждать себя для лентяев.
А на счёт чтения и записи - разобрался! Просто создал две функции и положил туда код - один на чтение, второй на запись, и после каждой обработки закрывал Хендл. Вот так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function Read_LPT()
    m_hFile = CreateFile("LPT1", GENERIC_READ, FILE_SHARE_READ, 0&, _
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0&)
    num1 = ReadFile(m_hFile, Data_Out, 1, b, &O0)
   General_Form.Text3.Text = CByte(Data_Out)
    CloseHandle m_hFile
End Function
Public Function Write_LPT()
    m_hFile = CreateFile("LPT1", GENERIC_WRITE, FILE_SHARE_READ, 0&, _
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0&)
    Data_In = General_Form.Text2.Text
    num = WriteFile(m_hFile, Data_In, 1, a, &O0)
    CloseHandle m_hFile
End Function
Просто ВБ как Ассемблер - сделал действие - примени его!
У меня такая проблема была с WinSock, когда я писал Клиент-Сервер, при вызове Winsock.Send из одной функции несколько раз подряд, все данные склеивались в одно сообщение. Надо было Winsock.Send один раз вызвать и завершать функцию, потом если данне остались ещё раз вызывать одну и ту же функцию. Пришлось делать буфер, выдумывать формат пакета где бы указывалось число пакетов и т.д.......
Вот и тут подобное надо делать будет.
А теперь вопрос: КАК ПРОГРАММИРОВАТЬ СЛУЖЕБНЫЕ ДАННЫЕ (ДАННЫЕ СОСТОЯНИЯ)??????????????????
Да ещё, как вычислять какие пины окажутся "зажжёнными" при определённом коде, например 43???????????????????????
2 / 2 / 0
Регистрация: 09.09.2009
Сообщений: 118
17.10.2006, 04:14
Хорошо, представьте себе, что я решу Вашу проблему за $1000 и разберусь во всех Ваших проблемах <IMG style="CURSOR: pointer" onclick="AddSmileyIcon('smileys/smiley1.gif')" alt=Smile src="http://conf.nautilus2001.ru/smileys/smiley1.gif" border=0>. Если это не устраивает, попробуйте вникнуть в процесс изучения проблемы, VB я оч.люблю, но ... для работы с портами лучше всего использовать Ассемблер, Си (++), да и Дельфи подойдет, но главное, вникнуть в физический смысл процесса записи в порт и чтения из порта.
ЗЫ. На сайте, который я рекомендовал есть проги на Дельфи, попробуй разобраться в них.
ЗЫЫ. Это не означает, что это нельзя написать на VB, но просто я не стал бы мучить БГ, а попробовал бы использовать другие ресурсы.

Удачи!<IMG style="CURSOR: pointer" onclick="AddSmileyIcon('smileys/smiley1.gif')" alt=Smile src="http://conf.nautilus2001.ru/smileys/smiley1.gif" border=0>
0
0 / 0 / 0
Регистрация: 15.10.2006
Сообщений: 29
17.10.2006, 16:40
Переведи циферку 43 в бинарный код! получиться 00101011 т.е. включены d0,d1,d3,d5 - ножки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2006, 16:40
Помогаю со студенческими работами здесь

Помогите разобраться.
В чем разница между turbo pascal и free pascal? ну кроме названия и то что free пошёл у меня на windows 7 (x86)

Подскажите литературу по матлабу по работе с комплексными числами
Подскажите кто-нибудь какую-нибудь литературу по матлабу по работе с комплексными числами!! Чтобы хорошо, понятно и побольше было! А то...

ПОМОГИТЕ РАЗОБРАТЬСЯ
Первый раз работаю с ФУНКЦИЯМИ и не могу разобраться в чем ошибка !!! #include &lt;iostream&gt; #include &lt;string&gt; using...

Помогите разобраться с ЯД
Я дико извиняюсь, если вопрос нубский и много раз здесь обсуждался - но все таки попрошу помочь разобраться. Как настроить объявление,...

Помогите разобраться.
В течении последней недели 2 раза падала и возвращалась на прежние позиции морда Faza220.ru, а сегодня вообще выпала из индекса. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru