Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Купюроприемник CashCode, протокол ccnet   Найти похожие ветки 

 
Darth Avenger   (2007-03-01 10:34) [0]

Приветствую мастеров!

Кто-нибудь разбирался с протоколом ccnet (купюроприемник cashcode sm)? Если да, то можно поделиться исходником для изучения?

P.S. Единственное, что я пока добился от купюроприёмника - это его soft reset - в com-порт тупо кидается последовательность #02#03#06#48#65#179#13. И это, вроде, работает.


 
Алексей666   (2007-03-01 10:51) [1]

http://www.cashcode.com/docHTML/PDFfiles/CCNET%20d1%20v.2.4.pdf


 
Darth Avenger   (2007-03-01 11:36) [2]

Мануал хороший, спасибо. Но не сильно он меня вразумил. Может всё-же исходник найдётся? :)


 
Алексей_666   (2007-03-01 11:44) [3]

Исходников у меня нет. Но надо следить, чтобы режим
работы ком порта совпадал с режимом принтера.
Еще там можгут быть разные командные режимы
Циклический и обычный.


 
Darth Avenger   (2007-03-02 10:37) [4]

Спасибо всем сочувствующим :) Разобрался сам. Теперь могу поделиться исходником - делает ресет, затем инициализирует, ждёт купюру, выдаёт номинал купюры.


 
Rouse_ ©   (2007-03-02 11:27) [5]

А деньгу она выдает? :) Если да, то делись ;)


 
Darth Avenger   (2007-03-02 13:53) [6]

Не, не выдаёт :) Оффтоп: да и купюроприёмник CashCode SM не рассчитан на выдачу сдачи, хотя это и нарушает права потребителя. Короче - если мы пишем софт для платежных терминалах, то указывать, что "терминал сдачу не даёт" обязательно! :)


 
tesseract ©   (2007-03-02 13:57) [7]


>  "терминал сдачу не даёт"


Тогда терминал может получить сдачи :-)  

Естественно купюроприёмник сдачу не выдаёт - нужен купюропередатчик :-)


 
Германн ©   (2007-03-02 14:26) [8]

Сдачу пусть выдает Хоппер. 5-ти рублевыми монетами. :)


 
selivan   (2007-03-13 20:39) [9]

Darth Avenger , если не сложно, вышлите на мыло мне примерчик-то :)
vis[at]nip.ru


 
AGaupsher   (2007-04-02 11:37) [10]

Можно и мне исходник на alexey@maximedia.ru
запарился уже разбираться - не читает из порта и все. Посмотрю хоть как у людей. Буду очень признателен.


 
SlOPS ©   (2007-04-02 15:20) [11]

И мне slavchick@mail.ru


 
tesseract ©   (2007-04-03 10:50) [12]

И такие люди делают банкоматы!

А вы ещё справшиваете, чего они постоянно не работают и сдачу не выдают.......


 
Алекс_ТК   (2007-04-04 15:20) [13]

Если можно и мне.... очень нужно.... Alma_15@mail.ru


 
Just-a-man ©   (2007-04-06 18:42) [14]

Можно и мне? just-a-man@bk.ru
Пожалуйста!


 
Германн ©   (2007-04-07 02:00) [15]


> tesseract ©   (03.04.07 10:50) [12]
>
> И такие люди делают банкоматы!
>

И эти люди запрещают мне ковырятся в носу! :)

И не говори. Вопрос платёжных терминалов и торговых автоматов и ... (лень продолжать) сейчас очень актуален. И, имхо, повторяется ситуация с "Компьютерными клубами"! Никто не хочет покупать "готовые решения". Все предпочитают нанять за грошИ студента!


 
tesseract ©   (2007-04-07 11:58) [16]


> И не говори. Вопрос платёжных терминалов и торговых автоматов
> и ... (лень продолжать) сейчас очень актуален.


Да я сам на "типо того" работал, щас ушёл - не ценят там труд.


 
Just-a-man ©   (2007-04-09 17:00) [17]

Здравствуйте!

Кто-нибудь получил исходник от Darth Avenger??
Если да, пришлите, пожалуйста на just-a-man@bk.ru


 
Алекс_ТК   (2007-04-10 09:47) [18]

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


 
ПРОСТО СТРАННИК ©   (2007-04-17 13:36) [19]

То что надо!!! Мне бы тоже не помешало на сей чудо посмотреть... Если можно - incdo@mail.ru


 
Алекс_ТК   (2007-04-18 15:45) [20]

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


 
SteepeWolf   (2007-04-19 05:58) [21]

Подскажите как деактивировать прибор после получения купюр.


 
Алекс_ТК   (2007-04-19 19:00) [22]

По кнопочке, или по таймауту...


 
SteepeWolf   (2007-04-20 05:07) [23]

И то и другое если можно


 
Алекс_ТК   (2007-04-20 09:34) [24]

По кнопочке: для запуска POLL-цикла используем отдельный поток, тормозим кнопочкой, запускаем команду reset.
По таймауту: делать пока .... то-то


 
SteepeWolf   (2007-04-20 10:13) [25]

Спасибо.
Уже сам разобрался


 
xazan ©   (2007-04-20 16:11) [26]

Приветствую мастеров! У кого есть исходник, могли бы мне кинуть. xazan@bk.ru. Буду очень признателен


 
xazan ©   (2007-04-21 11:40) [27]

Мастера ну скиньте пожалуйста! очень нужно.  xazan@bk.ru


 
AsTroT   (2007-04-27 16:09) [28]

Скинь и мне плиззз astrot1988 [at] gmail.com


 
Stimo   (2007-04-30 14:35) [29]

Выложите прямо тут - никому не помешает. Выкладывайте все, кто чего-то добился в этом вопросе, и кому не жалко


 
Алекс_ТК   (2007-05-03 13:21) [30]

//Профи! Не смейтесь, написал как смог...//
program CashCode_SM1;

uses
 Forms,
 Unit1 in "..\Test_CachCode\Unit1.pas" {Form1},
 Unit2 in "..\Test_CachCode\Unit2.pas";

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


 
Алекс_ТК   (2007-05-03 13:22) [31]

//форма
object Form1: TForm1
 Left = 323
 Top = 183
 BiDiMode = bdLeftToRight
 BorderStyle = bsSingle
 Caption = "Программа тестирования CashCode-SM"
 ClientHeight = 415
 ClientWidth = 702
 Color = clMedGray
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 ParentBiDiMode = False
 Position = poDefault
 Visible = True
 OnActivate = FormActivate
 PixelsPerInch = 96
 TextHeight = 13
 object Label1: TLabel
   Left = 96
   Top = 16
   Width = 79
   Height = 13
   Caption = "№ серийный:"
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -11
   Font.Name = "MS Sans Serif"
   Font.Style = [fsBold]
   ParentFont = False
 end
 object Label3: TLabel
   Left = 8
   Top = 16
   Width = 62
   Height = 13
   Caption = "№ партии:"
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -11
   Font.Name = "MS Sans Serif"
   Font.Style = [fsBold]
   ParentFont = False
 end
 object Label2: TLabel
   Left = 192
   Top = 16
   Width = 123
   Height = 13
   Caption = "Достоинство купюр:"
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -11
   Font.Name = "MS Sans Serif"
   Font.Style = [fsBold]
   ParentFont = False
 end
 object Label4: TLabel
   Left = 512
   Top = 224
   Width = 177
   Height = 49
   Alignment = taRightJustify
   AutoSize = False
   BiDiMode = bdLeftToRight
   Caption = "0.00"
   Font.Charset = RUSSIAN_CHARSET
   Font.Color = clWindowText
   Font.Height = -48
   Font.Name = "Times New Roman"
   Font.Style = [fsBold]
   ParentBiDiMode = False
   ParentFont = False
   Layout = tlCenter
 end
 object Label5: TLabel
   Left = 585
   Top = 288
   Width = 105
   Height = 49
   Alignment = taRightJustify
   AutoSize = False
   Caption = "0"
   Font.Charset = RUSSIAN_CHARSET
   Font.Color = clWindowText
   Font.Height = -48
   Font.Name = "Times New Roman"
   Font.Style = [fsBold]
   ParentFont = False
   Layout = tlCenter
 end
 object Label6: TLabel
   Left = 376
   Top = 227
   Width = 121
   Height = 46
   Alignment = taRightJustify
   AutoSize = False
   BiDiMode = bdLeftToRight
   Caption = "Сумма:"
   Font.Charset = RUSSIAN_CHARSET
   Font.Color = clWindowText
   Font.Height = -32
   Font.Name = "Times New Roman"
   Font.Style = [fsBold]
   ParentBiDiMode = False
   ParentFont = False
   Layout = tlCenter
 end
 object Label7: TLabel
   Left = 218
   Top = 296
   Width = 281
   Height = 41
   Alignment = taRightJustify
   AutoSize = False
   BiDiMode = bdLeftToRight
   Caption = "Количество купюр:"
   Font.Charset = RUSSIAN_CHARSET
   Font.Color = clWindowText
   Font.Height = -32
   Font.Name = "Times New Roman"
   Font.Style = [fsBold]
   ParentBiDiMode = False
   ParentFont = False
   Layout = tlCenter
 end
 object Label8: TLabel
   Left = 586
   Top = 351
   Width = 105
   Height = 50
   Alignment = taRightJustify
   AutoSize = False
   Caption = "0"
   Font.Charset = RUSSIAN_CHARSET
   Font.Color = clWindowText
   Font.Height = -48
   Font.Name = "Times New Roman"
   Font.Style = [fsBold]
   ParentFont = False
   Layout = tlCenter
 end
 object Label9: TLabel
   Left = 221
   Top = 356
   Width = 281
   Height = 45
   Alignment = taRightJustify
   AutoSize = False
   BiDiMode = bdLeftToRight
   Caption = "Номинал купюры:"
   Font.Charset = RUSSIAN_CHARSET
   Font.Color = clWindowText
   Font.Height = -32
   Font.Name = "Times New Roman"
   Font.Style = [fsBold]
   ParentBiDiMode = False
   ParentFont = False
   Layout = tlCenter
 end
 object Label10: TLabel
   Left = 376
   Top = 16
   Width = 143
   Height = 13
   Caption = "Трассировка запросов:"
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -11
   Font.Name = "MS Sans Serif"
   Font.Style = [fsBold]
   ParentFont = False
 end
 object Button3: TButton
   Left = 192
   Top = 64
   Width = 177
   Height = 25
   Caption = "Принимаемые купюры"
   TabOrder = 0
   OnClick = Button3Click
 end
 object Button4: TButton
   Left = 8
   Top = 128
   Width = 177
   Height = 25
   Caption = "Получить статус"
   TabOrder = 1
   OnClick = Button4Click
 end
 object Button5: TButton
   Left = 192
   Top = 160
   Width = 177
   Height = 25
   Caption = "Выключение"
   TabOrder = 2
   OnClick = Button5Click
 end
 object Button6: TButton
   Left = 192
   Top = 96
   Width = 177
   Height = 25
   Caption = "Старт POLL"
   TabOrder = 3
   OnClick = Button6Click
 end
 object Memo1: TMemo
   Left = 376
   Top = 32
   Width = 313
   Height = 185
   ScrollBars = ssVertical
   TabOrder = 4
 end
 object Button7: TButton
   Left = 192
   Top = 128
   Width = 177
   Height = 25
   Caption = "Стоп POLL"
   TabOrder = 5
   OnClick = Button7Click
 end
 object Button8: TButton
   Left = 8
   Top = 96
   Width = 177
   Height = 25
   Caption = "Перезагрузка"
   TabOrder = 6
   OnClick = Button8Click
 end
 object Button9: TButton
   Left = 8
   Top = 64
   Width = 177
   Height = 25
   Caption = "Инициализация"
   TabOrder = 7
   OnClick = Button9Click
 end
 object Edit6: TEdit
   Left = 8
   Top = 32
   Width = 81
   Height = 21
   BevelOuter = bvNone
   BiDiMode = bdLeftToRight
   Color = clScrollBar
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowFrame
   Font.Height = -11
   Font.Name = "MS Sans Serif"
   Font.Pitch = fpFixed
   Font.Style = [fsBold]
   ParentBiDiMode = False
   ParentFont = False
   TabOrder = 9
 end
 object Edit7: TEdit
   Left = 96
   Top = 32
   Width = 89
   Height = 21
   BevelOuter = bvSpace
   BiDiMode = bdLeftToRight
   Color = clScrollBar
   Ctl3D = True
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -11
   Font.Name = "MS Sans Serif"
   Font.Style = [fsBold]
   ParentBiDiMode = False
   ParentCtl3D = False
   ParentFont = False
   TabOrder = 8
 end
 object Button10: TButton
   Left = 8
   Top = 160
   Width = 177
   Height = 25
   Caption = "Режим ожидания купюры"
   TabOrder = 10
   OnClick = Button10Click
 end
 object Edit8: TEdit
   Left = 192
   Top = 32
   Width = 177
   Height = 21
   BiDiMode = bdLeftToRight
   CharCase = ecLowerCase
   Color = clScrollBar
   Ctl3D = True
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -11
   Font.Name = "MS Sans Serif"
   Font.Style = [fsBold]
   ParentBiDiMode = False
   ParentCtl3D = False
   ParentFont = False
   TabOrder = 11
 end
 object ComboBox1: TComboBox
   Left = 8
   Top = 192
   Width = 177
   Height = 21
   Style = csDropDownList
   ItemHeight = 13
   ItemIndex = 0
   TabOrder = 12
   Text = "Com1:"
   OnChange = ComboBox1Change
   Items.Strings = (
     "Com1:"
     "Com2:"
     "Com3:"
     "Com4:"
     "Com5:"
     "Com6:"
     "Com7:")
 end
end


 
Алекс_ТК   (2007-05-03 13:24) [32]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Unit2;

type
 TForm1 = class(TForm)
   Button3: TButton;
   Button4: TButton;
   Button5: TButton;
   Button6: TButton;
   Button7: TButton;
   Button8: TButton;
   Button9: TButton;
   Edit6: TEdit;
   Edit7: TEdit;
   Label1: TLabel;
   Label3: TLabel;
   Button10: TButton;
   Memo1: TMemo;
   Edit8: TEdit;
   Label2: TLabel;
   Label4: TLabel;
   Label5: TLabel;
   Label6: TLabel;
   Label7: TLabel;
   Label8: TLabel;
   Label9: TLabel;
   Label10: TLabel;
   ComboBox1: TComboBox;
   procedure Button3Click(Sender: TObject);
   procedure Button4Click(Sender: TObject);
   procedure Button5Click(Sender: TObject);
   procedure Button6Click(Sender: TObject);
   procedure Button7Click(Sender: TObject);
   procedure Button8Click(Sender: TObject);
   procedure Button9Click(Sender: TObject);
   procedure Button10Click(Sender: TObject);
   procedure FormActivate(Sender: TObject);
   procedure ComboBox1Change(Sender: TObject);

 private
   { Private declarations }
 public
   { Public declarations }
    TPotok : Potok;
    procedure UpdateSumm;
 end;
 // объява длл функций
 //procedure PDConnect(Var ComPortss : String);   StdCall;
 //procedure PDDisConnect;                        StdCall;
 //procedure PDPoll;                              StdCall;
 //procedure PDStopPoll(var StopPolle : Boolean); StdCall;
 //function  LastSumm:integer;                    StdCall;
const
ConReACK : array[1..6] of Byte = ($02,$03,$06,$00,$C2,$82);
ConReset : array[1..6] of Byte = ($02,$03,$06,$30,$41,$B3);
ConGetSt : array[1..6] of Byte = ($02,$03,$06,$31,$C8,$A2);
ConStPoll: array[1..6] of Byte = ($02,$03,$06,$33,$DA,$81);
ConIdent : array[1..6] of Byte = ($02,$03,$06,$37,$FE,$C7);
ConGetBT : array[1..6] of Byte = ($02,$03,$06,$41,$4F,$D1);
ConStack : array[1..6] of Byte = ($02,$03,$06,$35,$EC,$E4);
ConReturn: array[1..6] of Byte = ($02,$03,$06,$36,$77,$D6);
ConHold  : array[1..6] of Byte = ($02,$03,$06,$38,$09,$3F);
ConExtBD : array[1..6] of Byte = ($02,$03,$06,$3A,$1B,$1C);
ConReqSt : array[1..6] of Byte = ($02,$03,$06,$60,$C4,$E1);
ConEnBT  : array[1..12] of Byte = ($02,$03,$0C,$34,$FF,$FF,$FF,$00,$00,$00,$B5,$C1);
ConDiBT  : array[1..12] of Byte = ($02,$03,$0C,$34,$00,$00,$00,$00,$00,$00,$17,$0C);

var
 Form1    : TForm1;
 ComPorts : string;
 ComFile  : THandle;
 ReadAr   : array[1..255] of byte;
 BytesWritten: DWORD;
 BytesRead   : DWORD;

function ArrInStr(InDtn: array of byte; DatLng: dword) : string;
// блок длл функций
//procedure PDConnect;    external "CashCodeSM.dll" name "PDConnect";
//procedure PDDisConnect; external "CashCodeSM.dll" name "PDDisConnect";
//procedure PDPoll;       external "CashCodeSM.dll" name "PDPoll";
//procedure PDStopPoll;   external "CashCodeSM.dll" name "PDStopPoll";
//function  LastSumm;     external "CashCodeSM.dll" name "LastSumm";
//
implementation

{$R *.dfm}

// Массив в строку
function ArrInStr(InDtn: array of byte; DatLng: dword) : string;
var
s: integer;
begin
Result := "";
for s:=0 to (DatLng-1) do
Result := Result+IntToStr(InDtn[s])+" ";
end;

//Раскладка в строку
function ASCIIToStr(AsciiString: string): string;
var
I, X, L, Lastpos: Integer;
CurDIGChar, CurrAddChar, RS: string;

begin
RESULT := "";
L := Length(AsciiString);
if L = 0 then
  Exit;
X := 0;
LASTPOS := 1;
repeat
  I := X;
  CurDIGChar := "";
  repeat
    I := I + 1;
    if AsciiString[I] <> "#" then
      CurDIGChar := CurDIGChar + AsciiString[I];
  until (AsciiString[I] = "#") or (i = l);
  X := I;
  if CurDIGChar <> "" then
  begin
    try
      CurrAddChar := CHR(STRTOINT(CurDIGChar));
    except CurrAddChar := "";
    end;
    Insert(CurrAddChar, RS, lastpos);
    LastPos := LastPos + Length(CurrAddChar);
  end;
until (X >= L) or (I >= L);
Result := RS;
end;

// OpenCOMPort
function OpenCOMPort: Boolean;
var
DeviceName: array[0..80] of Char;
begin
StrPCopy(DeviceName, ComPorts);
ComFile := CreateFile(DeviceName, GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if ComFile = INVALID_HANDLE_VALUE then
  Result := False
else
  Result := True;
end;

// SetupCOMPort
function SetupCOMPort: Boolean;
const
RxBufferSize = 256;
TxBufferSize = 256;
var
DCB: TDCB;
CommTimeouts: TCommTimeouts;

begin
Result := True;
if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then
  Result := False;
if not GetCommState(ComFile, DCB) then
  Result := False;
  DCB.BaudRate:=9600;
  DCB.ByteSize:=8;
  DCB.Parity:=noparity;
  DCB.StopBits:=ONESTOPBIT;
  DCB.Flags:=DTR_CONTROL_ENABLE;
if not SetCommState(ComFile, DCB) then
  Result := False;
with CommTimeouts do

begin
  ReadIntervalTimeout         := 400;
  ReadTotalTimeoutMultiplier  := 0;
  ReadTotalTimeoutConstant    := 400;
  WriteTotalTimeoutMultiplier := 0;
  WriteTotalTimeoutConstant   := 400;
end;

if not SetCommTimeouts(ComFile, CommTimeouts) then
  Result := False;
end;

// продолжение следует...


 
Алекс_ТК   (2007-05-03 13:25) [33]

// продолжение...
function ReadText: string;
var
i: integer;
begin
if ComFile = INVALID_HANDLE_VALUE then
  raise Exception.Create("Не открыта запись в Com порт");
if ReadFile(ComFile, ReadAr, SizeOf(ReadAr), BytesRead, nil) then
begin
 for i := 1 to BytesRead do
  Result := Result+IntToStr(ReadAr[i])+" ";
end
else
  raise Exception.Create("Ошибка приема данных:");
end;

// CloseCOMPort
procedure CloseCOMPort;
begin
CloseHandle(ComFile);
end;

// Перезагрузка
procedure GetReset;
begin
WriteFile(ComFile, ConReset, SizeOf(ConReset), BytesWritten, nil);
ReadFile(ComFile, ReadAr, SizeOf(ReadAr), BytesRead, nil);
end;

// Инициализация
procedure GetInisialise;
var
p: integer;
ResP1 : string;
ResP2 : string;
ResP3 : string;
ResP4 : string;
begin
WriteFile(ComFile, ConIdent, SizeOf(ConIdent), BytesWritten, nil);
ReadFile(ComFile, ReadAr, SizeOf(ReadAr), BytesRead, nil);
for p := 1 to BytesRead do
  begin
    if (p > 3) and (p < 15) then
       begin
         ResP1 := ResP1 + IntToStr(ReadAr[p])+"#";
         ResP2 := ASCIIToStr(ResP1);
    end;
    if (p > 18) and (p < 31) then
       begin
         ResP3 := ResP3 + IntToStr(ReadAr[p])+"#";
         ResP4 := ASCIIToStr(ResP3);
    end;
  end;
Form1.Edit6.Text := ResP2;
Form1.Edit7.Text := ResP4;
Sleep(100);
end;

// Получим номиналы купюр которые принимаем
procedure GetNominal;
var
p: integer;
ResP1, ResP2, ResP3, ResP4, ResP5, ResP6 : string;
begin

WriteFile(ComFile, ConGetBT, SizeOf(ConGetBT), BytesWritten, nil);
ReadFile(ComFile, ReadAr, SizeOf(ReadAr), BytesRead, nil);
for p := 1 to BytesRead do
  begin
    if (p > 13) and (p < 19) then ResP1 := "10";
    if (p > 18) and (p < 24) then ResP2 := "50";
    if (p > 23) and (p < 29) then ResP3 := "100";
    if (p > 28) and (p < 34) then ResP4 := "500";
    if (p > 33) and (p < 39) then ResP5 := "1000";
    if (p > 38) and (p < 44) then ResP6 := "5000";
  end;
  Form1.Edit8.Text := ResP1 + ", " + ResP2 + ", " + ResP3 + ", " + ResP4 + ", " + ResP5 + ", " + ResP6 ;
end;

// Вход в режим опроса
procedure GetPollStatys;
begin
WriteFile(ComFile, ConStPoll, SizeOf(ConStPoll), BytesWritten, nil);
end;

// Выключение
procedure GetShatDone;
begin
//PDDisConnect; // типа дял длл
//работа без длл
GetPollStatys;
Sleep(10);
WriteFile(ComFile, ConEnBT, SizeOf(ConEnBT), BytesWritten, nil);
Sleep(10);
ReadFile(ComFile, ReadAr, SizeOf(ReadAr), BytesRead, nil);
Sleep(10);
WriteFile(ComFile, ConDiBT, SizeOf(ConDiBT), BytesWritten, nil);
Sleep(10);
ReadFile(ComFile, ReadAr, SizeOf(ReadAr), BytesRead, nil);
Sleep(10);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
GetNominal;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
GetPollStatys;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
GetShatDone;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
TPotok.Terminate;        // добавил корректный тормоз потока
//PDStopPoll(StopPoll);  // длл
WriteFile(ComFile, ConDiBT, SizeOf(ConDiBT), BytesWritten, nil);
end;

procedure TForm1.UpdateSumm;   // синхрониз
begin
 Label4.Caption := IntToStr(SumBill)+".00";
 Label5.Caption := IntToStr(KolBill);
 Label8.Caption := IntToStr(LastBill);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
//PDPoll;  //для длл
// стартуем поток по умному
  TPotok := Potok.Create(True);
  TPotok.FreeOnTerminate := True;
  TPotok.Priority        := tpLower;
  TPotok.Resume;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
GetReset;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
GetInisialise;
end;

// Режим ожидания купюры
procedure TForm1.Button10Click(Sender: TObject);
begin
GetPollStatys;
sleep(10);
WriteFile(ComFile, ConEnBT, SizeOf(ConEnBT), BytesWritten, nil);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
CloseCOMPort;
ComPorts := ComboBox1.Items.Strings[ComboBox1.ItemIndex];
OpenCOMPort;
SetupCOMPort;
GetReset;
GetInisialise;
GetNominal;
end;

// При открытии формы Активируем порт и его установки
procedure TForm1.FormActivate(Sender: TObject);
begin
ComPorts := ComboBox1.Items.Strings[0];
//PDConnect(ComPorts); // длл
// работа без длл
OpenCOMPort;
SetupCOMPort;
GetReset;
GetInisialise;
GetNominal;
end;

end.


 
Алекс_ТК   (2007-05-03 13:25) [34]

//Юнит-поток
unit Unit2;

interface

uses
 Classes;
type
 Potok = class(TThread)
 private
   { Private declarations }
 protected
   procedure Execute; override;
 end;
var

SumBill  : Integer;
KolBill  : Integer;
LastBill : Integer;

implementation

uses Windows, SysUtils, Unit1;

{ Important: Methods and properties of objects in visual components can only be
 used in a method called using Synchronize, for example,
      Synchronize(UpdateCaption);
 and UpdateCaption could look like,
   procedure Potok.UpdateCaption;
   begin
     Form1.Caption := "Updated in a thread";
   end; }

{ Potok }

procedure Potok.Execute;
var
i: integer;
s: integer;
p: integer;
n: integer;
ResP : string;
begin

WriteFile(ComFile, ConIdent, SizeOf(ConIdent), BytesWritten, nil);
Sleep(10);
ReadFile(ComFile, ReadAr, SizeOf(ReadAr), BytesRead, nil);
Sleep(10);
i := 0;
s := 0;
n := 0;

repeat
WriteFile(ComFile, ConReACK, SizeOf(ConReACK), BytesWritten, nil);
Sleep(10);
WriteFile(ComFile, ConStPoll, SizeOf(ConStPoll), BytesWritten, nil);
Sleep(10);
ReadFile(ComFile, ReadAr, SizeOf(ReadAr), BytesRead, nil);
 Form1.Memo1.Lines.Add("<-- "+ArrInStr(ReadAr, BytesRead));
 if ReadAr[4] = 19 then Form1.Memo1.Lines.Add("** Инициализация **");
 if ReadAr[4] = 25 then
  begin
  Form1.Memo1.Lines.Add("** Ожидаю купюру **");
  WriteFile(ComFile, ConEnBT , SizeOf(ConEnBT) , BytesWritten, nil);
  Sleep(10);
  ReadFile (ComFile, ReadAr  , SizeOf(ReadAr)  , BytesRead   , nil);
  Sleep(10);
  end;
 if ReadAr[4] = 21 then Form1.Memo1.Lines.Add("****** Акцепт *****");
 if ReadAr[4] = 23 then Form1.Memo1.Lines.Add("******* Стэк ******");
 for p := 1 to 5 do
  ResP := ResP+IntToStr(ReadAr[p]);
  if ResP = "2371292"  then
  begin
   Form1.Memo1.Lines.Add("10 рублей");
   i := i + 1;
   s := s + 10;
   n := 10;
  end;
  if ResP = "2371293"  then
  begin
   Form1.Memo1.Lines.Add("50 рублей");
   i := i + 1;
   s := s + 50;
   n := 50;
  end;
  if ResP = "2371294"  then
  begin
   Form1.Memo1.Lines.Add("100 рублей");
   i := i + 1;
   s := s + 100;
   n := 100;
  end;
  if ResP = "2371295"  then
  begin
   Form1.Memo1.Lines.Add("500 рублей");
   i := i + 1;
   s := s + 500;
   n := 500;
  end;
  if ResP = "2371296"  then
  begin
   Form1.Memo1.Lines.Add("1000 рублей");
   i := i + 1;
   s := s + 1000;
   n := 1000;
  end;
  if ResP = "2371297"  then
  begin
   Form1.Memo1.Lines.Add("5000 рублей");
   i := i + 1;
   s := s + 5000;
   n := 5000;
  end;
  if ResP = "23728101" then Form1.Memo1.Lines.Add("Не съедобно");
  if ResP = "23728108" then Form1.Memo1.Lines.Add("Тоже не съедобно");
  if ResP = "23728100" then Form1.Memo1.Lines.Add("Разверни бамажку");
  Form1.Memo1.Lines.Add("<-- "+ResP);
  ResP := "";
  SumBill  := s;
  KolBill  := i;
  LastBill := n;
  Synchronize(Form1.UpdateSumm);
until Terminated;

Form1.Memo1.Lines.Add("** Тормозимся **");

WriteFile(ComFile, ConDiBT, SizeOf(ConDiBT), BytesWritten, nil);
Form1.Memo1.Lines.Add("--> "+ArrInStr(ConDiBT, BytesWritten));
ReadFile(ComFile, ReadAr, SizeOf(ReadAr), BytesRead, nil);
Form1.Memo1.Lines.Add("<-- "+ArrInStr(ReadAr, BytesRead));

WriteFile(ComFile, ConReACK, SizeOf(ConReACK), BytesWritten, nil);
Form1.Memo1.Lines.Add("--> "+ArrInStr(ConReACK, SizeOf(ConReACK)));

WriteFile(ComFile, ConStPoll, SizeOf(ConStPoll), BytesWritten, nil);
Form1.Memo1.Lines.Add("--> "+ArrInStr(ConStPoll, SizeOf(ConStPoll)));
ReadFile(ComFile, ReadAr, SizeOf(ReadAr), BytesRead, nil);
Form1.Memo1.Lines.Add("<-- "+ArrInStr(ReadAr, BytesRead));
end;

end.


 
Алекс_ТК   (2007-05-03 13:26) [35]

Вот...


 
ПРОСТО СТРАННИК ©   (2007-05-03 13:30) [36]

Алекс_ТК .
Что то не понятно тут с кодами, может выложешь куда нибудь архивчмк с программой, например на ifolder.ru, иль  будь добр на fullsux@mail.ru... В долгу не останусь... расчёты через Яндекс-деньги.


 
Алекс_ТК   (2007-05-04 08:48) [37]

Вопрос для профи: как теперь вогнать вышеизложенное в длл...
Столкнулся с проблемой извлечения значений переменных из потока...


 
technocode   (2007-05-04 14:41) [38]

Вот полные исходники для всех купюрников и принтеров..
только ковырятся надо:
Полные исхоники программы Ciberplat
http://www.technocode.ru/techno.html
пароль по запросу на ridall@mail.ru


 
Vinbudya   (2007-06-18 10:56) [39]

Есть C++ API и несколько примеров от производителя. Я писал на cachcode.com запрос и мне выслали исходники библиотеки (несколько исходных файлов, не собранных в проект) и хелп. Кому надо - мыльте, я перешлю.

А вообще я на .NET за пол дня весь протокол сделал. Ихний API имеет универсальный характер для всех типов устройств и очень накрученный. Надо его собирать в либу, потом делать враппер на .NET. Короче легкий путь споймать кучу багов :) Поэтому я не использовал.  У кого проект на плюсах можете сразу в проект вставлять исходники библиотеки и наслаждаться :)


 
имя   (2007-06-26 23:33) [40]

Удалено модератором



Страницы: 1 2 вся ветка

Форум: "WinAPI";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.6 MB
Время: 0.075 c
6-1197627723
Palladin
2007-12-14 13:22
2010.08.27
Indy и SSL


15-1273130087
Piter work
2010-05-06 11:14
2010.08.27
Miranda - не вижу сообщений из оффлайна


2-1273031451
Серг
2010-05-05 07:50
2010.08.27
Работа с массивом


2-1274344276
zamtmn
2010-05-20 12:31
2010.08.27
unicode->ascii


15-1268515802
Юрий
2010-03-14 00:30
2010.08.27
С днем рождения ! 14 марта 2010 воскресенье





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский