Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/49: Рейтинг темы: голосов - 49, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 38

Программирования LPT-порта

05.11.2012, 18:30. Показов 9489. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста! Программирования Lpt-порта, надо Builder, если есть на других средах, то тоже подойдет, только мне надо вся информация о исходнике и сам исходник! Жду! Заранее Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.11.2012, 18:30
Ответы с готовыми решениями:

Обработка LPT порта
Вечер добрый! Если кто работал с LPT в Builder, подскажите. Как связаться с ним, обрабатывать и отправлять сигналы?

Тестирование LPT порта
Здравствуйте. нашел в интернете код программы который может включить светодиод и отключить его. вот код #include...

Чтение из LPT порта
LPT порт в режиме EPP. С некоторой частотой на него приходит последовательность импульсов, которые надо прочитать. Читать в бесконечном...

22
504 / 247 / 75
Регистрация: 31.10.2010
Сообщений: 747
06.11.2012, 03:31
чаще работают с COM (RS232) но если для Windows то код будет зависеть от драйверов.
есть подробная информация у Архангельского в книге Механизмы Windows. Сети
0
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 38
06.11.2012, 06:59  [ТС]
Цитата Сообщение от RefSol Посмотреть сообщение
чаще работают с COM (RS232) но если для Windows то код будет зависеть от драйверов.
есть подробная информация у Архангельского в книге Механизмы Windows. Сети
Спасибо что уделили мне своё время, я вот о чем хочу спросить на какой среде лучше сделать свой проект? тема такая моя программа должна иметь Интерфейс, в интерфейсе находятся 8 кнопок, каждый из которых по отдельности должно работать, когда нажимаешь на первую кнопку, то она должна отправить сигнал логический 0 на 2 PIN в LPT порт, а у остальных должно быть логическая 1, когда нажимаешь 2-ю кнопку то она должно отправить сигнал логическую 0, а в 1-й кнопке должно быть логическая 1, как и у остальных, я видел другие примеры в инете, они Абстрактны, какой-нибудь совет дайте или не оконченную программу. чтоб был сам Исходник! Спасибо еще раз!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
06.11.2012, 10:53
VsV, в разделе Билдера как-то некорректно справшивать о другой среде разработки. Или не отклоняйтесь от тематики раздела, или обсуждайте общие вопросы в разделах типа "Обо всем".

Да и ваши 8 кнопок Билдер осилит смеясь.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
06.11.2012, 11:56
VsV, для "интерфейса" в вашем случае отлично подходят SpeedButton с ненулевым GroupIndex'ом. Для работы с портом можно использовать ntddpar.h и свое желание разбираться самостоятельно. Вот пример кода__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button1Click(TObject *Sender)
{     /*  use "ntddpar.h"   */
  HANDLE hLPT;
  DWORD  T, U;
  UCHAR buf[8] = { 0,1,2,4,8,16,32,64 }; 
  PAR_QUERY_INFORMATION * eInfo;
  PARCLASS_NEGOTIATION_MASK   RM, LM;
 
      T = 0x160018;
      RM.usReadMask  = 0x7FF;
      RM.usWriteMask = 0x7FF;
      hLPT = CreateFile("LPT1", GENERIC_WRITE, 0, NULL,
                OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
      if (DeviceIoControl( (hLPT, T,
         &RM, sizeof(PARCLASS_NEGOTIATION_MASK),
         &LM, sizeof(PARCLASS_NEGOTIATION_MASK), &U, NULL))
           WriteFile(hLPT, buf, 4, &U, NULL);
      else ShowMessage("DeviceControl "+FloatToStr(T));
      CloseHandle(hLPT);
}
но если вам все равно, на какой платформе писать..., то я просто не знаю...
1
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 38
06.11.2012, 17:00  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
VsV, для "интерфейса" в вашем случае отлично подходят SpeedButton с ненулевым GroupIndex'ом. Для работы с портом можно использовать ntddpar.h и свое желание разбираться самостоятельно. Вот пример кода__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button1Click(TObject *Sender)
{     /*  use "ntddpar.h"   */
  HANDLE hLPT;
  DWORD  T, U;
  UCHAR buf[8] = { 0,1,2,4,8,16,32,64 }; 
  PAR_QUERY_INFORMATION * eInfo;
  PARCLASS_NEGOTIATION_MASK   RM, LM;
 
      T = 0x160018;
      RM.usReadMask  = 0x7FF;
      RM.usWriteMask = 0x7FF;
      hLPT = CreateFile("LPT1", GENERIC_WRITE, 0, NULL,
                OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
      if (DeviceIoControl( (hLPT, T,
         &RM, sizeof(PARCLASS_NEGOTIATION_MASK),
         &LM, sizeof(PARCLASS_NEGOTIATION_MASK), &U, NULL))
           WriteFile(hLPT, buf, 4, &U, NULL);
      else ShowMessage("DeviceControl "+FloatToStr(T));
      CloseHandle(hLPT);
}
но если вам все равно, на какой платформе писать..., то я просто не знаю...
Спасибо что ответили! я по пробовал, но Билдер ругается вот инфо:
[C++ Error] Unit1.cpp(23): E2451 Undefined symbol 'PAR_QUERY_INFORMATION'
[C++ Error] Unit1.cpp(23): E2451 Undefined symbol 'eInfo'
[C++ Error] Unit1.cpp(24): E2451 Undefined symbol 'PARCLASS_NEGOTIATION_MASK'
[C++ Error] Unit1.cpp(24): E2379 Statement missing ;
[C++ Error] Unit1.cpp(27): E2451 Undefined symbol 'RM'
[C++ Error] Unit1.cpp(32): E2109 Not an allowed type
[C++ Error] Unit1.cpp(33): E2451 Undefined symbol 'LM'
[C++ Error] Unit1.cpp(33): E2109 Not an allowed type
[C++ Error] Unit1.cpp(33): E2193 Too few parameters in call to '__stdcall DeviceIoControl(void *,unsigned long,void *,unsigned long,void *,unsigned long,unsigned long *,_OVERLAPPED *)'
[C++ Error] Unit1.cpp(34): E2377 If statement missing )
[C++ Error] Unit1.cpp(35): E2054 Misplaced else
[C++ Warning] Unit1.cpp(37): W8004 'buf' is assigned a value that is never used
Может библиотеку установить inpout32.dll или драйве GiveIO.sys, как правильно использовать ваш код, если можно по конкретнее, я сам не смогу сделать буду рад если вы поможете!
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
06.11.2012, 18:29
Когда-то надо было по-быстрому набросать прогу для LPT. Для доступа я использовал giveio
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
HANDLE port;
bool IsOpen = false;
//---------------------------------------------------------------------------
void __fastcall Open_port()
{
 try
  {
   port = CreateFileW(L"\\\\.\\giveio", GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
   IsOpen = true;
  }
 catch(...)
  {
   IsOpen = false;
   ShowMessage(L"Error open port!!!");
  }
}
//---------------------------------------------------------------------------
void __fastcall Close_port()
{
 CloseHandle(port);
 port = NULL;
 IsOpen = false;
}
//---------------------------------------------------------------------------
unsigned char __fastcall Read_port()
{
 unsigned char State=0;
 DWORD b=0;
 if(IsOpen)
  {
   ReadFile(port,&State,1,&b,NULL);
//   State=~State;
  }
 return State;
}
//--------------------------------------------------------
void __fastcall Write_port(unsigned char Signal)
{
 if(IsOpen)
  {
   unsigned char State = Read_port()&Signal;
   WriteFile(port,&State,1,NULL,NULL);
  }
}
//---------------------------------------------------------------------------
Ну а дальше
C++
1
2
3
4
5
6
7
8
9
10
Write_port(1); // одна нога 
Write_port(2); // вторая
Write_port(4); // третяя
Write_port(8); // .....
Write_port(16);
Write_port(32);
Write_port(64);
Write_port(128); // восьмая
 
Write_port(3); //первая и вторая, короче думаю понятно
Хотя лучше эти 1,2,4,8,16,32,64,128 в #define обьявить
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
06.11.2012, 18:47
Файл ntddpar.h в стандартном наборе Билдера отсутствует; а его надо подключить:
#include "ntddpar.h" . Этот фрагмент, вроде, написан корректнее предыдущего (но я не проверял; должен выводить байт ААh)__
C++
1
2
3
4
5
6
7
8
9
10
11
12
  int siz = sizeof(PARCLASS_NEGOTIATION_MASK);
  PARCLASS_NEGOTIATION_MASK   RM, LM;
  DWORD U ;
  char data=0xAA;
      RM.usReadMask  = NULL;
      RM.usWriteMask = IEEE_COMPATIBILITY;
      HANDLE hLPT = CreateFile("LPT1", GENERIC_READ | GENERIC_WRITE,
                    0, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
      if (DeviceIoControl(hLPT,IOCTL_IEEE1284_NEGOTIATE,
              &RM,siz,&LM,siz,&U,NULL))
         WriteFile(hLPT,&data,(DWORD)1,&U,NULL);
      CloseHandle(hLPT);
Вложения
Тип файла: zip ntddpar.zip (1.9 Кб, 129 просмотров)
1
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
06.11.2012, 18:49
nick42, а вам спасибо, не знал о существовании ntddpar.h
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
06.11.2012, 19:00
Цитата Сообщение от _Dimon_ Посмотреть сообщение
nick42, а вам спасибо, не знал о существовании ntddpar.h
- написали на каком-то форуме "для ленивых", я и повелся... . Должно как бы работать в штатном варианте, - не используя специальные библиотеки. Но практически я с LPT не работал (мне только для сброса программатора нужно было), так что - полный вам простор для экспериментов...
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
06.11.2012, 19:05
Так в том и дело, что, например, для КОМ порта писать легко, и ничего не надо, а для ЛПТ у меня без вышеупомянутого драйвера ничего не получилось
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
06.11.2012, 19:12
есть такое дело. Но с Вистой (и позднее) не все прежние драйвера работают. Так что LPT - это штучка проблемнее COMов.
0
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 38
06.11.2012, 20:36  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
есть такое дело. Но с Вистой (и позднее) не все прежние драйвера работают. Так что LPT - это штучка проблемнее COMов.
[C++ Error] Unit1.cpp(34): E2193 Too few parameters in call to '__stdcall DeviceIoControl(void *,unsigned long,void *,unsigned long,void *,unsigned long,unsigned long *,_OVERLAPPED *)'
[C++ Error] Unit1.cpp(35): E2377 If statement missing )
[C++ Error] Unit1.cpp(36): E2054 Misplaced else
[C++ Warning] Unit1.cpp(38): W8004 'buf' is assigned a value that is never used

Вот опять ругается, я подключил файл ntddpar.h, и драйвер GIVEIO.SYS тоже добавил в реестр, вот такая ошибка, не знаю что делать дальше , а может в БИОС-е поставить ERR , там у меня стоит NORMAL, что посоветуете ?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
06.11.2012, 22:54
Цитата Сообщение от VsV Посмотреть сообщение
Вот опять ругается
В Биосе всё правильно, а ошибка... заочно трудно сказать. На всякий случай проверьте скобки (парность), особенно в записи if (DeviceIoControl(...
0
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 38
06.11.2012, 23:38  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
В Биосе всё правильно, а ошибка... заочно трудно сказать. На всякий случай проверьте скобки (парность), особенно в записи if (DeviceIoControl(...
Да я проверил все, оказывается пропустил одну закрывающую скобку, после этого выводиться только 1 ошибка вот она:
[C++ Error] Unit1.cpp(35): E2193 Too few parameters in call to '__stdcall DeviceIoControl(void *,unsigned long,void *,unsigned long,void *,unsigned long,unsigned long *,_OVERLAPPED *)'

а почему билдер это требует вроде все порядке должно быть? Уже должно было работать, где здесь ошибка я не понимаю?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.11.2012, 00:09
ну, ругается, что нарушен формат в параметрах функции DeviceIoControl; гадать бессмысленно, не видя текста...
0
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 38
07.11.2012, 01:48  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
ну, ругается, что нарушен формат в параметрах функции DeviceIoControl; гадать бессмысленно, не видя текста...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <vcl.h>
#pragma hdrstop
#include "ntddpar.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
/*  use "ntddpar.h"   */
  HANDLE hLPT;
  DWORD  T, U;
  UCHAR buf[8] = { 0,1,2,4,8,16,32,64 };
  PAR_QUERY_INFORMATION * eInfo;
  PARCLASS_NEGOTIATION_MASK   RM, LM;
      T = 0x160018;
      RM.usReadMask  = 0x7FF;
      RM.usWriteMask = 0x7FF;
      hLPT = CreateFile("LPT1", GENERIC_WRITE, 0, NULL,
                OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
      if (DeviceIoControl( (hLPT, T,
         &RM, sizeof(PARCLASS_NEGOTIATION_MASK),
         &LM, sizeof(PARCLASS_NEGOTIATION_MASK),
         &U, NULL)))
           WriteFile(hLPT, buf, 4, &U, NULL);
      else ShowMessage("DeviceControl "+FloatToStr(T));
      CloseHandle(hLPT);
}
Вот такою ошибку выводить:
[C++ Error] Unit1.cpp(35): E2193 Too few parameters in call to '__stdcall DeviceIoControl(void *,unsigned long,void *,unsigned long,void *,unsigned long,unsigned long *,_OVERLAPPED *)'
Что делать с DeviceIoControl ?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.11.2012, 10:39
сразу перед hLPT скобка лишняя; это моя ошибка. Но лучше использовать пример из поста №8 (я так думаю). То-есть правильно будет так:__
C++
1
2
3
4
5
      if (DeviceIoControl(hLPT, T,
         &RM, sizeof(PARCLASS_NEGOTIATION_MASK),
         &LM, sizeof(PARCLASS_NEGOTIATION_MASK),
         &U, NULL))
           WriteFile(hLPT, buf, 4, &U, NULL);
0
0 / 0 / 0
Регистрация: 03.05.2012
Сообщений: 38
07.11.2012, 17:50  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
VsV, для "интерфейса" в вашем случае отлично подходят SpeedButton с ненулевым GroupIndex'ом. Для работы с портом можно использовать ntddpar.h и свое желание разбираться самостоятельно.
Спасибо все работает, не выводить ни каких ошибок, а можно ли использовать компонент SpeedButton для этого кода, чтоб переключалось, когда используешь SpeedButton, если примеру два SpeedButton, то я где-то читал, можно в свойстве SpeedButton1 (AllowAllUp=false Down=false), а SpeedButton2 (AllowAllUp=false Down=true), то они между собой переключаются, но когда в GroupIndex пишу в обоих 0 , то они не переключаются, если 1 пишу все работает, вашем коде все работает по очереди 2,3,4,5,6.7,8,9, (имею виду PIN LPT-порта) ведь так ? и как мне использовать SpeedButton?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.11.2012, 18:20
например: пишете обработчик для первой кнопки__
C++
1
BYTE  bitt = ((TSpeedButton*)Sender)->Tag;
Остальным кнопкам указываете в качестве обработчика SpeedButton1Click - этот же обработчик (он "универсальный"), но для каждой кнопки ( SpeedButton ) в параметре Tag записываете ее "двоичный вес"; то-есть (с 1 по 8)... 1 2 4 8 16 32 64 128. А дальше в этом обработчике с полученным байтом bitt изголяетесь, как вам надо, - или прямо отправляете в порт, или предварительно инвертируете, если в конкретный бит нужно 0 записывать, а не 1.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.11.2012, 18:20
Помогаю со студенческими работами здесь

Программирование LPT порта
Мне нужно сделать недольшое устройство для компьютера, которое подключено к почту принтера. Как управлять этим портом? Я знаю, что там есть...

Опрос LPT порта
Есть LPT порт и два контакта. Необходимо написать программу которая при замыкании контактов в счетчик прибавляла 1. Контакты могут...

Эмуляция lpt порта на Windows XP
Существует задача, необходимо съэмулировать windows xp чтобы она поддерживала lpt порт который необходим для подключения принтера этикеток...

Создание виртуального LPT порта
Возможно ли создать виртуальный LPT на компе, у которого его нет? Пишу в этом разделе, потому что нужно написать программу в VB NET (или...

Определение адреса LPT порта
Уважаемые коллеги, У меня есть необходимость найти адрес LPT порта. Я написал такую функцию и поместил ее в DLL. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru