1 (edited by newusr 2018-07-31 12:05:00)

Topic: Подключение периферийных устройств через драйвер

Добрый день.
Можно ли в программе подключить устройство через драйвер в виде DLL?
Хочу попробовать создать базу с подключением контрольно кассовой техники и выводом информации на неё.
Есть готовый код на Delphi, можно ли его реализовать в Myvisualdatabase?

uses SysUtils, DrvFRLib_TLB;  // драйвер DrvFR.DLL
//...
procedure TestSale;
var
Drv: TDrvFR;
begin
Drv := TDrvFR.Create(nil); // Создание объекта драйвера
try
Drv.ConnectionType := 6; // подключение через TCP socket
Drv.ProtocolType := 0; // Стандартный протокол Drv.IPAddress := '192.168.0.2'; // IP адрес ККТ
Drv.UseIPAddress := True; // Используем свойство IPAddress
// для указания адреса ККТ
// (в противном случае будет
// использоваться свойство
// ComputerName)
Drv.TCPPort := 7778; // TCP Порт ККТ
Drv.Timeout := 5000; // Таймаут в мс
Drv.Password := 30; // Пароль системного администратора
if Drv.Connect <> 0 then // Проверяем подключение
raise Exception.Create(Drv.ResultCodeDescription);
// ну и т.д. ....
if Drv.FNCloseCheckEx <> 0 then
raise Exception.Create(Drv.ResultCodeDescription);
finally

Ну или просто подключить драйвер так получится?

function Code(s: PChar; Key: integer): PChar; stdcall;
         external 'DrvFR.DLL';

Re: Подключение периферийных устройств через драйвер

К сожалению такое не поддерживается.
Можно реализовать только через COM порт.

Dmitry.

Re: Подключение периферийных устройств через драйвер

Понятно, спасибо. Буду ковырять СОМ порт...

Re: Подключение периферийных устройств через драйвер

А подскажите, как правильно сформировать строку для передачи в СОМ порт, например мне нужно передать последовательность байт (НЕХ): 02 05 13 1E 00 00 00 08. Разбираюсь с примером "COM port", который нашёл здесь на форуме.

Re: Подключение периферийных устройств через драйвер

Пожалуйста, скачайте последнюю бета версию
https://www.dropbox.com/s/wutj7mnux7f3a … a.zip?dl=0


Добавил функцию WriteBytes для класса TComPort, пример:

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
    Arr: array of byte;
begin
  SetLength(Arr, 8);
  Arr[0] := $02;
  Arr[1] := $05;
  Arr[2] := $13;
  Arr[3] := $1E;
  Arr[4] := $00;
  Arr[5] := $00;
  Arr[6] := $00;
  Arr[7] := $08;
  ComPort.WriteBytes(Arr);
end;

К сожалению нету устройства, чтобы протестировать работу, дайте знать, работает ли данный метод.

Dmitry.

6 (edited by newusr 2018-08-01 13:27:43)

Re: Подключение периферийных устройств через драйвер

Спасибо, Дмитрий, получилось!
А как можно также в массив получить данные из СОМ порта?

Re: Подключение периферийных устройств через драйвер

newusr wrote:

Спасибо, Дмитрий, получилось!
А как можно также в массив получить данные из СОМ порта?

Попробуйте так, в массиве Arr будут данные. Дайте знать, работает ли код


procedure OnRecieveComData(Sender: TObject; Data: string);
var
    Arr: array of byte;
    i, c: integer;
begin
  SetLength(Arr, Length(Data));
  c := Length(Arr)-1;
  for i := 0 to c do
      Arr[i] := Ord(Data[i+1]);
end;
Dmitry.

8 (edited by newusr 2018-08-02 15:29:24)

Re: Подключение периферийных устройств через драйвер

Супер! Всё получилось. Спасибо.

Похоже я собственный драйвер для ККТ напишу...

Re: Подключение периферийных устройств через драйвер

newusr wrote:

Супер! Всё получилось. Спасибо.

Похоже я собственный драйвер для ККТ напишу...

а можно будет потом проект глянуть??)))

Re: Подключение периферийных устройств через драйвер

pt.82 wrote:

а можно будет потом проект глянуть??)))

А что конкретно интересует?
"Свой драйвер" это я, конечно, сильно сказал, планирую реализовать всего лишь одну функцию протокола ККТ v 2.0, для передачи строки символов для печати на ККТ.

Re: Подключение периферийных устройств через драйвер

newusr wrote:
pt.82 wrote:

а можно будет потом проект глянуть??)))

А что конкретно интересует?
"Свой драйвер" это я, конечно, сильно сказал, планирую реализовать всего лишь одну функцию протокола ККТ v 2.0, для передачи строки символов для печати на ККТ.

тоже планировал сделать печать чеков с ккм, но руки никак не доходят. у меня штрих-онлайн, хотел посмотреть как реализовано будет

12 (edited by newusr 2018-08-17 12:41:33)

Re: Подключение периферийных устройств через драйвер

Вот, на базе найденного здесь примера допилил для печати на ККТ.
В программе можно "погудеть" ККМ и вывести на печать строку.
https://yadi.sk/d/I4GMp4043aKcny
А вообще я забросил идею печати через СОМ порт и занялся написанием модуля на Delphi, гораздо интереснее получается.

Re: Подключение периферийных устройств через драйвер

Спасибо за пример.

Dmitry.

Re: Подключение периферийных устройств через драйвер

Если бы в программе можно было провернуть такую штуку: CreateOleObject('Addin.DrvFR') программа заиграла бы совсем другими красками, появилась бы возможность написать полноценную кассовую программу.

Re: Подключение периферийных устройств через драйвер

newusr wrote:

Если бы в программе можно было провернуть такую штуку: CreateOleObject('Addin.DrvFR') программа заиграла бы совсем другими красками, появилась бы возможность написать полноценную кассовую программу.

Можно, тут найдете пример для работы с Excel через OLE
http://myvisualdatabase.com/forum/viewt … 296#p23296

Dmitry.

16 (edited by newusr 2018-08-20 07:10:08)

Re: Подключение периферийных устройств через драйвер

Получилось подключиться к ККТ, вот пример подключения:

procedure Form1_OnShow (Sender: TObject; Action: string);
var
  Drv: Variant;
begin
  Drv:=CreateOleObject('Addin.DrvFR');
  Drv.ConnectionType := 6; // подключение через TCP socket
  Drv.ProtocolType := 0; // Стандартный протокол
  Drv.IPAddress := '192.168.137.111'; // IP адрес ККТ
  Drv.UseIPAddress := True; // Используем свойство IPAddress
  Drv.TCPPort := 7778; // TCP Порт ККТ
  Drv.Timeout := 5000; // Таймаут в мс
  Drv.Password := 30; // Пароль системного администратора
  if Drv.Connect <> 0 then showmessage('Not Connected((( ERR_MSG:'+inttostr(Drv.Connect)) else showmessage('Connected!!!');
  Drv.Beep; //гудок для сигнализации подключения
end;

17 (edited by sibprogsistem 2018-08-20 09:28:00)

Re: Подключение периферийных устройств через драйвер

производители ккм убивают мня!  Эмуляторов нет и не предвидется, для отладки поключения отправляют в магазин за кассой

У вас есть ШТРИХ-М?

Re: Подключение периферийных устройств через драйвер

вот примеры для  драйвера ШТРИХ-М

Post's attachments

Attachment icon DrvFR 4.14 Samples Borland Delphi 7.0.rar 324.33 kb, 507 downloads since 2018-08-20 

Re: Подключение периферийных устройств через драйвер

К сожалению нету.

Dmitry.

Re: Подключение периферийных устройств через драйвер

Добрый день.
Нужно ли после создания объекта Drv:=CreateOleObject('Addin.DrvFR')
освобождать объект Drv.Free ?

Re: Подключение периферийных устройств через драйвер

Просто присвойте переменной 0

Drv := 0;
Dmitry.

Re: Подключение периферийных устройств через драйвер

newusr wrote:

Получилось подключиться к ККТ, вот пример подключения:

procedure Form1_OnShow (Sender: TObject; Action: string);
var
  Drv: Variant;
begin
  Drv:=CreateOleObject('Addin.DrvFR');
  Drv.ConnectionType := 6; // подключение через TCP socket
  Drv.ProtocolType := 0; // Стандартный протокол
  Drv.IPAddress := '192.168.137.111'; // IP адрес ККТ
  Drv.UseIPAddress := True; // Используем свойство IPAddress
  Drv.TCPPort := 7778; // TCP Порт ККТ
  Drv.Timeout := 5000; // Таймаут в мс
  Drv.Password := 30; // Пароль системного администратора
  if Drv.Connect <> 0 then showmessage('Not Connected((( ERR_MSG:'+inttostr(Drv.Connect)) else showmessage('Connected!!!');
  Drv.Beep; //гудок для сигнализации подключения
end;

Вам удалось респечатать чек?

Re: Подключение периферийных устройств через драйвер

sibprogsistem wrote:
newusr wrote:

Получилось подключиться к ККТ, вот пример подключения:
...............

Вам удалось респечатать чек?

Да

Re: Подключение периферийных устройств через драйвер

@vovka3003

Thanks a lot!!! I was looking for a way to call dll since months.

Большое спасибо!!! Я искал способ позвонить в DLL с месяцев. (google translate)

while(! success=retry());
https://jihem.itch.io

25 (edited by pavel.leshchishin 2018-12-17 18:07:28)

Re: Подключение периферийных устройств через драйвер

jihem wrote:

Супер! Всё получилось. Спасибо.

Похоже я собственный драйвер пак солюшен для ККТ напишу...

Действительно громкое заявление...