|
[ Igor. @ 03.06.2006. 15:15 ] @
| Pozdrav
da li neko moze da mi pomogne nekim primerom, treba da posaljem komandu Fiskalnom printeru preko rs232 i da procitam sta je fiskalni vratio,
imam komponentu SerialNG i nije mi jasno kako se salju komande. U uputstvu pise sledece:
FP550 Galeb
45H(69) Dnevni fiskalni izvestaj
Prostor za podatke : [<Option>,[N][A]]
Odgovor: Closure, Total, TotalX
Opcioni parametri : '0', '1', '2'
Znaci kako da tu komandu 69 posaljem printeru i procitam sta je vratio.
Hvala unapred.
|
[ _deran_ @ 03.06.2006. 15:48 ] @
primanje:
Code:
procedure TForm1.SerialPortNG1.RxClusterEvent(Sender: TObject);
begin
if SerialPortNG1.NextClusterSize >= 0 then
showmessage('Primio: '+SerialPortNG1.ReadNextClusterAsString);
end;
slanje:
Code:
SerialPortNG1.SendString('ovo se salje'); // 45H = 'E'
Samo dobro podesi port, otvori ga i pazi na linefeed.
[ Vladica Savić @ 03.06.2006. 16:25 ] @
Ovim se jos nisam bavio, pa me zato i zanima, moze li neko da malo opsirnije pojasni kako sve funkcionise sa prenosom podataka sa kompa na fiskalnu kasu... 
Koliko sam ja informisan, program koji sluzi za npr. za unos novih artikla u kasu generise jednu datoteku u unapred zadatom formatu (Ime proizvoda, prva cena, druga cena, i sl) , i kasnije se ta ista datoteka salje preko seriskog porta na kasu. To bi trebalo da je to u globalu, a sad mene zanima moze li neko da malo bolje pojasni kako sve to funkcionise... 
Pozdrav Vlada
[ _deran_ @ 03.06.2006. 18:25 ] @
Ako vec imas program koji ce da posreduje izmedju tvog programa i kase, onda ne moras da se mucis oko serijske komunikacije nego samo napravis fajl u odredjenom formatu i smestis ga u odredjeni folder. Rezidentni program bi trebao da ga prihvati i posalje na kasu, i mozda vrati rezultat u nekom drugom fajlu.
[ marcha @ 03.06.2006. 19:29 ] @
U knjizici koja dolazi uz FP 550 imas format sadrzaja paketa koji trebas da prosledis uredjaju. Potrebno je da komandu koju saljes upakujes u zadati format, zajedno sa odgovarajucim parametrima, uradis cheksum i pustis je na port. Posle slanja poruke osluskujes port dok ne vrati odgovor ili ne istekne max predvidjeno vreme za odgovor. Vreme je definisano protokolom uredjaja.
Evo kako moja komponenta (DmxFP) pakuje taj paket.
Posto se radi o komercijanoj stvari ne mogu da ti posaljem bas sve o tome, ali ti zapitkuj pa ces verovatno doci do nekog resenja. DmxFP komponenta za komunikaciju sa uredjajem koristi ComPort Library ver. 3.0 .
Code:
function TCustomFU.PakovanjePaketa(dCMD: integer; Data: string): string;
var
dDuzina, dSEQ: integer;
begin
Result := '';
dDuzina := Length(Data) + $4 + $20;
//$4(LEN,SEQ,CMD,Postamble) $20
Randomize;
repeat
dSEQ := RandomRange($20, $7F);
until dSEQ <> SEQ;
SEQ := dSEQ;
Result := Chr(dPreamble) + Chr(dDuzina) +
Chr(dSEQ) + //Sekvenca
Chr(dCMD) + //Komanda
Data + Chr(dPostamble);
Result := Result + BccStr(Copy(Result, 2, dDuzina)) + Chr(dTerminator);
end;
[ Igor. @ 03.06.2006. 20:38 ] @
Ljudi hvala
uspeo sam da odradim ovo ali naprimer kada posaljem komandu stampac nekad reaguje odmah a nekad tek posle treceg ili cetvrtog klika iako sacekam i po par sekundi. Nisam uspeo da procitam sta stampac vraca pa ne znam da li je to normalno ili ne?
I jos nesto da li je pametno da se zakacim na port i nepustam ga ili da se pre svake komande konektujem i posle odgovora stampaca diskonektujem.
[ savkic @ 04.06.2006. 00:26 ] @
> uspeo sam da odradim ovo ali naprimer kada posaljem komandu stampac nekad reaguje odmah a nekad tek posle treceg ili cetvrtog klika iako sacekam i po par
> sekundi. Nisam uspeo da procitam sta stampac vraca pa ne znam da li je to normalno ili ne?
Galeb posle svake komande vraća odgovor, rok je tu negde do 100ms. Pretpostavljam da postoji neki problem sa načinom na koji koristiš komponentu ili kako očekuješ odgovore. Ne poznajem tu komponentu koju koristiš pa ne mogu pomoći oko nje, jedino mogu preporučiti TComPort za serijsku komunikaciju. Sa Galebom počni od jednostavnijih komandi, na primer prikazivanje teksta na displeju, štampanje dijagnostike, provera statusa, može i presek stanja ili dnevni izveštaj koji si ti probao (vodi računa ako radiš sa fiskalizovanim primerkom da je njihov broj ograničen).
> I jos nesto da li je pametno da se zakacim na port i nepustam ga ili da se pre svake komande konektujem i posle odgovora
> stampaca diskonektujem.
Otvori port pri startovanju i drži ga, ako pišeš fiskalni drajver i treba da imaš ekskluzivnu komunikaciju sa uređajem. Inače, pravljenje kvalitetnog drajvera je užasno težak posao, a još ako radiš sa više modela... Razmisli o nekom gotovom rešenju, ima kvalitetnih drajvera a beše i Galeb ima svoj (besplatan) drajver. Ako se ipak odlučiš za pisanje i negde zaglaviš, pitaj.
[ Igor. @ 04.06.2006. 14:22 ] @
Ok thanks probacu TComPort, znam da je broj dnev. izvestaja ogranicen imam nefiskalizovan stampac i treba da napravim neku komponentu ili DLL koji bi komunicirao sa stampacem. Da ne objasnjavam znam da postoje razni programi i drajveri od strane galeba, dosta se i razumem u rad fisklanih stampaca i sve sam to vec radio sa FI500, MetaLIne itd. Jednostavno sam dobio stampac i zadatak da napravim direktnu komunikaciju iz nekog mog programa.
Probao sam po vasim uputstvima da stampam text na displeju, da odstampam Dnevni izvestaj i presek stanja , nefiskalni text pa cak i fiskalni isecak. Problem sa reagovanjem stampaca sam resio tako sto posaljem bilo koju drugu komandu stampacu ( npr komanda za stanje stampaca ) i posle toga ono sto mi treba i onda radi na svaki klik.
Marcha tvoj primer mi je pomogao da shvatim kako sve to funkcionise, ali nisam uspeo da raspakujem poruku koju stampac vraca. Ako imas opet neki primer bilo bi super.
[ marcha @ 04.06.2006. 17:20 ] @
Code:
function TCustomFP.DataOfAnswer(Answer: string): string;
var
PosPre, PosPost, PosDel, PosTerm: integer;
Status: string;
begin
PosPre := Pos(Chr(dPreamble), Answer);
PosDel := Pos(Chr(dDelimiter), Answer);
PosPost := Pos(Chr(dPostamble), Answer);
PosTerm := Pos(Chr(dTerminator), Answer);
if (PosPre <> 1) or (PosPre > PosDel) or (PosDel > PosPost) or
(PosPost > PosTerm) then
DoPrinterNotResponding;
Status := Copy(Answer, PosDel + 1, PosPost - PosDel - 1);
CheckStatusBits(Status);
Result := Copy(Answer, PosPre + 4, PosDel - PosPre - 4);
end;
[ Vladica Savić @ 05.06.2006. 09:59 ] @
Ima li ko vec odradjen FULL PROJECT koji moze da se vidi kao Demo... 
[ savkic @ 05.06.2006. 12:29 ] @
> Ima li ko vec odradjen FULL PROJECT koji moze da se vidi kao Demo...
Misliš na fiskalni drajver? Pogledaj http://www.wings.co.yu/download/wingsfiskal.zip.
[ Igor. @ 07.06.2006. 12:59 ] @
Marcha hvala sve sam odradio, sad ostaje samo da se sve lepo odradi i slozi u jedan npr dll ili koponentu.
Hvala svima na pomoci
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|