Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Купюроприемник 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 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.61 MB
Время: 0.053 c
2-1268605992
Дмитрий
2010-03-15 01:33
2010.08.27
отправка пакета ( TcpClient )


15-1272364526
TUser
2010-04-27 14:35
2010.08.27
Удаление комментариев и лишнего кода


2-1270554874
kyn66
2010-04-06 15:54
2010.08.27
TprogresssBar с отображением процентов


2-1273211356
slay64
2010-05-07 09:49
2010.08.27
Ошибка в запросе


2-1272400279
rizhiy87
2010-04-28 00:31
2010.08.27
TWebBrowser и сеансы