Управление изображением на мониторе через COM порт

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

а какая возможна?
пункта класс там вообще нет
(\_(\
(=' :') радиоКотЭ
(,('')('')
Реклама
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

как это нет?

type
TForm1 = class(TForm)
...
end
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

вот так, вы не пояснили предыдущий пост , програма не будет работать в ХP?
Вложения
2010-12-24_163411.jpg
(11.88 КБ) 394 скачивания
(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

программа написанная в статье - не будет. под WXP, к портам надо обращаться через драйвер в интерфейсной части драйвера есть заголовки процедур/функций. они должны быть описаны в документации на драйвер. или следует использовать API.
ибо
(стр.8: приведённые выше примеры работоспособны лишь в 95/98/МЕ)
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

как-то я это упустил из вида
то есть нужна DLL библиотека к которой будет обращатся программа?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Реклама
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

для низкоуровнего управления - да.
тут нашел такую инфу. это для общего понимания.
Пухич писал(а):Проблема в том, что к портам вас в Виндах просто так не пустят, я бы порекомендовал юзать драйвер giveio.sys. Он прекрасно вяжется и с Дельфями, и с Билдером.
драйвер giveio.sys(или подобный) должен содержать внешние процедуры управления портами.
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

я читал это, а в дельфи можно создать dll или проще вернутся к паскалю?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

дело не в дельфях и паскале, это почти одно и то-же.
дело в WXP.
dll в дельфях создать конечно можно. только нужен .sys, или .vxd. может проще использовать уже готовый giveio.sys?
вот еще одна возможность
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

Murlock в паскале порт опрашивался, т.к. он в DOSe
что нужно что бы его использование стало возможным? хотя без драйвера и паскаль добратся до порта не смог
(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

под WXP той "DOS" нету. нужно полюбому использовать сторонний драйвер.
... или отказаться от попыток использования СОМ-порта нестандартным образом.

я уже предлагал проверенный лично мной вариант использования 1-WireNet для решения Вашей задачи. для этого от Вас нужен только 1 адаптер 1-WireNet и 1 МС dallas DS2408- шикарный универсальный параллельный регистр ВВ.
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

ну так и используется сторонний драйвер giveio.sys, как программу с ним завязать?

1 адаптер 1-WireNet и 1 МС dallas DS2408----не нашел нигде внятного описания этих устройств, что это?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

адаптер - аккуратненький девайс, вставляемый в СОМ или USB порт и имеющий стандартный телефонный разъём на выходе. внятное описание и алгоритмы имеются в комплекте поставки драйверов. и находятся в свободном доступе.
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

вот какбэ программа на базе драйвера. если верить автору,пойдет для моих нестандартных целей или это для обычного обмена данными через COM?
из пояснений в проге я так понял что сначала нужно пользовать конец того что представленно , а в конце

Procedure OutPort(port:word; value:byte);stdcall;
Function InPort(port:word):byte;stdcall;

Procedure OutPortW(port:word; value:word);stdcall;
Function InPortW(port:word):word;stdcall; вот это уже используя под свои нужды

http://kladovka.net.ru/index.cgi?pid=list&rid=310

Код: Выделить всё


  {*==============*}
  {*                               DELPHI                               *}
  {*                    "WinNT/Win2000/WinXP/Win2003"                   *}
  {*                   Модуль для работы с портами I/O.                 *}
  {*    В этом модуле был использован всем известный драйвер "giveio"   *}
  {*          Автор Модуля   : Nurzhanov Askar (NikNet/Arazel).         *}
  {*                  Автор Драйвера : Дейл Робертс.                    *}
  {*                                2005                                *}
  {*==============*}

unit giveio;


interface

uses windows, winsvc;

{*==============*}
{* Основные ф-ций *----------------------------------------------------}
{*==============*}
  // ВНИМАНИЕ!!! Использовать в самом начале
  Procedure InitDriver;

  // После ф-ций InitDrv можете использовать эти

  Procedure OutPort(port:word; value:byte);stdcall;
  Function  InPort(port:word):byte;stdcall;

  Procedure OutPortW(port:word; value:word);stdcall;
  Function  InPortW(port:word):word;stdcall;

  Function  InPortDW(Port: Word):cardinal;stdcall;
  procedure OutPortDW( Port: word; value:cardinal);stdcall;

  // ВНИМАНИЕ!!! Использовать в самом конце
  Procedure DoneDriver;



implementation


uses sysutils;

Var
  hSCMan,
  hService,
  hDevice             : SC_HANDLE;
  lpServiceArgVectors : PChar;
  temp                : LongBool;
  serviceStatus       : TServiceStatus;
  DeviceName          : String;


  Procedure InitDriver;
  Begin
     lpServiceArgVectors:=nil;
     DeviceName:='giveio';
     hSCMan:=OpenSCManager(Nil,Nil,SC_MANAGER_ALL_ACCESS);
     hService:=CreateService(
     hSCMan,
     pChar(DeviceName),
     pChar(DeviceName),
     SERVICE_ALL_ACCESS,
     SERVICE_KERNEL_DRIVER,
     SERVICE_DEMAND_START,
     SERVICE_ERROR_NORMAL,
     PChar(ExtractFilePath(ParamStr(0))+'giveio.sys'),nil,nil,nil,nil,nil);
     If hService<>0 then
     CloseServiceHandle(hService);
     hService:=OpenService(hSCMan,pChar(DeviceName),SERVICE_ALL_ACCESS);
     If hService<>0 then
     begin
       StartService(hService,0,PChar(lpServiceArgVectors));
       CloseServiceHandle(hService);
     end;
     hDevice:=CreateFile(pChar('\\.\'+DeviceName),
     GENERIC_READ or GENERIC_WRITE,0,PSECURITY_DESCRIPTOR(nil),
     OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  end;

  Procedure DoneDriver;
  Begin
  CloseHandle(hDevice);
  hService := OpenService(hSCMan,PChar(DeviceName), SERVICE_ALL_ACCESS);
  if hService <> 0 then
  Temp := ControlService(hService,SERVICE_CONTROL_STOP,ServiceStatus);
  if (hService <> 0) then
  CloseServiceHandle(hService);
  hService := OpenService(hSCMan,PChar(DeviceName), SERVICE_ALL_ACCESS);
  temp := DeleteService(hService);
  CloseServiceHandle(hService);
  end;


  Procedure OutPort(port:word; value:byte);assembler;stdcall;
  asm
    mov al, value
    mov dx, port
    out dx, ax
  end;

  function InPort(port:word):byte;assembler;stdcall;
  asm
    mov dx,port
    in al,dx
    mov Result,al
  end;

  Procedure OutPortW(port:word; value:word);assembler;stdcall;
  asm
    mov ax, value
    mov dx, port
    out dx, ax
  end;

  function InPortW(port:word):word;assembler;stdcall;
  asm
    mov dx,port
    in ax,dx
    mov Result,ax
  end;

  Function  InPortDW(Port: Word):cardinal;stdcall;
  Begin
   asm
     mov DX, Port;
     in  EAX, DX;
     mov Result, EAX;
   end;
  end;

  procedure OutPortDW( Port: word; value:cardinal);stdcall;
   Begin
    asm
      mov DX, Port;
      mov EAX, value;
      out DX, EAX;
    end;
   end;




end.

(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

немного не так.
initdriver следует вызвать событием Form1.OnCreate
Donedriver следует вызвать событием Form1.OnDestroy
и нигде их больше не вызывать.
Ваши основные функции - байтовые InPort и OutPort.
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

т.е. программа примет вид

Код: Выделить всё

unit giveio;


interface

uses windows, winsvc;
implementation


uses sysutils;

Var
  hSCMan,
  hService,
  hDevice             : SC_HANDLE;
  lpServiceArgVectors : PChar;
  temp                : LongBool;
  serviceStatus       : TServiceStatus;
  DeviceName          : String;


  Procedure InitDriver;
  Begin
     lpServiceArgVectors:=nil;
     DeviceName:='giveio';
     hSCMan:=OpenSCManager(Nil,Nil,SC_MANAGER_ALL_ACCESS);
     hService:=CreateService(
     hSCMan,
     pChar(DeviceName),
     pChar(DeviceName),
     SERVICE_ALL_ACCESS,
     SERVICE_KERNEL_DRIVER,
     SERVICE_DEMAND_START,
     SERVICE_ERROR_NORMAL,
     PChar(ExtractFilePath(ParamStr(0))+'giveio.sys'),nil,nil,nil,nil,nil);
     If hService<>0 then
     CloseServiceHandle(hService);
     hService:=OpenService(hSCMan,pChar(DeviceName),SERVICE_ALL_ACCESS);
     If hService<>0 then
     begin
       StartService(hService,0,PChar(lpServiceArgVectors));
       CloseServiceHandle(hService);
     end;
     hDevice:=CreateFile(pChar('\\.\'+DeviceName),
     GENERIC_READ or GENERIC_WRITE,0,PSECURITY_DESCRIPTOR(nil),
     OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  end;
 


 работа с порто м с помощью процедур

Procedure OutPort(port:word; value:byte);stdcall;
  Function  InPort(port:word):byte;stdcall;

  Procedure OutPortW(port:word; value:word);stdcall;
  Function  InPortW(port:word):word;stdcall;

  Function  InPortDW(Port: Word):cardinal;stdcall;
  procedure OutPortDW( Port: word; value:cardinal);stdcall;



и закрытие драйвера 


 Procedure DoneDriver;
  Begin
  CloseHandle(hDevice);
  hService := OpenService(hSCMan,PChar(DeviceName), SERVICE_ALL_ACCESS);
  if hService <> 0 then
  Temp := ControlService(hService,SERVICE_CONTROL_STOP,ServiceStatus);
  if (hService <> 0) then
  CloseServiceHandle(hService);
  hService := OpenService(hSCMan,PChar(DeviceName), SERVICE_ALL_ACCESS);
  temp := DeleteService(hService);
  CloseServiceHandle(hService);
  end;



а это что тогда ?


Procedure OutPort(port:word; value:byte);assembler;stdcall;
  asm
    mov al, value
    mov dx, port
    out dx, ax
  end;

  function InPort(port:word):byte;assembler;stdcall;
  asm
    mov dx,port
    in al,dx
    mov Result,al
  end;

  Procedure OutPortW(port:word; value:word);assembler;stdcall;
  asm
    mov ax, value
    mov dx, port
    out dx, ax
  end;

  function InPortW(port:word):word;assembler;stdcall;
  asm
    mov dx,port
    in ax,dx
    mov Result,ax
  end;

  Function  InPortDW(Port: Word):cardinal;stdcall;
  Begin
   asm
     mov DX, Port;
     in  EAX, DX;
     mov Result, EAX;
   end;
  end;

  procedure OutPortDW( Port: word; value:cardinal);stdcall;
   Begin
    asm
      mov DX, Port;
      mov EAX, value;
      out DX, EAX;
    end;
   end;




end.


 




(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

Эй,эй. Вы так ффсё попортите.
то, что было ИЗНАЧАЛЬНО(до правок)прописывается в USES( uses... giveio )Вашей программы и компилируется отдельным юнитом
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

Есть подозрение, что пора самим написать..... :(
Знание - сила!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

Есть подозрение, что пора самим написать.....
не нужно,меня остатки совести будут по ночам покусывать,просто подсказки более ....подробно если можно

Murlock вот то что я привел по ссылке что из себя представляет?
то, что было ИЗНАЧАЛЬНО(до правок)прописывается в USES( uses... giveio )Вашей программы и компилируется отдельным юнитом
изначально до правок это та программа которую я первой приводил и которая не работала ее нужно загнать сюда в ту которую я привел второй?юнит это подпрограмма?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Друг Кота
Сообщения: 6282
Зарегистрирован: Чт май 13, 2010 23:42:03
Откуда: Минск

Сообщение Murlock »

гы.
всё очень просто.
1. не нервничайте и не паникуйте.
2. ваш файл giveio.pas пропишите в Ваш проект(там где окно)
коммандой меню project->add to project, выбираете фаил диалогом открыть, и готово.
после этого в Вашей программе становятся доступны функции и процедуры, описанные в интерфейсной части файла giveio.pas
" Если на небе есть ангелы, то, их небесное воинство построено на принципах мафии"
У.Н. Румфорд.
----------------------------------------
http://www.youtube.com/watch?v=qWfIYU9Zzs4 А.К. "Легион"
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

не нервничайте и не паникуйте.
поздно не нервничать,я уже все волосы на жопе вырвал :)))

ну если я его открываю указанным выше способом,он открывается так же нежели я его просто открываю по 2 щелчку .или есть что-то недоступное взгляду?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Ответить

Вернуться в «Интеграция с ПК»