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

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

09.10.2006, 03:16. Показов 4556. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru